Home Assistant

Posted on Sa 05 Dezember 2020 in computer

Das Smart-Home ist in aller Munde und das Netz voll mit IoT-Geräten, die aber natürlich alle ihre eigene Cloudlösung anpreisen – katastrophale Security-Probleme inklusive. Und auch ich habe im Lauf der Jahre verschiedene Geräte angehäuft, die im weitesten Sinne in die Kategorie IoT oder Smarthome fallen:

  • Meine Tasmota-basierte Fernsteuerung der Espressomaschine
  • Dito für die Werkstattheizung
  • Ein paar LED-Leuchten mit Bluetooth-Fernbedienung
  • Eine Funkklingel
  • Diverse Funk-Temperatursensoren

Und in der Schublade liegen noch ein paar Shellys und diverse Funksender und ich hätte noch jede Menge Ideen, was man noch so alles anbinden könnte.

Aber irgendwie leben die alle in ihrer eigenen Welt: Die beiden Tasmota-Geräte sind im WLAN, die Klingel und die Temperatursensoren funken auf 433MHz und die Lampen haben BLE.

Ein Ring, sie zu knechten, sie alle zu finden

Wäre doch schön, wenn man all die Sachen irgendwo unter ein Dach bekommen könnte. Also habe ich das allwissende Netz befragt und konnte mich vor möglichen Lösungen kaum retten: openHAB, FHEM, Home Assistant, NodeRed, ioBroker und noch einige mehr.

Die Aufgabe so einer Software ist es, das babylonische Sprachen-Chaos in den Griff zu kriegen und die diversen Geräte unterschiedlicher Hersteller, Protokolle und Kommunikationsformen in ein gemeinsames System zu zwingen über das man dann sein Haus steuern und überwachen kann, anstatt hundert verschiedene Apps für die diversen Teile installieren zu müssen.

Ich habe mir die oben genannten Programme alle angesehen und sie erfüllen alle ihren Zweck und haben so ihre individuellen Vor- und Nachteile. Letztlich hat mir Home Assistant am besten gefallen, vielleicht weil mir Python sympatisch war und es einen unkomplizierten Eindruck macht, und so probieren wir das heute mal aus.

Als erstes müssen wir das mal installieren. Die Standard-Methode ist offenbar, ein Image des Home Assistant OS auf eine SD-Kart zu schreiben und einen Raspberry-Pi als Server zu verwenden. Hm – ich will aber keinen Pi dafür nehmen, sondern das Ganze auf meinem HP-Microserver installieren. Leider gibt es kein Debian Package – weder in der Distribution, noch auf der Home Assistant Seite.

Das finde ich, ehrlich gesagt, ziemlich schade und muss an dieser Stelle mal meiner Verärgerung über einen Trend Ausdruck verleihen: Ich sehe da draußen einen Haufen wirklich cooler Projekte, wie z.B. Home Assistant oder PiHole, die als primäre Methode einen reinen Pi-Installer anbieten oder gar ein komplettes OS-Image. Dabei gehen sie offenbar davon aus, dass der Pi dann ausschließlich diese konkrete Funktion übernimmt. Ich glaube, das soll anfängerfreundlich sein – d.h. der Neu-User muss nur das Image auf die Karte kriegen oder den Installations-Wizard starten und keine Ahnung von LINUX haben. Das klingt erstmal positiv, aber ich finde, das macht es nur unnötig schwer, den nächsten Schritt zu gehen. Muss der besagte Neuling nun einen weiteren Pi kaufen, wenn er Home Assistant und Pi-hole haben will? Ist es wirklich komplizierter, ein Raspbian (aka Raspberry PI OS) zu installieren und dort sudo apt-get install pihole einzugeben? Ich finde nicht und gerade der besagte Neuling wäre mittelfristig besser dran, diese ganz fundamentalen Tools, wie den Package-Manager kennen zu lernen, anstatt für jedes Projekt einen neuen Installer verwenden zu müssen. Und wenn man obendrauf einen Konfig-Wizard anbieten will – super, gerne, aber idealerweise im normalen Ökosystem der Distribution und nicht statt des normalen Weges. Auch hätte man dann nicht die Gefahr einen wilden Mix leicht unterschiedlicher Versionen und Konfigurationen des OS auf seiner Pi-Farm zu haben und ganz nebenbei ist die Installationsanleitung dann auch viel universeller, denn dann ist es wurscht, ob ich auf einem Pi installiere, einem alten Desktop Computer oder einem Server.

Aber genug gemeckert – natürlich gibt es verschiedene andere Methoden, Home Assistant zu installieren. Ich habe mich letztlich dafür entschieden, das Docker Image zu verwenden:

