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

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

Vorheriges Thema - Nächstes Thema

DS_Starter

#945
Hallo miteinander,

Thowe hatte im Beitrag #935 (hat leider etwas länger gedauert  :( ) eine Aufwertung der Funktion "delSeqDoublets" gewünscht.
Das habe ich versucht umzusetzen und eine neue Version von DbRep zum Test in meinem contrib bereitgestellt.
@Thowe, leider kann ich die Varianz nur für numerische Werte umsetzen, Strings kann ich so nicht behandeln.

Das Attribut seqDoubletsVariance ist nun so erweitert:

* seqDoubletsVariance <positive Abweichung [negative Abweichung] [EDGE=negative]>
Akzeptierte Abweichung für das Kommando "set <name> delSeqDoublets".
Der Wert des Attributs beschreibt die Abweichung bis zu der aufeinanderfolgende numerische Werte (VALUE) von Datensätzen als gleich angesehen werden sollen. Ist in "seqDoubletsVariance" nur ein Zahlenwert angegeben, wird er sowohl als positive als auch negative Abweichung verwendet und bilden den "Löschkorridor". Optional kann ein zweiter Zahlenwert für eine negative Abweichung, getrennt durch Leerzeichen, angegeben werden. Es sind immer absolute, d.h. positive Zahlenwerte anzugeben.
Ist der Zusatz "EDGE=negative" angegeben, werden Werte an einer negativen Flanke (z.B. beim Wechel von 4.0 -> 1.0) nicht gelöscht auch wenn sie sich im "Löschkorridor" befinden.

    Beispiele:
    attr <name> seqDoubletsVariance 0.0014
    attr <name> seqDoubletsVariance 1.45
    attr <name> seqDoubletsVariance 3.0 2.0
    attr <name> seqDoubletsVariance 1.5 EDGE=negative

Download aus meinem contrib über die Webeingabe:

"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"

EDIT: Ich habe die Möglichkeiten des Attributs seqDoubletsVariance  noch verfeinert und das Modul neu ins contrib geladen.

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

DS_Starter

Habe die weiterentwickelte Version gerade eingecheckt. Es gibt nu auch noch EDGE=positive.
Ist morgen früh im Update.
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 liebe DbRep-Nutzer,

in meinem contrib liegt die Version 8.29.0.
In dieser Version habe ich wie versprochen ein Feature zur FullDay-Erweiterung eingebaut, welches hier https://forum.fhem.de/index.php/topic,104710.msg986236.html#msg986236 requestet/besprochen wurde.

Die Erweiterung gilt für timeOlderThan / timeDiffToNow gleichermaßen. Hier ein Auszug aus der aktualisierten ComRef:

* timeDiffToNow - der Selektionsbeginn wird auf den Zeitpunkt "<aktuelle Zeit> - <timeDiffToNow>" gesetzt. Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe "FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende des jeweiligen Tages erweitert werden (wirkt nur wenn Zeitdifferenz >= 1 Tag).

    Eingabeformat Beispiel:
    attr <name> timeDiffToNow 86400
    # die Startzeit wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt
    attr <name> timeDiffToNow d:2 h:3 m:2 s:10
    # die Startzeit wird auf "aktuelle Zeit - 2 Tage 3 Stunden 2 Minuten 10 Sekunden" gesetzt
    attr <name> timeDiffToNow m:600
    # die Startzeit wird auf "aktuelle Zeit - 600 Minuten" gesetzt
    attr <name> timeDiffToNow h:2.5
    # die Startzeit wird auf "aktuelle Zeit - 2,5 Stunden" gesetzt
    attr <name> timeDiffToNow y:1 h:2.5
    # die Startzeit wird auf "aktuelle Zeit - 1 Jahr und 2,5 Stunden" gesetzt
    attr <name> timeDiffToNow y:1.5
    # die Startzeit wird auf "aktuelle Zeit - 1,5 Jahre gesetzt
    attr <name> timeDiffToNow d:8 FullDay
    # die Startzeit wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende des jeweiligen Tages erweitert


Sind die Attribute "timeDiffToNow" und "timeOlderThan" gleichzeitig gesetzt, wird der Selektionszeitraum zwischen diesen Zeitpunkten dynamisch kalkuliert.

Wer mag, kann sich das Modul einfach so aus der Kommandozeile herunterladen und ausprobieren:


"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"


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

Frank_Huber


DS_Starter

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

Frank_Huber

Zitat von: DS_Starter am 08 November 2019, 16:39:15
Na das ging ja fix  :D
Ach, wenn ich im Büro bin hab ich das Forum immer nebenher offen. :-)

Ich melde mit v5 Log, es funktioniert!

