Le tableau du systeme : fenetre glissante, et plus de valeur perimee
Trois defauts signales par le proprietaire sur une capture prise a 00:04. 1. FENETRE GLISSANTE. La plage etait « aujourd'hui » : a 00:04 il n'y avait que quatre minutes a montrer. Passee a 24 h glissantes. Les etiquettes d'heure portent desormais le jour, sans quoi « 22 h » designerait deux heures differentes dans la meme fenetre. 2. VALEUR PERIMEE PRESENTEE COMME ACTUELLE — le vrai defaut. Le panneau Reseau affichait « Courant 2,2 A » : ecrit QUATORZE HEURES plus tot, du temps ou le contacteur etait ferme, alors qu'il est ouvert depuis 10:08. Cause : ma fenetre de lecture de 7 jours, posee pour eviter les cases vides. Les capteurs du reseau passent en `unavailable` quand AC-IN disparait ; ils ne tombent pas a zero. Leur derniere valeur numerique reste donc celle d'avant. Fenetre ramenee a 6 h : assez large pour couvrir une nuit sans soleil et une borne au repos — dont les zeros sont VRAIS — assez etroite pour ecarter une lecture de quatorze heures. 3. Une absence de mesure s'affiche desormais comme un tiret, jamais comme zero. Verifie apres coup sur les valeurs reelles : Reseau Courant = tiret (la valeur fausse a disparu), Chargeur PV = 0 W et Chargeur VE = 0 A conserves puisque justes, Batterie et Charges CA en direct. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -91,6 +91,7 @@ def stat(title, targets, ds, x, y, w, h, desc="", overrides=None, texte="auto"):
|
||||
"colorMode": "value", "graphMode": "none",
|
||||
"justifyMode": "center",
|
||||
"percentChangeColorMode": "standard",
|
||||
"noValue": "—",
|
||||
"wideLayout": True}}
|
||||
|
||||
|
||||
@@ -615,14 +616,36 @@ telephone = dashboard("evcs-telephone", "Sur le telephone", (
|
||||
|
||||
def flux_dernier(refid, mesure, entite, libelle, champ="value"):
|
||||
"""Derniere valeur connue d'une entite, renommee pour l'affichage."""
|
||||
# Fenetre de 7 jours et non de quelques minutes : l'integration InfluxDB
|
||||
# Fenetre de 6 HEURES : un compromis, et il merite d'etre explique.
|
||||
#
|
||||
# Trop large (7 jours, premiere version), le panneau Reseau affichait le
|
||||
# 05/09 a minuit « Courant 2,2 A » — une valeur ecrite QUATORZE HEURES plus
|
||||
# tot, du temps ou le contacteur etait ferme. Les capteurs du reseau
|
||||
# passent en `unavailable` quand AC-IN disparait ; ils ne tombent pas a
|
||||
# zero. Leur derniere valeur numerique reste donc celle d'avant, et elle
|
||||
# ment.
|
||||
#
|
||||
# Trop etroite (30 minutes), on efface des valeurs JUSTES : la production
|
||||
# nulle de la nuit est ecrite une fois au coucher du soleil et reste vraie
|
||||
# jusqu'a l'aube.
|
||||
#
|
||||
# Six heures couvre une nuit sans soleil et une borne au repos, tout en
|
||||
# ecartant une lecture vieille de quatorze heures. Au-dela, la case affiche
|
||||
# un tiret — « aucune mesure recente », jamais un chiffre invente.
|
||||
# Ancien commentaire :
|
||||
# tentant — c'est ce que je faisais — mais le 05/09 a minuit le panneau
|
||||
# Reseau affichait « Courant 2,2 A », valeur ecrite QUATORZE HEURES plus
|
||||
# tot, du temps ou le contacteur etait ferme. Une case vide dit « aucune
|
||||
# mesure recente » et c'est vrai ; un chiffre perime dit « voici la
|
||||
# valeur » et c'est faux.
|
||||
# Ancienne justification, conservee pour memoire : l'integration InfluxDB
|
||||
# de Home Assistant n'ecrit QUE sur changement d'etat. Une grandeur stable
|
||||
# — la borne a 0 A, voiture debranchee — n'a donc aucun point recent, et
|
||||
# une fenetre courte affiche une case vide la ou la valeur est simplement
|
||||
# constante. `last()` reste peu couteux sur une fenetre large.
|
||||
return flux(refid,
|
||||
f'from(bucket: "evcs")\n'
|
||||
f' |> range(start: -7d)\n'
|
||||
f' |> range(start: -6h)\n'
|
||||
f' |> filter(fn: (r) => r._measurement == "{mesure}"'
|
||||
f' and r.entity_id == "{entite}" and r._field == "{champ}")\n'
|
||||
f' |> last()\n'
|
||||
@@ -682,7 +705,7 @@ report AS (
|
||||
for _, n in ENERGIE_CLES) + """
|
||||
FROM paliers
|
||||
)
|
||||
SELECT to_char(t, 'HH24') || ' h' AS "Heure",
|
||||
SELECT to_char(t, 'DD/MM HH24') AS "Heure",
|
||||
""" + ",\n".join(
|
||||
# Energie REELLEMENT accumulee : puissance moyenne x duree observee.
|
||||
# Pas la moyenne seule, qui comptait 22 minutes comme 60 et annoncait
|
||||
@@ -695,7 +718,7 @@ SELECT to_char(t, 'HH24') || ' h' AS "Heure",
|
||||
f' round((avg({n}) * count({n}) / 60.0 / 1000.0)::numeric, 2) AS "{n}"'
|
||||
for _, n in ENERGIE_CLES) + """
|
||||
FROM report
|
||||
GROUP BY date_trunc('hour', t), to_char(t, 'HH24')
|
||||
GROUP BY date_trunc('hour', t), to_char(t, 'DD/MM HH24')
|
||||
HAVING """ + " OR ".join(f"count({n}) > 0" for _, n in ENERGIE_CLES) + """
|
||||
ORDER BY date_trunc('hour', t)"""
|
||||
|
||||
@@ -704,7 +727,7 @@ ORDER BY date_trunc('hour', t)"""
|
||||
TRACKERS_FLUX = '''import "strings"
|
||||
|
||||
base = from(bucket: "evcs")
|
||||
|> range(start: -7d)
|
||||
|> range(start: -30m)
|
||||
|> filter(fn: (r) => r._field == "value")
|
||||
|> filter(fn: (r) => r._measurement == "V" or r._measurement == "A" or r._measurement == "W")
|
||||
|> last()
|
||||
@@ -738,7 +761,7 @@ systeme = dashboard("evcs-systeme", "Le systeme", (
|
||||
"Replique locale de la vue generale VRM. La console Victron est hebergee "
|
||||
"dans le cloud : elle disparait quand une coupure d'orage emporte "
|
||||
"Internet. Tout ce qui est affiche ici est lu sur le reseau local."),
|
||||
frm="now/d", refresh="30s", panels=[
|
||||
frm="now-24h", refresh="30s", panels=[
|
||||
|
||||
stat("Reseau", [
|
||||
flux_dernier("A", "W", "victron_grid_power_l1", "Puissance"),
|
||||
|
||||
Reference in New Issue
Block a user