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

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

Vorheriges Thema - Nächstes Thema

oldscout

Hallo,
hier bitte schön:
Internals:
   CFGFN     
   DATABASE   
   LASTCMD     
   MODEL      Client
   NAME       test
   NOTIFYDEV  global,test
   NR         10079
   NTFY_ORDER 50-test
   ROLE       Client
   STATE      initialized
   TYPE       DbRep
   UTF8       0
   VERSION    8.2.2
   HELPER:
     DBLOGDEVICE
     SQLHIST   
   Helper:
     DBLOG:
       state:
         myDbLog:
           TIME       1539319636.3901
           VALUE      initialized
   READINGS:
     2018-10-12 06:47:16   state           initialized
   dbloghash:
     HELPER:
Attributes:


FHEM 5.8 auf Intel Celeron CPU
HM-.*, 1-Wire DS18B20, FritzDect 200, HMLAN, HMUSB, Arduino Uno, ESP8266, Enigma2, FB7490, MySql-DB,TP-Link HS100, RaspiCCU

DS_Starter

Das DbLog Device myDbLog ist nicht connected und nur initialized. DbLog muss auf connected stehen wenn alles in Ordnung wäre.
Kannst du bitte noch ein list von myDbLog liefern und auch das define mit dem du test angelegt hattest ?
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

oldscout

Hallo,
ich verzieh mich in die äusserste Ecke.......
ich habe beim Define die DbLog Instanz versäumt anzugeben......
bisher habe ich die Devs immer nur kopiert....... und da gings natürlich..... was mich hier geritten hat, das mal von "Null" zu machen.....

Sorry, meine Dummheit.

Danke aber bei der Lösung des anderen Problems mit der Zählerei.
Schönes WE.
Gruss
FHEM 5.8 auf Intel Celeron CPU
HM-.*, 1-Wire DS18B20, FritzDect 200, HMLAN, HMUSB, Arduino Uno, ESP8266, Enigma2, FB7490, MySql-DB,TP-Link HS100, RaspiCCU

DS_Starter

Alles klar  :)
Aber ich muss diesen Fehler abfangen, damit sowas nicht vorkommen kann.

Ebenfalls 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

maci

Ich habe zwar schon etwas mitgelesen bei dem langen Thread. Aber was ich nicht finden konnte:
Ist es mit dem Modul möglich, Werte aus der Datenbank zu lesen und diese in einem Dummy auszugeben.

Ich frage nur nach, weil ich überlege, meinen 2. Fhem Server ebenfalls in die DBLog am Hauptserver einzubinden.

Oder bin ich da am falschem Dampfer?
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

DS_Starter

#830
Ja, das geht mit verschiedenen Möglichkeiten.
Im Wiki steht eine davon

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Reading_von_DbRep_nach_Dummy_.C3.BCbertragen

Du kannst auch mit der userExitFn arbeiten. Das ist zugegeben etwas advanced weil etwas Programmierung nötig ist. Aber dafür sehr flexibel.
Gibt bestimmt noch mehr ...

Aber vllt. umreisst du dein Szenario kurz was du vorhast, möglicherweise geht alles einfacher.

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

maci

Hallo Heiko,

Ich werde mir zuerst nochmals das Wiki zu Gemüte führen.

Das was ich vorhabe, ist einfach erklärt.

Ich habe 2 Fhem Instanzen.
Derzeit logge ich die 2. Instanz über Fhem2Fhem. Doch habe ich Probleme damit. Da meine 2. Instanz nicht immer online ist. Diese ist offline wenn ich diese Dienste nicht benötige.
Nun hängt sich meine Hauptinstanz immer auf, wenn ich die 2. Instanz wieder starte. Da hier dann Fhem hier glaubt der Port 7072 ist schon belegt.

Mir kommt es einfach einfacher vor, die benötigten Werte in der Hauptinstanz aus der Log DB wieder zu holen und auszugeben. Es geht immer nur um Infos ob ein Gerät on oder off ist. Die Temperaturwerte hole ich mir immer direkt aus dem OWserver.
Wobei es auch sein kann, dass ich später auch noch andere Werte holen will.

Gesteuert wird die 2. Instanz nicht aus der Hauptinstanz. Ich brauche eben nur Infos.

Gruß
Georg
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

DS_Starter

#832
Morgen Georg,

in dem Fall fällt mir noch etwas ein. Sobald du ein dbrep device definiert hast, steht die Funktion

DbReadingsVal("<name>","<device:reading>","<timestamp>","<default>")

