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 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
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:
define <NAME_LOGGERÄT> FileLog /opt/fhem/log/<NAME_LOGDATEI>-%Y.log <GERÄT>
define <NAME_LOGGERÄT> FileLog /opt/fhem/log/<NAME_LOGDATEI>-%Y-%m.log <GERÄT>
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.
define <NAME_LOGGERÄT> FileLog /opt/fhem/log/<NAME_LOGDATEI>-%Y.log <GERÄT>
Um in eine Datenbank zu loggen, müssen folgende Schritte beachtet werden.
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
cp contrib/dblog/db.conf /opt/fhem/
Danach die Datei für den jew. Datenbankserver anpassen und speichern.
define <LOGGERÄT_NAME> DbLog ./db.conf .*:.*
Im neu erstellten DbLog sollte nun als State „connected“ stehen.
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