Capacite estimee : un niveau saisi plus d'une heure apres le branchement compte l'energie depuis sa saisie

This commit is contained in:
Tallagrand Thierry
2026-10-16 01:33:43 +02:00
parent 92e44df2f7
commit 04d2606ff7
3 changed files with 22 additions and 2 deletions

View File

@@ -2462,6 +2462,7 @@ batterie a 32 A et JEEP (branchee 13:01, 52 %) qui ne demarre pas. SOC 47 % a 12
- A 01:10 : mode de nuit `sans_edf`, budget batterie **0 kWh** (SOC 46 pour 52,3 % requis prudent) -> la VW aurait attendu le soleil. Pose par moi a 01:11 (demande du proprietaire) : `input_select.victron_evcs_night_charge_mode` = **complete** (retour automatique sans_edf a 12:00) et niveau **17 %** (`victron_evcs_vehicle_level_pct`, reference compteur 4149,6 recalee par l'automatisation) pour que le correctif « plein dementi par le niveau » protege la session. - A 01:10 : mode de nuit `sans_edf`, budget batterie **0 kWh** (SOC 46 pour 52,3 % requis prudent) -> la VW aurait attendu le soleil. Pose par moi a 01:11 (demande du proprietaire) : `input_select.victron_evcs_night_charge_mode` = **complete** (retour automatique sans_edf a 12:00) et niveau **17 %** (`victron_evcs_vehicle_level_pct`, reference compteur 4149,6 recalee par l'automatisation) pour que le correctif « plein dementi par le niveau » protege la session.
- Verifie : 01:24:07 EDF demande, 01:24:47 tension d'entree **220,7 V** (EDF 100A ferme bien a distance), 01:25:47 depart 6 A, 01:27:17 `charging_hold_grid` « Reseau HC autorise » 1,7 kW et rampe. Besoin ~6,5-7 kWh, plein attendu ~03:30. - Verifie : 01:24:07 EDF demande, 01:24:47 tension d'entree **220,7 V** (EDF 100A ferme bien a distance), 01:25:47 depart 6 A, 01:27:17 `charging_hold_grid` « Reseau HC autorise » 1,7 kW et rampe. Besoin ~6,5-7 kWh, plein attendu ~03:30.
- Releve km 217 311 / 17 % non enregistre (a faire par le concierge : « VW 217311 km 17 % »). - Releve km 217 311 / 17 % non enregistre (a faire par le concierge : « VW 217311 km 17 % »).
- Datation des niveaux (SPARK + moi, 16/10 ~01:50) : cote concierge, un releve n'est rattache au branchement que < 1 h ET sans energie livree depuis, sinon heure du message / de la photo ; cote base, `capacite_estimee` compte l'energie depuis `ref_kwh` quand le niveau est saisi > 1 h apres le branchement (la regle du 03/10 « dans l'heure = niveau du branchement » est gardee). Tests vues 46/46, mutation qui mord ; service redemarre.
- **A verifier au matin du 16/10** : kWh de la session VW, heure du plein, reouverture d'EDF, revue de 07:30 (la session reseau de nuit est legitime : voiture en mode complete). - **A verifier au matin du 16/10** : kWh de la session VW, heure du plein, reouverture d'EDF, revue de 07:30 (la session reseau de nuit est legitime : voiture en mode complete).
--- ---

View File

@@ -182,6 +182,19 @@ if (process.argv.includes('--vues')) {
await c.query(`INSERT INTO decision (ts, etat) VALUES ('2020-04-01T12:01Z','day_vehicle_full_idle')`); await c.query(`INSERT INTO decision (ts, etat) VALUES ('2020-04-01T12:01Z','day_vehicle_full_idle')`);
const w = (await c.query("SELECT * FROM capacite_estimee WHERE branche >= '2020-04-01' AND branche < '2020-04-02'")).rows[0]; const w = (await c.query("SELECT * FROM capacite_estimee WHERE branche >= '2020-04-01' AND branche < '2020-04-02'")).rows[0];
eq('vue : niveau estime expose', w.niveau_estime, true); eq('vue : niveau estime expose', w.niveau_estime, true);
// 16/10/2026 : niveau saisi PLUS d'une heure apres le branchement (VW 17 %
// lu a 01:08, 11 h apres) : l'energie se compte depuis la reference de la
// saisie, pas depuis le branchement. Branchement 2020-03-01 10:00 -> 20:00,
// compteur 200,0 au branchement, 200,6 a la saisie (13:00, 20 %), 208,9 a
// la fin, plein vu a 18:00 -> 8,3 kWh / 0,8 = 10,375 (11,125 sans la regle).
await ev('2020-03-01T10:00:00Z', 'on'); await ev('2020-03-01T20:00Z', 'off');
await c.query(`INSERT INTO etiquette_branchement (branchement, label, source_airtria) VALUES ('2020-03-01T10:00:00Z','TESTL','test')`);
await c.query(`INSERT INTO niveau_saisi (saisi_a, niveau_pct, ref_kwh) VALUES ('2020-03-01T13:00Z', 20, 200.6)`);
await cpt('2020-03-01T09:59Z', 200.0); await cpt('2020-03-01T19:59Z', 208.9);
await c.query(`INSERT INTO decision (ts, etat) VALUES ('2020-03-01T18:00Z','day_vehicle_full_idle')`);
const tardif = (await c.query("SELECT * FROM capacite_estimee WHERE branche >= '2020-03-01' AND branche < '2020-03-02'")).rows[0];
proche('saisie tardive : energie depuis la saisie (8,3)', tardif.kwh_livres, 8.3);
proche('saisie tardive : capacite = 8,3 / 0,8', tardif.capacite_kwh, 10.375);
} finally { await c.query('ROLLBACK'); await c.end(); } } finally { await c.query('ROLLBACK'); await c.end(); }
} }
console.log(`${ok}/${ok + ko}`); console.log(`${ok}/${ok + ko}`);