~ ❯ docker pull homeassistant/home-assistant:stable
stable: Pulling from homeassistant/home-assistant
188c0c94c7c5: Pull complete 
05a9011f9479: Pull complete 
554b6a0a1c40: Pull complete 
83e458825758: Pull complete 
715e44207e4b: Pull complete 
d8ff46c50e4c: Pull complete 
e3bf5b485dda: Pull complete 
f4f68ce42e30: Pull complete 
bc91c4987a21: Pull complete 
146c01da451a: Pull complete 
062908a5f0c4: Pull complete 
67976a0cee84: Pull complete 
56aa77785c59: Pull complete 
348203cf2df7: Pull complete 
43a99f3ca67c: Pull complete 
b7773d59b8b7: Pull complete 
df78b1408580: Pull complete 
b336ed9b9f23: Pull complete 
511244112a96: Pull complete 
8370a45f2121: Pull complete 
4e48544928b9: Pull complete 
Digest: sha256:387410a898c98d20feccce7c7bd7049c6e2e13b61bf016f7df35c340d73bb932
Status: Downloaded newer image for homeassistant/home-assistant:stable

Schön – gleich mal schauen:

~ ❯ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
homeassistant/home-assistant   stable              3adcbc30beac        24 hours ago        1.1GB

Als erstes legen wir mal ein Verzeichnis für die config an:

mkdir ~/.config/homeassistant

Und starten:

docker run -d --name="hass.io" -v ~/.config/homeassistant/ -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant:stable

Und da isser:

~ ❯ docker ps
CONTAINER ID        IMAGE                                 COMMAND             CREATED             STATUS              PORTS               NAMES
802b689616ed        homeassistant/home-assistant:stable   "/init"             4 seconds ago       Up 4 seconds                            hass.io

Streng genommen hätte ich mir den docker pull Schritt sparen können, weil das docker run Kommando die Installation eh automatisch angestoßen hätte, aber so finde ich es dramaturgisch schöner ;-)

Auf die Dauer ist es aber besser, das Ganze mit docker-compose zu machen. Und so habe ich auch das noch schnell gemacht. So schaut mein docker compose file aus:

version: '3'                                                                                                                                                                                   
services:                                                                                                                                                                                      
    homeassistant:                                                                                                                                                                               
        container_name: home-assistant                                                                                                                                                             
        image: homeassistant/home-assistant:stable                                                                                                                                                 
        volumes:                                                                                                                                                                                   
            - ~/.config/homeassistant/:config                                                                                                                                                               
        environment:                                                                                                                                                                               
            - TZ=Europe/Berlin                                                                                                                                                                       
        restart: always                                                                                                                                                                            
        network_mode: host 

Das ganze startet man dann so:

docker-compose up -d

So – und wie komme ich nun in den Home Assistant? Simpel – er läuft nun auf meinem homeserver auf Port 8123, also bitte ich den Browser meines Vertrauens freundlich, sich mit der Adresse http://hal:8123/onboarding.html zu verbinden. Und schon bin ich hier:

Und kurz drauf bin ich mitten im Dashboard.

Na toll – Nebel! Und vor allem – keinerlei Gadgets. Das muss sich ändern! Als erstes versuchen wir mal, die Espressomaschine einzubinden. Das ist eine ganz altmodische italienische Siebträgermaschine, also keinerlei Elektronik oder gar Computersteuerung an Bord. Aber sie hängt an einer Sonoff S20 Steckdose, auf der Tasmota läuft – so kann ich sie ganz einfach per Handy oder Computer via Web-Interface ein und aus schalten, ohne eine App zu brauchen. Und ich habe sie so programmiert, dass sie morgens an geht, wenn der Wecker klingelt. So weit, so praktisch. Aber cooler wäre natürlich eine Integration in den Heimserver.

Damit das was wird, müssen wir dafür sorgen, dass die beiden via MQTT miteinander reden können. Und dazu brauchen wir einen MQTT broker. Mosquitto ist wohl der populärste.

... Ins Dunkel zu treiben und ewig zu binden

Und nun muss ich leider wieder in den Grantel-Modus schalten: Wenn man das in der Home Assistant Doku nachschlägt, dann erfährt man, dass man in das supervisor-Panel gehen muss und dort die Möglichkeit fände, das MQTT broker Add-on zu installieren. Schön. Nur dass ich kein Supervisor-Panel habe, denn das gibt's nur, wenn man ein HASS.IO Appliance eingerichtet hat – also den Pi, der nix anderes kann als Home Assistant. Alternativ könne man eine Installation für einen "supervised Home Assistant" durchführen – aha. Docker-Image? Nein das gibt es für diesen Modus nicht. Und die "Supervised" Installation sei auch deprecated. Seht Ihr, was ich meine? Das ist doch total hirnrissig, sich auf die Entwicklung eines Appliance-Systems zu versteifen! Als open-source Projekt! Ich verstehe das ja, wenn man eine Firma ist – dann will man ein simples Gerät bauen und das ist was der User bekomt. Aber warum in aller Welt würde man das so machen, wenn man eine freie Software baut? Es schränkt die Nützlichkeit unnötig ein und führt in diesem Fall zu diversen verschlungenen Installationspfaden, deren Nachhaltigkeit unklar bleibt. Soll ich wirklich diesen "Supervised install" machen, wenn das eh nicht mehr lange unterstützt wird? Was mache ich dann? Umsteigen auf ein neues System? Ich überlege gerade ernsthaft, ob Home Assistant wirklich das richtige System für mich ist. Vielleicht sollte ich doch was anderes nehmen...

IoT