DbRep sqlCMDHistrory

Begonnen von ch.eick, 15 Februar 2024, 10:25:52

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
ich habe das Problem, dass die sqlCmdHistory die Nummerierung der Kommandos verschiebt.
Es ist sqlCmdHistoryLength 1 eingestellt und ich verwende
set LogDBRep_Statistic_previous_Day sqlCmd ckey:1
zum aufrufen, damit ich nicht jedes mal das SQL SELECT mit übergeben muss. Nur verschiebt sich wohl beim Neustarten von FHEM, z.B. nach einem Update die ckey Nummer und ist mitlerweile bereits bei 7 angelangt. Könnte man das korrigieren, dass die Nummerierung immer wieder bei 1 beginnt.
Nach einem purge und restore History wird dann auch wieder die vorherige ckey Nummer erzeugt, was ich als workaround mal versucht hatte.
defmod LogDBRep_Statistic_previous_Day DbRep LogDB
attr LogDBRep_Statistic_previous_Day DbLogExclude .*
attr LogDBRep_Statistic_previous_Day comment Version 2023.01.02 15:00
attr LogDBRep_Statistic_previous_Day device WR_1_API
attr LogDBRep_Statistic_previous_Day reading SW_Statistic%_Day,Statistic_EnergyHomeBat_Day EXCLUDE=%NoBat%,%EnergyPv%
attr LogDBRep_Statistic_previous_Day room System
attr LogDBRep_Statistic_previous_Day sqlCmdHistoryLength 1
attr LogDBRep_Statistic_previous_Day sqlFormatService https://sqlformat.org
attr LogDBRep_Statistic_previous_Day suppressReading SqlResultRow_.*
attr LogDBRep_Statistic_previous_Day userExitFn splitReading .*:.*
attr LogDBRep_Statistic_previous_Day verbose 0

setstate LogDBRep_Statistic_previous_Day 2024-02-13 01:17:00 sqlCmd SELECT *\
FROM\
  (SELECT h.TIMESTAMP,\
          CONCAT('WR_1_API_', h.READING) AS READING,\
          IF (h.READING LIKE '%Rate%'\
              OR h.READING LIKE '%Autarky%',\
                 h.VALUE,\
                 cast(h.VALUE/1000 AS decimal(6))) AS VALUE\
   FROM history h\
   JOIN\
     (SELECT max(TIMESTAMP) AS TIMESTAMP,\
             READING\
      FROM history\
      WHERE §device§\
        AND §reading§\
        AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 DAY, '%Y-%m-%d 00:00:00')\
        AND TIMESTAMP < DATE_FORMAT(NOW() - INTERVAL 1 DAY, '%Y-%m-%d 23:59:59')\
      GROUP BY READING) x1 USING(TIMESTAMP,READING)) x;;

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,

schaue ich mir an.

Aber das ist doch keine Anfängerfrage!  ;)

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

ch.eick

Zitat von: DS_Starter am 15 Februar 2024, 10:32:54Hallo Christian,

schaue ich mir an.

Aber das ist doch keine Anfängerfrage!  ;)
Hallo Heiko,
dann eben in sonstiges :-)
Für DbRep/DbLog lohnt sich sicher eine eigene Untergruppe, wenn man dann alles der letzten Jahre dahin verschieben könnte.
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

ZitatFür DbRep/DbLog lohnt sich sicher eine eigene Untergruppe, wenn man dann alles der letzten Jahre dahin verschieben könnte.
Deiner Meinung, schau hier:  https://forum.fhem.de/index.php?msg=1303645
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,

habe es mir angeschaut. Wenn sqlCmdHistoryLength=1 ist und du das erste sql ausführst/speicherst bekommt es die Nummer "1". Das bleibt auch bei Restart erhalten.
Wenn du aber eine Änderung am Statement vornimmst und ausführst/speicherst bekommt es intern die Nummer "2" da es ein neues Statement ist. Da
sqlCmdHistoryLength aber 1 ist, fällt das vorherige Statement raus und dein neues Sql mit "2" steht in der History.

Wenn man sqlCmdHistoryLength=2 setzt und z.B. die gespeicherten SQL's den Index 3 und 4 haben, nun ein neues SQL ausgeführt wird, erhält das neue SQL die Nummer 5. Dafür verlässt der Index 3 die History.
Das heißt, alle SQL behalten ihre Nummer die einmal zugeordnet wurde. Ein neues SQL erhält immer einen neuen (den nächsten) Index. Das ist auch ok so damit die Zurdnung eindeutig ist.

