L'energie de la session dans le panneau Chargeur VE

Quatrieme valeur : « Session », le compteur de la BORNE, celui qui vaut les
8 kWh de VRM et compte depuis le vrai debut de la charge.

Il vient de PostgreSQL et non d'InfluxDB : `sensor.evcs_hq2239dnt7p_*` n'est
pas dans les globs d'entites envoyees a InfluxDB. Plutot que de redemarrer Home
Assistant pour l'y ajouter — en pleine charge, a 4 h du matin — la valeur est
reprise de la table `session_charge`, ou elle est deja enregistree. Le panneau
passe donc en source « Mixed », chaque requete portant la sienne.

La session n'est affichee que si elle date de moins de deux heures : au-dela,
la case reste vide plutot que d'exhiber le reliquat d'une charge terminee la
veille — meme principe que la fenetre de lecture des autres panneaux.

La premiere rangee passe a sept unites de hauteur et la Batterie a neuf
colonnes : quatre et cinq valeurs cote a cote redevenaient illisibles a cinq
unites, c'est le defaut deja corrige une fois sur ce meme panneau.

54/54 requetes verifiees. Valeur attendue a l'ecran : 8,30 kWh.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-09-05 03:32:46 +02:00
parent 9748325356
commit 27b2004622
2 changed files with 79 additions and 28 deletions

View File

@@ -140,7 +140,7 @@
"x": 0,
"y": 0,
"w": 5,
"h": 5
"h": 7
},
"fieldConfig": {
"defaults": {
@@ -257,7 +257,7 @@
"x": 5,
"y": 0,
"w": 4,
"h": 5
"h": 7
},
"fieldConfig": {
"defaults": {
@@ -381,8 +381,8 @@
"gridPos": {
"x": 9,
"y": 0,
"w": 10,
"h": 5
"w": 9,
"h": 7
},
"fieldConfig": {
"defaults": {
@@ -523,7 +523,7 @@
"percentChangeColorMode": "standard",
"noValue": "—",
"text": {
"valueSize": 26,
"valueSize": 22,
"titleSize": 11
},
"wideLayout": true
@@ -534,8 +534,8 @@
"title": "Chargeur VE",
"description": "Consigne = ce que le controleur demande a la borne, reecrit toutes les 30 s. Courant = ce que la voiture prend reellement.",
"datasource": {
"type": "influxdb",
"uid": "evcs-influx"
"type": "datasource",
"uid": "-- Mixed --"
},
"targets": [
{
@@ -561,13 +561,24 @@
"uid": "evcs-influx"
},
"query": "from(bucket: \"evcs\")\n |> range(start: -24h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"victron_evcs_set_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Consigne\"})"
},
{
"refId": "D",
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "evcs-pg"
},
"format": "table",
"rawQuery": true,
"editorMode": "code",
"rawSql": "-- Le compteur de la BORNE, repris de la table des sessions : il\n-- compte depuis le vrai debut, la ou une integration ne couvre que\n-- ce que le service a vu. Session close depuis plus de 2 h : rien.\nSELECT round(coalesce(energie_station_kwh, energie_kwh)::numeric, 2) AS \"Session\"\nFROM session_charge\nWHERE fin > now() - interval '2 hours'\nORDER BY debut DESC LIMIT 1"
}
],
"gridPos": {
"x": 19,
"x": 18,
"y": 0,
"w": 5,
"h": 5
"w": 6,
"h": 7
},
"fieldConfig": {
"defaults": {
@@ -633,6 +644,29 @@
"value": 0
}
]
},
{
"matcher": {
"id": "byName",
"options": "Session"
},
"properties": [
{
"id": "unit",
"value": "kwatth"
},
{
"id": "decimals",
"value": 2
},
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "green"
}
}
]
}
]
},
@@ -651,6 +685,10 @@
"justifyMode": "center",
"percentChangeColorMode": "standard",
"noValue": "—",
"text": {
"valueSize": 22,
"titleSize": 11
},
"wideLayout": true
}
},
@@ -682,7 +720,7 @@
],
"gridPos": {
"x": 0,
"y": 5,
"y": 7,
"w": 5,
"h": 8
},
@@ -775,7 +813,7 @@
],
"gridPos": {
"x": 5,
"y": 5,
"y": 7,
"w": 13,
"h": 8
},
@@ -944,7 +982,7 @@
],
"gridPos": {
"x": 18,
"y": 5,
"y": 7,
"w": 6,
"h": 8
},
@@ -1065,7 +1103,7 @@
],
"gridPos": {
"x": 0,
"y": 13,
"y": 15,
"w": 24,
"h": 9
},
@@ -1212,7 +1250,7 @@
],
"gridPos": {
"x": 0,
"y": 22,
"y": 24,
"w": 24,
"h": 9
},

View File

