In der Label Zeile eines SVG Plots werden 2 von 3 Werten falsch ausgegeben

Begonnen von pschlaeppi, 20 August 2023, 14:01:12

Vorheriges Thema - Nächstes Thema

pschlaeppi

Hallo zusammen,

Ich habe bei der Darstellung eines SVG Plots mit den täglichen Strom Verbrauchswerten (unter Verwendung von LogProxy) das Problem dass der Plot die korrekten Werte anzeigt, in der Überschrift aber bei 2 der 3 Werte Daten aus einem anderen Reading anzeigt. Die Readings von denen die Daten stammen, plotte ich in diesem Plot nicht.

Die Namen der Readings Werte welche die aktuellen Werte des Plot enthalten und aus welchen auch die aktuelle Werte angezeigt werden sollte, sind:
  • dm_Energy ElectricityConsumption
  • dm_Energy GridConsumption
  • dm_Energy PV_pac

Beim Wert PV_pac funktioniert die Werte Ausgabe über $data{curval1} (siehe Device List und Screenshot).
Bei den anderen Werten werden aber Werte der Readings ausgegeben welche die kumulierte Tagesleistungen von Bezug und Verbrauch in KWh loggen und nicht die aktuellen Werte.

Die Namen der Readings der Werte welche im Label fälschlich angezeigt werden sind:
  • dm_Energy ElectricityConsumptionDay
  • dm_Energy GridConsumptionDay

Beim PV Reading "PV_pac" wo es korrekt angezeigt wird, ist der Name des korrespondierenden Readings mit der kumulierten Tages Leistung "dm_Energy PV_Day".

Das Problem scheint auf den ersten Blick darin zu liegen dass für die Anzeige im Label die Wahl des richtigen Datenwertes nicht zu funktionieren scheint wenn der Name des Readings eine Teilmenge eines anderen Readings mit längerem Namen ist. "ElectricityConsumption" sollte angezeigt werden, aber "ElectricityConsumptionDay" wird anzegeit. Bei "PV_pac" und "PV_Day" klappt die Unterscheidung korrekt.
Ich kann natürlich meinen Code und die Logfiles umstellen auf zum Beispiel "ElectricityConsumptionCurrent" und "GridConsumptionCurrent", möchte den Aufwand für die Umstellung des Codes und aller betroffenen Logdaten wenn möglich vermeiden.
FHEM ist auf dem neusten Stand.

Bei Bedarf kann ich jederzeit gerne weitere Angaben bereitstellen.

Fragestellungen:
- Ist dieses ein bekanntes Verhalten/Problem?
- Kann das Problem allenfalls durch einen anderen Aufruf im Label umgangen werden?
- Kann das Problem gefixt werden?

Herzlichen Dank für allfällige Rückmeldungen
Grüsse Philipp


List Plot Device:
Internals:
   DEF        logP:my_EZ_ug.hv.EZ.EnergyMeter1.Pcur_LP:CURRENT
   FUUID      5c4ebcae-f33f-2009-e7b9-a8828f82bae1c79b
   FVERSION   98_SVG.pm:0.272610/2023-02-21
   GPLOTFILE  my_EZ_ug.hv.EZ.EnergyMeter1.Pcur_LP
   LOGDEVICE  logP
   LOGFILE    CURRENT
   NAME       SVG.ug.hv.EZ.EnergyMeter1.Pcur
   NR         1870
   STATE      initialized
   TYPE       SVG
Attributes:
   group      10e_Plots
   label      "Energie Tagesverlauf: Bezug: $data{currval1} W  --  Verbrauch: $data{currval3} W  --  PV: $data{currval2} W"
   plotsize   800,500
   room       Plots-Energie

betateilchen

#1
Zitat von: pschlaeppi am 20 August 2023, 14:01:12Fragestellungen:
- Ist dieses ein bekanntes Verhalten/Problem?
- Kann das Problem allenfalls durch einen anderen Aufruf im Label umgangen werden?
- Kann das Problem gefixt werden?

Grundsätzlich funktioniert das mit den Werten aus dem %data hash zuverlässig.

Das Attribut label ist inzwischen schon länger deprecated und man sollte besser plotReplace verwenden. Siehe auch commandref.

Zweitens wäre ein list des gplot-Files hilfreich zur Fehlersuche.

Bist Du sicher, dass Du aus CURRENT plotten möchtest anstatt aus HISTORY?
Edit: Vermutlich ein FileLog device als Quelle, da ist CURRENT korrekt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

pschlaeppi

Hallo Betateilchen,

Herzlichen Dank für den schnellen Feedback.

Deine Annahme ist korrekt. Ich verwende LogFiles.

Ich kann gerne versuchen das mit plotReplace zu lösen. Anhand der Beschreibung im Commandref habe noch nicht begriffen wie ich das anwenden kann um eine vergleichbare Titel Zeile über dem Plot hin zu kriegen. Leider habe ich in den Wiki Einträgen und im Forum auf die schnelle noch kein Beispiel gefunden um die notwendigen Zusammenhänge zu sehen.

Wo/was müsste ich suchen um ein Beispiel zu finden?


Das entsprechende gplot File habe ich untenstehend eingefügt:
############################
# Display the Energy


set terminal png transparent truecolor rounded medium size <SIZE> enhanced
#set terminal png transparent size <SIZE> crop
#set terminal png size <SIZE> crop

set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"

set title '<L1>'

set xlabel "Energie Monitor"
set x2label " xlabel 2 "
set ylabel ""
set y2label "Power in KWh"

set grid xtics y2tics

set ytics
set y2tics
set yrange [0:125]
set y2range [0:125]


#logProxy FileLog:FileLog_dm_Energy:4:GridConsumptionDay::
#logProxy FileLog:FileLog_dm_Energy:4:PV_Day
#logProxy FileLog:FileLog_dm_Energy:4:EnergyConsumptionDay::
#logProxy ConstY:5
#logProxy ConstY:10
#logProxy ConstY:15
#logProxy ConstY:20
#logProxy ConstY:25
#logProxy ConstY:30
#logProxy ConstY:35
#logProxy ConstY:40
#logProxy ConstY:45
#logProxy ConstY:50
#logProxy ConstY:55
#logProxy ConstY:60
#logProxy ConstY:65
#logProxy ConstY:70
#logProxy ConstY:75
#logProxy ConstY:80
#logProxy ConstY:85
#logProxy ConstY:90
#logProxy ConstY:95
#logProxy ConstY:100
#logProxy ConstY:105
#logProxy ConstY:110
#logProxy ConstY:115
#logProxy ConstY:120



plot "<IN>" using 1:2 axes x1y2 title 'Netzbezug' ls l2 lw 4 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'PV Erzeugung' ls l1 lw 4 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Tagesverbrauch' ls l0fill lw 2 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '' ls l6 lw 1 with lines


Grüsse Philipp
   


Nobbynews

Zitat von: pschlaeppi am 20 August 2023, 23:19:07Wo/was müsste ich suchen um ein Beispiel zu finden?
plotReplace TL={"Tagesverbrauch Gas ".sprintf("%.2f",$data{currval1})." m³, Anzeigedurchschnitt ".sprintf("%.2f",$data{avg1})." m³/d, gesamt ".sprintf("%.3f",$data{currval3})." m³/d, Prognose: ".sprintf("%.0f",$data{avg1}*365)." m³/a, ".sprintf("%.0f",$data{avg1}*365*0.9655*10.369)." kWh/a"}
Und dann als Plot title wieder <TL> eintragen nicht vergessen.

rudolfkoenig

Auch wenn label und title ueberholt sind, sollten sie in diesem Beispiel genausogut funktionieren, wie das generischere plotReplace.

Das Wort Reading ist in diesem Zusammenhang irrefuehrend: $data{currval2} liest kein Reading aus, sondern liefert den letzten Wert aus der im Plot zur zweiten "Linie" zugehoerigen Datei, entsprechend der Vorgaben gefiltert.

Zitat"ElectricityConsumption" sollte angezeigt werden, aber "ElectricityConsumptionDay" wird anzegeit.
Der Filter fuer diese Linie begrenzt die Suche nicht auf ganze Woerter => die Werte aller Zeilen, die diesen Filter (auch als Teilstring) enthalten, werden zurueckgeliefert.
Um nur ElectricityConsumptionDay zu finden, muss der Filter ergaenzt werden, z.Bsp. zu ElectricityConsumptionDay\b (\b bezeichnet die Wortgrenze im RegExp) 