2019.11.08 17:44:15 4: DbRep logdb_clean_3days - -------- New selection ---------
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - Command: delEntries
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - timeOlderThan - year: , day: 3, hour: , min: , sec:
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - startMonth: 11 endMonth: 10 lastleapyear:  baseYear: 2019 diffdaylight:0 isdaylight:0
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - FullDay option: 1
2019.11.08 17:44:15 5: DbRep logdb_clean_3days - Timestamp begin epocheseconds: 1481842800
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - Timestamp begin human readable: 2016-12-16 00:00:00
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - Time difference to current time for calculating Timestamp end: 259201 sec
2019.11.08 17:44:15 5: DbRep logdb_clean_3days - Timestamp end epocheseconds: 1572994799
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - Timestamp end human readable: 2019-11-05 23:59:59
2019.11.08 17:44:15 5: DbRep logdb_clean_3days - weekday of start for selection: Fr  ->  wdadd: 259200
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - Aggregation: no
2019.11.08 17:44:15 5: DbRep logdb_clean_3days - IsTimeSet: 1, IsAggrSet: 0
2019.11.08 17:44:15 5: DbRep logdb_clean_3days - Devices for operation -
included (23): HM_Powermeter_1,HM_Powermeter_1_Pwr,HM_Powermeter_1_SenF,HM_Powermeter_1_SenI,HM_Powermeter_1_SenPwr,HM_Powermeter_1_SenU,HM_Powermeter_1_Sw,HM_Powermeter_2,HM_Powermeter_2_Pwr,HM_Powermeter_2_SenF,HM_Powermeter_2_SenI,HM_Powermeter_2_SenPwr,HM_Powermeter_2_SenU,HM_Powermeter_2_Sw,HM_Powermeter_3,HM_Powermeter_3_Pwr,HM_Powermeter_3_SenF,HM_Powermeter_3_SenI,HM_Powermeter_3_SenPwr,HM_Powermeter_3_SenU,HM_Powermeter_3_Sw,APC_USV,Stromzaehler
included with wildcard: 
excluded (0): 
excluded with wildcard:
2019.11.08 17:44:15 5: DbRep logdb_clean_3days - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2019.11.08 17:44:15 4: DbRep logdb_clean_3days - SQL execute: delete FROM history where ( DEVICE IN ('HM_Powermeter_1','HM_Powermeter_1_Pwr','HM_Powermeter_1_SenF','HM_Powermeter_1_SenI','HM_Powermeter_1_SenPwr','HM_Powermeter_1_SenU','HM_Powermeter_1_Sw','HM_Powermeter_2','HM_Powermeter_2_Pwr','HM_Powermeter_2_SenF','HM_Powermeter_2_SenI','HM_Powermeter_2_SenPwr','HM_Powermeter_2_SenU','HM_Powermeter_2_Sw','HM_Powermeter_3','HM_Powermeter_3_Pwr','HM_Powermeter_3_SenF','HM_Powermeter_3_SenI','HM_Powermeter_3_SenPwr','HM_Powermeter_3_SenU','HM_Powermeter_3_Sw','APC_USV','Stromzaehler') ) AND TIMESTAMP >= '2016-12-16 00:00:00' AND TIMESTAMP <= '2019-11-05 23:59:59' ;
2019.11.08 17:44:16 5: DbRep logdb_clean_3days - Number of deleted rows: 14105
2019.11.08 17:44:16 3: DbRep logdb_clean_3days - Entries of fhem.history deleted: HM_Powermeter_.//APC_USV/Stromzaehler--/--14105

DS_Starter

Hi Frank,

good news !  8)
Ich teste auch bei mir noch etwas und wenn mir nichts mehr auffällt, checke ich den Stand heute Abend oder morgen ein.

LG
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

#952
In meinem contrib befindet sich die weiterntwickelte Version 8.30.0.
Mit dieser Version gibt es nun die Möglichkeit, Datenbankoperationen mit einem privilegierten (administrativen) User auszuführen. Momentan kann man ihn bei den Sets "sqlCmd" und "index" verwenden.
Bei diesen beiden Commands war es mir als sinnvoll bzw. notwendig aufgefallen.

Dazu gibt es ein neues set/get/Attribut. Hier ein Auszug aus der comref:

* adminCredentials <User> <Passwort> - Speichert einen User / Passwort für den privilegierten bzw. administrativen Datenbankzugriff. Er wird bei Datenbankoperationen benötigt, die mit einem privilegierten User ausgeführt werden müssen. Siehe auch Attribut 'useAdminCredentials'.

* storedCredentials - Listet die im Device gespeicherten User / Passworte für den Datenbankzugriff auf.

