Warum haben DbRep und DbLog jeweils den Befehl reduceLog?

Begonnen von AnBad, 04 April 2022, 20:15:13

Vorheriges Thema - Nächstes Thema

AnBad

Hallo,
ich versuche mir einen Befehl zusammenzubauen, welcher mir täglich die Readings -ausgenommen von zwei, drei Devices-, welche älter als 2 Wochen sind, löscht. In der Regel benötige ich keine Daten älter als zwei Wochen.
Ich denke, man macht dies mit DbRep und reduceLog, korrekt? So wie ich es sehe, kann man mit DBLog nicht löschen, sondern nur reduzieren, korrekt?

Ich will aber nix falsch machen ergo Daten kaputt machen, welche ich eigentlich behalten möchte.

Bitte gebt mir einen Ratschlag, welches die korrekte Methode ist.

Vielen Dank.

DS_Starter

Für deinen konkreten Fall, nämlich

Zitat
.... welcher mir täglich die Readings -ausgenommen von zwei, drei Devices-, welche älter als 2 Wochen sind, löscht.

benutzt du besser den Befehl delEntries im DbRep mit entsprechender Einstellung der Attribute.

Der reduceLog Befehl im DbRep und auch DbLog dient eher der Reduzierung und Zusammenfassung von vorhandenen Daten. Nicht benötigte Daten werden auch gelöscht, aber mit einer anderen Zielsetzung als einfach älter als 14 Tage zum Beispiel.

Den reduceLog Befehl im DbLog gibt es aus historischen Gründen und bleibt erhalten weil viele User sich daran gewöhnt haben ihn dort zu benutzen. Er wurde aber nach DbRep portiert um dort mehr Einstellungsmöglichkeiten zu haben und wird in diesem Modul auch weiterentwickelt. Im DbLog passiert es nicht mehr.

DbRep ist ein Datenbank Auswertungs- und Pflegetool. DbLog ist das Modul welches sich nur um das Logging kümmern soll. Wie gesagt, aus historischen Gründen gibt es die beschriebene Vermischung der eigentlich unterschiedlichen Zwecke.

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

AnBad

Sehr vielen lieben Dank für die umfangreiche, gut erklärte Antwort.

Viele Grüße und schönen Abend!

AnBad

Zitat von: DS_Starter am 04 April 2022, 20:31:08
benutzt du besser den Befehl delEntries im DbRep mit entsprechender Einstellung der Attribute.

Hallo,
delEntries funktioniert so weit sehr gut. Kann man den Befehl mit Attributen auch über die FHEM-Commandzeile eingeben bzw. auch über Perl nutzen?

DS_Starter

Ich weiß jetzt nicht genau was dir vorschwebt.
Aber im Prinzip erstellst du dir ein DbRep-Device für diese Aufgabe, stellst die Attribute entsprechend ein und führst den Setter über at/notify oder eigenen Code immer wieder aus.

Du kannst dir viele DbReps für verschiedene Aufgaeben erstellen. Ich kopiere mir ein ähnliches Device und verändere nur die Attr wie benötigt in dem neuen Dev. Das dauert nur ein paar Minuten.
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

AnBad

Ah, ok, auf die Idee bin ich nicht gekommen mehrere DbRep anzulegen, die jeweils eine andere Datenpflege-Aufgabe ausführt.

Ich wollte mir eine/mehrere Perl-Sub anlegen, Welche mir dann mit "set DbRep ..." die Pflege durchführt.

DS_Starter

#6
Zitat
Ah, ok, auf die Idee bin ich nicht gekommen mehrere DbRep anzulegen...
Ja, das ist eine Grundidee zur Benutzung von DbRep.

Ich habe ca. 100 produktive DbReps laufen.
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

rabehd

Zitat von: AnBad am 07 April 2022, 21:57:39
Ah, ok, auf die Idee bin ich nicht gekommen mehrere DbRep anzulegen, die jeweils eine andere Datenpflege-Aufgabe ausführt.

Ich wollte mir eine/mehrere Perl-Sub anlegen, Welche mir dann mit "set DbRep ..." die Pflege durchführt.

Ich sehe noch eine Allternative set DbRep sqlCmd ....
Damit kannst Du Dir Deine Pflegeaufgaben zusammenbasteln und im DOIF, notify, at benutzen.
Steht in der Hilfe weit unten  ;).

Auch funktionierende Lösungen kann man hinterfragen.

DS_Starter

#8
Das ist auch eine gute Idee.
Wenn ihr verbose 4 im Device einschaltet, seht ihr die jeweils verwendeten SQL Statements.
Die kann man natürlich nehmen, entsprechend anpassen und je nach Bedarf in einem sqlCmd abgewandelt ausführen lassen.
Dann braucht man dafür nur ein DbRep "Universaldevice" zur sqlCmd-Ausführung.
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

SamNitro

Ich lösche alte einträge hiermit:

set <name> deleteOldDays <n>

Löscht Datensätze in Tabelle history, die älter sind als <n> Tage sind. Die Anzahl der gelöschten Datensätze wird in das Reading lastRowsDeleted geschrieben.

set <name> deleteOldDaysNbl <n>

Identisch zu Funktion "deleteOldDays" wobei deleteOldDaysNbl nicht blockierend ausgeführt wird.

HINWEIS:
Obwohl die Funktion selbst non-blocking ist, muß das DbLog-Device im asynchronen Modus betrieben werden (asyncMode = 1) um FHEM nicht zu blockieren !


defmod at_DbLoggingDeleteOldDay at *03:00:00 set DBLogging deleteOldDaysNbl 31
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)