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

Die Version 8.6.0 mit den beschriebenen Erweiterungen und weiteren Verbesserungen in reduceLog ist eingecheckt.
Bitte in commandref nachlesen.

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

#841
Im contrib Verzeichnis

https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

gibt es eine neue DbRep-Version.
In dieser Version habe ich das Attribut "valueFilter", was es ja schon einige Zeit gibt, auch für die folgenden Funktionen verfügbar gemacht:

averageValue, changeValue, countEntries, delEntries,delSeqDoublets, diffValue, exportToFile, fetchrows, maxValue, minValue, reduceLog, sumValue, syncStandby

Der in valueFilter gesetzte Wert wird als REGEXP auf das DB-Feld "VALUE" angewendet und kann dazu dienen, zusätzlich zu den vorhandenen Möglichkeiten die Auswahl der Datensätze hinsichtlich ihres im Feld VALUE enthaltenen Wertes einzuschränken.
Welche regulären Ausdrücke das jeweilige Datenbanksystem verwenden kann, ist der REGEXP-Doku des jeweiligen DB-Systems zu entnehmen.
Für MariaDB kann man sie z.B. hier lesen: https://mariadb.com/kb/en/library/regular-expressions-overview/

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

Hallo zusammen,

ich habe noch etwas weiter am Modul gearbeitet und das Attribut "fastStart" implementiert.
Was es bewirkt:

* fastStart -
Normalerweise verbindet sich jedes DbRep-Device beim FHEM-Start kurz mit seiner Datenbank um benötigte Informationen abzurufen und das Reading "state" springt bei Erfolg auf "connected". Ist dieses Attribut gesetzt, erfolgt die initiale Datenbankverbindung erst dann wenn das DbRep-Device sein erstes Kommando ausführt.
Das Reading "state" verbleibt nach FHEM-Start solange im Status "initialized". Diese Einstellung kann hilfreich sein wenn viele DbRep-Devices definiert sind.

Liegt im contrib-Verzeichnis.

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

Version 8.8.0 ist eingecheckt und morgen früh per update verfügbar.
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 zusammen,

ist zwar momentan eher ein Monolog hier  ;) , aber ich möchte euch darüber informieren, dass im contrib Verzeichnis eine neue Version von DbRep liegt
in der ich einen Befehl zur Datenbankbereinigung doppelter (bzw. mehrfacher) Datensätze implementiert habe.

* delDoublets [adviceDelete | delete] - zeigt bzw. löscht doppelte / mehrfach vorkommende Datensätze. Dazu wird Timestamp, Device,Reading und Value ausgewertet.
Die Attribute zur Aggregation,Zeit-,Device- und Reading-Abgrenzung werden dabei berücksichtigt. Ist das Attribut "aggregation" nicht oder auf "no" gesetzt, wird im Standard die Aggregation "day" verwendet.

    adviceDelete    : ermittelt die zu löschenden Datensätze (es wird nichts gelöscht !)
    delete    : löscht die Dubletten


Aus Sicherheitsgründen muss das Attribut "allowDeletion" für die "delete" Option gesetzt sein.
Die Anzahl der anzuzeigenden Datensätze des Kommandos "delDoublets adviceDelete" ist zunächst begrenzt (default 1000) und kann durch das Attribut "limit" angepasst werden. Die Einstellung von "limit" hat keinen Einfluss auf die "delDoublets delete" Funktion, sondern beeinflusst NUR die Anzeige der Daten.
Vor und nach der Ausführung von "delDoublets" kann ein FHEM-Kommando bzw. Perl-Routine ausgeführt werden. (siehe Attribute "executeBeforeProc", "executeAfterProc")

    Beispiel:

    Ausgabe der zu löschenden Records inklusive der Anzahl mit "delDoublets adviceDelete":

    2018-11-07_14-11-38__Dum.Energy__T 260.9_|_2
    2018-11-07_14-12-37__Dum.Energy__T 260.9_|_2
    2018-11-07_14-15-38__Dum.Energy__T 264.0_|_2
    2018-11-07_14-16-37__Dum.Energy__T 264.0_|_2

    Im Werteteil der erzeugten Readings wird nach "_|_" die Anzahl der entsprechenden Datensätze ausgegeben, die mit "delDoublets delete" gelöscht werden.


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

