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

Hallo Torsten,

da fällt es mir gerade wie Schuppen von den Augen:

ZitatMit den von Dir gemachten Angaben hat das nicht ganz geklappt. Der Wert war OK, aber die Unit wurde bei allen Einträgen auf 2 gesetzt

Der Ausdruck "$VALUE,$UNIT" hätte in Klammern gesetzt werden müssen, also -> { ($VALUE,$UNIT) = split(" ",$VALUE) }.
Blöder Fehler ...

Bezüglich der Warnung in DbLog brauchst du dir keine Gedanken machen. Das ist nur eine programmtechnische "Unsauberkeit" die ich fixen werde.

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

ToKa

Hallo Heiko,

ist ja noch mal gut gegangen ;)

Aber die Commandref solltet Du dann auch noch anpassen, da ist der gleiche Fehler drin.

Auf jeden Fall vielen Dank für das tolle Modul und die Arbeit, die Du da rein steckst.

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

DS_Starter

Hi Torsten,

ZitatAber die Commandref solltet Du dann auch noch anpassen, da ist der gleiche Fehler drin.
Hast recht ... habe es geändert und eingecheckt.

Danke für den Hinweis !

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

Smarti

Hallo,

ich hätte eine Frage zum DpRep. Auf jeden Fall ein großen Lob da das Modul selbst! Macht vieles einfacher!

Ich würde gerne Daten aus einem bestimmten Zeitraum exportieren z.B. alle Events eine Monats. Bevor ich ein ReduceLog durchführe.

Vergleichbar dem FileLog, dass ich z.B. Monatsweise einen Dump, der Datensätze des entsprechenden Zeitraums in ein eigenes DBfile oder CSV schreiben kann.

Wie müsste ich das anstellen?

Vielen Dank!

Pyromane

Hallo,

sollte sich mit den Attributen:

  • timestamp_begin
  • timestamp_end
  • aggregation
sowie dem Setbefehl bewerkstelligen lassen:

  • exportToFile

Im Commandref zu exportToFile sind ein paar Möglichkeiten aufgezählt.

Grüße
Pyro

DS_Starter

Hallo Smarti,

Pyro hat dich schon auf den richtigen Weg hingewiesen.

Ergänzend dazu noch der Hinweis, wenn du

  • timestamp_begin = current_month_begin
  • timestamp_end   = current_month_end
setzt, werden immer alle Datensätze des aktuellen Monats exportiert. Dazu darf dann das Attribut device/reading nicht gesetzt sein.
Erstelle dir für die Export-Aufgabe am Besten ein separates DbRep-Device um es entsprechend einzustellen.

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

Hallo zusammen,

im ersten Beitrag ist die V7.14.6 hinterlegt.
Ich habe die Möglichkeiten des Attributes "expimpfile" erweitert um Wildcards (ähnlich Filelog) verwenden zu können.

Hier die neue Beschreibung:

* expimpfile - Pfad/Dateiname für Export/Import in/aus einem File.

Der Dateiname kann Platzhalter enthalten die gemäß der nachfolgenden Tabelle ersetzt werden. Weiterhin können %-wildcards der POSIX strftime-Funktion des darunterliegenden OS enthalten sein (siehe auch strftime Beschreibung).
Zur POSIX Wildcardverwendung siehe auch die Erläuterungen zu Filelog.
Allgemein gebräuchliche Wildcards sind:

    %d    : Tag des Monats (01..31)
    %m    : Monat (01..12)
    %Y    : Jahr (1970...)
    %w    : Wochentag (0..6); beginnend mit Sonntag (0)
    %j    : Tag des Jahres (001..366)
    %U    : Wochennummer des Jahres, wobei Wochenbeginn = Sonntag (00..53)
    %W    : Wochennummer des Jahres, wobei Wochenbeginn = Montag (00..53)
    %L    : wird ersetzt durch den Wert des global logdir Attributs
    %TSB    : wird ersetzt durch den (berechneten) Wert des timestamp_begin Attributs


    Beispiele:
    attr <name> expimpfile /sds1/backup/exptest_%TSB.csv
    attr <name> expimpfile /sds1/backup/exptest_%Y-%m-%d.csv 

Ich denke damit ist ein weiterer Mehrwert gegeben.

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

nun habe ich auch noch die Funktionen exportToFile, importFromFile etwas erweitert. (V7.14.7 im ersten Beitrag)
Beim Start dieser Funktionen kann nun alternativ direkt ein Filename mit angegeben werden.
Die neuen Beschreibungen:

