Chantier : la nuit du 25/08, le quatrieme oscillateur et son diagnostic

Journal de la premiere nuit observee avec le bilan en service : 12,30 kWh
importes, dont 1,19 kWh entre 06 h et 07 h sans aucun vehicule en charge, en
deux cycles EDF de ~25 min. Cause : la cible SOC du matin (35 %, valeur de
table) avec liberation a `SOC > cible` et rearmement a `SOC <= cible - 2` —
meme pathologie que les trois oscillateurs du 24/08, sur un autre seuil.

Corrige aussi le chiffre de la part matinale de production, une troisieme fois :
l'enveloppe subissait le meme decalage d'une heure. Le « 39,3 % du matin » est
abandonne dans le manuel comme dans le journal de chantier.

Ajoute la note sur `initial: off` du toggle advisor : tout redemarrage de Home
Assistant le repositionne a OFF.

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-08-25 11:12:35 +02:00
parent 17d65f1e40
commit 08c072d781
2 changed files with 115 additions and 1 deletions

View File

@@ -315,6 +315,116 @@ a servi (`courbe_horaire_api` ou `repli_enveloppe`). Elle garde par ailleurs un
rôle de repère de vraisemblance, **sans écrêtage** : étant minorée l'après-midi,
elle tronquerait à tort une prévision correcte.
## 25/08/2026 — Première nuit observée, et le défaut qu'elle a révélé
### Ce que la nuit a fait
| Heure | Événement |
|---|---|
| 01:24 | Fenêtre HC : EDF ON, charge du véhicule (P7) |
| 02:42 | Fin de charge détectée → `night_recovery_done_idle`, EDF coupé en 3 s |
| 02:44 → 02:45 | Véhicule débranché puis rebranché (93 s) |
| 02:47 → 04:25 | Seconde charge, 98 min ; puis EDF coupé |
| 06:22 → 06:49 | **EDF rallumé**, batterie 33 → 35 %, coupé |
| 07:02 → 07:27 | **EDF rallumé**, batterie 33 → 35 %, coupé |
Import réseau : **12,30 kWh**, dont 11,11 kWh entre 01 h et 04 h pour les
véhicules (l'EVCS en a pris 9,57) et **1,19 kWh entre 06 h et 07 h sans aucun
véhicule en charge**.
Les mécanismes de fin de charge ont fonctionné : détection franche à 02:42,
coupure immédiate, et P11 a correctement remis à zéro la mémoire « plein » au
rebranchement de 02:45 — le second véhicule a bien été rechargé.
### Le quatrième oscillateur
Les deux cycles de 06:22 et 07:02 sont un oscillateur de plus, de la même
famille que les trois du 24/08. La cible du matin
(`batteryMorningTargetPct` = 35 %) libère le takeover à `SOC > cible` et le
réarme à `SOC ≤ cible − 2`. Entre 33 et 35 %, avec une maison qui tire ~0,7 kWh/h
et une production encore nulle, la batterie traverse la bande en une vingtaine
de minutes : période mesurée ~35 min, deux cycles complets.
Ce n'est **pas** le seuil `grid_soc_off` de l'hystérésis (30 %) : à 33 % il
n'était pas en cause. C'est la cible du matin de l'EVCS. Et 35 % est une valeur
de table (règle « prévision forte → 35 »), pas un besoin calculé — le bilan,
une fois corrigé, demandait **31 %**.
### Le défaut de mesure que cette nuit a mis au jour
Le bilan annonçait à 06 h qu'il fallait **3,37 kWh** pour tenir jusqu'au
croisement. La consommation réelle sur cette tranche a été de 2,2 kWh, la
production de 0,85 : **1,35 kWh**. Deux fois et demie trop.
L'erreur ne venait pas du modèle mais de l'attribution horaire.
`bucketHourly` garde la dernière valeur de chaque heure ; le delta entre H−1 et
H est donc l'énergie dépensée **pendant H**. `deltaSeries` le rangeait sous
H−1.
Sur un compteur qui émet en continu, cela décale le profil d'une heure — gênant,
pas grave. Mais **les compteurs de cette installation sont épars** :
`ac_in_1_to_ac_out` ne peuple que **57 heures sur 267**, `evcs_total` 57 sur 264,
parce qu'ils n'émettent que lorsqu'ils avancent. Une heure vide veut dire
« valeur inchangée », donc zéro énergie : toute l'énergie d'un intervalle à trou
a été consommée pendant l'heure **finale**, celle qui a réveillé le compteur.
Rangée sous l'heure initiale, elle atterrissait n'importe où.
Mesuré : `consumption_p50[8] = 2,90 kWh/h` pour 0,80 réellement consommé. Six
échantillons sur douze portaient un delta étalé sur **17 heures** — l'import
réseau de la nuit suivante, déposé sur la dernière heure de la nuit précédente.
Le profil du matin était ainsi gonflé de l'import qu'il servait justement à
éviter : le bilan réclamait du réseau parce qu'il avait pris du réseau la veille.
Corrigé : le delta se range sous `hours[i]`. Profil du matin après correction —
0,7 kWh/h de 01 h à 07 h, 0,8 à 08 h — conforme aux 0,74 kWh/h mesurés ce
matin-là. Avec ce profil, le bilan aurait demandé **31 % à 06 h** contre 34 %
réels : pas de réseau. Sans les 1,19 kWh importés, la batterie serait descendue
à ~24 %, au-dessus du plancher dur de 22 % — mais de 2 points seulement.
**Troisième correction du même chiffre.** L'enveloppe de production subissait le
même décalage : la part matinale de la production était donc surestimée une
troisième fois, après le plafond `inverter_size` et après le biais max/moyenne
de l'enveloppe. Le pic de l'enveloppe passe de 11 h à 12 h. Aucune conclusion du
chantier ne change, mais le chiffre « 39,3 % du matin » doit être considéré comme
définitivement abandonné.
### Statut `degrade`
La nuit précédant la mise en service de la courbe horaire, le bilan a publié un
SOC requis de **100 %** avec un statut `ok`, faute de croisement trouvé sur
l'horizon. Il publie désormais `degrade` dans ce cas et quand les heures de
déficit reposent sur une forme minorée : les chiffres restent visibles, mais
plus présentés comme fiables. Un futur câblage ne pourra pas s'y fier par
inadvertance.
### Ce que la prévision, elle, a très bien fait
Courbe horaire Forecast.Solar contre production mesurée, ce matin :
| Heure | Prévu | Mesuré |
|---|---:|---:|
| 07 h | 0,08 kWh | 0,10 kWh |
| 08 h | 0,85 kWh | 0,75 kWh |
| 09 h | 3,07 kWh | 2,72 kWh |
Les trois plans réels et l'abonnement Professional donnent une ressource
utilisable telle quelle. **Le côté production du bilan est fiable ; c'était le
côté consommation qui mentait.**
### Suite
Le candidat évident au prochain câblage réel n'est plus l'hystérésis mais la
**cible SOC du matin** : c'est elle qui a coûté 1,19 kWh cette nuit, et le
toggle qui permettrait de la piloter existe déjà
(`input_boolean.evcs_advisor_apply_night_target`). À décider après quelques
nuits d'observation du seuil calculé contre le seuil de table.
⚠️ Ce toggle porte `initial: off` dans son package : **tout redémarrage de Home
Assistant le repositionne à OFF**, quelle que soit la valeur choisie par
l'utilisateur. C'est voulu pour un câblage réel en période d'essai, mais il faut
le savoir — et le retirer le jour où le câblage sera adopté.
## Backlog
- [ ] **Doublon `unique_id: victron_vebus_dc_power`** — déclaré deux fois, avec

View File

@@ -57,7 +57,11 @@ inclinaison 25°, 15 000 Wc, et un `inverter_size` de 8 000 W alors que
l'installation a déjà produit **10 770 W** mesurés — le plafond tronque donc
toute prévision. Résultat : la prévision attend une journée orientée
l'après-midi (15,1 % de l'énergie entre 7 h et 11 h) là où l'installation
produit le matin (39,3 % mesurés).
produit le matin. ⚠️ Le chiffre de « 39,3 % mesurés » cité dans les premières
versions de cette section est **abandonné** : il reposait sur une enveloppe qui
surpondère structurellement le matin, et sur une attribution horaire décalée
d'une heure (corrigée le 25/08, voir `docs/CHANTIER_BILAN_ENERGETIQUE.md`). Le
défaut de configuration était réel, son ampleur a été surestimée.
**Correction à appliquer** (interface HA, voir §0bis) : quatre plans.