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