HomeAssistant Temperatur auslesen mit Raspberry Pi und DHT22

Aus LT42-Wiki
Zur Navigation springenZur Suche springen

SmartHome mit HomeAssistant

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 Luftfeuchtigkeitssensor 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