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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Hi Tobias,

deine Antwort bezieht sich sicherlich auf die Frage von eldrik aus #10.

Persönlich betreibe ich DbLog gegen eine MySQL auf Synology 415+. Im Allgemeinen habe ich keine Sorgen damit.
Auf der Syno läuft natürlich alles im Heimnetz. Neben den FHEM-Instanzen auch die Surveillance mit Kameras und das Mediastreaming.

Die SVGs generieren auch bei mir hinreichend schnell und fallen bei mir auch nicht sehr ins Gewicht. Engpässe habe ich bei Schreibvorgängen, also Logging, festgestellt, wenn viele fhem-Entitäten gleichzeitig  die Events loswerden wollen und in die DB schreiben wenn die Syno entsprechend ausgelastet ist. Dann kann es vorkommen dass Homematic etwas zickig reagiert.
In diesen Situationen wäre eine nicht blockierende Arbeitsweise von DBLog wünschenswert.

Ich denke dass jeder Nutzer entsprechend seiner Umgebung eigene Erfahrungen berichten kann. Mal schauen was eldrik evtl. mitteilt.

Aber bzgl. des hier entstehenden DbRep-Moduls .... du betreibst eine PostgreSQL. Da ich das Modul bisher nur gegen MySQL und SQLite getestet habe, würde ich dich gern bitten es mal gegen die PostgreSQL zu probieren ob alles soweit klappt.
Das wäre super  :)

Grüße
Heiko
« Letzte Änderung: 04 Juli 2016, 08:32:40 von DS_Starter »
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3493
Poste doch mal einen voll funktionierenden Testcase so wie du ihn haben willst. Dann teste ich diesen

Meine DbLog Instanz heißt: DbLog
FHEM auf Cubitruck mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, SprinkleControl, Sprinkle, TrashCal, MediaList

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Danke für deine Unterstützung  :)

Ich schreibe etwas heute Abend ... muß erstmal was arbeiten .

Grüße
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Hallo Tobias,

hier das kleine Testszenario. Mit MySQL / SQLite habe ich alles hin und hergetestet. Grundsätzlich klappt alles, kommt nur darauf
an ob postgre genauso "tickt". Sollte aber, ich habe extra auf DB-spezifische SQL's bewußt verzichtet.
Nimm bitte das Modul aus dem Eingangsthread.

Definition mit:
define Test DbRep DbLog

Nach der Def sollte state von Test-Device kurz auf "initialized" gehen und nach ein paar Sekunden auf "connected".

1. Test
Ohne weitere Attr zu setzen:

set Test countEntries

In Detailansicht switched Test kurz auf "running" (im Overview-Kopf), dann auf done.
Sobald "done" abgezeigt wird -> Browser-Refresh.
Nun sollte die Anzahl aller Einträge in der DB aufgelistet sein.

2. Test
Attr device und reading auf ein Gerät und/oder Reading setzen welches in deiner DB vorkommt.
Dann

set Test countEntries 

Es sollte die Anzahl der Datensätze der in der DB vorkommenden Device/Reading-Kombination angezeigt werden nachdem "done" und
Browser refresht wurde wie in Test 1.

3. Test
wie Test 2, nur setze die Zeitgrenze timestamp_begin bzw. timestamp_end auf z.B. auf passende Werte um nur einen kleinen Zeitabschnitt
in der DB zu selektieren. z.b. timestamp_begin = 2016-07-04 13:00:00, timestamp_end = 2016-07-04 15:00:00.
Dann:

set Test countEntries  -> es sollten nicht zu viele Einträge selektiert werden , wenn ok dann ->
set Test fetchrows

Nun werden die der Device/Reading-Kombi entsprechenden Datensätze angezeigt.
Immer nach "done" im Overview-Kopf und Browserrefresh. Kannst das Device und/oder Reading auch mal löschen -> dann werden alle Datensätze
in den gegebenen Zeitgrenzen angezeigt.

4. Test
wie Test 3 nur benutze ein Reading/Device welches numerische Reading-Values schreibt und nimm die Zeitgrenzen großzügiger, z.B. einen Monat.

Dann:
set Test averageValue    bzw.
set Test sumValue        bzw.
set Test maxValue 

Das Modul berechnet nun die Durchschnitts-, Summen- und Maximalwerte entsprechend der Selektionsbedingungen.
("done" im Overview-Kopf und Browserrefresh)

5. Test
Wiederhole Test 1 - Test 4 mit praktikablen Aggregationswerten (Attr aggregation).
Es werden dann die entsprechenden Berechnungen innerhalb der jeweiligen Perioden durchgeführt. Das gilt nicht für "fetchrows", dafür wird eine evtl.
gesetzte Aggregation nicht berücksichtigt.

Optional:
Wenn das alles klappt, sollte auch die delete-Funktion (delEntries) keine Schwierigkeiten bereiten. Du kannst
sie natürlich auch gern testen wenn es bei dir testbar ist. Es würden dann alle Datensätze in den gegebenen Zeitgrenzen
und Selektionsbedingungen gegeben durch Device/Reading gelöscht und die Anzahl der Löschungen im Log protokolliert.

Danke und Grüße
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline eldrik

  • Sr. Member
  • ****
  • Beiträge: 794
Moin,

ich betreibe fhem inklusive Postgresql Datenbank für DBlog innerhalb einer virtuellen Linux Instanz unter esxi6 auf einem MacMini 4x2Ghz 16GB RAM Server.

Meine Plots generieren sich auch entsprechend zügig, Probleme habe ich in der Vergangenheit bisher bekommen wenn ich z.B. bei dem Plot meines Hausstromzählers (Digital alle 10Sek. wird ein Wert geloggt), bei der Ansicht maximal herauszoome und dann ein zwei Wochen in die Vergangenheit gehen möchte, dann lädt es sehr lange und FHEM ist für niemanden mehr erreichbar, daher hätte ich es als generelle Stabilisierung von FHEM gesehen wenn das Modul nonblocking unterstützen würde, daher die Anregung.

Bei der Nutzung von Apptime sehe ich das Modul auch regelmäßig in den Top10 meiner verbliebenen Module, die Verzögerungen >3Sek. erzeugen, ich glaube dies ist auf die von DS_Starter beschriebenen Engpässe beim Schreiben zurückzuführen.

Greetz
Eldrik

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Morgen eldrik,

apptime zeigt bei mir im schlechten Fall zw. 3 und 7 Sekunden (Worstcase) für die Funktion DbLog_Log (also Schreiben). Das ist natürlich abhängig von der Auslastung der Synology im Ganzen.

name             function        max    count    total      average     maxDly
LogDB            DbLog_Log   3821   7721   185153    23.98        0 HASH(LogDB); HASH(sysmon)

Ein bisschen Performance habe ich durch Parametrisierung der MySQL erreicht, aber das Grundthema bleibt trotzdem.

EDIT: Habe gerade realisiert dass du auch postgre einsetzt,  vllt. könntest du auch ein paar Tests mit DbRep ausführen wie oben beschrieben.  :) Dann wären alle von DbLog unterstützten DB's auch mit DbRep getestet

Grüße
Heiko

« Letzte Änderung: 05 Juli 2016, 08:19:02 von DS_Starter »
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline eldrik

  • Sr. Member
  • ****
  • Beiträge: 794

EDIT: Habe gerade realisiert dass du auch postgre einsetzt,  vllt. könntest du auch ein paar Tests mit DbRep ausführen wie oben beschrieben.  :) Dann wären alle von DbLog unterstützten DB's auch mit DbRep getestet

Grüße
Heiko

Hi,

will ich gerne mal ausprobieren, denke aber das ich vor nächster Woche nicht dazu kommen werde.

Greetz
Eldrik

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3493
hmm, Modul vom Eingangspost heruntergleaden, umbenannt in 93_DbRep.pm und fhem neu gestartet.
Modul nicht gefunden. Mit einem Reload finde ich das im Log:
reload: Error:Modul 93_DbRep deactivated:
FHEM auf Cubitruck mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, SprinkleControl, Sprinkle, TrashCal, MediaList

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Ist die Datei lesbar (chmod ) ?
« Letzte Änderung: 05 Juli 2016, 14:51:34 von DS_Starter »
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Hallo zusammen,

habe soeben eine Version 3.1 des Moduls in den Anfangsthread hochgeladen und die Beschreibung ergänzt. Hinzugekommen ist ein Attribut "timeDiffToNow" sowie kleinere Progarmmkorrekturen.
Dadurch können nun immer die letzten "timeDiffToNow"-Sekunden für die Selektion berücksichtigt werden. Also z.B. werden mit einem Wert von 86400 immer die letzten 24 Stunden in  einer DbRep-Funktion berücksichtigt. Das kann zum  Beispiel hilfreich sein um sich regelmäßig die in der DB gespeicherten Events eines Gerätes oder Readings ausgeben zu lassen, die im Zeitraum der letzten "xxx" Sekunden aufgetreten sind.

Grüße
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Hallo miteinander,

im Eingangsthread findet ihr die Version 3.2. Mit dieser Version habe ich das Db-Errorhandling in die Blockingcall Subroutinen verschoben um eventuell auftretende DB-Fehler entsprechend dort abzufangen bzw. zu loggen. Nach weiteren erfolgreichen Tests mit MySQL und SQLite checke ich diese Version heute Abend ein.
In der Commandref habe ich zunächst darauf referenziert dass bislang Tests mit MySQL und SQLite erfolgreich durchgeführt wurden. Ich ergänze es um postgre  wenn ich entsprechendes Feedback bekommen habe bzw. bekommen sollte.

viele Grüße
Heiko 
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline SandroK

  • New Member
  • *
  • Beiträge: 25
Hallo Heiko,

kann ich mit der kürzlichen Funktion (Ereigniosse/Werte) der letzten so und soviel Sekunden auch was nützliches bzgl. Differenzwertberechnung
machen ? Hatte mich mal versucht im PM-File was mit Differenzen zu berechen, komme aber damit nicht zurecht, insbesondere die Blocking Funktionen !

Danke nochmals für das Reading Gerüst der Auswertung nach Tagen, finde ich prima und lerne auch dabei gleich was dazu :-)

Die Sachen laufen sehr stabil und  kann nur Sagen Daumen hoch.

VG
Sandro

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Hi Sandro,

danke für das Feedback !   :)

Die Differenzberechnung ist noch ein offenes ToDo bei mir. Habe noch vor eine solche Funktion zu implementieren. Aber brauche noch etwas Zeit, bzw. bitte um etwas Geduld ... ist Sommerzeit  ;)

Als Zwischenlösung könntest du dir evtl. mit dem statistics-Modul weiterhelfen. Schau dir mal die Möglichkeiten des statistic-Moduls in der commandref dazu an. Du könntest z.B. über dieses Modul neue (Differenz)-Readings in deinem Device erzeugen.
Diese erzeugten statistics-Readings sehen etwa so aus:

statEinspeisung_Wirkleistung_Zaehler   Hour: 0.4140 Day: 5.6034 Month: 206.3490 Year: 206.3490 (since: 2016-07-02 )
Damit du numerische Werte zur Weiterverarbeitung bekommst, könntest du nun wiederum ein/ mehrere UserReadings anlegen und diese über ein Regex mit einem Detailwert, hier z.B. dem Tageswert 5.6034, füttern.

Diese Readings dann in der Datenbank speichern lassen. Dann hast du Differenzwerte/ Maximalwerte pro Zeiteinheit zur Verfügung, die du mit den Funktionen des DbRep-Moduls maxValue/sumValue auslesen, aggregieren und zusammenfassen/weiterverarbeiten kannst.

Das ist nur so eine theoretische Idee/Lösungsansatz ohne den Prozess getestet zu haben. Aber das könnte m.M. nach funktionieren. Kannste ja mal ausprobieren ob es bei der Lösung deiner Aufgabenstellung weiterhilft.


viele Grüße
Heiko
« Letzte Änderung: 12 Juli 2016, 11:30:47 von DS_Starter »
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2650
Hallo Sandro,

ich habe nun doch schneller als gedacht Zeit gefunden dem Modul die Funktion "diffValue" zu integrieren und die Zeit sofort genutzt.

Damit kannst du (hoffentlich) dein Problem lösen. Es berechnet die Differenzwerte von Loggings, deren Werte sich fortlaufend erhöhen und keine Differenzen wegschreiben. Zeiteingrenzungen und Aggregationen funktionieren wie gehabt.
Die neue Version 3.3 ist im Eingangsthread hinterlegt und auch die Beschreibung ergänzt.

Ich werde die neue Funktion auch noch weiteren Tests unterziehen bevor ich es einchecke und würde mich über deine Erfahrung/Testbericht damit ebenfalls freuen.

Grüße
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM Gastsystemen auf Debian 9/64 Bit  (Stretch),
DbLog/DbRep mit MariaDB auf Synology 415+,
Homematic, IT, FS20, Cams in Synology Surveillance Station (SSCAM), CUL 433, CUL 868, HM-CFG-LAN,Log2Syslog,SMAEM,SMAInverter

Offline SandroK

  • New Member
  • *
  • Beiträge: 25
Hallo Heiko,

ein kurzes Feedback zum neuen Modul.

Konnte dies nun erfolgreich mit dem diffValue nutzen.

Dies ist nun daraus geworden (Siehe Screenshots)

Habe eine Menge dazu gelernt (readinggroups etc.), vielen vielen Dank.

Trotzdem nochmals 3 Fragen:

1. ) Wie Du vielleicht beim Bild EC_Übersicht.png oder auch bei HT-DETAILS.png siehst, sind hier doppelte Einträge
drin ? Kann dies damit zusammenhängen, das die Readings zwei Gruppen zugeordent sind ? Seit dem ist das wohl,
vorher war das schön zusammengestellt ?

2.) Wie würdest Du eine grafische Darstellung der Zahlenstrahlen angehen ? Eine separate DB würde ich mit den
Ergebnissen des DbRep nicht füttern wollen, da ich das dann schon relativ Zeitnah immer ausführe (ca. alle 15 Minuten)
damit auch die Werte etwas leben :-) Kann ich an einen Plot von einer DbRep Abfrage speisen ? Mein Ansatz wäre:
Zusätzlich eine Text-/Logdatei schreiben lassen, die immer nur kommulativ geschrieben wird und das dann in den Plot rein.

3.) Im Übersichtsbild siehst Du in der Jahresübersicht Daten für den Januar und Dezember ! Dies haut natürlich nicht hin,
da scheint sich auch immer was zu verschieben, wie kann ich dies unterbinden, auch im Detailbild liegen die Daten von Juni/Juli
auf Jan/Feb ? Ich habe nochmals ein Bild rangeklebt wo Du die Definition des Readings siehst und dann noch ein Bild mit dem
Ergebnis !

Viele Grüße Sandro

 

decade-submarginal