Inhaltsverzeichnis

Logging

Fhem kann von verschiedenen Geräten und Modulen loggen.
Mit dem Modul autocreate wird für jedes neu definierte Geräte eine Logdatei erstellt.

Loglevel

Loglevel werden wie folgt gesetzt.

attr global verbose <LOGLEVEL>

Folgende Loglevel gibt es (Level „3“ ist der Default):
0 - Server start/stop
1 - Fehlermeldungen oder unbekannte Pakete
2 - bedeutende Ereigbisse/Alarme
3 - ausgesendete Kommandos werden gelogged
4 - von den einzelnen Geräten empfangene Daten
5 - Fehlersuche

Welcher Loglevel gesetzt ist, sieht man in den Globalattributen

list global

Loggen in Dateien

Das Logverzeichnis befindet sich unter /opt/fhem/log.
Logdateien werden nach dem Schema <GERÄTE_NAME>-<JAHR>.log erstellt.
Man kann den Namen in fhem ändern und diesem auch div. Variablen übergeben.
Somit kann man auch eine Log-Datei erstellen, welche nach jedem Jahr oder jedem Monat neu erstellt.
Beispiele:

Loggen in Datenbank

Weiterhin kann fhem auch in eine Datenbank loggen. Dies ist z.B. beim anlegen von Plots ein Vorteil, da die Daten dann schneller geholt werden können.
Damit man in eine Datenbank schreiben kann, muss zunächst diese angelegt und ein Verbindung dahin hergestellt werden. Siehe dazu DbLog.

Wenn alles vorbereitet ist, kann man die Loggeräte wie folgt anlegen.

DbLog

Um in eine Datenbank zu loggen, müssen folgende Schritte beachtet werden.

  1. Datenbankserver installieren und Datenbank anlegen.
    apt-get install mysql-server mysql-client libdbd-mysql libdbi1 libdbd-mysql-perl
    mysql -uroot -p < /opt/fhem/contrib/dblog/db_create_mysql.sql


    Bei einem Raspberry Pi sollte der Datenbankserver noch angepasst werden.

    service mysql stop
    mv /etc/mysql/my.cnf /etc/mysql/my.cnf-bakup
    cp /usr/share/doc/mysql-server-5.5/examples/my-small.cnf /etc/mysql/my.cnf
    service mysql start
  2. Verbindungdatei erstellen und konfigurieren.
    cp contrib/dblog/db.conf /opt/fhem/


    Danach die Datei für den jew. Datenbankserver anpassen und speichern.

  3. Loggerät anlegen und configurieren
    define <LOGGERÄT_NAME> DbLog ./db.conf .*:.*


    Im neu erstellten DbLog sollte nun als State „connected“ stehen.

Log-Einträge beschränken

Das oben angelegte „DbLog“ logt alles in die DB (.*:.* | <ALLE_GERÄTE>:<ALLE_READINGS>). Dadurch entstehen viele DB-Einträge, welcher die Datenbank recht schnell wachsen lassen.
Dies kann eingeschränkt werden in dem man die Wildcards auf bestimmte Geräte oder Readings anpasst.
Beispiel → alle Geräte aber nur Werte für Temperatur, Ventilpositionen und Luftfeuchtigkeit (Quelle: http://www.fhemwiki.de):

.*:(temperature|valveposition|humidity).*

Man kann aber auch die einzelnen Geräte anweisen nur bestimmte Werte zu loggen.
Beispiel (Quelle: http://www.fhemwiki.de):

define EG_Balkon GPIO4 BUSMASTER
attr EG_Balkon DbLogExclude failures,T,85     # logge keine "failures", "T"-Werte und "85"-Werte (default-Werte, wenn keine Temperatur gelesen werden kann)
attr EG_Balkon event-on-change-reading state  # logge nur, wenn sich ein Wert ändert (wenn sich die Temperatur nicht ändert, logge das nicht)
attr EG_Balkon event-min-interval state:900   # logge spätestens alle 900sec = 15min
attr EG_Balkon event-on-update-reading .*     # logge alle Werte, die aktualisiert werden

attr <1-Wire-Device vom Typ OWTHERM oder OWSWITCH> DbLogExclude data.*      # verhindert das Logging der state-Eintragungen