* exportToFile [<File>] - exportiert DB-Einträge im CSV-Format in den gegebenen Zeitgrenzen.
Einschränkungen durch die Attribute "device" bzw. "reading" gehen in die Selektion mit ein. Der Exportfilename wird durch das Attribut "expimpfile" bestimmt.
Optional kann dem Kommando der Exportfilename (/Pfad/Datei) angegeben werden und übersteuert ein eventuell gesetztes Attribut "expimpfile". Der Filename kann Wildcards enthalten (siehe Attribut "expimpfile").
Durch das Attribut "aggregation" wird der Export der Datensätze in Zeitscheiben der angegebenen Aggregation vorgenommen. Ist z.B. "aggregation = month" gesetzt, werden die Daten in monatlichen Paketen selektiert und in das Exportfile geschrieben. Dadurch wird die Hauptspeicherverwendung optimiert wenn sehr große Datenmengen exportiert werden sollen und vermeidet den "died prematurely" Abbruchfehler.

Die für diese Funktion relevanten Attribute sind:

    aggregation            : Festlegung der Selektionspaketierung
    device                    : Einschränkung des Exports auf ein bestimmtes Device
    reading                    : Einschränkung des Exports auf ein bestimmtes Reading
    executeBeforeProc    : FHEM Kommando (oder perl-Routine) vor dem Export ausführen
    executeAfterProc    : FHEM Kommando (oder perl-Routine) nach dem Export ausführen
    expimpfile            : der Name des Exportfiles
    time.*                    : eine Reihe von Attributen zur Zeitabgrenzung


* importFromFile [<File>] - importiert Datensätze im CSV-Format aus einem File in die Datenbank. Der Filename wird durch das Attribut "expimpfile" bestimmt.
Optional kann dem Kommando der Importfilename (/Pfad/Datei) angegeben werden und übersteuert ein eventuell gesetztes Attribut "expimpfile". Der Filename kann Wildcards enthalten (siehe Attribut "expimpfile").

    Datensatzformat:
    "TIMESTAMP","DEVICE","TYPE","EVENT","READING","VALUE","UNIT"

    # Die Felder "TIMESTAMP","DEVICE","TYPE","EVENT","READING" und "VALUE" müssen gesetzt sein. Das Feld "UNIT" ist optional. Der Fileinhalt wird als Transaktion importiert, d.h. es wird der Inhalt des gesamten Files oder, im Fehlerfall, kein Datensatz des Files importiert. Wird eine umfangreiche Datei mit vielen Datensätzen importiert, sollte KEIN verbose=5 gesetzt werden. Es würden in diesem Fall sehr viele Sätze in das Logfile geschrieben werden was FHEM blockieren oder überlasten könnte.

    Beispiel:
    "2016-09-25 08:53:56","STP_5000","SMAUTILS","etotal: 11859.573","etotal","11859.573",""

    Die für diese Funktion relevanten Attribute sind:

        executeBeforeProc    : FHEM Kommando (oder perl-Routine) vor dem Export ausführen
        executeAfterProc    : FHEM Kommando (oder perl-Routine) nach dem Export ausführen
        expimpfile                    : der Name des Importfiles

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

JoeALLb

Hallo Zusammen,

vermutlich übersehe ich gerade etwas:
Wenn ich mit DbRep die maxValue in die DB schreibt, schreibt er dort keine "0" Values, sondern nur die von den Tagen mit Values >0. Im Display-Modus zeigt er jedoch 0 Values an.
Gibt es einen Parameter, der mir erlaubt, die 0 Werte zu schreiben?

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Grüß Euch, anbei noch eine Idee:

Ich baue gerade eine neue Installation auf und suche dabei Devices, die noch zu oft loggen.
Mit diesem Select konnte ich solche Devices ausfindig machen und deren Parameter anpassen. Er gibt zB die 50 häufigsten Loggingeinträge der letzten 2 Tage an.

select Device, reading, count(0) AS `countA` from history
where ( TIMESTAMP > (now() - interval 2 day)) group by DEVICE, READING
order by countA desc, DEVICE limit 50;


Dabei stellte ich zB fest, dass gewisse Temperatursensoren über 32000 mal pro Tag einen logeintrag hinterließen...

Vielleicht wäre ein Überblick über die häufigsten Logeinträge ein interessantes Feature für dieses Modul?

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DS_Starter

Hallo Joe,

ZitatWenn ich mit DbRep die maxValue in die DB schreibt, schreibt er dort keine "0" Values, sondern nur die von den Tagen mit Values >0
Hast nichts übersehen ... das war ein Bug den ich mit V7.14.8 (im ersten Beitrag) gefixt habe. Die V checke ich heute noch ein, aber vllt. magst du es schon testen.

