Gelöst: DbRep: SqlResult enthält nicht den erwarteten Wert

Begonnen von peter_w, 18 Januar 2019, 18:08:06

Vorheriges Thema - Nächstes Thema

peter_w

Hallo zusammen,

ich habe eine MariaDB auf meinem Raspi und möchte via DbRep gerne Daten aus der Datenbank fischen.
Die Abfrage lautet so:

SELECT  DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, open))) AS duration FROM (
    SELECT
        TIMESTAMP, VALUE,DEVICE,
        @open AS open,
        @open := IF(VALUE = "open", TIMESTAMP, NULL) AS prev_open,
        @closed  := IF(VALUE = "closed",  TIMESTAMP, NULL) AS closed
    FROM history WHERE
   DATE(TIMESTAMP) = CURDATE() AND
   DEVICE = "HT_Fensterkontakt" AND
   READING = "state" AND
   (VALUE = "open" OR VALUE = "closed")
   ORDER BY  TIMESTAMP
) AS tmp, (SELECT @open:=NULL, @closed:=NULL) AS vars
WHERE open IS NOT NULL AND closed IS NOT NULL;


Wenn ich die via HeidiSQL direkt an die Datenbank gebe, bekomme ich für den angegebenen Fensterkontakt "HT_Fensterkontakt" den Devicenamen und die Zeit in Sekunden die der Kontakt für den aktuellen Tag offen war.

HT_Fensterkontakt , 324.000 zurück.

Wenn ich das via SQLCmd ausführe, bekomme ich in SqlResult folgendes zurück:
   
{"1":"|"}

lso schaut das DbRep aus:

Internals:
   DATABASE   fhem
   DEF        logdb
   LASTCMD    sqlCmd SELECT DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, open))) AS duration FROM ( SELECT TIMESTAMP, VALUE,DEVICE, @open AS open, @open := IF(VALUE = "open", TIMESTAMP, NULL) AS prev_open, @closed := IF(VALUE = "closed", TIMESTAMP, NULL) AS closed FROM history WHERE DATE(TIMESTAMP) = CURDATE() AND DEVICE = "HT_Fensterkontakt" AND READING = "state" AND (VALUE = "open" OR VALUE = "closed") ORDER BY TIMESTAMP ) AS tmp, (SELECT @open:=NULL, @closed:=NULL) AS vars WHERE open IS NOT NULL AND closed IS NOT NULL;
   MODEL      Client
   NAME       Rep.powerOnTime
   NOTIFYDEV  global,Rep.powerOnTime
   NR         994
   NTFY_ORDER 50-Rep.powerOnTime
   ROLE       Client
   STATE      done
   TYPE       DbRep
   UTF8       1
   VERSION    8.9.9
   .attraggr:
   .attrminint:
   HELPER:
     DBLOGDEVICE logdb
     IDRETRIES  3
     MINTS      2015-03-06 07:10:11
     SQLHIST   
     CV:
       aggregation no
       aggsec     1
       destr      2019-01-18
       dsstr      2019-01-17
       epoch_seconds_end 1547818322
       mestr      01
       msstr      01
       testr      14:32:02
       tsstr      14:32:02
       wdadd      345600
       yestr      2019
       ysstr      2019
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      512
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1547830724.32965
           VALUE      done
   READINGS:
     2019-01-18 17:58:44   SqlResult       {"1":"|"}
     2019-01-18 17:58:44   sqlCmd          SELECT DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, open))) AS duration FROM ( SELECT TIMESTAMP, VALUE,DEVICE, @open AS open, @open := IF(VALUE = "open", TIMESTAMP, NULL) AS prev_open, @closed := IF(VALUE = "closed", TIMESTAMP, NULL) AS closed FROM history WHERE DATE(TIMESTAMP) = CURDATE() AND DEVICE = "HT_Fensterkontakt" AND READING = "state" AND (VALUE = "open" OR VALUE = "closed") ORDER BY TIMESTAMP ) AS tmp, (SELECT @open:=NULL, @closed:=NULL) AS vars WHERE open IS NOT NULL AND closed IS NOT NULL;
     2019-01-18 17:58:44   sqlResultNumRows 1
     2019-01-18 17:58:44   state           done
   dbloghash:
     COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
     CONFIGURATION ./db.conf
     DEF        ./db.conf .*:(measured-temp|desired-temp|desiredTemperature|ValvePosition|valveposition|temperature|humidity|motion|nomotion|noMotion|pct|energy|kWh|power|closed|open|liter|standardabweichung|varianz|fuellhoehe|state|dew|dewpoint|zaehler|presence|DbFileSize|data_length_MB|DataBaseSize|heating-performance|heating-performance-percent|heating-state|MouldTemperature).*
     MODE       asynchronous
     MODEL      MYSQL
     NAME       logdb
     NR         4
     NTFY_ORDER 50-logdb
     PID        10234
     REGEXP     .*:(measured-temp|desired-temp|desiredTemperature|ValvePosition|valveposition|temperature|humidity|motion|nomotion|noMotion|pct|energy|kWh|power|closed|open|liter|standardabweichung|varianz|fuellhoehe|state|dew|dewpoint|zaehler|presence|DbFileSize|data_length_MB|DataBaseSize|heating-performance|heating-performance-percent|heating-state|MouldTemperature).*
     STATE      connected
     TYPE       DbLog
     UTF8       1
     VERSION    3.13.0
     dbconn     mysql:database=fhem;host=localhost;port=3306
     dbuser     fhemuser
     .attraggr:
     .attrminint:
     HELPER:
       COLSET     1
       DEVICECOL  64
       EVENTCOL   512
       OLDSTATE   connected
       READINGCOL 64
       TYPECOL    64
       UNITCOL    32
       VALUECOL   128
     READINGS:
       2019-01-18 17:59:42   CacheUsage      6
       2019-01-18 17:59:41   NextSync        2019-01-18 18:00:11 or if CacheUsage 500 reached
       2019-01-18 17:59:41   background_processing_time 0.4337
       2019-01-18 17:59:41   sql_processing_time 0.3890
       2019-01-18 17:59:41   state           connected
       2018-11-07 11:27:07   userCommand     SELECT sum(round(((data_length + index_length) / 1024 / 1024), 2)) as '' FROM information_schema.TABLES WHERE table_schema = 'DATENBANK'
       2018-11-07 11:27:07   userCommandResult no result
     cache:
       index      12070
       .memcache:
         12065      2019-01-18 17:59:42|EZF_Thermostat_Clima|CUL_HM|ValvePosition: 9|ValvePosition|9|
         12066      2019-01-18 17:59:42|EZF_Thermostat_Clima|CUL_HM|desired-temp: 21.0|desired-temp|21.0|
         12067      2019-01-18 17:59:42|EZF_Thermostat_Clima|CUL_HM|measured-temp: 21.0|measured-temp|21.0|
         12068      2019-01-18 17:59:42|dHeizLeistung|DUMMY|heating-performance-percent: 20.22|heating-performance-percent|20.22|
         12069      2019-01-18 17:59:42|dHeizLeistung|DUMMY|heating-performance-percent: 20.2226310947562|heating-performance-percent|20.2226310947562|
         12070      2019-01-18 17:59:42|dHeizLeistung|DUMMY|heating-state: on|heating-state|on|
Attributes:
   aggregation no
   comment    Öffnungszeit ermitteln
   devStateIcon connected:10px-kreis-gelb .*disconnect:10px-kreis-rot .*done:10px-kreis-gruen
   reading    state
   room       40_Server
   sqlResultFormat json
   verbose    5


In der LOG Datei sehe ich auch keinen Fehler:

