Hallo Zusammen,
ich habe heute mein Logging auf DBLog umgestellt.
Dazu habe ich sqlite3 installiert und in der fhem.cfg folgenden Eintrag direkt hinter der WEBtablet Definition eingefügt.
# Logs in DBLog schreiben
define logdb DbLog ./db.conf .*:.*
Anschliessend fhem neu gestartet.
Ergebnis:
2015.09.02 09:43:00 3: Connecting to database SQLite:dbname=/opt/fhem/fhem.db with user
2015.09.02 09:43:00 3: Connection to db SQLite:dbname=/opt/fhem/fhem.db established for pid 3728
2015.09.02 09:43:00 3: Connection to db SQLite:dbname=/opt/fhem/fhem.db established
Soweit, so gut.
Das Logging in die DB funktioniert auch soweit. Das habe ich mit folgenden sql abgefragt:
select * from history order by TIMESTAMP;
Anmerkung: Obwohl ich auch eine Table "current" angelegt habe, läuft eine Abfrage auf diese Table ins leere. Keine Sätze?!
Bei der Umstellung auf sqlite3 hat das WIKI geholfen und hat soweit gestimmt.
Nun ging es an die Umstellung der SVGs (war der primäre Grund auf dblog zu gehen).
Auch hier gibt es im WIKI einen Eintrag, der aber nicht passt.
WIKI:
ZitatDie 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.
Und genau hier passt es nicht mehr.
Die oben beschriebenen Einträge gibt es in den SVG Dateien nicht.
Inhalt eines meiner gplot Dateien (nach Umstellung über Weboberfläche):
# Created by FHEM/98_SVG.pm, 2015-09-02 07:58:17
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 'Licht Empore Galerie'
set ytics
set y2tics
set grid
set ylabel "Energy"
set y2label "Power"
#logdb Licht_Galerie_Empore_Pwr:energyCalc
#logdb Licht_Galerie_Empore_Pwr:power
plot "<IN>" using 1:2 axes x1y1 title 'Watt gesamt' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Watt aktuell' ls l1fill lw 1 with lines
Somit habe ich folgendes gemacht:
- Über die Web Oberfläche in den SVG gegangen und den "source" auf "logdb" umgestellt sowie die entsprechende "Device:Reading" gesetzt.
- Nach "write .gplot file" wurde der SVG neu dargestellt und der Plot hat nun die Daten aus der DB.
Der fhem.cfg Eintrag zum SVG weicht auch von der WIKI Beschreibung ab.
Laut WIKI soll:
ZitatEine 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.
In meiner cfg steht immer noch:
Zitatdefine SVG_FileLog_Licht_Galerie_Empore_Pwr_1 SVG FileLog_Licht_Galerie_Empore_Pwr:SVG_FileLog_Licht_Galerie_Empore_Pwr_1:CURRENT
attr SVG_FileLog_Licht_Galerie_Empore_Pwr_1 room Verbrauch
Im System Log erschienen dann folgende Meldungen:
Zitat2015.09.02 09:43:04 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)
Ich habe dann in der fhem.cfg alle :CURRENT auf :HISTORY geändert und fhem neu gestartet.
Nun meine Fragen:
- Ist meine Vorgehensweise so o.k.?
- Obwohl ich in der fhem.cfg alle :CURRENT nach :HISTORY geändert habe, erscheint im Log immer noch die Meldungen "Defining DbLog SVG-Plots with :CURRENT is deprecated....". Gibt es noch andere Stellen an denen das :CURRENT steht?
- Aktuell wird bei mir noch in FileLog sowie in die DB gelogged. Laut Doku kann ich die FileLogs löschen.
Bisher kann ich über die Weboberfläche mir die einzelnen Logs anschauen.
Diese sind ja dann nicht mehr vorhanden. Wie kann ich dann in die einzelnen Device Logs schauen? - Laut WIKI sollte in der fhem.cfg die SVG Einträge von "define SVG_FileLog_W_HEIZUNG_1 SVG FileLog_W_HEIZUNG:SVG_FileLog_W_HEIZUNG_1:CURRENT" nach "define SVG_W_HEIZUNG_1 SVG DBLOG:SVG_DBLOG_W_HEIZUNG_1:CURRENT" geändert werden. Bei mir haben sich die Einträge nicht geändert. Verwirrung...
- Wofür wurde die Table "current" angelegt, obwohl laut Abfrage die Tabelle keinen Inhalt hat?
Viele Fragen auf die ich mit search hier und im Internet nicht weiter gekommen bin.
Kann jemand helfen?
Danke und Gruß
Soc
Keiner eine Antwort auf meine Fragen?
Hallo Soc,
was mir auf die Schnelle bei Deinen Ausführungen aufgefallen ist:
in Deinem Plot Beispiel hast Du "#FIleLog" durch den Namen Deines Datenbank-Log define ersetzt. Es müsste aber das Schlüsselwort "#DbLog" sein. Dein Datenbank device name wird bei dem define des Plots übergeben:
define <name> SVG <DblogDevice>:<gplotfile>:HISTORY
Die Logwerte kannst Du Dir mit dem Ger-Befehl des DbLogDevices ansehen und filtern. Hierzu gibt es einige Beispiele in der commandref.
gruss, Carsten
Hallo Carsten,
das verwundert mich etwas.
Ich habe die Einstellungen im gplot File nicht "händisch" vorgenommen, sondern über die Weboberfläche angepasst.
Dort gab es als input nur die Filelogs auszuwälen, oder den Eintrag "logdb" (so heisst übrigens die DB).
Das DBLog gibt es in der Auswahl nicht.
Wie kann ich sicher feststellen dass die Daten wirklich aus der DB geholt werden und nicht weiterhin aus dem Filelog?
Soc
Ach ja, ich habe noch ein paar plots über FileLog laufen und der Aufbau der plots dauert um ein vielfaches länger als bei denen welche vermeintlich über die DB gehen....
Es mag Dich wundern, aber so steht es im Wiki und so sehen auch meine .gplot files aus. Und mein DbLog Device heisst definitiv anders.... Bei der FileLog Variante steht doch auch immer "#FileLog" und nicht "#<FlieLogdevicename>".
Zu automatischen Anpassungen kann ich nichts sagen, ich habe meine .gplot Dateien händisch angepasst, da ich die Devices als Attribut übergebe und so die .gplot Dateien wiederverwenden kann. Aber das ist ein anderes Thema.
gruss, Carsten
Hallo Carsten,
ich habe es ausprobiert und in der gplot die Zeilen von #logdb auf #DBLog geändert.
Ergebnis:
Ich sehe einen leeren Plot.
Mit #logdb sehe ich die Daten.
Jetzt wird es glaube ich kompliziert.
Wenn Deine Aussage stimmt (und davon gehe ich mal fest aus), woher kommen dann die Daten bei #logdb und warum kommen keine bei #DBLog?
# Created by FHEM/98_SVG.pm, 2015-09-02 09:26:42
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 'Bad'
set ytics
set y2tics
set grid
set ylabel "Humidity"
set y2label "Temperature"
#logdb InnenTermostat_Bad:humidity
#logdb InnenTermostat_Bad:temperature
#logdb AussenTermostat_Buero:temperature
#logdb AussenTermostat_Buero:humidity
plot "<IN>" using 1:2 axes x1y1 title 'Humidity' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Temperature' ls l1fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Temp-Out' ls l2fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Hum-Out' ls l5 lw 1 with lines
So sieht mein gplot aus.
Wie gesagt, wenn ich die 4 Zeile abändere sehe ich keinerlei Kurven mehr.
ZitatWenn Deine Aussage stimmt (und davon gehe ich mal fest aus), woher kommen dann die Daten bei #logdb und warum kommen keine bei #DBLog?
Weil deine DbLog Definition
# Logs in DBLog schreiben
define logdb DbLog ./db.conf .*:.*
ist.
Dein DbLog device hat den Namen logdb, also must du deine Readings darauf anpassen
Hallo Soc,
ich kann Dir mal ein Beispiel von mir zeigen:
# Created by FHEM/98_SVG.pm, 2013-09-04 04:51:37
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 "'Temperatur in C'"
set y2label
#DbLog <SPEC1>:temperature:::
#DbLog <SPEC2>:temperature:::
plot "<IN>" using 1:2 axes x1y1 title 'Vorlauf' ls l3fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Ruecklauf' ls l6fill lw 1 with lines
mein DbLog device heiśt "mySQLDbLog". Also kann m. E. nicht der Device Name im Plot file stehen. <SPEC1> und <SPEC2> wird mit
attr <plotname> plotfunction <device1> <device2>
die beiden Platzhalter können aber auch direkt in das .gplot file eingetragen werden.
Den einzigen Unterschied, den ich sehe, sind die Begrenzer (Doppelpunkte) nach den Readings.
HTH.
Die Frage ist wie hast Du die DB definiert.
Wenn Du das wie folgt gemacht hst, dann verstehe ich es.
define DBLog DbLog mydb.conf .*:.*
Solltest Du aber
define xxxxxx DbLog mydb.conf .*:.*
gemacht haben (xxxxxx steht für irgendwas ausser DBLog), dann stehe ich weiterhin auf den Schlauch.
Ich habe jetzt mal die oben genannten Beispiele nachvollzogen und entsprechend versucht einen neuen SVG zu definieren.
Define SVG:
Internals:
DEF DBLog:SVG_DBLog_InnenTermostat_Bad_1:HISTORY
GPLOTFILE SVG_DBLog_InnenTermostat_Bad_1
LOGDEVICE DBLog
LOGFILE HISTORY
NAME SVG_DBLog_InnenTermostat_Bad_1
NR 259
STATE initialized
TYPE SVG
Attributes:
plotfunction InnenTermostat_Bad AussenTermostat_Buero
room 0.0_Test
SVG File:
# Created by FHEM/98_SVG.pm, 2015-09-02 09:26:42
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 'Bad'
set ytics
set y2tics
set grid
set ylabel "Humidity"
set y2label "Temperature"
#DBLog <SPEC1>:humidity:::
#DBLog <SPEC1>:temperature:::
#DBLog <SPEC2>:temperature:::
#DBLog <SPEC2>:humidity:::
plot "<IN>" using 1:2 axes x1y1 title 'Humidity' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Temperature' ls l1fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Temp-Out' ls l2fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Hum-Out' ls l5 lw 1 with lines
Dieses scheitert, da er den DB-Server mit den Namen DBLog nicht findet.
Meine DB Definition:
define logdb DbLog ./db.conf .*:.*
Die DB-Device heisst logdb.
Diese muss nach meinem Verständnis auch in der SVG Definition define SVG_DBLog_InnenTermostat_Bad_1 SVG logdb:SVG_DBLog_InnenTermostat_Bad_1:HISTORY wieder auftauchen.
Und konsequenterweise dann auch im SVG File #logdb <SPEC1>:humidity:::.
Ich habe zum Test auch noch das Filelog zu der Device "InnenTermostat_Bad" gelöscht (mit fhem Bordmittel delete FileLog_InnenTermostat_Bad), um sicher zu gehen das die angezeigten Daten wirklich aus der DB kommen und nicht weiter aus dem Filelog.
Ergebnis: Der Plot wird weiterhin aktualisiert und die Daten stimmen soweit.
habe ich da jetzt einen Logikfehler?!
Soc
Das siehst du vollkommen richtig und hatte ich oben auch geschrieben! Meine DB hat den Namen myDbLog und in der gplot steht dann z.B. :
# Created by FHEM/98_SVG.pm, 2015-07-06 10:21:28
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> <L1>'
set ytics
set y2tics
set grid y2tics
set ylabel "Ventil in %"
set y2label "Temperatur in °C"
#myDbLog Flur_Heizung_Clima:measured-temp
#myDbLog Flur_Heizung_Clima:ValvePosition
#myDbLog Flur_Heizung:desired-temp
plot "<IN>" using 1:2 axes x1y2 title 'Measured temperature' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Ventil' ls l2fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'desired temp' ls l1 lw 2 with lines
Und die Definition demgemäß:
define myDbLog DbLog /opt/fhem/db.conf .*:.*
Und die SVG Definition:
define DB_Flur SVG myDbLog:DB_Flur:HISTORY
attr DB_Flur group Heizung_Struct
attr DB_Flur label "Temp min: $data{min1}, max: $data{max1}, last: $data{currval1} "
attr DB_Flur plotfunction Flur_Heizung_Clima
attr DB_Flur room Flur
attr DB_Flur title "Heizung Flur"
VG
Frank
Hallo Frank,
DANKE für die Bestätigung :) :) :)
Dann ist meine Welt wieder in Ordnung.
@an Alle bei den ich ihre Beiträge falsch interpretiert habe: SORRY
mmmmh,
das hat mich ja nun doch gefuchst....
ich habe mein Log Device so definiert:
define mySQLDbLog DbLog mydb.conf .*:.*
in den .gplot Dateien kann ich sowohl
#DBLog <SPEC1>:temperature:::
als auch
#mySQLDbLog <SPEC1>:temperature:::
verwenden. Es wird immer ein Plot mit Daten erzeugt...
Warum das so ist? Keine Ahnung.
Übrigens steht in der commandref zu "SVG":
Zitat
[...] Some special commands (beginning with #FileLog or #DbLog) are used additionally, [...]
Das würde ich so interpretieren, dass es Direktiven sind und keine Devices. Aber... alles nur Vermutung und Interpretation, kein Wissen.
gruss, Carsten