MarkusN

Um deinen Monolog mal ein bisschen zu unterbrechen  ;D

Ich habe diverse Zähler (Gas, Strom) bei denen ich den aktuellen Tagesverbrauch in eine MySQL DB logge (Module GasCalculator/ElectricityCalculator). Dieser Verbrauch wird jede Nacht zurückgesetzt. Genau genommen interessieren mich hierbei nur die jeweils höchsten Werte pro Tag, alles andere ist eigentlich nur Ballast. Ermöglicht mir dieses Modul alle anderen Werte außer die Tageshöchstwerte zu löschen?

DS_Starter

#846
 :D

Grundsätzlich kann ich deine Frage bejahen.
Erste Möglichkeit die mir einfällt ... man überlegt sich ein schlaues SQL Statement was diese Aufgabe erfüllt und lässt es regelmäßig mit sqlCmd laufen.

Mit den zur Zeit eingebauten Möglichkeiten könntest du auch so vorgehen:

- Attribute device, reading und die Zeitabgrenzung timeDiffToNow = d:3, aggregation = day setzen
- set ... maxValue writeToDB ausführen

Dadurch wird mit jedem Lauf der Tages-Maximalwert des betrachteten Readings mit einem neuen Readingnamen in die DB geschrieben. Betrachtet werden bei jedem Lauf die letzten 3 Tage.
Die neuen Readings kannst du dann in Diagrammen darstellen etc.

Und wenn alles so ist wie du dir es wünscht kannst du mit delEntries alle Originalreadings löschen die älter sind als 3 Tage. Das machst du dann mit einem anderen DbRep Device was entsprechend eingestellt ist.
Ist also auch so möglich vorzugehen.

Vielleicht nehme ich eine solche Funktion noch mit als sqlSpecial auf.  :)

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

andies

Zitat von: DS_Starter am 09 November 2018, 15:20:03
ich möchte euch darüber informieren, dass im contrib Verzeichnis eine neue Version von DbRep liegt
in der ich einen Befehl zur Datenbankbereinigung doppelter (bzw. mehrfacher) Datensätze implementiert habe.

* delDoublets [adviceDelete | delete] - zeigt bzw. löscht doppelte / mehrfach vorkommende Datensätze. Dazu wird Timestamp, Device,Reading und Value ausgewertet.
Was ist denn der Unterschied zu
set DbLogRep delSeqDoublets delete
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

DS_Starter

Guten Morgen,

Zitat
Was ist denn der Unterschied zu
Code: [Auswählen]

set DbLogRep delSeqDoublets delete

Hinter delSeqDoublets  steckt eine andere Logik. Bei dieser Funktion werden nicht nur echte Dubletten (also Datensätze mit identischen Werten in den Feldern TIMESTAMP,DEVICE,READING,VALUE) gelöscht, sondern es werden auch die nachfolgenden Datensätze mit den Werten in DEVICE,READING,VALUE geprüft und bei Gleichheit gelöscht. Wenn du in der Commandref schaust ist die Funktionslogik genau beschrieben.

Die Funktion delDoublets löscht tatsächlich nur echte Dubletten.

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

topa_LE

Guten Morgen,

hab das nun auch mal umgesetzt dbRep zu nutzen.

Folgendes möchte ich machen:

die current mit AT und Notify automatisch löschen und aus der history Daten in die leere current auffüllen.

Alles eingerichtet, nach dem Wiki:
https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#d.29_Arbeitsweise_und_Raw-Definitionen

vor erst zum Testen manuell mit:
set Rep_FillCurr_fhem tableCurrentPurge

die current geleert, das klappt.

Möchte ich nun mit:
set Rep_FillCurr_fhem tableCurrentFillup
die leere current Table mit Werten aus der history neu befüllen, fehlen mir die Type,Events,Value und Unit.

Nur die Device und Readings werden in die current geschrieben.

Wo liegt mein Fehler?
 




topa_LE

Noch die Define:


