DBLog und Updateinterval [Bug im Modul?]

Begonnen von dad401, 07 Mai 2019, 23:42:59

Vorheriges Thema - Nächstes Thema

dad401

Hallo,

ich bin gerade dabei von Filelog auf DBLog umzustellen. Hinsichtlich des Logintervals tut das System aber noch nicht das, was ich möchte.

DBLog läuft im Modus "DbLogSelectionMode  Include".

Mein Device, hier FHT8B, habe ich wie folgt konfiguriert:
DbLogInclude (actuator|battery|day-temp|desired-temp|measured-temp|mode|night-temp|temperature):600
event-min-interval  .*:300
event-on-change-reading .*


Folgende 2 Fragen bestehen für mich:
1. Was ist der Unterschied zwischen event-min-interval (300) und event-min-interval bei DbLogInclude (600)
2. Warum wird trotz min-interval 600 in der Datenbank geloggt - hier der actuator: von 23:06 bis 23:12 sind es doch keine 10min Unterschied?
MariaDB [fhem]> select * from history where TIMESTAMP LIKE "2019-05-07 23%";
+---------------------+--------+------+---------------------+---------------+-------+------+
| TIMESTAMP           | DEVICE | TYPE | EVENT               | READING       | VALUE | UNIT |
+---------------------+--------+------+---------------------+---------------+-------+------+
| 2019-05-07 23:01:05 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
| 2019-05-07 23:06:52 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
| 2019-05-07 23:08:57 | FHT8B  | FHT  | measured-temp: 22.2 | measured-temp | 22.2  | °C   |
| 2019-05-07 23:08:57 | FHT8B  | FHT  | temperature: 22.2   | temperature   | 22.2  | °C   |
| 2019-05-07 23:08:58 | FHT8B  | FHT  | battery: ok         | battery       | ok    |      |
| 2019-05-07 23:12:38 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
| 2019-05-07 23:18:25 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
| 2019-05-07 23:24:11 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
| 2019-05-07 23:26:08 | FHT8B  | FHT  | measured-temp: 22.2 | measured-temp | 22.2  | °C   |
| 2019-05-07 23:26:08 | FHT8B  | FHT  | temperature: 22.2   | temperature   | 22.2  | °C   |
| 2019-05-07 23:26:08 | FHT8B  | FHT  | battery: ok         | battery       | ok    |      |
| 2019-05-07 23:29:58 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
| 2019-05-07 23:35:44 | FHT8B  | FHT  | actuator: 0%        | actuator      | 0     | %    |
+---------------------+--------+------+---------------------+---------------+-------+------+



Ich versuche mal Frage 1 selbst zu beantworten - stimmt dies so?:
event-min-interval: Es wird in jedem Fall ein Event nach 300s erzeugt, auch wenn actuator auf 0 bleibt.
event-on-change-reading: erzeugt in jedem Fall ein Event, wenn sich actuator ändert (z.B. von 0 auf 10)
DbLogInclude loggt alle angegebenen Werte, aber nur dann, wenn sich diese ändern (z.B. actuator von 0 auf 10) oder erst nach 10min, wenn sich der Wert nicht ändert => hier kommt dann Frage 2 ins Spiel. D.h. DbLogInclude reagiert lediglich auf die Events die durch event-min-interval / event-on-change-reading ausgelöst/nicht ausgelöst werden und reagiert dann gemäß dem dort eingestellten min-interval (hier: 600)

Marcus
--
aktuelles FHEM auf einem RPI3 mit
HM-MOD-RPI-PCB, CUL868, nanoCUL (868MHz), Signalduino (433MHz), SignalESP (433 MHz) zur Nutzung folgender Systeme:
FS20/Homematic/IT-Steckdosen/OW/Sonstiges

dad401

