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

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

Vorheriges Thema - Nächstes Thema

abc2006

Hi,
habe die neue version getestet. Für meine Anwendungsfälle funktionierts :-)

Deine Anmerkung wegen den Zeitpunkten hat mir keine Ruhe gelassen, deswegen musste ich mich da nochmal reinarbeiten.
Geht mir absolut nicht darum, welche Version jetzt in DbRep drin ist, es funktioniert ja. Geht rein um mein Ego xD.

In meiner Änderung war der Fehler, dass ich von $hour eins abgezogen habe, damit wird $hour negativ und timelocal funktioniert nicht mehr -> doof.
Nach meinem Verständnis sollte aber folgendes funktionieren:

my $ph = strftime "%Y-%m-%d %T",localtime(timelocal(0,0,$hour,$mday,$mon,$year)-3600);


} elsif (AttrVal($hash->{NAME}, "timestamp_begin", "") eq "previous_hour_begin") {
     my $rhour = $hour-1;
         my $rmday = $mday;
         my $rmon  = $mon;
         my $ryear = $year;
         if($rhour<0) {
             $rhour = 23;
                 $rmday = $mday-1;
                 if($rmday<1) {
                 $rmon--;
                     if ($rmon<0) {
                         $rmon=12;
                         $ryear--;
                     }
                         $rmday = $rmon-2?30+($rmon*3%7<4):28+!($ryear%4||$ryear%400*!($ryear%100));
                 }
         }
     $tsbegin = strftime "%Y-%m-%d %T",localtime(timelocal(0,0,$rhour,$rmday,$rmon,$ryear));


Oder hab ich da schon wieder einen Denkfehler drin?

Danke und Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

DS_Starter

Hi Stephan,

habe mal so wie von dir vorgeschlagen probiert. Funktioniert irgendwie nicht. Die Zeitgrenzen für die previous hour werden immer unsinnig gesetzt.
Meiner Meinung nach müßte es aber so wie von dir geschrieben ebenfalls machbar sein.
Ich kann es mir nicht erkären, habe allerdings keinen so rechten Drang die Ursache tiefer zu ergründen  ;)
Werde meine Version 4.11.1 einchecken... es klappt ja  :D

Sollte ich die Ursache für das fehlerhafte Verhalten mit der kurzen Variante noch finden, kann ich es ja noch einbauen.

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

Omega

DbRep habe ich folgendermaßen definiert:

define rep.myDbLog.Size DbRep myDbLog


Ein

sudo apt-get -f install && sudo apt-get -y install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl
habe ich ausgeführt mit anschließendem Neustart.

Nach einem Neustart gibt DbRep auch den Status ,,connected" aus.

myDbLog liegt im Verzeichnis /opt/fhem/dblog und heißt physisch: mydblog.db. Definiert im .conf habe ich sie auch richtig: dbname=/opt/fhem/dblog/mydblog.db.
Das Reading "SQLITE_DB_FILENAME" wird auch richtig aufgelöst mit "/opt/fhem/dblog/mydblog.db".

Gebe ich nun die Anweisung

get rep.myDbLog.Size svrinfo
ein,
erhalte ich folgende Fehlermeldung (ohne Timestamp) im Log:

du: Zugriff auf ,,/opt/fhem/fhem.db" nicht möglich: Datei oder Verzeichnis nicht gefunden


fhem.db gibt es wirklich nicht – von daher ist die Meldung korrekt. Der Zugriff soll ja auch auf die /opt/fhem/dblog/mydblog.db erfolgen – das geschieht aber offensichtlich nicht.
Habe ich etwas übersehen oder liegt noch ein Fehler im Modul vor?

LG
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

DS_Starter

Hi Holger,

Zitatfhem.db gibt es wirklich nicht – von daher ist die Meldung korrekt. Der Zugriff soll ja auch auf die /opt/fhem/dblog/mydblog.db erfolgen – das geschieht aber offensichtlich nicht.
Habe ich etwas übersehen oder liegt noch ein Fehler im Modul vor?

Ja, mein Fehler .... ist ein Überbleibsel meiner Tests. Da ist noch die DB fest verdrahted und sollte eigentlich eine Variable sein.
Werde ich kurzfristig korrigieren und melde mich wieder .

Danke Holger für die Meldung !

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

habe im Eingangsbeitrag die Version 4.11.2 hinterlegt die den Fehler fixed.
Bitte nimm die Version und wenn alles klappt checke ich sie auch ein.

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

Omega

Hallo Heiko,

das ging ja superfix - besonderen Dank dafür!  :)

Und jetzt geht auch alles.
LG
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

DS_Starter

Prima ,  gern geschehen  :)
Ich checke die Version dann auch ein.

LG und einen schönen Abend

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

Omega

Hallo Heiko,

ich bin auf ein weiteres Problem gestoßen:
Ich habe 2 DBs im Einsatz (myDbLog und myDbLog_LT). Für beide wollte ich einen Agent definieren.
Die 1. DB konnte ich auch problemlos definieren

