SmartHome mit HomeAssistant
Die neue Wohnung soll in einigen Teilen smart sein. Im ersten Schritt wollen wir hierbei die Lichtsteuerung über das Smartphone und ausgewählte Schalter vornehmen. Dabei kommen unterschiedliche Systeme (Fritz!, IKEA TRADFRI, Funksteckdosen) zum Einsatz. Ziel ist es also, ein System zu finden, das alle Systeme ansteuern kann.
Mit einem Tipp von Sven Koch bin ich hierbei auf HomeAssistant gestoßen, das additiv an bestehende Systeme angeschlossen werden kann. Die folgenden Artikel sollen die Einrichtung und einige Anwendungsfälle dokumentieren. Dieser Artikel entsteht, während das System schon läuft. Die Grundeinrichtung erfolgte über die [[1]] via KVM in einer virtuellen Maschine auf meinem PVE.
Wir hatten zunächst auch die Heizungssteuerung der Fritz!SmartHome-Komponenten über HomeAssistant vorgenommen. Da mir nicht ganz klar war, welches System nun welches inwieweit steuert, da die Fritz!Box selbst zu festgelegten Zeiten in verschiedene Temperatur-Szenen fährt, haben wir die Integration wieder zurückgebaut.
Temperatur auslesen mit Raspberry Pi und DHT22
Für die Feststellung der Luftfeuchtigkeit und Temperatur an verschiedensten Stellen kamen bisher die Fernbedienungen von Fritz! zum Einsatz. Da wir nach und nach komplett auf andere Systeme migrieren, ist das eine zeitnah abzulösende Option. Spannend ist nach Anleitung im [[2]] eine Integration des [[3]] als Temperatur- und Wärmesensor auf Raspberry Pi per MQTT am HomeAssistant.
Einbindung von Mosquitto in HomeAssistant
Wir nutzen HomeAssistant als MQTT-Broker, sodass hier nicht zusätzlich ein Server für laufen muss. Dies ist über das Add-On "Mosquitto Broker" möglich, das über den Add-On Store direkt in Home Assistant installiert werden kann. Nach einem Klick auf "Install" wird das Add-On installiert und kann konfiguriert werden. Da wir die Verbindungen absichern wollen und hierfür nicht den Standard-Nutzer von HomeAssistant nutzen, muss ein dedizierter Account erstellt werden. Hierfür zunächst die erweiterte Ansicht im eigenen Nutzerprofil durch Klick auf den Namen > "Erweiterter Modus" aktivieren.
Anschließend über Einstellungen > Personen > Tab: Benutzer einen Benutzer "mqttio" mit dazugehörigem Passwort erstellen. Der Nutzer benötigt keine weiteren Rechte. Das Passwort wird dann auf allen einliefernden Clients eingetragen. Prinzipiell kann für jeden Client ein eigener Account erstellt werden. Dies ist in größeren Installation dann empfehlenswert, wenn nicht sichergestellt werden kann, dass die Geräte nicht aus der eigenen Hand geraten und schlecht durch Fremdzugriff geschützt sind. Für den Heimgebrauch reicht mir ein Account aus.
Die Konfiguration des Addons erfolgt dann über Einstellungen > Add-Ons > Mosquitto Broker > Tab: Konfiguration. Hier ist unter "Logins" zunächst der eben erstellte Account zu hinterlegen:
- username: mqttio password: PASSWORD
Weitere Einstellungen erfolgen in der Integration, die über Einstellungen > Geräte und Dienste schon möglich sein sollte. Hier zunächst über das Zahnrad neben "MQTT" in die Konfiguration wechseln und anschließend die Entität core-mosquitto konfigurieren -> "MQTT neu konfigurieren" -> den Dialog mit den Zugangsdaten weiterklicken. Da die automatische Konfiguration bei mir sowieso nicht korrekt funktioniert hat, habe ich sie hier deaktiviert.
Installation des RPi
Zunächst ist auf dem Raspberry Pi die Installation von [Pi OS] nötig. Eine gute Anleitung dafür findet sich auf der Herstellerseite. Nach Abschluss der Installation und Erstkonfiguration ist über ein Terminal mittels
sudo raspi-config
unter "Interface Options" -> "SSH" der SSH-Server zu aktivieren, sodass ein Fernzugriff möglich ist.
Die IP-Adresse des Pis kann entweder mittels "ip a" im Terminal oder über den netzinternen DHCP-Server ausgelesen werden.
Anschließend muss der Pi ausgeschaltet und der Sensor verbunden werden. Ich nutze für den Anschluss die [[4]] 4 für VCC, 6 für GRD und 12 (GPIO 18) für Data/OUT. Nach dem Verbinden kann der Pi wieder gestartet werden.
Konfiguration des RPi
Auf dem Pi soll ein MQTT-Publisher installiert werden, der in konfigurierbaren Abständen die Temperatur und den Luftfeuchtigkeitswert an HomeAssistant übermittelt. Dafür ist Python in der Version >=3.6 nötig. Hierfür steht dann über Pip der mqtt-io zur Verfügung.
sudo pip3 install mqtt-io
Diese Konfiguration installiert mqtt-io global, Tyzbit.blog stellt noch eine Lösung in einem Virtual Python Environment vor.
Für den Betrieb von mqtt-io ist dann eine Konfiguration nötig, die unter /etc/mqtt-io.yaml Platz findet:
mqtt:
host: 192.168.178.10 # IP der HomeAssistant-Instanz
topic_prefix: wz/raspberrypi # Zu veröffentlichendes Topic (dies sollte eine Struktur folgen, zB Raum / Gerät)
status_payload_running: available
status_payload_stopped: unavailable
status_payload_dead: unavailable
user: USER # oben angelegter Account für mqtt
password: PASSWORD # Passwort des Accounts
sensor_modules:
- name: dht22_sensor
module: dht22
type: dht22
pin: 18 # ggf. anzupassen, falls anderer GPIO-Pin verwendet (GPIO ID, nicht Index des Pins(!), siehe Link oben)
sensor_inputs:
- name: wz_temperature # Name, ggf. anzupassen
module: dht22_sensor
digits: 2 # Nachkommastellen
interval: 5 # Interval der Veröffentlichung in Sekunden
type: temperature
- name: wz_humidity
module: dht22_sensor
digits: 2
interval: 5
type: humidity
Ein Test ist dann mittels
python3.9 -m mqtt_io /etc/mqtt-io.yaml
möglich. Hierbei sollte der Pi bereits Daten an HomeAssistant übertragen sowie die veröffentlichten Werte auf der Konsole ausgeben:
Jun 27 18:39:25 HOSTNAME python3[1706]: 2023-06-27 18:39:25 mqtt_io.server [INFO] Read sensor 'wz_humidity' value of 43.9 Jun 27 18:39:29 HOSTNAME python3[1706]: 2023-06-27 18:39:29 mqtt_io.server [INFO] Read sensor 'wz_temperature' value of 22.9
Ist das erfolgreich, kann ein Systemd-Service definiert werden, der die MQTT-Instanz automatisch startet, sodass das System automatisch Werte an HomeAssistant übermittelt. Unter /etc/systemd/system/mqttio.service ist folgender Inhalt zu hinterlegen:
[Unit]
Description=MQTT-IO
After=network.target
Wants=network-online.target
[Service]
Restart=always
Type=simple
ExecStart=/usr/bin/python3 -m mqtt_io /etc/mqtt-io.yaml
User=root
Environment=
[Install]
WantedBy=multi-user.target
Anschließend muss systemd über die Änderungen informiert werden:
sudo systemctl daemon-reload sudo systemctl enable mqttio sudo systemctl start mqttio
Verläuft das erfolgreich, ist der Status des Services mittels
sudo systemctl status mqttio
abrufbar.
Über journald kann zudem die aktuelle Übertragung angeschaut werden:
journalctl -t python3 -f
Integration in HomeAssistant
Sobald der Pi Daten veröffentlicht, können diese auch in HomeAssistant abgefragt werden. Dazu muss zunächst der Sensor konfiguriert werden. Über den Add-On Store kann das Add-On "File Editor" installiert werden, das eine direkte Bearbeitung der Konfigurationsdateien im Browser möglich macht. Nach der Installation ist das Add-on links in der Sidebar aufrufbar. Über den Ordner kann die configuration.yaml aufgerufen werden. Hier sind folgende Zeilen einzufügen:
mqtt:
sensor:
- name: "WZ Temperature"
unique_id: 5ae12d30-c4a7-44b5-8868-785ba3ec527c # this can be anything unique
state_topic: "wz/raspberrypi/sensor/wz_temperature" # ggf. anzupassen!
unit_of_measurement: "°C"
- name: "WZ Humidity"
unique_id: 0134ce78-6374-49a0-9114-7b2af2fb7cac # muss eindeutig sein (zB über uuidgen)
state_topic: "wz/raspberrypi/sensor/wz_humidity" # ggf. anzupassen!
unit_of_measurement: "%"
Anschließend die Datei speichern und über das Zahnrad oben rechts HomeAssistant neu starten. Ist das erfolgt, kann der Sensor im Dashboard angezeigt und in Automationen genutzt werden.
Weblinks
https://tyzbit.blog/connecting-a-dht-22-sensor-to-home-assistant - Originale Dokumentation
https://smarthomeyourself.de/wiki/homeassistant/home-assistant-fehler-deine-manuell-konfigurierten-mqtt-sensoren-erfordert-aufmerksamkeit/ Beschreibung der neuen Sensor-Konfiguration
https://github.com/flyte/mqtt-io/wiki/MQTT-Configuration MQTT-Konfigurationsparameter