Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)

Begonnen von DS_Starter, 19 Mai 2016, 22:52:13

Vorheriges Thema - Nächstes Thema

ch.eick

Zitat von: DS_Starter am 14 Januar 2022, 13:28:28
Hab ich nicht ... nur blöd formatiert gehabt.  :)
Habs oben geändert
Super danke für die Info, also wäre es ne menge unnötiger Mehraufwand.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

adrian

Hallo zusammen,
mein DbRep Device wird einmal die Woche ausgeführt um einen dumpMySQL auszuführen.
In dem Attribut "executeAfterProc" habe ich den Fhembefehl "backup" eingetragen.
Das lief auch alles tadellos.
Seit dem letzten Update von DbLog ist der Befehl "reducelogNBL" nun nicht mehr über DDbLog auszuführen, sondern über DbRep.
Hab das auch unmittelbar angepasst, aber nicht bedacht, dass nun in DbRep das Atttibut "backup" gesetzt ist.
Das heisst nun, dass nicht nur am Wochenende nach dem dumpSQL das backup ausgeführt wird, nein auch täglich nach jedem reducelog.

Gibt es eine Möglichkeit den set-Befehlen unterschiedliche executeAfterProc mitzugeben?
Oder wie würdet ihr das machen?

Danke und einen schönen Sonntag
Adrian

DS_Starter

Hallo Adrian,

für die Aufgaben dumpMySQL  bzw. reducelog benutzt du zwei unterschiedliche DbRep Devices.
Du kopierst dir dein bestehendes Device einfach und in dem kopierten Device löscht du das Attribut executeAfterProc.

Man kann sich eine beliebige Anzahl DbReps für die unterschiedlichsten Aufgaben anlegen und entsprechend parametrisieren.

LG,
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 Christian, @all,

ich habe die Arbeitsweise des Setter sqlCmdHistory angefangen umzubauen.
Für den User ergibt sich folgende Feature.
Im Setter sqlCmdHistory gibt es nun einen neuen Punkt "___list_sqlhistory___".

Mit Auswahl dieses Eintrags werden die Einträge des SQL History mit einem Key und der ursprünglichen Formatierung
angezeigt, z.B.


4 => SET @TS = DATE_FORMAT(NOW(),'_%Y_%m_%d');

SET @FOLDER = '/sds1/backup/';
SET @PREFIX = 'export';
SET @EXT = '.csv';

SET @CMD = CONCAT(" SELECT *
FROM `fhemtest`.`history`
WHERE `DEVICE`='SMA_Energymeter' AND TIMESTAMP > DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY)
INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT,"'
FIELDS ENCLOSED BY '\"'
TERMINATED BY ';;'
ESCAPED BY '\"'","
LINES TERMINATED BY '\r\n';;
");

PREPARE statement FROM @CMD;

EXECUTE statement;
3 => select DEVICE,count(*) from history where TIMESTAMP >= §timestamp_begin§ group by DEVICE;
2 => SET @TS = DATE_FORMAT(NOW(),'_%Y_%m_%d'); SET @FOLDER = '/sds1/backup/'; SET @PREFIX = 'export'; SET @EXT = '.csv'; SET @CMD = CONCAT(" SELECT * FROM `fhemtest`.`history` WHERE `DEVICE`='SMA_Energymeter' AND TIMESTAMP > DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY) INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT,"' FIELDS ENCLOSED BY '\"' TERMINATED BY ';;' ESCAPED BY '\"'"," LINES TERMINATED BY '\r\n';; "); PREPARE statement FROM @CMD; EXECUTE statement;
1 => select count(*) from current;


Nun kann man das Statement mit dem Key "4" auch ausführen indem man sqlCmd folgendes aufruft:


set ... sqlCmd ckey:4


Zur Zeit ist es noch so, dass bei einem Restart die Zuordung Key-> Statement nicht erhalten bleibt.
Daran arbeite ich noch.

Die Version liegt zum Test in meinem contrib.

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

Nun bleibt die Zuordung Key-> Statement auch bei einem Restart erhalten.
Damit zeigt die Adressierung mit

    set ... sqlCmd ckey:X

immer auf das gleiche Statement. Zumindest solange die History nicht gepurged wird oder wegen Überschreitung von sqlCmdHistoryLength aus dem Cache rausgeschoben wird.

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

ch.eick

Zitat von: DS_Starter am 16 Januar 2022, 20:38:37
Nun bleibt die Zuordung Key-> Statement auch bei einem Restart erhalten.
Damit zeigt die Adressierung mit

    set ... sqlCmd ckey:X

immer auf das gleiche Statement. Zumindest solange die History nicht gepurged wird oder wegen Überschreitung von sqlCmdHistoryLength aus dem Cache rausgeschoben wird.

-> contrib
Bei dem Rausschieben würde ich jetzt aber auch interpretieren, dass sich die Nummerierung bei einem zusätzlichen sqlcmd auch verschiebt.
Liege ich da jetzt richtig oder falsch?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Sobald ein Statement in die History aufgenommen wird, bekommt es einen Key.
Den behält es solange es sich in der History befindet, auch beim restart und einlesen des Cachefile.
Neue Statements bekommen einen nächst höheren Key. Wenn sqlCmdHistoryLength überschritten wird, wird das älteste Statement (mit dem niedrigsten Key) aus der Historie gelöscht.
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

#1582
Jetzt bleibt die Formatierung des SQL im Cache auch nach einem Restart von FHEM erhalten.

Das Attr sqlCmdHistoryLength ist nun ein Schieberegler von 0 ... 200.
Sollte ausreichen.

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

Neue Version ist eingecheckt und morgen früh im Regelupdate enthalten.
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

Für das Kommando sqlCmdHistory ist nun folgende Funktionalität hinzugekommen:

___purge_sqlhistory___    : löscht den History Cache
___list_sqlhistory___    : zeigt die aktuell im Cache vorhandenen SQL-Statements incl. ihrem Cache Key (ckey)
___restore_sqlhistory___    : macht ein zuvor ausgeführtes "___purge_sqlhistory___" rückgängig

sqlCmdHistory wird angezeigt sobald das Attr sqlCmdHistoryLength (ungleich 0) gesetzt ist.
Dadurch sind die oben angegebenen Aktivitäten sofort verfügbar auch wenn der SQL Cache leer ist.

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

Nochmal eine Erweiterung/Änderung...

...
Der SQL Cache wird beim Beenden von FHEM automatisch gesichert und beim Start des Systems wiederhergestellt. Mit den nachfolgenden Einträgen werden spezielle Funktionen ausgeführt:

    ___purge_sqlhistory___    : löscht den History Cache
    ___list_sqlhistory___    : zeigt die aktuell im Cache vorhandenen SQL-Statements incl. ihrem Cache Key (ckey)
    ___save_sqlhistory___    : sichert den History Cache manuell
    ___restore_sqlhistory___    : stellt die letzte Sicherung des History Cache wieder her
...

Das History File wird nicht bei jeder Änderung gespeichert was für Nutzer der configDB von Vorteil ist.
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

ch.eick

Na jetzt überschlagen sich ja die Änderungen für meinen Wunsch :-)
Zum Glück hatte ich noch keine Zeit zum Testen... Das nimmt ja Zustände an wie bei mir, wenn ich mal einen Lauf habe :-) :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Ja manchmal läufts einfach und es kommen Ideen beim Testen und Durchdenken.  ;)
Passt aber weil ich grad den Code im Modul straffe/modernisiere.
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

ch.eick

Hi Heiko,
ich bekomme seit dem letzten DbRep update eine Division durch null, die ich mir nicht erklären kann.

Das ist das innere SELECT, was ein richtiges Ergebnis liefert und ohne Fehler läuft.