define rep.myDbLog.Agent DbRep myLogDB

Dazu dann noch die attr aus der Commandref (stimmt das attr bei devStateIcon auch?)

Danach habe ich den 2. Agenten eingerichtet

define rep.myDbLog_LT.Agent DbRep myLogDB_LT

Sobald ich aber hier die ,,role Agent" zuweise, bekomme ich die Fehlermeldung:

There is already an Agent device: rep.myDbLog.Agent defined for database !

Mein 2. Agent heißt aber rep.myDbLog_LT.Agent mit der DB myLogDB_LT.

Oh, gleich eine Ergänzung (errortext...), habe einen Blick in's Logfile geworfen.
Ein list des 1. Agenten:

Internals:
   CFGFN
   DATABASE
   DEF        myLogDB
   LASTCMD    svrinfo
   NAME       rep.myDbLog.Agent
   NOTIFYDEV  global,rep.myDbLog.Agent
   NR         10328
   NTFY_ORDER 50-rep.myDbLog.Agent
   ROLE       Agent
   STATE      disconnected »; ProcTime:  sec
   TYPE       DbRep
   VERSION    4.11.2
   Helper:
     DBLOGDEVICE myLogDB
   Helper:
     Dblog:
       Errortext:
         Mydblog:
           TIME       1489850389.85052
           VALUE      Can't connect to data source 'dbi:' because I can't work out what driver to use (it doesn't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set) at ./FHEM/93_DbRep.pm line 3337.

       State:
         Mydblog:
           TIME       1489850576.00303
           VALUE      disconnected
   Readings:
     2017-03-18 16:19:49   errortext       Can't connect to data source 'dbi:' because I can't work out what driver to use (it doesn't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set) at ./FHEM/93_DbRep.pm line 3337.

     2017-03-18 16:22:56   state           disconnected
   Dbloghash:
Attributes:
   devStateIcon connected:10px-kreis-gelb .*disconnect:10px-kreis-rot .*done:10px-kreis-gruen
   disable    1
   icon       security
   role       Agent
   room       DbLog
   showproctime 1
   stateFormat { ReadingsVal("$name","state", undef) eq "running" ? "renaming" : ReadingsVal("$name","state", undef). " »; ProcTime: ".ReadingsVal("$name","sql_processing_time", undef)." sec"}
   timeout    3600



Und ein kleiner Auszug aus dem Log:

2017.03.18 15:56:38 1: PERL WARNING: Use of uninitialized value $dbconn in split at ./FHEM/93_DbRep.pm line 253.
2017.03.18 15:56:38 1: Error: >myLogDB< has no TYPE, but following keys: ><
2017.03.18 15:56:38 1: PERL WARNING: Use of uninitialized value $dbmodel in string eq at ./FHEM/93_DbRep.pm line 416.
2017.03.18 15:56:43 1: PERL WARNING: Use of uninitialized value $dblogname in concatenation (.) or string at ./FHEM/93_DbRep.pm line 718.
2017.03.18 15:56:43 1: PERL WARNING: Use of uninitialized value $dbconn in concatenation (.) or string at ./FHEM/93_DbRep.pm line 722.
2017.03.18 15:56:43 1: PERL WARNING: Use of uninitialized value $dbconn in concatenation (.) or string at ./FHEM/93_DbRep.pm line 726.
2017.03.18 15:56:43 1: PERL WARNING: Use of uninitialized value $dbuser in concatenation (.) or string at ./FHEM/93_DbRep.pm line 726.
2017.03.18 15:56:43 3: DbRep rep.myDbLog.Agent - Connectiontest to database  with user
2017.03.18 15:56:43 3: DbRep rep.myDbLog.Agent - Waiting for database connection
2017.03.18 15:56:43 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/93_DbRep.pm line 692.
2017.03.18 15:56:43 2: DbRep rep.myDbLog.Agent - DB connect failed. Credentials of database  are valid and database reachable ?
2017.03.18 15:56:47 3: DbRep rep.myDbLog.Agent - Connectiontest to database  with user
2017.03.18 15:56:47 3: DbRep rep.myDbLog.Agent - Waiting for database connection
2017.03.18 15:56:51 3: DbRep rep.myDbLog.Agent - Connectiontest to database  with user
2017.03.18 15:56:51 3: DbRep rep.myDbLog.Agent - Waiting for database connection
2017.03.18 15:56:55 3: DbRep rep.myDbLog.Agent - Connectiontest to database  with user
2017.03.18 15:56:55 3: DbRep rep.myDbLog.Agent - Waiting for database connection
2017.03.18 15:57:00 3: DbRep rep.myDbLog.Agent - Connectiontest to database  with user
2017.03.18 15:57:00 3: DbRep rep.myDbLog.Agent - Waiting for database connection
2017.03.18 16:24:56 3: DbRep rep.myDbLog.Agent - Connectiontest to database  with user
2017.03.18 16:24:56 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 328041) line 1.
2017.03.18 16:24:56 3: DbRep rep.myDbLog.Agent - Waiting for database connection


Hast du eine Idee dazu?
LG
Holger

NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

DS_Starter

Hallo Holger,

ich habe ebenfalls mehrere DB's auf meinem Testsystem im Einsatz und habe für die beiden DbLog-Devices LogDB und LogDB1 jeweils einen Agenten definiert ... hat problemlos geklapt.

Wenn ich mich jetzt nicht täusche hast du bei der Definition mit "myLogDB":

Zitatdefine rep.myDbLog.Agent DbRep myLogDB

die Datenbank selbst und nicht das DbLog-Device !  agegeben. DAs würde auch die Fehler im Log erklären.

Du mußt wie in der Hilfe angegeben:

........
define <name> DbRep <Name der DbLog-instanz>

(<Name der DbLog-instanz> - es wird der Name der auszuwertenden DBLog-Datenbankdefinition angegeben nicht der Datenbankname selbst)
........

Schau mal ob ich richtig liege ....

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

Omega

Hallo Heiko,

ja, ich habe die Namen verwechselt - das hängt mit meinen ganzen Tests zusammen.

Ich habe jetzt beide Agenten anlegen können, aber so ganz richtig ist noch nicht alles.
Sobald ich aus dem Wiki das attr stateFormat eingebe, bekomme ich im Log folgende Fehlermeldung:
PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 32340) line 1.
und bei Device Overview habe ich nicht mehr das gelbe Icon sondern den Text
connected »; ProcTime: sec
Das Zeichen "»" habe ich schon gegen  ">>" ausgetauscht, das war es aber auch nicht.

