Bei vielen Log-Einträgen von verschiedenen Geräten möchte man sicherlich eine Grafik zu bestimmten Zuständen sehen.
Diese Grafiken, in Fhem Plots genannt, veranschaulichen dann z.B. Temperaturstände oder Ventilpositionen u.a..
Die hier beschriebenen Informationen sind sicherlich nicht vollständig. Man sollte sich die Artikel in der http://www.fhemwiki.de zusätzlich ansehen.
Am einfachsten lassen sich Plots aus Einträgen der Log-Dateien der einzelnen Geräte erstellen.
Dazu ändert man im jew. FileLog-Gerät das Attribut „logtype“ und fügt diesem die Parameter „GPLOT-Datei“ und „Plot“ hinzu.
Beispiel:
attr <FileLog_GERÄTE_NAME> logtype <GPLOT_NAME>:Plot,text
GPlot-Dateien befinden sich im Verzeichnis „www/gplot“. Hier sind schon viele Dateien erstellt.
Sie steuern das Aussehen der Grafik und können manuell oder über die Web-gui Bearbeitet werden.
Wenn man eine Datei anpassen möchte, kopiert man diese und fügt ihr am Anfang des Dateinamen ein „my“ hinzu. Diese Schreibweise verhindert, dass bei Updates von fhem diese Dateien überschrieben werden.
Nun kann man eine Grafik erstellen.
define <GRAFIK_GERÄTE_NAME> SVG FileLog:<GPLOT_NAME>:HISTORY
Verwendet man eine Datenbank zum loggen, muss die Grafik wie folgt erstellt werden:
define <GRAFIK_GERÄTE_NAME> SVG <NAME_DES_DBLOG_GERÄTES>:<GPLOT_NAME>:HISTORY
Dadurch weißt man fhem an die Grafik aufgrund von Einträgen aus einer Datenbank zu generieren.
Zusätzlich müssen die GPlot-Dateien angepasst werden. Diese holen sich ja die Einträge normalerweise aus Log-Dateien.
Grundsätzlich kann man die Dateien auch nur erweitern, damit man z.B. eine Grafik aus Log-Dateien und eine aus Datenbank-Einträgen erstellen kann.
Wenn man beide Varianten behalten möchte, fügt man die „#DbLog“ Zeilen einfach hinzu.
Hier ein Beispiel aus der http://www.fhemwiki.de:
#FileLog 4:W_HEIZUNG.temperature\x3a:0: #FileLog 4:W_HEIZUNG.desiredTemperature:0: #FileLog 4:W_HEIZUNG.valveposition\x3a:0:
AUFBAU:
#FileLog <WERTEFELD>:<GERÄTE_NAME>.<READING>[\<SONDERZEICHEN>]:0:
Daraus wird dann:
#DbLog W_HEIZUNG:temperature:0: #DbLog W_HEIZUNG:desiredTemperature:0: #DbLog W_HEIZUNG:valveposition:0:
AUFBAU:
#FileLog <GERÄTE_NAME>.<READING>:0:
Wertefelder sind Nummernangaben, welche beschreiben an welcher Position sich der geloggte Wert in einem Log-Eintrag befindet.
Beispiel (Quelle: http://www.fhemwiki.de):
2013-11-14_17:32:00 2013-Nov-14 17:32:00 17.9 5.8 4.9 58 94 0.0 0.0 N 5.8 572.91 1015.200 ----1. Feld-------- --2. Feld-- --3.---- -4.- -5. -6. 7. 8. -9. 10. 11 12 --13.- --14.--- ^ ^ Diese Werte werden ausgewertet . --| --|
Durch setzen des folgenden Attributes werden SVG-Plots gecached wenn ihr Enddatum erreicht ist.
attr WEB SVGcache 1
Hier werden eigene und angepasste gplot Dateien dargestellt.
# SYSMON # # Anzeige: system load # # define wl_sysmon_load SVG myDbLog:SMLoadDB:HISTORY # attr wl_sysmon_load label "Load Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}" # attr wl_sysmon_load plotfunction sysmon # attr wl_sysmon_load room RaspberryPi # 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 '<L1>' set ytics set y2tics set grid ytics y2tics set ylabel "Last 1 Minute" set y2label "Last 5 / 15 Minuten" set yrange [0.00:1.0] set y2range [0.00:3.65] #logdb sysmon:loadavg:::$val=~s/([\d.]*).[\d.]*.[\d.]*/$1/eg #logdb sysmon:loadavg:::$val=~s/[\d.]*.([\d.]*).[\d.]*/$1/eg #logdb sysmon:loadavg:::$val=~s/[\d.]*.[\d.]*.([\d.]*)/$1/eg plot \ "< awk '/load avg:/ {print $1, $4}' <IN>" \ using 1:2 ls l0fill axes x1y1 title '1 min' lw 1 with lines \ "< awk '/load avg5:/ {print $1, $4}' <IN>" \ using 1:2 ls l1 axes x1y2 title '5 min' lw 2 with lines \ "< awk '/load avg15:/ {print $1, $4}' <IN>" \ using 1:2 ls l2 axes x1y2 title '15 min' lw 2 with lines
# SYSMON # # Network-Traffic ETH0 (DbLog) # 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 '<L1>' set ylabel "Traffic RX / TX" set y2label "Traffic Total" set grid set ytics set y2tics set format y "%.2f" set format y2 "%.2f" #logdb sysmon:eth0_diff:::$val=~s/^RX..([\d.]*).*/$1/eg #logdb sysmon:eth0_diff:::$val=~s/.*TX..([\d.]*).*/$1/eg #logdb sysmon:eth0_diff:::$val=~s/.*Total..([\d.]*).*/$1/eg plot \ "< awk '/eth0_diff:/ {print $1, $4}' <IN>" \ using 1:2 ls l0 axes x1y1 title 'RX' lw 1 with lines \ "< awk '/eth0_diff:/ {print $1, $4}' <IN>" \ using 1:2 ls l1 axes x1y1 title 'TX' lw 1 with lines \ "< awk '/eth0_diff:/ {print $1, $4}' <IN>" \ using 1:2 ls l2 axes x1y2 title 'Total' lw 1 with lines \
# SYSMON # # Visualisierung: RAM-Nutzung # 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 '<L1>' set ylabel "Ram Total / Free (MB)" set y2label "Ram Used (MB)" set grid set ytics set y2tics set format y "%.2f" set format y2 "%.2f" #logdb sysmon:ram:::$val=~s/^Total..([\d.]*).*/$1/eg #logdb sysmon:ram:::$val=~s/.*Used..([\d.]*).*/$1/eg #logdb sysmon:ram:::$val=~s/.*Free..([\d.]*).*/$1/eg plot \ "< awk '/ram:/ {print $1, $4}' <IN>" \ using 1:2 ls l0 axes x1y1 title 'Total' lw 1 with lines \ "< awk '/ram:/ {print $1, $4}' <IN>" \ using 1:2 ls l1 axes x1y2 title 'Used' lw 1 with lines \ "< awk '/ram:/ {print $1, $4}' <IN>" \ using 1:2 ls l2 axes x1y1 title 'Free' lw 1 with lines \
# Created by FHEM/98_SVG.pm, 2016-02-27 17:43:44 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 '<L1>' set ytics set y2tics set grid y2tics set ylabel "" set y2label "Nutzung MB" set y2range [0:6000] #logdb sysmon:fs_opt:::$val=~s/^Total..([\d]*).*/$1/eg #logdb sysmon:fs_opt:::$val=~s/.*Used..([\d]*).*/$1/eg plot "< awk '/FS opt:/ {print $1, $4}' <IN>" \ using 1:2 axes x1y2 title 'Total' ls l0 lw 2 with steps,\ "< awk '/FS opt:/ {print $1, $4}' <IN>" \ using 1:2 axes x1y2 title 'Verwendet MB' ls l2fill lw 0.5 with lines
# Created by FHEM/98_SVG.pm, 2016-02-27 17:30:55 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 '<L1>' set ytics set y2tics set grid y2tics set ylabel "" set y2label "Nutzung MB" set y2range [0:6000] #logdb sysmon:fs_root:::$val=~s/^Total..([\d]*).*/$1/eg #logdb sysmon:fs_root:::$val=~s/.*Used..([\d]*).*/$1/eg plot "< awk '/FS root:/ {print $1, $4}' <IN>" \ using 1:2 axes x1y2 title 'Total' ls l0 lw 2 with steps,\ "< awk '/FS root:/ {print $1, $4}' <IN>" \ using 1:2 axes x1y2 title 'Verwendet MB' ls l2fill lw 0.5 with steps
# Created by FHEM/98_SVG.pm, 2016-02-27 15:52:10 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 '<L1>' set ytics set y2tics set grid y2tics set ylabel "" set y2label "Traffic in MB" #logdb sysmon:eth0_diff:::$val=~s/^RX..([\d.]*).*/$1/eg #logdb sysmon:eth0_diff:::$val=~s/.*TX..([\d.]*).*/$1/eg plot "< awk '/eth0_diff:/ {print $2, $5}' <IN>" \ using 1:2 axes x1y2 title 'Empfangen' ls l1 lw 2 with lines,\ "<IN>" using 1:2 axes x1y2 title 'Gesendet' ls l0 lw 2 with lines
# Created by FHEM/98_SVG.pm, 2016-03-03 17:09:53 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 nomirror set y2tics set grid y2tics set ylabel "Vavle Position (%)" set y2label "Temperature in C" set yrange [0:100] set y2range [5:30] #logdb bz_heizung:desired-temp #logdb bz_heizung:measured-temp #logdb bz_heizung:actuator plot "<IN>" using 1:2 axes x1y2 title 'Soll Temp' ls l0 lw 1 with steps,\ "<IN>" using 1:2 axes x1y2 title 'Ist Temp' ls l1 lw 1 with lines,\ "<IN>" using 1:2 axes x1y1 title 'Ventil Pos (%)' ls l2 lw 1 with steps
# Created by FHEM/98_SVG.pm, 2016-03-03 17:09:53 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 nomirror set y2tics set grid y2tics set ylabel "Vavle Position (%)" set y2label "Temperature in C" set yrange [0:100] set y2range [5:30] #logdb wz_heizung:desired-temp #logdb wz_heizung:measured-temp #logdb wz_heizung:actuator plot "<IN>" using 1:2 axes x1y2 title 'Soll Temp' ls l0 lw 1 with steps,\ "<IN>" using 1:2 axes x1y2 title 'Ist Temp' ls l1 lw 1 with lines,\ "<IN>" using 1:2 axes x1y1 title 'Ventil Pos (%)' ls l2 lw 1 with steps
# Created by FHEM/98_SVG.pm, 2016-07-20 17:05: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 '<TL>' set ytics nomirror set y2tics set grid y2tics set ylabel "“Verbrauch [kW/h]”" set y2label "“Leistung [Watt]”" #logdb Revolt_5129:power #logdb Revolt_5129:energy plot "<IN>" using 1:2 axes x1y2 title 'Watt' ls l0 lw 0.5 with lines,\ "<IN>" using 1:2 axes x1y1 title 'Ampere' ls l1fill lw 1 with lines