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

Guten Abend,

angeregt durch den Wunsch von Omega im Beitrag #459 habe ich die Version 5.8.4 (erster Beitrag) erstellt.
Damit ist es nun möglich das Device als Geräte-Spezifikation] (devspec)  https://fhem.de/commandref_DE.html#devspec anzugeben bzw. mehrere Readings als Komma separierte Liste einzugeben.

  • device - Abgrenzung der DB-Selektionen auf ein bestimmtes Device.
    Es können Geräte-Spezifikationen (devspec) angegeben werden.
    Innerhalb von Geräte-Spezifikationen wird SQL-Wildcard (%) als normales ASCII-Zeichen gewertet. Die Devicenamen werden vor der Selektion aus der Geräte-Spezifikationen und den aktuell in FHEM vorhandenen Devices abgeleitet.

        Beispiele:
        attr <Name> device TYPE=DbRep
        # selektiert Datensätze von aktuell vorhandenen Devices des Typs "DbRep"
        attr <Name> device MySTP_5000
        # selektiert Datensätze vom Device "MySTP_5000"
        attr <Name> device SMA.*
        # selektiert Datensätze von Devices beginnend mit "SMA"
        attr <Name> device SMA_Energymeter,MySTP_5000
        # selektiert Datensätze der Devices "SMA_Energymeter" und "MySTP_5000"
        attr <Name> device %5000
        # selektiert Datensätze von Devices endend mit "5000"


  • reading - Abgrenzung der DB-Selektionen auf ein bestimmtes oder mehrere Readings. Mehrere Readings werden als Komma separierte Liste angegeben.

        Beispiele:
        attr <Name> reading etotal
        # selektiert Datensätze mit Reading "etotal"
        attr <Name> reading et%
        # selektiert Datensätze von Readings beginnend mit "et"
        attr <Name> reading etotal,etoday
        # selektiert Datensätze mit Reading "etotal" und "etoday"

viel Spaß beim Test.

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

Habe soeben die Version 5.8.5 eingecheckt. Sie enthält ein kleines Bugfix in "get procinfo". Manchmal kam es dazu dass die Ergebnistabelle der Datenbankprozesse nicht richtig angezeigt wurde.

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

#467
Hallo zusammen,

in der Version 6.0.0 (erster Beitrag) ist es nun möglich nach einem Backup bzw. Dump das erzeugte File an einen FTP-Server zu senden.
Zur Realisierung gibt es einen Satz von Attributen die den FTP-Transfer einschalten und steuern.
Hier ein Auszug aus der Commandref:

Zitat
FTP Transfer nach Dump
Wenn diese Möglichkeit genutzt werden soll, ist das Attribut "ftpUse" oder "ftpUseSSL" zu setzen. Letzteres gilt wenn Verschlüsselung genutzt werden soll.
Weitere Attribute sind:

    ftpUse           : FTP Transfer nach dem Dump wird eingeschaltet (ohne SSL Verschlüsselung)
    ftpUser          : User zur Anmeldung am FTP-Server, default: anonymous
    ftpUseSSL      : FTP Transfer mit SSL Verschlüsselung nach dem Dump wird eingeschaltet
    ftpDebug       : Debugging des FTP Verkehrs zur Fehlersuche
    ftpDir            : Verzeichnis auf dem FTP-Server in welches das File übertragen werden soll (default: "/")
    ftpPassive      : setzen wenn passives FTP verwendet werden soll
    ftpPort           : FTP-Port, default: 21
    ftpPwd           : Passwort des FTP-Users, default nicht gesetzt
    ftpServer       : Name oder IP-Adresse des FTP-Servers. notwendig !
    ftpTimeout     : Timeout für die FTP-Verbindung in Sekunden (default: 30).

Es werden die Perl Module Net::FTP bzw. Net::FTPSSL benötigt. Sie werden aber erst geladen wenn diese Funktion genutzt wird.
Sollten sie nicht vorhanden sein wird eine entsprechende Meldung angezeigt mit dem Hinweis auf Nachinstallation.
Die Commandref ist überarbeitet und kann entsprechend mit "help DbRep" nachgelesen werden.

Das Löschen von alten Dumpfiles (Versionsverwaltung) habe ich in den Blockingcall verschoben. Dadurch werden Blockierungen von FHEM vermieden wenn die zu löschenden Files sehr groß sind und es dementsprechnd lange dauert.

Viel Spass beim Test....

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

Pyromane

Mahlzeit Heiko,

ich bin gerade ein wenig dazu gekommen DbRep(6.0.0) zu testen, um genau zu sein die "vaccum".
Dabei erhalte ich jedoch die FM:
2017.11.04 11:27:16 3: DbRep MyDbRep - ################################################################
2017.11.04 11:27:16 3: DbRep MyDbRep - ###          New optimize table / vacuum execution           ###
2017.11.04 11:27:16 3: DbRep MyDbRep - ################################################################
2017.11.04 11:27:16 2: DbRep MyDbRep - Error executing: 'SELECT pg_size_pretty(pg_database_size('fhemtest'))' ! PostgreSQL-Error: DBD::Pg::st execute failed: ERROR:  database "fhemtest" does not exist at ./FHEM/93_DbRep.pm line 4785.


Sofern ich das richtig verstehe, steht an dieser Stelle der DB Name hardcoded drinnen  ;D

Grüße
Pyro

PS: Hast du für mich einen Tipp wie der Ubuntu apt Paketname für Net::FTP ist?

DS_Starter

#469
Hi Pyro,

binzur Zeit im urlaub und etwas gehandicapt. 😀
möglicherweise habe ich nach meinen Tests vergessen fhemtest gegen die variable zu tauschen.  :(
Hast du mal in die zeile geschaut ?
Net::Ftp war bei mir schon installiert (debian). Ich würde mal googlen....

edit: im zweifel über CPAN..
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

Pyromane

Hallo Heiko,

lass dich von mir nicht im Urlaub stören, das hat Zeit :)

Zitat von: DS_Starter am 04 November 2017, 15:18:36möglicherweise habe ich nach meinen Tests vergessen fhemtest gegen die variable zu tauschen.  :(
Hast du mal in die zeile geschaut ?

Zeile 4785 und Zeile 4820 hat sich deine Test DB eingeschlichen, einfach
$query = "SELECT pg_size_pretty(pg_database_size('fhemtest'))";
durch
$query = "SELECT pg_size_pretty(pg_database_size('$dbname'))";
ersetzen und alles funktioniert wieder.

Ich sehe gerade das die FTP Funktion für mich gar nicht relevant ist, da ich ja PostgreSQL einsetze  :D


Wünsche dir noch einen schönen Urlaub
Pyro

DS_Starter

Hallo Pyro,

habe nun die Version 6.0.0 gefixt wie du schon geschriebn hast und auch eingecheckt.
Ist morgen im Update.

Danke und 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

t.huber

Hallo,

ich habe im Wiki und im Forum via Suche nichts gefunden.
(Nur die über 30 Seiten dieses Beitrags hab ich mir nicht komplett durchgelesen)
DBLog und DBRep sind installiert und laufen.

Wie kann ich aus meiner Datenbank einen bestimmten Wert zu einer bestimmten Zeit auslesen und zum Rechnen in ein Reading kopieren ?

Hintergrund: Ich möchte von einem Homematic-Zwischenschaltsteckdose mit Messfunktion für unseren Wäschetrockner das Reading energy zu einem Zeitpunkt den ich ja im Plot sehe verwenden um den Energiebedarf für einen Trocknungsvorgang zu ermitteln/ zu berechnen. Per Klick im Plot ist mir das viel zu ungenau. Und dann muss ich ja noch mit Set das Reading des Dummys bzw. Notifys einstellen.

Und falls es vieeel eifachere Methoden gibt würde ich bitte trotzdem wissen wie das gehen würde.
Allein schon aus dem Lerneffekt.
EMONITOR hab ich gestern auch mal eingerichtet. Aber ich konnte da irgendwie noch keinen praktischen Nutzen draus ziehen.
Viel Werte aber irgendwie nicht genau das was ich suche.

DS_Starter

#473
Hallo t.huber,

ZitatWie kann ich aus meiner Datenbank einen bestimmten Wert zu einer bestimmten Zeit auslesen und zum Rechnen in ein Reading kopieren ?

Im einfachsten Fall setzt du im DbRep das Attr "timestamp_begin" und "timestamp_end" auf genau das Datum/Zeit die du auswerten möchtest, z.B. "2017-11-19 11:00:00". Dann bekommst du ein Reading mit einem Wert und kannst einen Event erzeugen. Es muß sich natürlich ein Wert zu diesem Zeitpunkt in der DB befinden !

Damit kannst du wiederum ein Setreading in z.B. einem Dummy ausführen wie hier beschrieben:
https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Reading_von_DbRep_nach_Dummy_.C3.BCbertragen

Und dann damit rechnen.

Eine andere und elegantere Möglichkeit wäre die Userexit-Funktiion zu nutzen, Stichwort Attribut "userExitFn". Es setzt allerdings Perl-Programmierkenntnisse voraus.
Aber in diesem Fall würdest du den interessierenden Zeitraum auswerten, d.h. den Anfagswert (kW bzw. W)  beim Beginn des Auswertungszeitraums sowie den Wert am Ende des Auswertungszeitraums ermitteln, die Differenz bilden und mit der abgelaufenen Zeit multiplizieren. Den fertig ermittelten Wert könntest du dann im W/kW dir bereitstellen.

Wie die userExitFn benutzt werden kann, ist an einem komplexen Beispiel hier beschrieben:
https://wiki.fhem.de/wiki/Datenbankgest%C3%BCtzte_Erstellung_der_Energiebilanz_einer_SMA_PV-Anlage_mit_%C3%9Cberschu%C3%9Feinspeisung

Wenn du den Einarbeitungsaufwand für die userExitFn nicht scheust wäre es m.M. nach das Mittel der Wahl weil es ein sehr mächtiges Werkzeug ist mit dem man sich aus der DB alles erdenkliche herausziehen und in Zahlen ausdrücken kann ... der Knoten muss nur erst einmal platzen  :)

