In diesem Projekt erweitern wir den vorhandenen Raspberry Pi mit dem DHT-Temperatur- und Feuchtigkeitssensor, dahingehend, dass er die Messwerte regelmäßig an einen MQTT Broker sendet. Dadurch können Anwendungen wie Home Assistant die Daten abonnieren und importieren.
Voraussetzungen
Hardware
- Ein Raspberry Pi (beliebiges Modell) mit z. B. Raspberry OS auf der SD-Karte
- Ein DHT11- oder DHT22-Sensor
- Einige Verbindungskabel
- Ein 5-10 kOhm Widerstand
- Ein Server mit einem laufenden MQTT-Broker
Software
Folgende Software muss am Raspberry Pi vorab installiert werden:
sudo apt install build-essential python-dev python3-pip
sudo pip3 install Adafruit_Python_DHT paho.mqtt
Grundsätzliche Einrichtung
Falls der DHT Sensor bisher noch nicht mit dem Raspberry Pi verbunden ist, empfehle ich, zuvor den ersten Teil zu lesen.
Repository klonen
Softwaremässig ist es super einfach, man muss nur noch mein GIT Repository klonen und kann damit sofort los legen.
git clone git@bitbucket.org:manuelmanhartit/raspi-temp-and-humidity.git
Skript konfigurieren
Kopieren Sie eine der Beispiel-Konfigurationsdateien (z. B. example-mqtt-config.json
) und passen Sie diese nach Bedarf an. Speichern Sie die Datei als config.json
oder {HOSTNAME}-config.json
.
Verfügbare Beispiele:
example-local-config.json
: Gibt die Ergebnisse im JSON-Format auf der Kommandozeile aus.example-mqtt-config.json
: Gibt die Ergebnisse im JSON-Format aus und sendet sie an einen MQTT-Broker. MQTT ist ein leichtgewichtiges Protokoll, das oft in IoT-Projekten verwendet wird.
Wir nehmen hier das mqtt file, und passen die IP Adresse, den Port und das Thema an. Das Thema ist am Ende wichtig, wenn wir die Daten automatisch in den Homeassisstant importieren wollen.
Skript testen
Nun führen wir das Skript aus, um die Funktion zu überprüfen:
python3 read-DHT22-and-send-to-mqtt.py
Das Skript liest die Konfigurationsdatei und liest einmalig den Sensor aus, und sendet an den MQTT Broker.
Automatischen Betrieb einrichten
Um das Skript regelmäßig auszuführen, fügen wir folgenden Befehl aus um einen Eintrag zur Crontab zu erstellen:
crontab -e
Nun wird folgende Zeile hinzugefügt um die Temperatur alle 10 Minuten zu übertragen (username mit dem echten Usernamen ersetzen):
*/10 * * * * python3 /home/username/read-dht-send-mqtt.py
Speichern Sie die Datei mit CTRL + X, Y und ENTER. Das Skript wird nun alle 10 Minuten ausgeführt und sendet die Messwerte an den MQTT-Broker.
Zusätzliche Tipps
Verbindungsleitungen erstellen
Wenn Sie mehrere Sensoren in Ihrem Zuhause verwenden möchten, kann eine ordentliche und austauschbare Verkabelung hilfreich sein. Ich habe dafür Verbindungskabel gelötet, welche ich einerseits am Raspberry Pi an den PINs anschliesse und auf der anderen Seite einfach den DHT Sensor einstecke (Bilder folgen).
Konfigurationsdatei sichern
Sichern Sie Ihre Konfigurationsdatei an einem sicheren Ort, um eine erneute Einrichtung zu beschleunigen.
Einrichtung im Homeassistant
Nun steigen wir in den Homeassistant Server ein, gehen auf Einstellungen und dann auf Integrationen.
Dort gehen wir auf MQTT bzw. falls dieses noch nicht existiert fügen wir es zunächst über den “Integration hinzufügen” Button hinzu.
Dann auf Konfigurieren, und das Thema abonnieren, welches wir zuvor im Konfigurations Script hinterlegt haben.
Danach sollten die Entitäten verfügbar und in der Sensor Card verwendbar sein.
Ich habe alles gerne in Konfigurationsdateien abgelegt und daher editiere ich immer die sensor.yaml Datei im Homeassistant config Verzeichnis.
Ein Block sieht wie folgt aus:
- platform: mqtt
name: "Wohnzimmer Temperatur"
state_topic: "home/wohnzimmer"
unit_of_measurement: '°C'
value_template: "{{ value_json.temperature }}"
- platform: mqtt
name: "Wohnzimmer Luftfeuchte"
state_topic: "home/wohnzimmer"
unit_of_measurement: '%'
value_template: "{{ value_json.humidity }}"
scan_interval: 60
Damit ist sind die Entitäten nach einem Neuladen der Konfiguration im Homeassistant verfügbar.
Fazit
Nun erhalten wir immer die aktuellen Temperatur- und Luftfeuchte Werte und können auf Basis derer Automatisierungen starten.