Internals:
   DATABASE   fhem
   DEF        LogDB
   FUUID      5f3a5796-f33f-61a8-e1ac-2438b1322f15e59a
   FVERSION   93_DbRep.pm:v8.46.12-s25411/2022-01-02
   LASTCMD    sqlCmd SELECT TIMESTAMP,DEVICE,READING,VALUE FROM ( SELECT DATE_ADD(CURDATE(),INTERVAL t2.HOUR HOUR) AS TIMESTAMP, t2.DEVICE, @readingname AS READING, cast(if(avg(t2.FACTOR) > 1.6, 1.6, avg(t2.FACTOR) ) AS DECIMAL(2,1)) AS VALUE FROM ( SELECT * FROM ( SELECT t1.TIMESTAMP, t1.HOUR, t1.DEVICE, t1.READING, t1.VALUE, if(@diff = 0,NULL, @temp:=cast((t1.VALUE-@diff) AS DECIMAL(6,2))) AS DIFF, cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr) AS DECIMAL(4,1)) AS FACTOR, @diff:=t1.VALUE AS curr_V FROM ( SELECT h.TIMESTAMP, date(h.TIMESTAMP) AS DATE, hour(h.TIMESTAMP) AS HOUR, h.DEVICE, h.READING, h.VALUE FROM history AS h WHERE h.DEVICE = @device AND (h.READING = @reading1 OR h.READING = @reading2) AND h.TIMESTAMP >= DATE_SUB(DATE(now()),INTERVAL @days DAY) AND h.TIMESTAMP <= CURDATE() AND MINUTE(h.TIMESTAMP) = 0 AND h.VALUE >= 0 GROUP BY DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP )t1 )tx WHERE READING != @reading2 AND HOUR > 6 )t2 GROUP BY t2.HOUR,t2.DEVICE )t3 WHERE t3.VALUE != 0;
   MODEL      Client
   NAME       LogDBRep_PV_Forecast_SQL
   NOTIFYDEV  global,LogDBRep_PV_Forecast_SQL
   NR         432
   NTFY_ORDER 50-LogDBRep_PV_Forecast_SQL
   ROLE       Client
   STATE      done
   TYPE       DbRep
   UTF8       1
   HELPER:
     DBLOGDEVICE LogDB
     GRANTS     USAGE,ALL PRIVILEGES
     IDRETRIES  2
     MINTS      2019-04-03 00:23:42
     PACKAGE    main
     SQLHIST    SELECT&nbsp;TIMESTAMP,DEVICE,READING,VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE(),INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP,t2.DEVICE,@readingname&nbsp;AS&nbsp;READING,cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6,1.6,avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2,1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP,t1.HOUR,t1.DEVICE,t1.READING,t1.VALUE,if(@diff&nbsp;=&nbsp;0,NULL,@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6,2)))&nbsp;AS&nbsp;DIFF,cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4,1))&nbsp;AS&nbsp;FACTOR,@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP,date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE,hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR,h.DEVICE,h.READING,h.VALUE&nbsp;FROM&nbsp;history&nbsp;AS&nbsp;h&nbsp;WHERE&nbsp;h.DEVICE&nbsp;=&nbsp;@device&nbsp;AND&nbsp;(h.READING&nbsp;=&nbsp;@reading1&nbsp;OR&nbsp;h.READING&nbsp;=&nbsp;@reading2)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;>=&nbsp;DATE_SUB(DATE(now()),INTERVAL&nbsp;@days&nbsp;DAY)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;<=&nbsp;CURDATE()&nbsp;AND&nbsp;MINUTE(h.TIMESTAMP)&nbsp;=&nbsp;0&nbsp;AND&nbsp;h.VALUE&nbsp;>=&nbsp;0&nbsp;GROUP&nbsp;BY&nbsp;DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP&nbsp;)t1&nbsp;)tx&nbsp;WHERE&nbsp;READING&nbsp;!=&nbsp;@reading2&nbsp;AND&nbsp;HOUR&nbsp;>&nbsp;6&nbsp;)t2&nbsp;GROUP&nbsp;BY&nbsp;t2.HOUR,t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;order&nbsp;by&nbsp;TIMESTAMP;,SELECT&nbsp;TIMESTAMP,DEVICE,READING,VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE(),INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP,t2.DEVICE,@readingname&nbsp;AS&nbsp;READING,cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6,1.6,avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2,1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP,t1.HOUR,t1.DEVICE,t1.READING,t1.VALUE,if(@diff&nbsp;=&nbsp;0,NULL,@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6,2)))&nbsp;AS&nbsp;DIFF,cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4,1))&nbsp;AS&nbsp;FACTOR,@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP,date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE,hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR,h.DEVICE,h.READING,h.VALUE&nbsp;FROM&nbsp;history&nbsp;AS&nbsp;h&nbsp;WHERE&nbsp;h.DEVICE&nbsp;=&nbsp;@device&nbsp;AND&nbsp;(h.READING&nbsp;=&nbsp;@reading1&nbsp;OR&nbsp;h.READING&nbsp;=&nbsp;@reading2)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;>=&nbsp;DATE_SUB(DATE(now()),INTERVAL&nbsp;@days&nbsp;DAY)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;<=&nbsp;CURDATE()&nbsp;AND&nbsp;MINUTE(h.TIMESTAMP)&nbsp;=&nbsp;0&nbsp;AND&nbsp;h.VALUE&nbsp;>=&nbsp;0&nbsp;GROUP&nbsp;BY&nbsp;DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP&nbsp;)t1&nbsp;)tx&nbsp;WHERE&nbsp;READING&nbsp;!=&nbsp;@reading2&nbsp;AND&nbsp;HOUR&nbsp;>&nbsp;6&nbsp;)t2&nbsp;GROUP&nbsp;BY&nbsp;t2.HOUR,t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0;,SELECT&nbsp;TIMESTAMP,DEVICE,READING,VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE(),INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP,t2.DEVICE,@readingname&nbsp;AS&nbsp;READING,cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6,1.6,avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2,1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP,t1.HOUR,t1.DEVICE,t1.READING,t1.VALUE,if(@diff&nbsp;=&nbsp;0,NULL,@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6,2)))&nbsp;AS&nbsp;DIFF,cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4,1))&nbsp;AS&nbsp;FACTOR,@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP,date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE,hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR,h.DEVICE,h.READING,h.VALUE&nbsp;FROM&nbsp;history&nbsp;AS&nbsp;h&nbsp;WHERE&nbsp;h.DEVICE&nbsp;=&nbsp;@device&nbsp;AND&nbsp;(h.READING&nbsp;=&nbsp;@reading1&nbsp;OR&nbsp;h.READING&nbsp;=&nbsp;@reading2)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;>=&nbsp;DATE_SUB(DATE(now()),INTERVAL&nbsp;@days&nbsp;DAY)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;<=&nbsp;CURDATE()&nbsp;AND&nbsp;MINUTE(h.TIMESTAMP)&nbsp;=&nbsp;0&nbsp;AND&nbsp;h.VALUE&nbsp;>=&nbsp;0&nbsp;GROUP&nbsp;BY&nbsp;DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP&nbsp;)t1&nbsp;)tx&nbsp;WHERE&nbsp;READING&nbsp;!=&nbsp;@reading2&nbsp;AND&nbsp;HOUR&nbsp;>&nbsp;6&nbsp;)t2&nbsp;GROUP&nbsp;BY&nbsp;t2.HOUR,t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;;,select&nbsp;*&nbsp;FROM&nbsp;(SELECT&nbsp;TIMESTAMP,READING,cast(VALUE/1000&nbsp;AS&nbsp;decimal(6))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;history&nbsp;WHERE&nbsp;DEVICE=@device&nbsp;AND&nbsp;READING&nbsp;LIKE&nbsp;'Statistic_%Year'&nbsp;AND&nbsp;READING&nbsp;NOT&nbsp;LIKE&nbsp;'%Autarky%'&nbsp;and&nbsp;READING&nbsp;NOT&nbsp;LIKE&nbsp;'%Rate%'&nbsp;AND&nbsp;TIMESTAMP>STR_TO_DATE(CONCAT(YEAR(CURDATE())-1,'-12-31'),'%Y-%m-%d')&nbsp;AND&nbsp;TIMESTAMP<STR_TO_DATE(CONCAT(YEAR(CURDATE()),'-01-01'),'%Y-%m-%d')&nbsp;order&nbsp;by&nbsp;TIMESTAMP&nbsp;desc&nbsp;limit&nbsp;15&nbsp;)&nbsp;AS&nbsp;x1&nbsp;GROUP&nbsp;BY&nbsp;x1.READING&nbsp;;,DELETE&nbsp;FROM&nbsp;history&nbsp;WHERE&nbsp;DEVICE='PV_1'&nbsp;AND&nbsp;READING='Solar_Calculation_fc0'&nbsp;AND&nbsp;TIMESTAMP>='2021-02-28&nbsp;07:00:00'
     VERSION    8.46.12
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      0
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2022-01-27 20:01:59   SqlResultRow_01 TIMESTAMP|DEVICE|READING|VALUE
     2022-01-27 20:01:59   SqlResultRow_02 2022-01-27 09:00:00|WR_1|Solar_Correction_Faktor_auto|1.6
     2022-01-27 20:01:59   SqlResultRow_03 2022-01-27 10:00:00|WR_1|Solar_Correction_Faktor_auto|1.6
     2022-01-27 20:01:59   SqlResultRow_04 2022-01-27 11:00:00|WR_1|Solar_Correction_Faktor_auto|1.4
     2022-01-27 20:01:59   SqlResultRow_05 2022-01-27 12:00:00|WR_1|Solar_Correction_Faktor_auto|0.9
     2022-01-27 20:01:59   SqlResultRow_06 2022-01-27 13:00:00|WR_1|Solar_Correction_Faktor_auto|0.8
     2022-01-27 20:01:59   SqlResultRow_07 2022-01-27 14:00:00|WR_1|Solar_Correction_Faktor_auto|0.7
     2022-01-27 20:01:59   SqlResultRow_08 2022-01-27 15:00:00|WR_1|Solar_Correction_Faktor_auto|0.6
     2022-01-27 20:01:59   SqlResultRow_09 2022-01-27 16:00:00|WR_1|Solar_Correction_Faktor_auto|0.3
     2022-01-27 20:01:59   SqlResultRow_10 2022-01-27 17:00:00|WR_1|Solar_Correction_Faktor_auto|0.1
     2022-01-27 20:01:59   SqlResultRow_11 2022-01-27 08:00:00|WR_1|Solar_Correction_Faktor_auto|0.2
     2022-01-27 20:01:59   sqlCmd          SELECT TIMESTAMP,DEVICE,READING,VALUE FROM ( SELECT DATE_ADD(CURDATE(),INTERVAL t2.HOUR HOUR) AS TIMESTAMP, t2.DEVICE, @readingname AS READING, cast(if(avg(t2.FACTOR) > 1.6, 1.6, avg(t2.FACTOR) ) AS DECIMAL(2,1)) AS VALUE FROM ( SELECT * FROM ( SELECT t1.TIMESTAMP, t1.HOUR, t1.DEVICE, t1.READING, t1.VALUE, if(@diff = 0,NULL, @temp:=cast((t1.VALUE-@diff) AS DECIMAL(6,2))) AS DIFF, cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr) AS DECIMAL(4,1)) AS FACTOR, @diff:=t1.VALUE AS curr_V FROM ( SELECT h.TIMESTAMP, date(h.TIMESTAMP) AS DATE, hour(h.TIMESTAMP) AS HOUR, h.DEVICE, h.READING, h.VALUE FROM history AS h WHERE h.DEVICE = @device AND (h.READING = @reading1 OR h.READING = @reading2) AND h.TIMESTAMP >= DATE_SUB(DATE(now()),INTERVAL @days DAY) AND h.TIMESTAMP <= CURDATE() AND MINUTE(h.TIMESTAMP) = 0 AND h.VALUE >= 0 GROUP BY DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP )t1 )tx WHERE READING != @reading2 AND HOUR > 6 )t2 GROUP BY t2.HOUR,t2.DEVICE )t3 WHERE t3.VALUE != 0;
     2022-01-27 20:01:59   sqlResultNumRows 10
     2022-01-27 20:01:59   state           done
