From 53d30afcd377d6f3259e0380bb2b6e6fdb79d203 Mon Sep 17 00:00:00 2001 From: Tallagrand Thierry Date: Sat, 5 Sep 2026 02:32:26 +0200 Subject: [PATCH] Le panneau BMS affichait sa colonne d'horodatage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Effet de bord du correctif precedent : pour montrer les alarmes, qui sont du texte, j'avais mis « fields: /.*/ » — ce qui fait aussi remonter la colonne _time des requetes Flux, affichee en gros au-dessus de chaque valeur. Un panneau stat n'a besoin d'aucun champ temporel. Les requetes ne renvoient plus que la valeur. Applique a tous les panneaux stat, pas seulement au BMS : _time n'y servait a rien et restait un piege latent, invisible tant que le reglage « champs numeriques seulement » le masquait. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ --- .../grafana/dashboards/systeme.json | 38 +++++++++---------- tools/gen-grafana-dashboards.py | 6 +-- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/deploy/historisation/grafana/dashboards/systeme.json b/deploy/historisation/grafana/dashboards/systeme.json index 7cf0dbb..8bd82ee 100644 --- a/deploy/historisation/grafana/dashboards/systeme.json +++ b/deploy/historisation/grafana/dashboards/systeme.json @@ -117,7 +117,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_grid_power_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Puissance\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_grid_power_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Puissance\"})" }, { "refId": "B", @@ -125,7 +125,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"V\" and r.entity_id == \"airtria_mpii_v1_input_voltage_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Tension\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"V\" and r.entity_id == \"airtria_mpii_v1_input_voltage_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Tension\"})" }, { "refId": "C", @@ -133,7 +133,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"gx_device_grid_current_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Courant\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"gx_device_grid_current_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Courant\"})" } ], "gridPos": { @@ -242,7 +242,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_consumption_power_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Consommation\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_consumption_power_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Consommation\"})" }, { "refId": "B", @@ -250,7 +250,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"Hz\" and r.entity_id == \"airtria_mpii_v1_output_frequency_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Frequence\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"Hz\" and r.entity_id == \"airtria_mpii_v1_output_frequency_l1\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Frequence\"})" } ], "gridPos": { @@ -343,7 +343,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"%\" and r.entity_id == \"victron_battery_soc\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Charge\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"%\" and r.entity_id == \"victron_battery_soc\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Charge\"})" }, { "refId": "B", @@ -351,7 +351,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_battery_power\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Puissance\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_battery_power\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Puissance\"})" }, { "refId": "C", @@ -359,7 +359,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"V\" and r.entity_id == \"victron_battery_voltage\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Tension\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"V\" and r.entity_id == \"victron_battery_voltage\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Tension\"})" }, { "refId": "D", @@ -367,7 +367,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"victron_battery_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Courant\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"victron_battery_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Courant\"})" }, { "refId": "E", @@ -375,7 +375,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"°C\" and r.entity_id == \"victron_battery_temperature\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Temperature\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"°C\" and r.entity_id == \"victron_battery_temperature\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Temperature\"})" } ], "gridPos": { @@ -544,7 +544,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_evcs_ac_power\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Puissance\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_evcs_ac_power\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Puissance\"})" }, { "refId": "B", @@ -552,7 +552,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"victron_evcs_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Courant\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"victron_evcs_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Courant\"})" }, { "refId": "C", @@ -560,7 +560,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"victron_evcs_set_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Consigne\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\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\"})" } ], "gridPos": { @@ -669,7 +669,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_pv_power_system\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Production\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_pv_power_system\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Production\"})" }, { "refId": "B", @@ -677,7 +677,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_pv_power_10m_avg\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Moyenne 10 min\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -6h)\n |> filter(fn: (r) => r._measurement == \"W\" and r.entity_id == \"victron_pv_power_10m_avg\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Moyenne 10 min\"})" } ], "gridPos": { @@ -915,7 +915,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"airtria_8_us2000c_maximum_allowed_charge_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Charge max\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"A\" and r.entity_id == \"airtria_8_us2000c_maximum_allowed_charge_current\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Charge max\"})" }, { "refId": "B", @@ -923,7 +923,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"sensor.airtria_8_us2000c_tension_de_cellule_elevee\" and r._field == \"state\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Tension cellule\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"sensor.airtria_8_us2000c_tension_de_cellule_elevee\" and r._field == \"state\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Tension cellule\"})" }, { "refId": "C", @@ -931,7 +931,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"sensor.airtria_8_us2000c_cell_imbalance\" and r._field == \"state\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Desequilibre\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"sensor.airtria_8_us2000c_cell_imbalance\" and r._field == \"state\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Desequilibre\"})" }, { "refId": "D", @@ -939,7 +939,7 @@ "type": "influxdb", "uid": "evcs-influx" }, - "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"%\" and r.entity_id == \"airtria_8_us2000c_state_of_health\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_time\", \"_value\"])\n |> rename(columns: {_value: \"Sante\"})" + "query": "from(bucket: \"evcs\")\n |> range(start: -48h)\n |> filter(fn: (r) => r._measurement == \"%\" and r.entity_id == \"airtria_8_us2000c_state_of_health\" and r._field == \"value\")\n |> last()\n |> keep(columns: [\"_value\"])\n |> rename(columns: {_value: \"Sante\"})" } ], "gridPos": { diff --git a/tools/gen-grafana-dashboards.py b/tools/gen-grafana-dashboards.py index 6a386d1..8a20c88 100644 --- a/tools/gen-grafana-dashboards.py +++ b/tools/gen-grafana-dashboards.py @@ -655,7 +655,7 @@ def flux_dernier(refid, mesure, entite, libelle, champ="value", fenetre="6h"): f' |> filter(fn: (r) => r._measurement == "{mesure}"' f' and r.entity_id == "{entite}" and r._field == "{champ}")\n' f' |> last()\n' - f' |> keep(columns: ["_time", "_value"])\n' + f' |> keep(columns: ["_value"])\n' f' |> rename(columns: {{_value: "{libelle}"}})') # Energie horaire par integration ponderee par la duree, plafonnee a 300 s @@ -891,14 +891,14 @@ systeme = dashboard("evcs-systeme", "Le systeme", ( ' |> filter(fn: (r) => r._measurement == "sensor.airtria_8_us2000c_tension_de_cellule_elevee"' ' and r._field == "state")\n' ' |> last()\n' - ' |> keep(columns: ["_time", "_value"])\n' + ' |> keep(columns: ["_value"])\n' ' |> rename(columns: {_value: "Tension cellule"})'), flux("C", 'from(bucket: "evcs")\n' ' |> range(start: -48h)\n' ' |> filter(fn: (r) => r._measurement == "sensor.airtria_8_us2000c_cell_imbalance"' ' and r._field == "state")\n' ' |> last()\n' - ' |> keep(columns: ["_time", "_value"])\n' + ' |> 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,