Autor Thema: Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)  (Gelesen 224248 mal)

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2350
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1575 am: 14 Januar 2022, 14:02:41 »
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; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline adrian

  • New Member
  • *
  • Beiträge: 46
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1576 am: 16 Januar 2022, 09:43:05 »
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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1577 am: 16 Januar 2022, 09:51:47 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1578 am: 16 Januar 2022, 16:58:50 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1579 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
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2350
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1580 am: 16 Januar 2022, 21:30:51 »
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; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1581 am: 16 Januar 2022, 21:46:07 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1582 am: 17 Januar 2022, 17:39:58 »
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
« Letzte Änderung: 17 Januar 2022, 17:46:09 von DS_Starter »
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1583 am: 17 Januar 2022, 23:29:59 »
Neue Version ist eingecheckt und morgen früh im Regelupdate enthalten.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1584 am: 18 Januar 2022, 14:38:48 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1585 am: 18 Januar 2022, 16:43:23 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2350
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1586 am: 18 Januar 2022, 17:26:13 »
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; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1587 am: 18 Januar 2022, 17:36:31 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2350
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1588 am: 27 Januar 2022, 20:07:40 »
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&#65292;DEVICE&#65292;READING&#65292;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE()&#65292;INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP&#65292;t2.DEVICE&#65292;@readingname&nbsp;AS&nbsp;READING&#65292;cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6&#65292;1.6&#65292;avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2&#65292;1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP&#65292;t1.HOUR&#65292;t1.DEVICE&#65292;t1.READING&#65292;t1.VALUE&#65292;if(@diff&nbsp;=&nbsp;0&#65292;NULL&#65292;@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6&#65292;2)))&nbsp;AS&nbsp;DIFF&#65292;cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4&#65292;1))&nbsp;AS&nbsp;FACTOR&#65292;@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP&#65292;date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE&#65292;hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR&#65292;h.DEVICE&#65292;h.READING&#65292;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())&#65292;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&#65292;HOUR&#65292;h.READING&#65292;h.DEVICE&#65292;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&#65292;t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;order&nbsp;by&nbsp;TIMESTAMP;,SELECT&nbsp;TIMESTAMP&#65292;DEVICE&#65292;READING&#65292;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE()&#65292;INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP&#65292;t2.DEVICE&#65292;@readingname&nbsp;AS&nbsp;READING&#65292;cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6&#65292;1.6&#65292;avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2&#65292;1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP&#65292;t1.HOUR&#65292;t1.DEVICE&#65292;t1.READING&#65292;t1.VALUE&#65292;if(@diff&nbsp;=&nbsp;0&#65292;NULL&#65292;@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6&#65292;2)))&nbsp;AS&nbsp;DIFF&#65292;cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4&#65292;1))&nbsp;AS&nbsp;FACTOR&#65292;@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP&#65292;date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE&#65292;hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR&#65292;h.DEVICE&#65292;h.READING&#65292;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())&#65292;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&#65292;HOUR&#65292;h.READING&#65292;h.DEVICE&#65292;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&#65292;t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0;,SELECT&nbsp;TIMESTAMP&#65292;DEVICE&#65292;READING&#65292;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE()&#65292;INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP&#65292;t2.DEVICE&#65292;@readingname&nbsp;AS&nbsp;READING&#65292;cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6&#65292;1.6&#65292;avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2&#65292;1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP&#65292;t1.HOUR&#65292;t1.DEVICE&#65292;t1.READING&#65292;t1.VALUE&#65292;if(@diff&nbsp;=&nbsp;0&#65292;NULL&#65292;@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6&#65292;2)))&nbsp;AS&nbsp;DIFF&#65292;cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4&#65292;1))&nbsp;AS&nbsp;FACTOR&#65292;@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP&#65292;date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE&#65292;hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR&#65292;h.DEVICE&#65292;h.READING&#65292;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())&#65292;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&#65292;HOUR&#65292;h.READING&#65292;h.DEVICE&#65292;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&#65292;t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;;,select&nbsp;*&nbsp;FROM&nbsp;(SELECT&nbsp;TIMESTAMP&#65292;READING&#65292;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&#65292;'-12-31')&#65292;'%Y-%m-%d')&nbsp;AND&nbsp;TIMESTAMP<STR_TO_DATE(CONCAT(YEAR(CURDATE())&#65292;'-01-01')&#65292;'%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&#65292;DEVICE&#65292;READING&#65292;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE()&#65292;INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP&#65292;t2.DEVICE&#65292;@readingname&nbsp;AS&nbsp;READING&#65292;cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6&#65292;1.6&#65292;avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2&#65292;1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP&#65292;t1.HOUR&#65292;t1.DEVICE&#65292;t1.READING&#65292;t1.VALUE&#65292;if(@diff&nbsp;=&nbsp;0&#65292;NULL&#65292;@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6&#65292;2)))&nbsp;AS&nbsp;DIFF&#65292;cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4&#65292;1))&nbsp;AS&nbsp;FACTOR&#65292;@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP&#65292;date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE&#65292;hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR&#65292;h.DEVICE&#65292;h.READING&#65292;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())&#65292;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&#65292;HOUR&#65292;h.READING&#65292;h.DEVICE&#65292;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&#65292;t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;order&nbsp;by&nbsp;TIMESTAMP;,SELECT&nbsp;TIMESTAMP&#65292;DEVICE&#65292;READING&#65292;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE()&#65292;INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP&#65292;t2.DEVICE&#65292;@readingname&nbsp;AS&nbsp;READING&#65292;cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6&#65292;1.6&#65292;avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2&#65292;1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP&#65292;t1.HOUR&#65292;t1.DEVICE&#65292;t1.READING&#65292;t1.VALUE&#65292;if(@diff&nbsp;=&nbsp;0&#65292;NULL&#65292;@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6&#65292;2)))&nbsp;AS&nbsp;DIFF&#65292;cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4&#65292;1))&nbsp;AS&nbsp;FACTOR&#65292;@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP&#65292;date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE&#65292;hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR&#65292;h.DEVICE&#65292;h.READING&#65292;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())&#65292;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&#65292;HOUR&#65292;h.READING&#65292;h.DEVICE&#65292;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&#65292;t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0;,SELECT&nbsp;TIMESTAMP&#65292;DEVICE&#65292;READING&#65292;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;DATE_ADD(CURDATE()&#65292;INTERVAL&nbsp;t2.HOUR&nbsp;HOUR)&nbsp;AS&nbsp;TIMESTAMP&#65292;t2.DEVICE&#65292;@readingname&nbsp;AS&nbsp;READING&#65292;cast(if(avg(t2.FACTOR)&nbsp;>&nbsp;1.6&#65292;1.6&#65292;avg(t2.FACTOR)&nbsp;)&nbsp;AS&nbsp;DECIMAL(2&#65292;1))&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;t1.TIMESTAMP&#65292;t1.HOUR&#65292;t1.DEVICE&#65292;t1.READING&#65292;t1.VALUE&#65292;if(@diff&nbsp;=&nbsp;0&#65292;NULL&#65292;@temp:=cast((t1.VALUE-@diff)&nbsp;AS&nbsp;DECIMAL(6&#65292;2)))&nbsp;AS&nbsp;DIFF&#65292;cast((t1.VALUE/(t1.VALUE+(-1*@temp))*@corr)&nbsp;AS&nbsp;DECIMAL(4&#65292;1))&nbsp;AS&nbsp;FACTOR&#65292;@diff:=t1.VALUE&nbsp;AS&nbsp;curr_V&nbsp;FROM&nbsp;(&nbsp;SELECT&nbsp;h.TIMESTAMP&#65292;date(h.TIMESTAMP)&nbsp;AS&nbsp;DATE&#65292;hour(h.TIMESTAMP)&nbsp;AS&nbsp;HOUR&#65292;h.DEVICE&#65292;h.READING&#65292;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())&#65292;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&#65292;HOUR&#65292;h.READING&#65292;h.DEVICE&#65292;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&#65292;t2.DEVICE&nbsp;)t3&nbsp;WHERE&nbsp;t3.VALUE&nbsp;!=&nbsp;0&nbsp;;,select&nbsp;*&nbsp;FROM&nbsp;(SELECT&nbsp;TIMESTAMP&#65292;READING&#65292;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&#65292;'-12-31')&#65292;'%Y-%m-%d')&nbsp;AND&nbsp;TIMESTAMP<STR_TO_DATE(CONCAT(YEAR(CURDATE())&#65292;'-01-01')&#65292;'%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; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7819
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1589 am: 27 Januar 2022, 20:17:37 »
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 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter