Fixes A/B/C/D incident rebond EDF nuit 07-08/08 + GRAFCET doc
- A: état collant night_recovery_done_idle + bande cible−2 (anti-rebond takeover) - B: snapshot relit night_session_start_soc/at (fin des réécritures 30s) - C: hystérésis grid — turn_off_vehicle_unplugged (coupure immédiate, bypass min_on) - D: evcs_status_raw==3 (charged) = fin de charge immédiate - golden 19→23 scénarios (2 attendus mis à jour, 4 nouveaux) - MANUEL_COMPLET §11.6 GRAFCET cycle nuit, HANDOFF §17, vision-notes incident
This commit is contained in:
@@ -344,6 +344,64 @@ S'assurer que le véhicule est chargé avant l'heure de départ prévue.
|
||||
- **gridTakeoverTriggerPct** : Seuil de basculement réseau
|
||||
- **batteryRecoveryUrgent** : Si temps restant < temps de charge nécessaire
|
||||
|
||||
### 11.6 Cycle nuit HC complet — GRAFCET (P7 + P8 + fixes 08/08/2026)
|
||||
|
||||
Deux automates coordonnés via les helpers HA (`night_grid_takeover_needed`,
|
||||
`victron_evcs_surplus_state`) :
|
||||
- **G1** = contrôleur EVCS V2.6 (boucle 30 s)
|
||||
- **G2** = hystérésis EDF (« Victron - Battery / Grid Hysteresis Fix V1 », 1 min)
|
||||
|
||||
```
|
||||
G1 — SESSION NUIT EVCS
|
||||
──────────────────────
|
||||
X0 JOUR / attente (profils solaires)
|
||||
│ t1: fenêtre HC (01:24) ET véhicule branché
|
||||
X1 SESSION NUIT ACTIVE — capture startSOC/startAt (une seule fois, Fix B)
|
||||
│ t2: toggle "Réseau HC nuit" ON → nightGridHcPreferred (P7)
|
||||
X2 TAKEOVER: helper ON → G2 force EDF ON ; ACM tient la batterie (~2 A)
|
||||
│ t3: EDF ON confirmé (gridAvailable)
|
||||
X3 CHARGE VE: start 6 A → step-up (plafond 20 A / boost 28 A)
|
||||
│ t4: fin de charge = VDF no-demand OU statut EVCS brut 3 "charged" (Fix D)
|
||||
X4 CHARGE TERMINÉE (collant): vehicleChargeCompleted, sourceMode='blocked'
|
||||
│
|
||||
├─ t5a: SOC < cible matin
|
||||
│ X5a RECOVERY BATTERIE: takeover ON (EDF ON), ACM recharge → cible
|
||||
│ │ t6: SOC ≥ cible
|
||||
│ ▼
|
||||
└─ t5b: SOC ≥ cible matin
|
||||
X5b RECOVERY DONE (collant, Fix A): état 'night_recovery_done_idle'
|
||||
│ takeover OFF définitif → G2 coupe EDF (turn_off_recovered)
|
||||
│ ré-engagement UNIQUEMENT si SOC ≤ cible − 2 (bande anti-rebond)
|
||||
│ t7: débranchement OU fin de fenêtre (07:24)
|
||||
X6 CLÔTURE: clear session → retour X0 (profil jour)
|
||||
|
||||
G2 — HYSTÉRÉSIS EDF (seuils ON ≤ 20 % | OFF ≥ 30 % | min_on 25 | cooldown 15)
|
||||
──────────────────────────────────────────────────────────────────────────────
|
||||
Y0 EDF OFF (observe_only)
|
||||
│ u1: override EVCS (takeover/force_grid/grid_forced) sans no-demand
|
||||
│ u2: SOC ≤ seuil ON (bypass cooldown)
|
||||
Y1 EDF ON + latch
|
||||
│ v1: override disparu ET min_on écoulé ET SOC ≥ seuil OFF → turn_off_recovered
|
||||
│ v2: force_grid + voiture pleine → coupure immédiate
|
||||
│ v3: véhicule débranché + SOC ≥ seuil OFF → coupure immédiate
|
||||
│ (turn_off_vehicle_unplugged, bypass min_on — Fix C 08/08/2026)
|
||||
└─▶ retour Y0 (cooldown 15 min)
|
||||
```
|
||||
|
||||
États surplus « fin de nuit » (aucun ne doit matcher les patterns no-demand
|
||||
de G2 — full_or_paused / not_requesting_power / charge_complete / no_demand) :
|
||||
- `night_session_done_idle` : charge finie, recovery batterie possible (EDF
|
||||
maintenu si SOC < cible)
|
||||
- `night_recovery_done_idle` : charge finie ET batterie à la cible → EDF
|
||||
relâché définitivement (anti-rebond)
|
||||
|
||||
#### Incident de référence (nuit 07-08/08/2026)
|
||||
SOC bloqué pile à la cible (35 %) = point dégénéré (engage `soc ≤ 35`,
|
||||
release `soc > 35`) → rebond EDF ON/OFF période ~10 min + flapping ACM 2-4 s,
|
||||
et EDF maintenu 25 min après débranchement. Corrigé par Fix A (flag collant +
|
||||
bande 2 pts), Fix B (snapshot relit startSOC/startAt), Fix C (coupure au
|
||||
débranchement), Fix D (statut charged = fin de charge immédiate).
|
||||
|
||||
---
|
||||
|
||||
## 12. Configuration opencode.json
|
||||
|
||||
Reference in New Issue
Block a user