Files
EVCS/docs/CHANTIER_BILAN_ENERGETIQUE.md
Tallagrand Thierry 7cdb45ecf9 Chantier etape 1 : detection de la censure de la production PV
Sans injection reseau, PV_mesuree = min(ressource, conso + absorption batterie).
La mesure est donc censuree a droite des que la batterie est pleine ou que le
reseau alimente AC-IN. Mesure sur l'historique du 28/07 au 24/08 : 48 % des
heures de jour sont censurees, 77 a 96 % a partir de 13 h. Un profil de
production bati sur la mesure brute mesure en realite sa propre consommation.

src/energy-balance/HA_SNAPSHOT_TEMPLATE.json.tpl : 26 champs, dont tous les
signaux qu'aucun workflow ne lisait jusqu'ici — etats des trois MPPT, etat
VE.Bus, alarme de surcharge onduleur, ESS BatteryLife, etat du bus DC, statut
natif de la borne, prevision horaire, elevation du soleil.

src/energy-balance/CENSORSHIP.js : qualifie chaque echantillon (censure et ses
motifs, exploitabilite) et verifie en continu l'identite du bus DC
PV + VE.Bus = batterie, qui boucle a 95 W pres — un capteur qui derive devient
detectable. Ne decide rien.

tests/energy-balance/ : 10 scenarios, dont un snapshot reel du 24/08 14:29
(soleil 52 degres, prevision 3462 W, production bridee a 1159 W, SOC 94 %)
correctement classe censure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
2026-08-24 14:31:24 +02:00

80 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chantier — Bilan énergétique partagé
> Journal de bord du chantier ouvert le 24/08/2026. Documentation définitive à
> écrire à la fin ; ce fichier ne sert qu'à ne rien perdre en route.
## Pourquoi ce chantier
Constat du propriétaire, 24/08/2026 : « nous avons essayé de résoudre un défaut
de stratégie par une suite de solutions tactiques ». Trois oscillateurs
identifiés le même jour (règle de coupure EDF « Fix G », override d'abondance P6
qui détruisait sa propre condition d'autorisation, inversion des planchers de
démarrage et de maintien) — tous de la même nature : des seuils empilés par
couches successives, chacun défendable isolément, dont personne ne vérifiait la
cohérence d'ensemble. Chaque correctif créait l'oscillateur suivant.
**Toute valeur fixe est traitée comme une erreur de conception**, pas comme un
réglage à affiner.
## Décisions actées
| Sujet | Décision |
|---|---|
| Profil horaire | Recalculé une fois par jour, publié dans des helpers. Pas de recalcul dans la boucle 30 s. |
| Prudence | Percentile 20, appliqué **une seule fois sur le bilan net** (PV − conso par heure et par jour), jamais séparément sur chaque terme — sinon on cumule deux pessimismes et le déficit passe à 109 % de la batterie, système inutilisable. |
| SOC | Lissé pour les décisions de pilotage, valeur instantanée conservée pour les planchers de sécurité. |
| Consommation | Mesurée, jamais supposée. Filtrage contextuel. Mesure non biaisée. |
| Production PV | **Jamais la mesure brute.** Sans injection, `PV_mesurée = min(ressource, conso + absorption batterie)` : observation censurée dès que la batterie est pleine. Estimateur = prévision, recalée uniquement sur les heures non censurées. |
| Rétention historique | `recorder.purge_keep_days = 90` (appliqué le 24/08, redémarrage HA fait). Les statistiques long terme étaient déjà sans limite. |
| Conseiller IA | Les faits restent arithmétiques et déterministes ; l'advisor traite les hypothèses (facteur de confiance sur la prévision, lecture des états et alarmes, explication). Montée en pouvoir en trois paliers, sur un score de prédiction vérifié contre la mesure. |
## Sorties attendues du bilan
Heure de croisement PV/conso · énergie à couvrir d'ici là · niveau de batterie
requis (remplace `grid_soc_off` fixe) · marge disponible pour le véhicule ·
drapeau « production actuellement bridée » · drapeau de santé des mesures.
## Avancement
- [x] **Étape 1 — détection de la censure** (24/08). `src/energy-balance/` :
snapshot HA de 26 champs incluant les signaux jamais lus (états MPPT, état
VE.Bus, alarme de surcharge, ESS BatteryLife, état du bus DC, statut natif de
la borne, prévision horaire) et nœud `CENSORSHIP.js` qui qualifie chaque
échantillon. Suite `tests/energy-balance/` : 10 scénarios, dont un snapshot
réel du 24/08 14:29 correctement classé censuré. Mesure sur l'historique :
**48 % des heures de jour sont censurées, 77 à 96 % à partir de 13 h.**
- [ ] Étape 2 — profil de consommation mesuré (non censuré).
- [ ] Étape 3 — estimateur de ressource PV = prévision recalée sur les heures
exploitables de l'étape 1.
- [ ] Étape 4 — bilan et ses sorties.
## Backlog
- [ ] **Doublon `unique_id: victron_vebus_dc_power`** — déclaré deux fois, avec
deux topics différents : `configuration.yaml:99`
(`system/0/Dc/Vebus/Power`) et `packages/victron_vebus_mqtt.yaml:63`
(`vebus/276/Dc/0/Power`). Vérifié le 24/08 : **les deux publient la même
grandeur** — un système VE.Bus en parallèle n'expose qu'une seule instance
D-Bus couvrant les deux onduleurs. Ce n'est donc pas un défaut de données,
seulement une ligne `ERROR` à chaque démarrage et un fichier qui ment sur ce
qu'il fait. Supprimer les lignes 62-68 du package, garder celle de
`configuration.yaml` (nom conforme à l'`entity_id` utilisé par `INPUT_PARSE`),
puis `mqtt.reload` — pas besoin de redémarrer.
- [ ] **`evcsDedicatedMaxW: 4900`** codé en dur dans `INPUT_PARSE.js`, appliqué
dès qu'EDF est absent (plafond ~20 A). Encore une valeur au jugé : à
confronter à la réalité du câblage du circuit dédié avant de la garder ou de
la remplacer par un helper.
- [ ] **Alarmes jamais lues** : `sensor.airtria_mpii_v1_overload_alarm`, alarme
« High charge current » du Battery Monitor (observée active le 24/08),
`sensor.gx_device_ess_batterylife_state` (peut imposer sa propre limite de
décharge à l'insu du contrôleur), `sensor.evcs_hq2239dnt7p_status`.
- [ ] **États MPPT jamais lus** (`sensor.airtria_mppt1_state`,
`sensor.mppt_450_200_hq2449yr9pt_state`) — indispensables : ils disent si un
échantillon de production est exploitable ou censuré.
- [ ] **Contrôle de vraisemblance `PV + VE.Bus = batterie`** — vérifié à 95 W
près le 24/08 (~9 %). À intégrer comme drapeau de santé permanent : le jour
où l'identité diverge, un capteur ment.
- [ ] **États zombies** `stop_source_lost` / `idle_wait_source` — noms
transitoires peu lisibles dans le journal et le tableau de bord (cf. HANDOFF
§24, hors périmètre à l'époque).