Inhaltsverzeichnis

Plot-grafiken

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.

Plots aus Log-Dateien

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

Plots aus Datenbankeinträgen

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 .             --|                                  --|

Cache

Durch setzen des folgenden Attributes werden SVG-Plots gecached wenn ihr Enddatum erreicht ist.

attr WEB SVGcache 1

Eigene Plot-Dateien

Hier werden eigene und angepasste gplot Dateien dargestellt.

mySM_DB_Load.gplot

# 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

mySM_DB_Network_eth0.gplot

# 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 \

mySM_DB_RAM.gplot

# 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 \

mySM_FS_opt.gplot

# 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

mySM_FS_root.gplot

# 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

mySM_Network_eth0.gplot

# 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

mytemp4valve4_badezimmer.gplot

# 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

mytemp4valve4_wohnzimmer.gplot

# 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

myRevolt_kuehlschrank.gplot

# 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