Dummy wird nicht gelogged in DbLog..?

Begonnen von Joker, 22 April 2017, 11:56:10

Vorheriges Thema - Nächstes Thema

Joker

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?

Thorsten Pferdekaemper

Hi,
probier mal ob DBLog das Attribut addStateEvent kann.
Gruß,
   Thorsten
FUIP

Joker

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

Thorsten Pferdekaemper

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
FUIP

Joker

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

Thorsten Pferdekaemper

Hi,
lass doch mal den ganzen Kram hier weg:

  DbLogInclude diffTemp
   event-min-interval .*:900
   event-on-change-reading .*

Gruß,
   Thorsten
FUIP

Joker

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!

stromer-12

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.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Joker

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?

stromer-12

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.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL