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

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

Vorheriges Thema - Nächstes Thema

Thowe

Hallo Heiko,
Danke für den Tipp und Deine Geduld. Mittlerweile ist die Migration ins Hash sehr komplex geworden. Ich fange mal mit dem Basis-Problem an: 
Ich versuche vergeblich Deinen Tipp, die umfassenden Anführungszeichen sowie die Escapes wegzulassen, umzusetzen. Bei mir erzeugt folgender Eintrag im DEF-Editor des at-Devices
+*00:01:00 {
   my $cmdhash =
   {
      1  => { timestamp_begin => 'current_day_begin',
              timestamp_end   => 'current_day_end',
              device          => 'HH_Tagesenergie',
              reading         => 'state',
              autoForward     => '{".*HH_Tagesenergie__state__MAX.*" => "Tagesgesamtenergie_HH => state"}',
              cmd             => 'maxValue'
            },
     
    };
    fhem ("set Rep_test_dev multiCmd $cmdhash");
}
bei verbose 5 nur folgende Fehlermeldung
2024.03.16 12:32:37 3: set Rep_test_dev multiCmd HASH(0x75b10a0) : The syntax of 'multiCmd' is wrong. See command reference.
2024.03.16 12:32:37 3: Rep_Kettenprozess: The syntax of 'multiCmd' is wrong. See command reference.
Das/der Hash in Rep_test_dev als multiCmd ausgeführt funktioniert. Wo kann der Fehler liegen?
Viele Grüße,
Thowe

DS_Starter

#2116
Hallo Thowe,

jetzt mußte ich selbst ein wenig knobeln. ;)
Man muß $cmdhash als normale Stringvariable definieren. Im Set des DbRep wird daraus der Hash geformt.
Im Set-Kommando wird die Eingabe zunächst auch als String übertragen, das war der (auch mein!) Denkfehler.
So gesehen waren die umfassenden "{  ]" gar nicht verkehrt, nur sehr ungünstig wegen des dann notwendigen escapen in der Variable.

So funktioniert es im at Device. Du definierst die Variable als my $cmdhash = qq/{....}/:

+*00:01:00 {
   my $cmdhash =
   qq/{
      1  => { timestamp_begin => 'current_day_begin',
              timestamp_end   => 'current_day_end',
              device          => 'HH_Tagesenergie',
              reading         => 'state',
              autoForward     => '{".*HH_Tagesenergie__state__MAX.*" => "Tagesgesamtenergie_HH => state"}',
              cmd             => 'maxValue'
            },
     
    }/;
    fhem ("set Rep.fhemtest1 multiCmd $cmdhash");
}

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

Thowe

Hallo Heiko,
das hat funktioniert, vielen Dank. Das hoffentlich letzte Problem ist folgendes: Wie können in den Hash-Definitionen die Platzhalter eingetragen werden. Folgende Definition
+*00:01:00 {
   my $cmdhash =
   qq/{
      1  => { timestamp_begin => 'current_day_begin',
              timestamp_end   => 'current_day_end',
              device          => 'HH_Tagesenergie',
              reading         => 'state',
              autoForward     => '{".*HH_Tagesenergie__state__MAX.*" => "Tagesgesamtenergie_HH => state"}',
              cmd             => 'maxValue',
              executeAfterProc => qq({fhem("get Rep_Daten_aus_DB_ermitteln sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','".(ReadingsVal("Tagesgesamtenergie_HH","state",0))."','')")})
            },
     
    }/;
    fhem ("set Rep_test_dev multiCmd $cmdhash");
}
führt zu folgender Fehlermeldung:
2024.03.16 19:44:39 3: DbRep Rep_test_dev - execute command after maxValue: '{fhem("get Rep_Daten_aus_DB_ermitteln sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','".(ReadingsVal("Tagesgesamtenergie_HH","state",0))."','')")}'
2024.03.16 19:44:39 2: DbRep Rep_Daten_aus_DB_ermitteln - DBD::mysql::st execute failed: Unknown column '§timestamp_end§' in 'field list' at ./FHEM/93_DbRep.pm line 7071.
Ich hoffe, Du hast eine Idee.
Viele Grüße,
Thomas

DS_Starter

Hallo Thowe,

Problem ist, dass ich die Keyword Auflösung (Platzhalter) noch nicht in sqlCmdBlocking integregriert habe.
Gerade gecheckt.
Heute ist es zu spät geworden, aber morgen baue ich die Keyword Auflösung ein.
Dann funktioniert es damit auch.  ;)

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

DS_Starter

Moin Thowe,

in meinem contrib liegt die Version 8.53.8.
Die Keyword Auflösung ist in sqlCmdBlocking integregriert.

Du kannst bitte die V aus meinem contrib laden, restarten und testen ob alles so arbeitet wie du es erwartest.

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

Thowe

Hallo Heiko,
vielen Dank dem Sonntagsarbeiter!
Mit 8.53.8 getestet scheint das Keyword noch leer zu sein:
2024.03.17 11:38:59 3: DbRep Rep_test_dev - execute command after maxValue: '{fhem("get Rep_Daten_aus_DB_ermitteln sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','".(ReadingsVal("Tagesgesamtenergie_HH","state",0))."','')")}'
2024.03.17 11:38:59 2: DbRep Rep_Daten_aus_DB_ermitteln - DBD::mysql::st execute failed: Incorrect datetime value: '' for column `fhem`.`history`.`TIMESTAMP` at row 1 at ./FHEM/93_DbRep.pm line 7100.

2024.03.17 11:38:59 2: DbRep Rep_Daten_aus_DB_ermitteln - ERROR - DBD::mysql::st execute failed: Incorrect datetime value: '' for column `fhem`.`history`.`TIMESTAMP` at row 1 at ./FHEM/93_DbRep.pm line 7100.

2024.03.17 11:38:59 3: get Rep_Daten_aus_DB_ermitteln sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','3.1510','') : DBD::mysql::st execute failed: Incorrect datetime value: '' for column `fhem`.`history`.`TIMESTAMP` at row 1 at ./FHEM/93_DbRep.pm line 7100.
Aber das Positive: Der Inline-Aufruf der Perl-Funktion ReadingsVal funktioniert - mit dem vorher in autoForward eingetragenen Wert! Nur noch ein kleiner Schritt...
Viele Grüße,
Thowe

DS_Starter

#2121
Hmm ...
Ich habe ein at-Device nach deinem Muster erstellt (Namen an meine Installation angepasst):

+*00:00:30 {
   my $cmdhash =
   qq/{
      1  => { timestamp_begin => 'current_day_begin',
              timestamp_end   => 'current_day_end',
              device          => 'HH_Tagesenergie',
              reading         => 'state',
              autoForward     => '{".*HH_Tagesenergie__state__MAX.*" => "Dum.Rep.All => state"}',
              cmd             => 'maxValue',
              executeAfterProc => qq({fhem("get Rep.fhemtest1 sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','".ReadingsVal("Tagesgesamtenergie_HH","state",0)."','')")})
            },
     
    }/;
    fhem ("set Rep.fhemtest1 multiCmd $cmdhash");
}

... und ausgeführt.
Dabei habe ich keinen Fehler bekommen, sondern eine einwandfreie Ausführung. Hier der verbose 4 Output des Log:

2024.03.17 13:31:48.501 4: DbRep Rep.fhemtest1 - multiCmd index >1< start
2024.03.17 13:31:48.516 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.17 13:31:48.518 4: DbRep Rep.fhemtest1 - Command: maxValue
2024.03.17 13:31:48.519 4: DbRep Rep.fhemtest1 - FullDay option: 0
2024.03.17 13:31:48.519 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2024-03-17 00:00:00
2024.03.17 13:31:48.520 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2024-03-17 23:59:59
2024.03.17 13:31:48.521 4: DbRep Rep.fhemtest1 - Aggregation: no
2024.03.17 13:31:48.592 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.17 13:31:48.594 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.17 13:31:48.596 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.17 13:31:48.598 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.17 13:31:48.600 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.17 13:31:48.604 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'HH_Tagesenergie' ) AND ( READING = 'state' ) AND TIMESTAMP >= '2024-03-17 00:00:00' AND TIMESTAMP <= '2024-03-17 23:59:59' ORDER BY TIMESTAMP;
2024.03.17 13:31:48.642 4: Rep.fhemtest1 - Forward reading "2024-03-17__HH_Tagesenergie__state__MAX__no_aggregation" to "Dum.Rep.All:state"
2024.03.17 13:31:48.659 3: DbRep Rep.fhemtest1 - execute command after maxValue: '{fhem("get Rep.fhemtest1 sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','".ReadingsVal("Tagesgesamtenergie_HH","state",0)."','')")}'
2024.03.17 13:31:48.681 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.17 13:31:48.682 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.17 13:31:48.684 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.17 13:31:48.688 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.17 13:31:48.689 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.17 13:31:48.691 4: DbRep Rep.fhemtest1 - FullDay option: 0
2024.03.17 13:31:48.692 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2024-03-17 00:00:00
2024.03.17 13:31:48.693 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2024-03-17 23:59:59
2024.03.17 13:31:48.694 4: DbRep Rep.fhemtest1 - Aggregation: no
2024.03.17 13:31:48.695 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.17 13:31:48.695 4: DbRep Rep.fhemtest1 - sqlCmdBlocking Command:
insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','0','');
2024.03.17 13:31:48.698 4: DbRep Rep.fhemtest1 - data autocommitted
2024.03.17 13:31:48.699 4: DbRep Rep.fhemtest1 - Number of entries processed in db fhemtest1: 1
2024.03.17 13:31:48.718 3: get Rep.fhemtest1 sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','0','') : 1

Lege auch mal ein verbose 4 Log an zum Vergleich. Momentan habe ich keinen Ansatz was bei dir anders sein sollte als bei mir.

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

Thowe

Hallo Heiko,
da hatte ich Pech beim Denken. Im get Rep_Daten_aus_DB_ermitteln sqlCmdBlocking insert into history values (§timestamp_end§,... wird der timestamp_end der Rep_Daten_aus_DB_ermitteln verwendet. Wie komme ich an den timestamp_end des Hash-Elements heran? Hab's mit
executeAfterProc => qq({fhem("attr Rep_Daten_aus_DB_ermitteln timestamp_end §timestamp_end§; get Rep_Daten_aus_DB_ermitteln sqlCmdBlocking insert into history values (§timestamp_end§,'Tagesgesamtenergie_HH','DUMMY','calculated','state','".(ReadingsVal("Tagesgesamtenergie_HH","state",0))."','')")}) vergeblich versucht.
Viele Grüße,
Thomas

DS_Starter

#2123
ZitatWie komme ich an den timestamp_end des Hash-Elements heran?
In jedem Step (hier "1") werden die Attr timestamp_begin, timestamp_end im DbRep Device entsprechend der Schlüssel-Angabe im Commandhash gesetzt vor Ausführung des cmd bzw. executeAfterProc (d.h. alle angegebenen Attribute werden vor der Abarbeitung von Kommandos definiert).
D.h. zur Laufzeit wird ein §timestamp_end§ mit dem Attr timestamp_end Wert des DbRep Device ersetzt  und ist auch gleich dem Schlüssel timestamp_end im Commandhash, weil der die 'Quelle' für die Setzungen darstellt. Natürlich wird z.B. current_day_end noch mit der absoluten Zeitangabe ersetzt die die DB verarbeiten kann.

Vor diesem Hintergrund verstehe ich deine Frage nicht wirklich.


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

Thowe

Will sagen: Man sollte im execAfterProc sqlCmd(Blocking) das selbe Rep-Device wie fürs multiCmd nutzen!
Ansonsten besteht die Frage, wie kommt das Keyword vom Commandhash in das andere Rep-Device im execAfterProc.

DS_Starter

Ja, genau. Der Kommandohash bezieht sich auf das DbRep Device in dem er ausgeführt wird.
Wenn du im execAfterProc die Daten/Attribute eines anderen (DbRep)Devices verarbeiten willst, kannst du die execAfterProc-Routine natürlich aufwändiger gestalten und diese Daten mit AttrVal, ReadingsVal vom anderen Device vorher in deine execAfterProc-Routine als Variable holen.

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

DS_Starter

@Thowe, habe die V 8.53.8 eingecheckt und ist morgen früh im Regelupdate enthalten.

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

DS_Starter

@Thowe, in meinem contrib habe die Version 8.53.9 bereitgestellt.

Ich habe eine Scriptsteuerung implementiert. Dafür ist jetzt auch das Attribut "userExitFn" im multiCmd setzbar und zur Steuerung kann man in Perl Bedingungen (if, else, ...) den Befehl "nextHop (x)" einbauen.
Dabei ist "x" der nächste Index der abgearbeitet werden soll oder "quit" für ein direktes Verlassen von multiCmd.

"nextHop (x)" kann auch in executeBefore/After/Proc verwendet werden.

Zu beachten ist, dass nur höhrere Index angesprungen werden können. Übersprungene Index sind nicht mehr (als Rücksprung) erreichbar.
Zur Demo hier ein längeres Hash mit einer Sprungbedingung im Index "3":

        {
          1  => { executeBeforeProc => 'set LogDB1 reopen 900',
                  timestamp_begin   => '2023-12-17 00:00:00',
                  timestamp_end     => '2023-12-17 01:00:00',
                  device            => 'SMA_Energymeter',
                  reading           => 'Einspeisung_Wirkleistung_Zaehler',
                  cmd               => 'countEntries history'
                },
          2  => { timestamp_begin   => '2023-12-15 11:00:00',
                  timestamp_end     => 'previous_day_end',
                  device            => 'SMA_Energymeter',
                  reading           => 'Einspeisung_Wirkleistung_Zaehler',
                  cmd               => 'countEntries'
                },
          3  => { userExitFn        => '{ if ($READING =~ /SqlResultRow_2/ && $VALUE > 0) {nextHop (5)} }',
                  cmd               => 'sqlCmd select count(*) from current'
                },
          4  => { timeDiffToNow     => 'd:2',
                  readingNameMap    => 'COUNT',
                  autoForward       => '{ ".*COUNT.*" => "Dum.Rep.All" }',
                  device            => 'SMA_%,MySTP.*',
                  reading           => 'etotal,etoday,Ein% EXCLUDE=%Wirkleistung',
                  cmd               => 'countEntries history'
                },
          5  => { timeDiffToNow     => 'd:2',
                  readingNameMap    => 'SUM',
                  autoForward       => '{ ".*SUM.*" => "Dum.Rep.All" }',
                  device            => 'SMA_%,MySTP.*',
                  reading           => 'etotal,etoday,Ein% EXCLUDE=%Wirkleistung',
                  cmd               => 'sumValue'
                },
          6  => { executeAfterProc  => 'set LogDB1 reopen',
                  cmd               => 'sqlCmd select count(*) from current'
                },
        }

Im Log mit verbose 4 sieht es dann so aus:

2024.03.18 22:25:53.550 4: DbRep Rep.fhemtest1 - multiCmd index >1< start
2024.03.18 22:25:53.561 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.18 22:25:53.561 4: DbRep Rep.fhemtest1 - Command: countEntries history
2024.03.18 22:25:53.562 4: DbRep Rep.fhemtest1 - FullDay option: 0
2024.03.18 22:25:53.563 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2023-12-17 00:00:00
2024.03.18 22:25:53.563 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2023-12-17 01:00:00
2024.03.18 22:25:53.564 4: DbRep Rep.fhemtest1 - Aggregation: no
2024.03.18 22:25:53.564 3: DbRep Rep.fhemtest1 - execute command before countEntries: 'set LogDB1 reopen 900'
2024.03.18 22:25:53.566 2: LogDB1 - Connection closed until 22:40:53 (900 seconds).
2024.03.18 22:25:53.631 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.18 22:25:53.632 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.18 22:25:53.635 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.18 22:25:53.637 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.18 22:25:53.638 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.18 22:25:53.639 4: DbRep Rep.fhemtest1 - SQL execute: SELECT COUNT(*) FROM history where ( DEVICE = 'SMA_Energymeter' ) AND ( READING = 'Einspeisung_Wirkleistung_Zaehler' ) AND TIMESTAMP >= '2023-12-17 00:00:00' AND TIMESTAMP <= '2023-12-17 01:00:00' ;
2024.03.18 22:25:53.779 4: DbRep Rep.fhemtest1 - multiCmd index >2< start
2024.03.18 22:25:53.789 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.18 22:25:53.790 4: DbRep Rep.fhemtest1 - Command: countEntries history
2024.03.18 22:25:53.791 4: DbRep Rep.fhemtest1 - FullDay option: 0
2024.03.18 22:25:53.791 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2023-12-15 11:00:00
2024.03.18 22:25:53.792 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2024-03-17 23:59:59
2024.03.18 22:25:53.792 4: DbRep Rep.fhemtest1 - Aggregation: no
2024.03.18 22:25:53.859 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.18 22:25:53.861 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.18 22:25:53.864 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.18 22:25:53.866 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.18 22:25:53.867 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.18 22:25:53.868 4: DbRep Rep.fhemtest1 - SQL execute: SELECT COUNT(*) FROM history where ( DEVICE = 'SMA_Energymeter' ) AND ( READING = 'Einspeisung_Wirkleistung_Zaehler' ) AND TIMESTAMP >= '2023-12-15 11:00:00' AND TIMESTAMP <= '2024-03-17 23:59:59' ;
2024.03.18 22:25:53.930 4: DbRep Rep.fhemtest1 - multiCmd index >3< start
2024.03.18 22:25:53.940 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.18 22:25:53.941 4: DbRep Rep.fhemtest1 - Command: sqlCmd select count(*) from current;
2024.03.18 22:25:53.941 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: not set
2024.03.18 22:25:53.942 4: DbRep Rep.fhemtest1 - Timestamp end human readable: not set
2024.03.18 22:25:53.979 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.18 22:25:53.981 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.18 22:25:53.984 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.18 22:25:53.986 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.18 22:25:53.987 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.18 22:25:53.988 4: DbRep Rep.fhemtest1 - SQL execute: select count(*) from current;
2024.03.18 22:25:53.989 4: DbRep Rep.fhemtest1 - SQL result: 1356
2024.03.18 22:25:53.993 4: DbRep Rep.fhemtest1 - multiCmd nextHop was set by previous function: 5
2024.03.18 22:25:54.014 4: DbRep Rep.fhemtest1 - nexthop is set to >5< -> multiCmd index >4< skipped
2024.03.18 22:25:54.071 4: DbRep Rep.fhemtest1 - multiCmd index >5< start
2024.03.18 22:25:54.083 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.18 22:25:54.084 4: DbRep Rep.fhemtest1 - Command: sumValue
2024.03.18 22:25:54.084 4: DbRep Rep.fhemtest1 - timeDiffToNow - year: , day: 2, hour: , min: , sec:
2024.03.18 22:25:54.085 4: DbRep Rep.fhemtest1 - Year 2024 is leap year
2024.03.18 22:25:54.085 4: DbRep Rep.fhemtest1 - startMonth: 2 endMonth: 2 lastleapyear:  baseYear: 2024 diffdaylight:0 isdaylight:0
2024.03.18 22:25:54.086 4: DbRep Rep.fhemtest1 - FullDay option: 0
2024.03.18 22:25:54.087 4: DbRep Rep.fhemtest1 - Time difference to current time for calculating Timestamp begin: 172801 sec
2024.03.18 22:25:54.087 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2024-03-16 22:25:53
2024.03.18 22:25:54.088 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2024-03-18 22:25:54
2024.03.18 22:25:54.088 4: DbRep Rep.fhemtest1 - Aggregation: no
2024.03.18 22:25:54.139 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.18 22:25:54.140 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.18 22:25:54.145 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.18 22:25:54.146 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.18 22:25:54.146 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.18 22:25:54.151 4: DbRep Rep.fhemtest1 - SQL execute: SELECT SUM(VALUE) FROM history where ( DEVICE IN ('SMA_Energymeter','MySTP_5000') ) AND ( READING LIKE 'Ein%' OR READING IN ('etotal','etoday') ) AND READING NOT LIKE '%Wirkleistung' AND TIMESTAMP >= '2024-03-16 22:25:53' AND TIMESTAMP <= '2024-03-18 22:25:54' ;
2024.03.18 22:25:54.273 4: DbRep Rep.fhemtest1 - Forward reading "2024-03-16__SUM__no_aggregation" to "Dum.Rep.All:2024-03-16__SUM__no_aggregation"
2024.03.18 22:25:54.398 4: DbRep Rep.fhemtest1 - multiCmd index >6< start
2024.03.18 22:25:54.414 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2024.03.18 22:25:54.415 4: DbRep Rep.fhemtest1 - Command: sqlCmd select count(*) from current;
2024.03.18 22:25:54.416 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: not set
2024.03.18 22:25:54.417 4: DbRep Rep.fhemtest1 - Timestamp end human readable: not set
2024.03.18 22:25:54.471 4: DbRep Rep.fhemtest1 - Database Model: MYSQL
2024.03.18 22:25:54.472 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2024.03.18 22:25:54.475 4: DbRep Rep.fhemtest1 - SQL execute: SHOW VARIABLES LIKE 'collation_database'
2024.03.18 22:25:54.477 4: DbRep Rep.fhemtest1 - Database Character set is >utf8mb4_bin<
2024.03.18 22:25:54.477 4: DbRep Rep.fhemtest1 - simple do statement: set names "utf8mb4" collate "utf8mb4_bin"
2024.03.18 22:25:54.478 4: DbRep Rep.fhemtest1 - SQL execute: select count(*) from current;
2024.03.18 22:25:54.479 4: DbRep Rep.fhemtest1 - SQL result: 1356
2024.03.18 22:25:54.483 3: DbRep Rep.fhemtest1 - execute command after sqlCmd: 'set LogDB1 reopen'
2024.03.18 22:25:54.512 3: DbRep Rep.fhemtest1 - command message after sqlCmd: >Reopen executed.<

Beachte die Ausgabe im Step 3 mit dem Hinweis dass der Index 4 übersprungen wird.

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

betateilchen

Da haben wir ja was angerichtet mit der Einführung der hash-gesteuerten Ausführung von Befehlen. Es entwickelt sich zum unbeherrschbaren Moloch...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Ja ist nicht ganz einfach.
Bis jetzt ist es noch strukturiert machbar, aber die Grenze ist in Reichweite ...
Für heute ist sie auf jeden Fall überschritten ...  ;)
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter