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

  • Alexander Schulz
    @Dany

    Probiere mal mit einer größeren Log (mit Einträgen von mehreren Tagen). Wenn das nicht zufriedenstellend sein sollte, stelle am besten diese Frage bei http://forum.fhem.de/. Ich denke, hier liegt das Problem eher in 92_FileLog.pm als in den Plots.
  • Alexander Schulz
    @Dany

    Als ich jedoch die Log um folgendes ergänzt habe:

    2013-12-01_07:10:40 HandyDany present
    2013-12-02_03:10:40 HandyDany absent
    2013-12-02_05:10:40 HandyDany present
    2013-12-02_07:11:40 HandyDany absent
    2013-12-02_08:11:40 HandyDany absent
    2013-12-02_10:12:40 HandyDany present
    2013-12-02_12:14:40 HandyDany absent
    2013-12-02_20:14:40 HandyDany present
    2013-12-02_20:22:40 HandyDany absent
    2013-12-01_05:30:40 HandyMone absent
    2013-12-01_08:30:40 HandyMone present
    2013-12-02_05:30:40 HandyMone absent
    2013-12-02_08:30:40 HandyMone present
    2013-12-02_09:31:40 HandyMone absent
    2013-12-02_12:31:40 HandyMone absent
    2013-12-02_15:32:40 HandyMone present
    2013-12-02_17:34:40 HandyMone absent
    2013-12-02_21:34:40 HandyMone present
    2013-12-02_22:32:40 HandyMone absent
    sah die Grafik sinnvoller. Aber stabil ist das ganze irgendwie nicht. Kleine Änderungen führen manchmal zu einem ganz anderen Ergebnis. Ich verstehe nicht, warum sich hier die FileLog so komisch verhält.
  • Alexander Schulz
    @Dany
    Das ist in der Tat etwas rätselhaft. Die #FileLog-Definitionen sind aus meiner Sicht schon falsch. Wenn ich diese jedoch durch folgende ersetze:
    #FileLog 3:Dany:0:$fld[2]=~/present/?'1':'0'
    #FileLog 3:Mone:0:$fld[2]=~/present/?'1':'0'
    funktioniert das Ganze immer noch nicht wie es soll.
  • Dany
    Hey,
    ich habe auch massiv Probleme mit dem Text Plot. Ich hätte gerne einen wie den der Umwälzpumpe, aber irgendwo ist der Wurm drin...
    Meine Daten:
    2013-11-30_03:05:40 HandyMone present
    2013-11-30_03:05:42 HandyDany absent
    2013-11-30_03:06:13 HandyMone present
    2013-11-30_03:06:46 HandyMone present
    2013-11-30_03:06:49 HandyDany absent
    2013-11-30_03:07:19 HandyMone present
    2013-11-30_03:07:52 HandyMone present
    2013-11-30_03:07:55 HandyDany absent

    Mein Diagramm:
    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 '<TL>'
    set ytics ("absent" 0, "present" 1)
    set y2tics
    set grid ytics
    set ylabel ""
    set y2label ""
    set yrange [-0.1:1.1]

    #FileLog "0":HandyDany.*::
    #FileLog "0":HandyMone.*::

    plot "<IN>" using 1:2 axes x1y1 title 'Dany' ls l0 lw 2 with steps,\
    "<IN>" using 1:2 axes x1y1 title 'Mone' ls l1 lw 2 with steps

    was mache ich nur falsch ??
  • Alexander Schulz
    @Dilli
    Hallo!
    Ich habe von mir verwendete gplot-Datei im Artikel hinzugefügt. In Deinem Fall müsste diese leicht modifiziert werden (bei mir sehen Log-Einträge leicht anders aus:
    2013-04-03_19:27:20 CUL_HM_HM_LC_SW1_PL2_1ECEA2 level: 100 %
    2013-04-03_19:27:20 CUL_HM_HM_LC_SW1_PL2_1ECEA2 deviceMsg: on (to broadcast)
    2013-04-03_19:27:20 CUL_HM_HM_LC_SW1_PL2_1ECEA2 on
    2013-04-03_19:28:03 CUL_HM_HM_LC_SW1_PL2_1ECEA2 set_toggle
    2013-04-03_19:28:04 CUL_HM_HM_LC_SW1_PL2_1ECEA2 level: 0 %
    2013-04-03_19:28:04 CUL_HM_HM_LC_SW1_PL2_1ECEA2 deviceMsg: off (to HMLAN1)
    2013-04-03_19:28:04 CUL_HM_HM_LC_SW1_PL2_1ECEA2 off
    )
    Also, die Zeile
    #FileLog 3::0:$fld[2]=~"on"?1:0
    muss dann so aussehen:
    #FileLog 3::0:$fld[2]=~"an"?1:0
    Probiere mal aus!
    Grüße,

    Alexander
  • Dilli
    Hi,
    ich versuche schon seit einer geraumen Zeit so ein Diagramm (Zirkulationspumpe) hinzubekommen. Aber leider noch ohne Erfolg.
    Nach Anschluss von einem HM 3-Schließer Kontakt bekomme ich eine Log-Datei die so aussieht:

    2013-10-06_07:07:45 K_WP_Sole contact: an (to HMLAN1)
    2013-10-06_07:28:55 K_WP_Sole aus
    2013-10-06_07:28:55 K_WP_Sole contact: aus (to HMLAN1)
    2013-10-06_10:27:20 K_WP_Sole an
    2013-10-06_10:27:20 K_WP_Sole contact: an (to HMLAN1)
    2013-10-06_10:44:27 K_WP_Sole aus
    2013-10-06_10:44:27 K_WP_Sole contact: aus (to HMLAN1)
    2013-10-06_17:10:31 K_WP_Sole an
    2013-10-06_17:10:31 K_WP_Sole contact: an (to HMLAN1)
    2013-10-06_17:25:38 K_WP_Sole aus
    2013-10-06_17:25:38 K_WP_Sole contact: aus (to HMLAN1)

    Bekomme aber kein vernünftigen Plot hin.

    Kannst du mir helfen?