Um die Datenflut meiner Sensoren etc. besser in den Griff zu bekommen, habe ich das Log System auf eine SQLite Datenbank umgestellt.
Bin nach dieser Anleitung https://waschto.eu/dblog-datenbank-anstelle-von-logfiles/ vorgegangen, war im Prinzip kein Problem.
Mit der Definition habe ich auch die zu speichernden Readings beschränkt:
./db.conf .*:(temperature|T|humidity|voltage|current|power|energy|Leistung|motion|desired-temp|measured-temp|battery_level|battery).*
Jetzt kommt das Problem.
Ich habe ein paar Auriol Temperatursensoren in FHEM eingebunden. Die lieferten folgenden Eintrag im Log ab:
2017-12-31_23:56:56 KuechenTemperatur T: 21.1
Das dumme daran ist, das der Readingfilter nicht auf einen Buchstaben "T" reagiert. Auch "T:" funktioniert nicht.
Die Daten sind nicht in der Datenbank gelandet.
Mit einer kleinen Änderung in der Definition der Logdatei bekomme ich nun diese Daten:
2018-02-01_15:53:45 KuechenTemperatur other: 20.6
2018-02-01_15:53:45 KuechenTemperatur T: 20.6
./db.conf .*:(temperature|other|humidity|voltage|current|power|energy|Leistung|motion|desired-temp|measured-temp|battery_level|battery).*
Jetzt werden zwar die Temperaturen als ,,other" in der Datenbank gespeichert, aber schön ist das nicht. Auch das importieren der alten Log-Dateien funzt so nicht.
Hat da jemand eine Idee dazu?
LG Michael
Hallo Michael,
auch das Loging von nur einem "T"-Reading funktioniert einwandfrei. Habe mir einen Dummy angelegt, Reading T.
Hier der Ausschnitt aus listCAche von DbLog im asynchronen Mode:
19 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|T: 684.9|T|684.9|
20 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|T: 684.9|T|684.9|
21 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|T: 684.9|T|684.9|
22 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|TotalConsumption: 681.4|TotalConsumption|681.4|W
23 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|T: 681.4|T|681.4|
24 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|T: 681.4|T|681.4|
25 => 2018-02-01 19:32:05|Dum.Energy|DUMMY|T: 681.4|T|681.4|
Mein Test-DEF sieht so aus:
./ftestmaria10.conf .*:(temperature|T|humidity).*
Ist also deinem nachempfunden und funktioniert. Es muss bei dir einen anderen Grund geben warum dieses Reading nicht geloggt wird.
Schalte dir mal verbose4 im DbLog ein und beachte Meldungen der Art:
2018.02.01 19:47:05.801 4: DbLog LogDB -> ################################################################
2018.02.01 19:47:05.801 4: DbLog LogDB -> ### start of new Logcycle ###
2018.02.01 19:47:05.802 4: DbLog LogDB -> ################################################################
2018.02.01 19:47:05.803 4: DbLog LogDB -> number of events received: 2 for device: Dum.Energy
2018.02.01 19:47:05.805 4: DbLog LogDB -> check Device: Dum.Energy , Event: GridConsumption: 567.8
2018.02.01 19:47:05.806 4: DbLog LogDB -> check Device: Dum.Energy , Event: T: 571.4
2018.02.01 19:47:05.807 4: DbLog LogDB -> added event - Timestamp: 2018-02-01 19:47:05, Device: Dum.Energy, Type: DUMMY, Event: T: 571.4, Reading: T, Value: 571.4, Unit:
Ich gehe davon aus, dass das Reading auch Events erzeugt !? Beachte auch eventuell gesetzte Attribute DbLogInclude, DbLogExclude die zur Steuerung dienen.
Grüße
Heiko
Kann es sein, dass hier nicht ein Reading T beteiligt ist, sondern das state-Reading den Wert T: ... trägt?
Mach doch mal ein list des devices und poste es hier
ZitatKann es sein, dass hier nicht ein Reading T beteiligt ist, sondern das state-Reading den Wert T: ... trägt?
Das ist sehr wahrscheinlich ...
Ja stimmt.
Beider Temperatur handelt es sich um ein state-Reading. Hab mir da noch keine Gedanken darüber gemacht, die Aufzeichnung im bisherigem Log Dateien undDarstellung im SVG Plot war ja OK.
Habe jetzt auch keine Idee wie ich die Temperatur als T: in die Datenbank bekomme, ist schon spät. Kann sein das ich erst wieder am Montag abend an die Kiste komme.
Oder einfach State in die Definition übernehmen? Das probier ich noch schnell.
OK mit dem state Eintrag sieht die Sache anders aus!
In der Datenbank ist jetzt der "other" Eintrag und state: T:
2018-02-01 23:39:25|KuechenTemperatur|CUL_TCM97001|other: 20.2|other|20.2|
2018-02-01 23:39:25|KuechenTemperatur|CUL_TCM97001|state: T: 20.2|state|T|20.2
Aber in der Plotliste taucht nur
KuechenTemperatur:other
KuechenTemperatur:state
auf.
Und mit dem state kann man keinen Temperatur darstellen, die würde nur zwischen 0 und 1 rumspringen;)
Da muss ich mich noch mal schlau machen.
nternals:
CHANGED
CODE CUL_TCM97001_125
DEF CUL_TCM97001_125
IODev mapleCUL2
LASTInputDev mapleCUL2
MSGCNT 843
NAME KuechenTemperatur
NR 71
RSSI -81
STATE T: 20.3
TYPE CUL_TCM97001
lastH 0
lastT 1517523102
mapleCUL2_MSGCNT 843
mapleCUL2_RAWMSG s47D0CBA0F2; 464: 9520
mapleCUL2_TIME 2018-02-01 23:11:42
Helper:
DBLOG:
other:
logdb:
TIME 1517523067.79587
VALUE 20.3
READINGS:
2018-01-30 23:59:20 battery ok
2018-01-30 23:59:20 channel 2
2018-01-30 23:59:20 mode normal
2018-02-01 23:11:42 other 20.3
2018-02-01 23:11:42 state T: 20.3
Attributes:
IODev mapleCUL2
event-min-interval .*:300
event-on-change-reading .*
model Mebus
room Kueche
verbose 4