betateilchen

Zitat von: rudolfkoenig am 21 August 2023, 11:00:41Auch wenn label und title ueberholt sind, sollten sie in diesem Beispiel genausogut funktionieren, wie das generischere plotReplace.

Das hatte ich auch nicht als mögliche Fehlerursache erwähnt, sondern als Hinweis.

Meine Hoffnung ist ja immer noch, dass Dinge, die deprecated sind, auch irgendwann tatsächlich ausgebaut werden. Solche "doppelten Möglichkeiten" finde ich grundsätzlich irritierend und schwer supportbar.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

pschlaeppi

Guten Tag zusammen,

Herzlichen Dank für eure Hilfestellungen.
ZitatDer Filter fuer diese Linie begrenzt die Suche nicht auf ganze Woerter => die Werte aller Zeilen, die diesen Filter (auch als Teilstring) enthalten, werden zurueckgeliefert.
Um nur ElectricityConsumptionDay zu finden, muss der Filter ergaenzt werden, z.Bsp. zu ElectricityConsumptionDay\b (\b bezeichnet die Wortgrenze im RegExp)

Die Ergänzung mit \b behebt mein Problem und der Plot wird nun korrekt beschriftet.


ZitatMeine Hoffnung ist ja immer noch, dass Dinge, die deprecated sind, auch irgendwann tatsächlich ausgebaut werden. Solche "doppelten Möglichkeiten" finde ich grundsätzlich irritierend und schwer supportbar.

Verstehe dieses Argument sehr gut. Wenn ich jeweils mitkriege dass etwas depreciated ist, versuche ich in der Regel auch zeitnah um zu stellen. Da ich aber gerne was funktionierendes als Basis nehme und nicht jedes mal die Commandref konsultiere, kriege ich natürlich nicht alles mit und manschmal auch erst wenn es dann ausgebaut wurde und nicht mehr funktioniert.
Manchmal kommt mir auch noch die menschliche Natur in die Quere. Was neues zu implementieren ist viiiel spannender als aufräumen. :-)

Mit dem Beispiel wie das umzusetzen und mit dem <TL> anzuziehen ist, werde ich mich jetzt auch langsam an die Anpassungen machen. Wird aber ne Weile dauern da es inzwischen weit über 200 Plots sind.

Noch mal ganz herzlichen Dank für eure Unterstützung.

Grüsse Philipp

pschlaeppi

Guten Tag zusammen,

Ich habe Heute Abend den obenstehenden Plot mit dem Problem der falschen Werte nun umgestellt auf plotReplace.
Funktioniert tadellos.
Nur so als "Proof of the Pudding" habe ich dann bei "EnergyConsumption\b" und "GridConsumption\b" jeweils das
\b wieder entfernt. Der Fehler war nicht ganz unerwartet wieder zurück. Der Fehler tritt sowohl bei Verwendung
von Label wie auch plotReplace auf.

Es braucht das von Rundi oben beschriebene \b am Ende des Regex zwingend um dem Problem Herr zu werden.
#logP FileLog:FileLog_dm_Energy:4:PV_pac
#logP FileLog:FileLog_dm_Energy:4:GridConsumption\b::
#logP FileLog:FileLog_dm_Energy:4:EnergyConsumption\b::

Grüsse Philipp


betateilchen

Zitat von: pschlaeppi am 22 August 2023, 20:56:37Es braucht das von Rudi oben beschriebene \b am Ende des Regex zwingend um dem Problem Herr zu werden.

Natürlich braucht es das. Der Mechnismus für die Verarbeitung der Daten im plot ist ja der gleiche. Wie ich schon schrieb: Der Hinweis auf plotReplace war kein Hinweis auf eine Fehlerursache oder gar eine Lösungsmöglichkeit, sondern einfach in die von Dir beschriebene Richtung vorausgedacht:

Zitat von: pschlaeppi am 22 August 2023, 00:02:12Wenn ich jeweils mitkriege dass etwas depreciated ist, versuche ich in der Regel auch zeitnah um zu stellen. Da ich aber gerne was funktionierendes als Basis nehme und nicht jedes mal die commandref konsultiere, kriege ich natürlich nicht alles mit und manchmal auch erst wenn es dann ausgebaut wurde und nicht mehr funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!