Zur Verfügung. Gleich am Anfang der Hilfe von dbrep gibt es weitere Erläuterungen und Beispiel dazu.
Damit kannst du dir immer den aktuellsten Wert deines device/readings aus der db holen und einen dummy setzen oder was auch immer. Als timestamp nimmst du einfach die aktuelle zeit mit Formatumwandlung wie die Funktion es benötigt.
Die Funktion ist blockierend, d.h. du musst mal schauen ob die Geschwindigkeit für dein System passt.
Aber ansonsten wahrscheinlich genau was du verwenden könntest.

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

maci

Danke Heiko,

Das werde ich mir gleich, wenn ich wieder zu Hause bin ansehen.
Werde berichten

Gruß
Georg
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

DS_Starter

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_Starter

In 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
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

@Georg, ich habe den Wiki-Artikel zur Dummy-Verwendung komplett überarbeitet und ergänzt:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Readingwerte_von_DbRep_nach_Dummy_.C3.BCbertragen

Damit sollte es dir leichter fallen dein Szenario umzusetzen.
Bei Fragen einfach fragen  :)

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,

wie von oldscout hier https://forum.fhem.de/index.php/topic,92038.0.html#msg845814 requestet, habe ich die countEntries Funktion so umgebaut, dass sofern mehr als ein Reading im Attribut "reading" angegeben ist, die Anzahl jedes einzelnen Readings und zusaätzlich die Summary aller angegebenen Readings gezählt und ausgegeben wird. Dies erfolgt für jedes Zeitintervall falls aggregation gesetzt ist.

Download erstmal aus contrib hier:

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

Danke für die Anregung oldscout ! Das ist ein echter Mehrwert für das Modul und den Anwender wie ich finde.

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

Ich habe die countEntries-Funktion nochmal dahin abgeändert, dass man die detaillierte count-Readings Ausgabe mit dem neuen Attribut "countEntriesDetail" einschalten kann. Sonst wird nur die Summary wie bisher ausgegeben. Ich hatte festgestellt dass man sonst eine u.U. sehr lange Liste bekommt wenn man alle EInträge in der DB zählt.

Zitat aus Commandref:

Zitat
...
Standardmäßig wird die Summe aller Datensätze, gekennzeichnet mit "ALLREADINGS", erstellt. Ist das Attribut "countEntriesDetail" gesetzt, wird die Anzahl jedes einzelnen Readings zusätzlich ausgegeben.
....

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

Die Version 8.4.0 ist eingecheckt und morgen früh per update verfügbar.

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

#839
Guten Morgen,

ich habe meine To-Do Liste etwas weiter abgearbeitet und ein Feature eingebaut um Datensätze mit devices/readings nicht nur einschließen, sondern explizit ausschließen zu können.
Die Anforderung geht zurück auf diesen Beitrag von der-pw: https://forum.fhem.de/index.php/topic,91357.msg838605.html#msg838605

Dadurch erweitert sich die Syntax der Attribute device/reading:

* device - Abgrenzung der DB-Selektionen auf ein bestimmtes oder mehrere Devices.
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.
Wird dem Device bzw. der Device-Liste oder Geräte-Spezifikation ein "EXCLUDE=" vorangestellt, werden diese Devices von der Selektion ausgeschlossen.

    Beispiele:
    attr <name> device TYPE=DbRep
    attr <name> device MySTP_5000
    attr <name> device SMA.*,MySTP.*
    attr <name> device SMA_Energymeter,MySTP_5000
    attr <name> device %5000
    attr <name> device TYPE=SSCam EXCLUDE=SDS1_SVS
    attr <name> device EXCLUDE=SDS1_SVS
    attr <name> device EXCLUDE=TYPE=SSCam


* reading - Abgrenzung der DB-Selektionen auf ein bestimmtes oder mehrere Readings sowie exkludieren von Readings. Mehrere Readings werden als Komma separierte Liste angegeben.
SQL Wildcard (%) wird in einer Liste als normales ASCII-Zeichen gewertet.
Wird dem Reading bzw. der Reading-Liste ein "EXCLUDE=" vorangestellt, werden diese Readings von der Selektion ausgeschlossen.

    Beispiele:
    attr <name> reading etotal
    attr <name> reading et%
    attr <name> reading etotal,etoday
    attr <name> reading etotal,etoday EXCLUDE=state
    attr <name> reading etotal,etoday EXCLUDE=Einspeisung%


Download erstmal aus contrib hier:

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

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