Grafana vehicules : resume en tableau, couleurs fixes ; HANDOFF concierge vehicule non confirme

This commit is contained in:
Tallagrand Thierry
2026-10-03 23:57:18 +02:00
parent eabd55f0cb
commit 9b283292bc
3 changed files with 227 additions and 63 deletions

View File

@@ -1347,6 +1347,9 @@ WHERE $__timeFilter(debut)
GROUP BY date_trunc(pas.unite, debut), pas.forme
ORDER BY date_trunc(pas.unite, debut)"""
COULEURS_VEHICULES = {"VW": "blue", "JEEP": "green", "ZERO": "purple",
"Invite": "yellow", "Non etiquete": "orange"}
vehicules = dashboard("evcs-vehicules", "Les vehicules", (
"Ce que chaque voiture encaisse, session par session et sur la periode "
"choisie. L'etiquette vient d'un selecteur manuel : elle peut etre fausse, "
@@ -1356,39 +1359,38 @@ vehicules = dashboard("evcs-vehicules", "Les vehicules", (
"service, amis)."),
frm="now-7d", refresh="5m", panels=[
stat("Sur la periode", [
table("Sur la periode", [
sql("A",
"SELECT round(coalesce(sum(coalesce(energie_station_kwh, energie_kwh)) FILTER (WHERE vehicule = 'VW'), 0)::numeric, 1) AS \"VW\",\n"
" round(coalesce(sum(coalesce(energie_station_kwh, energie_kwh)) FILTER (WHERE vehicule = 'JEEP'), 0)::numeric, 1) AS \"JEEP\",\n"
" round(coalesce(sum(coalesce(energie_station_kwh, energie_kwh)) FILTER (WHERE vehicule = 'ZERO'), 0)::numeric, 1) AS \"ZERO\",\n"
" round(coalesce(sum(coalesce(energie_station_kwh, energie_kwh)) FILTER (WHERE vehicule NOT IN ('VW', 'JEEP', 'ZERO')), 0)::numeric, 1) AS \"Invite\",\n"
" round(coalesce(sum(coalesce(energie_station_kwh, energie_kwh)) FILTER (WHERE vehicule IS NULL), 0)::numeric, 1) AS \"Non etiquete\",\n"
" count(*) AS \"Sessions\",\n"
" count(*) FILTER (WHERE NOT vehicule_sur OR vehicule IS NULL) AS \"A confirmer\"\n"
"FROM session_charge WHERE $__timeFilter(debut)", fmt="table")],
PG, 0, 0, 24, 5,
"« Etiquette douteuse » compte les sessions ou le selecteur a change en "
"cours de route, ou n'etait pas renseigne. C'est la mesure honnete de "
"l'incertitude : elle ne peut pas etre levee autrement qu'en positionnant "
"le selecteur au branchement.",
taille={"valueSize": 34, "titleSize": 12},
overrides=[
sur("VW", [{"id": "unit", "value": "kwatth"},
{"id": "color", "value": {"mode": "fixed", "fixedColor": "blue"}}]),
sur("JEEP", [{"id": "unit", "value": "kwatth"},
{"id": "color", "value": {"mode": "fixed", "fixedColor": "green"}}]),
sur("ZERO", [{"id": "unit", "value": "kwatth"},
{"id": "color", "value": {"mode": "fixed", "fixedColor": "purple"}}]),
sur("Invite", [{"id": "unit", "value": "kwatth"},
{"id": "color", "value": {"mode": "fixed", "fixedColor": "yellow"}}]),
sur("Etiquette douteuse", [{"id": "thresholds", "value": seuils(
("green", None), ("orange", 1))}])]),
PG, 0, 0, 24, 4,
"kWh charges par vehicule sur la plage choisie (compteur de la borne). "
"« Invite » = tout vehicule hors foyer (Megane de service, amis). "
"« A confirmer » compte les sessions dont l'etiquette vient du selecteur "
"sans confirmation : la seule mesure honnete de l'incertitude.",
overrides=[sur(n, [{"id": "unit", "value": "kwatth"},
{"id": "decimals", "value": 1},
{"id": "custom.cellOptions", "value": {"type": "color-text"}},
{"id": "color", "value": {"mode": "fixed", "fixedColor": c}}])
for n, c in COULEURS_VEHICULES.items()] + [
sur("A confirmer", [{"id": "custom.cellOptions", "value": {"type": "color-text"}},
{"id": "thresholds", "value": seuils(("green", None), ("orange", 1))},
{"id": "color", "value": {"mode": "thresholds"}}])]),
barchart("Energie par periode et par vehicule",
[sql("A", SESSIONS_PERIODE, fmt="table")],
PG, 0, 5, 24, 9, "kwatth",
PG, 0, 4, 24, 9, "kwatth",
"Le pas suit la plage choisie : l'heure jusqu'a 4 jours, le jour jusqu'a "
"70, le mois au-dela. « Non etiquete » est ce qui a ete charge sans que le "
"selecteur soit renseigne — a interpreter, pas a ignorer."),
"selecteur soit renseigne — a interpreter, pas a ignorer.",
overrides=[sur(n, [{"id": "color", "value": {"mode": "fixed", "fixedColor": c}}])
for n, c in COULEURS_VEHICULES.items()]),
table("Les sessions", [
sql("A",
@@ -1404,7 +1406,7 @@ vehicules = dashboard("evcs-vehicules", "Les vehicules", (
" source_mode AS \"Source au depart\",\n"
" to_char(debranche_a, 'Dy HH24:MI') AS \"Debranche\"\n"
"FROM session_charge WHERE $__timeFilter(debut) ORDER BY debut DESC", fmt="table")],
PG, 0, 14, 24, 11,
PG, 0, 13, 24, 11,
"« kWh » vient du compteur de la BORNE, qui compte depuis le vrai debut "
"de la session. « kWh integres » est mon propre calcul, qui ne couvre que "
"ce que le service a vu — un ecart entre les deux signale un demarrage ou "
@@ -1789,7 +1791,7 @@ journee = dashboard(
# found ». Ici on veut les quatre colonnes, tout le temps.
barchart("Energie heure par heure",
[sql("A", energie_sql(prevision=True), fmt="table")],
PG, 0, 5, 24, 9, "kwatth",
PG, 0, 4, 24, 9, "kwatth",
"La forme de la journee : quand le solaire a couvert la maison, quand il "
"a fallu acheter — et, a la suite des barres mesurees, ce que la derniere "
"prevision annonce pour les heures qui restent. L'heure EN COURS n'a pas "