La protection regardait la maison, pas ce qu on demande au parc

Deux fermetures ce dimanche midi. Mesurees a l instant de la decision,
contacteur encore ouvert donc production non censuree : maison 4025 et 4981 W,
mais parc reellement sollicite 1132 et 772 W pour un plafond de 5100. La
decharge batterie mesuree aux memes instants — 1345 et 1223 W — colle a
maison moins PV, pas a la maison brute. Le solaire couvrait la cuisson ; la
regle a ferme le contacteur pour rien, 0,50 kWh importes en plein soleil.

Elle n avait bien fonctionne hier soir que parce qu il n y avait plus de PV.
Les deux seuils portent desormais sur max(0, maison - PV). Contacteur ouvert
cette grandeur EST la decharge batterie ; ferme, un bridage du MPPT la fait
surestimer, donc l erreur pousse a rester ferme et jamais a relacher tot.

Golden 20 -> 24, dont les deux releves de midi et le contrefactuel du nuage.
Le test de mutation a montre que la premiere serie ne couvrait que le seuil de
fermeture : il a fallu ecrire le cas du soleil revenu pour qu elle morde.

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-06 13:50:28 +02:00
parent 66d071684e
commit c7e665cd5c
7 changed files with 341 additions and 1 deletions

View File

@@ -4520,6 +4520,82 @@ qu'apres 12:26.
4. si la tension batterie se remet a disparaitre, `plafond_decharge_w` doit
rester a ~5100 et non tomber a 0.
### MEME JOUR, DEFAUT PLUS PROFOND : la regle comptait la maison BRUTE
Dimanche 06/09, deux fermetures du contacteur : **12:07 -> 12:22** (four +
plaque) et **13:34 -> 13:42** (cuisson + JEEP branchee a 13:31). Journee
nuageuse, parc reduit de moitie. Mesure a la resolution native **a l'instant ou
chaque decision a ete prise, contacteur encore ouvert** — donc sur une
production non censuree :
| fermeture | maison | PV | **parc reellement sollicite** | decharge batterie mesuree |
|---|---:|---:|---:|---:|
| 12:07, cuisson seule | 4 025 W | ~2 890 W | **1 132 W** | 1 345 W |
| 13:34, cuisson + JEEP | 4 981 W | ~4 210 W | **772 W** | 1 223 W |
La decharge batterie colle a `maison - PV`, pas a la maison brute : le controle
croise est net. Le plafond du parc est de 5 100 W — **il etait a 22 % et 15 % de
sa limite, et la regle a ferme le contacteur pour rien.** Meme en integrant les
periodes fermees (ou le PV peut etre bride, donc chiffres pessimistes), la
demande maximale sur le parc n'a atteint que 3 046 et 2 437 W. Cout : 0,50 kWh
importes en plein soleil, pour rien.
Cause : la regle du 05/09 compare la MAISON BRUTE au plafond de decharge du
parc. Elle n'avait bien fonctionne la veille au soir que parce qu'il n'y avait
plus de PV — la maison brute valait alors la demande sur le parc, et le pic de
-97,4 A etait reel. Des qu'il y a du soleil, elle ferme sur une charge que le
solaire couvre deja.
Correctif (deploye 06/09 13:49,
`tools/patch-20260906b-demande-sur-le-parc.mjs`) : les deux seuils portent sur
**`max(0, maison - PV)`**. `acOverSafeLimit` n'est PAS touche — il compare la
charge au debit des onduleurs, qui portent la maison entiere quelle qu'en soit
la source.
⚠️ **Pourquoi ce n'est pas un oscillateur**, alors que la grandeur n'est pas
invariante a la decision (fermer peut brider le MPPT, §28) : contacteur OUVERT,
`maison - PV` EST la decharge batterie, grandeur physique exacte ; contacteur
FERME, un bridage du MPPT fait BAISSER PV donc MONTER `maison - PV` — l'erreur
pousse a rester ferme, jamais a relacher tot ; et le relachement exige de toute
facon le dwell (6 a 20 min), tres au-dela du transitoire d'etablissement mesure
a ~150 s. Erreur unilaterale et bornee, dans la direction qui menage le parc.
Golden 20 -> 24 : les deux releves de ce midi (aucune fermeture attendue), le
contrefactuel du nuage (meme cuisson a 4 500 W avec PV 200 W -> on ferme), et
`h-midi-soleil-revenu-relache` (contacteur ferme, cuisson a 3 000 W mais PV
2 000 -> le parc n'est plus sollicite qu'a 1 000 W, on rend). Les scenarios de
protection existants portent desormais `pv_power_w: '0'` explicitement : ils
decrivent le soir, ou le parc est seul.
⚠️ Piege evite grace au test de mutation : la premiere serie de scenarios ne
couvrait que le seuil de FERMETURE. Remettre le relachement sur la maison brute
ne faisait echouer aucun test — il a fallu ecrire `h-midi-soleil-revenu-relache`
pour que la mutation morde.
### Ce que la JEEP n'a PAS cause, et la question qu'elle pose quand meme
Le propriétaire attribuait la fermeture de midi a la conjonction cuisson +
voiture. Les faits : **la voiture n'etait pas branchee** pendant l'episode de
12:07 (EVCS a 0 W de bout en bout) ; elle n'a joue que dans celui de 13:34, qui
n'aurait pas du fermer non plus. Les deux fermetures viennent de la regle, pas
de la charge.
Reste que la question de fond est juste, et elle n'est pas traitee : `houseAcPowerW`
inclut l'EVCS, donc **la voiture est comptee comme une charge menagere
incompressible** alors qu'elle est la seule charge entierement compressible du
foyer — le controleur EVCS peut la ramener a 6 A ou l'arreter en un cycle. Le
jour ou la demande sur le parc depassera vraiment le plafond avec la voiture
dedans, la reponse economique est de brider la voiture d'abord et de ne fermer
le contacteur que pour le reste. Aucun des deux workflows ne sait faire cela
aujourd'hui : le controleur EVCS ignore le plafond de decharge du BMS, et
l'hysteresis ne sait pas commander la borne. A instruire.
### Anomalie annexe : une session de charge comptee deux fois
`Session de charge terminee : JEEP, 4.20 kWh` a ete emis **deux fois** — a
02:52:31 (fin de la charge HC reelle) et a 13:42:32 (debranchement apres onze
minutes de charge diurne), avec la MEME valeur au centieme. Le compteur de
session de `tools/historise-evcs.mjs` semble rejouer la session de la nuit au
lieu d'en ouvrir une nouvelle. A corriger, sans quoi la table `session_charge`
double-compte.
### Reste ouvert
- Detecteur de gel dans le service d'historisation : une grandeur qui ne bouge
pas alors qu'une autre du meme bilan bouge = alerte. Non fait.