Wenn sqlCmdHistoryLength=1 ist, wird das Verfahren ebenso angewendet. Dadurch sieht es so aus, als ob z.B. durch einen Restart der Index sich ändern würde. Ist aber nicht so. Vergleiche es mal.
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

#5
Zitat von: DS_Starter am 15 Februar 2024, 21:31:10Hallo Christian,

habe es mir angeschaut. Wenn sqlCmdHistoryLength=1 ist und du das erste sql ausführst/speicherst bekommt es die Nummer "1". Das bleibt auch bei Restart erhalten.
Wenn du aber eine Änderung am Statement vornimmst und ausführst/speicherst bekommt es intern die Nummer "2" da es ein neues Statement ist. Da
sqlCmdHistoryLength aber 1 ist, fällt das vorherige Statement raus und dein neues Sql mit "2" steht in der History.

Wenn man sqlCmdHistoryLength=2 setzt und z.B. die gespeicherten SQL's den Index 3 und 4 haben, nun ein neues SQL ausgeführt wird, erhält das neue SQL die Nummer 5. Dafür verlässt der Index 3 die History.
Das heißt, alle SQL behalten ihre Nummer die einmal zugeordnet wurde. Ein neues SQL erhält immer einen neuen (den nächsten) Index. Das ist auch ok so damit die Zurdnung eindeutig ist.

Wenn sqlCmdHistoryLength=1 ist, wird das Verfahren ebenso angewendet. Dadurch sieht es so aus, als ob z.B. durch einen Restart der Index sich ändern würde. Ist aber nicht so. Vergleiche es mal.
Hmm,
klingt logisch, jedoch wie kann ich dann das letzte aktuellen sqlCmd ausführen?
Oder den höchten Index abfragen, damit ich dann das set Kommando entsprechend dynamisch aufrufen kann.

set LogDBRep_Statistic_previous_Day sqlCmd ckey:<letztes sqlCMD>
Da die sqlCmd, wie Du weißt, recht lang sein können möchte ich es nicht jedesmal neu übergeben, sondern in der sqlCmdHistory gespeichert lassen.
Bei meinen Versuchen hat ssich das sqlCmd eigentlich auch nicht verändert :-)

Wie wäre es, wenn man mit ckey 0 immer das letzte sqlCmd ausführen könnte?
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

ZitatWie wäre es, wenn man mit ckey 0 immer das letzte sqlCmd ausführen könnte?
Die "0" ist immer etwas "speziell" in Perl. Gegenvorschlag ... wie wäre es mit dem Ausdruck "ckey:latest"?
Das würde bereits im Befehl suggerieren immer den neuesten Befehl zu verwenden. "latest" wird z.B. im Dockerumfeld für das neueste Image oder im DWD für die neueste Wetterdatei verwendet.
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 Februar 2024, 15:37:41
ZitatWie wäre es, wenn man mit ckey 0 immer das letzte sqlCmd ausführen könnte?
Die "0" ist immer etwas "speziell" in Perl. Gegenvorschlag ... wie wäre es mit dem Ausdruck "ckey:latest"?
Das würde bereits im Befehl suggerieren immer den neuesten Befehl zu verwenden. "latest" wird z.B. im Dockerumfeld für das neueste Image oder im DWD für die neueste Wetterdatei verwendet.
Wenn das eindringlicher ist, bin ich immer dafür :-)
Sollte es bereits eine andere Möglichkeit geben, würde ich es auch nehmen.
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

Muß ich einbauen und melde mich wieder.
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 Februar 2024, 16:21:38Muß ich einbauen und melde mich wieder.
Alles gut, nur nicht hetzen :-)
Manchmal kenn ich ja auch nur nicht die Möglichkeiten der einzelnen Module ;-)
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

Ich habe deinen Wunsch eingebaut:

Zitat....
Ein SQL-Statement kann durch Angabe seines Listenindex ausgeführt werden:

    set <name> sqlCmd ckey:<Index>      (e.g. ckey:4)


Der Listenindex "ckey:latest" führt immer das neueste in der SQL History gespeicherte Statement aus.
....

Du kannst die Version aus meinem contrib laden. Ich checke sie noch ein.

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

ch.eick

Zitat von: DS_Starter am 16 Februar 2024, 21:45:28Ich habe deinen Wunsch eingebaut:
Du kannst die Version aus meinem contrib laden. Ich checke sie noch ein.
Hallo Heiko,
Du hast mal wieder in bekannter Qualität geliefert.
Danke dafür und es läuft

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