DIY – Hausautomatisierung

Eines meiner älteren aber immer noch aktuellen Projekte ist meine DIY-Hausautomatisierung mit dem treffenden Namen SHAS für Sepp Home Automation Systems. Die Idee dahinter war unsere Mietwohnung ohne bauliche Veränderungen ein wenig „smarter“ zu machen. Das Verlegen von Bus-Leitungen oder installieren von Unterputz-Schaltaktuatoren war hierfür keine Option, das diese bei einem evtl. Wohnungswechsel zurück gebaut werden müssten. Der Einfall hierzu kam mir im Jahr 2010, als ich einen Bericht über „Das Haus der Zukunft“ im TV gesehen habe. In diesem konnte man per Tablet alle möglichen Funktionen wie Beleuchtung, Jalousien, Kamin, etc. bequem von der Couch aus steuern. Die Steuerung wurde durch einen eigenen Hausserver samt daran angeschlossenen Schaltaktuator realisiert. Ich fand das Thema total spannend, wusste aber sofort, dass so ein Aufbau für eine Mietwohnung schlichtweg nicht praktikabel ist.

 

Also was tun? 

Ich hatte in der Wohnung bereits an verschiedenen Stellen 433Mhz Funksteckdosen* (zum damaligen Zeitpunkt 4 Stück) installiert, um zum Beispiel für den Bodenschalter des Deckenstrahlers nicht immer hinter die Couch krabbeln zu müssen. Diese Steckdosen haben den Vorteil, dass sie überall günstig zu bekommen sind, schnell und problemlos installiert werden können und bei einer Änderung eine schnelle Umpositionierung kein Problem ist.

 

Mittlerweile gibt es auch Steckdosen welche nicht auf die klassische 433Mhz oder 868Mhz Funkverbindung setzen, sondern dank der ESP-Chips mittels WLAN angebunden werden. WLAN-Steckdosen gab es zwar damals auch schon, diese waren jedoch leider noch so teuer (Stück ca. 50€), dass ich nicht bereit war das Geld dafür zu investieren.

Kommentar des Autors

 

Also war natürlich der erste Einfall, diese Funksteckdosen nicht mit der mitgelieferten Fernbedienung, sondern per App steuern zu können. Eine Suche bei Google lieferte auch schnell einen ersten Ansatz.

 

Die erste Hardware

Von der Firma Brennenstuhl gab es damals schon ein 433Mhz-Gateway*, welches per Ethernet-Verbindung an den heimischen Router angeschlossen werden kann. Die Steuerung erfolgt über eine App namens „SteckerPRO“, welche einfach auf dem Smartphone oder Tablet über den App-Store installiert werden kann. Da dies im Ansatz genau meinem Wunsch entsprach, bestellte ich das Gateway und ein Set von 433Mhz-Steckdosen von Brennenstuhl um mein Vorhaben realisieren zu können.

 

 

Brennenstuhl Hausautomatisierung Quelle: Amazon.de



 

 

Der Anschluss und die Inbetriebnahme des Gateways waren kein großes Problem, doch schnell merkte ich, dass die angebotene App einfach nicht alle Funktionen bieten konnte, welche ich mir erhofft hatte. Die Idee eines eigenen GUI, welches ich nach Belieben erweitern kann, war damit geboren.

 

Überlegungen und Umsetzung der eigenen Bedienoberfläche

Als Erstes stand die Wahl der richtigen Plattform an. Da meine Frau ein IPhone und IPad nutzte, ich jedoch ein Android-Smartphone samt Android-Tablet besaß und die ganze Sache natürlich auch von Windows-Systemen aus funktionieren sollte, war mir schnell klar, dass ich nicht für jedes System eine App oder ein Programm programmieren möchte, sondern eine Oberfläche brauche, die auf allen Geräten verfügbar ist. Die einfachste Möglichkeit die mir auf Anhieb eingefallen ist und bei welcher ich mich nicht in eine neue Programmiersprache oder IDE einarbeiten musste, war ein Webinterface welches über den Webbrowser geöffnet und bedient werden kann. Mit HTML und PHP hatte ich damals schon einige Projekte umgesetzt (kleinere Webauftritte für die Firmen von guten Bekannten), von daher wusste ich, dass man mit PHP serverseitig Steuerfunktionalitäten umsetzen kann, welche von einer HTML-Seite per Benutzereingabe aufgerufen werden. Ich benötige also einen Webserver, der mir diese Funktionen bietet, meine Seite bereitstellt und die Schaltung meiner Aktoren über das 433Mhz Gateway ausführen kann.

 

Version 1 – Der Weg zum Webserver   

Da zur damaligen Zeit all die tollen Gadgets wie Raspberry Pi, Espressif ESP-Chips oder Arduino noch nicht existent oder zumindest nicht in dem Ausmaß wie heut verfügbar waren, brauchte ich eine Möglichkeit einen lokalen Webserver, welcher 24/7 verfügbar ist, betreiben zu können. Ich verfügte zwar über mehrere Computer, doch wollte ich für diese einfache Aufgabe ungern einen Rechner rund um die Uhr laufen lassen müssen. Zu dem Zeitpunkt befand sich außerdem eine „Western Digital MyBook* Netzwerkfestplatte“ in meinem Netzwerk, welche ich zum Archivieren von Bildern und Daten angeschaffte hatte. Ich wusste, dass auf dieser Netzwerkfestplatte ein Linux-Betriebssystem und ein Webserver installiert war, allein schon um die Konfigurationsoberfläche der Festplatte per Webbrowser zur Verfügung stellen zu können. Also wieder Google bemüht und gesucht, ob ich diesen Webserver vielleicht auch zum Hosten meines Scriptes nutzen könnte. Dabei stieß ich auf eine Reihe von Forenbeiträgen, in welchen die Vorgehensweise zur Installation einer Custom-Firmware und des Apache Webservers und PHP detailliert beschrieben wurde. Falls ich mich richtig erinnere, dann bin ich damals zum großen Teil nach dieser Anleitung* (http://mybookworld.wikidot.com/first-steps-with-mbwe) vorgegangen. 

 

Die erste – „noch“ statische Oberfläche

Dank eines WYSIWYG ( „What You See Is What You Get“) Webeditors mit dem Namen Dynamic HTML Editor* (https://www.heise.de/download/product/dynamic-html-editor-27293), welchen ich heute immer noch gern verwende, war anschließend auch schnell ein Web-Script zusammengeschustert, in welches ich alle Geräte, die über eine der Funksteckdosen angeschlossen waren, eingefügt hatte. Im folgenden interaktiven Scriptfenster kann man diese erste Version sehen und ausprobieren.

 

 

Die Steuerung des 433Mhz-Gateways* realisierte ich dabei anfangs über ein bereits bestehendes Projekt namens Conn-Air* (http://www.l3x.de/connair/). Dafür untersuchte ich nach der Installation die Kommunikation der Conn-Air Oberfläche mit den mittgelieferten Steuerdateien und integrierte die Aufrufe in mein GUI. Damit war das Projekt funktionsfähig und vorerst fertiggestellt.     

 

Version 2 – auf keinem Fall mehr statisch!

Dieser erster Ansatz gefiel mir so gut, dass ich mir schon bald Gedanken über eine Erweiterung machte. Dabei war mir von Anfang an klar, dass diese keinesfalls mehr eine statische Webseite sein sollte, da ich sonst für das Einbinden von neuen Funktion (Steckdose, Temperaturfühler, Infoanzeige etc…) immer wieder den HTML-Code erweitern müsste. Vielmehr sollte sich die Anzeige automatisch erweitern, wenn ich ein neues Gerät hinzufüge. Außerdem sollte eine Unterteilung in Gruppen oder Räume möglich sein, um eine übersichtliche Darstellung der Geräte zu ermöglichen.

 

von HTML zu PHP

Um dies umsetzen zu können, musste ich weg vom statischen HTML-Script und die Seite beim Aufruf dynamisch zusammensetzen lassen. Dafür ist eine serverseitige Programmiersprache, in meinem Fall PHP die erste, wenn nicht einzige Wahl. Da ich es mit SQL-Datenbanken nicht so hatte, legte ich mir auf meinem Webserver ein dateibasierendes Grundgerüst an. Die oberste Ebene stellt dabei ein Ordner mit dem Namen „Funktion“ dar. In diesem befinden sich weitere Ordner, welche meine gewünschten Gruppen, respektive Räume abbilden.

Da man Geräte im Wohnzimmer oder Gästezimmer häufiger benötigt als zum Beispiel im Kinderzimmer oder Bad, fügte ich vor die Ordnernamen einen Buchstaben gefolgt von einem Unterstrich ein. Damit ist das alphabetische Sortieren der Anzeigereihenfolge problemlos möglich. Der Ordnername wir dann im PHP-Script am Unterstrich geteilt und der hintere Teil als Anzeigename genutzt.

 

Der Ordner Funktion mit den darin befindlichen Unterordnern für die Gerätegruppen

 

In den Unterordnern befinden sich dann die Gerätedateien und deren Bilder. Diese tragen den gleichen Namen wie die Gerätedatei und werden anhand ihrer Dateiendung als Bilddatei identifiziert. Um auch die Geräte sortieren und verschiedene Gerätefunktionen wie Einzelgerät, Gerätegruppe oder auch Geräte-Countdown unterscheiden zu können, wurden wieder verschiedene Identifier dem Dateinamen vorangestellt. Die Zahl dient dabei der Sortierfunktion und die Buchstabenkombinationen zwischen „–“ und „_“ zeigen die unterschiedlichen Funktion an (G = Einzelgerät, GR = Gruppe mehrerer Geräte, GROFF = alle Geräte in diesem Ordner ausschalten usw.). Möchte man also eine grundlegend neue Funktion erstellen, so erweitert man das PHP-Script um diese und legt eine neue Buchstabenkombination fest. Fügt man dann eine Datei mit dieser dem Ordner hinzu, so wird diese erkannt und dementsprechend darauf reagiert.  

 

Der Unterordner einer Gruppenfunktion mit den darin befindlichen Geräten

 

Um unterschiedliche Funktionalitäten ermöglichen zu können, unterscheidet sich der Inhalt der Gerätedateien voneinander. So befindet sich in einer Einzelgerätedatei zum Beispiel der folgende Inhalt:

 

Inhalt einer Einzelgerätedatei

 

Hierbei handelt es sich um den Master- und Slave-DIP der Funksteckdose (getrennt durch eine #), gefolgt von einem * als Delimiter (Trennzeichen der einzelnen Funktionsinhalte) und dem aktuellen Schaltzustand, in diesem Falle 0 für AUS. Diesen zu speichern ist wichtig, da das Webscript von verschiedenen Geräten aus aufgerufen werden kann und der aktuelle Schaltzustand immer angezeigt werden soll.

Der Inhalt einer Gerätegruppendatei sieht dafür dann wie folgt aus:

 

Inhalt einer Gerätegruppendatei

 

Die erste Position (6) ist ein Überbleibsel einer anderen Funktion und wird bei den Gruppengeräten nicht genutzt, die 2. Position (0) zeigt an, ob die Gruppenfunktion aktiv ist und an 3. Position folgen die Pfade der zur Funktion gehörenden Geräte. Um auch gruppenübergreifend Schalten zu können, wurde hier der Gruppenordnername, in diesem Fall „A_Wohnzimmer“ mit angegeben. Schaltet man nun alle Gruppengeräte einzeln an, so wird trotz allem überprüft, ob die Schaltbedingung für die Gruppengeräteblöcke erfüllt ist und diese dann als aktiv angezeigt.

Mit Hilfe dieser Methode haben sich im Laufe der Jahre einige verschiedene Geräte angesammelt, welche mit geringem Aufwand der laufenden Hausautomatisierung hinzugefügt werden konnten. Durch den Austausch des kompletten Funktionsordners ist außerdem ein kompletter Wechsel von Szenarien möglich. So ändere ich jedes Jahr die Konfiguration für die Weihnachtsbeleuchtung, durch einfaches Kopieren des aus dem Vorjahr gespeicherten Funktionsordners. Einfacher geht’s fast nicht. 

 

Sonderfunktionen – machen das Leben schöner

Bis hierher habe ich lediglich durch Klicken auf ein durch das PHP-Script angezeigtes Gerät eine Schaltaktion durchgeführt. Das ist noch nicht wirklich smart und hat mit Automatisierung, bis auf die Gruppenfunktionen vielleicht, auch noch nicht so viel zu tun. Deshalb kam mir die Idee, verschiedene Geräte zu einem bestimmten Zeitpunkt automatisch ein- bzw. ausschalten zu lassen. Nun muss natürlich eine Instanz dafür sorgen, dass diese Zeitpunkte auch ausgelesen, richtig interpretiert und zum passenden Zeitpunkt die Aktion ausgeführt wird. 

Wer sich ein wenig mit Linux auskennt, dem wird für solch eine Aufgabe gleich der Cron-Daemon* eingefallen sein. Bei diesem handelt es sich um einen Dienst, welcher Anwendungen zeitbasiert ausführen kann. Der Zeitpunkt, respektive die Wiederholung ist dabei für jede eingetragene Anwendung frei wählbar.

Die Konfigurationsdatei für den Cron-Daemon* erreicht man durch die Eingabe von

 

crontab -e

 

im Terminalfenster von Linux oder per SSH Verbindung bequem von einem anderen Rechner aus. Daraufhin öffnet sich ein Fenster in welchem, gefolgt von einer kurzen Erklärung, die auszuführenden Anwendungen eingetragen werden (eine Zeile pro Anwendung).

 

Crontab-Einträge mit den automatisch auszuführenden Anwendungen

 

Damit hatte ich eine Möglichkeit gefunden ein PHP-Script jede Minute einmal ausführen zu lassen. Dieses durchsucht meine Ordner nach Count-Down- (CD) oder Timer-Dateien und überprüft anschließend, ob der darin definierte Schaltzeitpunkt mit der aktuellen Systemzeit übereinstimmt und führt diesen bei Bedarf aus.

 

Inhalt einer zeitlich gesteuerten Timerdatei

 

Diese Timerdateien sind nach dem gleichenPrinzip aufgebaut und enthalten durch Delimiter getrennte Infomationen. Hierbei werden wie bei den Gerätegruppen mehrere Einzelgeräte unterstützt. Danach folgen die durch „++“ getrennten Uhrzeiten für den Ein- bzw. Ausschaltzeitpunkt, gefolgt von den Wochentagen (ebenfalls durch „++“ getrennt), an denen die Schaltaktion stattfinden soll. Die letzte Position „athome“ kam später hinzu und führt die Aktion nur aus, wenn wir auch zuhause sind. Die Erkennung dafür läuft über Anpingen der Netzwerk-IP unserer Mobiltelefone und wurde später durch das Erkennen von Bluetooth Beacons* an unseren Schlüsselbunden erweitert.  

 

Neue Hardware – Quantensprung Raspberry Pi

Bis zu diesem Zeitpunkt habe ich immer noch mit der Kombination aus 433Mhz-Gateway* und Webserver auf der „Western Digital MyBook* Netzwerkfestplatte“ vorlieb genommen. Doch eines Tages stellte die Netztwerkfestplatte nach einem Stromausfall ihren Dienst ein (das Linux Dateisystem wurde durch das unsanfte Herunterfahren beschädigt) und somit war auch die Automatisierung außer Gefecht gesetzt. Ich suchte nach einer alternativen Plattform für meine Hausautomatisierung und entdeckte den Mini-Computer Raspberry Pi*. Dieser bot alles, was ich brauchte und hatte mit seinen GPIOs (general purpose input/output) außerdem noch die Möglichkeit externe Hardware ansprechen zu können. 

Dank zahlreicher Foren war die Linux-Installation kein Problem und auch der Apache-Webserver und die Cron-Jobs war wieder recht schnell installiert. Für die Ansteuerung der Funksteckdosen kaufte ich billige  433Mhz Funksender* welche sich direkt an die angesprochenen GPIOs anschließen lassen. Mit Hilfe der RC-Switch Library und einer Anleitung wie zum Beispiel dieser* hier, war es auch recht schnell möglich meine PHP-Scripte dahingehend umzubauen, dass sie nicht mehr mit dem 433Mhz-Gateway*, sondern dem verbauten Funkmodul die Steckdosen schalteten. Das Gateway hatte damit ausgedient.

  

Raspberry Pi + Funkmodule Quelle: Amazon.de



 

Durch die neuen Hardware-Möglichkeiten eröffnete sich im Anschluss noch einiges mehr an Möglichkeiten um meine Wohnung smarter zu machen. So kamen im Laufe der Jahre Funktionen wie zum Beispiel die automatische Schaltung von Geräten beim Heimkommen oder Verlassen der Wohnung, die Integration einer Heizungssteuerung mit vordefinierten Heizzeiten und Urlaubsmodus, die bereits angesprochene Bluetooth-Anwesenheitserkennung, oder selbstgebaute Funk-Temperaturfühler* hinzu. Da hier unter anderem Micro-Controller zum Einsatz kommen, werde ich auf diese Helferlein in separaten Beiträgen etwas näher eingehen und hier verlinken.

Der „Benchmark“ für alle neuen Funktionen ist dabei stets meine Frau. Nutzt sie die neue Funktion und findet sie sinnvoll, dann wird weitergebastelt und überarbeitet. Wenn nicht, dann schläft der Entwicklungsprozess meist ein, oder wird durch andere „wichtigere“ Basteleien verdrängt.  

Sollte ich dem einen oder anderen jetzt Lust auf eine selbstgebaute, selbst-programmierte und beliebig erweiterbare Hausautomatisierung gemacht haben, so stehe ich gern mit Rat und Tat zur Seite! 

 

 

aktuelle Screenshots der grafischen Oberfläche von SHAS – Hausautomatisierung 

 

Haftungsausschluss:

Hiermit weise ich direkt darauf hin, dass für Beschädigungen und / oder sonstige Schäden, welche durch die Nutzung, den Nachbau oder den Betrieb von hier gezeigten elektrischen Schaltungen, Komponenten oder Teilkomponenten entstanden sind, keinerlei Haftung seitens des Seitenbetreibers, Autors oder einer beteiligten dritten Person übernommen wird!

 

Schreibe einen Kommentar

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