diff --git a/deploy/historisation/grafana/dashboards/systeme.json b/deploy/historisation/grafana/dashboards/systeme.json index 909f59b..7cf0dbb 100644 --- a/deploy/historisation/grafana/dashboards/systeme.json +++ b/deploy/historisation/grafana/dashboards/systeme.json @@ -1057,7 +1057,7 @@ "type": "grafana-postgresql-datasource", "uid": "evcs-pg" }, - "format": "time_series", + "format": "table", "rawQuery": true, "editorMode": "code", "rawSql": "WITH par_minute AS (\n SELECT date_trunc('minute', ts) AS t,\n avg(valeur) FILTER (WHERE cle = 'sensor.victron_pv_power_system') AS Solaire,\n avg(valeur) FILTER (WHERE cle = 'sensor.victron_grid_power_l1') AS Reseau,\n avg(valeur) FILTER (WHERE cle = 'sensor.victron_battery_power') AS Batterie,\n avg(valeur) FILTER (WHERE cle = 'sensor.victron_consumption_power_l1') AS Maison,\n avg(valeur) FILTER (WHERE cle = 'sensor.victron_evcs_ac_power') AS Voiture\n FROM mesure WHERE $__timeFilter(ts) GROUP BY 1\n),\npaliers AS (\n SELECT t, Solaire, Reseau, Batterie, Maison, Voiture,\n count(Solaire) OVER (ORDER BY t) AS g_Solaire,\n count(Reseau) OVER (ORDER BY t) AS g_Reseau,\n count(Batterie) OVER (ORDER BY t) AS g_Batterie,\n count(Maison) OVER (ORDER BY t) AS g_Maison,\n count(Voiture) OVER (ORDER BY t) AS g_Voiture\n FROM par_minute\n),\nreport AS (\n SELECT t,\n first_value(Solaire) OVER (PARTITION BY g_Solaire ORDER BY t) AS Solaire,\n first_value(Reseau) OVER (PARTITION BY g_Reseau ORDER BY t) AS Reseau,\n first_value(Batterie) OVER (PARTITION BY g_Batterie ORDER BY t) AS Batterie,\n first_value(Maison) OVER (PARTITION BY g_Maison ORDER BY t) AS Maison,\n first_value(Voiture) OVER (PARTITION BY g_Voiture ORDER BY t) AS Voiture\n FROM paliers\n)\nSELECT t AS time,\n Solaire AS \"Solaire\",\n Reseau AS \"Reseau\",\n Batterie AS \"Batterie\",\n Maison AS \"Maison\",\n Voiture AS \"Voiture\"\nFROM report ORDER BY t" diff --git a/tools/gen-grafana-dashboards.py b/tools/gen-grafana-dashboards.py index 34f09d3..6a386d1 100644 --- a/tools/gen-grafana-dashboards.py +++ b/tools/gen-grafana-dashboards.py @@ -13,7 +13,7 @@ def sql(refid, q, fmt="time_series"): def flux(refid, q): return {"refId": refid, "datasource": IN, "query": q} -def sql_grandeurs(refid, colonnes, calculees=None): +def sql_grandeurs(refid, colonnes, calculees=None, fmt="time_series"): """Rapproche plusieurs grandeurs de la table `mesure` sur un axe commun. Deux difficultes, toutes deux resolues ici : @@ -47,7 +47,7 @@ def sql_grandeurs(refid, colonnes, calculees=None): f"),\npaliers AS (\n SELECT t, {', '.join(noms)},\n{groupes}\n FROM par_minute\n" f"),\nreport AS (\n SELECT t,\n{remplis}\n FROM paliers\n)\n" f"SELECT t AS time,\n{sorties}\nFROM report ORDER BY t") - return sql(refid, q) + return sql(refid, q, fmt=fmt) def ts(title, targets, ds, x, y, w, h, unit="", desc="", extra=None, legend="bottom"): @@ -916,12 +916,17 @@ systeme = dashboard("evcs-systeme", "Le systeme", ( "alarm": {"text": "ALARME", "color": "red", "index": 2}}}]), ts("Les flux", [ + # fmt="table" et non "time_series" : le filtre de vue s'applique bien sur + # une trame de type table — c'est ce que fait le graphique en barres — et + # echouait sur time_series avec « Data is missing a time field ». Le + # panneau time series accepte une trame table portant une colonne + # temporelle, le rendu est identique. sql_grandeurs("A", [ ('sensor.victron_pv_power_system', 'Solaire'), ('sensor.victron_grid_power_l1', 'Reseau'), ('sensor.victron_battery_power', 'Batterie'), ('sensor.victron_consumption_power_l1', 'Maison'), - ('sensor.victron_evcs_ac_power', 'Voiture')])], + ('sensor.victron_evcs_ac_power', 'Voiture')], fmt="table")], PG, 0, 13, 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 "