Home Assistant mit Docker auf Raspberry Pi betreiben

Als Angesteller einer IT- und Management-Beratung beschäftige ich mich viel mit den Themen Cloud, Microservices und dem Internet der Dinge.

Im privaten Umfeld stehen die verwandten Themen Heimautomatisierung und Smart Home im Fokus. Eine sehr gute Basis dafür sind ein Raspberry Pi 3, Docker und Home-Assistant …

In den letzten beiden Jahren habe ich viel Zeit (und Geld) in die Vernetzung unseres Heims gesteckt. Bereits vorhandene Gerätschaften (wie Computer, AV-Receiver und Fernseher) wurden um neue Aktoren zum Schalten und Sensoren zum Messen ergänzt.

Home Assistant Raumansicht

Home Assistant Raumansicht

Im Mittelpunkt der Installation stehen dabei ein Raspberry Pi 3 und Home Assistant.

Raspberry Pi 3

Der Raspberry Pi 3 ist die ideale Plattform für Heimautomatisierung, nicht nur für Home Assistant. Er ist ausreichend schnell, bietet ausreichend Speicher und seine USB- und GPIO-Ports können für die Anbindung diverser Systeme und Standards (ZWave, Zigbee) genutzt werden. Außerdem verbraucht er minimal Strom und kann daher ohne Belastung des Öko-Gewissens 24/7 betrieben werde.

Dieser Artikel geht entsprechend davon aus, dass ein Raspberry Pi 3 mit einem aktuellen Raspbian Linux versorgt wurde und im heimischen Netz via LAN der WLAN erreichbar ist. Für Unterstützung bei der Einrichtung kann auf meine anderen Artikel zu diesem Thema zurückgegriffen werden.

Die Zusammenführung der teilweise isolierten Systeme übernimmt dabei die Software Home Assistant. Es gibt viele Wege Home Assistant auf einem Raspberry Pi zu installieren und alle sind hervorragend dokumentiert. Allerdings habe ich mich weder für eine direkte Installation via pip, noch für die Verwendung von hass.io entschieden, sondern für einen Mittelweg: Docker.

Docker

Der Grund ist einfach: Ich verwende auf dem Raspberry Pi Raspbian, also ein Debian Derrivat. Und die Paketverwaltung von Debian ist apt. Die Verwendung anderer Paketmanager, wie pip für Python oder npm für NodeJS, führt m.E. nur zu Chaos.

Andererseits möchte ich den Raspi nicht in eine Appliance verwandeln, sondern durchaus auch mit anderen Aufgaben bedenken. Ansätze wie HASS.IO oder Hassbian erschwerden dies durch die notwendige Abschottung des unterliegenden Betriebssystems.

Software, welche nicht per apt zur Verfügung steht wird also in einem Docker Container betrieben, um die Auswirkungen auf das Hostsystem zu minimieren.

Installation von Docker

Docker ist aktuell in den Raspbian Repositories vorhanden (Paket docker.io) und könnte somit direkt via apt installiert werden. Doch die Entwicklung von Docker läuft schneller als die Release-Zyklen von Raspbian, so dass ich das offizielle Docker-Respository nutze, um die aktuellste Version via apt installieren zu können.

$ curl -sSL https://get.docker.com | sh

Wer sich in das ausgeführte Skript einarbeitet erkennt, dass hier lediglich die Schritte zur Anbindung des Docker Debian Respositories inkl. GPG-Key Download automatisiert werden. Sie können alle auch manuell ausgeführt werden, aber das Skript ist einfach convenient.

Damit wir docker als regulärer Benutzer ohne sudo ausführen können, fügen wir – wie empfohlen – den aktuellen Benutzer der Gruppe docker hinzu. Der hier bespielhaft genannte Account pi ist durch den tatsächlichen Benutzernamen zu ersetzen:

$ sudo usermod -aG docker pi

Nach einer Ab- und Anmeldung sollte sich nun ein erster Docker Container ausführen lassen:

$ docker run --rm hello-world

Home Assistant

Nun da Docker einsatzbereit ist, können wir Home Assistant installieren und im Container betreiben. Für diese Einführung belasse ich die Konfiguration von Home Assistant unverändert, d.h.:

  • es wird die integrierte SQLite Datenbank verwendet
  • die Home Assistant Oberfläche ist auf Port 8123 zu erreichen
  • die discovery-Komponente durchsucht das lokale Netz nach bekannten IoT-Geräten

Installation von Home Assistant mit Docker

Docker Container sind vergänglich (ephemeral), ebenso wie die in ihnen verwendeten Daten. Um Konfiguration und andere Laufzeitdaten zu persistieren, müssen wir Docker einen Platz zum Speichern außerhalb des Containers zuweisen. Dort wird Home Assistant seine initiale Konfiguration erzeugen und dauerhaft verwenden.

