Grafana La nuit : voiture sur la batterie, budget contre donne ; historisation du budget et du compteur de la borne

This commit is contained in:
Tallagrand Thierry
2026-09-30 18:33:32 +02:00
parent 01c12345f3
commit baf62bb3d5
4 changed files with 272 additions and 8 deletions

View File

@@ -263,7 +263,7 @@ NUIT_XY = {"type": "xychart", "pluginVersion": "11.3.0", "title": "Soiree contre
"droite orange est la regression sur toutes les nuits ; le gros point rouge "
"est CE SOIR, place sur la droite : une prevision, pas une mesure. "
"1 point de SOC = 0,30 kWh sur le parc actuel."),
"datasource": PG, "gridPos": {"x": 0, "y": 32, "w": 14, "h": 11},
"datasource": PG, "gridPos": {"x": 0, "y": 41, "w": 14, "h": 11},
"targets": [sql("A", NUITS_CTE.rstrip() + NUAGE, fmt="table")],
"fieldConfig": {"defaults": {"unit": "kwatth", "color": {"mode": "palette-classic"},
"custom": {"show": "points", "pointSize": {"fixed": 9}, "pointShape": "circle",
@@ -297,13 +297,13 @@ NUIT_TABLE = table("Les nuits, une ligne par nuit", [
'maison_hc_kwh AS "Maison 21:30-01:24", maison_nuit_kwh AS "Maison 21:30-09:00", '
'voiture_kwh AS "Voiture", reseau_kwh AS "Reseau", pv_avant_9h_kwh AS "PV avant 9h" '
'FROM nuits ORDER BY j DESC'), fmt="table")],
PG, 14, 32, 10, 11,
PG, 14, 41, 10, 11,
"kWh ; « Maison » = voiture exclue. La nuit en cours apparait le lendemain a "
"09:00, une fois close. C'est la matiere du nuage de gauche.")
NUIT_PROFIL = barchart("Profil horaire de la maison : 20 nuits contre cette nuit", [
sql("A", PROFIL_SQL, fmt="table")],
PG, 0, 43, 24, 9, "kwatth",
PG, 0, 52, 24, 9, "kwatth",
"kWh consommes par la maison (voiture exclue) heure par heure, de 18 h a 17 h. "
"Mediane et valeur haute (8 nuits sur 10 en dessous) sur 20 jours, et la nuit en "
"cours par-dessus — l'heure en cours est partielle. C'est ce profil moyen que le "
@@ -424,13 +424,68 @@ nuit = dashboard("evcs-nuit", "La nuit", (
"showPoints": "never", "spanNulls": True,
"gradientMode": "opacity"}}}),
# Budget voiture de la nuit (30/09/2026) : ce que la batterie peut donner sans
# EDF, fige a 01:24, contre ce que la borne a reellement donne.
ts("Voiture sur la batterie : budget contre donne", [
sql("A", "SELECT ts AS time, valeur AS \"Budget prevu (bilan)\"\n"
"FROM mesure\n"
"WHERE cle = 'input_number.evcs_balance_night_vehicle_budget_kwh'\n"
" AND $__timeFilter(ts)\n"
"ORDER BY 1"),
sql("B", "SELECT m.ts AS time, m.valeur - b.valeur AS \"Donne depuis 01:24\"\n"
"FROM mesure m\n"
"JOIN LATERAL (\n"
" SELECT valeur FROM mesure\n"
" WHERE cle = m.cle\n"
" AND ts <= ((((m.ts AT TIME ZONE 'Europe/Paris') - interval '84 minutes')::date\n"
" + time '01:24') AT TIME ZONE 'Europe/Paris')\n"
" ORDER BY ts DESC LIMIT 1) b ON true\n"
"WHERE m.cle = 'sensor.evcs_hq2239dnt7p_total_energy'\n"
" AND $__timeFilter(m.ts)\n"
" AND (m.ts AT TIME ZONE 'Europe/Paris')::time BETWEEN time '01:24' AND time '09:00'\n"
"ORDER BY 1"),
sql("C", "SELECT ts AS time,\n"
" soc_pct AS \"SOC batterie\",\n"
" soc_requis_prudent_pct AS \"Plancher prudent\"\n"
"FROM bilan\n"
"WHERE $__timeFilter(ts)\n"
"ORDER BY 1")],
PG, 0, 24, 24, 9, "kwatth",
"Le budget est ce que la voiture peut prendre sur la batterie SANS EDF "
"(profil prudent, plancher 22 %, la batterie tient jusqu'a la nuit "
"suivante). Le controleur le FIGE a 01:24 : sa valeur a 01:24 est celle "
"qui compte. « Donne depuis 01:24 » = compteur de la borne depuis "
"l'ouverture des heures creuses. En « sans EDF », la charge doit "
"s'arreter quand la courbe bleue atteint le budget ; en « charge "
"complete », EDF finit le reste. Axe de droite : la batterie et son "
"plancher prudent.",
extra={"defaults": {"custom": {"lineWidth": 2, "fillOpacity": 0,
"showPoints": "never", "spanNulls": True}},
"overrides": [
{"matcher": {"id": "byName", "options": "Budget prevu (bilan)"},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": "orange"}},
{"id": "custom.lineInterpolation", "value": "stepAfter"},
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [8, 6]}}]},
{"matcher": {"id": "byName", "options": "Donne depuis 01:24"},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": "blue"}},
{"id": "custom.lineWidth", "value": 3},
{"id": "custom.fillOpacity", "value": 15}]},
{"matcher": {"id": "byRegexp", "options": "SOC batterie|Plancher prudent"},
"properties": [{"id": "unit", "value": "percent"},
{"id": "min", "value": 0}, {"id": "max", "value": 100},
{"id": "custom.axisPlacement", "value": "right"}]},
{"matcher": {"id": "byName", "options": "SOC batterie"},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": "green"}}]},
{"matcher": {"id": "byName", "options": "Plancher prudent"},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": "red"}},
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [4, 4]}}]}]}),
table("Journal des evenements", [
sql("A", "SELECT ts AS \"Quand\", genre AS \"Genre\", source AS \"Par\",\n"
" resume AS \"Ce qui s'est passe\"\n"
"FROM evenement\n"
"WHERE $__timeFilter(ts)\n"
"ORDER BY ts DESC", fmt="table")],
PG, 0, 24, 24, 8,
PG, 0, 33, 24, 8,
"Une courbe sans ses evenements ne s'interprete pas. Ces lignes "
"apparaissent aussi en marqueurs verticaux sur tous les graphiques.",
overrides=[{"matcher": {"id": "byName", "options": "Quand"},