* useAdminCredentials - Wenn gesetzt, wird ein zuvor mit "set <Name> adminCredentials" gespeicherter User für bestimmte Datenbankoperationen verwendet.

Wie immer freue ich mich über evtl. Tester.
Download aus meinem contrib über die Webeingabe:

"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"

Grüße und ein schönes WE,
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

ironalf

Hallo Heiko,

ich betreibe eine FHEM Installation mit einer PostgreSQL.
Ich wollte mit Modul DbRep doppelte Einträge löschen.
Bei der Ausführung erhalte ich aber diese Fehlermeldung:
2020-01-22 11:54:35 CET [8618-695] fhem@fhem ERROR:  syntax error at or near "limit" at character 188
2020-01-22 11:54:35 CET [8618-696] fhem@fhem STATEMENT:  delete FROM history WHERE TIMESTAMP = '2003-12-13 00:00:00' AND DEVICE = 'Gas' AND READING = ' statTotal' AND VALUE = 'Hour: 0.00 Day: 0.00 Month: 00.00 Year: 39.89 (since: 2003-01-01 )' limit 1;
PostgreSQL unterstützt bei ,,update" und ,,delete" ,,limit" nicht.
Wäre es möglich das Modul so anzupassen, dass ,,delDoublets" auch bei PostgreSQL funktioniert.

Danke und VG
Alfons

DS_Starter

Hallo Alfons,

das passe ich gerne für Postgre noch an.
Könntest du eine für Postgre passende Syntax liefern, die Limit unterstützt ?
Wenn nicht, muss ich selbst erstmal forschen. Machbar sollte sein. Denke nicht dass Postgre soetwas generell nicht kennt.

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

ironalf

Hallo Heiko,

Leider kann ich dir keine passende Syntax zur Verfügung stellen, ich kenne mich leider mit Datenbanken nicht wirklich aus.
Vielleicht hilft dir das weiter:
https://www.dataqualityapps.de/know-how/123-postgresql-nach-dubletten-suchen.html
https://stackoverflow.com/questions/5170546/how-do-i-delete-a-fixed-number-of-rows-with-sorting-in-postgresql

Danke und VG
Alfons

lichtimc


Hallo DS_Starter,


fällt dir ein Grund ein, weshalb ich beim Setzen von:set DbRep adminCredentials root test
... immer folgende Fehlermeldung erhalte?:
Unknown argument adminCredentials, choose one of eraseReadings deviceRename adminCredentials


Ich danke dir für die Arbeit und deine Unterstützung!


lg

DS_Starter

Zitatfällt dir ein Grund ein, weshalb ich beim Setzen von:set DbRep adminCredentials root test
... immer folgende Fehlermeldung erhalte?:
Ja, weil der Modulautor Mist gemacht hat.  ;)
Der Typ deines Device ist wahrscheinlich Agent. Ich wollte diesen Setter eigentlich nicht in einem Agenten setzbar machen, weil er diese Möglichkeit nicht haben soll. D.h. adminCredentials sollte nur im Set eines DbRep Typ Client erscheinen. Dort klappt auch das setzen aktuell.

Werde ich heute Abend mit korrigieren.

LG,
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

DS_Starter

#958
Hallo Alfons,

Zitat
Leider kann ich dir keine passende Syntax zur Verfügung stellen, ich kenne mich leider mit Datenbanken nicht wirklich aus.
Vielleicht hilft dir das weiter:
https://www.dataqualityapps.de/know-how/123-postgresql-nach-dubletten-suchen.html
https://stackoverflow.com/questions/5170546/how-do-i-delete-a-fixed-number-of-rows-with-sorting-in-postgresql

Danke für die Links. Ich habe schon einiges ausprobiert, aber bis jetzt nichts brauchbares gefunden. Entweder ist es schlicht nicht anwendbar weil keine eindeutige Zeilen-Id bei uns vorhanden ist oder die SQL ist derart langsam, dass es einfach so nicht nutzbar ist.
Ich schaue weiter ...

Wenn noch jemand etwas dazu beisteuern kann, dann nehme ich es gerne entgegen.

EDIT: Kaum habe ich es geschrieben, habe ich auch schon eine Lösung gefunden.  :D
Ich teste noch etwas und stelle das Modul zum Test zur Verfügung wenn ich soweit bin.

LG,
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

DS_Starter

Hallo Alfons, @all,

ich habe die überarbeitete Version bereitgestellt. delDoublets klappt nun auch für PostgreSQL.

Liegt in meinem contrib.

Download, komplett mit "" so im FHEMWEB ausführen:

"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"

Danach FHEM restarten.

Probiers mal bitte bei dir/euch aus. Bei mir waren die Tests alle positiv.

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