Drucken
Kategorie: FHEM
Zugriffe: 79340

Wie visualisiert man mit FHEM eine Logdatei in Form eines Diagramms? Nun, am einfachsten nimmt man eine andere ähnliche Definition aus dem fhem.cfg, kopiert diese und passt sie an ;-)

Aber Spaß beiseite...
Für ein Diagram (Plot) mit FHEM wird zumindest ein Log-Objekt benötigt. Dieses ist normalerweise mit einem Aktor/Sensor-Objekt verbunden. Der Zustand dieses Objektes wird damit automatisch überwacht und in der Logdatei festgehalten. Als nächtes wird das Attribut 'logtype' notwendig. Dort wird der Plot-Art definiert. Zu jeder existierenden Art gehört eine .gplot-Datei in Verzeichnis fhem/www/gplot. So ist es möglich, die bestehenden Plot-Arten anzupassen oder auch seine eigene, neue zu erstellen.

Mit diesen Angaben kann FHEM zu dem Log-Objekt bereits eine Diagramm-Grafik generieren (Logobjekt auswählen und 'Plot'-Link klicken). Noch besser wird es mit einem Weblink. Dieser bietet zusätzliche Möglichkeiten (wie Änderung des Zeitabschnitts und der Vergrößerung) und kann als Diagramm in Räumen (s. room-Attribut) platziert werden. Der Weblink kann von FHEM automatisch erstellt werden ('Convert to weblink' erstellt entsprechende Einträge in fhem.cfg. Speichern ('Save config') nicht vergessen!), oder man gibt die Definition direkt in fhem.cfg an.

So könnte eine Definition aussehen (ein Dummy-Objekt, ein damit verbundener Log (%Y ist ein Platzhalter für das aktuelle Jahr) und ein Weblink):

...
define Test dummy
define FileLog_Test FileLog /var/InternerSpeicher/fhem/log/Test-%Y.log Test
attr FileLog_Test logtype temp4:Plot,text
attr FileLog_Test room Test
define wlTest weblink fileplot FileLog_Test:temp4:CURRENT
attr wlTest room Test
...

 

Auch fremde (nicht unter FHEM erfasste) Daten können als Diagramm angezeigt werden. Dazu wird ein fake-Log-Objekt definiert. Der korrekte Dateiname ist dabei natürlich wichtig. Der Rest geschieht wie oben beschrieben.

...
define FileLog_extern FileLog /var/InternerSpeicher/fhem/log/Extern.log fakelog
...

 

Es ist auch möglich, mehrere Diagramme in einer Grafik darzustellen. Das muss entsprechend in der .gplot-Datei definiert werden. Die Daten können jedoch nur aus einer einzelnen Log-Datei stammen. Daher muss diese Daten für alle Diagrammlinien enthalten.

Weiter führende Informationen sind z.B. hier und hier zu finden.


Beispiele für verschiedene Diagramme:

 

... und noch Beispiele für die Datensätze in einer Logdatei:

Hier sind daten von drei 1-wire Temperatursensoren zusammengefasst (Quelle für die Grafik mit der Überschrift "Fernwärme/Heizung"):

...
2013-08-06_20:15:19 EG_HA_OWTS21.Fernwaerme_Vorlauf_Heizung T: 39.13 °C ▾
2013-08-06_20:15:31 EG_HA_OWTS22.Fernwaerme_Vorlauf_Warmwasser T: 63.75 °C ▾
2013-08-06_20:19:54 EG_HA_OWTS23.Fernwaerme_Rueckflauf T: 40.00 °C ▾
2013-08-06_20:20:19 EG_HA_OWTS21.Fernwaerme_Vorlauf_Heizung T: 39.13 °C ▾
2013-08-06_20:20:31 EG_HA_OWTS22.Fernwaerme_Vorlauf_Warmwasser T: 63.63 °C ▾
2013-08-06_20:24:54 EG_HA_OWTS23.Fernwaerme_Rueckflauf T: 39.63 °C ▾
2013-08-06_20:25:19 EG_HA_OWTS21.Fernwaerme_Vorlauf_Heizung T: 39.13 °C ▾
2013-08-06_20:25:31 EG_HA_OWTS22.Fernwaerme_Vorlauf_Warmwasser T: 63.50 °C ▾
2013-08-06_20:29:54 EG_HA_OWTS23.Fernwaerme_Rueckflauf T: 39.50 °C ▾
...

 