View File

@@ -190,8 +190,14 @@ WITH tr AS (
coalesce( coalesce(
(SELECT valeur FROM mesure m WHERE m.cle = 'sensor.evcs_hq2239dnt7p_total_energy' (SELECT valeur FROM mesure m WHERE m.cle = 'sensor.evcs_hq2239dnt7p_total_energy'
AND m.ts <= v.debranche AND m.ts >= v.branche - interval '1 day' ORDER BY m.ts DESC LIMIT 1) AND m.ts <= v.debranche AND m.ts >= v.branche - interval '1 day' ORDER BY m.ts DESC LIMIT 1)
- coalesce((SELECT valeur FROM mesure m WHERE m.cle = 'sensor.evcs_hq2239dnt7p_total_energy' -- 16/10/2026 : un niveau saisi dans l'heure vaut pour le BRANCHEMENT
AND m.ts <= v.branche AND m.ts >= v.branche - interval '1 day' ORDER BY m.ts DESC LIMIT 1), ref_kwh), -- (regle du 03/10, « c'etait 53 % a 13h10 ») ; saisi PLUS d'une heure
-- apres, il vaut pour son heure (VW 17 % lu a 01:08, 11 h apres le
-- branchement et 0,64 kWh livres) : l'energie se compte depuis la
-- reference du compteur a la saisie.
- CASE WHEN ref_kwh IS NOT NULL AND saisi_a > v.branche + interval '1 hour' THEN ref_kwh
ELSE coalesce((SELECT valeur FROM mesure m WHERE m.cle = 'sensor.evcs_hq2239dnt7p_total_energy'
AND m.ts <= v.branche AND m.ts >= v.branche - interval '1 day' ORDER BY m.ts DESC LIMIT 1), ref_kwh) END,
(SELECT sum(coalesce(sc.energie_station_kwh, sc.energie_kwh)) FROM session_charge sc (SELECT sum(coalesce(sc.energie_station_kwh, sc.energie_kwh)) FROM session_charge sc
WHERE sc.debut >= v.branche AND sc.debut < v.debranche)) AS kwh_livres, WHERE sc.debut >= v.branche AND sc.debut < v.debranche)) AS kwh_livres,
EXISTS (SELECT 1 FROM decision d WHERE d.ts > v.branche AND d.ts <= v.debranche EXISTS (SELECT 1 FROM decision d WHERE d.ts > v.branche AND d.ts <= v.debranche