P9: charge réseau avant départ (hors HC) + sélecteur véhicule VW/JEEP
- helpers: input_select.victron_evcs_vehicle, departure_time_jeep (06:30), toggle allow_grid_departure_urgent (OFF) — package victron_evcs_vehicles.yaml - INPUT_PARSE: departureTimeMin par véhicule sélectionné - WINDOWS: fenêtre départ ≤120min hors HC → grid_hc_allowed (solar_only prioritaire), état collant departure_done_idle à la fin de charge - BCL: gridAllowedBySoc += departureUrgentActive - DECISION: branche collante departure_done_idle au-dessus des gardes - HA_SERVICE_CALLS: takeover helper tenu pendant P9 (ACM + hystérésis) - hystérésis: cut immédiat étendu à departure_done_idle (patch rejouable) - golden 29→33, HANDOFF §21
This commit is contained in:
@@ -388,6 +388,38 @@ const nightRecoveryDone =
|
||||
)
|
||||
);
|
||||
|
||||
// =====================================================
|
||||
// P9 (09/08/2026) : CHARGE RÉSEAU AVANT DÉPART, HORS FENÊTRE HC.
|
||||
// Cas VW : départ 08:50 > fin HC 07:24 → fenêtre morte où le véhicule
|
||||
// sous-chargé attendait un solaire insuffisant (observé le 09/08 : advisor
|
||||
// force_grid_now, divergence n°10). Si le toggle est ON et que le départ du
|
||||
// véhicule SÉLECTIONNÉ est dans ≤ 120 min : réseau autorisé (grid_hc_allowed)
|
||||
// jusqu'à fin de charge. L'arrêt réutilise TOUTE la mécanique anti-rebond :
|
||||
// VDF → vehicle_full_or_paused → état collant 'departure_done_idle'
|
||||
// (réécrit chaque cycle, patterns hystérésis sûrs, coupure immédiate E2).
|
||||
// =====================================================
|
||||
const P9_DEPARTURE_LEAD_MIN = 120;
|
||||
|
||||
const departureWindowActive =
|
||||
params.allowGridDepartureUrgent &&
|
||||
parsed.evcsVehicleConnected &&
|
||||
!inNightHcWindow &&
|
||||
Number.isFinite(minutesUntilDeparture) &&
|
||||
minutesUntilDeparture >= 0 &&
|
||||
minutesUntilDeparture <= P9_DEPARTURE_LEAD_MIN;
|
||||
|
||||
const departureDonePrev =
|
||||
prevSurplusState === 'departure_done_idle' ||
|
||||
(!inNightHcWindow && prevSurplusState === 'vehicle_full_or_paused');
|
||||
|
||||
const departureChargeDone =
|
||||
departureWindowActive &&
|
||||
(departureDonePrev || evcsStatusCharged);
|
||||
|
||||
const departureUrgentActive =
|
||||
departureWindowActive &&
|
||||
!departureChargeDone;
|
||||
|
||||
// P8 : correction du fix 04/08 (logique inversée : "|| vehicleChargeCompleted"
|
||||
// GARDAIT le latch après la charge au lieu de le libérer).
|
||||
const nightTakeoverLatched =
|
||||
@@ -642,6 +674,25 @@ else if (profile === 'outside_window') {
|
||||
}
|
||||
}
|
||||
|
||||
// P9 : le réseau avant départ prend le pas sur les modes spéculatifs du jour
|
||||
// (blocked / solar_potential / hybrid_probe), mais JAMAIS sur le solaire réel
|
||||
// (solar_only), ni sur stop / force_* (déjà traités en tête de cascade).
|
||||
if (
|
||||
departureUrgentActive &&
|
||||
!isStopMode &&
|
||||
!forceGridRequested &&
|
||||
!forceChargeRequested &&
|
||||
profile !== 'night_hc' &&
|
||||
sourceMode !== 'solar_only'
|
||||
) {
|
||||
sourceMode = 'grid_hc_allowed';
|
||||
}
|
||||
|
||||
// P9 : véhicule plein pendant la fenêtre départ → aucune source.
|
||||
if (departureChargeDone && profile !== 'night_hc' && !isStopMode && !forceGridRequested && !forceChargeRequested) {
|
||||
sourceMode = 'blocked';
|
||||
}
|
||||
|
||||
const operatingMode = profile;
|
||||
|
||||
// =====================================================
|
||||
@@ -755,6 +806,10 @@ return [{
|
||||
vehicleChargeCompleted,
|
||||
nightRecoveryDone,
|
||||
nightPreferredSourceMode,
|
||||
|
||||
// P9
|
||||
departureUrgentActive,
|
||||
departureChargeDone,
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
Reference in New Issue
Block a user