Wer sein Heim mit smarter Technik ausstatten will, sieht sich mit unterschiedlichen Anbietern und oft inkompatiblen Standards konfrontiert. Die freie Integrationsplattform FHEM bringt die Haustechnik unter ein Dach und bietet schicke Oberflächen.
Die Qualität einer offenen Plattform steht und fällt mit dem Engagement und den Fähigkeiten der dahinterstehenden Community. Die kann sich im Fall von FHEM sehen lassen. Das FHEM-Forum, die offizielle Anlaufstelle für Enthusiasten, zählt mittlerweile mehr als 20 000 Mitglieder.
Waren die verfügbaren Softwaremodule vor einigen Jahren noch recht überschaubar, kann der versierte Anwender inzwischen auf unzählige Module zurückgreifen, um neben Homematic (dem Klassiker unter den Funkstandards) auch im privaten Umfeld mittlerweile weitverbreitete Standards wie ZigBee (unter anderem von Philips Hue und Ikea Tradfri genutzt) oder Z-Wave einzubinden. Aber auch Kabel-basierte Standards wie Onewire, DMX oder der Profistandard KNX werden unterstützt.
Damit lässt sich eine Vielzahl von Smart-Home-Geräten einbinden, von dimmbaren Lampen über Wetterstationen bis hin zu universellen Aktoren wie einem Relais. Die Integrationstiefe geht sogar so weit, dass sich über die entsprechenden Module Hi-Fi-Equipment wie AV-Receiver (etwa von Denon und Onkyo) über FHEM steuern lässt.
Über ein offizielles Web-API von Tesla lassen sich sogar Statuswerte des E-Fahrzeugs auslesen, etwa der aktuelle Batterieladestand. Sobald die Batterie vollgeladen ist, kann FHEM dann eine Sprachausgabe per Sonos-Lautsprecher triggern, etwa “Dein Tesla ist jetzt startklar”. Damit reichen die denkbaren Integrationsszenarien sogar über die eigenen vier Wände hinaus.
Perfekte Plattform
Es erfordert eine gewisse Einarbeitung, um die umfangreichen Integrationsmöglichkeiten von FHEM adäquat nutzen zu können. Neben der Software-seitigen Installation des Grundsystems muss man sich auch mit dem Konzept von FHEM [1] vertraut machen.
FHEM basiert im Kern auf der Programmiersprache Perl und ist damit ein wahres Leichtgewicht in Sachen Hardware-Anforderungen. In den Anfangstagen ließ sich FHEM sogar auf einer Fritzbox betreiben, bis deren Anbieter AVM Software-seitig einen Riegel vorschob – offiziell aus Sicherheitsgründen.
Mit dem beliebten Einplatinenrechner Raspberry Pi, der mittlerweile für weniger als 50 Euro bereits in der vierten Hardwareversion angeboten wird, steht aber ein würdiger Nachfolger mit mehr als genügend Ressourcen bereit. Auf einem Raspbian-Grundsystem lässt sich FHEM mit nur wenigen Konsolenbefehlen installieren. Am Anfang stehen der Import des notwendigen Repository-Keys und das Einbinden des Repository (Listing 1, Zeilen 1 und 2).
Listing 1
FHEM installieren
01 $ wget -qO - http://debian.fhem.de/archive.key | apt-key add - 02 $ echo "deb http://debian.fhem.de/nightly/ /" >> /etc/apt/sources.list 03 $ apt-get update 04 $ apt-get install fhem
Anschließend aktualisiert der Anwender die Paketquellen und kann nun FHEM installieren (Zeilen 3 und 4). Je nach Konfiguration muss er die Befehle mit vorgesetztem »sudo« ausführen, um die notwendigen Systemberechtigungen zu besitzen. Hin und wieder kommt es auch vor, dass das Repository nicht richtig funktioniert. In diesem Fall steht dann eine manuelle Installation von Perl und FHEM an [2].
Erste Schritte
Sobald die Installation abgeschlossen ist, lässt sich die FHEM-Weboberfläche über den Port 8083 erreichen, indem man »http://RasPi-IP:8083« eingibt. Das FHEM-Interface (Abbildung 1) folgt einem schlichten, schmucklosen und funktionalen Aufbau, grafische Komponenten sind darin nicht zu erkennen. Was für den versierten Anwender ein Vorteil sein kann, stellt für den Einsteiger eine Hürde dar. Es gibt jedoch interessante Lösungen, die dem Anwender eine angenehmere Benutzerschnittstelle bieten – aber dazu später mehr.
Als zentrales Element im Standardinterface fungiert der weiße Balken ganz oben direkt neben dem FHEM-Logo. In dieser Kommandozeile kann der Benutzer zentral Befehle absetzen, um das System anzupassen. Dabei kann er bei Fehleingaben auf einen seit einiger Zeit verfügbaren nützlichen Syntax-Check zurückgreifen, den die Community stetig verbessert.
So lassen sich etwa per »define«-Kommando neue Geräte in die Konfiguration aufnehmen. Ein Befehl nach dem Schema aus Listing 2 bindet beispielsweise den beliebten Harmony-Hub ein, der bereits in vielen Wohnzimmern per eingebautem Infrarot-Sendemodul und Bluetooth-Transceiver die zentrale Steuerung des TV-Geräts sowie von SAT- und AV-Receiver übernimmt.
Listing 2
Harmony-Hub einbinden
define HarmonyHub harmony Benutzer:Passwort IP-Adresse
Die zu verwendende Syntax ist dabei Modul-übergreifend weitgehend identisch. Auf »define« folgt der gewünschte FHEM-Gerätename, im Beispiel »HarmonyHub«. Im Falle des Harmony-Hubs benötigt FHEM anschließend Login-Daten in der Form Benutzer:Passwort. Zum Schluss folgt noch die IP-Adresse des Geräts, damit FHEM via LAN darauf zugreifen kann. Nach dem Eintippen des Kommandos übergibt der Anwender es durch einen Druck auf die Eingabetaste an FHEM.
Was erst einmal kryptisch klingt, geht nach dem Einbinden einiger Geräte schnell in Fleisch und Blut über. Aber Vorsicht: Jede Konfigurationsänderung an FHEM ist mit dem Button »Save config« im Webinterface zu bestätigen, damit sie dauerhaft in der »fhem.cfg« Berücksichtigung findet und so einen Systemneustart übersteht.
Sobald der Harmony-Hub erfolgreich über den »define«-Befehl eingebunden wurde, lassen sich das in FHEM angelegte Gerät »HarmonyHub« anklicken und die automatisch ausgelesenen Werte, im FHEM-Jargon Internals und Readings genannt, einsehen (Abbildung 2).
Spannend für spätere Automatisierungsregeln sind dabei meist die Readings, die im Fall des Harmony-Hubs jedoch eher spärlich ausfallen, wenn auch interessant. So gibt etwa das Reading »currentActivity« Auskunft über die aktuell per Harmony-Remote ausgewählte Aktivität. So erkennt der Nutzer, ob zum Beispiel der Fernsehmodus aktiviert ist oder ob sich die zu steuernden Geräte aktuell im Standby befinden.
Umgekehrt lassen sich über die ebenfalls automatisch angezeigten und per Ausklappmenüs auswählbaren »set«-Kommandos Schaltbefehle von FHEM in Richtung Harmony-Hub senden. Auf diese Weise kann man quasi Eingaben der Harmony-Remote-Fernbedienung simulieren, die immer über den Harmony-Hub gesendet werden.
Der ausgewählte Befehl lässt sich dann direkt per Klick auf das grün dargestellte »set« absetzen oder per Eingabe über den FHEM-Kommandozeilenbefehl »set HarmonyHub activity Plex«.
Erste Automatisierungen
Spannend wird das Ganze, sobald der Anwender die zur Verfügung stehenden Readings nutzt, um andere Geräte zu triggern. Dazu dient etwa das Reading »currentActivity«, das in Echtzeit auf Änderungen der ausgewählten Aktivität der Harmony-Remote-Fernbedienung reagiert. Damit FHEM dieses Reading auch zur folgenden Automatisierung nutzen kann, fehlt noch ein so genanntes Attribut. Mit dem FHEM-Konsolenbefehl aus der ersten Zeile von Listing 3 erhält das Harmony-Hub-Device die Eigenschaft, bei Änderungen in den Readings »state« und »currentActivity« auch tatsächlich eine Aktivität auszulösen.
Listing 3
FHEM-Konsolenbefehle
01 attr HarmonyHub event-on-change-reading state,currentActivity 02 define LampeAusschalten notify HarmonyHub.currentActivity:.starting.Apple set Wohnzimmerlampe off 03 define Tagesschau at *20:00:00 set HarmonyHub activity Fernsehen;; set HarmonyHub command TV Number 1
Das ist dann meist auch der größte Stolperstein, da je nach FHEM-Modul manche Readings bereits standardmäßig dieses Attribut haben können, aber nicht müssen. Am besten ist es, über den selbst vergebenen Attribut-Wert zu definieren, welches Reading eine Aktivität ausführen darf. Aber Vorsicht: Der manuell festgelegte Attribut-Wert übersteuert die Standardwerte eines Device.
Nachfolgend lässt sich dann etwa über den FHEM-Konsolenbefehl aus der zweiten Zeile von Listing 3 automatisch das in FHEM angelegte Device »Wohnzimmerlampe« per »off«-Befehl ausschalten, sobald die aktuelle Harmony-Hub-Aktivität auf »starting Apple« schaltet.
Dazu wird in diesem Beispiel der »notify«-Befehl genutzt, den mittlerweile in FHEM oft das weit mächtigere »doif« ersetzt. Mit diesem lassen sich über das Konstrukt »doif«, »doelseif« und »doelse« mehrere Befehle zusammenführen. Hier wurde jedoch bewusst darauf verzichtet, da die Syntax bei Doif-Befehlen Einsteiger regelmäßig überfordert.
Wer sich über die Punkte in obigem Befehlsteil »HarmonyHub.currentActivity:.starting.Apple« wundert: Leerzeichen werden grundsätzlich als Punkt geschrieben, um von der im Hintergrund arbeitenden Perl-Engine korrekt interpretiert werden zu können.
Alle in FHEM anlaufenden Events lassen sich übrigens über den »Event monitor« in der FHEM-Oberfläche einsehen und nach Begriffen filtern, um die für die Automatisierung notwendigen Befehle ableiten zu können.
Neben »notify« und »doif« existiert noch der »at«-Befehl, der beispielsweise dazu dient, jeden Tag um eine bestimmte Uhrzeit eine bestimmte Aktion zu starten. Der FHEM-Konsolenbefehl aus der dritten Zeile von Listing 3 beispielsweise startet täglich um 20 Uhr die Harmony-Hub-Aktivität “Fernsehen”. Das TV-Gerät schaltet dann auf den ersten Kanal, wo die Tagesschau läuft. Was hier etwas konstruiert wirkt, ergibt etwa Sinn, wenn man die Beleuchtung im Vorgarten um Mitternacht ausschalten will.
Alternative Interfaces
Die auf viele Anwender eher spärlich wirkende Benutzerschnittstelle wird in der FHEM-Szene seit Jahren heiß diskutiert. Rudolf König, dem Gründer und Urvater von FHEM, ging es dabei nie wirklich darum, eine sexy Bedienoberfläche zu schaffen. Neben dem Anpassen von Schrift- und Hintergrundfarbe sowie einem Wechsel des Logos gibt es in der Standardinstallation nicht viele Anpassungsmöglichkeiten.
Mit dem so genannten Floorplan (Abbildung 3) wurde dann eine Erweiterung geschaffen, die ausgewählte FHEM-Objekte auf einem 2-D-Grundriss abbildet, um Statusmeldungen einsehen und Schaltbefehle absetzen zu können. Spätestens mit zunehmender Nutzung mobiler Endgeräte geriet der Floorplan aber aufgrund seiner eher dürftigen Responsive-Design-Eigenschaften ins Abseits.
SmartVISU
SmartVISU, das intelligente “Visualisation framework for better home experience”, hatte ursprünglich den Zweck, HTML-basierte Visualisierungen für Hausautomation-Installationen auf Basis des kommerziellen KNX-Systems zu erstellen. Seit geraumer Zeit lässt sich SmartVISU jedoch auch an eine FHEM-Installation anbinden.
Dabei lassen sich viele einfache Elemente abbilden, etwa Dimmer oder Buttons, aber auch komplexere Bausteine wie eine umfangreiche Heizungssteuerung. Einzelne Seiten für Räume kann der Nutzer mit Standard-HTML-Ausdrücken erstellen. Um eine Verbindung zwischen der Visualisierung und den in FHEM eingerichteten Smart-Home-Geräten aufzubauen, stellt das SmartVISU-Framework Tags zur Verfügung, die in eine HTML-Struktur eingebettet werden.
Listing 4
Vorarbeiten für SmartVISU
01 $ apt-get update 02 $ apt-get -y install php5 libapache2-mod-php5 apache2 git 03 $ git clone https://github.com/herrmannj/smartvisu-cleaninstall.git
Damit die Integration in FHEM klappt, sind auf der Software-Seite einige Vorbereitungen zu treffen. Dazu gehört unter anderem die Installation der benötigten Pakete inklusive eines Webservers, üblicherweise Apache 2 (Listing 4, Zeilen 1 und 2). Außerdem muss der Nutzer SmartVISU herunterladen (Zeile 3), die Dateien im Verzeichnis »/var/www/smartvisu/« installieren und die notwendigen Benutzerrechte setzen. Über die FHEM-Kommandozeile wird das Modul dann abschließend installiert und per »define«-Befehl in die Konfiguration übernommen (Listing 5).
Listing 5
SmartVISU-Modul einrichten
01 update force https://raw.githubusercontent.com/herrmannj/fronthem/master/controls_fronthem.txt 02 define fronthem fronthem
Nun geht es an die Visualisierungselemente, die in den Raum-Seiten die dort enthaltenen Devices repräsentieren. Für jeden Raum legt der Anwender dabei eine HTML-Datei an, die er ihrerseits in der »rooms_menu.html« hinterlegt (Abbildung 4). Die einzelnen Geräte werden dann in der »rooms.html« im »block content« eingepflegt. Die entsprechende Syntax zeigt Abbildung 5 am Beispiel eines Schalters.
Es erfordert einige Fleißarbeit, die gewünschten Objekte von FHEM in SmartVISU abzubilden. Wer sich davon nicht abschrecken lässt und sich dennoch mit dem Installations- und Konfigurations-intensiven Open-Source-Tool auseinandersetzt, der wird mit einer schicken und auf die eigenen Bedürfnisse hin maßgeschneiderten Bedienoberfläche belohnt. Das Interface macht gerade auf mobilen Endgeräten eine gute Figur. Die hier vorgestellten Befehle sind dabei lediglich als Leitfaden für das grundsätzliche Vorgehen zu verstehen. Eine Schritt-für-Schritt-Anleitung dazu findet sich im Web [3].
TabletUI
Mittlerweile existiert mit TabletUI (Abbildung 6) eine weitere umfangreiche Visualisierungsumgebung auf Basis von HTML, die sich zunehmender Beliebtheit erfreut. Auch hier kann der Anwender, ähnlich wie bei SmartVISU, Informationen optisch schick aufbereitet darstellen. Im Fokus des GUI, das eine Vielzahl von Funktionen gleichzeitig anzuzeigen vermag, stehen – wie schon der Name ahnen lässt – Tablets.
Wer TabletUI nutzen möchte, aktualisiert erst einmal auf der FHEM-Konsole die FHEM-Pakete (Listing 6, Zeile 1) und spielt dann das TabletUI-Modul ein (Zeile 2). Analog zu SmartVISU ist es nun notwendig, alle gewünschten Elemente per HTML-Datei zu definieren. Im Fall von TabletUI dient dazu primär die Datei »./www/tablet/index.hml«.
Im selben Verzeichnis liegt praktischerweise die Beispieldatei »index-example.html«, die der Nutzer kopieren und als »index.html« abspeichern kann. Das erlaubt es, schon jetzt die Funktionalität genauer zu prüfen.
Listing 6
TabletUI einspielen
01 update all 02 define TabletUi HTTPSRV ftui/ ./www/tablet/ TabletUI
Nebenbei kann sich der Anwender gleich mit der Syntax vertraut machen, um im Anschluss die noch notwendige Verknüpfung mit den aus FHEM zu integrierenden Elementen herzustellen. Insbesondere gilt es, die Widgets der TabletUI-Bedienoberfläche mit den gewünschten Werten zu füllen (»data-get«) sowie Schaltbefehle in Richtung FHEM absetzen zu können (»data-set«).
Auch hier gilt ähnlich wie bei SmartVISU: Mühsam nährt sich das Eichhörnchen. Wer sich unverzagt durch das Einbinden der gewünschten FHEM-Elemente kämpft, wird mit einer schicken Oberfläche belohnt, die sich komplett an die eigenen Bedürfnisse anpassen lässt.
Quo vadis FHEM?
Mit seinen vielfältigen Modulen und einer aktiven Community, die mit Herzblut bestehende Funktionen verbessert und neue Erweiterungen einstreut, hat sich FHEM zu einer festen Größe bei Open-Source-Installationen gemausert, vor allem im deutschsprachigen Raum.
Es bleibt aber auch eine offene Plattform, die mit Problem(ch)en zu kämpfen hat. Insbesondere kann jeder Enthusiast, der ein neues Modul zur Verfügung stellen möchte, das unter Einhaltung einiger Regeln tun. Entsprechend variieren sowohl Syntax als auch Qualität der Software von Modul zu Modul. Einsteigern fällt es nicht immer leicht, zu verstehen, wie Befehle auszusehen haben.
Hier versucht die FHEM-Commandref gegenzusteuern, die die offiziellen Module dokumentiert. Änderungen an den Modulen landen dort aber oft zeitverzögert oder werden im schlimmsten Fall nur im FHEM-Forum diskutiert. Bei Problemen droht dann das Durchforsten von mehrseitigen Foren-Threads auf der Suche nach einer Lösung.
Um die enormen Möglichkeiten von FHEM auszureizen, kann es auch sinnvoll sein, kommerzielle Software hinzuzuziehen. FHEM dient dabei mit seiner Modulbreite als Gateway zwischen den einzubindenden Drittsystemen auf der einen und einer zentralen Steuereinheit auf der anderen Seite. Ausgefeilte Logikfunktionen lassen sich mit grafischen Lösungen wie Node-RED oder Loxone oft einfacher umsetzen. FHEM arbeitet ausschließlich textbasiert, Perl als Programmiersprache limitiert an einigen Stellen die Möglichkeiten.
Wer in FHEM schon einmal ein Modul nicht zum Laufen bekommen hat, wird die Kritik daran nachvollziehen können, dass sich Anwender selbst um die Installation der benötigten Software-Abhängigkeiten kümmern müssen. Dabei fallen teils ellenlange Terminalbefehle an, um die passenden Softwarestände ins Grundsystem einzubinden.
Bei einer Neuinstallation geht der Überblick rasch verloren, welche Abhängigkeiten es manuell nachzuziehen gilt, da das Backup in der Regel nur die zentralen FHEM-Konfigurationsdateien enthält. Eine automatische Installation der nötigen Ressourcen wie bei Node-RED oder OpenHAB wäre für die meisten Anwender der einfachere Ansatz. Bei der Integrationstiefe kann aber kaum ein System FHEM das Wasser reichen.












