Logproxy und Anzeige von 2 Function Returns

Begonnen von andi11, 03 November 2019, 10:15:30

Vorheriges Thema - Nächstes Thema

andi11

Aus irgendeinem Grund wird in meinem neuesten Chart der letzte Wert "Forecast" nicht angezeigt.
Der Rückgabewert der Funktion ist ein sinnvoller Wert. Wenn ich die Funktionen von "Forecast" und "aktueller Monat" vertausche, wir Forceast richtig angezeigt, "aktueller Monat" dafür nicht.
Die Funktion current2Plot hab ich aus dem Wiki und würde ich als Fehlerursache ausschließen, sonst dürfte ja das tauschen auch nichts ändern.

Was kann ich tun?

Gplotfile
# Created by FHEM/98_SVG.pm, 2019-11-03 08:32:21
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Stromverbrauch Jahresvergleich'
set ytics
set y2tics
set grid y2tics
set ylabel "Kwh Aktuell"
set y2label "Kwh Jahr"

#lp DbLog:logdb,offset=-60*60*24*30:Stromverbrauch_Zaehler1:VerbrauchLastMonth
#lp DbLog:logdb,offset=60*60*24*334:Stromverbrauch_Zaehler1:VerbrauchLastMonth
#lp Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1","VerbrauchAktMonth")
#lp Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1","ForecastAktMonth")

plot "<IN>" using 1:2 axes x1y2 title 'Aktuelles Jahr' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Letztes Jahr' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'aktueller Monat' ls l2 lw 1 with bars,\
     "<IN>" using 1:2 axes x1y2 title 'Forecast' ls l3 lw 1 with bars

Ausgabe "Show preprocessed input"
get lp HISTORY INT 2019-01-01_00:00:00 2019-12-31_23:59:59 DbLog:logdb,offset=-60*60*24*30:Stromverbrauch_Zaehler1:VerbrauchLastMonth DbLog:logdb,offset=60*60*24*334:Stromverbrauch_Zaehler1:VerbrauchLastMonth Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1","VerbrauchAktMonth") Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1","ForecastAktMonth")

2019-01-02_01:05:00 323
2019-01-30_01:05:00 278
2019-03-02_00:05:00 282
2019-04-01_01:05:00 209
2019-05-02_01:05:00 227
2019-06-01_01:05:00 184
2019-07-02_01:05:00 177
2019-08-02_01:05:00 208
2019-09-01_01:05:00 209
2019-10-02_02:07:00 218
#Stromverbrauch_Zaehler1:VerbrauchLastMonth:::
2019-01-01_01:05:00 246
2019-01-29_01:05:00 260
2019-03-01_00:05:00 242
2019-03-31_00:05:00 188
2019-05-01_01:05:00 200
2019-05-31_01:05:00 205
2019-07-01_01:05:00 221
2019-08-01_01:05:00 215
2019-08-31_01:05:00 207
2019-10-01_02:05:00 269
2019-10-31_01:05:00 283
2019-12-01_01:05:00 316
#Stromverbrauch_Zaehler1:VerbrauchLastMonth:::
2019-11-03_09:59:55 20
#plotCurrent: Stromverbrauch_Zaehler1:VerbrauchAktMonth
#Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1","VerbrauchAktMonth")
2019-11-03_09:59:55 178
#plotCurrent: Stromverbrauch_Zaehler1:ForecastAktMonth
#Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1","ForecastAktMonth")


List:
Internals:
   DEF        lp:SVG_Verbrauch_Strom:HISTORY
   FUUID      5d99874e-f33f-e34d-4b78-9dabb7919a25875a
   GPLOTFILE  SVG_Verbrauch_Strom
   LOGDEVICE  lp
   LOGFILE    HISTORY
   NAME       SVG_Verbrauch_Strom
   NOTIFYDEV  global
   NR         300
   STATE      initialized
   TYPE       SVG
Attributes:
   DbLogExclude .*
   fixedrange 1year
   room       Technik_Verbrauch
   sortby     1

andi11

Hat keiner ne Idee? Fehlt noch irgendwas an Info?

OdfFhem

@andi11

Ich bin aktuell dabei, einige Möglichkeiten von logProxy zu nutzen, um z.B. eine Stromauswertung möglichst aktuell darzustellen.

Dort werden Produktion und Verbrauch gegenübergestellt und neben den Werten für abgelaufene Stunden bzw. Tage sollen auch die jeweils aktuellen Werte dargestellt werden. Folglich habe ich je einen aktuellen Wert für Produktion bzw. Verbrauch via Func berechnet - allerdings nur der zuerst berechnete Wert wird in die Darstellung übernommen. Somit war Dein Problem "leicht" nachvollziehbar ...

Eine Recherche brachte keine Lösung für dieses Problem und so habe ich selbst ein wenig rumprobiert. Eine kleine Änderung reichte, um dann doch beide Werte dargestellt zu bekommen. Ob diese Änderung Nebeneffekte hat, kann ich zumindest im Moment noch nicht sagen ...

Hast Du mittlerweile eine eigene Lösung für dieses Problem bzw. Lust, eine Änderung auszuprobieren?

andi11

Hallo OdfHem,
nein ich habe immernoch keine Lösung. Meine einzige "Lösung" ist momentan, nur einen von beiden Werten anzuzeigen.
Es interessiert mich jetzt aber wieder mehr, da ich jetzt zustäzlich zum Stromverbrauch auch noch eine PV Anlage mit Eigenverbrauch/Einspeisung/Erzeugung darstellen möchte.

Insofern bin ich sehr an Lösungsverschlägen, Versuchen usw. interessiert.

Beta-User

Zitat von: OdfFhem am 02 September 2020, 17:38:51
Hast Du [...] Lust, eine Änderung auszuprobieren?
Mitles! (logProxy fehlt mir noch in meiner "Sammlung"...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

OdfFhem

@andi11

Die Lösung zur Anzeige beider Werte besteht aus einer (sehr) kleinen Änderung gegenüber dem Wiki-Vorschlag:


$ret .= "#plotCurrent: $device:$reading\n";

wird zu

#$ret .= "#plotCurrent: $device:$reading\n";


Die plotCurrent-Zeile scheint für die letztliche Darstellung keine Bedeutung zu haben ... mir ist nach der Änderung bislang kein Problem aufgefallen ...


@Beta-User

Dies ist der erste Einsatz von logProxy und diese SVG-Erweiterung hat mich überzeugt. Um die Darstellung abzurunden, nutze ich

  • predict-Option
  • leicht abgewandelte current2Plot-Funktion

Beta-User

Danke vorab mal für die Info, ich habe das auch erst noch "auf dem Zettel", das ganze sieht recht mächtig aus.

Vielleicht schaffen wir es ja, auch dazu noch eine "plotreplace"-Variante (bzw. je eine für FileLog und BDLog) so zu bauen, dass man sie recht einfach kopieren und auf die eigenen Bedürfnisse kann. Der Wiki-Text ist an der Stelle (nach meinem Gefühl) "spröde", und ein Bild sagt mehr wie 1000 Worte...

(Wird aber von meiner Seite dauern).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

OdfFhem

@Beta-User

Da ich schon vor dem Einsatz von logProxy bei Mess-Steckdosen aller Art immer auf ein und denselben gplot zurückgriffen habe, war die Anpassung für den logProxy-Einsatz rasch erledigt. An den eigentlichen SVG-Devices waren keinerlei Änderungen notwendig - was mich persönlich ein wenig gewundert hat, da das Wiki ja irgendwie was anderes sagt.

Beta-User

Staun...

(Wie in diesem Bereich leider nicht ganz selten scheint die Doku irgendwie veraltet zu sein, oder ich habe sie noch nicht verstanden. Ich habe nicht allzuviel Meßdosen im Einsatz und bisher mit den Daten auch nicht viel gemacht. Falls es das .glot aus "SVG" ist, würden mich die Anpassungen schon interessieren ;) , es ist wie so oft ja das Ergebnis des Zusammenspiels vieler Details, und wenn man an einer Stelle aus der Kurve fliegt, bekommt man das nicht unbedingt gleich mit).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

OdfFhem

@Beta-User

