Hauptmenü

Balkendarstellung in cards

Begonnen von Damian, 08 Januar 2023, 21:57:43

Vorheriges Thema - Nächstes Thema

Damian

Syntax:

[<Device>:<Reading>:bar<nr><Periode><TimeOffset]

mit
nr: Anzahl der Perioden
Periode: day, week, month, year, decade

Bei day werden 24 Stunden als Balken dargestellt,
bei week werden 7 Tage (Mo bis So) der Woche dargestellt,
bei month werden bis 31 Tage des Monats dargestellt,
bei year werden 12 Monate des Jahres dargestellt,
bei decade werden 10 Jahre eines Jahrzehnts (Dekade) dargestellt.

TimeOffset Zeitliche Verschiebung von Werten

Dokumentation, hier speziell die Beschreibung von <collect type> mit bar: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzeige_eines_Werteverlaufs_und_des_aktuellen_Wertes_mit_Hilfe_der_SVG-Funktion_card

und https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Darstellung_fortlaufender_Daten_als_S.C3.A4ulen

Datenimport: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Import.2C_.C3.84nderung_und_L.C3.B6schung_von_Diagrammdaten

Anwendung: https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler

Edit: Version wurde eingecheckt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

KernSani

Das sieht spannend aus... Vielleicht wäre es gut, die Möglichkeit zu haben eine Legende mit einzufügen oder ggf. unterschiedliche Farbschattierungen - Im Beispielbild erkenne ich jetzt auf die Schnelle z.B. nicht wie die Balken Fr.-So einzuordnen sind. Sind das die Vergangeheitswerte (und es gibt noch keine Werte für die aktuelle Woche? Oder gab es keine Vergangenheitswerte und das sind die aktuellen Werte? Zum Teil ergibt sich das wahrscheinlich aus dem Kontext (sprich dem Tag an dem ich drauf schaue) aber vermutlich ist das nicht immer eindeutig.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Damian

Zitat von: KernSani am 13 Januar 2023, 15:52:49
Das sieht spannend aus... Vielleicht wäre es gut, die Möglichkeit zu haben eine Legende mit einzufügen oder ggf. unterschiedliche Farbschattierungen - Im Beispielbild erkenne ich jetzt auf die Schnelle z.B. nicht wie die Balken Fr.-So einzuordnen sind. Sind das die Vergangeheitswerte (und es gibt noch keine Werte für die aktuelle Woche? Oder gab es keine Vergangenheitswerte und das sind die aktuellen Werte? Zum Teil ergibt sich das wahrscheinlich aus dem Kontext (sprich dem Tag an dem ich drauf schaue) aber vermutlich ist das nicht immer eindeutig.

Ja, es wird noch Orientierungslinien geben, der aktuelle Wert bzw. Periode soll gekennzeichnet werden, die Vorgängerperioden sollen ebenfalls farblich unterschieden werden können. Es ist noch genug zu programmieren, vielleicht schaffe ich am Wochenende den ersten Prototypen fertigzustellen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Nächste Stufe:

So sehen die letzten vier Wochen aus (bar4week) - siehe Anhang.

Die aktuelle Woche wird heller dargestellt, die vorherigen dunkler. Damit sollte man sich besser zurechtfinden. Die Woche beginnt immer mit Montag. Der aktuelle Sonntagswert fehlt noch, da er erst am Ende des Tages berechnet wird.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

im Anhang Darstellung bars2month
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#5
Und nun endlich eine Jahresübersicht.

Im Anhang bars2year

Abgebildet sind die gesammelten Echtdaten ab April im letzten Jahr, daher dunkel abgebildet, die Daten (helle Balken) des aktuellen Jahres kommen ja erst noch.

Es lassen sich beliebig viel Jahre darstellen. Die Monatsbalken werden entsprechend schmaler skaliert. Die automatische Skalierung der Balken abhängig von der Anzahl der Perioden gilt für alle bars-Darstellungen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#6
Als letztes die Darstellung von Jahresverbräuchen in Dekaden bars2decade.

Im Anhang Echtdaten der aktuellen Dekade (2020-2029) und der vorherigen (2010-2019).

Die Visualisierung bis zu sechs Dekaden (6 x 10 = 60 Jahre) sollte mit 60 Balken noch darstellbar sein.

Edit: bar6decade mit gleichen Daten anhängt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#7
Ich habe etwas weiter programmiert, jetzt mit Kennzeichnung des aktuellen Tages, mit Beginn der Periode (hier Woche), mit dem Durchschnittswert mit Linie sowie Maximum und Minimum mit Kennzeichnung im Diagramm.

Die Übernahme alter Werte kann einfach per Funktion vorgenommen werden. Hier z. B.

{DOIF_set_card_data("di","bla","day","bar4week",-300,fhem("get log.counter.MQTT2_DVES_C58DCB.total_gas ./log/counter.MQTT2_DVES_C58DCB.total_gas.log - 2022-01-01 2023-24-01 4:last_day"))}

Dabei ist -300 ein Sekundenoffset. Das Reading last_day wurde jeweils erst kurz nach Mitternacht ermittelt, mit -300 wird er zeitlich um 300 Sekunden zurückverschoben, um im richtigen Tag zu landen.

Es wird nur ein Wert (Reading) pro Diagramm dargestellt, sonst wird es zu unübersichtlich.

Die card-Syntax ist gleich geblieben.

Mit

card([bla:day:bar4week],"Gasverbrauch pro Tag in m³",undef,0,10,undef,undef,"m³",undef,"1",",fixedscaling,,,")

sieht das Ergebnis wie im Anhang aus.

Jetzt muss ich die neue Funktionalität im Live-System testen. Wenn die Tests erfolgreich verlaufen, werde ich die neue Version veröffentlichen

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#8
So sehen die letzten zwei Monate von PV-Ertrag und Bezug in einem Diagramm aus. Wenn es zu unübersichtlich wird, kann man Wochendarstellung mit weniger Balken nehmen. Ich habe jetzt doch mehrere Readings in der Darstellung erlaubt. Sinn macht es aber nur, wenn sich die Werte nicht überschneiden, so wie hier: PV positiv, Bezug negativ - es sind meine Echtdaten.


Edit: Bilder für einen Monat und für zwei Monate in der Darstellung angepasst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#9
Die neue Version läuft inzwischen im produktiven System. Im Anhang befindet sich eine Gegenüberstellung der bisherigen vier wöchigen col4w und der neuen bars1month Darstellung.

Da der Tagesverbrauch kurz nach Mitternacht bestimmt wurde, ist er in der bisherigen col4w-Darstellung immer um einen Tag verschoben gewesen. Bei der bars-Darstellung lässt sich ein Timeoffset angeben, hier bars1month-300, so dass der Tagesverbrauch nun im korrekten Tagesbalken landet. Die restlichen dunklen Balken sind die Werte des Vormonats.

Informativer ist natürlich eine zweimonatige Darstellung bars2month (zweites Bild), um einen Vergleich zum Vormonat zu haben
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#11
Neue DOIF-Version mit bar-Features wurde eingecheckt.

Siehe auch: https://forum.fhem.de/index.php/topic,120088.msg1262277.html#msg1262277

Übrigens: bar-Angaben kommen mit weniger Daten aus (pro Balken ein Wert) als col-Angaben - es werden keine Zeitangaben gespeichert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Es gibt demnächst einen neuen Balkendatentyp: barAvg

Falls innerhalb der definierten Zeitperiode mehrfach Daten eintrudeln, so wird bei bar immer der letzte Wert der Periode übernommen, bei barAvg wird dagegen der Mittelwert der Daten der Zeitperiode gebildet und als Balken dieser Periode dargestellt.
 
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

In der Monatsübersicht werden jetzt im aktuellen Monat die Sonntage gekennzeichnet, um sich etwas besser zurechtzufinden.

siehe Anhang:
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jkriegl

#17
Habe mich etwas mit der Balkendarstellung beschäftigt und dazu Diagramme zur Temperatur erstellt.
Tages min/max beziehe ich aus dem Hilfs-device average (event-Problem!).
Bei min-max wird in den Halbringen der aktuelle Wert dargestellt. Bei barAvg1month wird im Halbring die aktuelle Temperatur angezeigt.
Den aktuellen Avg Tageswert habe ich mir aus dem versteckten reading gesucht.
min/max Werte kann man mit DOIF_Redings ermitteln, aber nicht alles. Funktionierendes Beisp.
avg_min: ${[muc:temperature:barAvg1month]}{min_value}
Beobachte, wenn heute die TagesminTemp unterschritten wird.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Damian

Zitat von: jkriegl am 10 März 2023, 19:28:59
Habe mich etwas mit der Balkendarstellung beschäftigt und dazu Diagramme zur Temperatur erstellt.
Tages min/max beziehe ich aus dem Hilfs-device average (event-Problem!).
Bei min-max wird in den Halbringen der aktuelle Wert dargestellt. Bei barAvg1month wird im Halbring die aktuelle Temperatur angezeigt.
Den aktuellen Avg Tageswert habe ich mir aus dem versteckten reading gesucht.
min/max Werte kann man mit DOIF_Redings ermitteln, aber nicht alle, z.B.
avg_min: ${[muc:temperature:barAvg1month]}{min_value}
Beobachte, wenn heute die TagesminTemp unterschritten wird.

Bei barAvg ist ja das Minimum nicht der minimale Wert absolut, sondern die Säule mit dem minimalen Durchschnitt. Es wird bald barMinMax geben, dann sieht man die Schwankung innerhalb einer Zeiteinheit. Hier wird das Minimum der kleinste Wert der Minima sein und das Maximum der größte Wert der Maxima.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jkriegl

Kleines Missverständnis: Das Beispiel funktioniert natürlich. Mit solchen DOIF_Readings kann man die Fusszeilen auslesen, aber wohl noch nicht die Durchschnittswerte (links).

Sollte nicht im Halbring, statt der aktuellen Temperatur, der berechnete Durschnittswert angezeigt werden?
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Damian

Zitat von: jkriegl am 11 März 2023, 13:13:01
Kleines Missverständnis: Das Beispiel funktioniert natürlich. Mit solchen DOIF_Readings kann man die Fusszeilen auslesen, aber wohl noch nicht die Durchschnittswerte (links).

Also, bei mir funktioniert alles wie programmiert:

defmod di DOIF bla_test {}
attr di DOIF_Readings avg: ${[bla:day:barAvg1day]}{average_value}
attr di uiTable {package ui_Table;;$TABLE='text-align:center;;'}\
card([bla:day:barAvg1day],[$SELF:avg]."Gasverbrauch in m³",undef,0,10,undef,undef,"m³",undef,"1",",fixedscaling,,,,halfring")\


man kann auch direkt den Durchschnitt ohne DOIF_Readings angeben:

card([bla:day:barAvg1day],"${[bla:day:barAvg1day]}{average_value} Gasverbrauch in m³",undef,0,10,undef,undef,"m³",undef,"1",",fixedscaling,,,,halfring")

Zitat
Sollte nicht im Halbring, statt der aktuellen Temperatur, der berechnete Durschnittswert angezeigt werden?

Das ist Ansichtssache. Im Ring wird der aktuelle Wert des Readings angezeigt, auch dann, wenn es nach der DOIF-Definition noch kein Event vom Reading und damit keine Säulen gibt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF