P11: reset du collant 'plein' au changement de véhicule (charging_time)
- incident 12/08: JEEP chargée -> débranchée -> VW branchée bloquée par le collant night_recovery_done_idle de la JEEP - snapshot +evcs_charging_time, INPUT_PARSE parseChargingTimeToSec - WINDOWS: sessionFresh (<=90s) neutralise vehicleChargeCompleted/ dayVehicleFullIdle/departureChargeDone/evcsStatusCharged - golden 36->39, validé live 05:00:30 (VW débloquée: recovery_done -> wait_grid_takeover) - HANDOFF §23 + MANUEL reset collant
This commit is contained in:
@@ -345,6 +345,19 @@ const nightTakeoverPrev =
|
||||
// débranchement (state vehicle_not_connected) ou à la fin de la fenêtre nuit.
|
||||
const prevSurplusState = (input.prev_surplus_state ?? '').toString().trim().toLowerCase();
|
||||
|
||||
// P11 (12/08/2026) : RESET du collant "véhicule plein" au CHANGEMENT DE
|
||||
// VÉHICULE. Incident 12/08 : JEEP chargée → night_recovery_done_idle collant ;
|
||||
// débranchement JEEP + branchement VW → l'état collant a survécu et bloquait
|
||||
// la VW (« charge terminée » = celle de la JEEP, pas de la VW).
|
||||
// Signal fiable : sensor.victron_evcs_charging_time repart de 0 à chaque
|
||||
// nouvelle connexion physique. Sous ~90 s → session neuve → on neutralise le
|
||||
// collant pour laisser le système RETESTER le véhicule fraîchement branché.
|
||||
const P11_FRESH_SESSION_MAX_SEC = 90;
|
||||
const sessionFresh =
|
||||
parsed.evcsVehicleConnected &&
|
||||
Number.isFinite(parsed.evcsChargingTimeSec) &&
|
||||
parsed.evcsChargingTimeSec <= P11_FRESH_SESSION_MAX_SEC;
|
||||
|
||||
// Fix D (08/08/2026) : le statut natif EVCS "charged" (3) vaut aussi fin de
|
||||
// charge, sans attendre le VehicleDemandFilter (désarmé si la session a été
|
||||
// stoppée par une garde, ex battery_current_hard_stop → détection tardive
|
||||
@@ -353,12 +366,16 @@ const prevSurplusState = (input.prev_surplus_state ?? '').toString().trim().toLo
|
||||
// sur un glitch de statut pendant une vraie charge. NB : le statut retombe
|
||||
// (3→1/6) dès l'ouverture du relais → la persistance est assurée par l'état
|
||||
// collant écrit par DECISION pendant la session (voir Fix E DECISION).
|
||||
// P11 : sur une session neuve, on ignore aussi un éventuel statut 3 résiduel
|
||||
// (le temps que la borne renégocie avec le nouveau véhicule).
|
||||
const evcsStatusCharged =
|
||||
!sessionFresh &&
|
||||
Number.parseFloat(parsed.evcsStatusRaw) === 3 &&
|
||||
Math.max(0, parsed.evcsAcPowerW || 0) <= 300;
|
||||
|
||||
const vehicleChargeCompleted =
|
||||
nightSessionActive &&
|
||||
!sessionFresh &&
|
||||
(
|
||||
prevSurplusState === 'vehicle_full_or_paused' ||
|
||||
prevSurplusState === 'night_session_done_idle' ||
|
||||
@@ -415,6 +432,7 @@ const departureDonePrev =
|
||||
|
||||
const departureChargeDone =
|
||||
departureWindowActive &&
|
||||
!sessionFresh &&
|
||||
(departureDonePrev || evcsStatusCharged);
|
||||
|
||||
const departureUrgentActive =
|
||||
@@ -446,6 +464,7 @@ const dayVehicleFullPrev =
|
||||
|
||||
const dayVehicleFullIdle =
|
||||
parsed.evcsVehicleConnected &&
|
||||
!sessionFresh &&
|
||||
!inNightHcWindow &&
|
||||
!isStopMode &&
|
||||
!forceGridRequested &&
|
||||
@@ -851,6 +870,9 @@ return [{
|
||||
|
||||
// P10
|
||||
dayVehicleFullIdle,
|
||||
|
||||
// P11
|
||||
sessionFresh,
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
Reference in New Issue
Block a user