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:
Tallagrand Thierry
2026-09-06 14:03:17 +02:00
parent c7e665cd5c
commit c3ef58dd18
3 changed files with 237 additions and 18 deletions

View File

@@ -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.