La conversion energie/SOC devient une courbe mesuree, pas une constante

576 paliers de SOC mesures sur 8 jours (tools/mesure-courbe-batterie.mjs,
ajoute) : pour chaque palier ou le SOC reste a une valeur puis descend d un
point, on integre la puissance batterie, en ecartant les paliers ou la batterie
a charge et ceux ou le reseau a apporte quoi que ce soit.

Resultat : plate a 0,169 kWh/point de 33 a 93 — six tranches independantes entre
0,163 et 0,171 — genou net a 32-33, puis 0,097 en dessous. Sous le genou un
point de SOC vaut 57 % de ce qu il vaut au-dessus, ce qui est coherent avec le
parc reel (un module en panne sur huit, un autre qui faiblit).

Energie utile totale de 100 a 22 % : 12,39 kWh mesures, contre 11,70 vus par le
bilan (15 kWh a plat) et 13,65 par INPUT_PARSE (17,5). Les deux constantes
etaient fausses, dans des sens opposes.

Comme 15 kWh se situe ENTRE les deux pentes, l erreur changeait de signe : SOC
requis trop bas de 3 a 4 points pour un petit deficit, trop haut de 4 a 6 pour
un gros. Cela corrige au passage une affirmation inexacte de la section 40, ou
j avais ecrit que required_soc etait systematiquement trop bas d un facteur
1,75 : ce facteur comparait la vitesse de descente du SOC a celle de la ligne,
deux grandeurs differentes, et l ecart venait surtout de la sous-estimation de
la consommation par le profil p50. La correction est posee en tete de la
section 40.

Trois fonctions remplacent les cinq conversions lineaires de BALANCE.js ;
requiredSocAtStartPct reste non ecrete au-dela de 100, l extrapolation utilisant
la pente haute. INPUT_PARSE passe de 17,5 a 16,9 avec la consigne explicite
qu un calcul traversant le genou doit lire la courbe et non cette constante.

Tests du bilan 42/42 apres mise a jour deliberee de six attendus, chacun verifie
a la main contre la courbe. Un libelle corrige : le seuil fixe de 30 % tombait
juste ce matin-la par coincidence, pas par construction. Deux mutations — pente
basse ramenee a la pente haute, puis genou ramene au plancher — font tomber les
six memes scenarios. Golden 78, hysteresis 7 et advisor inchanges.

Les trois nombres sont des resultats de mesure, pas des reglages, et vivent dans
le code avec l outil qui les produit ; a rejouer apres l extension du parc.

Principale erreur restante du bilan, desormais devant la conversion : le profil
de consommation p50 sous-estimait de 33 % les heures 03-06 de la nuit du
02-03/09. A instruire separement.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-09-03 23:28:57 +02:00
parent 914ef021b2
commit 6603c5dfd2
8 changed files with 338 additions and 31 deletions

View File

@@ -912,6 +912,45 @@ reserve d'orage est optimiste dans la meme bande. §28 avait deja signale
l'effondrement de la jauge ; les mesures du 03/09 lui donnent sa courbe. C'est
le prochain chantier du bilan energetique.
#### H. La conversion energie ↔ SOC devient une courbe mesuree (03/09/2026)
Le prerequis ci-dessus, traite le soir meme. `tools/mesure-courbe-batterie.mjs`
(rejouable) integre la puissance batterie sur chaque palier de SOC qui descend
d'un point, en ecartant les paliers avec charge ou apport reseau : **576 paliers
sur 8 jours**.
| tranche | paliers | kWh/point |
|---|---:|---:|
| 21-31 | 88 | **0,097** |
| 35-94 | 462 | **0,169** (six tranches, 0,163 a 0,171) |
Plate a 0,169 de 33 a 93, **genou net a 32-33**, puis 0,097 : sous le genou un
point de SOC vaut 57 % de ce qu'il vaut au-dessus. Coherent avec le parc reel
(§0 : un module en panne sur huit, un autre qui faiblit).
**Energie utile totale de 100 a 22 % : 12,39 kWh mesures**, contre 11,70 vus par
le bilan (15 kWh a plat) et 13,65 par `INPUT_PARSE` (17,5). Les deux constantes
etaient fausses, dans des sens opposes — chiffre a retenir pour le
dimensionnement du parc prevu cet hiver.
Comme 15 kWh se situe ENTRE les deux pentes, **l'erreur changeait de signe** :
SOC requis trop bas de 3 a 4 points pour un petit deficit (fin de nuit, la
direction dangereuse), trop haut de 4 a 6 points pour un gros (debut de nuit).
Correctif : trois fonctions (`energyBetweenSoc`, `socForEnergy`,
`socAfterEnergy`) remplacent les cinq conversions lineaires de `BALANCE.js`, et
`INPUT_PARSE` passe de 17,5 a 16,9. Tests du bilan 42/42 apres mise a jour
deliberee de six attendus, chacun verifie a la main ; deux mutations font tomber
les six memes scenarios. Detail : HANDOFF §41.
⚠️ Ces trois nombres sont des **resultats de mesure, pas des reglages** :
`node tools/mesure-courbe-batterie.mjs 8` est a rejouer apres toute evolution du
parc.
⚠️ **Principale erreur restante du bilan** : le profil de consommation p50
sous-estimait de ~33 % les heures 03-06 la nuit du 02-03/09 (2,1 kWh annonces,
2,79 mesures). Devant la conversion, desormais. A instruire separement.
⚠️ Point structurel mis au jour par cet incident : le bilan energetique publie
l'heure de croisement, l'energie a couvrir, le SOC requis, `grid_needed` et
`pv_censored` — et **aucun des deux workflows de decision n'en lit une seule