Hallo zusammen,
vermutlich müsste ich das in den Anfängerfragen posten. Aber nachdem ich mittlerweile mehrere Stunden damit verbracht habe, die Log-Dateien meiner Max-Heizkörperregler bzw. meines Max-Thermostaten zu Plotten, poste ich das Thema mal hier.
Ich hatte die Version der gplot-Datei aus dem Wiki, aber aus unerfindlichen Gründen hat die nicht (mehr) funktioniert. Deshalb habe ich die bestehende in allen Versionen, die das Forum hergibt, editiert, hat aber nichts gebracht.
Zum Schluß habe ich von fhem eine generieren lassen, die ich dann von Hand nachbearbeitet habe:
# Created by FHEM/98_SVG.pm, 2014-10-26 20:58:54
#
# Beispiel aus dem Logfile:
# 2014-10-26_19:08:15 MAX_017ec3 desiredTemperature: 20.0
# 2014-10-26_19:08:15 MAX_017ec3 temperature: 19.8
# 2014-10-26_19:08:15 MAX_017ec3 valveposition: 63
#
# l0 ... rot
# l1 ... grün
# l2 ... blau
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 "Ventilposition [%]"
set y2label "Temperatur [Grad C]"
# <col of val>:<regexp>:<default>:<fn>
#FileLog 4:MAX_.......desiredTemperature\x3a::
#FileLog 4:MAX_.......temperature\x3a::
#FileLog 4:MAX_.......valveposition\x3a::
plot "<IN>" using 1:2 axes x1y2 title 'Soll-Temperatur' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Ist-Temperatur' ls l1 lw 1 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Ventilposition' ls l2fill lw 1 with lines
Ich habe den sechsstellige Adresse durch 6x den Punkt [.] ersetzt, ist etwas "hemdsärmelig", aber es tut wenigstens.
Vielleicht kann mir der ein oder andere auch noch seine posten bzw. mir zeigen (vermutlich mit der Chinesischen Mauer hochkant) was ich falsch gemacht habe, oder warum die aus dem Wiki nicht mehr funktioniert. Ich bin momentan zu erledigt, um noch irgend etwas zu sehen ...
Achso und hier noch mal meine Versionen:
# $Id: 00_CUL.pm 6755 2014-10-12 13:12:10Z rudolfkoenig $
# $Id: 14_CUL_MAX.pm 5282 2014-03-22 10:02:33Z mgehre $
# $Id: 92_FileLog.pm 6751 2014-10-12 11:31:37Z rudolfkoenig $
# $Id: 10_MAX.pm 6548 2014-09-13 11:56:56Z mgehre $
# $Id: 98_SVG.pm 6756 2014-10-12 13:13:26Z rudolfkoenig $
# $Id: 32_SYSSTAT.pm 5746 2014-05-04 19:49:29Z justme1968 $
# $Id: 99_MaxScan.pm 2013-03-29 20:15:33 john $
Danke schon mal im voraus.
Viele Grüße
PeMue
Hallo PeMue,
ich habe meine Charts einfach direkt im Plot-Editor zusammengeklickt.
Der Term im Feld von Mode lautet übrigens : $fld[3]=~"manual"?96:100.
Er zeigt die Modeumschaltung des Scanners am oberen Ende des Charts an.
Ich hoffe das hilft dir weiter.
Hierzu noch die resultieren gplot-Datei dazugelegt (aber die interessiert mich eigentlich nicht mehr)
# Created by FHEM/98_SVG.pm, 2014-01-21 09:19:09
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 "Ventilstellung (%)"
set y2label "Temperatur in C"
set yrange [0:100]
set y2range [18:22]
#FileLog 4:HT.BAD.temperature\x3a::
#FileLog 4:HT.BAD.desiredTemperature\x3a::
#FileLog 4:HT.BAD.valveposition\x3a::
#FileLog 4:HT.BAD.mode\x3a::$fld[3]=~"manual"?96:100
#FileLog 4:HT.BAD.temperature\x3a::
plot "<IN>" using 1:2 axes x1y2 title 'Raumtemperatur' ls l0 lw 1.5 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Soll-Temperatur' ls l1fill lw 2 with steps,\
"<IN>" using 1:2 axes x1y1 title 'Ventilstellung' ls l2 lw 2 with steps,\
"<IN>" using 1:2 axes x1y1 title 'Mode' ls l4 lw 1 with steps,\
"<IN>" using 1:2 axes x1y2 title 'Scan' ls l0 lw 1 with points
John
Hallo John,
vielen Dank für die gplot Datei. Du hast vermutlich für jedes Zimmer eine eigene gplot-Datei.
Ich wollte es ein bisschen flexibler haben, daher habe ich die Punkte eingefügt. Leider muß ich bei Regexp noch arg viel nachschauen ...
Gruß PeMue
wenn du ein gplot file mehrfach verwenden willst schaut dir mal das plotfunction attribut an. damit kannst von außen über das SVG device parametrisieren und brauchst nicht auf regex auszuweichen die, wenn überhaupt, nur funktionieren wenn du nur ein device in deinem log file hast und mit dblog garnicht.
du würdest im gplot file z.b. an stelle der punkte <SPEC1> schreiben und ins plotfunction attribut womit das dann ersetzt werden soll.
gruß
andre
Hallo,
vermutlich hast du Lösung schon aber so habe ich das gelöst:
Definition des Plot:
define wl_DG_Bad_HZ SVG myDbLog:tempact3db:HISTORY
attr wl_DG_Bad_HZ fixedrange 4days
attr wl_DG_Bad_HZ label "DG_Badezimmer_Heizung Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"
attr wl_DG_Bad_HZ nrAxis 1,2
attr wl_DG_Bad_HZ plotfunction DG_Bad_Heizung
attr wl_DG_Bad_HZ room 05_Plots_Heizung
Und die zugehörige gplot:
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set ytics nomirror
set y2tics
#set ytics
set title '<L1>'
set grid xtics y2tics
set y2label "°C"
set y3label "°C"
set ylabel "%"
#DbLog <SPEC1>:measured-temp::
#DbLog <SPEC1>:actuator::
#DbLog <SPEC1>:desired-temp::
plot \
1:2 ls l0 axes x1y2 title 'Ist-Temp (°C)' with lines
1:2 ls l2fill axes x1y1 title 'Actuator (%)' with lines
1:2 ls l1 axes x1y3 title 'Soll-Temp (°C)' with steps
Wie andre schon geschrieben hat - in der Definition des Plot füllt das Attribut plotfunction die Zeilen #DbLog <SPEC1>: mit dem Device.
Den Plot einfach mehrfach definieren mit unterschiedlichen plotfunction und verweis auf die selbe GPlot.
Grüße
P.S.: Achtung! Mein Beispiel ist von einem FHT.