La session unique tenait le contacteur, pas l energie

La veille de nuit a rendu son verdict : UNE seule bascule sur 69 releves entre
01:26 et 07:07. La session reseau unique fait ce pour quoi elle a ete concue,
EDF ferme d un bout a l autre de la fenetre sans creneau ni oscillation.

Mais a 02:50, la voiture finie, le sourceMode est passe a bloque et la consigne
reseau est retombee de 5078 a 50 W. Contacteur ferme, reseau disponible, heures
creuses, et l ESS ne demandait que 50 W pendant que la maison tirait 770 W sur
la batterie. Trois heures et demie, SOC 44 vers 17 pour cent, 2,60 kWh pris a la
batterie quand le reseau etait la et bon marche. L Auto Charge Manager est reste
pret a recharger avec DVCC a 30 A, mais la consigne ne demandait jamais l
energie. C est le defaut du 01/09 revenu ailleurs : j avais etabli que fermer le
contacteur ne suffit pas, puis cree la veille une nouvelle raison de le garder
ferme sans la brancher sur la consigne.

gridSessionActive inclut desormais l engagement de session. Regle : tant que le
contacteur est ferme a notre demande, la consigne couvre la maison, peu importe
laquelle des deux raisons le tient.

Consigne de repos portee de 50 a 200 W a la demande du proprietaire, avec une
justification mesuree : sur 12 074 echantillons du point de raccordement, 17 %
sont negatifs, mediane -18 W. Ce n est pas de l injection — la batterie
debitait 744 W au meme moment et les 22,7 Wh cumules representent 0,9 % de ce
qu elle perdait — c est le regulateur qui chasse autour d une cible trop proche
de zero. A 200 W le point de fonctionnement reste positif sur l essentiel des
excursions, sans supprimer les pointes les plus fortes.

Consigne aussi que le 20 % n est pas le notre mais le plancher de l ESS, qui a
fini par faire de lui-meme a 06:20 ce que la session aurait du faire depuis
02:50, apres avoir vide la batterie de 27 points.

Golden 78 -> 80, deux mutations ciblees. Piege rencontre et documente : la
premiere redaction du contrefactuel portait deux fois la clef balance_status, et
en JavaScript la derniere gagne — il testait donc l inverse de son libelle. Un
contrefactuel doit reposer sur une difference physique, pas sur la surcharge d
une clef deja presente.

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-04 07:21:08 +02:00
parent a189ad958c
commit cf6e9afe31
5 changed files with 197 additions and 6 deletions

View File

@@ -334,9 +334,30 @@ reason.push(`PV10=${Math.round(parsed.pvPowerAvg10mW)}W`);
// son plafond, la consigne est deja genereuse, et l'exces ne peut pas partir
// dans la batterie (DVCC tenue a 2 A par l'Auto Charge Manager pendant un
// takeover). Hors session, retour a la valeur de repos.
// ⚠️ LA SESSION ENGAGEE COMPTE AUSSI (04/09/2026).
// Nuit du 03-04/09 : la session reseau unique a tenu le contacteur toute la
// nuit — une seule bascule, comme voulu. Mais a 02:50, la voiture finie, le
// sourceMode est passe a 'blocked' et la consigne est retombee de 5078 W a
// 50 W. Contacteur ferme, reseau disponible, heures creuses, et l'ESS ne
// demandait que 50 W pendant que la maison tirait 770 W SUR LA BATTERIE.
// Trois heures et demie, SOC 44 % -> 17 %, 2,60 kWh pris a la batterie quand
// le reseau etait la et bon marche.
//
// C'est le defaut du 01/09 revenu ailleurs : fermer le contacteur ne suffit
// pas, la consigne doit demander la puissance. J'avais conditionne la consigne
// au sourceMode, puis cree la veille une NOUVELLE raison de garder le
// contacteur ferme — l'engagement de session — sans la brancher ici. La
// session tenait le contacteur, pas l'energie.
//
// Regle : tant que le contacteur est ferme A NOTRE DEMANDE, la consigne doit
// couvrir la maison. Peu importe laquelle des deux raisons le tient.
const gridSessionActive =
parsed.acInAvailable &&
(context.sourceMode === 'grid_forced' || context.sourceMode === 'grid_hc_allowed');
(
context.sourceMode === 'grid_forced' ||
context.sourceMode === 'grid_hc_allowed' ||
night.nightGridSessionCommitted === true
);
const gridSetpointNeedW = gridSessionActive
? clamp(