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:
@@ -140,7 +140,7 @@
|
|||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 5,
|
"w": 5,
|
||||||
"h": 5
|
"h": 7
|
||||||
},
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
@@ -257,7 +257,7 @@
|
|||||||
"x": 5,
|
"x": 5,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 4,
|
"w": 4,
|
||||||
"h": 5
|
"h": 7
|
||||||
},
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
@@ -381,8 +381,8 @@
|
|||||||
"gridPos": {
|
"gridPos": {
|
||||||
"x": 9,
|
"x": 9,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 10,
|
"w": 9,
|
||||||
"h": 5
|
"h": 7
|
||||||
},
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
@@ -523,7 +523,7 @@
|
|||||||
"percentChangeColorMode": "standard",
|
"percentChangeColorMode": "standard",
|
||||||
"noValue": "—",
|
"noValue": "—",
|
||||||
"text": {
|
"text": {
|
||||||
"valueSize": 26,
|
"valueSize": 22,
|
||||||
"titleSize": 11
|
"titleSize": 11
|
||||||
},
|
},
|
||||||
"wideLayout": true
|
"wideLayout": true
|
||||||
@@ -534,8 +534,8 @@
|
|||||||
"title": "Chargeur VE",
|
"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.",
|
"description": "Consigne = ce que le controleur demande a la borne, reecrit toutes les 30 s. Courant = ce que la voiture prend reellement.",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "influxdb",
|
"type": "datasource",
|
||||||
"uid": "evcs-influx"
|
"uid": "-- Mixed --"
|
||||||
},
|
},
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
@@ -561,13 +561,24 @@
|
|||||||
"uid": "evcs-influx"
|
"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\"})"
|
"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": {
|
"gridPos": {
|
||||||
"x": 19,
|
"x": 18,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 5,
|
"w": 6,
|
||||||
"h": 5
|
"h": 7
|
||||||
},
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
@@ -633,6 +644,29 @@
|
|||||||
"value": 0
|
"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",
|
"justifyMode": "center",
|
||||||
"percentChangeColorMode": "standard",
|
"percentChangeColorMode": "standard",
|
||||||
"noValue": "—",
|
"noValue": "—",
|
||||||
|
"text": {
|
||||||
|
"valueSize": 22,
|
||||||
|
"titleSize": 11
|
||||||
|
},
|
||||||
"wideLayout": true
|
"wideLayout": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -682,7 +720,7 @@
|
|||||||
],
|
],
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 5,
|
"y": 7,
|
||||||
"w": 5,
|
"w": 5,
|
||||||
"h": 8
|
"h": 8
|
||||||
},
|
},
|
||||||
@@ -775,7 +813,7 @@
|
|||||||
],
|
],
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"x": 5,
|
"x": 5,
|
||||||
"y": 5,
|
"y": 7,
|
||||||
"w": 13,
|
"w": 13,
|
||||||
"h": 8
|
"h": 8
|
||||||
},
|
},
|
||||||
@@ -944,7 +982,7 @@
|
|||||||
],
|
],
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"x": 18,
|
"x": 18,
|
||||||
"y": 5,
|
"y": 7,
|
||||||
"w": 6,
|
"w": 6,
|
||||||
"h": 8
|
"h": 8
|
||||||
},
|
},
|
||||||
@@ -1065,7 +1103,7 @@
|
|||||||
],
|
],
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 13,
|
"y": 15,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"h": 9
|
"h": 9
|
||||||
},
|
},
|
||||||
@@ -1212,7 +1250,7 @@
|
|||||||
],
|
],
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 22,
|
"y": 24,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"h": 9
|
"h": 9
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -798,7 +798,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
|
|||||||
flux_dernier("A", "W", "victron_grid_power_l1", "Puissance", fenetre="6h"),
|
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("B", "V", "airtria_mpii_v1_input_voltage_l1", "Tension", fenetre="6h"),
|
||||||
flux_dernier("C", "A", "gx_device_grid_current_l1", "Courant", 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 "
|
"Positif : le reseau alimente la maison. Le contacteur EDF est pilote par "
|
||||||
"le workflow d'hysteresis, pas depuis ici.",
|
"le workflow d'hysteresis, pas depuis ici.",
|
||||||
overrides=[col("Puissance", "watt"), col("Tension", "volt"), col("Courant", "amp", dec=1)]),
|
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", [
|
stat("Charges CA", [
|
||||||
flux_dernier("A", "W", "victron_consumption_power_l1", "Consommation"),
|
flux_dernier("A", "W", "victron_consumption_power_l1", "Consommation"),
|
||||||
flux_dernier("B", "Hz", "airtria_mpii_v1_output_frequency_l1", "Frequence")],
|
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.",
|
"Ce que la maison consomme, voiture comprise.",
|
||||||
overrides=[col("Consommation", "watt"), col("Frequence", "hertz", dec=1)]),
|
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("C", "V", "victron_battery_voltage", "Tension"),
|
||||||
flux_dernier("D", "A", "victron_battery_current", "Courant"),
|
flux_dernier("D", "A", "victron_battery_current", "Courant"),
|
||||||
flux_dernier("E", "°C", "victron_battery_temperature", "Temperature")],
|
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, "
|
"Puissance positive : la batterie se charge. Sept modules actifs sur huit, "
|
||||||
"un pack bloquant la charge vers 94 %.",
|
"un pack bloquant la charge vers 94 %.",
|
||||||
overrides=[
|
overrides=[
|
||||||
@@ -828,29 +828,42 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
|
|||||||
# Cinq valeurs dans huit colonnes : Grafana reduisait le texte jusqu'a
|
# Cinq valeurs dans huit colonnes : Grafana reduisait le texte jusqu'a
|
||||||
# l'illisible. Dix colonnes et une taille imposee, plutot que de laisser
|
# l'illisible. Dix colonnes et une taille imposee, plutot que de laisser
|
||||||
# l'ajustement automatique decider.
|
# 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("A", "W", "victron_evcs_ac_power", "Puissance"),
|
||||||
flux_dernier("B", "A", "victron_evcs_current", "Courant"),
|
flux_dernier("B", "A", "victron_evcs_current", "Courant"),
|
||||||
flux_dernier("C", "A", "victron_evcs_set_current", "Consigne")],
|
flux_dernier("C", "A", "victron_evcs_set_current", "Consigne"),
|
||||||
IN, 19, 0, 5, 5,
|
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 "
|
"Consigne = ce que le controleur demande a la borne, reecrit toutes les "
|
||||||
"30 s. Courant = ce que la voiture prend reellement.",
|
"30 s. Courant = ce que la voiture prend reellement.",
|
||||||
overrides=[col("Puissance", "watt"), col("Courant", "amp", dec=1),
|
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", [
|
stat("Chargeur PV", [
|
||||||
flux_dernier("A", "W", "victron_pv_power_system", "Production"),
|
flux_dernier("A", "W", "victron_pv_power_system", "Production"),
|
||||||
flux_dernier("B", "W", "victron_pv_power_10m_avg", "Moyenne 10 min")],
|
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 "
|
"Rappel qui vaut pour toute lecture de cette valeur : sans injection, la "
|
||||||
"production MESUREE vaut min(ressource, consommation + absorption "
|
"production MESUREE vaut min(ressource, consommation + absorption "
|
||||||
"batterie). Basse ne veut pas dire mauvais temps.",
|
"batterie). Basse ne veut pas dire mauvais temps.",
|
||||||
overrides=[col("Production", "watt"), col("Moyenne 10 min", "watt")]),
|
overrides=[col("Production", "watt"), col("Moyenne 10 min", "watt")]),
|
||||||
|
|
||||||
dict(table("Detail par tracker", [flux("A", TRACKERS_FLUX)],
|
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 "
|
"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 "
|
"35 degres, ouest 45 degres. Le suiveur de trois panneaux ne publie pas "
|
||||||
"de mode de fonctionnement et n'apparait donc pas ici.",
|
"de mode de fonctionnement et n'apparait donc pas ici.",
|
||||||
@@ -892,7 +905,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
|
|||||||
' |> keep(columns: ["_value"])\n'
|
' |> keep(columns: ["_value"])\n'
|
||||||
' |> rename(columns: {_value: "Desequilibre"})'),
|
' |> rename(columns: {_value: "Desequilibre"})'),
|
||||||
flux_dernier("D", "%", "airtria_8_us2000c_state_of_health", "Sante", fenetre="48h")],
|
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 "
|
"« 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, "
|
"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 "
|
"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_battery_power', 'Batterie'),
|
||||||
('sensor.victron_consumption_power_l1', 'Maison'),
|
('sensor.victron_consumption_power_l1', 'Maison'),
|
||||||
('sensor.victron_evcs_ac_power', 'Voiture')], fmt="table")],
|
('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. "
|
"Batterie positive : elle se charge. Reseau positif : il alimente. "
|
||||||
"Aux instants ou tout est a zero sauf la maison, c'est la batterie qui "
|
"Aux instants ou tout est a zero sauf la maison, c'est la batterie qui "
|
||||||
"porte tout.",
|
"porte tout.",
|
||||||
@@ -932,7 +945,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
|
|||||||
"transformations": FILTRE_VUE}),
|
"transformations": FILTRE_VUE}),
|
||||||
|
|
||||||
dict(barchart("Energie par periode", [sql("A", ENERGIE_SQL, fmt="table")],
|
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 "
|
"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 "
|
"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 "
|
"lisant les compteurs kWh du GX : ceux-ci se remettent a zero sans le "
|
||||||
|
|||||||
Reference in New Issue
Block a user