Und so kommen Daten von einem HomeMatic Termostat:

...
2013-08-06_20:19:42 nn_th_1 T: 27.2 H: 55
2013-08-06_20:19:42 nn_th_1 measured-temp: 27.2
2013-08-06_20:19:42 nn_th_1 humidity: 55
2013-08-06_20:22:42 nn_th_1 T: 27.1 H: 55
2013-08-06_20:22:42 nn_th_1 measured-temp: 27.1
2013-08-06_20:22:42 nn_th_1 humidity: 55
2013-08-06_20:25:31 nn_th_1 T: 27.1 H: 55
2013-08-06_20:25:31 nn_th_1 measured-temp: 27.1
2013-08-06_20:25:31 nn_th_1 humidity: 55
...

 
Der Format der Daten kann sehr unterschiedlich ausfallen, für eine Visualisierung muss natürlich die .gplot-Datei darauf abgestimmt sein.

 

Beispiel für .gplot Datei mit drei Linien:

#
# Eigene Definition für 3 Temperaturlinien in einem Graph (Heizung)
#
set terminal png transparent size  crop
set output '.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set yrange [10:90]
set y2range [10:90]
set title 'Fernwaerme / Heizung'
set y2label "Temperature in C"
#FileLog 4:EG_HA_OWTS21.Fernwaerme_Vorlauf_Heizung:0:
#FileLog 4:EG_HA_OWTS22.Fernwaerme_Vorlauf_Warmwasser:0:
#FileLog 4:EG_HA_OWTS23.Fernwaerme_Rueckflauf:0:
plot \
  "< awk '/EG_HA_OWTS21\.Fernwaerme_Vorlauf_Heizung/ {print $1, $4}' "\
     using 1:2 axes x1y2 title 'Vorlauf Heizung' with lines lw 2,\
  "< awk '/EG_HA_OWTS22\.Fernwaerme_Vorlauf_Warmwasser/ {print $1, $4}' "\
     using 1:2 axes x1y2 title 'Vorlauf Warmwasser' with lines lw 2,\
  "< awk '/EG_HA_OWTS23\.Fernwaerme_Rueckflauf/ {print $1, $4}' "\
     using 1:2 axes x1y2 title 'Rueckflauf' with lines lw 2\
 

 

Update:

Auf Nachfrage, hier die Definition für das Diagramm der Zirkulationspumpe:

fhem.cfg:

...
define FileLog_EG_HA_SA01.Zirkulationspumpe FileLog /var/InternerSpeicher/fhem/log/EG_HA_SA01.Zirkulationspumpe-%Y.log EG_HA_SA01.Zirkulationspumpe
attr FileLog_EG_HA_SA01.Zirkulationspumpe group _Logs
attr FileLog_EG_HA_SA01.Zirkulationspumpe logtype mySwitch:Plot,text
attr FileLog_EG_HA_SA01.Zirkulationspumpe room 9.11_Heizung
define 0.wlA_Zirkulationspumpe SVG FileLog_EG_HA_SA01.Zirkulationspumpe:mySwitch:CURRENT
attr 0.wlA_Zirkulationspumpe room 9.11_Heizung ...

 

und die dazugehörende Plot-Datei (mySwitch.gplot, übernommen aus der entsprechender fs20-Plot-Definition):

############################
# Display the on and off values off 
############################ set terminal png transparent size crop set output '.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title '' set ytics ("Aus" 0, "An" 1) set y2tics ("Aus" 0, "An" 1) set yrange [-0.1:1.1] set y2range [-0.1:1.1] set ylabel "Status" set y2label "Status" #FileLog 3::0:$fld[2]=~"on"?1:0 plot "< awk '{print $1, $3~/on/? 1 : 0; }' "\ using 1:2 axes x1y2 notitle ls l8fill lw 2 with steps

 

Diese und andere meine Plot-Dateien bei GitHub: https://github.com/hexenmeister/MyFHEM/tree/master/www/gplot

 

Kommentare (6)

Cancel or