Hi,
nach einiger Zeit muss ich jetzt auch mal wieder in den Anfängerbereich zurück...
Folgendes:
Ich habe einen dummy definiert, der als Reading "state" einen geglätteten Differenztemperaturwert meines Sonnensensor enthält. Der Wert wird von einer Perl Funktion berechnet und mit set dummy_sunshineDiffTempSmooth xxx
in den Dummy geschrieben. Das funktioniert alles prächtig und der Wert ist auch korrekt und wird aktualisiert.
Allerdings wird der Wert nicht in meine DbLog-Instanz gelogged. Vom Regex der DbLog-Definition ist mir das auch klar, aber es wird auch nicht gelogged wenn ich es per DbLogInclude einschließe. Das Problem ist vermutlich, dass kein Event erzeugt wird wenn der Wert aktualisiert wird.
Hier mal das List vom Dummy:
Internals:
.lastTimestate 1492854531.93576
CFGFN
NAME dummy_sunshineDiffTempSmooth
NR 4572
STATE 2.87
TYPE dummy
Readings:
2017-04-22 11:48:51 state 2.87
Attributes:
DbLogInclude state
event-min-interval .*:900
event-on-change-reading .*
event-on-update-reading .*
room Technik
Und hier das List vom DbLog:
Internals:
COLUMNS field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
CONFIGURATION /opt/fhem/db.conf
DBMODEL SQLITE
DEF /opt/fhem/db.conf .*:(measured-temp|temp_c|batteryLevel|desired-temp|ValvePosition|controlMode|humidity|battery|dewpoint|wind|state|event|direction|internal_connection|external_name|external_number|external_connection|internal_number|call_id|on|off|true|false|temperature|power|kWh).*
MODE synchronous
NAME myDbLog
NR 9
NTFY_ORDER 50-myDbLog
PID 23479
REGEXP .*:(measured-temp|temp_c|batteryLevel|desired-temp|ValvePosition|controlMode|humidity|battery|dewpoint|wind|state|event|direction|internal_connection|external_name|external_number|external_connection|internal_number|call_id|on|off|true|false|temperature|power|kWh).*
STATE connected
TYPE DbLog
VERSION 2.16.5
dbconn SQLite:dbname=/opt/fhem/fhem2.db
dbuser
Helper:
COLSET 1
DEVICECOL 64
EVENTCOL 512
READINGCOL 64
TYPECOL 64
UNITCOL 32
VALUECOL 128
Readings:
2017-04-22 11:52:28 state connected
Cache:
index 0
Attributes:
DbLogSelectionMode Exclude/Include
Aber wie gesagt glaube ich eher dass es am fehlenden Event liegt. Daher habe ich (siehe List vom dummy) auch mit den event-onXXX Attributen rumgespielt, aber es geht trotzdem nicht. Wo liegt der Fehler?
Hi,
probier mal ob DBLog das Attribut addStateEvent kann.
Gruß,
Thorsten
Scheinbar nicht, ich kann es zumindest nicht aus der DropDown List auswählen.
Was ich jetzt gar nicht verstehe, von diesem Dummy wird das state Reading in der DbLog gelogged, obwohl ich da gar kein DbLogInclude angegeben habe:
Internals:
.lastTimestate 1492854975.89797
CFGFN /opt/fhem/FHEM/intelligence.cfg
CHANGED
NAME highHumiditySleep
NR 779
STATE false
TYPE dummy
Helper:
Dblog:
State:
Mydblog:
TIME 1492854975.90546
VALUE false
Readings:
2017-04-22 12:15:57 state false
Attributes:
event-min-interval .*:1800
event-on-change-reading .*
Hi,
durch das DbLogInclude wird nur noch das Reading state geloggt. Das Reading state gibt es aber nicht wirklich, zumindest nicht in den Events. Siehe auch hier:
https://forum.fhem.de/index.php?topic=30549.0
Außerdem hier:
https://wiki.fhem.de/wiki/Event#Erg.C3.A4nzen_des_Reading_state_im_Event
Vielleicht versuchst Du es trotzdem mal mit addStateEvent.
Ansonsten setze vielleicht ein richtiges Reading und nicht "state". Das geht mit setreading.
Gruß,
Thorsten
Ah, jetzt wird's mir klarer was das Problem ist.
Aber irgendwie habe ich heute kein Glück. Also ich habe jetzt den Weg mit "setreading" gewählt. Jetzt habe ich ein Reading diffTemp in dem Dummy:
Internals:
.lastTimediffTemp 1492860299.73926
.lastTimestate 1492859088.37511
CFGFN
NAME dummy_sunshineDiffTempSmooth
NR 4572
STATE on
TYPE dummy
Helper:
Dblog:
State:
Mydblog:
TIME 1492859088.38303
VALUE on
Readings:
2017-04-22 13:24:59 diffTemp 0.48
2017-04-22 13:04:48 state on
Attributes:
DbLogInclude diffTemp
event-min-interval .*:900
event-on-change-reading .*
room Technik
Entsprechend habe ich jetzt "DbLogInclude diffTemp" gesetzt.
Events werden erzeugt:
2017-04-22 13:24:59 dummy dummy_sunshineDiffTempSmooth diffTemp: 0.48
2017-04-22 13:27:21 dummy dummy_sunshineDiffTempSmooth diffTemp: 0.68
2017-04-22 13:29:28 dummy dummy_sunshineDiffTempSmooth diffTemp: 0.88
Aber die Werte sind trotzdem nicht im DbLog drin..?? Mit DbLogInclude .* gehts auch nicht...
Hi,
lass doch mal den ganzen Kram hier weg:
DbLogInclude diffTemp
event-min-interval .*:900
event-on-change-reading .*
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 22 April 2017, 16:19:08
Hi,
lass doch mal den ganzen Kram hier weg:
DbLogInclude diffTemp
event-min-interval .*:900
event-on-change-reading .*
Gruß,
Thorsten
Das kam alles im Zuge meiner Fehlersuche dazu. Ich habe es mal weggemacht, aber wurde dann auch nicht gelogged (was ich insofern verstehe, dass das Event dann nicht auf die RegExp in meiner DbLog Definition matched). Was jetzt aber funktioniert ist, alle Zusätze im Dummy weg zu machen und das Reading "diffTemp" in die RegExp in der DbLog Definition hinzuzufügen.
Danke für die Hilfe!
Zitat von: Joker am 22 April 2017, 12:23:45
Scheinbar nicht, ich kann es zumindest nicht aus der DropDown List auswählen.
Was ich jetzt gar nicht verstehe, von diesem Dummy wird das state Reading in der DbLog gelogged, obwohl ich da gar kein DbLogInclude angegeben habe:
Internals:
.lastTimestate 1492854975.89797
CFGFN /opt/fhem/FHEM/intelligence.cfg
CHANGED
NAME highHumiditySleep
NR 779
STATE false
TYPE dummy
Helper:
Dblog:
State:
Mydblog:
TIME 1492854975.90546
VALUE false
Readings:
2017-04-22 12:15:57 state false
Attributes:
event-min-interval .*:1800
event-on-change-reading .*
Dieses Dummy liefert als Event "false" oder "true" und du hast als DbLog-Regex ..|false|true|.. angegeben.
Wenn das state-Event ohne Readingnamen kommt wird der Beginn des state-Wertes als Reading interpretiert.
Deine Regex trifft also mehr als du wolltest.
Wie meinst du das genau? Also dass dieser Dummy deswegen gelogged wird, weil in der Regex ..|false|true|.. angegeben ist, hab ich jetzt verstanden. Aber den möchte ich auch loggen, vermutlich habe ich das damals unwissentlich durch try&error so eingetragen oder weil ich damals auch auf das state-Problem gestoßen bin, das weiß ich nicht mehr.
Also passt das dann schon so, oder?
Wenn ich in einen state einen Wert schreibe welcher mit einem in deiner Dblog-Regex übereinstimmt, wird sieser Wert geloggt. Deine Regex kann nicht zwischen Reading-Werten (ausser state) und state-Werten unterscheiden.