Attributes:
   DbLogExclude .*
   allowDeletion 1
   room       System
   sqlCmdHistoryLength 5
   sqlCmdVars SET @days:=30, @corr:=0.7, @diff:=0, @temp:=0, @device:='WR_1', @reading1:='SW_Total_DC_P_sumOfAllPVInputs', @reading2:='Solar_Calculation_fc0', @readingname:='Solar_Correction_Faktor_auto' ;


Jetzt kommt noch ein INSERT drum herum und der Fehler tritt auf.

Internals:
   DATABASE   fhem
   DEF        LogDB
   FUUID      5f3a5796-f33f-61a8-e1ac-2438b1322f15e59a
   FVERSION   93_DbRep.pm:v8.46.12-s25411/2022-01-02
   LASTCMD    sqlCmd INSERT INTO history  (TIMESTAMP,DEVICE,READING,VALUE)  SELECT  TIMESTAMP,DEVICE,READING,VALUE  FROM (  SELECT  DATE_ADD(CURDATE(),INTERVAL t2.HOUR HOUR) AS TIMESTAMP,  t2.DEVICE,  @readingname AS READING,  cast(if(avg(t2.FACTOR) > 1.6, 1.6,  avg(t2.FACTOR) ) AS DECIMAL(2,1)) AS VALUE  FROM (  SELECT * FROM (  SELECT  t1.TIMESTAMP,  t1.HOUR,  t1.DEVICE,  t1.READING,  t1.VALUE,  if(@diff = 0,NULL, @temp:=cast((t1.VALUE-@diff) AS DECIMAL(6,2))) AS DIFF,  cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr) AS DECIMAL(4,1)) AS FACTOR,  @diff:=t1.VALUE AS curr_V  FROM (  SELECT  h.TIMESTAMP,  date(h.TIMESTAMP) AS DATE,  hour(h.TIMESTAMP) AS HOUR,  h.DEVICE,  h.READING,  h.VALUE  FROM history AS h  WHERE h.DEVICE = @device  AND (h.READING = @reading1 OR h.READING = @reading2)  AND h.TIMESTAMP >= DATE_SUB(DATE(now()),INTERVAL @days DAY)  AND h.TIMESTAMP <= CURDATE()  AND MINUTE(h.TIMESTAMP) = 0  AND h.VALUE >= 0  GROUP BY DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP  )t1  )tx  WHERE READING != @reading2  AND HOUR > 6  )t2  GROUP BY t2.HOUR,t2.DEVICE  )t3  WHERE  t3.VALUE != 0 ON DUPLICATE KEY UPDATE  VALUE=t3.VALUE;
   MODEL      Client
   NAME       LogDBRep_PV_Forecast_SQL
   NOTIFYDEV  global,LogDBRep_PV_Forecast_SQL
   NR         432
   NTFY_ORDER 50-LogDBRep_PV_Forecast_SQL
   ROLE       Client
   STATE      error
   TYPE       DbRep
   UTF8       1
   HELPER:
     DBLOGDEVICE LogDB
     GRANTS     USAGE,ALL PRIVILEGES
     IDRETRIES  2
     MINTS      2019-04-03 00:23:42
     PACKAGE    main
     SQLHIST    SELECT&nbsp;TIMESTAMP,DEVICE,READING,VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE(),INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP,t2.DEVICE,@readingname&nbsp;AS&nbsp;READING,cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6,1.6,avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2,1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP,t1.HOUR,t1.DEVICE,t1.READING,t1.VALUE,if(@diff&nbsp;=&nbsp;0,NULL,@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6,2)))&nbsp;AS&nbsp;DIFF,cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4,1))&nbsp;AS&nbsp;FACTOR,@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP,date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE,hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR,h.DEVICE,h.READING,h.VALUE&nbsp;FROM&nbsp;history&nbsp;AS&nbsp;h&nbsp;WHERE&nbsp;h.DEVICE&nbsp;=&nbsp;@device&nbsp;AND&nbsp;(h.READING&nbsp;=&nbsp;@reading1&nbsp;OR&nbsp;h.READING&nbsp;=&nbsp;@reading2)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;>=&nbsp;DATE_SUB(DATE(now()),INTERVAL&nbsp;@days&nbsp;DAY)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;<=&nbsp;CURDATE()&nbsp;AND&nbsp;MINUTE(h.TIMESTAMP)&nbsp;=&nbsp;0&nbsp;AND&nbsp;h.VALUE&nbsp;>=&nbsp;0&nbsp;GROUP&nbsp;BY&nbsp;DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP&nbsp;)t1&nbsp;)tx&nbsp;WHERE&nbsp;READING&nbsp;!=&nbsp;@reading2&nbsp;AND&nbsp;HOUR&nbsp;>&nbsp;6&nbsp;)t2&nbsp;GROUP&nbsp;BY&nbsp;t2.HOUR,t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;order&nbsp;by&nbsp;TIMESTAMP;,SELECT&nbsp;TIMESTAMP,DEVICE,READING,VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE(),INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP,t2.DEVICE,@readingname&nbsp;AS&nbsp;READING,cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6,1.6,avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2,1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP,t1.HOUR,t1.DEVICE,t1.READING,t1.VALUE,if(@diff&nbsp;=&nbsp;0,NULL,@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6,2)))&nbsp;AS&nbsp;DIFF,cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4,1))&nbsp;AS&nbsp;FACTOR,@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP,date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE,hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR,h.DEVICE,h.READING,h.VALUE&nbsp;FROM&nbsp;history&nbsp;AS&nbsp;h&nbsp;WHERE&nbsp;h.DEVICE&nbsp;=&nbsp;@device&nbsp;AND&nbsp;(h.READING&nbsp;=&nbsp;@reading1&nbsp;OR&nbsp;h.READING&nbsp;=&nbsp;@reading2)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;>=&nbsp;DATE_SUB(DATE(now()),INTERVAL&nbsp;@days&nbsp;DAY)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;<=&nbsp;CURDATE()&nbsp;AND&nbsp;MINUTE(h.TIMESTAMP)&nbsp;=&nbsp;0&nbsp;AND&nbsp;h.VALUE&nbsp;>=&nbsp;0&nbsp;GROUP&nbsp;BY&nbsp;DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP&nbsp;)t1&nbsp;)tx&nbsp;WHERE&nbsp;READING&nbsp;!=&nbsp;@reading2&nbsp;AND&nbsp;HOUR&nbsp;>&nbsp;6&nbsp;)t2&nbsp;GROUP&nbsp;BY&nbsp;t2.HOUR,t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0;,SELECT&nbsp;TIMESTAMP,DEVICE,READING,VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE(),INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP,t2.DEVICE,@readingname&nbsp;AS&nbsp;READING,cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6,1.6,avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2,1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP,t1.HOUR,t1.DEVICE,t1.READING,t1.VALUE,if(@diff&nbsp;=&nbsp;0,NULL,@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6,2)))&nbsp;AS&nbsp;DIFF,cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4,1))&nbsp;AS&nbsp;FACTOR,@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP,date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE,hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR,h.DEVICE,h.READING,h.VALUE&nbsp;FROM&nbsp;history&nbsp;AS&nbsp;h&nbsp;WHERE&nbsp;h.DEVICE&nbsp;=&nbsp;@device&nbsp;AND&nbsp;(h.READING&nbsp;=&nbsp;@reading1&nbsp;OR&nbsp;h.READING&nbsp;=&nbsp;@reading2)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;>=&nbsp;DATE_SUB(DATE(now()),INTERVAL&nbsp;@days&nbsp;DAY)&nbsp;AND&nbsp;h.TIMESTAMP&nbsp;<=&nbsp;CURDATE()&nbsp;AND&nbsp;MINUTE(h.TIMESTAMP)&nbsp;=&nbsp;0&nbsp;AND&nbsp;h.VALUE&nbsp;>=&nbsp;0&nbsp;GROUP&nbsp;BY&nbsp;DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP&nbsp;)t1&nbsp;)tx&nbsp;WHERE&nbsp;READING&nbsp;!=&nbsp;@reading2&nbsp;AND&nbsp;HOUR&nbsp;>&nbsp;6&nbsp;)t2&nbsp;GROUP&nbsp;BY&nbsp;t2.HOUR,t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;;,select&nbsp;*&nbsp;FROM&nbsp;(SELECT&nbsp;TIMESTAMP,READING,cast(VALUE/1000&nbsp;AS&nbsp;decimal(6))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;history&nbsp;WHERE&nbsp;DEVICE=@device&nbsp;AND&nbsp;READING&nbsp;LIKE&nbsp;'Statistic_%Year'&nbsp;AND&nbsp;READING&nbsp;NOT&nbsp;LIKE&nbsp;'%Autarky%'&nbsp;and&nbsp;READING&nbsp;NOT&nbsp;LIKE&nbsp;'%Rate%'&nbsp;AND&nbsp;TIMESTAMP>STR_TO_DATE(CONCAT(YEAR(CURDATE())-1,'-12-31'),'%Y-%m-%d')&nbsp;AND&nbsp;TIMESTAMP<STR_TO_DATE(CONCAT(YEAR(CURDATE()),'-01-01'),'%Y-%m-%d')&nbsp;order&nbsp;by&nbsp;TIMESTAMP&nbsp;desc&nbsp;limit&nbsp;15&nbsp;)&nbsp;AS&nbsp;x1&nbsp;GROUP&nbsp;BY&nbsp;x1.READING&nbsp;;,DELETE&nbsp;FROM&nbsp;history&nbsp;WHERE&nbsp;DEVICE='PV_1'&nbsp;AND&nbsp;READING='Solar_Calculation_fc0'&nbsp;AND&nbsp;TIMESTAMP>='2021-02-28&nbsp;07:00:00'
     VERSION    8.46.12
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      0
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2022-01-27 20:06:24   errortext       DBD::mysql::st execute failed: Division by 0 at ./FHEM/93_DbRep.pm line 10576.

     2022-01-27 20:06:24   state           error
