From 095d86d146674ce9c2b87d8d3f1dbe5cf30c344b Mon Sep 17 00:00:00 2001 From: Tallagrand Thierry Date: Sun, 13 Sep 2026 17:11:10 +0200 Subject: [PATCH] Onze sessions etiquetees VW a tort, et l une n est meme pas du foyer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le selecteur de vehicule est reste sur VW du 07/09 20:49 au 13/09 : onze sessions consecutives ont herite de cette etiquette, toutes marquees « sur » — le drapeau `vehicule_sur` ne passe a faux que si le selecteur bouge PENDANT une session, donc un selecteur perime reste fiable a ses propres yeux. Quatre lignes corrigees, apres arbitrage du proprietaire : mer 09/09 15:55 6,61 kWh -> JEEP ven 11/09 16:54 7,45 kWh -> MEGANE sam 12/09 11:42 0,09 kWh -> JEEP sam 12/09 11:55 5,94 kWh -> JEEP La session du 11/09 n'est ni la VW ni la JEEP : 6 360 W a 28 A quand les deux vehicules du foyer plafonnent vers 3 680 W. C'est une Megane de service. Ce cas n'etait documente nulle part, et il corrige la doctrine « vehicules indiscernables » : elle ne vaut que pour la VW et la JEEP l'une par rapport a l'autre, un vehicule invite se lit dans `p_max_w`. Les sept autres lignes etaient justes — par chance, la VW etant celle qui charge le plus souvent. L'arbitrage a repose sur un contexte qu'aucun capteur ne produit : sa femme (JEEP) en conges, son fils (VW) en stage sans retour le midi. C'est l'argument central pour l'agent conversationnel — il dit lui-meme qu'il lui est plus facile de donner cela par WhatsApp que de venir sur un PC. Reparation idempotente, fenetre d'une minute, verifiee en lecture avant ecriture : chaque predicat vise exactement une ligne, energies concordantes. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj --- docs/MANUEL_COMPLET.md | 38 +++++++++++++++++++++++++++++++++++++ tools/historise-evcs.mjs | 41 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/docs/MANUEL_COMPLET.md b/docs/MANUEL_COMPLET.md index 595c82f..b03f750 100644 --- a/docs/MANUEL_COMPLET.md +++ b/docs/MANUEL_COMPLET.md @@ -142,6 +142,44 @@ de Home Assistant peut l'annuler (constate le 04/09 a 19:44, cf. HANDOFF §47). L'heure de **debranchement** confirme a posteriori, les deux vehicules partant a des heures differentes (JEEP ~06:30, VW ~08:50). +### Vehicules INVITES : ils se reconnaissent, eux + +Un troisieme cas existe depuis toujours et n'etait documente nulle part : des +vehicules qui ne sont pas ceux du foyer. +- une **Megane electrique de service**, que le proprietaire utilise pour ses + deplacements professionnels (Rennes, 11/09/2026) ; +- les voitures d'**amis de passage**, a qui il propose de recharger. + +⚠️ **Contrairement a la VW et a la JEEP, ceux-la se distinguent +electriquement.** Les deux vehicules du foyer plafonnent vers 3 680 W (~16 A +embarques) ; la Megane a pris **6 360 W a 28 A** le 11/09. La colonne +`session_charge.p_max_w` suffit donc a dire « ce n'est aucun des deux » : + +| p_max_w | lecture | +|---|---| +| ~1 700 W | VW ou JEEP a courant reduit (6-9 A) | +| 3 600 a 3 800 W | VW ou JEEP a pleine consigne — **indiscernables entre elles** | +| > 4 000 W | vehicule INVITE, ni VW ni JEEP | + +La doctrine « les vehicules sont indiscernables » ne vaut donc QUE pour la VW +et la JEEP l'une par rapport a l'autre. Toute question posee au proprietaire +sur l'identite d'un vehicule doit offrir une reponse « aucune des deux », sans +quoi elle le force a repondre faux. + +### Le CONTEXTE qui decide, et qu'aucun capteur ne produit + +Releve du 13/09/2026, donne par le proprietaire pour trancher deux sessions +ambigues : **sa femme (JEEP) etait en conges cette semaine et la suivante**, et +**son fils (VW) en stage toute la semaine sans retour le midi**. Ces deux faits +inversent la routine habituelle — la JEEP charge l'apres-midi au lieu du midi, +la VW ne charge pas en journee. + +⚠️ Aucune regle horaire, aucune signature electrique, aucun historique ne +permet de deviner cela. C'est l'argument central en faveur d'un agent +conversationnel : le proprietaire dit qu'il lui est **plus facile de donner ces +informations par WhatsApp que de venir sur un PC**. Le trou a combler n'est pas +la mesure, c'est le contexte humain. + ### Un TROISIEME vehicule a venir : la moto Le proprietaire possede une **moto electrique Zero Motorcycles SR/F**. Elle diff --git a/tools/historise-evcs.mjs b/tools/historise-evcs.mjs index 660b279..4197802 100644 --- a/tools/historise-evcs.mjs +++ b/tools/historise-evcs.mjs @@ -562,6 +562,47 @@ async function migrer(client) { // « montre-moi tous les signalements graves de la semaine ». await client.query( 'CREATE INDEX IF NOT EXISTS observation_gravite_idx ON observation (gravite, ts DESC)'); + + // ------------------------------------------------------------------- + // REPARATION UNIQUE (13/09/2026) — onze sessions etiquetees « VW » a tort + // ------------------------------------------------------------------- + // `input_select.victron_evcs_vehicle` est reste sur VW du 07/09 20:49 au + // 13/09 : onze sessions consecutives ont herite de cette etiquette, toutes + // avec `vehicule_sur = true` — ce drapeau ne passe a faux que si le + // selecteur bouge PENDANT une session, donc un selecteur perime reste + // « sur ». C'est le defaut qui a motive le concierge vehicule. + // + // Le proprietaire a tranche, et son arbitrage repose sur un contexte + // qu'aucun capteur ne produit : sa femme (JEEP) etait en conges cette + // semaine, son fils (VW) en stage sans retour le midi. + // + // mer 09/09 15:55 6,61 kWh -> JEEP (sa femme en conges, charge l'apres-midi) + // ven 11/09 16:54 7,45 kWh -> MEGANE (voiture de service, voir ci-dessous) + // sam 12/09 11:42 0,09 kWh -> JEEP (samedi midi, routine du week-end) + // sam 12/09 11:55 5,94 kWh -> JEEP + // + // La session du 11/09 n'est NI la VW NI la JEEP : 6 360 W a 28 A, quand les + // deux vehicules du foyer plafonnent vers 3 680 W. C'est une Megane + // electrique de service. Un vehicule invite se reconnait donc a sa + // puissance, contrairement a la VW et a la JEEP entre elles. + // + // Les sept autres lignes etaient justes — par chance, la VW etant le + // vehicule qui charge le plus souvent. Elles ne sont pas touchees. + // + // ⚠️ `debut` porte les millisecondes : fenetre d'une seconde, jamais une + // egalite. La condition sur la valeur attendue rend l'operation idempotente. + for (const [debut, etait, devient] of [ + ['2026-09-09 15:55:00+02', 'VW', 'JEEP'], + ['2026-09-11 16:54:00+02', 'VW', 'MEGANE'], + ['2026-09-12 11:42:00+02', 'VW', 'JEEP'], + ['2026-09-12 11:55:00+02', 'VW', 'JEEP'], + ]) { + await client.query( + `UPDATE session_charge SET vehicule = $3 + WHERE debut >= $1::timestamptz AND debut < $1::timestamptz + interval '1 minute' + AND vehicule = $2`, + [debut, etait, devient]); + } // Le role de lecture doit voir la nouvelle table. S'il n'existe pas encore, // on ne fait pas echouer le demarrage pour autant. await client.query(`DO $$ BEGIN