Controleur : trois ecritures jamais relayees (budget, verrou P12, reset borne) + garde-fou ; verrou P12 leve en fin de session

This commit is contained in:
Tallagrand Thierry
2026-10-01 07:26:28 +02:00
parent baf62bb3d5
commit eeaa7636b2
6 changed files with 101 additions and 7 deletions

View File

@@ -127,6 +127,34 @@ pushAction(
!!calls.helper_evcs_no_demand_filter_eval_at?.execute
);
// =====================================================
// ECRITURES CONDITIONNELLES OUBLIEES (01/10/2026)
// Produites par HA_SERVICE_CALLS_OUTPUT mais jamais relayees jusqu'ici :
// - verrou P12 (`night_battery_done`, une seule passe sur batterie) depuis
// le 15/09 ;
// - acquittement du bouton reset borne (momentane) depuis le 19/09 ;
// - budget voiture de la nuit fige (30/09) : la nuit du 30/09 la JEEP a pris
// 7,5 kWh sur la batterie au lieu du budget.
// Garde-fou : tests/golden/run.mjs verifie que tout appel produit est nomme ici.
// =====================================================
pushAction(
'helper_night_battery_done',
calls.helper_night_battery_done,
!!calls.helper_night_battery_done?.execute
);
pushAction(
'helper_reset_borne_ack',
calls.helper_reset_borne_ack,
!!calls.helper_reset_borne_ack?.execute
);
pushAction(
'helper_night_budget',
calls.helper_night_budget,
!!calls.helper_night_budget?.execute
);
// =====================================================
// DEMANDE RÉSEAU EDF SI SOURCE GRID
// =====================================================

View File

@@ -659,10 +659,16 @@ const nightBudgetReached =
nightBudgetDeliveredKwh >= nightBudget.budgetKwh - 0.05;
const nightChargeComplete = params.nightChargeMode === 'complete';
// Le verrou ne vaut QUE pendant la session de nuit (01/10/2026). Ecrit sous la
// forme `prev || …`, il restait vrai pour toujours une fois pose ; invisible
// tant que son ecriture n'atteignait pas HA (jamais relayee du 15/09 au 01/10).
// Fin de session (debranchement ou fin de fenetre HC) = verrou leve.
const nightBatterySurplusExhausted =
params.nightBatteryDonePrev ||
(nightSessionActive && parsed.soc <= nightBatterySurplusFloorPct) ||
(nightSessionActive && nightBudgetReached);
nightSessionActive && (
params.nightBatteryDonePrev ||
parsed.soc <= nightBatterySurplusFloorPct ||
nightBudgetReached
);
const nightBatterySurplusAvailable =
nightSessionActive &&