Attributes:
   DbLogExclude .*
   allowDeletion 1
   room       System
   sqlCmdHistoryLength 5
   sqlCmdVars SET @days:=30, @corr:=0.7, @diff:=0, @temp:=0, @device:='WR_1', @reading1:='SW_Total_DC_P_sumOfAllPVInputs', @reading2:='Solar_Calculation_fc0', @readingname:='Solar_Correction_Faktor_auto' ;


Kann das mit dem Aufräumen zu tun haben?

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Hallo Christian,

ich habe beide SQLs jetzt mal rauskopiert und bei mir ausgeführt.
Laufen fehlerfrei durch. Zwar ohne Wert, aber syntaktisch ok.


2022.01.27 20:13:18.101 4: DbRep Rep.LogDB - -------- New selection ---------
2022.01.27 20:13:18.102 4: DbRep Rep.LogDB - Command: sqlCmd INSERT INTO history (TIMESTAMP,DEVICE,READING,VALUE) SELECT TIMESTAMP,DEVICE,READING,VALUE FROM ( SELECT DATE_ADD(CURDATE(),INTERVAL t2.HOUR HOUR) AS TIMESTAMP, t2.DEVICE, @readingname AS READING, cast(if(avg(t2.FACTOR) > 1.6, 1.6, avg(t2.FACTOR) ) AS DECIMAL(2,1)) AS VALUE FROM ( SELECT * FROM ( SELECT t1.TIMESTAMP, t1.HOUR, t1.DEVICE, t1.READING, t1.VALUE, if(@diff = 0,NULL, @temp:=cast((t1.VALUE-@diff) AS DECIMAL(6,2))) AS DIFF, cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr) AS DECIMAL(4,1)) AS FACTOR, @diff:=t1.VALUE AS curr_V FROM ( SELECT h.TIMESTAMP, date(h.TIMESTAMP) AS DATE, hour(h.TIMESTAMP) AS HOUR, h.DEVICE, h.READING, h.VALUE FROM history AS h WHERE h.DEVICE = @device AND (h.READING = @reading1 OR h.READING = @reading2) AND h.TIMESTAMP >= DATE_SUB(DATE(now()),INTERVAL @days DAY) AND h.TIMESTAMP <= CURDATE() AND MINUTE(h.TIMESTAMP) = 0 AND h.VALUE >= 0 GROUP BY DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP )t1 )tx WHERE READING != @reading2 AND HOUR > 6 )t2 GROUP BY t2.HOUR,t2.DEVICE )t3 WHERE t3.VALUE != 0 ON DUPLICATE KEY UPDATE VALUE=t3.VALUE;
2022.01.27 20:13:18.103 4: DbRep Rep.LogDB - FullDay option: 0
2022.01.27 20:13:18.103 4: DbRep Rep.LogDB - Timestamp begin human readable: 2022-01-01 00:00:00
2022.01.27 20:13:18.104 4: DbRep Rep.LogDB - Timestamp end human readable: 2022-01-26 23:59:59
2022.01.27 20:13:18.308 4: DbRep Rep.LogDB - adminCredentials successfully read from file
2022.01.27 20:13:18.310 4: DbRep Rep.LogDB - Database connect - user: root, UTF-8 option set: yes
2022.01.27 20:13:18.312 4: DbRep Rep.LogDB - SQL execute: INSERT INTO history (TIMESTAMP,DEVICE,READING,VALUE) SELECT TIMESTAMP,DEVICE,READING,VALUE FROM ( SELECT DATE_ADD(CURDATE(),INTERVAL t2.HOUR HOUR) AS TIMESTAMP, t2.DEVICE, @readingname AS READING, cast(if(avg(t2.FACTOR) > 1.6, 1.6, avg(t2.FACTOR) ) AS DECIMAL(2,1)) AS VALUE FROM ( SELECT * FROM ( SELECT t1.TIMESTAMP, t1.HOUR, t1.DEVICE, t1.READING, t1.VALUE, if(@diff = 0,NULL, @temp:=cast((t1.VALUE-@diff) AS DECIMAL(6,2))) AS DIFF, cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr) AS DECIMAL(4,1)) AS FACTOR, @diff:=t1.VALUE AS curr_V FROM ( SELECT h.TIMESTAMP, date(h.TIMESTAMP) AS DATE, hour(h.TIMESTAMP) AS HOUR, h.DEVICE, h.READING, h.VALUE FROM history AS h WHERE h.DEVICE = @device AND (h.READING = @reading1 OR h.READING = @reading2) AND h.TIMESTAMP >= DATE_SUB(DATE(now()),INTERVAL @days DAY) AND h.TIMESTAMP <= CURDATE() AND MINUTE(h.TIMESTAMP) = 0 AND h.VALUE >= 0 GROUP BY DATE,HOUR,h.READING,h.DEVICE,h.TIMESTAMP )t1 )tx WHERE READING != @reading2 AND HOUR > 6 )t2 GROUP BY t2.HOUR,t2.DEVICE )t3 WHERE t3.VALUE != 0 ON DUPLICATE KEY UPDATE VALUE=t3.VALUE;
2022.01.27 20:13:18.316 4: DbRep Rep.LogDB - data autocommitted
2022.01.27 20:13:18.317 3: DbRep Rep.LogDB - Number of entries processed in db fhemtest: 0 by INSERT


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