SVG

Aus FHEMWiki
Version vom 22. Januar 2020, 08:11 Uhr von OdfFhem (Diskussion | Beiträge) (Ergänzung von Beispiel "Leistungsdaten einer Steckdose (FileLog)")
Zur Navigation springen Zur Suche springen
Todo: Diese Beschreibung ist noch zu ergänzen / erweitern.


SVG
Zweck / Funktion
Erstellung von Diagrammen aus Logdaten
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Support (Forum) Frontends
Modulname 98_SVG.pm
Ersteller rudolfkoenig (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das Modul SVG generiert Diagramme aus Logdateien oder -datenbanken.

Die Eigenschaften des zu erstellenden Diagrams werden in einer .gplot-Datei festgelegt.

Definition

Details in der commandref/SVGlinkdefine.

Attribute

Details in der commandref/SVGattr.

Funktionen

Details in der commandref/plotfunction.

Beispiele

Leistungsdaten einer Steckdose (FileLog)

  • Inhalt der Datei SVG_PlugX.gplot
Info green.pngGegebenenfalls sind die Feldnamen anzupassen
# Leistungsdaten einer Steckdose (FileLog)
#
# plotReplace-Parameter: DataDevice        (von diesem Gerät stammen die Daten)
#                        FileLogDevice     (in diesem Gerät werden die Daten geloggt)
#                        stateOFFvalue     (y-Wert zur Darstellung von ausgeschaltetem Zustand)
#                        stateONvalue      (y-Wert zur Darstellung von eingeschaltetem Zustand)
#                        stateUNKNOWNvalue (y-Wert zur Darstellung von unbekanntem Zustand)
#                        title             (in der Regel ein perl-Ausdruck zur Darstellung von Eckwerten in der Titelzeile)
#                        yrange            (Wertebereich für Darstellung in W vorgeben)
#                        y2range           (Wertebereich für Darstellung in mA vorgeben)

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 '<title>'
set ytics 
set y2tics 
set grid ytics y2tics
set ylabel "Leistung (W)"
set y2label "Strom (mA)"
set yrange %yrange%
set y2range %y2range%

#%FileLogDevice% 4:%DataDevice%.power\x3a:0:
#%FileLogDevice% 4:%DataDevice%.current\x3a:"":($fld[3]*1000)
#%FileLogDevice% 4:%DataDevice%.userRead_socket_state\x3a:"":($fld[3]=~"off"?%stateOFFvalue%:($fld[3]=~"on"?%stateONvalue%:%stateUNKNOWNvalue%))

plot "<IN>" using 1:2 axes x1y1 title 'Leistung' ls l0 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Strom' ls l1fill_stripe lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Schaltzustand' ls l3 lw 1 with steps
  • Definition von SVG-Device SVG_Test
Info green.pngAlle Vorkommen von ...Data-Device... und ...FileLog-Device... sind zu ersetzen
defmod SVG_Test SVG ...FileLog-Device...:SVG_PlugX:CURRENT
attr SVG_Test captionPos auto
attr SVG_Test plotReplace DataDevice="...Data-Device..." FileLogDevice="...FileLog-Device..." stateOFFvalue="20" stateONvalue="30" stateUNKNOWNvalue="10" yrange="[0:75]" y2range="[0:300]" title={"Steckdose(Testgerät) --- W: $data{min1}...$data{max1} / $data{currval1} --- mA: $data{min2}...$data{max2} / $data{currval2}"}

Temperatur- und Heizungsdaten eines Zimmers

Quelle: Beitrag (Datenquelle ist ein DBLog-Device namens LogDB):

PlotReplace Example DBLog.png
# Created by FHEM/98_SVG.pm, 2020-01-06
# to replace variables, use plotReplace like
# attr SVG_Thermostat plotReplace SPEC1=Thermostat TL="My example thermostat" EXTERNALTEMPDEVICE=MYSENSOR_97 EXTERNALTEMPREADING=temperature2 \
# ROOMHUMIDITYDEVICE=HUEDevice3 EXTERNALHUMIDITYREADING=humidity ROOMTEMPDEVICE=HUEDevice4 ROOMTEMPREADING=temperature WINDOW1=Window1_MyRoom WINDOW2=Window2_MyRoom

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
set y2tics
set grid
set ylabel "Valve/Window"
set y2label "Temperature"
set yrange [-5:105]
set y2range [-15:35]
set isosample 20

#LogDB %SPEC1%:desired-temp::
#LogDB %SPEC1%:measured-temp:0:
#LogDB %EXTERNALTEMPDEVICE%:%EXTERNALTEMPREADING%::
#LogDB %SPEC1%:actuator:0:int
#LogDB %ROOMHUMIDITYDEVICE%:%EXTERNALHUMIDITYREADING%:0:
#LogDB %ROOMTEMPDEVICE%:%ROOMTEMPREADING%:0:
#LogDB %WINDOW1%:state:::$val=~s/(open|closed|tilted)(\d*).*/$1eq"open"?60:$1eq"tilted"?45:0/eg
#LogDB %WINDOW2%:state:::$val=~s/(open|closed|tilted)(\d*).*/$1eq"open"?60:$1eq"tilted"?45:0/eg


plot "<IN>" using 1:2 axes x1y2 title 'Desired' ls l0 lw 1 with lines,\
     "<IN>" using 2:2 axes x1y2 title 'Measured actuator' ls l7 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Aussen' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 y2title 'Valve' ls l5 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Humidity' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Measured roomsensor' ls l3 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 y2title '%WINDOW1%' ls l4fill lw 0.5 with steps,\
     "<IN>" using 1:2 axes x1y1 y2title '%WINDOW2%' ls l5fill lw 0.5 with steps

Links

<syntaxhighlight lang="raw">