mehrere reduceLogNbl hintereinander

Begonnen von ares, 27 Februar 2022, 12:26:23

Vorheriges Thema - Nächstes Thema

ares

Ich möchte meine Datenbank bewusst schlank halten, jedoch nur einige ausgewählte Werte zusammenfassen.
Hier mal drei Beispiele:
set logdb reduceLogNbl 14:21 average include=ISGweb:1.0_07%
set logdb reduceLogNbl 14:21 average include=ISGweb:1.0_10%
set logdb reduceLogNbl 14:21 average include=ISGweb:1.0_11%
...


Da das sicher noch mehr werden ist ein Aufruf in vielen at's mit hoffentlich ausreichenden Abständen vielleicht nicht die beste Lösung.
Gibt es eine Möglichkeit, alle mit einem Aufruf zu starten und automatisch der Reihe nach ausführen zu lassen?

Viele Dank schon vorab für Rückmeldungen
Manfred

DS_Starter

#1
Hallo Manfred,

eine solche sequentielle Abarbeitung kann man mit dem reduceLog im DbRep durchführen.
Dazu erstellst du 3 bis X DbRep Devices und parametrisierst sie wie benötigt für das reduceLog.

Dann erhält jedes DbRep-Device bis auf das letzte das Attribut executeAfterProc welches nach Ende des Laufes
das nächste Device anstartet:


executeAfterProc set dbrep2 reduceLog 14:21 average include=ISGweb:1.0_07%   (im dbrep1 gesetzt)
executeAfterProc set dbrep3 reduceLog 14:21 average include=ISGweb:1.0_10%   (im dbrep2 gesetzt)
executeAfterProc set dbrep4 reduceLog 14:21 average include=ISGweb:1.0_11%   (im dbrep3 gesetzt)
...


Das erste dbrep1 startest du mit einem at. Den Rest ergibt sich aus der Chain.

Ein paar weitere Abregungen zur Bildung einer Chain gibt es im Wiki: https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Abarbeitung_einer_sequentiellen_Befehlskette_mittels_non-blocking_sqlCmd-Kommandos

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

ares

#2
Hallo Heiko,

vielen Dank für die schnelle Antwort, die mein Problem lösen sollte.
Eine Frage habe ich aber noch. Was passiert, wenn ein reduceLogNbl aufgerufen wird bevor der erste zu Ende ist?

Viele Grüße
Manfred

DS_Starter

Achtung !!  Wir reden von DbRep, nicht DbLog !
In DbRep heißt die Funktion reduceLog, nicht reduceLogNbl !

Da du für jede reduceLog-Aufgabe eine separates DbRep erstellst und jedes reduceLog ein anderes Reading bearbeitet,
könntest du es im Prinzip parallel laufen lassen.
Das würde ich aber nur machen wenn man sehr viel RAM/Power im Rechner hat und ich würde es auch nur einer MySQL/MariaDB bzw. PostgreSQL zutrauen.
Die Abarbeitung als Chain ist sicherer und Ressourcen schonender.
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

ares

Hallo Heiko,

ich ersetze aktuell meine bisherige fast 10 Jahre alte fhem-Umgebung mit immer noch der ersten SD-Karte durch einen schnelleren "Raspberry Pi 4 (8 GB)" in einem "Argon ONE M.2 Case" mit einer "Kingston M.2 SSD" und MariaDB. Allerdings möchte die Fehler aus der Vergangenheit nicht wiederholen und alles dauerhaft ohne Reorganisation speichern, da mein Jäger- und Sammlertrieb nachgelassen hat. Unabhängig von RAM/Power und der verwendeten Datenbank bin ich ein Verfechter von sinnvollen Lösungen. Am einfachsten wär sicher eine automatische Queue für die Abarbeitung, mit dem bisherigen Input bekomme ich das aber sicher schnell hin und bin daher für die obige Lösung wirklich dankbar.

Meine Frage bezog sich aber aus Interesse auf reduceLogNbl und DbLog, da ich die Befehle (siehe oben) beim Test einfach hintereinander eingegeben hatte und erst später darüber nachgedacht habe. Werden die parallel ausgeführt oder bricht der erste Aufruf dann ab, falls er noch nicht fertig ist?

Viele Grüße
Manfred

Frank_Huber

Ich mache meine monatliche Bereinigung so, da laufen die dbrep seriell ab,  ist der erste fertig startet der zweite.

defmod _logdb_bereinigen_1st DOIF ([01:00] and $mday==1)\
(set logdb_export_older_2years exportToFile)\
\
DOELSEIF ([logdb_export_older_2years:"done"] or [logdb_export_older_2years:"finished"])\
(set logdb_delete_older_2years delEntries)\
\
DOELSEIF ([logdb_delete_older_2years:"done"] or [logdb_delete_older_2years:"finished"])\
(set logdb_optimizeTables optimizeTables)\
\
DOELSEIF ([logdb_optimizeTables:"done"] or [logdb_optimizeTables:"finished"])
attr _logdb_bereinigen_1st DbLogExclude .*
attr _logdb_bereinigen_1st cmdState export|delete|optimize|finished
attr _logdb_bereinigen_1st stateFormat {ReadingsVal($name,'state','').", ".ReadingsTimestamp($name,'state','').", ".ReadingsVal('logdb_delete_older_2years','EXCLUDE/Verbrauch/Energiekosten--/----DELETED_ROWS_HISTORY--','')." Zeilen gelöscht."}
attr _logdb_bereinigen_1st wait 0:5:5:0


vielleicht hilft es dir ja. :)

DS_Starter

Zitat
Meine Frage bezog sich aber aus Interesse auf reduceLogNbl und DbLog, da ich die Befehle (siehe oben) beim Test einfach hintereinander eingegeben hatte und erst später darüber nachgedacht habe. Werden die parallel ausgeführt oder bricht der erste Aufruf dann ab, falls er noch nicht fertig ist?

Im DbLog kann kein neuer reduceLogNbl Lauf gestartet werden wenn bereits ein reduceLogNbl gestartet wurde.
Der erste Lauf muß erst durch (oder abgebrochen) sein.
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

ares

Vielen Dank euch für die Rückmeldungen. Mit den vielen Varianten lässt sich sicher etwas passendes für mich finden.
Ich teste das ausgiebig, sobald ich mehr Daten am neuen Pi gesammelt habe.

Grüße
Manfred