Zunächst erstellen wir ein lokales Verzeichnis (der Name ist beliebig):

$ cd ~
$ mkdir home-assistant

Anschließend starten wir unseren Container auf Basis des offiziellen Home-Assistant Images für den Raspberry Pi 3:

$ docker run -d -u $(id -u):$(id -g) \
  --name=hass --net=host --restart=always \
  -v $PWD/home-assistant:/config \
  -v /etc/localtime:/etc/localtime:ro \
  homeassistant/raspberrypi3-homeassistant:0.66.1

Durch obigen Befehl wird Version 0.66.1 des Docker Image (und seine Basis) von Home Assistant für Raspberry Pi 3 heruntergeladen. 0.66.1 ist ggfs. durch die aktuelle Versionsnummer zu ersetzen, die Verwendung von „latest“ funktioniert aktuell nicht (s. Kommentar von Sebastian).

Ein darauf aufbauender Container namens „hass“ wird im Kontext des aktuellen Benutzers gestartet. Das lokale Verzeichnis home-assistant und die Zeitzone werden in den Container eingebunden. Die genaue Bedeutung der Parameter kann per $ docker run --help ermittelt werden.

Der Vorgang dauert ein wenig, aber nach einigen Sekunden sollte das Web-Interface von Home Assistant über den DNS-Namen oder die IP-Adresse des Raspberry zugänglich sein, z.B. http://raspberrypi:8123/.

Home Assistant Standard Ansicht

Home Assistant Standard-Ansicht

Der tatsächliche Inhalt des Willkommen-Bereichs kann sich unterscheiden, da die in Home Assistant enthaltene Discovery Komponente möglicherweise Geräte (z.B. Philips Hue, Google Home oder Sonos Lautsprecher) bereits aufgespürt und eingebunden hat.

Konfiguration von Home Assistant

Das lokale Verzeichnis (home-assistant) wurde dem Container zur Verfügung gestellt. Entsprechend hat Home Assistant hier seine initiale Konfiguration abgelegt. Da der Container mit den Rechten des aktuellen Benutzers gestartet wurde, sind auch die Konfigurationsdateien in seinem Besitz. So kann jetzt mit einem Editor (z.B. vi oder nano) die grundsätzliche Konfiguration unter home-assistant/configuration.yaml bearbeitet werden. Beispielhaft kann der Eintrag „introduction:“ (ca. Zeile 17) entfernt werden, um den Einführungstext zu verwerfen.

Neustart von Home Assistant

Bei Änderung der Core-Konfiguration ist Home Assistant neu zu starten. Auch wenn dies über die Web-Oberfläche möglich ist (unter Einstellungen), ist der Neustart des Docker Containers oft die schnellere Lösung:

$ docker restart hass

Aktualisierung des Containers

Etwa alle 2 Wochen erscheint eine neue Version von Home Assistant, dazwischen werden Minor Releases mit Korrekturen veröffentlicht. Auch die Docker Images werden dabei zeitnah aktualisiert und können für neue Container-Instanzen verwendet werden. Existierende Container verwenden jedoch immer ihr ursprüngliches Image, daher ist die laufende Instanz zunächst zu löschen (keine Sorge, die Konfiguration im lokalen Verzeichnis bleibt bestehen):

$ docker rm -f hass

Anschließend kann ein neuer Container wie oben beschrieben gestartet werden.

Fazit

Der Einstieg in die Heim-Automatisierung ist einfach und kostengünstig möglich. Viele Geräte im Haushalt sind bereits netzwerk-fähig und können über diese Schnittstelle überwacht oder gesteuert werden. Andere dienen als einfache Sensoren, so kann ein Router zur Erkennung anwesender Mobiltelefone beitragen. Und nicht zuletzt existiert bereits eine Fülle von Internet-Diensten, welche als Signale in der Steuerung des Smart Home genutzt werden können.

Home Assistant ist eine einfach zu installierende und leicht zu verwendende Software, welche wie geschaffen für einen Raspberry Pi (3) ist. Die gute Dokumentation und eine aktive Community erleichtern den Einstieg und stehen für Fragen und Ratschläge zur Verfügung.

Weiterführende Informationen

Produkte*

Die folgenden Produkte wurden im Artikel besprochen bzw. verwendet:

  1. Sebastian sagt:

    Sehr gute Anleitung, vielen Dank! Der docker-run-Befehl klappt so leider nicht mehr, da es kein latest-Tag mehr gibt. Man muss nun explizit eine Version angeben.

  2. Christoph sagt:

    Danke für den Hinweis. Du hast Recht, mit der Einführung des neuen Release-Zyklus ist in dem Bereich einiges durcheinander. Ich werde eine Ergänzung vornehmen.

Kommentar hinterlassen