defmod Rep_FillCurr_fhem DbRep DBLogging
attr Rep_FillCurr_fhem DbLogExclude .*
attr Rep_FillCurr_fhem alias [current] Tabelle erneuern FHEM DB
attr Rep_FillCurr_fhem allowDeletion 1
attr Rep_FillCurr_fhem devStateIcon connected:10px-kreis-gruen .*disconnect:10px-kreis-rot .*done:10px-kreis-gruen
attr Rep_FillCurr_fhem event-on-update-reading state,--DELETED_ROWS_CURRENT--
attr Rep_FillCurr_fhem group DB Current Table - Management
attr Rep_FillCurr_fhem icon database
attr Rep_FillCurr_fhem room Logging
attr Rep_FillCurr_fhem showproctime 1
attr Rep_FillCurr_fhem timeDiffToNow d:30
attr Rep_FillCurr_fhem verbose 3

setstate Rep_FillCurr_fhem done
setstate Rep_FillCurr_fhem 2018-12-10 08:52:02 background_processing_time 3.6404
setstate Rep_FillCurr_fhem 2018-12-10 08:52:02 number_lines_inserted 140
setstate Rep_FillCurr_fhem 2018-12-10 08:52:02 sql_processing_time 3.6066
setstate Rep_FillCurr_fhem 2018-12-10 08:52:02 state done

DS_Starter

ZitatNur die Device und Readings werden in die current geschrieben.

Wo liegt mein Fehler?
Es liegt kein Fehler vor. Works as designed.
Die Device / Reading Kombination benutzt du für die Auswahl im SVG Editor.
Wofür benötigst du die anderen Feldwerte ?

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

topa_LE

Hallo Heiko,

ok, das kein Fehler vorliegt und ich alles korrekt gemacht habe ich ja gut ...  :D

Naja die ursprüngliche current ist ja auch vollständig. Ich nutze keine SVG Plots sondern Grafana.

Gut eigentlich wollte ich die current immer aktuell halten und bei neuen devices die schon für dblog exclude eingestellt haben nicht nochmal in die current schreiben. Aber das ist nun nicht so tragisch.

Dann stell ich den Dblogtype: SampleFill/History wieder auf Current/History um. Unbedingt benötige brauche ich es ja nicht, dachte nur weil im Wiki steht, das aus der history die current gefüllt wird. Da geht man ja von aus, das die dann vollständig ist.

Ok, danke für die Aufklärung.

DS_Starter

Hallo topa_LE,

jetzt habe ich mir dein Anliegen noch einmal durch den Kopf gehen lassen. Aber so richtig klar ist es mir noch nicht geworden.
Es wäre ja nicht so schwierig eine Funktion zu implementieren, die nicht nur die Device/Reading Kombinationen in die current schreibt, sondern zum Beispeil alle Datensätze der letzten x Tage um sie zur Auswertung aus der current zu lesen.

Aber es ist mir nicht klar geworden warum du die current nutzen willst und nicht die Daten in der history Tabelle was der Normalfall wäre ?

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

topa_LE

Hallo Heiko,

danke dir, dass du dir da Gedanken machst. ;-) Muss aber nicht sein.

Naja im Normalfall nutze ich auch meine history. Hab nur vor einiger Zeit dein Modul installiert, weil es einige nützliche Funktionen hat.

Da in meiner current trotz :

defmod n_DbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*
attr n_DbLogExclude DbLogExclude .*
attr n_DbLogExclude alias Für neue Geräte dbExclude setzen
attr n_DbLogExclude group Logging
attr n_DbLogExclude icon database
attr n_DbLogExclude room Logging


Defines dort listet, obwohl ich das nur per dbloginclude einzeln definiere, fand ich die Option, das die current regelmäßig bereinigt wird und danach sauber aus der history mit Begrenzungen (Tage) neu erstellt wird, einfach gut.

Grundsätzlich brauche ich die current nicht, da ich per Grafana alles aus der history lese.

Mich wunderte eben nur das geschriebene im Wiki etwas und verwirrte.
Das die current für SVG Auswahl grundsätzlich nur die Readings/Device benötigt, wusste ich nicht.

Stellt mir eben aber gerade die Frage, für was dann die Funktion der current Bereinigung ...  :-[

Im Normalfall (DbLogType=Current/History) ist ja die current auch komplett befüllt. Aber falls du das noch implementieren willst ok, für mich brauchste das aber nicht machen ;-)