#1
Ich habe im DbLog Modul mal eine Debug-Ausgabe eingebaut:

                                          if(($v2[1] && $reading =~ m,^$v2[0]$,) && ($v2[1] =~ m/^(\d+)$/)) {
                              #Regexp matcht und MinIntervall ist angegeben
                              my $lt = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};
                              my $lv = $defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE};
                              Log3($name, 5, "DbLog minintervall-check: now: $now - lasttime: $lt - intervall: $v2[1] - lastvalu
e: $lv - value: $value");
                              $lt = 0 if(!$lt);
                              $lv = "" if(!$lv);

                              if(($now-$lt < $v2[1]) && ($lv eq $value)) {
                                  # innerhalb MinIntervall und LastValue=Value
                                  $DoIt = 0;
                              }


Ausgabe:
2019.05.08 19:52:20 5: DbLog minintervall-check: now: 1557337940.9925 - lasttime:  - intervall: 600 - lastvalue:  - value: 0

Wenn lt und lv (dies sollten die letzten Werte aus der DB? sein) keinen Wert haben, dann kann es nicht funktionieren, oder?

Frage: wieso liefert "$defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};" keinen Wert - ist hier ggf. ein Fehler drin?

P.S.: Modulversion:
$Id: 93_DbLog.pm 19251 2019-04-23 19:59:00Z DS_Starter $ / "4.1.0"   => 17.04.2019
--
aktuelles FHEM auf einem RPI3 mit
HM-MOD-RPI-PCB, CUL868, nanoCUL (868MHz), Signalduino (433MHz), SignalESP (433 MHz) zur Nutzung folgender Systeme:
FS20/Homematic/IT-Steckdosen/OW/Sonstiges

DS_Starter

Hallo Marcus,

bin soeben über deinen schon etwas älteren Beitrag gestolpert.

Zitat
Folgende 2 Fragen bestehen für mich:
1. Was ist der Unterschied zwischen event-min-interval (300) und event-min-interval bei DbLogInclude (600)

event-min-interval (300):
Ein Event wird nur dann generiert, falls seit dem letzten Auftreten des gleichen Events mindestens minInterval Sekunden vergangen sind. Das ist ein allgemeine Einstellung und hat mit DbLog nichts zu tun.

D.h. deine Erklärung "Es wird in jedem Fall ein Event nach 300s erzeugt, auch wenn actuator auf 0 bleibt." ist nicht richtig,
sondern vielmehr werden die normalerweise entstehende Events unterdrückt sofern event-min-interval noch nicht erreicht ist.

Allerdings hast du bei dir auch "event-on-change-reading .*" gesetzt. Das bedeutet "event-min-interval  .*:300" ist wirklungslos (siehe Commandref zu event-min-interval).

event-min-interval bei DbLogInclude (600):
Ist MinIntervall angegeben, so wird der Logeintrag nur dann nicht geloggt, wenn das Intervall noch nicht erreicht und der Wert des Readings sich nicht verändert hat.

ZitatWenn lt und lv (dies sollten die letzten Werte aus der DB? sein) keinen Wert haben, dann kann es nicht funktionieren, oder?
Zunächst kommen diese Werte nicht aus der DB, sondern werden in den jeweiligen Devices temporär gespeichert und ausgelesen.

ZitatFrage: wieso liefert "$defs{$dev_hash->{NAME}}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME};" keinen Wert - ist hier ggf. ein Fehler drin?
Nein, du hättest deine Logausgabe drei Zeilen weiter unten hinter "$lv = "" if(!$lv);" positionieren sollen, dann hättest du die richtigen Angaben ausgegeben bekommen.  ;)


Dessen ungeachtet besteht m.E. tatsächlich ein Problem in deinem konkreten Beispiel. Das Reading actuator sollte nicht vor 600s geloggt werden wenn sich der Wert nicht ändert.
Der Grund liegt hier in dem Wert "0" der dieses Verhalten verursacht.
Ich versuche es zu ändern und stelle dir eine DbLog-Version zum Test zur Verfügung.
Melde mich wieder.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich habe eine korrigierte DbLog-Version in mein contrib geladen.
Download hier:

https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter  (Downloadbutton benutzen)

Nach dem Download FHEM restarten.
Nun sollte auch bei einem Wert "0" (der sich nicht ändert), das Reading erst nach Ablauf von DbLogInclude event-min-interval geloggt werden.

Marcus, bzw. evtl. andere mitlesenden, bitte mal testen. Meine Tests waren positiv.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Schade dass bei über 190 Aufrufen nicht eine einzige Rückinfo kommt.
Version ist nach längerer Beobachtung eingecheckt.

VG
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

dad401

Hallo,

jetzt aber ;-)

Vielen Dank für die Infos und dem Update. Ich werde es testen. Ich kam bisher leider nicht dazu mich wieder im Forum einzuloggen...

Marcus
--
aktuelles FHEM auf einem RPI3 mit
HM-MOD-RPI-PCB, CUL868, nanoCUL (868MHz), Signalduino (433MHz), SignalESP (433 MHz) zur Nutzung folgender Systeme:
FS20/Homematic/IT-Steckdosen/OW/Sonstiges