Hallo zusammen,
ich habe eine neue Version nach contrib geladen. Ihr könnt sie euch hier herunterladen und testen:
https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_StarterIn dieser Version ist reduceLog aus DbLog integriert und an die Arbeitsweise von DbRep angepasst worden. Die Aufrufsyntax hat sich verändert. Unten habe ich die neue Commandref dazu eingefügt.
Obwohl das Kommando nur reduceLog heißt, arbeitet es selbstverständlich non-blocking. Da alle Funktionen in DbRep (bis auf Ausnahmen) non-blocking arbieten, konnte ich auf den Zusatz "Nbl" verzichten.
Weiterhin ist das set sqlCmd per default ein longtext-Feld, d.h. es geht ein entsprechendes Editorfenster auf. Das ist einfach viel freundlicher wenn man umfangreiche SQL-Statements einfügen will. Die Attribute "timeOlderThan" und "timeDiffToNow" können nun gemeinsam verwendet werden um Zeitabschnitte dynamisiert verwenden zu können.
Hier die Commandref zu reduceLog:
* reduceLog [average[=day]] [exclude=device1:reading1,device2:reading2,...] [include=device:reading]Reduziert historische Datensätze innerhalb der durch die "time.*"-Attribute bestimmten Zeitgrenzen auf einen Eintrag (den ersten) pro Stunde je Device & Reading.
Es muss mindestens eines der "time.*"-Attribute gesetzt sein (siehe Tabelle unten). Die jeweils fehlende Zeitabgrenzung wird in diesem Fall durch das Modul errechnet.
Die für diese Funktion relevanten Attribute sind:
executeBeforeProc : FHEM Kommando (oder perl-Routine) vor dem Export ausführen
executeAfterProc : FHEM Kommando (oder perl-Routine) nach dem Export ausführen
timeOlderThan : es werden Datenbankeinträge
älter als dieses Attribut reduziert
timestamp_end : es werden Datenbankeinträge
älter als dieses Attribut reduziert
timeDiffToNow : es werden Datenbankeinträge
neuer als dieses Attribut reduziert
timestamp_begin : es werden Datenbankeinträge
neuer als dieses Attribut reduziert
Das Reading "reduceLogState" enthält das Ausführungsergebnis des letzten reduceLog-Befehls.
Durch die optionale Angabe von 'average' wird nicht nur die Datenbank bereinigt, sondern alle numerischen Werte einer Stunde werden auf einen einzigen Mittelwert reduziert.
Durch die optionale Angabe von 'average=day' wird nicht nur die Datenbank bereinigt, sondern alle numerischen Werte eines Tages auf einen einzigen Mittelwert reduziert. (impliziert 'average')
Optional kann als letzer Parameter "exclude=device1:reading1,device2:reading2,...." angegeben werden um device/reading Kombinationen von reduceLog auszuschließen.
Tipp: Wird "exclude=.*:.*" angegeben, wird nichts in der Datenbank gelöscht. Das kann z.B. verwendet werden um vorab die gesetzten Zeitgrenzen und die Anzahl der zu bearbeitenden Datenbankeinträge zu checken.
Optional kann als letzer Parameter "include=device:reading" angegeben werden um die auf die Datenbank ausgeführte SELECT-Abfrage einzugrenzen, was die RAM-Belastung verringert und die Performance erhöht.
Beispiel: attr <name> timeOlderThan = d:200
set <name> reduceLog
# Datensätze die älter als 200 Tage sind, werden auf den ersten Eintrag pro Stunde je Device & Reading reduziert.
attr <name> timeDiffToNow = d:10
attr <name> timeOlderThan = d:5
set <name> reduceLog average include=Luftdaten_remote:%
# Datensätze die älter als 5 und neuer als 10 Tage sind, werden bereinigt. Numerische Werte einer Stunde werden auf einen Mittelwert reduziert
Feedback ist wie immer sehr willkommen.
Grüße
Heiko