SVG Umstellung nach dblog - wiki?!

Begonnen von Soc, 02 September 2015, 10:33:26

Vorheriges Thema - Nächstes Thema

Soc

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


Soc

Keiner eine Antwort auf meine Fragen?

MrRight

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
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

Soc

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

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

MrRight

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
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

Soc

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.

franky08

#7
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

MrRight

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.
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

Soc

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.

Soc

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

franky08

#11
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Soc

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

MrRight

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
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit