Smarthome mit Raspberry Pi

Seit 2013 realisiert ein Raspberry Pi ein kleines Smarthome in meinem WG-Zimmer. Verantwortlich ist er unter anderem für diverse Zimmerbeleuchtungen, Temperatur- und Luftfeuchtigkeitsaufzeichnung, sowie eine kleine Displayanzeige für mich relevanter Informationen.

Ich habe mich dabei gegen ein kommerzielles System entschieden und baue meine Smarthome-Teilnehmer selbst. Wachsende Erfahrung und neue technische Möglichkeiten fließen dabei in unregelmäßigen Abständen in die Planung ein. Im Folgenden wird der Versuch unternommen, die unterschiedlichen Entwicklungsschritte und die gewonnen Erkenntnisse im Wesentlichen zu charakterisieren.

Systemaufbau 2013 bis 2015

Der erste Systemaufbau bestand aus einem Raspberry Pi B (Revision 2) und einer Hauptplatine auf Lochraster. Die Hauptplatine besaß unter anderem ein Mikrocontroller (Atmega88), I2C-Porterweiterung (PCF8574) und Open Collector Ausgangstreiber (ULN2803).

Funktionen

  • Aufzeichnung von Temperatur und Luftfeuchtigkeit
  • Fernsteuerung Fernseher und RGB-Beleuchtung durch IR-LED (Emulation Fernbedienung)
  • LED-Kerze, LED-Licht ein-/ ausschalten
  • Informationen auf 20×4 Zeichendisplay ausgeben (Datum, Temperatur, Wetterbericht)
  • Funksteckdose ein-/ ausschalten (Tower-PC an Funksteckdose: startet durch einschalten, nach herunterfahren abschalten der Steckdose)
  • 3 steuerbare 12V-Ausgänge
  • Zugriff Webcam
  • Fernzugriff

Das Zusammenspiel von Raspberry Pi, Mikrocontroller und Peripherie ist in Abbildung 1 dargestellt. Der Mikrocontroller übernimmt dabei die zeitkritischen Aufgaben, wie die korrekte Erzeugung des IR-Signals, des Basisbandsignals für Funksteckdosen oder die genaue Messung der Frequenz des verwendeten Luftfeuchtigkeitssensors. Des Weiteren wird über einen Optokoppler der Status des Tower-PCs überwacht und die Funksteckdose einige Sekunden nach dem herunterfahren abgeschaltet.

 

Abbildung 1: Topologie

Als Software werden kleine PHP- und Python-Skripte verwendet, die von einem Apache-Webserver ausgeführt werden. So wird eine einfache Bedienung per Weboberfläche erreicht.

Das System erwies sich als sehr unflexibel. Bei einer Wartung oder Erweiterung musste alles zerlegt werden. Neben vielen Kabeln an einer Stelle waren auch Gehäuse und Lochrasterplatine eine limitierende Ressource.

Systemaufbau 2015 bis 2018

Das Hauptziel des neuen Systemaufbaus bestand in einer Modularisierung der Smarthome-Komponenten. Künftig sollten Sensoren und Aktoren in Komponenten mit einheitlicher Hardware- und Softwareanbindung gekapselt werden und die Funktionalität je Teilnehmer möglichst gering gehalten werden. Zwar erfordert die Umsetzung viel mehr Mikrocontroller, aber neue Komponenten können schnell in Betrieb genommen werden und Wartungsarbeiten erfordern kein Abschalten des kompletten Systems.

Aus praktischen Gründen wurde – auch in Hinblick auf den finanziellen Aspekt – eine Lösung mit I2C entworfen. Alle Komponenten sind per 6 poligem Flachbandkabel an den I2C-Bus des Mikrocontrollers angeschlossen. Das hat zwei Vorteile: An einem Flachbandkabel können mehrere Stecker befestigt sein, der Programmieranschluss für AVR-Mikrocontroller lässt sich gut für I2C nutzen. Eine eigene Python I2C-Treiberbibliothek sorgt für eine Konfliktauflösung bei zeitlichen Busanfragen durch Mutex und Retry-Versuche nach dem Binary Exponential Backoff-Verfahren. Für die Komponenten selbst existiert ein Prototyp für Software auf Raspberry Pi (Python Objektorientiert) und Mikrocontroller.

Als größtes Problem erwies sich sich der I2C Bus. Zeitweise treten Übertragungsfehler auf. Abgesehen davon hat sich die einheitliche Hardware (Atmega-Mikrocontroller mit Flachbandkabel-Anschluss) und Software bewährt. Hinzufügen oder Ändern von Komponenten ist relativ einfach möglich. Zur Wartung muss oft nicht das Gesamte System heruntergefahren werden. Als etwas unpraktikabel hat sich der Entwurf erwiesen, für jede Komponente eine eigene Klasse abzuleiten, da gleichzeitig neben der Klasse ebenfalls ein eigener Zugriff per Webinterface implementiert werden muss. In der Vereinheitlichung besteht noch Optimierungspotential.

Systemaufbau 2018 bis 2020

Der bestehende Aufbau wurde durch ein NRF24L01 direkt angeschlossen am SPI des Raspberry Pi erweitert. Es hatte sich gezeigt, dass WLAN-Module (ESP8266) nicht zuverlässig ansprechbar waren, vermutlich durch Probleme des Routers.

Das verwendete Funkmodul ist bei Bastlern beliebt und erlaubt besonders energiesparende Teilnehmer – zum Beispiel batteriebetriebene Sensoren. Ein Python Skript übernimmt Treiber-Funktionalität und Applikationsebene des Funkmoduls. Es stellt ein REST-Interface zur Interaktion mit den anderen Komponenten zur Verfügung. Die Software OpenHAB bündelt alle Funktionalitäten. Die Lösung hat noch kein schönes Design, so werden I2C und Funkmodule völlig unterschiedlich gehandhabt, das Handling des Funkmodul-Treibers ist sehr unflexibel. Da mittlerweile auch WLAN-Module stabil zu laufen scheinen und im Einsatz sind, ist wiederholt ein ziemlich heterogenes System entstanden.

Systemaufbau ab 2020

Raspberry Pi B wurde durch Raspberry Pi 3 ersetzt. Grund war ein großes Systemupdate, nachdem OpenHAB nicht mehr performant lief. Durch das Systemupdate sind auch Bibliotheken wie beispielsweise für TelegramBots verfügbar. Dies erlaubt eine neue Art des Fernzugriffs und der Nutzerinteraktion.

 

Anmerkung: Das verwendete Titelbild stammt von unsplash.com