Section 68 : P12, et la contrainte que seul l essai reel pouvait montrer

Consigne l idee du proprietaire et le calcul qui la fonde, le verrou
anti-oscillateur trouve en construisant, et surtout la contrainte decouverte a
05:30 en conditions reelles : P12 doit gagner le premier cycle de la nuit. Si la
reprise reseau s engage avant lui, le verrou anti-creneaux de juillet tient le
reseau pour toute la session — et il a raison, c est exactement le creneau qu il
existe pour empecher. Aucun des cinq scenarios initiaux ne le montrait, ils
partent tous d une nuit vierge.

Note aussi qu une mutation qui ne mute rien ne prouve rien : ma premiere
tentative cherchait un motif absent du fichier, zero occurrence, zero echec, et
j allais conclure que le test tenait.

Et corrige deux affirmations que j avais faites avec trop d aplomb : le garde dur
a -30 A (je lisais la table de base, pas les valeurs appliquees) et le bilan qui
sous-estimerait la batterie de 30 % (j avais divise une courbe par morceaux par
un seul ratio).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-15 06:25:51 +02:00
parent 26bdabf979
commit cfb63f072b
3 changed files with 158 additions and 0 deletions

View File

@@ -6494,3 +6494,120 @@ normales du cycle jour/nuit ne doivent pas.
--- ---
*Document mis a jour le : 14/09/2026 (~03:20) — auteur des transitions repare et deploye, 7 cas valides en rejeu* *Document mis a jour le : 14/09/2026 (~03:20) — auteur des transitions repare et deploye, 7 cas valides en rejeu*
## 68. Nuit du 14 au 15/09/2026 — P12 : la voiture se charge sur le solaire d'hier
### L'idee, et le calcul qui la fonde
Le proprietaire, le 14 au soir : plutot qu'acheter du reseau la nuit pour
charger la voiture, lui donner le solaire DEJA STOCKE — doucement, a courant
minimal — et laisser ainsi de la place dans la batterie pour la production du
lendemain. « Payer du reseau la nuit pour ecreter le solaire le lendemain, c'est
perdre deux fois. »
Projection sur la prevision du 15/09 (38,7 kWh, pic a 16 h) :
| scenario | SOC a 9 h | ecrete |
|---|---:|---:|
| VW sur EDF (ce qui s'est passe) | 55 % | **10,5 kWh** |
| VW sur batterie, 4 kWh | 38 % | 5,3 kWh |
| + JEEP qui charge le matin | 38 % | **0,0 kWh** |
Releve de la nuit reelle : **8 kWh achetes au reseau**, batterie encore a **69 %
a 5 h du matin**. Confirmation par l'exemple.
### Ce qui existait deja, et etait mort
Le mode `battery_assist_night` existe depuis l'origine pour exactement cela, et
**n'a jamais demarre une seule fois** : il exige
`batteryCurrentA >= plancher de decharge du profil` (0 A), condition impossible
la nuit puisque la maison tire sur la batterie (§11, ~ -14 A). On n'a donc pas
cree un chemin, on a rendu viable celui qui existe — en remplacant un test de
COURANT impossible par un test d'ENERGIE.
**Le plancher n'est pas une constante nouvelle** : c'est `required_soc_prudent`,
publie par le bilan en profil p80. La voiture descend la batterie jusqu'au
niveau qui lui permet encore de tenir jusqu'au croisement PV, et pas plus bas.
La bascule vers le reseau quand le surplus est epuise est automatique — la
soupape decrite par le proprietaire, sans aucune regle horaire.
### ⚠️ Le verrou anti-oscillateur, trouve en construisant
Le plancher DESCEND pendant la nuit (il reste moins de nuit a couvrir) et le SOC
aussi. Mesure :
| | SOC | plancher | surplus |
|---|---:|---:|---|
| voiture EN CHARGE | −7,1 pt/h | −3,7 pt/h | s'epuise |
| voiture ARRETEE | −2,6 pt/h | −3,7 pt/h | **REAPPARAIT** |
Sans verrou, la charge repartirait des qu'elle s'arrete : cinquieme oscillateur
du projet, par construction. **Une seule passe de surplus par session de nuit**,
comme la recovery batterie depuis le 27/08. Helper
`input_boolean.victron_evcs_night_battery_done`.
### ⚠️ ET LA CONTRAINTE TROUVEE EN ESSAI REEL : P12 DOIT GAGNER LE PREMIER CYCLE
Essai du 15/09 a 05:30. P7 s'etait engage a **05:13**, avant que le toggle P12 ne
soit active a 05:20. Resultat mesure dans l'execution :
nightBatterySurplusAvailable = true <- P12 fonctionne
nightGridHcPreferred = false <- il a bien desengage P7
nightTakeoverLatched = true <- MAIS le verrou de juillet tient
nightGridTakeoverNeeded = true
sourceMode = grid_hc_allowed
Le verrou anti-creneaux P2 (09/07) maintient `nightGridTakeoverNeeded`
independamment de `nightGridHcPreferred`. **Et c'est le comportement SUR** :
basculer reseau → batterie en pleine session est exactement le creneau que ce
verrou existe pour empecher.
Consequence : **si la reprise reseau s'engage avant P12, le reseau est verrouille
pour la session.** Aucun des cinq scenarios initiaux ne le montrait — ils partent
tous d'une nuit vierge. Le test propre se fait avec P12 deja actif a l'ouverture
de la fenetre HC.
### Tests : 96 → 102
`p12-charge-nuit-sur-batterie` (SOC 69 au-dessus du plancher 38,7 → la voiture
demarre a 6 A sur la batterie) · `p12-surplus-epuise-le-reseau-prend-le-relais`
(SOC 37 sous le plancher → P7 reprend) · `p12-verrou-pas-de-reprise-du-surplus`
(SOC repasse au-dessus mais verrou pose) · `p12-toggle-off-comportement-historique`
· `p12-bilan-perime-pas-de-charge-batterie` · et
`p12-verrou-p2-tient-si-le-reseau-est-deja-engage`, ajoute apres l'essai reel.
**Deux faiblesses trouvees par la mutation, et elles valent d'etre notees :**
1. Les attendus ne verifiaient que le choix du MODE, pas que la voiture charge.
Neutraliser la condition de demarrage dans BCL ne cassait aucun scenario.
Corrige : `state`, `decision`, `desiredCharging`, `currentA` sont verifies.
2. La garde de fraicheur du bilan n'etait couverte par aucun scenario — un bilan
perime aurait laisse vider la batterie sur un plancher obsolete.
⚠️ Et une mutation qui ne mute RIEN ne prouve rien : ma premiere tentative sur le
verrou P2 cherchait `nightTakeoverLatched ||`, motif absent du fichier. Zero
occurrence, zero echec, et j'allais conclure que le test tenait. **Toujours
verifier que le motif existe avant de lire le resultat d'une mutation.**
### La table de politique batterie assouplie, et un piege de 50 helpers
Pour que P12 puisse descendre sous SOC 60, `batt_discharge_soft_40_60_a` passe de
−12 a −15 A de base, soit **39 → 49 A appliques** (parkScale 13/4) : 3,5 A par
equivalent US2000, 19 % de ce que le BMS autorise. Le garde DUR ne bouge pas
(−98 A appliques).
⚠️ **Les 50 helpers de la table portaient un `initial:`**, qui DESACTIVE la
restauration d'etat : chaque redemarrage de Home Assistant les remet a leur
valeur d'origine, en silence. Le reglage aurait ete annule par le redemarrage
prevu le soir meme. Meme defaut que les cinq helpers corriges le 06/09, mais ici
sur une table entiere de REGLAGE — donc sur tout ajustement futur.
Retire, et **verifie par le redemarrage du 15/09 05:11** : `initial: aucun`, la
valeur −15 a survecu.
### Corrections a mes propres affirmations
Deux fois de suite j'ai annonce un blocage inexistant, et le proprietaire a eu
raison de pousser :
1. « Le garde dur bloquerait P12 a −30 A » — **faux**, je lisais les valeurs de
BASE de la table en croyant lire les valeurs APPLIQUEES. `parkScale` existe
et vaut 13/4 ; le garde dur applique vaut −98 A.
2. « Le bilan sous-estime la batterie de 30 % » — **faux**, j'avais divise une
courbe par morceaux par un seul ratio. Le bilan met sa courbe a l'echelle par
`modules_en_service / 7` et donne 0,314 kWh/point, contre **0,308 mesure**.
Quant a `usable_capacity_kwh` = 15, il est INERTE depuis le 03/09.
---
*Document mis a jour le : 15/09/2026 (~05:45) — P12 construit, teste (102/102) et deploye ; contrainte du premier cycle trouvee en essai reel*

View File

@@ -198,6 +198,10 @@ views:
name: Stratégie EVCS name: Stratégie EVCS
- entity: input_boolean.victron_evcs_allow_grid_hc_night - entity: input_boolean.victron_evcs_allow_grid_hc_night
name: Réseau HC nuit name: Réseau HC nuit
- entity: input_boolean.victron_evcs_night_battery_charge
name: 🔋 Charge nuit sur batterie (P12)
- entity: input_boolean.victron_evcs_night_battery_done
name: └ surplus de la nuit épuisé
- entity: input_boolean.victron_evcs_allow_grid_hc_midday - entity: input_boolean.victron_evcs_allow_grid_hc_midday
name: Réseau HC midi name: Réseau HC midi
- entity: input_boolean.victron_evcs_surplus_auto_enabled - entity: input_boolean.victron_evcs_surplus_auto_enabled

View File

@@ -2612,4 +2612,41 @@ export const scenarios = [
edfOnAction: true, edfOnAction: true,
}, },
}, },
// ⚠️ P12 DOIT GAGNER LE PREMIER CYCLE DE LA NUIT, OU IL NE GAGNE PAS.
//
// Decouvert en essai reel le 15/09 a 05:30. P7 s'etait engage a 05:13, avant
// que le proprietaire n'active P12 : le helper `night_grid_takeover_needed`
// etait donc deja ON, et le verrou anti-creneaux de juillet (P2) tenait le
// reseau — `nightGridHcPreferred` passe bien a false grace a P12, mais
// `nightTakeoverLatched` maintient `nightGridTakeoverNeeded` de son cote.
//
// Et c'est le comportement SUR : basculer reseau -> batterie en pleine
// session, c'est exactement le creneau que ce verrou existe pour empecher.
// Aucun des cinq scenarios P12 ne le montrait — ils partent tous d'une nuit
// vierge. Celui-ci epingle la contrainte pour qu'un changement futur soit
// delibere.
{
id: 'p12-verrou-p2-tient-si-le-reseau-est-deja-engage',
label: 'Nuit HC, P7 deja engage (takeover ON) puis P12 active -> le verrou anti-creneaux tient, pas de bascule',
time: '2026-09-15T05:30:00+02:00',
overrides: {
...VEHICLE_NIGHT, soc_percent: '69',
allow_grid_hc_night: 'on',
night_battery_charge_enabled: 'on', night_battery_done_prev: 'off',
// LE point du scenario : la reprise reseau est deja engagee.
night_takeover_prev: 'on',
grid_state: 'on', victron_acin1_available: '1',
battery_current_a: '1',
evcs_charging_switch: 'on',
balance_status: 'ok', balance_last_run: '15/09 05:25',
balance_required_soc: '36.8', balance_required_soc_prudent: '36.2',
balance_energy_to_cover_kwh: '3.18',
},
expect: {
profile: 'night_hc',
sourceMode: 'grid_hc_allowed',
takeoverNeeded: true,
},
},
]; ];