Kürzlich habe ich mich mit einem kleinen Bastelprojekt befasst: Erweiterung eines IKEA Vindriktning Luftqualitätssensors mit einem D1 Mini, um die Daten auszulesen und über MQTT an einen Server weiterzuleiten.
Zum Umbau siehe auch das Github-Repository von Sören Beye. Ich nutze allerdings statt dieser Firmware Tasmota anhand dieser Anleitung von Blakadder, was deutlich komfortabler in der Einrichtung und Konfiguration ist. Siehe dazu auch den Tasmotizer bei Github.
Bei der Suche nach einem geeigneten Server bin ich sehr schnell bei Home Assistant gelandet. Das ist eine freie Softwarelösung für die Integration zahlreicher Smart Home-Geräte und kann auch auf einem Raspberry Pi 3 oder 4 eingesetzt werden. In meinem Fall ist das ein Raspberry Pi 4.
Update 2022-08-14: mittlerweile habe ich das noch erweitert um einen weiteren Sensor für CO2, relative Luftfeuchtigkeit und Temperatur, siehe den Artikel dazu hier.
Installation von Home Assistant auf dem Raspberry Pi
Die einfachste Lösung ist die Verwendung des Raspberry Pi Imager. Dort ist das System in der Kategorie „Other specific-purpose OS“ und dann „Home assistants and home automation“ zu finden:
Nachdem eine SD-Karte mit dem System vorbereitet ist, startet man den Raspberry Pi und sollte dann einige Minuten abwarten, bis Home Assistant die erste Einrichtung abgeschlossen hat. Updates auf neuere Versionen können später in Home Assistant selbst durchgeführt werden. Ich bevorzuge für die Verbindung zum Netzwerk eine Kabelverbindung zum LAN, aber es ist prinzipiell auch möglich, nach der ersten Einrichtung eine WLAN-Verbindung zu konfigurieren.
Die gesamte Bedienung erfolgt über die Weboberfläche, die man mit der Adresse http://homeassistant:8123 erreicht (sofern der Router den Hostnamen korrekt auflösen kann, sonst muss man eventuell beim Router nachsehen, welche Adresse per DHCP vergeben wurde). Damit sich die IP-Adresse nicht ändert, muss man im Router eine dauerhafte Adresszuweisung einzurichten. Das ist notwendig, damit man die IP-Adresse für die Übermittlung von Daten über MQTT verwenden kann. Bei Fritz!OS ist das die Option „Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen.“ bei den Eigenschaften des Netzwerkgerätes.
Für MQTT benötigt man einen Broker. Bei Home Assistant kann man dafür dass AddOn „Mosquitto broker“ verwenden. Entgegen mancher Anleitungen zur Einrichtung ist es in der aktuellen Version nicht mehr erforderlich, die Benutzer für MQTT-Geräte anzugeben, dass AddOn kann direkt nach der Einrichtung benutzt werden.
Damit Daten an Home Assistent gesendet werden, muss man noch in Tasmota die IP-Adresse des Servers und den Benutzernamen und Passwort für MQTT angeben. Die Angaben für Port, Client, Topic und Full Topic kann man so belassen, wie sie sind.
Konfiguration von Home Assistant
Für Home Assistant gibt es eine umfangreiche Dokumentation. Ich beschränke mich daher nur auf die für mich wesentlichen Punkte.
Integrationen
Die Basis für jedes Gerät, was in Home Assistant genutzt wird, ist eine „Integration“. In meinem Fall ist das FRITZ!Box 7590 der Mosquitto broker für MQTT und Tasmota, über das die Daten vom Luftqualitätssensor übermittelt werden.
Jede „Integration“ stellt wiederum eines oder mehrere „Geräte“ bereit und in jedem „Gerät“ können mehrere „Entitäten“ vorhanden sein. So bietet etwa eine Schaltsteckdose als Entitäten sowohl Messdaten wie Temperatur und Stromverbrauch wie auch die Schaltfunktion an.
Nach dem Start ermittelt Home Assistant, für welche Geräte eine Integration verfügbar ist und bietet diese zur automatischen Einrichtung an. Es ist aber auch jederzeit möglich, manuell zusätzliche Integrationen hinzuzufügen.
Oberfläche
Die Oberfläche ist aufgeteilt in mehrere Ebenen:
Dashboard – diese sind links in der Seitenleiste aufgelistet. Man kann zusätzlich zu den Standard-Dashboards auch eigene mit frei definierbarem Titel und Symbol hinzufügen. Ich habe mir zwei Dashboards für „Luftqualität“ und „Heizung“ angelegt.
Ansicht – innerhalb eines Dashboards kann man eine oder mehrere Ansichten anlegen, die über die Navigation am oberen Rand gewechselt werden können. Jede Ansicht kann entweder ein einzelnes Element oder mehrere als Raster enthalten.
Für die Darstellung der Luftqualität habe ich mir eine eigene Ansicht eingerichtet, in der die Daten als Diagram dargestellt werden. Dazu habe ich ein „History Graph“-Element eingebunden, was als Datenquelle die Messwerte von Tasmota nutzt und alle fünf Minuten aktualisiert wird:
Einbinden der Fritz!Box 7590
Home Assistant bietet auch eine Integration für die Smart Home-Funktionen von Fritz!OS. Das bedeutet, dass ich sowohl die Heizkörperregler wie auch die Daten der Steckdosen bzgl. Stromverbrauch nutzen kann. Für die Heizkörperregler habe ich mir ebenfalls ein eigenes Dashboard erstellt. Die Energieanzeige ist dagegen fester Bestandteil von Home Assistant.
Aus Sicherheitsgründen ist es empfehlenswert, einen separates Benutzerkonto anzulegen, das nur Zugriff auf die Smart Home-Funktionen hat:
Diese Daten gibt man dann ein, wenn man die Fritz!Box-Integration in Home Assistant aktiviert:
Falls man die Zugangsdaten für die Fritz!Box einmal ändern muss, geht das allerdings nur, indem man die Integration entfernt und direkt danach neu hinzufügt. Vorhandene Geräte und die darüber bereits erfassten Daten werden dabei meiner Erfahrung nach nicht gelöscht.
Sobald die Integration aktiviert ist, kann man alle Smart Home-Geräte von AVM, wie Heizkörper-Regler oder Steckdosen Dashboards integrieren.
Eine kleine Schwäche: wenn man in der Oberfläche Schalter für Steckdosen einbindet, klappt die Umschaltung mit Anklicken zwar gut, aber das Symbol wechselt nach dem Schaltvorgang wieder auf den vorherigen Zustand. Erst nach einiger Zeit wird dann der korrekte Zustand angezeigt. Wenn man nicht so lange warten will, kann man auch vorher nochmal auf das Schaltersymbol klicken. Ich kann nur vermuten, dass die Symboldarstellung erst aktualisiert wird, wenn der aktuellen Status der Steckdose abgefragt wird. In der Praxis ist das für mich aber kein Problem, da ich ohnehin Funktaster zur Bedienung verwende.
Update 2022-08-13
Meine Vermutung, dass die Aktualisierung des aktuellen Schaltzustands bei den AVM DECT-Steckdosen erst nach einer gewissen Pause erfolgt, hat sich bestätigt.
Siehe dazu auch das Issue bei Github: Home Assistant fragt die Daten von der Fritz!Box alle 30 Sekunden ab und die Fritz!Box meldet nicht aktiv Zustandsänderungen. Das bedeutet, dass es nach dem Auslösen einer Schaltaktion, z.B. durch einen DECT-Taster, bis zu 30 Sekunden dauern kann, bis der neue Schaltzustand bekannt ist. Bei Aktionen innerhalb von Home Assistant sollte der neue Zustand ohne Verzögerung ermittelt werden, allerdings klappt das aktuell auch nicht.
Zugriff von außen
Wenn man auf Home Assistant auch von außerhalb des eigenen Netzwerks zugreifen möchte, gibt es abhängig vom eigenen Router mehrere Optionen. Die einfachste Variante ist die Home Assistant Cloud, die allerdings nicht kostenlos ist – aktuell 7,50 EUR monatlich oder 75 EUR im Jahresabo.
Die andere Lösung ist, es DynDNS zu verwenden – also eine Domain, deren IP-Adresse automatisch aktualisiert wird, sobald der Router online ist. Fritz!OS unterstützt von Haus aus mehrere Anbieter dafür:
Ist der Zugang zum LAN über eine eigene Domain grundsätzlich möglich, kann man für den Zugang zu Home Assistant eine Portweiterleitung im Router für HTTP und HTTPS einrichten. Dazu muss die Verwendung von HTTPS im Home Assistant in Kombination mit Let’s Encrypt konfiguriert werden, was als AddOn installiert werden kann.
Alternativ zum direkten Zugang wäre bei der Fritz!Box auch eine VPN-Verbindung möglich, wahlweise auf dem Endgerät, wie z.B. Android, oder über einen Server, der selber die VPN-Verbindung herstellt und dann als Proxy für Home Assistant arbeitet. Dies Lösung habe ich umgesetzt, da der Server ohne für verschiedene andere Dienste genutzt wird. Als Proxy nutze ich Apache und erreiche dann über eine öffentlich zugängliche URL über HTTPS den Server mit Home Assistant.
Für die VPN-Anbindung eines Linux-Servers mit Strongswan zur Fritz!Box siehe auch folgende Anleitung: FritzBox LAN 2 LAN VPN with StrongSwan. Im Wesentlichen legt man eine Konfigurationsdatei an, die man in der Fritz!Box importiert und eine dazu passende Konfiguration für Strongswan.
Die relevante Konfiguration für den Proxy in Apache ist wie folgt:
ProxyPreserveHost on ProxyRequests off ProxyPass /api/websocket ws://192.168.1.5:8123/api/websocket ProxyPassReverse /api/websocket ws://192.168.1.5:8123/api/websocket ProxyPass / http://192.168.1.5:8123/ ProxyPassReverse / http://192.168.1.5:8123/ RewriteEngine on RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://192.168.1.5:8123/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://192.168.1.5:8123/$1 [P,L]
Die IP-Adresse 192.168.1.5 ist nur ein Beispiel und muss durch die korrekte Adresse von Home Assistant ersetzt werden.
Damit Home Assistant solche Zugriffe auch erlaubt, muss man in /config/configuration.yaml
folgende Einträge ergänzen (zur Bearbeitung der Konfiguration siehe auch „Advanced configuration“ in der Dokumentation von Home Assistant):
http: use_x_forwarded_for: true trusted_proxies: - 192.168.50.1
Statt der Adresse 192.168.50.1 ist die Adresse anzugeben, mit der sich der Proxy verbindet. Wenn die Adresse nicht korrekt ist, verweigert Home Assistant den Zugriff mit HTTP-Fehler 400.
Ein Vorteil der Lösung mit Proxy-Server ist, dass die URL, über die Home Assistant erreichbar ist, unabhängig davon ist, ob man sich gerade im LAN befindet oder nicht, so dass man in der App keine lokale URL konfigurieren muss.
Home Assistant App
Die Weboberfläche von Home Assistant ist responsiv und auch mit mobilen Browsern nutzbar. Daher ist eine App nicht zwingend notwendig. Dennoch ergeben sich mit der App einige Vorteile – hier bezogen auf Android:
- Das Gerät meldet auf Wunsch auch seinen Standort an Home Assistant – diese Information kann zur Automatisierung verwendet werden.
- Man kann NFC-Tags benutzen, um Aktionen in Home Assistant auszulösen.
- Elemente von Home Assistant können als Widgets auf den Startbildschirm gelegt werden.
Ein Hinweis zur Darstellung:
Die Einstellung „System-Einstellung“ für das Theme der App wirkt sich leider nicht auf die Oberfläche von Home Assistant aus, sondern nur auf die Elemente, die von der App selbst erzeugt werden. Wenn man einen automatischen Wechsel zwischen der normalen Darstellung und „dunkel“ haben möchte, wenn man das Gerät entsprechend umstellt, sollte man im Profil in Home Assistant das Theme „automatisch“ verwenden und die App so einstellen, dass sie das Theme von Home Assistant übernimmt.