Tutorial: FHEM Smart Home Server

FHEM ist ein auf Perl basierender Open Source Server zur Heimautomatisierung. Mit FHEM kann man häufig auftretende Aufgaben automatisieren, wie z.B. Lampen schalten, Jalousien und Heizung steuern oder Messdaten wie Temperatur, Luftfeuchte und Stromverbrauch protokollieren und visualisieren.
Dieses Tutorial beschreibt, wie man in FHEM ein Device für den Querx Netzwerksensor erstellt und sich die Messdaten anzeigen lässt,  als Tabelle oder Graph.
openSenseMap

 

Installation

Da die Installation vom Betriebssystem abhängig ist und im FHEM Wiki sehr ausführlich erklärt wird, verweise ich hier nur auf die entsprechenden Links:
https://fhem.de/#Documentation
https://wiki.fhem.de/wiki/FHEM_Installation_Windows
Ist die Installation abgeschlossen, kann man unter
http://IP-Adresse/:8083 oder http://localhost:8083/fhem?
die erste Seite aufrufen.
openSenseMap
Auf der Startseite ist der "Security Check" eingeblendet.
Dieser Hinweis besagt, dass noch kein Passwort angelegt wurde. Wie man ein Passwort einrichtet, wird hier erklärt: https://wiki.fhem.de/wiki/Erste_Schritte_in_FHEM.
Für dieses Tutorial kann die Meldung vorübergehend deaktiviert werden, indem man
attr global motd none
in das Kommandofeld eingibt.

 

Template installieren

Damit FHEM die Messwerte über HTTPMOD abrufen kann, erstellen wir für Querx ein benutzerdefiniertes Template. Das geht schon seit der Version 4.2. Es ist allerdings vorteilhafter Querx auf die Version 4.4 zu updaten.
Über ip-Adresse des Querx/tpl/document.cgi?tpl/j/live.tpl&msub=xml sehen wir, welche Daten per HTTPMOD abgefragt werden können. Daraus nehmen wir die Daten, die wir abfragen wollen und erstellen unser Template, dass wie folgt aussieht:
add=/tpl/j/fhem.tpl



        
                        {{sensortab_name}}
                        {%if sensortab_unitv==1%}F{%elif sensortab_unitv==2%}K{%else%}C{%endif%}
                        {{sensortab_value}}
                
{%if dev_type == "TH" or dev_type == "THP"%}            
                        {{sensortab_name.1}}
                        {{sensortab_unit.1}}
                        {{sensortab_value.1}}
             
                
                        {{sensortab_name.2}}
                        {%if sensortab_unitv==1%}F{%elif sensortab_unitv==2%}K{%else%}C{%endif%}
                        {{sensortab_value.2}}
                
{%endif%}{%if dev_type == "THP"%}               
                        {{sensortab_name.3}}
                        {{sensortab_unit.3}}
                        {{sensortab_value.3}}
                
{%endif%}       

Das Template erstellen wir mit dem Notepad und speichern es unter fhem.tpl ab. Alternativ kann man das Template hier herunterladen.

Um das Template auf dem Querx Netzwerksensor zu installieren, geht man auf seine Konfigurationsseite und klickt auf "Wartung/ Firmware". Unter "Content installieren" wählen wir das Template aus und klicken auf "Senden" .
openSenseMap
Nun kann man unter http://"ip-Adresse_ihres_Querx"/tpl/document.cgi?tpl/j/fhem.tpl&msub=xml die Daten aus dem Template sehen.

 

FHEM-Device anlegen

Jetzt legen wir Querx als Device an. Da wir HTTPMOD benutzen, müssen wir das Device als solches auch definieren.
Wir schreiben in das Kommandofeld:
define Querx HTTPMOD http://ip-Adresse_des_Querx/tpl/document.cgi?tpl/j/fhem.tpl&msub=xml 60
Querx steht hier für den Namen des Device und 60 bestimmt die Zeit des Abfrageintervalls in Sekunden.
Danach weisen wir dem Device, mit dem Befehl
attr Querx room Office
noch einen Raum zu. So kann man entsprechende Geräte unter einem Menüpunkt zusammenfassen. Erfolgt diese Zuordnung nicht, findet man Querx im Menü unter "Unsorted".
Jetzt geben wir an, das Temperaturwerte ausgelesen werden sollen. Dazu erstellen wir zunächst ein Attribut für das Reading.
attr Querx readingsName_temperatur Temperatur
Danach muss man das Reading selbst definieren.
attr Querx readingsRegex_temperatur (\+|-?[\d\.]+)
Mit dem regulären Ausdruck "(\+|-?[\d\.]+)" wird definiert, wie der Wert für die Temperatur in dem ausgewerteten Template gefunden werden kann.
Identisch gehen wir bei den Luftfeuchtewerten vor. Zuerst erstellen wir das Reading wieder als Attribut.
attr Querx readingsName_humidity Luftfeuchtigkeit
Dann definieren wir das Reading.
attr Querx readingsRegex_humidity (\+|-?[\d\.]+)
Nun kann man im Device Querx beide Readings unten einsehen.
openSenseMap
Danach speichern wir die Einstellungen mit einem Klick auf "Save Config".

 

Grafische Visualisierung

Um mit dem FHEM Modul GPLOT einen Verlaufsgraphen zu erstellen, benötigen wir einen Logfile.
define QuerxLog FileLog ./log/QuerxLog-%Y-%m-%d.log Querx
Gibt man diesen Befehl in das Kommandofeld ein, erstellt man einen Logfile mit dem Namen QuerxLog, der unter ./log/QuerxLog gespeichert wird.
Möchte man nur einen Logfile pro Monat haben, muss man die Parameter %Y-%m-%d dementsprechend anpassen.
Der Name Querx am Ende des Befehls gibt an, von welchem Device wir einen Logfile erstellen wollen. Dem QuerxLog kann man auch einen Raum zuweisen, in unserem Fall haben wir ihn, in dem Raum Office, mit dem anderen Querx zusammengefasst.
Klickt man oben rechts auf "Text", sieht man den Logfile mit den Temperatur- und Luftfeuchtigkeitswerten.
Um dann den GPLOT zu erstellen, klickt man auf Button "Create SVG plot". Diesen findet man auf der vorherigen Seite. Hier öffnet sich der GPLOT Editor.
Man kann den Graphen nach eigenem Belieben gestalten. Ich zeige hier beispielhaft wie das aussehen könnte.
openSenseMap
Um die Erstellung des Diagrams abzuschließen, klickt man auf "Write .gplot file". Zum Schluss können wir mit dem folgenden Befehl den Graphen dem Raum Office zuordnen.
 attr SVG_QuerxLog_1 room Office
openSenseMap