P8: libération EDF quand véhicule plein (nuit HC) + fix latch inversé du 04/08
- vehicleChargeCompleted COLLANT via prev_surplus_state (nouveau champ snapshot): vehicle_full_or_paused -> night_session_done_idle auto-entretenu jusqu'au débranchement ou fin de fenêtre. - Fix inversion 04/08: le latch takeover se libère à la fin de charge (était: || vehicleChargeCompleted qui le GARDAIT). - P7 relâché quand charge finie; sourceMode nuit -> blocked (zéro retry). - SOC > cible: takeover OFF -> hystérésis coupe EDF. SOC <= cible: takeover ON -> EDF maintenu + ACM recharge batterie (spec 'sauf si sous seuil'). - night_session_done_idle ne matche aucun pattern no-demand de l'hystérésis (condition de fonctionnement de l'override batterie basse). - Golden: 19/19 (3 nouveaux scénarios P8, 16 existants inchangés).
This commit is contained in:
53
HANDOFF.md
53
HANDOFF.md
@@ -572,3 +572,56 @@ takeoverNeeded, action EDF ON, service helper takeover.
|
||||
---
|
||||
*Document mis à jour le : 07/08/2026 (~19:20) — R3 en place, 16/16, push bloquant*
|
||||
|
||||
## 14. Session du 07/08/2026 (soir) — P8 : Libération EDF quand le véhicule est plein
|
||||
|
||||
### Spécification utilisateur
|
||||
La nuit : charge dès 01:24 (P7) ✓, puis **quand la charge est finie → EDF OFF,
|
||||
sauf si la batterie solaire est sous le seuil** (alors EDF reste pour la recharger).
|
||||
|
||||
### Bugs découverts en traçant la spec
|
||||
1. **Fix 04/08 logiquement inversé** : `(soc < 90 || vehicleChargeCompleted)` GARDAIT
|
||||
le latch takeover après la charge au lieu de le libérer. Jamais corrigé en réalité.
|
||||
2. **P7 ne relâchait pas** : `nightGridHcPreferred` restait vrai tant que véhicule
|
||||
branché → l'EVCS redemandait EDF ON toutes les 30 s jusqu'à 07:24.
|
||||
3. **Signal "voiture pleine" instable** : le VehicleDemandFilter retombe à false dès
|
||||
que le relais s'ouvre (session désarmée) → impossible de s'appuyer dessus seul.
|
||||
|
||||
### Solution : mémoire AUTO-ENTRETENUE via l'état surplus (P8)
|
||||
Chaîne (nouveau champ snapshot `prev_surplus_state` ← input_text.victron_evcs_surplus_state) :
|
||||
```
|
||||
charge → VDF détecte voiture pleine → state 'vehicle_full_or_paused'
|
||||
cycle N+1 : WINDOWS voit ce state → vehicleChargeCompleted=true
|
||||
→ DECISION émet 'night_session_done_idle'
|
||||
cycles suivants : 'night_session_done_idle' s'auto-entretient
|
||||
fin : débranchement (state vehicle_not_connected) ou fin de fenêtre 07:24
|
||||
```
|
||||
Effets quand vehicleChargeCompleted :
|
||||
- latch libéré (fix inversion 04/08 : `soc < 90 && !completed`)
|
||||
- préférence P7 relâchée ; sourceMode nuit → 'blocked' (zéro tentative de charge)
|
||||
- SOC > cible matin : takeover helper OFF → hystérésis coupe EDF (turn_off_recovered)
|
||||
- SOC ≤ cible : takeover helper ON → hystérésis maintient EDF (override) + ACM
|
||||
recharge la batterie à la cible → puis relâche. ⚠️ Le nom 'night_session_done_idle'
|
||||
ne doit matcher AUCUN pattern no-demand de l'hystérésis (full_or_paused /
|
||||
not_requesting_power / charge_complete / no_demand) — c'est ce qui permet
|
||||
à l'override batterie-basse de fonctionner. NE PAS RENOMMER sans vérifier.
|
||||
|
||||
### Nœuds modifiés (tools/patch-20260807-p8-release-full.mjs, rejouable)
|
||||
- Snapshot template : +prev_surplus_state
|
||||
- WINDOWS_SOURCEV2 : vehicleChargeCompleted collant, latch corrigé, P7 conditionné,
|
||||
preferred 'blocked' si plein, export preview
|
||||
- BATTERY_CLOUD_LOCKS : passthrough du flag dans nightEvcs
|
||||
- DECISION_ENGINEV2 : branche 'night_session_done_idle' (avant sourceMode blocked)
|
||||
|
||||
### Validation
|
||||
- 3 nouveaux scénarios golden (19 au total) : transition vehicle_full→done_idle
|
||||
(takeover turn_off), auto-entretien, batterie basse (takeover turn_on maintenu).
|
||||
- Les 16 scénarios existants inchangés (aucune régression).
|
||||
- Push via pipeline bloquant (golden 19/19), production stable.
|
||||
|
||||
### Comportement attendu cette nuit (VW branchée, checklist complète)
|
||||
1. 01:24-01:25 : grid_hc_allowed → EDF ON → charge 6 A puis montée (P7)
|
||||
2. VW pleine : vehicle_full_or_paused → night_session_done_idle → takeover OFF
|
||||
→ EDF coupé par l'hystérésis ≤ 1 min après (si min_on 25 écoulé et SOC ≥ 30)
|
||||
3. Batterie sous cible matin (35 été) : EDF maintenu + recharge ACM jusqu'à cible
|
||||
4. 07:24 : fin de fenêtre → retour profil jour
|
||||
|
||||
|
||||
Reference in New Issue
Block a user