Une session de charge ne raconte plus celle d avant
Le journal a annonce deux fois 4,20 kWh : la vraie charge de nuit, puis onze minutes de charge diurne. L energie de la borne etait echantillonnee a chaque cycle et conservee par un GREATEST — un operateur monotone, qui ne peut que surestimer et qui verrouille la premiere valeur vue. Au premier echantillon de la session de midi, le capteur portait encore le total de la nuit. Confrontation des cinq lignes a l integration relue dans InfluxDB sur les periodes de charge reelles : ecarts de 1, 5, 14, 60 et 1135 %. Le compteur cumulatif de la borne devient la mesure de reference : releve a l ouverture, sa difference a la cloture donne l energie sans ambiguite de semantique ni erreur d integration. last_session_energy est lu une seule fois, a la cloture, et enregistre comme observation ; le journal ne l affiche que s il s ecarte de plus de 10 %, ce qui rend visible le cas d une session commencee avant le demarrage du service au lieu de le substituer en silence. Les treize capteurs de la borne entrent enfin dans l historisation InfluxDB : c est leur absence qui empechait d etablir cette semantique. Second defaut de la meme fonction : l heure de debranchement etait posee en bloc sur toutes les sessions non marquees des dix-huit dernieres heures. La session de nuit de la JEEP a ainsi herite du debranchement de la VW — l inverse du role de cette colonne. La duree de branchement la borne desormais. Reparation idempotente des lignes existantes, limitee a ce qui a ete verifie. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
75
HANDOFF.md
75
HANDOFF.md
@@ -4596,6 +4596,81 @@ 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.
|
||||
|
||||
### Double comptage des sessions de charge — corrige
|
||||
`Session de charge terminee : JEEP, 4.20 kWh` a ete emis a 02:52 (vraie charge
|
||||
HC) puis a 13:42 (onze minutes de charge diurne), avec la MEME valeur au
|
||||
centieme.
|
||||
|
||||
Cause : `energie_station_kwh` etait echantillonne a chaque cycle depuis
|
||||
`sensor.evcs_hq2239dnt7p_last_session_energy` et conserve par un **`GREATEST`**
|
||||
— un operateur monotone, qui ne peut donc que SURESTIMER et qui verrouille la
|
||||
premiere valeur vue. Au premier echantillon de la session de midi, le capteur
|
||||
portait encore le total de la nuit ; le maximum l'a fige pour toujours.
|
||||
|
||||
Confrontation de chaque ligne a l'integration de `victron_evcs_ac_power` relue
|
||||
dans InfluxDB sur la periode de charge REELLE (periodes > 300 W separees de plus
|
||||
de dix minutes) :
|
||||
|
||||
| periode reelle | energie reelle | valeur en base | ecart |
|
||||
|---|---:|---:|---:|
|
||||
| 05 01:26-03:55 | 8,27 kWh | 9,400 | 14 % |
|
||||
| 05 10:00-10:54 | 2,32 kWh | 2,200 | 5 % |
|
||||
| 05 11:11-12:38 | 3,37 kWh | 5,400 | **60 %** |
|
||||
| 06 01:25-02:44 | 4,24 kWh | 4,200 | 1 % |
|
||||
| 06 13:32-13:42 | 0,34 kWh | 4,200 | **1135 %** |
|
||||
|
||||
⚠️ **La semantique de `last_session_energy` n'etait pas etablie** — le capteur
|
||||
n'etait pas historise, donc aucune serie ne permettait de trancher entre
|
||||
« derniere session terminee » et « session en cours avec reinitialisation
|
||||
tardive ». Deux indices concordants recueillis apres coup : au moment de la
|
||||
reparation il lisait 0,3 kWh et `..._last_session_time` 11 min, soit exactement
|
||||
la session de midi. Il decrit donc la derniere session TERMINEE, et le lire
|
||||
PENDANT une session donne la precedente.
|
||||
|
||||
Correctif (`tools/historise-evcs.mjs`) :
|
||||
1. **Le compteur CUMULATIF de la borne** (`..._total_energy`, ~3 780 kWh)
|
||||
devient la mesure de reference : releve a l'ouverture
|
||||
(`compteur_debut_kwh`), sa difference a la cloture donne l'energie sans
|
||||
ambiguite de semantique NI erreur d'integration. C'est desormais le chiffre
|
||||
annonce.
|
||||
2. `last_session_energy` et `last_session_time` sont lus **une seule fois, a la
|
||||
cloture**, et enregistres comme des OBSERVATIONS
|
||||
(`energie_station_kwh`, `duree_borne_min`). Le journal ne les affiche que
|
||||
s'ils s'ecartent de plus de 10 % — ce qui rend visible le cas qui avait
|
||||
motive la colonne (le 05/09, 8 kWh reels pour 0,75 integres, session commencee
|
||||
avant le demarrage du service) au lieu de les substituer en silence.
|
||||
3. Plus aucun `GREATEST` sur une grandeur d'energie.
|
||||
4. **Les treize capteurs `sensor.evcs_*` de la borne entrent dans
|
||||
l'historisation InfluxDB** (`configuration.yaml`, sauvegarde dans
|
||||
`SAVE_CONFIG/`) : c'est leur absence qui a empeche d'etablir la semantique.
|
||||
⚠️ Prend effet au prochain redemarrage de Home Assistant (les filtres
|
||||
`include`/`exclude` d'InfluxDB restent en YAML et n'ont pas de rechargement).
|
||||
|
||||
### Meme fonction, second defaut : l'heure de debranchement posee en bloc
|
||||
`debranche_a` etait ecrit par un UPDATE **sans limite** sur toutes les sessions
|
||||
non marquees des dix-huit dernieres heures. Le 05/09 a 15:02:16, les trois
|
||||
sessions ouvertes ont recu la meme heure — dont **la session de nuit de la JEEP,
|
||||
qui a herite du debranchement de la VW**. Or cette colonne existe precisement
|
||||
pour departager les deux vehicules apres coup : elle affirmait l'inverse de son
|
||||
role.
|
||||
|
||||
Correctif : la fenetre est bornee par
|
||||
`sensor.victron_evcs_charging_time`, qui repart de zero a chaque connexion
|
||||
(signal du reset P11) et se fige a la valeur du debranchement — il donne donc la
|
||||
duree exacte du branchement qui s'acheve. Duree illisible ou nulle => on ne
|
||||
marque que la session la plus recente, jamais celles d'avant.
|
||||
|
||||
### Reparation des lignes existantes (migration idempotente)
|
||||
Appliquee au prochain demarrage du service. On ne corrige QUE ce qui a ete
|
||||
verifie : la ligne du 06 13:31 passe a 0,3 kWh (valeur du capteur au moment de
|
||||
la reparation, corroboree par la duree de 11 min), celle du 05 11:11 est
|
||||
EFFACEE (60 % d'ecart, aucun substitut fiable), les trois lignes coherentes ne
|
||||
sont pas touchees, et le `debranche_a` errone de la session JEEP du 05 02:56
|
||||
repasse a NULL — on efface plutot que d'inventer.
|
||||
⚠️ `debut` porte les millisecondes : les reparations ciblent une fenetre d'une
|
||||
seconde et non une egalite, et la condition sur la valeur attendue les rend
|
||||
idempotentes. Verifie : chaque fenetre designe exactement une ligne.
|
||||
|
||||
### 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.
|
||||
|
||||
Reference in New Issue
Block a user