Les flux : format table, pour que le filtre de vue s'applique
Le filtre de vue fonctionne sur le graphique en barres — la capture du proprietaire montrait bien « Solaire, Voiture » seuls — et echouait sur « Les flux » avec « Data is missing a time field ». La seule difference entre les deux etait le format de sortie : `table` d'un cote, `time_series` de l'autre. Un panneau time series accepte parfaitement une trame de type table des lors qu'elle porte une colonne temporelle, et le rendu est identique. On aligne donc « Les flux » sur le format dont on a la PREUVE qu'il se laisse filtrer, plutot que de continuer a deviner comment `time_series` nomme son champ temporel. Changement circonscrit a ce seul panneau : les trois autres tableaux utilisent le meme generateur de requete, n'ont pas de filtre de vue, et restent en time_series. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -1057,7 +1057,7 @@
|
|||||||
"type": "grafana-postgresql-datasource",
|
"type": "grafana-postgresql-datasource",
|
||||||
"uid": "evcs-pg"
|
"uid": "evcs-pg"
|
||||||
},
|
},
|
||||||
"format": "time_series",
|
"format": "table",
|
||||||
"rawQuery": true,
|
"rawQuery": true,
|
||||||
"editorMode": "code",
|
"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"
|
"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"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ def sql(refid, q, fmt="time_series"):
|
|||||||
def flux(refid, q):
|
def flux(refid, q):
|
||||||
return {"refId": refid, "datasource": IN, "query": 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.
|
"""Rapproche plusieurs grandeurs de la table `mesure` sur un axe commun.
|
||||||
|
|
||||||
Deux difficultes, toutes deux resolues ici :
|
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"),\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"),\nreport AS (\n SELECT t,\n{remplis}\n FROM paliers\n)\n"
|
||||||
f"SELECT t AS time,\n{sorties}\nFROM report ORDER BY t")
|
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"):
|
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}}}]),
|
"alarm": {"text": "ALARME", "color": "red", "index": 2}}}]),
|
||||||
|
|
||||||
ts("Les flux", [
|
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", [
|
sql_grandeurs("A", [
|
||||||
('sensor.victron_pv_power_system', 'Solaire'),
|
('sensor.victron_pv_power_system', 'Solaire'),
|
||||||
('sensor.victron_grid_power_l1', 'Reseau'),
|
('sensor.victron_grid_power_l1', 'Reseau'),
|
||||||
('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')])],
|
('sensor.victron_evcs_ac_power', 'Voiture')], fmt="table")],
|
||||||
PG, 0, 13, 24, 9, "watt",
|
PG, 0, 13, 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 "
|
||||||
|
|||||||
Reference in New Issue
Block a user