Kilometrage : niveaux deduits de l'autonomie marques (photo_autonomie), exposes par capacite_estimee.niveau_estime

This commit is contained in:
Tallagrand Thierry
2026-10-12 14:36:49 +02:00
parent 434ceebafe
commit 8a6c7479d4
2 changed files with 40 additions and 1 deletions

View File

@@ -202,13 +202,18 @@ WITH tr AS (
ORDER BY r.ts LIMIT 1) AS niveau_releve_apres,
(SELECT nf.niveau_pct FROM niveau_fin nf
WHERE nf.saisi_a >= v.debranche - interval '15 minutes' AND nf.saisi_a <= v.debranche + interval '1 hour'
ORDER BY nf.saisi_a LIMIT 1) AS niveau_fin_saisi
ORDER BY nf.saisi_a LIMIT 1) AS niveau_fin_saisi,
(SELECT nf.source FROM niveau_fin nf
WHERE nf.saisi_a >= v.debranche - interval '15 minutes' AND nf.saisi_a <= v.debranche + interval '1 hour'
ORDER BY nf.saisi_a LIMIT 1) AS niveau_fin_source
FROM v
), f AS (
SELECT k.*, coalesce(niveau_fin_saisi, CASE WHEN plein THEN 100 ELSE niveau_releve_apres END) AS niveau_fin FROM k
)
SELECT branche, debranche, coalesce(vehicule, '?') AS vehicule, niveau_pct, niveau_fin,
kwh_livres, plein,
-- Un des deux niveaux est deduit de l'autonomie affichee (pas une lecture).
(coalesce(source, '') ILIKE '%autonomie%' OR coalesce(niveau_fin_source, '') ILIKE '%autonomie%') AS niveau_estime,
CASE WHEN vehicule IS NOT NULL AND niveau_fin - niveau_pct >= 10 AND kwh_livres > 0
THEN kwh_livres / ((niveau_fin - niveau_pct) / 100.0) END AS capacite_kwh
FROM f`;
@@ -268,9 +273,26 @@ export async function ingererNiveauSaisi(sql, st) {
const r = await sql(
'INSERT INTO niveau_saisi (saisi_a, niveau_pct, ref_kwh) VALUES ($1,$2,$3) ON CONFLICT DO NOTHING',
[new Date(at), niveau, ref]);
await marquerNiveauxEstimes(sql);
return r?.rowCount || 0;
}
// Niveau ESTIME (12/10/2026, avec SPARK) : un niveau deduit de l'autonomie
// affichee (photo du tableau de bord VW, regle de trois sur l'autonomie pleine
// de reference) arrive dans le releve avec la source « photo_autonomie:<km>/<ref> »,
// mais aussi dans le helper du niveau, donc dans niveau_saisi SANS source.
// On recopie la source sur la saisie correspondante (meme niveau, a 20 min pres),
// dans un sens comme dans l'autre de l'ordre d'arrivee. La vue capacite_estimee
// l'expose (niveau_estime) : un niveau deduit de l'autonomie depend de la
// reference, du chauffage et de la conduite, et biaise justement l'usure.
export const SOURCE_ESTIMEE = 'photo_autonomie:';
export async function marquerNiveauxEstimes(sql) {
await sql(
`UPDATE niveau_saisi n SET source = r.source FROM releve_km r
WHERE n.source IS NULL AND r.source LIKE '${SOURCE_ESTIMEE}%' AND r.niveau_pct = n.niveau_pct
AND n.saisi_a BETWEEN r.ts - interval '20 minutes' AND r.ts + interval '20 minutes'`);
}
// ---------------------------------------------------------------------
// JEEP LUE DIRECTEMENT (04/10/2026) : integration HACS hass-uconnect (API
// Stellantis non officielle, compte du proprietaire, intervalle 15 min, sans