@@ -798,7 +798,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
flux_dernier("A", "W", "victron_grid_power_l1", "Puissance", fenetre="6h"),
flux_dernier("B", "V", "airtria_mpii_v1_input_voltage_l1", "Tension", fenetre="6h"),
flux_dernier("C", "A", "gx_device_grid_current_l1", "Courant", fenetre="6h")],
IN, 0, 0, 5, 5,
IN, 0, 0, 5, 7,
"Positif : le reseau alimente la maison. Le contacteur EDF est pilote par "
"le workflow d'hysteresis, pas depuis ici.",
overrides=[col("Puissance", "watt"), col("Tension", "volt"), col("Courant", "amp", dec=1)]),
@@ -806,7 +806,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
stat("Charges CA", [
flux_dernier("A", "W", "victron_consumption_power_l1", "Consommation"),
flux_dernier("B", "Hz", "airtria_mpii_v1_output_frequency_l1", "Frequence")],
IN, 5, 0, 4, 5,
IN, 5, 0, 4, 7,
"Ce que la maison consomme, voiture comprise.",
overrides=[col("Consommation", "watt"), col("Frequence", "hertz", dec=1)]),
@@ -816,7 +816,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
flux_dernier("C", "V", "victron_battery_voltage", "Tension"),
flux_dernier("D", "A", "victron_battery_current", "Courant"),
flux_dernier("E", "°C", "victron_battery_temperature", "Temperature")],
IN, 9, 0, 10, 5,
IN, 9, 0, 9, 7,
"Puissance positive : la batterie se charge. Sept modules actifs sur huit, "
"un pack bloquant la charge vers 94 %.",
overrides=[
@@ -828,29 +828,42 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
# Cinq valeurs dans huit colonnes : Grafana reduisait le texte jusqu'a
# l'illisible. Dix colonnes et une taille imposee, plutot que de laisser
# l'ajustement automatique decider.
taille={"valueSize": 26, "titleSize": 11}),
taille={"valueSize": 22, "titleSize": 11}),
stat("Chargeur VE", [
dict(stat("Chargeur VE", [
flux_dernier("A", "W", "victron_evcs_ac_power", "Puissance"),
flux_dernier("B", "A", "victron_evcs_current", "Courant"),
flux_dernier("C", "A", "victron_evcs_set_current", "Consigne")],
IN, 19, 0, 5, 5,
flux_dernier("C", "A", "victron_evcs_set_current", "Consigne"),
sql("D", "-- Le compteur de la BORNE, repris de la table des sessions : il\n"
"-- compte depuis le vrai debut, la ou une integration ne couvre que\n"
"-- ce que le service a vu. Session close depuis plus de 2 h : rien.\n"
"SELECT round(coalesce(energie_station_kwh, energie_kwh)::numeric, 2) AS \"Session\"\n"
"FROM session_charge\n"
"WHERE fin > now() - interval '2 hours'\n"
"ORDER BY debut DESC LIMIT 1", fmt="table")],
IN, 18, 0, 6, 7,
"Consigne = ce que le controleur demande a la borne, reecrit toutes les "
"30 s. Courant = ce que la voiture prend reellement.",
overrides=[col("Puissance", "watt"), col("Courant", "amp", dec=1),
col("Consigne", "amp", dec=0)]),
col("Consigne", "amp", dec=0),
sur("Session", [{"id": "unit", "value": "kwatth"},
{"id": "decimals", "value": 2},
{"id": "color", "value": {"mode": "fixed", "fixedColor": "green"}}])],
taille={"valueSize": 22, "titleSize": 11}),
# Sources melangees : le panneau porte « Mixed », chaque requete la sienne.
datasource={"type": "datasource", "uid": "-- Mixed --"}),
stat("Chargeur PV", [
flux_dernier("A", "W", "victron_pv_power_system", "Production"),
flux_dernier("B", "W", "victron_pv_power_10m_avg", "Moyenne 10 min")],
IN, 0, 5, 5, 8,
IN, 0, 7, 5, 8,
"Rappel qui vaut pour toute lecture de cette valeur : sans injection, la "
"production MESUREE vaut min(ressource, consommation + absorption "
"batterie). Basse ne veut pas dire mauvais temps.",
overrides=[col("Production", "watt"), col("Moyenne 10 min", "watt")]),
dict(table("Detail par tracker", [flux("A", TRACKERS_FLUX)],
IN, 5, 5, 13, 8,
IN, 5, 7, 13, 8,
"Les 52 panneaux en quatre plans : sud-est 40 degres, trois chaines sud "
"35 degres, ouest 45 degres. Le suiveur de trois panneaux ne publie pas "
"de mode de fonctionnement et n'apparait donc pas ici.",
@@ -892,7 +905,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
' |> keep(columns: ["_value"])\n'
' |> rename(columns: {_value: "Desequilibre"})'),
flux_dernier("D", "%", "airtria_8_us2000c_state_of_health", "Sante", fenetre="48h")],
IN, 18, 5, 6, 8,
IN, 18, 7, 6, 8,
"« Charge max » est la limite que le BMS impose au systeme entier. Le "
"04/09 elle est tombee de 150 a 20 A en trois minutes, des 76 % de charge, "
"au moment ou l'alarme de tension de cellule s'est declenchee — le parc "
@@ -918,7 +931,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
('sensor.victron_battery_power', 'Batterie'),
('sensor.victron_consumption_power_l1', 'Maison'),
('sensor.victron_evcs_ac_power', 'Voiture')], fmt="table")],
PG, 0, 13, 24, 9, "watt",
PG, 0, 15, 24, 9, "watt",
"Batterie positive : elle se charge. Reseau positif : il alimente. "
"Aux instants ou tout est a zero sauf la maison, c'est la batterie qui "
"porte tout.",
@@ -932,7 +945,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
"transformations": FILTRE_VUE}),
dict(barchart("Energie par periode", [sql("A", ENERGIE_SQL, fmt="table")],
PG, 0, 22, 24, 9, "kwatth",
PG, 0, 24, 24, 9, "kwatth",
"Le pas suit la periode choisie : l'heure jusqu'a 4 jours, le jour "
"jusqu'a 70, le mois au-dela. Obtenue en integrant la puissance, PAS en "
"lisant les compteurs kWh du GX : ceux-ci se remettent a zero sans le "