2019.01.18 17:58:44.114 4: DbRep Rep.powerOnTime - -------- New selection ---------
2019.01.18 17:58:44.115 4: DbRep Rep.powerOnTime - Command: sqlCmd SELECT DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, open))) AS duration FROM ( SELECT TIMESTAMP, VALUE,DEVICE, @open AS open, @open := IF(VALUE = "open", TIMESTAMP, NULL) AS prev_open, @closed := IF(VALUE = "closed", TIMESTAMP, NULL) AS closed FROM history WHERE DATE(TIMESTAMP) = CURDATE() AND DEVICE = "HT_Fensterkontakt" AND READING = "state" AND (VALUE = "open" OR VALUE = "closed") ORDER BY TIMESTAMP ) AS tmp, (SELECT @open:=NULL, @closed:=NULL) AS vars WHERE open IS NOT NULL AND closed IS NOT NULL;
2019.01.18 17:58:44.116 4: DbRep Rep.powerOnTime - Timestamp begin human readable: not set
2019.01.18 17:58:44.117 4: DbRep Rep.powerOnTime - Timestamp end human readable: not set
2019.01.18 17:58:44.117 4: DbRep Rep.powerOnTime - Aggregation: no
2019.01.18 17:58:44.161 4: DbRep Rep.powerOnTime - SQL execute: SELECT DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, open))) AS duration FROM ( SELECT TIMESTAMP, VALUE,DEVICE, @open AS open, @open := IF(VALUE = "open", TIMESTAMP, NULL) AS prev_open, @closed := IF(VALUE = "closed", TIMESTAMP, NULL) AS closed FROM history WHERE DATE(TIMESTAMP) = CURDATE() AND DEVICE = "HT_Fensterkontakt" AND READING = "state" AND (VALUE = "open" OR VALUE = "closed") ORDER BY TIMESTAMP ) AS tmp, (SELECT @open:=NULL, @closed:=NULL) AS vars WHERE open IS NOT NULL AND closed IS NOT NULL;
2019.01.18 17:58:44.310 4: DbRep Rep.powerOnTime - SQL result:
2019.01.18 17:58:44.319 5: DbRep Rep.powerOnTime - SQL result decoded: |


Da die SQL Abfrage in HeidiSQL ein Ergebnis liefert und einfache Abfragen auch funktionieren frage ich mich ob in meiner Abfrage vielleicht irgendeine Zeichenkette ist die von DbRep aussortiert oder geändert wird und die ich escapen müsste ???

Danke
   Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

DS_Starter

Hallo Peter,

ich habe jetzt versucht dein Statement bei mir im phpMyAdmin (erstmal nicht DbRep) nachzubilden.

Ich bekomme mit:


SELECT  DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, opened))) AS duration FROM (
    SELECT
        TIMESTAMP, VALUE,DEVICE,
        @opened AS opened,
        @opened := IF(VALUE = "opened", TIMESTAMP, NULL) AS prev_open,
        @closed  := IF(VALUE = "closed",  TIMESTAMP, NULL) AS closed
    FROM history WHERE
   DATE(TIMESTAMP) = CURDATE() AND
   DEVICE = "MelderGW1" AND
   READING = "cover" AND
   (VALUE = "opened" OR VALUE = "closed")
   ORDER BY  TIMESTAMP
) AS tmp, (SELECT @open:=NULL, @closed:=NULL) AS vars
WHERE opened IS NOT NULL AND closed IS NOT NULL


ebenfalls NULL-Ergebnisse, obwohl es natürlich das Device "MelderGW1" mit dem Reading "cover" mit dem Wert opened, closed am heutigen Tag in der DB gibt.
Kann ich jetzt nicht sagen wo das Problem liegen könnte.

Grüße
Heiko
ESXi@NUC+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

peter_w

Hallo Heiko, danke für die Unterstützung.
Mittlerweile bin einen Schritt weiter.
Wenn ich HeidiSQL neu starte und die Abfrage dann starte kommt da auch nur eine leere Zeile als Ergebnis.
Die Nächste Abfrage funktioniert dann.

Die verwendeten User-Defined Variables werden nicht über eine Session gespeichert.
Wenn ich in HeidiSQL mehrere Abfragen mache bleibt alles in einer Session, bei DbRep wird wohl jede Abfrage mit einer neuen Session gestartet.

