Voiture a midi : la batterie au-dessus du plancher n'est plus comptee comme du solaire (seul le surplus net, plus l'assistance >= 90 %)

This commit is contained in:
Tallagrand Thierry
2026-10-06 13:31:25 +02:00
parent 2272204a62
commit f189df588d
5 changed files with 97 additions and 17 deletions

View File

@@ -483,10 +483,18 @@ if (nightHcActive && Number.isFinite(socPct)) {
// meme tarif — fermer le contacteur a midi n'y gagnerait rien et etoufferait le
// solaire (installation sans injection).
//
// Ce que le solaire peut donner a la voiture avant son depart SANS toucher a
// la reserve de la nuit : l'energie de la batterie au-dessus du plancher
// « tenir jusqu'a la prochaine HC » evalue AU DEPART, plus le bilan net prevu
// (production - maison) d'ici le depart. Profil p50, comme required_soc.
// Ce que le solaire peut donner a la voiture avant son depart : le bilan net
// prevu (production - maison) d'ici le depart, profil p50 comme required_soc.
// Une batterie SOUS son plancher « tenir jusqu'a la prochaine HC » (evalue AU
// DEPART) est d'abord remontee par ce surplus.
// ⚠️ 06/10/2026 (proprietaire : « bascule automatique sur force_grid_now sauf si
// le solaire donne la charge ce midi ») : la batterie au-dessus de ce plancher
// n'est PLUS comptee. Le controleur ne donne pas la batterie a la voiture en
// journee (demarrage sur excedent, §36) sauf par l'assistance batterie, a partir
// de VEHICLE_BATTERY_ASSIST_SOC_PCT : seule la part au-dessus est comptee. Le
// 06/10 a 13:12, 4,08 kWh de batterie comptes donnaient « solaire suffisant »
// (5,86 pour 4,4) alors que le controleur attendait un excedent qui n'est pas
// venu : la JEEP serait partie a 15:30 sans charge.
// Le reseau est justifie quand le besoin de la voiture, borne par ce que son
// chargeur peut absorber avant le depart, depasse ce solaire.
//
@@ -504,6 +512,9 @@ if (nightHcActive && Number.isFinite(socPct)) {
// du contacteur coute 50 a 150 Wh de transitoire (§57), on exige un gain d'au
// moins trois fois ce cout.
const VEHICLE_GRID_MIN_SHORTFALL_KWH = 0.5;
// = batteryAssistSolarStartSocMin de BATTERY_CLOUD_LOCKS.js (verifie par un
// test qui lit le controleur : les deux valeurs ne peuvent pas diverger).
const VEHICLE_BATTERY_ASSIST_SOC_PCT = 90;
const vehicleChargerKw = num(input.vehicle_charger_kw, NaN);
const nowMsBalance = num(input.nowMs, Date.now());
const vehicleConnected = input.vehicle_connected === true || input.vehicle_connected === 'true';
@@ -538,10 +549,10 @@ if (vehicleRuleActive) {
// Difference SIGNEE : une batterie SOUS son plancher doit d'abord etre
// remontee par ce meme surplus avant que la voiture n'en voie un kWh.
const plancherDepart = Math.max(socFloorPct, vehicleFloorAtDeparturePct);
const batterieAuDessusKwh = socPct >= plancherDepart
? energyBetweenSoc(plancherDepart, socPct)
: -energyBetweenSoc(socPct, plancherDepart);
vehicleSolarKwh = Math.max(0, batterieAuDessusKwh + netKwh);
const manqueBatterieKwh = socPct >= plancherDepart ? 0 : energyBetweenSoc(socPct, plancherDepart);
const seuilAssist = Math.max(plancherDepart, VEHICLE_BATTERY_ASSIST_SOC_PCT);
const batterieAssistKwh = socPct > seuilAssist ? energyBetweenSoc(seuilAssist, socPct) : 0;
vehicleSolarKwh = Math.max(0, netKwh - manqueBatterieKwh) + batterieAssistKwh;
vehicleReachableKwh = Number.isFinite(vehicleChargerKw) && vehicleChargerKw > 0
? Math.min(vehicleNeedKwh, vehicleChargerKw * (vehicleDepartureMs - nowMsBalance) / 3600000)
: vehicleNeedKwh;