ZitatVielleicht wäre ein Überblick über die häufigsten Logeinträge ein interessantes Feature für dieses Modul?
Ja, ich habe die Idee ein set zu definieren, z.B. "sqlSpecial".
Als Option dieser Funktion wären dann per Dropdown-Liste diese Selektion bzw. auch weitere spezielle (aber von allgemeinem Interresse) SQLs ausführbar.
Damit wäre es gut beherrschbar auch wenn noch mehr solcher spezieller Auswertungen vorgeschlagen werden.
Das Statement müssen wir aber noch bezüglich der Lauffähigkeit auf SQLite, Postgre prüfen !

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

JoeALLb

Hallo Heiko,

Zitat von: DS_Starter am 21 März 2018, 21:15:56
Die V checke ich heute noch ein, aber vllt. magst du es schon testen.
Bitte entschuldige, da ich erst am 19. ein Update über den offiziellen Weg bekommen habe, dachte ich, das sei dort schon enthalten.
Ich hatte die Versionsnummern nicht überprüft. Sorry.

Zitat von: DS_Starter am 21 März 2018, 21:15:56
Ja, ich habe die Idee ein set zu definieren, z.B. "sqlSpecial".
So ähnlich waren meine Gedanken auch... eventuell könnte man dort dann sogar im Ergebnis gewisse Dinge zukünftig "anklickbar" machen, ähnlich wie in DOIF,
um Aktionen wie zB eine Bereinigung starten zu können.

Natürlich könnte so eine Abfrage auch als Art "configCheck", analog zu DbLog, genutzt werden, denn über 30000 Logs pro Tag für ein Reading deuten eigentlich immer auf einen Fehler hin ;-)


sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DS_Starter

Hallo Joe, @all,

in der V 7.15.0 habe ich das neue Kommando "sqlSpecial" umgesetzt. (erster Beitrag)

* sqlSpecial - Die Funktion bietet eine Drop-Downliste mit einer Auswahl vorbereiter Auswertungen an.
Das Ergebnis des Statements wird im Reading "SqlResult" dargestellt. Die Ergebnis-Formatierung kann durch das Attribut "sqlResultFormat" ausgewählt, sowie der verwendete Feldtrenner durch das Attribut "sqlResultFieldSep" festgelegt werden.

Die für diese Funktion relevanten Attribute sind:

    sqlResultFormat    : Auswahl des Trennzeichen zwischen Ergebnisfeldern
    sqlResultFieldSep  : Optionen der Ergebnisformatierung


Es sind die folgenden vordefinierte Auswertungen auswählbar:

    50mostFreqLogsLast2days    : ermittelt die 50 am häufigsten vorkommenden Loggingeinträge der letzten 2 Tage
    allDevReadCount                  : Anzahl aller in der Datenbank vorkommender Device/Reading-Kombinationen


Wenn es noch weitere aus eurer Sicht interressante SQL's geben sollte die hierhin gehören würde ich sie mit aufnehmen bevor ich einchecke.
Schön wäre es wenn es sowohl unter MySQL, SQLite, Postgre schon getestet wurde  ;)
Joe, deine SQL habe ich für SQLite, Postgre entsprechend angepastt.

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

JoeALLb

Hallo Heiko,

vielen Dank für das erlauben von
textlong für sqlCmd.

Nun, wäre es noch schön, wenn man das sqlCmd als Perlcode angeben könnte, um Stellen wie die datetime-Angaben dynamisch zu generieren.

{ return "select value from ( ( select *, TIMESTAMPDIFF(SECOND, '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."', timestamp) as diff from history where device='kitchen.hygro' and reading='temperature' and timestamp >= '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."' order by timestamp asc  limit 1 ) union ( select *, TIMESTAMPDIFF(SECOND, timestamp, '2018-04-10 09:45:00') as diff from history where  device='kitchen.hygro' and reading='temperature' and timestamp < '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."' order by timestamp desc limit 1 ) ) x order by diff limit 1"}

Ein EVAL wenn der String mit "{" beginnt müsste dafür eigentlich ausreichend sein?


sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Hallo Heiko,

entschuldige... so kann ich es natürlich jetzt schon lösen, ohne dass etwas geändert werden muss:

{ fhem("set <rep> sqlCmd select value from ( ( select *, TIMESTAMPDIFF(SECOND, '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."', timestamp) as diff from history where device='kitchen.hygro' and reading='temperature' and timestamp >= '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."' order by timestamp asc  limit 1 ) union ( select *, TIMESTAMPDIFF(SECOND, timestamp, '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."') as diff from history where  device='kitchen.hygro' and reading='temperature' and timestamp < '". strftime("%Y-%m-%d %H:%M", ( localtime(time-60*60*24)))."' order by timestamp desc limit 1 ) ) x order by diff limit 1")}


sg
joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270