SVG-Plots von FileLog auf DbLog umstellen: Unterschied zwischen den Versionen

Aus FHEMWiki
K (→‎Define: "define DBLOG DbLog mydb.conf .*:.*" ergänzt)
Zeile 47: Zeile 47:


Insbesondere ist auch der zusätzliche Doppelpunkt vor der Anweisung zu beachten (Grund ist mir leider nicht bekannt, bitte ergänzen!).
Insbesondere ist auch der zusätzliche Doppelpunkt vor der Anweisung zu beachten (Grund ist mir leider nicht bekannt, bitte ergänzen!).
Falls on/off-Werte geloggt werden sollen, muss der Code wie folgt lauten:
#DbLog HMW02.O05_4k7:state:::$val=($val=~"on"?10:1)
Um auch noch dim-Werte abzufangen und mit dem entsprechenden Value zu loggen, bietet sich folgendes an:
#DbLog Stellantrieb_Buero:state:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:($1eq"dim"?$2*0.01:0)/eg


===logProxy===
===logProxy===

Version vom 28. November 2016, 11:21 Uhr

Grundsätzlich verhält sich DbLog bei der Verwendung in SVG-Plots sehr ähnlich wie ein FileLog. So kann ein neuer Plot auf DbLog-Daten in der FHEM-Oberfläche genauso angelegt werden wie beim FileLog, indem man an der Definition des DbLog Devices auf "Create SVG plot from DbLog" klickt. Wenn man von FileLog auf DbLog umstellt, möchte man aber evtl. nur die Definitionen der SVG-Plots anpassen. Hier einige Anmerkungen dazu.

Define

Eine bestehende FileLog Definition für ein Thermostat könnte zB so aussehen:

define FileLog_W_HEIZUNG FileLog ./log/W_HEIZUNG-%Y.log W_HEIZUNG
attr FileLog_W_HEIZUNG logtype text
attr FileLog_W_HEIZUNG room hidden

define SVG_FileLog_W_HEIZUNG_1 SVG FileLog_W_HEIZUNG:SVG_FileLog_W_HEIZUNG_1:CURRENT
attr SVG_FileLog_W_HEIZUNG_1 room hidden

Bei Umstellung auf DbLog kann das FileLog-Device natürlich gelöscht werden, nachdem es durch ein allgemeines DbLog-Device ersetzt worden ist (siehe DbLog). Die Definition des Plots wird danach folgendermassen geändert:

define DBLOG DbLog mydb.conf .*:.*

define SVG_W_HEIZUNG_1 SVG DBLOG:SVG_DBLOG_W_HEIZUNG_1:CURRENT
attr SVG_W_HEIZUNG_1 room hidden

Mit dieser Anweisung wird ein SVG-Plot mit Namen SVG_W_HEIZUNG_1 (der Name muss natürlich nicht geändert werden, soviel Zeit sollte man sich allerdings nehmen) angelegt, der seine Daten vom DbLog-Device DBLOG bezieht und mit Hilfe der Gplot-Datei SVG_DBLOG_W_HEIZUNG_1.gplot (auch dieser Name muss nicht zwingend geändert werden) rendert.

Gplot-Datei

Die bestehende Gplot-Datei SVG_FileLog_W_HEIZUNG_1.gplot (im Verzeichnis www/gplot) wird zunächst nach SVG_DBLOG_W_HEIZUNG_1.gplot kopiert. Sie kann gelöscht werden, wenn die Umstellung zufrieden stellend abgeschlossen ist. Geändert werden müssen nur die Zeilen, die mit #FileLog beginnen:

#FileLog 4:W_HEIZUNG.temperature\x3a:0:
#FileLog 4:W_HEIZUNG.desiredTemperature:0:
#FileLog 4:W_HEIZUNG.valveposition\x3a:0:

Daraus wird:

#DbLog W_HEIZUNG:temperature:0:
#DbLog W_HEIZUNG:desiredTemperature:0:
#DbLog W_HEIZUNG:valveposition:0:

#FileLog wird durch #DbLog ersetzt. Die Angabe der Feldnummer vor dem Device (hier: "4") fällt weg, ebenso evtl. notierte Sonderzeichen am Ende der Readings-Bezeichnung (hier "\x3a"). Ansonsten bleibt der Inhalt der Gplot-Datei gleich.

@fld

Ein Sonderfall in der Notation liegt in der Verwendung von Mappings mit Hilfe des @fld-Arrays (siehe auch Creating Plots). Da es dieses Array in der Form in DbLogs nicht gibt, muss auf eine Zuweisung der Variable $val umgestellt werden. Lautet die Anweisung bei Verwendung von FileLog zB:

#FileLog 3:W_FENSTER:onoff::$fld[2]=~"1"?24:-10

muss sie für DbLog folgendermassen geändert werden:

#DbLog W_FENSTER:onoff:::$val=($val=~'1'?24:-10)

Insbesondere ist auch der zusätzliche Doppelpunkt vor der Anweisung zu beachten (Grund ist mir leider nicht bekannt, bitte ergänzen!).

Falls on/off-Werte geloggt werden sollen, muss der Code wie folgt lauten:

#DbLog HMW02.O05_4k7:state:::$val=($val=~"on"?10:1)

Um auch noch dim-Werte abzufangen und mit dem entsprechenden Value zu loggen, bietet sich folgendes an:

#DbLog Stellantrieb_Buero:state:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:($1eq"dim"?$2*0.01:0)/eg

logProxy

#logProxy FileLog:FileLog_W_HEIZUNG:4:W_HEIZUNG.valveposition\x3a:0:

wird zu

#logProxy DbLog:DBLOG:W_HEIZUNG:valveposition:0:

Näheres dazu unter LogProxy.