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

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

Vorheriges Thema - Nächstes Thema

supergrobi

#1275
Hallo Heiko,

ich habe nach langer Zeit mal wieder ein Update von DBRep gemacht.
ich benutze die Average Funktion um mir täglich einen Durchnittswert zu Berechnen:
Internals:
   COMMAND    attr DBReporting_LaCrosse device FBDECT_fbahahttp_08761_0044555;
attr DBReporting_LaCrosse reading power;
attr DBReporting_LaCrosse aggregation day;
attr DBReporting_LaCrosse timestamp_begin previous_day_begin;
attr DBReporting_LaCrosse timestamp_end previous_day_end;
set DBReporting_LaCrosse averageValue writeToDB

   DEF        *00:06:00 attr DBReporting_LaCrosse device FBDECT_fbahahttp_08761_0044555;
attr DBReporting_LaCrosse reading power;
attr DBReporting_LaCrosse aggregation day;
attr DBReporting_LaCrosse timestamp_begin previous_day_begin;
attr DBReporting_LaCrosse timestamp_end previous_day_end;
set DBReporting_LaCrosse averageValue writeToDB

   FUUID      xxxxxx
   NAME       at.Energy.Tag.Kuehlschrank
   NR         528
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 00:06:00
   TIMESPEC   00:06:00
   TRIGGERTIME 1597788360
   TRIGGERTIME_FMT 2020-08-19 00:06:00
   TYPE       at
   .attraggr:
   .attrminint:
   READINGS:
     2020-08-18 00:06:00   state           Next: 00:06:00
Attributes:
   DbLogExclude .*
   room       Energy


seit dem Update bekomme ich jetzt täglich zwei Werte:
"2020-08-17 00:00:01" "FBDECT_fbahahttp_08761_0044555" "FBDECT" "calculated" "avgam_day_power" "40.1753" \N
"2020-08-17 23:59:59" "FBDECT_fbahahttp_08761_0044555" "FBDECT" "calculated" "avgam_day_power" "40.1753" \N


wobei der 00:00:01 Wert auch am heutigen Tag (also einen Tag später) erzeugt wird.
Hab ich etwas übersehen oder falsch gemacht?

Gruß
Thomas

DS_Starter

Moin Thomas,

es gab einige Seiten zuvor diverse Wünsche von Usern den Funktionsumfang zu erweitern.
Es gibt für averageValue (andere auch ) erweiterte Aufrufoptionen.
Wahrscheinlich musst du bei dir die Auswertung jetzt mit writeToDBSingle aufrufen.
Schau dir mal die comRef für averageValue an. Dort siehst du was hinzugekommen ist.
Die Erweiterungen sind aber wirklich schon einige Zeit her.  ;)

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

supergrobi

Danke für die Info.
Du hast Recht, ich hab schon ewig (>1 Jahr) kein Update gemacht.
Ich schaue mir das mal an...

ch.eick

#1278
Hallo zusammen,

kann ich auch ein SQL SELECT direkt aus der myUtils gegen die Datenbank absetzen ohne über ein DbRep Device zu gehen, damit das Ergebnis direkt verfügbar ist?

z.B.

SELECT VALUE FROM history WHERE DEVICE='PV_Anlage_1' and READING='Solar_Calculation_fc1'  and TIMESTAMP = '2020-09-03 12:00:00';
4421


Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

#1279
Moin Christian,

momentan nicht, zumindest nicht ohne selbst einiges zu programmieren.
Ich könnte aber ein sqlBlockingCmd implementieren mit dem man das machen könnte.


Eine blockierende Variante der SQL-Befehlsausführung kann mit "get <> dbValue" ausgeführt werden.

FHEM würde blockieren falls die DB nicht antwortet. Deswegen passiert in DbRep ansonsten alles asynchron bis auf wenige, benannte Ausnahmen.

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

ch.eick

#1280
Zitat von: DS_Starter am 03 September 2020, 11:43:52
momentan nicht, zumindest nicht ohne selbst einiges zu programmieren.
Ich könnte aber ein sqlBlockingCmd implementieren mit dem man das machen könnte.

Wie der Name schon sagt würde FHEM blockieren falls die DB nicht antwortet. Deswegen passiert in DbRep alles asynchron bis auf wenige, benannte Ausnahmen.
Hmm, dann kann ich auch mit einem sqlCmd arbeiten und muss halt das reading abwarten.
Ich denke nochmal drüber nach :-)

