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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user