Es handelt sich tatsächlich um die gplot-Datei aus dem SVG-Umfeld.

Derzeit unterwegs, kann ich leider momentan keine weiteren Details einstellen - später sollte dies aber kein Problem sein ...

andi11

Juhu, du hast recht das wars :


$ret .= "#plotCurrent: $device:$reading\n";
wird zu

#$ret .= "#plotCurrent: $device:$reading\n";


So sieht jetzt mein Chart aus:

OdfFhem

@andi11

Freut mich, dass es auch bei Dir klappt.

Eine Frage interessiert mich noch bei Deiner Darstellung: Werden die Werte um einen Monat versetzt angezeigt oder sind es tatsächlich Deine "aktuellen" Werte für den Monat August statt September?

andi11

Es wird versetzt erfasst und dargestellt, mit Absicht
=> August entspricht Verbrauch 1.8 bis 31.8
Hintergedanke dabei ist "Was haben wir denn im August verbraucht? Musste bei September kucken" finde ich unlogisch.
=> Forecast entspricht Verbrauch 1.9 bis jetzt hochgerechnet auf den ganzen Monat. Das entspricht also nicht 100% der Darstellung. Da weis ich aber noch nicht ob ich nicht evl lieber 30Tage rollierend mache, was dann der Darstellung entsprechen würde.


andi11

gibts evl ne Möglichkeit die Balken zu stapeln?
Würde da gerne noch mit "EigenverbrauchPV" mit einblenden.

OdfFhem

@Beta-User

Wie gestern bereits besprochen, ein kurzer Überblick, wie das SVG-Umfeld um logProxy erweitert werden kann, um einige zusätzliche Features nutzen zu können.

Da die Darstellung für zahlreiche Devices genutzt wird, ist die Ausgangslage eine "verallgemeinerte" gplot-Datei. Alle Anpassungen finden ausschließlich in dieser gplot-Datei statt - die SVG-Devices selbst bleiben unverändert. Um die Menge der Änderungen überschaubar zu halten, werden nur die Anpassungen für eine einzige "Linie" gezeigt - die eigentliche Darstellung umfasst mehrere "Linien"; ebenso wurde das logProxy-Device namens logProxy1 bereits erzeugt. Zu jedem der folgenden Zustände gehört ein namensgleicher Screenshot für den rechten Rand der Darstellung, der die Auswirkungen zeigt.

Zustand1 (SVG) [am rechten Rand wird zwar der letzte Logwert als senkrechte Linie angezeigt, aber kein Balken gezeichnet]

#%FileLogDevice% 4:%DataDevice%.%DataReading%DayLast\x3a:0:
plot "<IN>" using 1:2 axes x1y1 title 'Logwerte' ls l1fill lw 1 with steps


Zustand2 (SVG + logProxy) [die Anzeige stimmt komplett mit der reinen SVG-Fassung überein]

#logProxy1 FileLog:%FileLogDevice%:4:%DataDevice%.%DataReading%DayLast\x3a:0:
plot "<IN>" using 1:2 axes x1y1 title 'Logwerte' ls l1fill lw 1 with steps


Zustand3 (SVG + logProxy + predict) [jetzt werden die Balken für die letzten Logwerte vollständig gezeichnet]

#logProxy1 FileLog:%FileLogDevice%,predict=86399:4:%DataDevice%.%DataReading%DayLast\x3a:0:
plot "<IN>" using 1:2 axes x1y1 title 'Logwerte' ls l1fill lw 1 with steps


Zustand4 (SVG + logProxy + predict + Momentanwert) [jetzt werden zusätzlich spezielle Readings, die normalerweise nicht geloggt werden, zusätzlich angezeigt]

#logProxy1 FileLog:%FileLogDevice%,predict=86399:4:%DataDevice%.%DataReading%DayLast\x3a:0:
#logProxy1 Func:current2Plot($from,$to,"%DataDevice%","%DataReading%Day")
plot "<IN>" using 1:2 axes x1y1 title 'Logwerte' ls l1fill lw 1 with steps
plot "<IN>" using 1:2 axes x1y1 title 'Momentanwert' ls l8fill lw 2.0 with points