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.
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/.
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
Software und Dokumentation
- Home Assistant
- Home Assistant: Getting Started
- Home Assistant: HASS.IO
- Home Assistant Forum
- Raspbian Linux
- Raspberry Pi 3 Modell B für USB Boot vorbereiten
- Raspberry Pi Zero W
headless
Setup – so geht’s - Docker Comes to Raspberry Pi
- Home Assistant: Docker Image für Raspberry Pi 3
Produkte*
Die folgenden Produkte wurden im Artikel besprochen bzw. verwendet:
20 Antworten zu “Home Assistant mit Docker auf Raspberry Pi betreiben”
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.
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.
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.
„latest“ funktioniert, liefert aber u.U. eine beta-Version. So ist aktuell die Version 0.72.0b6 als latest markiert. Siehe auch raspberrypi3-homeassistant.
Hallo
Wie kann man das hassio panel aktivieren
Wenn ich hassio: in die configuration eintrage sagt er mir
das was fehlt.
Ines
Das kann ich Dir leider nicht beantworten, da ich ja bewusst auf HASS.IO verzichte.
Du könntest im HA Forum nachfragen, dort wird man aber mehr Informationen erwarten.
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?
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
Da musst Du gar nichts installieren, das ist im Docker Image schon vorhanden.
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.
[…] Wesentlichen gibt es zu meinem Artikel „Home Assistant mit Docker auf Raspberry Pi betreiben“ nur eine relevante Änderung: Der Zugriff auf das Raspbee II Modul muss durch das […]
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.
Du hast recht, danke für den Hinweis, ich habe den Artikel angepasst.
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.
Banale Frage: Wie ereichtbar ein Autostart nach Neuboot, bzw. wo ist es im Cron definiert.
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
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.