Onze sessions etiquetees VW a tort, et l une n est meme pas du foyer
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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -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
|
L'heure de **debranchement** confirme a posteriori, les deux vehicules partant
|
||||||
a des heures differentes (JEEP ~06:30, VW ~08:50).
|
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
|
### Un TROISIEME vehicule a venir : la moto
|
||||||
|
|
||||||
Le proprietaire possede une **moto electrique Zero Motorcycles SR/F**. Elle
|
Le proprietaire possede une **moto electrique Zero Motorcycles SR/F**. Elle
|
||||||
|
|||||||
@@ -562,6 +562,47 @@ async function migrer(client) {
|
|||||||
// « montre-moi tous les signalements graves de la semaine ».
|
// « montre-moi tous les signalements graves de la semaine ».
|
||||||
await client.query(
|
await client.query(
|
||||||
'CREATE INDEX IF NOT EXISTS observation_gravite_idx ON observation (gravite, ts DESC)');
|
'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,
|
// Le role de lecture doit voir la nouvelle table. S'il n'existe pas encore,
|
||||||
// on ne fait pas echouer le demarrage pour autant.
|
// on ne fait pas echouer le demarrage pour autant.
|
||||||
await client.query(`DO $$ BEGIN
|
await client.query(`DO $$ BEGIN
|
||||||
|
|||||||
Reference in New Issue
Block a user