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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user