Autor Thema: Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)  (Gelesen 23644 mal)

Offline abc2006

  • Full Member
  • ***
  • Beiträge: 421
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #360 am: 25 Februar 2017, 11:08:13 »
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 ;-)
CUL868v3 über USB ohne Repeater
Nutze zur Zeit FHT, HMS, FS20, HMW485
(Gateway HMW-LGW-O-DR-GS-EU, 2x HMW-IO-12-SW7-DR, 2x HMW-IO-12-Sw14-DR, 1x HMW-LC-Dim1L-DR) und OneWire
Erweiterung und Umbau auf KNX

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #361 am: 28 Februar 2017, 22:56:39 »
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 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline Omega

  • Full Member
  • ***
  • Beiträge: 403
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
« Letzte Änderung: 16 März 2017, 19:53:36 von Omega »
Cubietruck: FHEM 5.8, NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, MySensors, ESPEasy
ZWave

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
Hi Holger,

Zitat
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?

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 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
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 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline Omega

  • Full Member
  • ***
  • Beiträge: 403
Hallo Heiko,

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

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
Prima ,  gern geschehen  :)
Ich checke die Version dann auch ein.

LG und einen schönen Abend

Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline Omega

  • Full Member
  • ***
  • Beiträge: 403
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

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
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":

Zitat
define 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 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline Omega

  • Full Member
  • ***
  • Beiträge: 403
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: secDas Zeichen "»" habe ich schon gegen  ">>" ausgetauscht, das war es aber auch nicht.

Ich hoffe, du sieht auch hier das Problem.

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
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 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline Omega

  • Full Member
  • ***
  • Beiträge: 403
Hallo Heiko,

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

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

Offline stera

  • Full Member
  • ***
  • Beiträge: 139
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


Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
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 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1346
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
« Letzte Änderung: 26 März 2017, 10:33:40 von DS_Starter »
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 8 64 Bit  (Jessie) & Synology iSCSI-LUNs,
DbLog/DbRep mit MariaDB auf Synology,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN