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
Hat keiner ne Idee? Fehlt noch irgendwas an Info?
@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?
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.
Zitat von: OdfFhem am 02 September 2020, 17:38:51
Hast Du [...] Lust, eine Änderung auszuprobieren?
Mitles! (logProxy fehlt mir noch in meiner "Sammlung"...).
@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
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).
@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.
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).
@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 ...
Juhu, du hast recht das wars :
$ret .= "#plotCurrent: $device:$reading\n";
wird zu
#$ret .= "#plotCurrent: $device:$reading\n";
So sieht jetzt mein Chart aus:
@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?
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.
gibts evl ne Möglichkeit die Balken zu stapeln?
Würde da gerne noch mit "EigenverbrauchPV" mit einblenden.
@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
Danke!
Das sieht schon mal sehr gut aufbereitet aus. Meine Tendenz wäre, das mehr oder weniger unverändert in den SVG-Artikel reinzubasteln, und dann am Ende einen Link zu dem logProxy-Artikel zu machen, wo die ganzen anderen Varianten dann zu finden wären.
Mal schauen, ob ich am WE dazu komme und das dann auch gleich in dem Stil auf die DBLog-Variante erweitern kann...
Zitat von: andi11 am 04 September 2020, 08:48:16
gibts evl ne Möglichkeit die Balken zu stapeln?
Würde da gerne noch mit "EigenverbrauchPV" mit einblenden.
Hat da jemand ne Idee zu?
jein...
Lösungsansätze:
- gleich was passendes mitloggen: https://forum.fhem.de/index.php/topic,112159.0.html
- Da ist auch erwähnt, dass es mit logProxy gehen sollte (ich habe aber noch keine Idee, wie)
- Da du DBLog nutzt, müßte es auch über eine passende SQL-Abfrage (über DbRep?) gehen. Ist aber auch nicht mein Spezialgebiet ::) .
Für die Varianten 2 und 3 würde ich empfehlen, ggf. entweder in dem verlinkten Thread nochmal um ein Beispiel zu bitten bzw. dann (nach Recherche zu DbRep, beginnend hier: https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten) ggf. einen neuen Thread in dem Forenbereich zu DbRep zu starten.
vielen Dank, du hast mich auf die passende Idee gebracht.
"Ich kann doch einfach hinter den Balken einen Balken zeichnen der um die Differenz höher ist.
# Created by FHEM/98_SVG.pm, 2020-01-01 09:40:04
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 'Gesamtstromverbrauch Jahresvergleich'
set ytics
set y2tics
set grid y2tics
set ylabel "Kwh"
set y2label "Kwh Jahr"
#lp DbLog:logdb,offset=-60*60*24*30:Stromverbrauch_Zaehler1_EHZ:VerbrauchLastMonth
#lp DbLog:logdb,offset=60*60*24*334:Stromverbrauch_Zaehler1_EHZ:VerbrauchLastMonth
#lp Func:current2Plot($from,$to,"Stromverbrauch_Zaehler1_EHZ","ForecastAktMonth")
#lp Func:current2Plot($from,$to,"DUMMY_PV","Forecasttotal-all-getMonth")
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 x1y2 title 'Forecast' ls l2fill lw 1 with bars,\
"<IN>" using 1:2 axes x1y2 title 'ForecastGesamt' ls l4fill lw 1 with bars
dabei ist Forecasttotal-all-getMonth der Wert von ForecastAktmonth + "Dem Balken den ich oben drauf haben will"
In meinem Fall:
Forecast => Stromverbrauch inkl. Eigenverbrauch der PV, also das was ich aus dem Netz beziehe
Forecast Gesamt => Stromverbrauch ohne die PV Anlage