Ich hoffe, du sieht auch hier das Problem.

LG
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

DS_Starter

Hi Holger,

ja, du hast wahrscheinlich das


attr <Rep.Agent> showproctime 1


nicht gesetzt.

Stateformat habe ich so angegeben:


attr Rep.Agent stateFormat { ReadingsVal("$name","state", undef) eq "running" ? "renaming" : ReadingsVal("$name","state", undef). " » ProcTime: ".ReadingsVal("$name","sql_processing_time", undef)." sec"}


Das ";" hinter " »" habe ich im Wiki auch entfernt.

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

Omega

Hallo Heiko,

showproctime hatte ich gesetzt gehabt. Das ";" war's. Danke!

LG
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

stera

Hallo,

ist es eigentlich irgendwie möglich, die erstellten Readings in einem GPlot an zu zeigen?
Wäre ja interessant für Diff und MaxValues ;o)

Gruß,
SteRa


DS_Starter

Hallo SteRa,

ja das kannst du machen, allerdings über Umwege. Du musst dir ja die Ausgaben von DIFF für den Plot auswertbar speichern.

Gehen wir mal für das Beispiel davon aus du hast ein Rep-Device "Rep.Energy" und im Ergebnis von diffValue Strings die so aussehen: "2017-01-30_23-59-31__MySTP_5000__etotal__DIFF__2017-01-30".

Zunächst legst du dir einen Dummy an, z.B.:


defmod Dum.Rep dummy
attr Dum.Rep room DbLog


Dazu noch ein Notify welches die Events aufgreift die mit der Funktion diffValue des DbRep-Devices "Rep.Energy" geliefert werden.
Etwa so:


defmod N.Dum.Rep notify .*Rep.Energy.*DIFF.* { fhem "setreading Dum.Rep DeinReading"." $EVTPART1"}
attr N.Dum.Rep room DbLog


Wenn du nun mit DbRep eine Auswertung fährst, werden in dem Beispiel von dem Dummy z.B.  folgende Events erzeugt:


2017-03-24 16:28:35.857 dummy Dum.Rep DeinReading: 2.3290
2017-03-24 16:28:35.860 dummy Dum.Rep DeinReading: 1.1400


Diese Events kannst du nun wiederum in DbLog bzw. Filelog speichern um dann ein Plot aus "DeinReading" zu erstellen.
Es können bei dem Verfahren je nach Umfang natürlich ordentlich Events generiert werden.
Das Verfahren hat aber den Haken dass  der Event von "DeinReading" den aktuellen Timestamp bekommt und dadurch nicht unbedingt die Realität wiedergibt ... nämlich den Zeitpunkt zu welchem die Differenz eigentlich berechnet wurde bzw. entstanden ist.

Ggf. ist da noch etwas Aufwand reinzustecken, aber es wäre ein Weg ...

viele 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

#374
Hallo miteinander,

die Winterzeit ist vorbei und ich habe die Version 4.11.3 im ersten Beitrag eingestellt die diesen Wechsel in den Selektionsabgrenzungen berücksichtigt.
Ich checke die Version auch ein.

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