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  \
  --name=hass --net=host --restart=always \
  -v $PWD/home-assistant:/config \
  -v /etc/localtime:/etc/localtime:ro \
  homeassistant/raspberrypi3-homeassistant:latest

Durch obigen Befehl wird die aktuelle Version des Docker Image (und seine Basis) von Home Assistant für Raspberry Pi 3 heruntergeladen und ein darauf aufbauender Container namens „hass“ wird 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

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:


20 Antworten zu “Home Assistant mit Docker auf Raspberry Pi betreiben”

  1. 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. Danke für die Anleitung, hat gestern super geklappt. Ich war übrigens zu faul die Versionsnummer rauszusuchen und hab es mit „latest“ versucht. Das hat auch funktioniert.

  3. Hallo Christoph, super Anleitung – hat einwandfrei funktioniert 🙂

    Ich hätte nur eine Frage. Wie bekomme ich z-Wave zum laufen?
    Habe die erforderlichen Einstellung in Configuration.yaml vorgenommen, aber leider gibt es ständig einen Error.

    Error setting up entry Z-Wave (import from configuration.yaml) for zwave
    Traceback (most recent call last):
    File „/usr/local/lib/python3.6/site-packages/openzwave/option.py“, line 78, in __init__
    raise ZWaveException(u“Can’t find device %s : %s“ % (device, traceback.format_exception(*sys.exc_info())))
    openzwave.object.ZWaveException: „Zwave Generic Exception : Can’t find device /dev/ttyACM0 : [‚NoneType: None\\n‘]“

    Komisch ist, dass ich in der Config „/dev/ttyACM1“ angegeben habe. Das hatte ich mit dem Befehl: ls -ltr /dev/tty*|tail -n 1 herausgefunden.

    Danke und viele Grüße, Marcus

    • Hi Marcus, danke für Deinen Kommentar. Ich habe selbst keine Z-Wave Hardware am Raspberry, aber es könnte sein, dass Du das notwendige Gerät (/dev/ttyACM1) nicht in den Container reichst. Auch, dass Deine Änderungen der Konfiguration nicht angenommen werden, geht in die gleiche Richtung.

      Kannst Du mal die Zeile mit dem Docker-Aufruf (docker run) zeigen?

  4. Hallo,
    ich möchte die Fritz!Box „presence detection“ im Hass benutzen.
    Dazu wird das Package „lxml“ benötigt. Wie muss ich das installieren? Ganz normal wie hier beschrieben (mit „sudo apt-get install python3-lxml libxslt-dev libxml2-dev zlib1g-dev“):

    https://www.home-assistant.io/components/fritz/#host

    Oder mit dem 2. Befehl („pip3 install lxml“) in den Docker hinein?
    Vielen Dank für eine Antwort!
    Björn

  5. Hallo,
    super Anleitung!

    Mit:
    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:stable

    bekommt man die derzeit aktuelle Version (0.9.85). Es funktionieren auch :beta und :dev was gleich :latest ist.

  6. Mit der aktuellen Version von HA für den RPi4 funktioniert die User- und Gruppenangabe nicht mehr. Dann ist der Container in einer endlosen Reboot-Schleife.

    Das hier löst das Problem:
    docker run –init -d \
    –name=hass –net=host –restart=always \
    -v $PWD/home-assistant:/config \
    -v /etc/localtime:/etc/localtime:ro \
    homeassistant/raspberrypi4-homeassistant:stable

    Entnommen aus der offiziellen Doku:
    https://www.home-assistant.io/docs/installation/docker/
    und diversen Recherchen, dass es aktuell nur möglich ist, dass HA im Container als root laufen muss, daher kann man wohl den User nicht angeben.

    Trotzdem: Super Anleitung, hat mir mächtig weitergeholfen.
    Vielen Dank dafür.

  7. Hallo Christoph,
    sehr guter Ansatz HomeAssistant über Docker laufen zu lassen. ICh denke ich stehe jetzt auch vor diesem Schritt. Ich nutze homeAssistant jetzt seit ca. 3 Monaten, und bin total überrascht wie einfach es geht Smarthomegeräte / Sensoren usw. einzubinden. Aber dennoch möchte ich auch noch andere Programme auf dem Raspi3 laufen lassen, zb. Solarview (Super tool zum Datenloggen der Solarleistung einer Solaranlage). Diese läuft aber nicht, da HassIO die Befehle stark begrenzt.
    Jetzt zu meiner Frage: Kann ich sehr einfach das System HomeAssistant auf ein System über Docker Übertragen. Vielleicht kann ich dann die Datensicherung übertragen. Oder wäre das zu einfach gedacht?
    Kannst du da helfen?
    Danke
    Frohe Ostern
    Dieter

    • Sorry Dieter, dein Kommentar blieb lange liegen bzw. wurde mir nicht angezeigt.

      Migration einer existierenden Installation in einen Docker-Container ist eigentlich recht einfach: Du musst das gesamte „config“ Directory an eine neue Stelle kopieren (inkl. der versteckten Ordner) und dann beim Container-Start die neue Stelle als „Volume“ einbinden.

      Das Beispiel in meinem Post geht davon aus, dass das Config-Directory als „home-assistant“ im aktuellen Verzeichnis existiert ($PWD/home-assistant), natürlich kannst Du hier auch auf jedes andere Verzeichnis verweisen.

    • Hi Moss,

      Du musst den Docker daemon automatisch starten lassen, dadurch werden auch alle Container, welche mit restart=always angelegt wurden gestartet.

      Mit systemd wäre der Befehl:

      sudo systemctl enable docker

  8. Hallo,
    vielen Dank für die Anleitung. Es hat alles super funktioniert. Ich habe noch eine Frage dazu. Ich möchte nun noch Node Red, Grafana usw. im Homeassistant nutzen. Muss die die Applikationen über Docker einbinden oder kann ich das direkt über HAs Addons machen?

    • Moin WF55,

      ich kann Dir dazu leider keine verbindliche Antwort geben. Nach dieser Anleitung hast Du eine „HA Container“-Installation, also Home Assistant „Core“ in einem Container.

      Add-Ons gibt es (m.W.) nur mit einer „HA Supervised“ oder „HA OS“ Installation, also einer Installation welche den „Supervisor“ für HA beinhaltet. Die nutze ich aber nicht.

      Es ist möglich „Custom Components“ zu integrieren, die liegen ja im (ausgelagerten) /config-Verzeichnis. Möglicherweise ist das für die Integration von Grafana ausreichend.

Schreibe einen Kommentar

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