EDIT: Das sollte die Lösung sein

DbReadingsVal("<name>","<device:reading>","<timestamp>","<default>")
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

#1281
Ja, DbReadingsVal hatte ich bereits implementiert. Ist auch blockierend !
Das gibt es als FHEM Kommando und auch als aufrufbare Funktion aus einem Script heraus. Das letztere wäre dann wohl die Möglichkeit deiner Wahl.

Ist aber kein freies SQL Kommando welches man gestalten kann wie man will. Dafür "get <> dbValue" verwenden.
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

ch.eick

Zitat von: DS_Starter am 03 September 2020, 12:28:12
Ja, DbReadingsVal hatte ich bereits implementiert. Ist auch blockierend !
Das gibt es als FHEM Kommando und auch als aufrufbare Funktion aus einem Script heraus. Das letztere wäre dann wohl die Möglichkeit deiner Wahl.

Ist aber kein freies SQL Kommando welches man gestalten kann wie man will.
Das pass jedoch zu dem was ich gerade benötige.


dbReadingsVal LogDBRep_select_PV_Forecast PV_Anlage_1:Solar_Calculation_fc1 2020-09-03_12:00:00 0
4421


Zu dem "blockierend", es wäre natürlich toll, wenn es da eine Timeout gerade in den beiden Funktionen geben würde.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Zitat
Zu dem "blockierend", es wäre natürlich toll, wenn es da eine Timeout gerade in den beiden Funktionen geben würde.

Ich denk mal drüber nach.  :)
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 Christian,

in meinem contrib liegt eine Version zum Test. Es werden die blockierenden Funktionen Perl Funktion DbReadingsVal als auch die FHEM Kommandos dbReadingsVal bzw. "get <> dbValue" mit einem Timeout überwacht.
Der Timeout kann wie üblich mit dem Attribut "timeout" eingestellt werden.

Übrigens hatte ich bereits mit dem "get <> dbValue" eine Variante eingebaut mit der man SQL Befehle synchron (also blockierend) ausgeführt werden können.
Ich muss also meine Aussage weiter oben revidieren... alles schon vorhanden.  :D

Teste mal bitte die Version.

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

ch.eick

Zitat von: DS_Starter am 03 September 2020, 23:53:18
Der Timeout kann wie üblich mit dem Attribut "timeout" eingestellt werden.

Übrigens hatte ich bereits mit dem "get <> dbValue" eine Variante eingebaut mit der man SQL Befehle synchron (also blockierend) ausgeführt werden können.
Ich muss also meine Aussage weiter oben revidieren... alles schon vorhanden.  :D


# MySQL läuft
{my $timestamp = POSIX::strftime("%Y-%m-%d 12:00:00",localtime(time));;DbReadingsVal("LogDBRep_select_PV_Forecast","PV_Anlage_1:Solar_Calculation_fc0",$timestamp,0);;}
3753

# MySQL gestoppt
{my $timestamp = POSIX::strftime("%Y-%m-%d 12:00:00",localtime(time));;DbReadingsVal("LogDBRep_select_PV_Forecast","PV_Anlage_1:Solar_Calculation_fc0",$timestamp,0);;}
DBI connect('database=fhem;host=192.168.178.40;port=3306','fhemuser',...) failed: Can't connect to MySQL server on '192.168.178.40' (115) at ./FHEM/93_DbRep.pm line 11534.


Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Moin Christian,

jo, passt so. Was wolltest du jetzt sagen ?  :)

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

ch.eick

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

:)

Aber du müsstest mal zum Test timeout auf z.B. 5 Sekunden stellen und eine länger laufende SQL mit  dbReadingsVal absetzen. Dann muß/sollte der Timeout zuschlagen.
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

ch.eick

Zitat von: DS_Starter am 04 September 2020, 11:10:34
Aber du müsstest mal zum Test timeout auf z.B. 5 Sekunden stellen und eine länger laufende SQL mit  dbReadingsVal absetzen. Dann muß/sollte der Timeout zuschlagen.
Ich laufe so optimiert, da habe ich keine Langläufer :-) Ich behalte es im Kopf und teste es, wenn ich mal was habe, was über 1 Sekunde läuft.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick