HomeAssistant 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 Tyzbit-Blog eine Integration des DHT22 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 Raspberry 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 Pins 4 für VCC, 6 für GND 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