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

Hi Thowe,

Zitatsogar sonntags am Gerät?! :)
Naja, gerade so mieses Wetter. Will heute aber noch ins Kino  ;)

Für die sqlCmd-Familie hab ich es umgesetzt und nach contrib geladen:

https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter  (Downloadbutton benutzen)

Wie üblich restart oder reload nach dem Download.
Schaue mir das für sumValue und maxValue auch noch an ...

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

Für sumValue, maxValue, minValue und diffValue ist es nun auch umgesetzt und nach contrib geladen.
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

Thowe

Hallo Heiko,

perfekt, mit V8.13.0  funktioniert executeAfterProc für alle umgesetzten Befehle, vielen Dank!!
Führt dbrep vor dem executeAfterProc noch ein commit aus, so dass eine DB-Änderung für den nachfolgenden Befehl immer wirksam ist?

Viele Grüße,
Thowe

DS_Starter

#873
So und jetzt ist es noch für averageValue umgesetzt.  :)

ZitatFührt dbrep vor dem executeAfterProc noch ein commit aus, so dass eine DB-Änderung für den nachfolgenden Befehl immer wirksam ist?
Im Prinzip ja, implizit durch die finish/disconnect Befehle im Hintergrund wenn die session beendet wird.

EDIT: den zweiten Satz habe ich gelöscht, war Unfug  ;)

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 nachgeschaut und gesehen dass ich sogar ein commit explizit drin habe sofern kein Autocommit wirksam ist.
Also mit Sicherheit "Ja".
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

ptr201711

Hallo,habe das Modul im Einsatz. Funktioniert auch.

Ich greife damit auf eine Nicht-FHEM-Datenbank zu z.B. mit "sqlCmd select summe from heizung.protokoll order by datum desc limit 1".

Es kommen auch richtige Werte zurück (in diesem Fall einer), der auch im Modul unter dem Reading SqlResultRow_1 angezeigt wird. Leider habe ich auf dieses Reading keinen Zugriff. Die Sequenz 'ReadingsVal("sql_conn","SqlResultRow_1","155")' gibt mir immer nur den Ersatzwert (155) zurück. "sql_conn" ist der Name meines Devices, das Reading hat den korrekten Wert 925.

Wenn ich den Wert nach FHEM logge steht in der Mysql-Datenbank folgendes:
2019-02-11 15:54:23 | sql_conn         | SqlResultRow_1         | 925       

Dies ist korrekt.                       |

Der Sinn dahinter ist folgender: Ich erfasse den Tanklevel meiner Öltanks von Hand und trage diese in eine von FHEM unabhängige Datenbank ein. Ich lese den letzten eingetragenen Wert zurück, was auch korrekt funktioniert. Nur leider lässt sich das Reading des DbRep devices nicht über FHEM greifen. Ich möchte dieses gern in einem Floorplan anzeigen.

DS_Starter

Hallo Peter,

Auf die Ergebnisreadings von DbRep zuzugreifen ist nicht so ohne weiteres wie bei anderen FHEM-Devices möglich. Der Grund ist die asynchrone Arbeitsweise.
Wenn unmittelbar nach Absetzen eines DbRep-Befehls versucht wird auf SqlResultRow_1 zuzugreifen, dann existiert es noch nicht, da es erst nach Vorliegen des Ergebnisses aus einem Parallelprozess erzeugt wird.

Vorschlag für eine Lösungsvariante ist, dass du dir einen Dummy erzeugst und den in deinem Floorplan zur Anzeige einbindest. In diesem Dummy kannst du dir ein Reading über ein Notify setzen. Diese Möglichkeit ist im Wiki hier beschrieben:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Werte_mittels_Event_.C3.BCbetragen

Es gibt auch noch die Variante über die userExitFn (Attribut im DbRep). Sie bietet maximale Flexibiliät und Möglichkeiten, ist aber mit etwas Programmierung verbunden. Die prinzipielle Funktionseise und wie man sie nutzen kann ist hier an einem Beispiel gezeigt:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Abarbeitung_einer_sequentiellen_Befehlskette_mittels_non-blocking_sqlCmd-Kommandos

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