Leider bin ich nicht so SQL sattelfest um eine Lösung dafür zu finden oder das Problem zu verstehen das es wohl beim 1. Durchlauf der Session gibt :-(


Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

DS_Starter

Das die Abfragen immer in einer neuen Session passieren ist richtig.
Innerhalb des Moduls gibt es ähnliche Fälle die ich z.B. mit "set \@V:= 0, \@diff:= 0, \@diffTotal:= 0, \@RB:= 1;" initialisiere bevor ich die eigentliche Abfrage absetze.
Bin jetzt auch nicht der SQL-Experte.

Vielleicht wäre es möglich mit einem Schlüsselwort zu arbeiten, z.B. VAR:"@V:= 0,diffTotal:= 0,@RB:= 1"; SELECT  DEVICE ,SUM(TIME_TO_SEC(TIMEDIFF(closed, opened)))....

Wenn soetwas im sqlCmd vorgefunden wird, könnte ich intern die Variablen initialisieren die in der Session dann vorhanden wären. Ob das wirklich so klappen würde und nicht woanders wieder Probleme verursacht kann ich gerade auch nicht sicher sagen.
ESXi@NUC+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

peter_w

Hallo Heiko,

Ich habe die Abfrage mal auf das kleinste Teil reduziert wo es Probleme gibt:

SELECT
        TIMESTAMP, VALUE,DEVICE,
        @open AS open,
        @open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,
        @closed  := IF(VALUE = 'closed',  TIMESTAMP, NULL) AS closed
    FROM history WHERE
   DATE(TIMESTAMP) = CURDATE() AND
   DEVICE = "HT_Fensterkontakt" AND
   READING = "state" AND
   (VALUE = "open" OR VALUE = "closed")
   ORDER BY  TIMESTAMP;


Die Lösung scheint zu sein, ein  SET  @open:=NULL, @closed:=NULL; davor zu stellen, das hilft zumindest bei meiner Abfrage in HeidiSQL.

Wenn ich dann aber
SET  @open:=NULL, @closed:=NULL;
SELECT
        TIMESTAMP, VALUE,DEVICE,
        @open AS open,
        @open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,
        @closed  := IF(VALUE = 'closed',  TIMESTAMP, NULL) AS closed
    FROM history WHERE
   DATE(TIMESTAMP) = CURDATE() AND
   DEVICE = "HT_Fensterkontakt" AND
   READING = "state" AND
   (VALUE = "open" OR VALUE = "closed")
   ORDER BY  TIMESTAMP;

in DbRep ausführen lasse, dann gibt es eine Fehlermeldung:
2019.01.18 23:45:51.057 4: DbRep Rep.powerOnTime - -------- New selection ---------
2019.01.18 23:45:51.058 4: DbRep Rep.powerOnTime - Command: sqlCmd SET @open:=NULL, @closed:=NULL; SELECT  TIMESTAMP, VALUE,DEVICE,  @open AS open,  @open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,  @closed := IF(VALUE = 'closed', TIMESTAMP, NULL) AS closed  FROM history WHERE   DATE(TIMESTAMP) = CURDATE() AND   DEVICE = "HT_Fensterkontakt" AND   READING = "state" AND   (VALUE = "open" OR VALUE = "closed")   ORDER BY TIMESTAMP;
2019.01.18 23:45:51.060 4: DbRep Rep.powerOnTime - Timestamp begin human readable: not set
2019.01.18 23:45:51.062 4: DbRep Rep.powerOnTime - Timestamp end human readable: not set
2019.01.18 23:45:51.063 4: DbRep Rep.powerOnTime - Aggregation: no
2019.01.18 23:45:51.151 4: DbRep Rep.powerOnTime - SQL execute: SET @open:=NULL, @closed:=NULL; SELECT  TIMESTAMP, VALUE,DEVICE,  @open AS open,  @open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,  @closed := IF(VALUE = 'closed', TIMESTAMP, NULL) AS closed  FROM history WHERE   DATE(TIMESTAMP) = CURDATE() AND   DEVICE = "HT_Fensterkontakt" AND   READING = "state" AND   (VALUE = "open" OR VALUE = "closed")   ORDER BY TIMESTAMP;
2019.01.18 23:45:51.153 2: DbRep Rep.powerOnTime - ERROR - DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT  TIMESTAMP, VALUE,DEVICE,  @open AS open,  @open := IF(VALUE = 'open', TI' at line 1 at ./FHEM/93_DbRep.pm line 5575.


Wenn ich den SQL Teil aus der Fehlermeldung in HeidiSQL kopiere funktioniert die Abfrage.

Gruß
    Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

DS_Starter

Guten Morgen,

genau diesen Ansatz meinte ich.
Momntan kann es noch nicht funktionieren, weil ich das sqlCmd Kommando erst noch für dein solche Parameterübergabe vorbereiten muss.
Ich mache das mal und stelle dir eine DbRep-Version zum Testen bereit.

Grüße
Heiko
ESXi@NUC+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

Hallo Peter,

habe DbRep angepasst sodass nun SQL Sessionvariablen in der oben beschriebenen Form übergeben werden können.

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

Probiers mal bitte aus. Also:


sqlCmd SET  @open:=NULL, @closed:=NULL;
SELECT
        TIMESTAMP, VALUE,DEVICE,
        @open AS open,
        @open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,
        @closed  := IF(VALUE = 'closed',  TIMESTAMP, NULL) AS closed
    FROM history WHERE
   DATE(TIMESTAMP) = CURDATE() AND
   DEVICE = "HT_Fensterkontakt" AND
   READING = "state" AND
   (VALUE = "open" OR VALUE = "closed")
   ORDER BY  TIMESTAMP;


Mit verbose 4 siehst du im Log dass/wie die Variablen vor dem Select gesetzt werden.

Grüße
Heiko
ESXi@NUC+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

peter_w

Hallo Heiko,

vielen Dank es funktioniert !!!!
Ich werde das jetzt so einbauen, dass die Abfrage beim schließen eines Fensters durchgeführt wird und die Fensterkontakte darüber ein neues Reading mit der Öffnungszeit bekommen.

Wenn das Läuft stelle ich die komplette Lösung mal vor.

Vielen Dank für deine Unterstützung !

Gruß
    Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

peter_w

Hallo Heiko,

es gibt noch eine Unschönheit. Wenn man den SQL in der Oberfläche ausführt und das 2x hintereinander, dann wird der gespeicherten Abfrage der Teil SET  @open:=NULL, @closed:=NULL; vergessen und die Abfrage schlägt deshalb fehl.

Gruß
    Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

DS_Starter

Zitates gibt noch eine Unschönheit.
Ja ich weiß. Wollte nur erstmal schauen ob es prinzipiell funktioniert.

Ich programiere es noch aus, aktualisiere die Commandref und stelle dir das Modul nochmal zum Test zur Verfügung.
Wenn ales ok ist, checke ich die neue Version ein.
ESXi@NUC+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

Hallo Peter,

habe jetzt alles komplett fertig gestellt und die V.8.10.0 wieder nach contrib geladen.
Schau mal ob jetzt alles wie gewünscht klappt.

Ich freue mich auf deine komplette Lösungsbeschreibung und würde sie auch gerne ins DbRep-Wiki übernehmen als funktionales Beispiel mit SQL Session Variablen.

Grüße
Heiko
ESXi@NUC+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

peter_w

Hallo Heiko,

läuft alles prima. In der Oberfläche klappt es auch mit der Wiederholung des SQL Kommandos.
Wenn deine Änderung im "normalen"  Update ist, dann sag bitte mal bescheid dann stell ich meine Lösung hier vor.
Natürlich kannst du das dann gerne in den DbRep-Wiki packen.

Vielen Dank nochmal für die schnelle Erweiterung !

Gruß
    Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

DS_Starter

Guten Morgen Peter,

na das liest sich doch gut  :)
Ich habe die Änderung soeben eingecheckt und ist dann morgen früh im Regelupdate vorhanden.
Wer möchte, kann sich das geänderte Modul schon jetzt aus dem SVN ziehen.

Grüße
Heiko
ESXi@NUC+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

peter_w

Hallo Heiko,

ich habe heute Morgen nochmal einen Blick ins LOG geworfen:

WindowClosedNty ist das Notify mit dem ich die Funktion SwitchEvent() aufrufe. Das Rep.powerOnTime DbRep Device wird nur für diesen Zweck benutzt. 

2019.01.20 10:55:39.833 5: Triggering WindowClosedNty
2019.01.20 10:55:39.834 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:39.884 5: Triggering WindowClosedNty
2019.01.20 10:55:39.885 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:39.889 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11332 Timeout: process terminated
2019.01.20 10:55:39.952 5: Triggering WindowClosedNty
2019.01.20 10:55:39.953 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:39.958 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11333 Timeout: process terminated
2019.01.20 10:55:40.028 5: Triggering WindowClosedNty
2019.01.20 10:55:40.028 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.030 5: SwitchEvent start query: SET @topen = NULL,@closed = NULL, @popen = NULL;; SELECT  DEVICE ,SUM(TIMEDIFF(tclosed, topen)) AS duration FROM ( SELECT TIMESTAMP, VALUE, DEVICE, @topen   := @popen AS topen, @closed  := IF(VALUE = "closed",  TIMESTAMP, NULL) AS tclosed, @popen   := IF(VALUE = "open", TIMESTAMP, NULL) AS prev_open FROM history WHERE DATE(TIMESTAMP) = CURDATE() AND DEVICE = "AZ_Fensterkontakt" AND READING = "state" AND  (VALUE = "open" OR VALUE = "closed") ORDER BY  TIMESTAMP ) AS tmp
2019.01.20 10:55:40.033 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11334 Timeout: process terminated
2019.01.20 10:55:40.124 5: Triggering WindowClosedNty
2019.01.20 10:55:40.125 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.129 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11335 Timeout: process terminated
2019.01.20 10:55:40.189 5: Triggering WindowClosedNty
2019.01.20 10:55:40.190 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.194 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11336 Timeout: process terminated
2019.01.20 10:55:40.265 5: Triggering WindowClosedNty
2019.01.20 10:55:40.265 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.269 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11337 Timeout: process terminated
2019.01.20 10:55:40.339 5: Triggering WindowClosedNty
2019.01.20 10:55:40.339 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.343 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11338 Timeout: process terminated
2019.01.20 10:55:40.413 5: Triggering WindowClosedNty
2019.01.20 10:55:40.414 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.418 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11339 Timeout: process terminated
2019.01.20 10:55:40.478 5: Triggering WindowClosedNty
2019.01.20 10:55:40.479 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.483 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11340 Timeout: process terminated
2019.01.20 10:55:40.552 5: Triggering WindowClosedNty
2019.01.20 10:55:40.553 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 10:55:40.557 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11341 Timeout: process terminated
2019.01.20 10:55:40.839 1: SwitchQueryResult SqlResult detected.
2019.01.20 10:55:40.840 1: SwitchQueryResult splitted result: SZ_Fensterkontakt 406.000000
2019.01.20 10:56:25.981 1: [Freezemon] myFreezemon: possible freeze starting at 10:55:54, delay is 31.98 possibly caused by: tmr-Calendar_PollChild(Kalender_fhem)
2019.01.20 11:00:34.314 5: Triggering WindowClosedNty
2019.01.20 11:00:34.315 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:34.391 5: Triggering WindowClosedNty
2019.01.20 11:00:34.392 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:34.396 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11375 Timeout: process terminated
2019.01.20 11:00:34.575 5: Triggering WindowClosedNty
2019.01.20 11:00:34.575 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:34.579 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11376 Timeout: process terminated
2019.01.20 11:00:34.685 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:34.685 1: SwitchQueryResult splitted result: BDL_Fensterkontakt 714.000000
2019.01.20 11:00:35.210 5: Triggering WindowClosedNty
2019.01.20 11:00:35.211 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:35.335 5: Triggering WindowClosedNty
2019.01.20 11:00:35.336 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:35.340 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11378 Timeout: process terminated
2019.01.20 11:00:35.399 5: Triggering WindowClosedNty
2019.01.20 11:00:35.399 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:35.403 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11379 Timeout: process terminated
2019.01.20 11:00:35.513 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:35.513 1: SwitchQueryResult splitted result: BD_Fensterkontakt 731.000000
2019.01.20 11:00:35.564 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:35.565 1: SwitchQueryResult splitted result:  0
2019.01.20 11:00:35.966 5: Triggering WindowClosedNty
2019.01.20 11:00:35.967 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:36.085 5: Triggering WindowClosedNty
2019.01.20 11:00:36.086 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:36.092 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11381 Timeout: process terminated
2019.01.20 11:00:36.221 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:36.221 1: SwitchQueryResult splitted result: BD_Fensterkontakt 731.000000
2019.01.20 11:00:37.099 5: Triggering WindowClosedNty
2019.01.20 11:00:37.099 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:37.156 5: Triggering WindowClosedNty
2019.01.20 11:00:37.156 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:37.160 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11383 Timeout: process terminated
2019.01.20 11:00:37.252 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:37.252 1: SwitchQueryResult splitted result:  0
2019.01.20 11:00:52.770 5: Triggering WindowClosedNty
2019.01.20 11:00:52.770 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:52.851 5: Triggering WindowClosedNty
2019.01.20 11:00:52.851 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:52.855 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11385 Timeout: process terminated
2019.01.20 11:00:52.970 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:52.970 1: SwitchQueryResult splitted result: WZ_Fensterkontakt 0
2019.01.20 11:00:53.020 5: Triggering WindowClosedNty
2019.01.20 11:00:53.021 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:53.091 5: Triggering WindowClosedNty
2019.01.20 11:00:53.092 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:53.096 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11387 Timeout: process terminated
2019.01.20 11:00:53.201 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:53.202 1: SwitchQueryResult splitted result: WZ_Fensterkontakt 0
2019.01.20 11:00:53.292 5: Triggering WindowClosedNty
2019.01.20 11:00:53.292 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:53.363 5: Triggering WindowClosedNty
2019.01.20 11:00:53.364 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:53.368 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11389 Timeout: process terminated
2019.01.20 11:00:53.480 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:53.481 1: SwitchQueryResult splitted result: WZ_Fensterkontakt 0
2019.01.20 11:00:53.919 5: Triggering WindowClosedNty
2019.01.20 11:00:53.920 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:53.989 5: Triggering WindowClosedNty
2019.01.20 11:00:53.990 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:00:53.994 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11391 Timeout: process terminated
2019.01.20 11:00:54.107 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:00:54.107 1: SwitchQueryResult splitted result: WZ_Fensterkontakt 0
2019.01.20 11:01:01.806 5: Triggering WindowClosedNty
2019.01.20 11:01:01.807 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:01.905 5: Triggering WindowClosedNty
2019.01.20 11:01:01.905 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:01.910 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11394 Timeout: process terminated
2019.01.20 11:01:02.098 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:01:02.098 1: SwitchQueryResult splitted result:  0
2019.01.20 11:01:02.359 5: Triggering WindowClosedNty
2019.01.20 11:01:02.359 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:02.409 5: Triggering WindowClosedNty
2019.01.20 11:01:02.409 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:02.414 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11396 Timeout: process terminated
2019.01.20 11:01:02.504 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:01:02.505 1: SwitchQueryResult splitted result:  0
2019.01.20 11:01:02.718 5: Triggering WindowClosedNty
2019.01.20 11:01:02.718 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:02.814 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:01:02.814 1: SwitchQueryResult splitted result:  0
2019.01.20 11:01:03.506 5: Triggering WindowClosedNty
2019.01.20 11:01:03.507 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:03.625 5: Triggering WindowClosedNty
2019.01.20 11:01:03.626 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:03.630 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11400 Timeout: process terminated
2019.01.20 11:01:03.748 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:01:03.749 1: SwitchQueryResult splitted result:  0
2019.01.20 11:01:19.952 5: Triggering WindowClosedNty
2019.01.20 11:01:19.952 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:20.002 5: Triggering WindowClosedNty
2019.01.20 11:01:20.003 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:20.007 1: DbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11402 Timeout: process terminated
2019.01.20 11:01:20.224 5: Triggering WindowClosedNty
2019.01.20 11:01:20.225 4: WindowClosedNty exec {SwitchEvent($NAME,"dummy",$EVENT)}
2019.01.20 11:01:20.293 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:01:20.294 1: SwitchQueryResult splitted result:  0
2019.01.20 11:01:20.329 1: SwitchQueryResult SqlResult detected.
2019.01.20 11:01:20.329 1: SwitchQueryResult splitted result: WC_Fensterkontakt 0


es scheint weiter alles zu funktionieren. Ich denke mal das hat nichts mit deiner Änderung zu tun, aber du kannst ja mal einen Blick darauf werfen ob dir das was sagt.

Gruß Peter
Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

DS_Starter

#14
Hallo Peter,

du meinst die timeouts ?

ZitatDbRep Rep.powerOnTime -> BlockingCall sqlCmd_DoParse pid:11341 Timeout: process terminated

Die kommen, wenn die ausgeführte sqlCmd-Routine nicht nach der durch das Attribut timeout definierte Zeit fertig wird. Allerdings ist diese Zeit per default 86400 Sekunden = 1 Tag !

Was mich völlig irritiert ... warum rufst du denn die WindowClosedNty exec- Routine aller paar Millisekunden auf ? Wird das sqlCmd durch diese Routine dann jedesmal auch aufgerufen ?
ESXi@NUC+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