DbLog – Datenbank anstelle von LogFiles

Die meisten FHEM-Einsteiger beginnen mit dem loggen von Werten mit Hilfe der LogFiles. Sie sind schnell eingerichtet und loggen dann brav die gewünschten Werte. Auch das Erstellen von Graphen gelingt über die LogFiles kinderleicht. Nach mehreren Monaten können diese LogFiles jedoch relativ groß werden. Bei einer Temperaturmessung mit minütlicher Messung enthält das LogFile nach 6 Monaten bereits ca. 262.000 Einträge. Ein Lösungsansatz wäre das Erstellen von wöchentlichen oder monatlichen LogFiles. Möchte man jedoch einen lückenfreien Verlauf der Temperaturmessung haben, ist man gezwungen die LogFiles zu behalten. Die Anzahl der LogFiles wächst somit stetig.

FileLog - FHEM

Aufgrund der Tatsache, dass LogFiles als reine Textdatei angelegt werden, erschweren große LogFiles zudem das Durchsuchen und Auswerten der Einträge. Das Anzeigen von Graphen kann dadurch etwas Zeit in Anspruch nehmen. Um diesen Flaschenhals zu umgehen gibt es eine relativ simple Lösung. Das Erstellen einer Datenbank. In diesem Beitrag erkläre ich euch wie ihr eure Werte in eine Datenbank schreibt und daraus einen Graphen erstellt.

FHEM bietet dazu das Modul DbLog. Es stellt die Verbindung zwischen FHEM und einer Datenbank her. Als Datenbank können unter anderem SQLite, MySQL oder PostGreSql verwendet werden. Ich persönlich habe mich für eine SQLite-Datenbank entschieden.

Vorbereitung auf dem Raspberry

Damit FHEM mit SQLite arbeiten kann, muss das entsprechende Paket auf dem Raspberry installiert werden:

Datenbank einrichten

Es wird nun eine Datenbank mit dem Namen fhem.db im FHEM-Installationsordner erstellt.

Es öffnet sich direkt die Kommandozeile der Datenbank. Hier kann nun der Aufbau der Datenbank festgelegt werden.

In dieser Definition wird für die Werte eine Größe von 32 Zeichen festgelegt. Sollte man Devices mit sehr langen Readings loggen wollen, sollte man hier bereits für etwas mehr Platz sorgen. Dazu einfach VALUE varchar(32) zu VALUE varchar(64) ändern.

Die Kommandozeile der Datenbank kann nun verlassen werden.

Damit FHEM in die Datenbank lesen und auch bearbeiten kann, sollten die Rechte und Besitzverhältnisse entsprechend angepasst werden:

In FHEM wird DbLog später über eine Config-Datei definiert. In dieser Config-Datei wird der Pfad zu der erstellten Datenbank angegeben.

db.conf mit folgendem Inhalt füllen:

Sollte die Datenbank mit einem Benutzer und Passwort geschützt sein, sind diese Daten ebenfalls in die Config-Datei einzutragen.

Konfiguration in FHEM

In FHEM selber muss nun nur noch das Modul DbLog definiert werden. Dabei wird der Pfad zu der eben erstellten Config-Datei angegeben. Um die Datenbank nicht gleich mit unnützen Daten voll zu müllen, sollte man sich bei der Definition bereits einige Gedanken machen. In folgender Definition wird jedes Reading von jedem Device geloggt. Für mich persönlich ist diese Definition eher unvorteilhaft.

Selbst das Modul FritzBox hat bereits über 60 Readings. Ich habe deshalb bereits bei der Definition festgelegt welche Readings geloggt werden sollen:

DbLog - FHEM

Somit werden nur die Readings meiner WeMos-Sensoren, die Traffic-Daten der FritzBox, Leistungsverbrauch meiner PCA301-Steckdosen und ein paar Systeminfos geloggt. Möchte ich nun weitere Readings loggen, dann reicht es aus über die Detailseite vom DbLog-Device die Definition anzupassen.

DbLog - FHEM Define Anpassen

Bevor nun weiter mit der Datenbank gearbeitet wird, kann man kontrollieren ob das loggen funktioniert. Dafür loggt man sich wieder über SSH auf den Raspberry ein und öffnet die Datenbank.

Mit nachfolgendem Befehl lässt man sich alle Werte der Datenbank ausgeben:

Da die Datenbank bisher noch relativ leer ist wird nach kurzer Zeit der Inhalt ausgegeben:

DbLog SQLite Einträge

Mit „.exit“ verlässt man die Datenbank wieder.

Graphen aus Einträgen der Datenbank erstellen

Ähnlich wie bei den LogFiles lassen sich natürlich auch mit den Werten aus der Datenbank SVG-Graphen erstellen. Hier kommt ein weiterer Vorteil von dblog zum Vorschein. Bei der Verwendung von LogFiles kann man nur ein Graphen aus einem LogFile erstellen. Bei einer dblog-Datenbank kann man aus der Datenbank so viele Graphen erstellen wir gewünscht. Dazu einfach das dblog-Device öffnen und unterhalb der Eingabezeile auf „Create SVG plot from DBLog“ klicken.

DbLog - SVG Create

Es öffnet sich die bekannte Konfigurationsseite der SVG-Plots. Nachdem man als Quelle die Datenbank ausgewählt hat, bemerkt man jedoch schon den Unterschied. Es gibt weniger Optionsfelder gegenüber eines LogFiles. Aufgrund der Tatsache, dass die Readings sich nun in einer Datenbank (Tabelle) befinden, weiß FHEM direkt, wo sich welcher Wert befindet. Die Angabe der Position des gewünschten Readings ist somit nicht mehr nötig.

DbLog SVG Plot

Zum Schluss noch den Graphentyp und Farbe auswählen und schon erhält man seinen Graphen. Dieser erstellte Graph ist nun um einiges leistungsstärker im Vergleich zu Graphen aus LogFiles. Bemerkbar macht sich dies, sobald man im Graphen sich bewegt. Sei es das Herrauszoomen oder das Zurückspringen zu älteren Werten. Der Aufbau des Graphen geht nun viel schneller. Der Grund ist der, dass das Lesen aus der Datenbank schneller ist als das Lesen aus reinen Textdateien, den LogFiles.

Sobald alle Reading ordnungsgemäß geloggt werden, können die alten LogFiles gelöscht werden.

6 Kommentare zu “DbLog – Datenbank anstelle von LogFiles

  1. Wow! DAS ist wirklich ein gewaltiger Unterschied. Fantastische Lösung! Selbst für mich als Laie war die Einrichtung dermassen Easy, das ich es wirklich jedem nur raten kann umzustellen.

    Weiter so!

  2. Ich habe gestern Abend sehr spät die Umstellung ausgeführt. Dazu hätte ich ein paar Fragen:

    Müssen BEIDE Zeilen eingegeben werden?
    „CREATE TABLE ‚history’…..“ UND
    „CREATE TABLE ‚current‘ ….“ eingegeben werden?

    Grund der Frage:
    Ich habe folgende Log-Einträge die praktisch minütlich erscheinen:
    „Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define SVG ::HISTORY)“

    Für eine kurze Erklärung wäre ich sehr dankbar.

    Grus
    Alex

    • Hallo Alex,
      es müssen beide Zeilen verwendet werden. Wie der Name schon sagt, speichert „history“ die alten Werte und „current“ die neuen Werte. Damit weiß FHEM immer in welcher Zeile sich der aktuelle Wert befindet und wo die alten Werte beginnen.

      Deine Fehlermeldung selber habe ich nicht bei mir und konnte sie auch nicht reproduzieren. Wenn man die Fehlermeldung und folgenden Beitrag im FHEM-Forum (LINK) mal anschaut, hat es etwas mit der Definition der SVG-Plots zu tun. Wenn die SVG-Plots über „Create SVG plot from DBLog“ erstellt werden, dann sollten sie eigentlich ohne Fehlermeldung ihren Dienst verrichten. Bei einer manuellen Definition der Plots muss man auf die Syntax achten:
      „define [SVGName] [DbLogDevice]:[NamePLOTdatei]:HISTORY“ –> Auf das HISTORY ist zu achten. Ein CURRENT ist veraltet und könnte zu fehlern führen.
      Zum Beispiel: „define SVG_Plot_Wohnzimmer SVG DbLog:SVG_Wohnzimmer:HISTORY“ –> Definiert den Plot mit dem Namen SVG_Plot_Wohnzimmer (SVGName). Die Daten werden aus der Datenbank DbLog (DbLogDevice) geholt. Die Datei, die erstellt wird hat den Namen SVG_Wohnzimmer (SVG_Wohnzimmer).

      Hoffe ich konnte dir bisschen Helfen, ansonsten einfach mal im oben verlinkten Forumsbeitrag schauen. Du bist nicht alleine mit diesem Problem 😉
      Gruß Daniel

  3. Erstmal ein Lob, ich habe hier schon echt nützliche Tipps mitgenommen und könnte auch vieles in meiner Configuration verwenden, danke!!
    Ist Dir eine Möglihkeit bekannt die alten Daten aus den txt-Logfiles in die Datenbank zu importieren? Leider kenne ich mich bisher nicht genug mit Datenbanken aus möchte aber ungern die Vergangenheitsdaten der Logfiles verlieren.

    Vielen Dank im Voraus u Viele Grüße, Josch

    • Hallo Josch,
      danke für das Lob. Habe mich selber auch schon mit dem Importieren beschäftigt. War jedoch bisher nicht erfolgreich. In einem Forums-Beitrag wird von einer Lösung über einer CSV-Datei geredet, hat bei mir aber bisher noch nicht geklappt. Im selben Beitrag hat „peterchen89“ ein Skript erstellt für das Importieren, dies jedoch leider nur für eine MySQL-Datenbank. Ich werde mir bei Gelegenheit nochmal Gedanken machen, kann dich aber bis jetzt leider nur auf das FHEM-Forum verweisen. Vielleicht findest du ja dort eine Lösung.

      Gruß Daniel

  4. Ist es auch möglich die db auf z.B. einer synology (MariaDB) anzulegen?
    Wenn ja, hast du Tipps oder hat das schonmal jemand gemacht?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*