SVG: Plot mit Steps sollte jetzt enden

Begonnen von Dr. Boris Neubert, 01 Dezember 2025, 20:30:37

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Ein Plot, bei dem ich eine Messreihe mit Plot-Type = steps plotte, impliziert, dass der Messwert seit der letzten Messung konstant ist und sich erst mit der nächsten Messung ggf. ändert. Daher sollte m.E. im SVG-Plot immer noch eine horizontale Linie vom letzten Messpunkt bis zum aktuellen Zeitpunkt gezogen werden (ggf. mit dem Muster gefüllt), aber keine vertikale Linie am aktuellen Zeitpunkt. Würde das SVG-Modul so geändert, könnte man beispielsweise in Plots, die zwei Zustände (an/aus, nass/trocken) auf der Zeitachse  plotten, den aktuellen Zustand sehen. Aktuell zeigt der Plot am Ende immer aus/trocken (Einstellung: endPlotNow).

Oder gibt es eine einfache Möglichkeit (ohne logProxy), das Gewünschte zu erreichen? Anwendungsfälle: Zustand von Schaltern, Bodenfeuchtesensoren, Anwesenheitsmeldern.
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 01 Dezember 2025, 20:30:37Oder gibt es eine einfache Möglichkeit (ohne logProxy), das Gewünschte zu erreichen?

Für Werte, bei denen ich das wirklich so haben möchte, wird per addLog alle drei Minuten der aktuelle Wert ins Log geschrieben. Das reicht mir als "Ungenauigkeit" völlig aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Zitat[...]impliziert, dass der Messwert seit der letzten Messung konstant ist und sich erst mit der nächsten Messung ggf. ändert.
Nicht unbedingt, ich benutze diese Darstellung fuer die Anzeige von Menge pro Zeiteinheit ("Regen pro Stunde", "Gasverbrauch am Tag", etc).
Wenn der Regenmesser nichts meldet, heisst es nicht, dass es immer noch regnet, eher das Gegenteil.

ZitatDaher sollte m.E. im SVG-Plot immer noch eine horizontale Linie vom letzten Messpunkt bis zum aktuellen Zeitpunkt gezogen werden (ggf. mit dem Muster gefüllt)
Das Fuellen mit dem Muster macht die Sache komplizierter, da man dafuer einen zweiten Polygon braucht, diesmal ohne Rand.
Vmtl. will man das Feature fuer alle 3 Varianten (step/histep/fstep) haben...
Ich kann sie einbauen, wenn noch jemand dafuer stimmt.
Und sinnvolle Namen dafuer vorschlaegt :)

Dr. Boris Neubert

@betateilchen: addLog ist ein Workaround, der in deinem Beispiel 3 Minuten nach dem letzten Umschalten greift. Abgesehen davon, dass ein Event geloggt wird, das nicht war, wäre das vermutlich die einfachste Lösung für die von mir gewünschte Darstellung im aktuellen System.

@Rudi:

Beim Regenmesser würde man doch eher fsteps verwenden? Die Regenmenge wird aufintegriert und der übertragene und geplottete Wert bezieht sich auf den Zeitraum BIS jetzt. Bei steps bezieht sich der Wert auf den Zeitraum AB jetzt.

Bei fsteps und histeps würde man die von mir vorgeschlagene Darstellung für steps nicht haben wollen.

Das Füllen ist der Clou: beim Bodenfeuchtesensor habe ich zwei Messreihen: 0=trocken,1=nass und 1=trocken,0=nass. Die Erste plotte ich mit steps in blau-gefüllt, die Zweite mit steps in rot-gefüllt, und sehe so Nass- und Trockenzeiten blau und rot hinterlegt im Plot.

BTW: Polygon mit/ohne Rand: der Ploteditor erlaubt keine Linienstärke 0. Lässt sich aber in der .gplot-Datei eintragen und funktioniert mit l?fill auch gut.

FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

#4
@Boris: bei addLog wird kein Bezug zu einem event hergestellt. Man kann damit sogar Werte ins Log schreiben (und in SVG darstellen) zu denen es gar kein existierendes device oder reading gibt. Das ist manchmal sehr praktisch.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 01 Dezember 2025, 20:54:38Vmtl. will man das Feature fuer alle 3 Varianten (step/histep/fstep) haben...
Ich kann sie einbauen, wenn noch jemand dafuer stimmt.
Und sinnvolle Namen dafuer vorschlaegt

Bitte nicht noch mehr Einträge in die dropdown Liste. Da ist es jetzt schon voll und die Auswahlmöglichkeiten sind in FHEM nirgends verständlich dokumentiert. Ein Verweis auf gnuplot ist auch wenig hilfreich.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Zitat von: betateilchen am 01 Dezember 2025, 21:30:56@Boris: bei addLog wird kein Bezug zu einem event hergestellt. Man kann damit sogar Werte ins Log schreiben (und in SVG darstellen) zu denen es gar kein existierendes device oder reading gibt. Das ist manchmal sehr praktisch.

Ja, das habe ich auch so verstanden. Der Purist in mir nimmt daran Anstoß, aber der Pragmatiker sagt: das ist eine Möglichkeit, die Darstellung einfach mit akzeptabler Unschärfe hinzubekommen.
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Zitat von: betateilchen am 01 Dezember 2025, 21:34:38
Zitat von: rudolfkoenig am 01 Dezember 2025, 20:54:38Vmtl. will man das Feature fuer alle 3 Varianten (step/histep/fstep) haben...
Ich kann sie einbauen, wenn noch jemand dafuer stimmt.
Und sinnvolle Namen dafuer vorschlaegt

Bitte nicht noch mehr Einträge in die dropdown Liste. Da ist es jetzt schon voll und die Auswahlmöglichkeiten sind in FHEM nirgends verständlich dokumentiert. Ein Verweis auf gnuplot ist auch wenig hilfreich.

Meiner Meinung nach braucht es keine weiteren Plot-Typen sondern nur die Änderung bei steps. Das bricht allerdings die Abwärtskompatibilität. Oder zwingt zum richtigen Gebrauch von steps, fsteps und histeps (es sei denn, meine Argumentation, wie diese Plot-Typen zu interpretieren sind, ist fehlerhaft).

Ja, der Plot-Editor ist eine Herausforderung... Und ich habe noch ein paar Wünsche mehr in Sachen Bedienbarkeit und Wiederverwendbarkeit von .gplot-Dateien. Vielleicht mache ich noch ein Wunschkonzert-Thema auf.
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 01 Dezember 2025, 21:45:52Ja, der Plot-Editor ist eine Herausforderung...

Für mein Empfinden ist der komplett überflüssig, weil vieles ohnehin nicht mehr zeitgemäß ist oder erst gar nicht funktioniert (z.B. mehr als 2 y-Achsen)

Vielleicht wäre es sinnvoller, den Editor komplett auszubauen und stattdessen ein bisschen Aufwand in eine verständliche Dokumentation der Syntax von gplot-Dateien zu stecken.

Dann ließe sich sicher auch Dein Wunschkonzert einfacher realisieren, dem ich mich ggf. anschließe und auch noch die eine oder andere Idee dazu hätte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Gisbert

Zitat von: betateilchen am 01 Dezember 2025, 21:30:56@Boris: bei addLog wird kein Bezug zu einem event hergestellt. Man kann damit sogar Werte ins Log schreiben (und in SVG darstellen) zu denen es gar kein existierendes device oder reading gibt. Das ist manchmal sehr praktisch.

Hallo betateilchen,
das klingt interessant, und ich nutze auch addLog, allerdings war mir neu, dass es dafür keines Devices und Readings bedarf. Kannst du näher erläutern, am besten mit einem Beispiel oder einem Link, falls es dort ein Beispiel gibt?

Viele Grüße Gisbert
Proxmox | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon

xenos1984

Zitat von: Dr. Boris Neubert am 01 Dezember 2025, 21:45:52Meiner Meinung nach braucht es keine weiteren Plot-Typen sondern nur die Änderung bei steps. Das bricht allerdings die Abwärtskompatibilität. Oder zwingt zum richtigen Gebrauch von steps, fsteps und histeps (es sei denn, meine Argumentation, wie diese Plot-Typen zu interpretieren sind, ist fehlerhaft).

+1. Ich verstehe die verschiedenen Linien-Typen genau wie Boris:

  • steps: Der Wert gilt ab dem gemeldeten Zeitpunkt, so lange, bis ein neuer Wert gemeldet wird. Nach dem letzten gemeldeten Wert gilt dieser weiterhin.
  • fsteps: Der Wert gilt bis zum gemeldeten Zeitpunkt. Nach dem letzten gemeldeten Wert sind keine aktuellen Daten vorhanden.
  • histeps: Der Wert gilt für ein bestimmtes Zeitintervall, das sich um den Meldezeitpunkt erstreckt.

Ich nutze z.B. steps für Sensoren, die nur dann etwas melden, wenn sich der Wert ändert (z.B. event-on-change-reading) und würde es daher auch logischer finden, wenn im Plot eine Linie vom letzten Messwert horizontal bis zum jetzigen Zeitpunkt durchgezogen würde.

Der Fall eines Regensensors, der die Regenmenge bis jetzt meldet, klingt für mich auch eher nach einem Anwendungsfall für fsteps. Da erscheint es mir logisch, wenn der Plot beim letzten Messwert endet.

Zitat von: betateilchen am 02 Dezember 2025, 08:38:21Vielleicht wäre es sinnvoller, den Editor komplett auszubauen und stattdessen ein bisschen Aufwand in eine verständliche Dokumentation der Syntax von gplot-Dateien zu stecken.

+1.

rudolfkoenig

#11
Ich habe jetzt step nach dem obigen Wunsch umgebaut, siehe Anhang: V1 und V2 sind step, V3 ist lines.
Die letzten Daten sind von 15:35.

Ich habe zwar Einiges getestet, aber sicher nicht alle Sonderfaelle.

Dr. Boris Neubert

#12
Hallo,

ich habe einen Sonderfall, oder gleich mehrere. Anbei der Input, um sie nachzustellen.

define SVG_FileLog_zigbee_0xa4c13866fd91e608_1 SVG FileLog_zigbee_0xa4c13866fd91e608:SVG_FileLog_zigbee_0xa4c13866fd91e608_1:CURRENT
attr SVG_FileLog_zigbee_0xa4c13866fd91e608_1 room Gewerke->Pflanze,Systeme->Plot
attr SVG_FileLog_zigbee_0xa4c13866fd91e608_1 title "gs21-1-2-soil-1 Anthurium"
#   DEF        FileLog_zigbee_0xa4c13866fd91e608:SVG_FileLog_zigbee_0xa4c13866fd91e608_1:CURRENT
#   FUUID      69188c38-f33f-4eef-368f-bac27d79954c1a66
#   GPLOTFILE  SVG_FileLog_zigbee_0xa4c13866fd91e608_1
#   LOGDEVICE  FileLog_zigbee_0xa4c13866fd91e608
#   LOGFILE    CURRENT
#   NAME       SVG_FileLog_zigbee_0xa4c13866fd91e608_1
#   NR         251
#   STATE      initialized
#   TYPE       SVG
#
setstate SVG_FileLog_zigbee_0xa4c13866fd91e608_1 initialized


Der Plot stellt die Feuchtigkeit des Bodens einer Zimmerpflanze über die Zeit dar. Der Sensor sendet dazu einen numerischen Wert für soil_moisture. Ferner sendet der Sensor true oder false für dry bei einem Wechsel von trocken zu feucht oder umgekehrt. Ich leite daraus zwei weitere Zeitreihen ab, eine für trocken und eine für feucht (jeweils 1 wenn trocken bzw. feucht und 0 wenn feucht bzw. trocken). Diese stelle ich mit fsteps und Füllung in Rot bzw. Blau dar. Ich möchte damit erreichen, dass der Hintergrund im Plot jeweils entsprechend der Bodenfeuchtigkeit gefärbt ist.

Ich beobachte folgendes:
  • Fällt kein dry-Wert ins Zeitfenster, wird auch die Zeitreihe nicht gezeichnet (Tagesansicht, Wochenansicht). Das ist eine bekannte Eigenschaft der Plots, da sie die Zeitreihen filtern und nicht den Graphen clippen.
  • Zoomt man raus (4-Wochen-Ansicht), so dass ein Feucht-Wert im Zeitfenster ist, erstreckt sich die Füllung bis zum rechten Rand des Plots, obwohl der rechte Rand in der Zukunft liegt. Die Füllung sollte "jetzt" enden (endPlotNow und endPlotToday sind beide gesetzt).
  • Zoomt man noch weiter raus (Jahresansicht), fehlt die Füllung rechts wieder. Hier sollte aber auch eine Füllung bis nach "jetzt" reichen.

Das sind meine Beobachtungen für Anthurium. Das Spathiphyllum hat auch einen Bodenfeuchtesensor mit den gleichen Einstellungen. Dort erstreckt sich der gefüllte Feuchtbereich nach t = -unendlich, obwohl der erste dry-Wert überhaupt erst im November geliefert wurde (alle Ansichten, die den ersten dry-Wert im November enthalten).

Viele Grüße
Boris
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Achtung: in der angehaengten gplot Datei sind fsteps spezifiziert.
Hier reden wir aber ueber steps, und ich habe auch nur die getestet bzw. im Code angepasst.

ZitatFällt kein dry-Wert ins Zeitfenster, wird auch die Zeitreihe nicht gezeichnet (Tagesansicht, Wochenansicht). Das ist eine bekannte Eigenschaft der Plots, da sie die Zeitreihen filtern und nicht den Graphen clippen.
Ohne Wert gibts auch nicht zu zeichnen.
Wenn man default nicht gesetzt hat, und FileLog im Intervall nichts gefunden hat, dann wird die letzte 1kB vor dem Startpunkt untersucht.
Leider ist in deinem Fall der letzte dry Wert ca 90 KB hinter dem (heutigen) Startwert.
Ich habe den Suchbereich in FileLog von 1kB auf 100kB erweitert


ZitatZoomt man raus (4-Wochen-Ansicht), so dass ein Feucht-Wert im Zeitfenster ist, erstreckt sich die Füllung bis zum rechten Rand des Plots, obwohl der rechte Rand in der Zukunft liegt. Die Füllung sollte "jetzt" enden (endPlotNow und endPlotToday sind beide gesetzt).
Wegen endPlotNow und endPlotToday ist der rechte Rand jetzt bzw. heute.


ZitatZoomt man noch weiter raus (Jahresansicht), fehlt die Füllung rechts wieder. Hier sollte aber auch eine Füllung bis nach "jetzt" reichen.
Kann ich nicht nachstellen, ich brauche genaue Anweisungen.

Ich habe SVG leicht angepasst, damit die Anzeige mit steps bei einem Wert aehnlich wie mit vielen Werten ausschaut.


Im Anhang ist die aktuelle Anzeige, mit angepassten FileLog und gefixten SVG (s.o.), ohne endPlotNow.