Edit: Über die Attribute Device/Reading im DbRep wird das relevante Device bzw. Reading (im Datensatz in der DB) eingegrenzt.

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

t.huber

Vielen Dank schon mal für die schnelle Antwort !
Ich werd es mir morgen gleich mal anschauen.
mfg Tobias

Pyromane

Hallo Heiko,

danke für den Fix!
Dürfte ich dich bitte dir das mal anzusehen:
2017.11.19 23:21:46 1: PERL WARNING: Use of uninitialized value $wdadd in concatenation (.) or string at ./FHEM/93_DbRep.pm line 1420.
Danke!

Gruß und gute Nacht
Pyro

DS_Starter

Morgen Pyro,

bei meinen ganzen Devices habe ich diese Warnung noch nicht gesehen.
Unter welchen Umständen erscheint sie denn ?

Es müßte entweder der Wochentag oder ein daraus resultierender Korrekturwert nicht gesetzt sein was eigentlich nicht vorkommt.
Vielleicht hilft es mir wenn du verbose 5 einstellst, die Berechnung mit dem DbRep-Device durchführst und die Logausgabe mal postest.

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

ich glaube für deine Aufgabenstellung gibt es eine sehr einfache Lösung.
Der HM-ES-PMSw1-Pl liefert in Reading energyCalc bereits Wh als Wert. Wenn du dieses Reading loggst (davon gehe ich aus), hast du ja bereits diese Werte in der DB. Ich benutze dafür ein userreading energyCalcKwh (in kWh).

Nun musst du nur noch im DbRep-Device die Zeitgrenzen des Beginn des Trocknungsvorganges und dem Ende des Trocknungsvorganges in den Attributen timestamp_begin bzw. timestamp_end eintragen sowie device/reading setzen.

Die verbrauchte Energie ergibt sich dann mit:

set <Name> diffValue

Wenn es exakter auswerten möchtest, wäre es sinnvoll zu Beginn des Trockungsvorganges ein definiertes addLog zu setzen um den Anfangswert von Wh zum genauen Zeitpunkt des Trochnungsvorganges festzuhalten. Dafür gibt es in DbLog eine eingebaute Funktion:

set <name> addLog <device>:<Reading>

Dieses Addlog kannst du z.B. mit einem Notify triggern wenn die Leistungsaufnahme im Zwischenstecker (Reading power) über einen bestimmten Wert steigt.
Gleiches gilt wenn die Aufnahme wieder auf 0 sinkt.

Ich denke damit wäre das Ziel erreicht was du möchtest.
Ungeachtet dessen wäre es durchaus sinnvoll sich mit der userExitFn zu befassen weil man damit viele komplexe Aufgabenstellungen lösen kann.

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

Pyromane

Mahlzeit Heiko,

Zitat von: DS_Starter am 20 November 2017, 08:29:50
bei meinen ganzen Devices habe ich diese Warnung noch nicht gesehen.
Unter welchen Umständen erscheint sie denn ?
Ich habe einen FHEM Neustart durchgeführt und direkt unter den Meldungen kam eben diesen.
Am Abend werde ich versuchen die Meldung mit gesetzten Verbose 5 zu provozieren.

Gruß
Gerald

t.huber

Wow !
Danke DS_Starter für den spezifischen Tipp !

Werd ich gleich mal umsetzten. Ich hoffe ich habe heute noch Zeit.  ;-)