Section 65 : ce que les etiquettes de vehicule ont appris

Consigne au dossier ce que la journee a produit autour du concierge
vehicule : le drapeau `vehicule_sur` qui ne detecte pas le cas qui compte,
la puissance qui distingue un vehicule invite la ou elle ne distingue pas
les deux du foyer, et surtout la frontiere d'un branchement — un fait lu
dans le journal, jamais un ecart de temps, les creux soir/heures creuses
faisant 5 h 20.

Plus le contrat arrete avec la session OpenClaw (helper unique en liste,
clef verbatim avec millisecondes, max:255 explicite, fenetre commencant sur
un branchement) et la correction sur `evcs_lecture`, qui porte un INSERT
sur `evenement` et ne doit donc pas etre confie a un tiers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-13 17:38:22 +02:00
parent d41eed977e
commit 024eb3e0f7

View File

@@ -6108,5 +6108,113 @@ c'est donc la charge du MATIN qui dira ce que le 150 A libere.
Cellules a 2 mV d'ecart et aucune alarme sur toute la sequence. Cellules a 2 mV d'ecart et aucune alarme sur toute la sequence.
## 65. Session du 13/09/2026 (soir) — Six sessions sur douze etaient mal etiquetees
### Le declencheur
Une session voisine sur OpenClaw prepare un « concierge vehicule » : un agent
qui demande par WhatsApp quel vehicule est branche quand l'etiquette est
douteuse. En lui donnant les noms d'entites, j'ai verifie le selecteur.
`input_select.victron_evcs_vehicle` etait sur **VW, inchange depuis le 07/09
20:49** — six jours. Onze sessions consecutives en avaient herite.
### ⚠️ `vehicule_sur` ne dit pas ce que son nom laisse croire
Les onze lignes affichaient `vehicule_sur = true`. En lisant le code :
`vehicule_sur = vehicule_sur AND (nouveau = ancien)` — le drapeau ne passe a
faux que si le selecteur change PENDANT une session. Un selecteur perime depuis
six jours reste « sur ». C'est le defaut de conception qui a rendu l'anomalie
invisible, et il est de mon fait.
### Ce que la puissance revele, et qui corrige une doctrine
`p_max_w` sur les douze sessions :
```
3 606 a 3 784 W -> onze sessions, toutes a 20 A de consigne
6 360 W / 28 A -> UNE session, le 11/09 16:54
```
Cette derniere est une **Megane electrique de service**, utilisee pour aller a
Rennes — 7,45 kWh attribues a la VW qui ne les a jamais pris. Le proprietaire
depanne aussi des amis en charge : le vehicule invite est un cas recurrent, et
il n'etait documente nulle part.
**La doctrine « vehicules indiscernables » ne vaut donc QUE pour la VW et la
JEEP l'une par rapport a l'autre.** Regle a sens unique : `consigne_max_a >= 20`
ET `p_max_w > 4200` ⟹ invite, certain ; en dessous on ne sait rien, car un
invite a chargeur 16 A est identique a la VW. Toute question sur l'identite d'un
vehicule doit offrir « aucune des deux ».
### ⚠️ LA FRONTIERE D'UN BRANCHEMENT EST UN FAIT, PAS UN ECART DE TEMPS
J'ai d'abord reconstruit les groupes soiree+nuit par l'ecart entre sessions.
Les ecarts reels valent **5 h 19 a 5 h 25** — le creux entre la fin du solaire
et l'ouverture des heures creuses. Aucun seuil de duree ne les distingue d'une
nuit entiere.
La table `evenement` enregistre les transitions de
`binary_sensor.victron_evcs_vehicle_connected`, en jsonb structure :
`detail->>'entite'`, `detail->>'avant'`, `detail->>'apres'`. Un branchement va
d'un `apres='on'` au `apres='off'` suivant. C'est un FAIT observe.
Les branchements reels de la semaine :
```
mar 08/09 19:39 -> mer 08:57 2 sessions
mer 09/09 15:55 -> jeu 09:05 3 SESSIONS
jeu 10/09 18:19 -> ven 16:27 2 sessions
ven 11/09 16:53 -> 18:27 1 session (Megane)
sam 12/09 11:42 -> 11:53 1 session
sam 12/09 11:55 -> en cours 1 session
```
**Le mercredi est un triplet, et j'avais applique une correction incoherente** :
15:55 en JEEP, 19:35 et 01:25 laissees en VW. Physiquement impossible — un seul
point de charge, le cable n'a pas bouge. Le journal me l'a mis sous le nez.
### La raison, que rien n'aurait pu deduire
Mot du proprietaire : « mercredi c'est typique du contexte humain pas logique du
tout car ma femme a branche la JEEP et le soir quand mon fils est arrive il n'a
pas debranche la JEEP pour brancher la VW a la place, donc le jeudi il a roule a
l'essence ». Plus le contexte de la semaine : sa femme (JEEP) en conges, son
fils (VW) en stage sans retour le midi — la routine documentee entierement
inversee.
Il ajoute qu'il lui est **plus facile de donner ces informations par WhatsApp
que de venir sur un PC**. C'est l'argument central de l'agent conversationnel,
et il est meilleur que celui que je defendais (« le selecteur s'oublie ») : le
systeme n'a aucun canal d'entree pour le contexte humain.
### Etiquettes finales (reparation idempotente, 6 lignes)
5 VW, 6 JEEP, 1 MEGANE — contre 11 VW et 1 JEEP avant. Chaque predicat verifie
en lecture avant ecriture : fenetre d'une minute, exactement une ligne visee,
energies concordantes.
### L'INVARIANT a retenir
**Un cable, un vehicule** : toutes les sessions d'un meme branchement portent la
meme etiquette. C'est une propriete physique, independante de toute
connaissance metier, qu'aucune evolution de regle ne peut invalider. Un groupe a
etiquettes mixtes signale soit une frontiere fausse, soit une ligne fausse — les
deux meritent une alerte. C'est ce controle qui aurait signale mon triplet le
jour meme ; il est desormais au cahier des charges du concierge, en continu.
### Contrat arrete avec la session OpenClaw
- Airtria publie dans SON espace de noms, ne touche aucun actionneur, et le
service d'historisation — proprietaire de `session_charge` — lit et applique.
- Un seul helper JSON, `session_debut` en LISTE (ecritures sequentielles sur un
helper unique perdraient une confirmation sur deux, mon service ne passant que
toutes les 60 s).
- La clef `debut` porte les **millisecondes** : renvoyer la chaine verbatim,
jointure sur ±1 s.
- `input_text` : declarer `max: 255` — le defaut est 100, et un rejet est
SILENCIEUX (incident `forecast_updated` du 08/09).
- Une fenetre d'analyse historique doit commencer sur un `on`, jamais au milieu
d'un branchement.
### ⚠️ `evcs_lecture` N'EST PAS EN LECTURE SEULE
Verifie en repondant : SELECT partout, plus **INSERT sur `evenement`** — octroi
delibere du 04/09 pour les annotations manuelles, mais que le README decrivait
a deux endroits comme « lecture seule », et que j'ai repete a un tiers. Ne pas
confier ce role a un agent externe : `evenement` alimente les annotations
Grafana, le rapport de nuit et l'attribution des transitions, et une ligne
etrangere y serait indiscernable des notres. Un role dedie `airtria_ro`, SELECT
sur `session_charge` et `evenement` uniquement, est en attente de creation par
le proprietaire. README corrige.
--- ---
*Document mis a jour le : 13/09/2026 — table de charge 150/130/80/30, pv_mid 51,2 → 51,5 V, golden-acm 20/20* *Document mis a jour le : 13/09/2026 (soir) — six etiquettes de vehicule corrigees, frontiere de branchement lue dans le journal, contrat du concierge arrete*