Kurze Frage zum Thema Logging.
Ich habe zwei Devices (Wechselrichter) und alle Mitteilungen des jeweiligen Devices werden in ein jeweiliges Logfile geschrieben - wie üblich - also zwei separate Logfiles. Eines pro Wechselrichter.
Ist es möglich einige wenige der Logfileeinträge aus beiden Device Logfiles auch noch zusätzlich in ein drittes Logfile zu schreiben?
Hintergrund:
In diesem dritten (parallelen) Logfile möchte ich von den beiden Geräten gleichgeartete Werte loggen (produzierte Leistung vom jeweiligen Wechselrichter) und daraus - aus der Summe beider Werte - einen svg Plot generieren.
Ist das in der Form möglich und sinnvoll - oder gibt es einen besseren Weg?
Du kannst Werte aus beliebigen Devices in ein Logfile schreiben.
Du kannst aber auch aus beliebigen Logfiles ein SVG Plot machen ;) insofern ist deine Idee aus meiner Sicht nicht sinnvoll :)
Einfach in der SVG Definition aus der ersten Klappliste das Logfile und aus der zweiten Klappliste den Wert auswählen. 8)
Danke erstmal für die schnelle Antwort.
Ich bin nicht sicher, ob ich Dich richtig verstehe.
Einen kombinierten SVG Plot aus den zwei Device Logfiles habe ich hin bekommen - so wie Du es vermutlich gemeint hast.
Das jeweilige Logfile ausgewählt und dann den jeweiligen Wert des jeweiligen Logfiles.
Zwei schöne Plots übereinander - siehe Bild.
Die Frage die bleibt ist, wie ich jetzt eine weitere Linie als Summe der Einzelwerte aus den beiden Logfiles hin bekomme.
Dafür sehe ich noch keine Lösung.
Gibt es da eine denn der Summenwert über beide Devices steht ja in keinem der beiden Logfiles drin und wie ich direkt im SVG Editor die Summe bilden kann erschließt sich mir nicht?
Ungetestet, da ich nicht zuhause bin: sowas sollte doch mit logproxy funktionieren?
Man müsste doch nur $data{currval1} und $data{currval2} addieren?
ich habe dazu den alten Thread gefunden. logProxy ist da auch die Idee. Werte im SVG direkt zu addieren funktioniert nach Rudis Aussage nur wenn sie in einem Event stehen. Oder eben die Werte über userReadings zusätzlich in eins der Logs schreiben.
Den Weg bin ich jetzt gegangen. Ein zusätzliches userReadings, in dem die Summenwerte der beiden Inverter addiert werden im Inverter EZ1_inverter_HWR.
Damit steht das in dem dazugehörigen Logfile drin und ich kann es für den Plot verwenden.
Das mit LogProxy sollte laut Doku auch funktionieren - da müsste ich mich aber erstmal länger mit beschäftigen.
Danke so weit für Eure Tipps.
Nun ist allerdings ein weiteres "Problem" aufgetaucht.
Da die LogFiles sehr schnell sehr groß werden und sich das auf das Antwortzeitverhalten auswirkt dachte ich mir - ein Logfile pro Tag reicht doch auch.
Ich habe also in dem Logfile Device über die Namenskonvention "eingestellt", dass jeden Tag ein neues Logfile gestartet wird.
Das funktioniert auch --> FileLog_EZ1_inverter_HWR-2025-03-06 beispielsweise.
Allerdings kommt das SVG Plot-Device damit irgendwie nicht zurecht. Es liest aus diesen neuen LogFiles mit Datum am Ende keine Werte aus.
Ich konnte auch im SVG Editor keine Möglichkeit finden diesen sich verändernden LogFile Namen irgendwo anzugeben.
Etwa in dieser Form: FileLog_EZ1_inverter_HWR-%Y-%m-%d oder vielleicht so: FileLog_EZ1_inverter_HWR-%Y-%m-%d.log
Auswählen kann ich immer nur das entsprechende Device. Da hat sich der Name (des Devices) allerdings nicht geändert.
Der Name des Logfiles schon. Gestern FileLog_EZ1_inverter_HWR-2025-03-06.log und heute FileLog_EZ1_inverter_HWR-2025-03-07.log
In der DEF Sektion des SVG Devices steht hinten ....:CURRENT was nach meinem Verständnis auf das aktuelle Logfile Bezug nehmen müsste.
Das wäre dann für heute ja FileLog_EZ1_inverter_HWR-2025-03-07.log
Irgendwei klappt das aber nicht.
Habt Ihr dazu eine Idee oder einen Tipp?
Hast Du nach der Umstellung auf Tageslogs Dein FHEM schonmal neu gestartet?
Grundsätzlich ist es SVG wurscht, ob es sich um Tages-, Wochen- oder Monatslogs handelt, es wird immer das Logdevice selbst angegeben, kein Dateiname.
Und CURRENT kannst Du getrost durch HISTORY ersetzen, das wird aber auf das Ergebnis wenig Auswirkung haben. Bei CURRENT geht es nicht darum, welche Logdatei verwendet wird.
Nein. FHEM habe ich danach nicht neu gestartet.
Ich habe das allerdings auch nur für das eine LogFile umgestellt und nicht global.
Einen Neustart werde ich heute Abend mal durchführen - oder reicht da auch ein rereadcfg ?
Andere Frage: Wofür stehet denn das CURRENT oder HISTORY ?
Ich dachte immer CURRENT und HISTORY haben nur bei dblog Bedeutung?
Also ein shutdown / Neustart hat auch keine Veränderung gebracht.
Hier mal das Listing des Log-Devices:
Internals:
DEF %L/FileLog_EZ1_inverter_HWR-%Y-%m-%d.log EZ1_inverter_HWR
FD 171
FUUID 67b1d50c-f33f-5fc3-af3f-279da3f5b2310d97
NAME FileLog_EZ1_inverter_HWR
NOTIFYDEV EZ1_inverter_HWR
NR 566
NTFY_ORDER 50-FileLog_EZ1_inverter_HWR
REGEXP EZ1_inverter_HWR
STATE active
TYPE FileLog
currentlogfile ./log/FileLog_EZ1_inverter_HWR-2025-03-08.log
logfile %L/FileLog_EZ1_inverter_HWR-%Y-%m-%d.log
READINGS:
2025-03-08 10:07:50 linesInTheFile 5719
pos:
Attributes:
group LogFiles
nrarchive 5
room Solar
sortby 10
Und hier das des SVG Plots:
Internals:
DEF FileLog_EZ1_inverter_HWR:SVG_FileLog_EZ1_inverter_HWR_1:CURRENT
FUUID 67b1d527-f33f-5fc3-d50d-9d26e1b413272204
GPLOTFILE SVG_FileLog_EZ1_inverter_HWR_1
LOGDEVICE FileLog_EZ1_inverter_HWR
LOGFILE CURRENT
NAME SVG_FileLog_EZ1_inverter_HWR_1
NR 567
STATE initialized
TYPE SVG
Attributes:
captionPos auto
fixedrange 12hours
group Plots_Diagramme
plotmode SVG
plotsize 600,450
room Solar
sortby 10
Seltsamerweise zeigt der Plot aber nur die Graphen des zweiten Inverters EZ1_inverter_GaHa an - das sind im Editor die Zeilen 4 - 6
Die Graphen die auf dem Output von Device EZ1_inverter_HWR (dem Logfile dieses Devices) beruhen tauchen nicht auf.
Das wären die Zeilen 1 - 3 und Zeile 7 im Editor.
Hat da jemand eine Erklärung oder Idee?
kannst Du bitte mal den Inhalt vom Gplotfile posten?
Den bekommst Du wenn Du hinter dem Internal GPLOTFILE auf den Link klickst ;)
Hier der Inhalt von GPLOTFILE
# Created by FHEM/98_SVG.pm, 2025-03-08 10:36:12
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 'Solar Panels Energy Production'
set ytics ("800W" 900, "600W" 800 , "400W" 700, "200W" 600, "0W" 500, "800W" 400, "600W" 300 , "400W" 200, "200W" 100, "0W" 0)
set y2tics ("800W" 900, "600W" 800 , "400W" 700, "200W" 600, "0W" 500, "800W" 400, "600W" 300 , "400W" 200, "200W" 100, "0W" 0)
set grid ytics y2tics
set ylabel "Power HWR"
set y2label "Power GaHa"
set yrange [0:1000]
set y2range [0:1000]
#FileLog_EZ1_inverter_HWR 4:EZ1_inverter_HWR.total_power\x3a:0:(0.5*$fld[3])
#FileLog_EZ1_inverter_HWR 4:EZ1_inverter_HWR.p1\x3a:0:(0.5*$fld[3])
#FileLog_EZ1_inverter_HWR 4:EZ1_inverter_HWR.p2\x3a:0:(0.5*$fld[3])
#FileLog_EZ1_inverter_GaHa 4:EZ1_inverter_GaHa.total_power\x3a:0:(0.5*$fld[3])+500
#FileLog_EZ1_inverter_GaHa 4:EZ1_inverter_GaHa.Panel_1\x3a:0:(0.5*$fld[3])+500
#FileLog_EZ1_inverter_GaHa 4:EZ1_inverter_GaHa.Panel_2\x3a:0:(0.5*$fld[3])+500
#FileLog_EZ1_inverter_HWR 4:EZ1_inverter_HWR.total_power_all_inverters\x3a:0:(0.5*$fld[3])
plot "<IN>" using 1:2 axes x1y1 title 'Total Power HWR' ls l5 lw 1 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Panel 1' ls l2 lw 0.5 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Panel 2' ls l1 lw 0.5 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Total Power GaHa' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Panel 1' ls l6 lw 0.5 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Panel 2' ls l2 lw 0.5 with lines,\
"<IN>" using 1:2 axes x1y1 title 'TP HWR&GaHa' ls l3 lw 1.5 with lines
Im Anhang noch einen Ansicht der Logfile Devices und Inhalt der Logfiles
Neue Erkenntnis.
Es scheint so zu sein, dass FHEM für die Erstellung des Plots für den Inverter EZ1_inverter_HWR (der mit den täglich wechselnden Logfiles) nur die Daten aus dem Logfile des Vortages für die Erstellung des Plots nimmt und anzeigt - warum auch immer.
Aus heutiger Sicht also FileLog_EZ1_inverter_HWR-2025-03-07
Für den Inverter EZ1_inverter_GaHa (der mit nur einem fortlaufenden Logfile) wird der Plot komplett angezeigt - heute, gestern vorgestern etc.
Siehe hierzu das Bild im Anhang.
Bei täglich neuen Logfiles müsstest du vermutlich das Attribut (im Filelog) setzen:
createGluedFile
Falls gesetzt (1), und im SVG-Plot ein Zeitbereich abgefragt wird,
was in mehreren Logdateien gespeichert ist, dann wird für die
Anfrage eine temporäre Datei mit dem Inhalt aller Dateien erzeugt.
Gruß Ralf
Danke @RalfRog und alle anderen Tipp-Geber.
Bei rollierenden Logs ist das Attribut CreateGluedFile = 1 im Log-Device die Lösung.
Zwischenzeitlich habe ich darauf auch noch einen Hinweis von Boris aus 2015 gefunden. SVG: Darstellungsfehler bei rollierenden Logs und Plot mit Monatswechsel (https://forum.fhem.de/index.php?topic=41791.msg340417#msg340417)
Damit wäre das Problem auch bei meinen täglich rollierenden Logs gelöst.
Nachdem alle zwischenzeitlich aufgetretenen "Probleme" mit den rollierenden LogFiles und dem Berücksichtigen der Summe der Werte aus 2 Devises durch Eure Tipps gelöst werden konnten möchte ich noch einmal auf die ursprünfliche Frage zurück kommen:
Ist es (überhaupt) möglich dieselben Daten aus/von einem Device in zwei eigenständige LogFiles zu schreiben.
Szenario:
Inverter EZ1_inverter_HWR schreibt alle zu loggenden Daten in das LogFile FileLog_EZ1_inverter_HWR
Dieses Logfile wird sehr schnell sehr groß und damit für SVG zum Performancekiller.
Ist es möglich zusätzlich noch die Daten für die augenblickliche Stromproduktion pro Solarpanel (hier Readings p1 und Readings p2) in ein zweites LogFile zu schreiben, in dem nur diese beiden Werte dokumentiert werden, um dieses sehr viel kleiner LogFile dann für den SVG Plot zu verwenden.
Das würde bedeuten, dass FHEM dieselben Werte in 2 verschiedene LogFiles schreiben würde/müsste.
Kann FHEM das ?
Ja klar. Jedes LogFile ist doch eine Definition und welche Events Du in welches LogFile schreibst steht im regExp.
Du kannst beliebig oft ein neues logFile definieren und die gleichen werte reinschreiben. Über set xxx addRegexpPart geht das sogar Menügeführt :)
Die Antwort stand doch quasi schon in #1 ;)
Hm. Ich hatte Deinen Kommentar etwas anders verstanden
ZitatDu kannst Werte aus beliebigen Devices in ein Logfile schreiben.
Du kannst aber auch aus beliebigen Logfiles ein SVG Plot machen ;) insofern ist deine Idee aus meiner Sicht nicht sinnvoll :)
Werte aus beliebigen Devices in ein "zentrales" Logfile - ok, klar geht.
Aus beliebigen Logfiles einen "kombinierten" SVG Plot - ok, habe ich hin bekommen. Ein kombinierter SVG Plot aus den Logs der beiden Inverter.
Dasselbe "Datum" in zwei unterschiedliche Logfiles zu schreiben - es also zweimal zu loggen - das habe ich allerdings noch nicht geschafft.
Ich habe das mit den entsprechenden regExp menügeführt in den beiden Logfiles angegeben.
In beiden LogDevices stand also dieselbe regExp drin und referenzierte auf dasselbe Inverter Device und dasselbe userReadings in dem Device.
Der bzw. die Werte wurden aber nur in eines der beiden Logfiles geschrieben.
Muss man da noch auf etwas Besonderes achten?
Vielleicht sagt ein Beispiel mehr als viele Worte? ;)
defmod dummy1 dummy
attr dummy1 room Test
attr dummy1 setExtensionsEvent 1
attr dummy1 setList on off
defmod dummy1log1 FileLog ./log/dummy1log1.log dummy1
attr dummy1log1 room Test
defmod dummy1log2 FileLog ./log/dummy1log2.log dummy1
attr dummy1log2 room Test
Wenn man den dummy ein und ausschaltet steht es anschließend in beiden Logs.
Zitat von: Spook112 am 11 März 2025, 09:29:01Der bzw. die Werte wurden aber nur in eines der beiden Logfiles geschrieben.
Ein list Deiner Logfiles wäre toll, dann muss Otto nicht so raten. :(
Nachdem ich jetzt endlich dazu gekommen bin es noch einmal auszuprobieren.
Es funktioniert wie Otto schon beschrieben hatte.
Da muss ich wohl vorher etwas falsch gemacht haben.
Danke noch einmal für die Hilfe.