ptr201711

Danke für die Hilfe mit notify bekomme ich das hin. Wahrscheinlich muss aber doch auf die Utils gehen für die endgültige Lösung. :)

maci

Hallo,

Ich benutze derzeit noch die normale (blocking) Variante der Abfrage und Befüllung des Dummys.
Diese  möchte ich jetzt zeitnah in die nonblocking Variante umbauen.

Was ich aber derzeit noch suche, ist: Wie kann ich mehrere Werte eines Devices aus dem DBLog in eine Dummydevice packen.
Ich habe ein Thermostat-Device (Netatmo) das beinhaltet die akt. Temperatur, die Solltemperatur und das aktuelle laufende Programm.
Nun möchte ich aber die Infos per DbRep auch in meiner anderen Fhem Instanz haben.
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

#879
Hallo maci,

Zitat
Wie kann ich mehrere Werte eines Devices aus dem DBLog in eine Dummydevice packen.
Ich habe ein Thermostat-Device (Netatmo) das beinhaltet die akt. Temperatur, die Solltemperatur und das aktuelle laufende Programm.
Nun möchte ich aber die Infos per DbRep auch in meiner anderen Fhem Instanz haben.

Ich muss zugeben, die Aufgabenstellung nicht wirklich verstanden zu haben. Ich versuche es mal mit meinen Worten.
Du hast ein Thermostat-Device (Netatmo), das beinhaltet die akt. Temperatur, die Solltemperatur und das aktuelle laufende Programm als Readings. Diese Readings werden in eine Datenbank geloggt.
Jetzt möchtest du diese Readings bzw. deren Werte mit DbRep aus der DB lesen und in ein Dummydevice packen.
Das Ganze soll auf einer anderen FHEM Instanz passieren.

Habe ich das so richtig wiedergegeben ?

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

Zitat von: DS_Starter am 11 Februar 2019, 18:34:50
Hallo maci,

Ich muss zugeben, die Aufgabenstellung nicht wirklich verstanden zu haben. Ich versuche es mal mit meinen Worten.
Du hast ein Thermostat-Device (Netatmo), das beinhaltet die akt. Temperatur, die Solltemperatur und das aktuelle laufende Programm als Readings. Diese Readings werden in eine Datenbank geloggt.
Jetzt möchtest du diese Readings bzw. deren Werte mit DbRep aus der DB lesen und in ein Dummydevice packen.
Das Ganze soll auf einer anderen FHEM Instanz passieren.

Habe ich das so richtig wiedergegeben ?


Grüße
Heiko

Hallo Heiko,

Ja das ist so richtig wiedergegeben.
Das Auslesen erfolgt in einer andern Fhem Instanz.

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

Ok, das ist eigentlich auch nicht so schwer.
Auf der anderen FHEM-Instanz definierst du dir ein DbLog-Device welches nichts loggt. Z.B.

define LogDB1 DbLog ./db.conf aaaaa:bbbbb

Das dient nur zur Herstellung der Verbindung. Nun erstellst du auf der anderen FHEM Instanz noch ein DbRep Device mit der Angabe von LogDB1.
Nun kannst du mit dem DbRep auf der anderen FHEM-Instanz alle Werte aus der Quelldatenbank lesen.

Die erstellten Readings kannst du wieder auf einen Dummy schreiben wie im Wiki beschrieben oder über die bereits erwähnte userExitFn.

Was denkst du ?

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

Frank_Huber

Hallo Heiko,

mal eine kleine Frage am Rande,
werden bei set XXX sqlCmd xxx
die Attribute "timestamp_begin" und "timestamp_end" berücksichtigt?

danke & Grüße
Frank

DS_Starter

#883
Hi Frank,

ja, aber du musst dafür Platzhalter in deinem SQL verwenden. Ich glaube so -> §timestamp_begin§. Schau aber besser mal in die Commandref.

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

Hallo Heiko,

Alles erledigt und es funktioniert alles. Weiters habe ich alles auf nonblocking umgebaut.

Danke!

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