ACHTUNG: Dieser Beitrag ist veraltet! Die hier beschriebene Variante funktioniert bei längeren Zuleitungen zum Sensor nicht zuverlässig. Hierzu habe ich mir eine neue Variante entwickelt und einen neuen Blogbeitrag dazu verfasst! Hier gehts zum neuen Beitrag
Mit einigen einfachen Schritten ist es möglich mit dem Raspberry als OpenHab Zentrale die Temperatur und Luftfeuchtigkeit darzustellen.
Zuerst benötigt man jedoch ein paar Voraussetzungen:
- eine funktionierende OpenHab Installation auf einem Raspberry
- das Exec- und Regex-Binding sollte schon installiert sein
- DHT22 oder DHT11 Sensor vorhanden
Für dieses Tutorial werden einige grundlegende Begrifflichkeiten von OpenHab vorausgesetzt. Kennst du diese nicht, lese dir zuerst diesen Beitrag durch. Darin werden die nötigsten Begriffe erklärt.
Sensor anschließen & Technische Daten
Du beginnst damit, indem du deinen Raspberry herunter fährst und den Sensor anschließt. Je nach Raspberry Modell, ist die Belegung der PINs etwas anders. Daher solltest du dir die Belegung der PINs für dein Modell via Google suchen.
Die DHT22 und DHT11 Sensoren werden zwar gleich angeschlossen, jedoch sind erfahrungsgemäß die DHT22 Sensoren etwas präziser und zuverlässiger.
Um diese anschließen zu können benötigen wir folgende PINs am Raspberry:
- 3,3 Volt Versorgungsspannung
- GND als Masse
- einen freien GPIO Eingang zum Auslesen der Werte
Die Sensoren können schon mit dem nötigen Pull-Up Widerstand auf einer kleinen Platine gekauft werden. Ich habe meine über Amazon bezogen.
Wenn du die fertigen Platinen nicht möchtest, kannst du den Sensor auch direkt anschließen. Bei dieser Variante muss ein Pull-Up Widerstand zwischen dem Daten-Anschluss und der Versorgungsspannung eingebaut werden. Ein 10k Ohm eignet sich hierfür perfekt.
Betriebsdaten DHT22 Sensor (Datenblatt):
- Versorgungsspannung von 3,3 Volt bis 5,5 Volt
- Messbare Temperatur -40 Grad bis 80 Grad Celsius (Toleranz 0,5 Grad Celsius)
- Messbare Luftfeuchtigkeit 0% bis 100% (Toleranz +-2%)
- Kommunikationssignal via 1-Wire Bus
- Auflösung 0,1% und 0,1 Grad Celsius
Betriebsdaten DHT11 Sensor (Datenblatt):
- Versorgungsspannung von 3,3 Volt bis 5,5 Volt
- Messbare Temperatur 0 Grad bis 50 Grad Celsius (Toleranz 2 Grad Celsius)
- Messbare Luftfeuchtigkeit 20% bis 90% (Toleranz +-5%)
- Kommunikationssignal via 1-Wire Bus
- Auflösung 1% und 1 Grad Celsius
Wie du siehst, ist der DHT22 Sensor wesentlich genauer und bietet ein breiteres Messspektrum. Desweiteren ist die preisliche Differenz minimal, weswegen ich ausschließlich zu den DHT22 gegriffen habe.
Vorbereiten des Raspberrys
Hast du den Sensor angeschlossen, notiere dir welchen GPIO du verwendet hast. Diesen benötigst du später im Python-Programm um mit dem Sensor zu sprechen.
Du kannst nun deinen Raspberry wieder mit der Stromversorgung verbinden und ihn hochfahren lassen.
Jetzt loggst du dich über SSH ein um die nötigen Softwarepakete zu installieren.
Als Erstes führe ich immer einen Updatebefehl aus um die bestehenden Pakete zu aktualisieren:
sudo apt-get update && sudo apt-get upgrade
Ist dieser Befehl durchlaufen, beginnen wir mit der Installation der neuen Pakete:
sudo apt-get install build-essential python-dev python-openssl git
Nach erfolgreicher Installation kann die DHT-Bibliothek heruntergeladen und installiert werden:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
Python bindet mit diesem Befehl die Bibliothek ein, damit du diese dann im Programmcode verwenden kannst.
Wenn du magst, kannst du jetzt deinen Sensor prüfen. Wechsle dazu in den Ordner „examples„, dort liegen Testprogramme bereit. Die Zahlen beim Ausführen des Scripts müssen an deine Bedürfnisse angepasst werden. Die erste Zahl beschreibt den Sensortyp (11 für DHT11 und 22 für DHT22), die zweite Zahl spricht den GPIO an, der mit deinem Sensor verbunden ist. Hier nun ein Beispiel:
cd examples
sudo ./AdafruitDHT.py 22 4
Achtung: immer die GPIO Nummer und nicht die PIN-Nummer verwenden
Hat alles funktioniert bekommst du eine Rückmeldung vom Script mit den aktuellen Werten am Sensor. Die Sensoren sind etwas Träge, daher sollte eine Abfrage der aktuellen Werte nicht öfter als alle 3 Sekunden erfolgen. In meiner Installation habe ich diese Abfrage sogar auf 60 Sekunden erhöht, weitere Informationen dazu folgen im nächsten Kapitel.
OpenHab Einrichtung
Nun ist alles vorbereitet und du kannst mit der Einrichtung der Sensoren im OpenHab starten. Wechsel mit deinem Explorer oder FTP-Programm (ich nutze WinSCP) in den Ordner „/etc/openhab2/scripts/„. Hier legst du eine Datei mit einem dir beliebigen Namen und der Endung „.py“ an. Für die Übersichtlichkeit habe ich diese Datei nach dem jeweiligen Sensor benannt, also „wohnzimmer.py„.
In dieser Datei kannst du folgenden Programmcode einfügen:
import Adafruit_DHT
import sys, time
DHT_PIN = 4 #GPIO Nummer hier eintragen
DHT_SENSOR = Adafruit_DHT.DHT22
if __name__ == '__main__':
if len(sys.argv) > 1:
call = sys.argv[1].lower()
if call == 'temperature':
temperature = None
while temperature == None:
_, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if temperature == None:
time.sleep(1.5)
print(temperature)
elif call == 'humidity':
humidity = None
while humidity == None:
humidity, _ = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity == None:
time.sleep(1.5)
print(humidity)
Wie du dem Code entnehmen kannst, wird diese Datei mit dem Befehl „temperature“ oder „humidity“ aufgerufen, um die entsprechenden Messwerte auszuspucken.
Things anlegen
Wechsel jetzt in den Ordner „/etc/openhab2/things/„, denn für das Exec-Binding muss jedes Programm als „Thing“ angelegt sein. Du erstellst also eine Datei mit „exec.things„. In diese fügst du folgenden Parametersätze ein:
Thing exec:command:wohnzimmer_temperature "Wohnzimmer - Temperatur" @ "Wohnzimmer" [command="/etc/openhab2/scripts/wohnzimmer.py temperature", transform="REGEX((.*?))", interval=60, timeout=10, autorun=true]
Thing exec:command:wohnzimmer_temperature "Wohnzimmer - Temperatur" @ "Wohnzimmer" [command="/etc/openhab2/scripts/wohnzimmer.py temperature", transform="REGEX((.*?))", interval=60, timeout=10, autorun=true]
Damit beschreibst du welche Datei ausgeführt werden soll, mit welchem Namen diese im OpenHab aufgerufen wird und den Intervall. Außerdem wird ein Name für den Gegenstand festgelegt und ein Raum angegeben. Die Angabe des Raums ist nicht zwingend notwendig, sondern hilft bei der Übersichtlichkeit. Solltest du keinen Raum festlegen wollen, lasse einfach „ @ „Wohnzimmer““ weg.
Wie du siehst verwende ich als Intervall 60 Sekunden. Die DHT-Sensoren benötigen immer etwas Zeit um ihre Werte zu liefern, daher sollte man genügend Abstand lassen bis eine neue Abfrage erfolgt.
Ich benutze die Sensoren zur Überwachung der Raumtemperatur und Luftfeuchtigkeit im Haus. Durch die Fußbodenheizung und die Lüftungsanlage ergibt sich eine gewisse Trägheit, wodurch eine Taktung von 60 Sekunden für mich völlig ausreichend ist.
Items anlegen
Jetzt werden noch die Items angelegt, gehe dazu in den Ordner „/etc/openhab2/items/“ und erstelle eine Items-Datei, beispiel „raumklima.items„. Diese öffnest du nun und fügst dort deine Sensoren als Item ein. Das benötigst du um sie im HabPanel darstellen oder auch als Graph aufzeichnen zu können.
Ein Beispiel wie diese Items aussehen können:
Group Klima_Wohnzimmer_Diagramm (System, Charts)
Number Wohnzimmer_Temperature "Temperatur [%.1f C]" <temperature> (Klima_Wohnzimmer_Diagramm) { channel="exec:command:wohnzimmer_temperature:output" }
Number Wohnzimmer_Humidity "Luftfeuchtigkeit [%.1f %%]" <humidity> (Klima_Wohnzimmer_Diagramm) { channel="exec:command:wohnzimmer_humidity:output" }
Ich habe hier bereits eine Gruppe erstellt, welche immer einen Raum erfasst. Damit kann ich dann ganz einfach über das Persistence-System die Werte in eine Datenbank schreiben. Dies ist notwendig, wenn du einen Graph im HabPanel erstellen möchtest.
HabPanel Visualisierung
Wähle nun die Seite des HabPanels, auf welcher die Sensorwerte zu sehen sein sollen.
Wechsel in den Bearbeitungsmodus, füge eine „Dummy“-Fläche ein und bearbeite diese.
Als Name kannst du den Namen und Standort deines Sensors eingeben, dies hilft dir bei mehreren Sensoren die Übersicht zu bewahren. Im Item wählst du eines der Items die du erstellt hast. Nun noch einen Hacken bei „Nutze Serverseitig vorhandenes Format falls vorhanden“ setzen. Da wir in der Itemkonfiguration angegeben haben um welchen Wert es sich hier handelt, wandelt das System die Variable gleich in das entsprechende Format um.
Wenn du magst, kannst du nun noch ein Hintergrundsymbol einfügen. Das lockert die Optik ein wenig auf und wirkt finde ich etwas stimmiger.
Speicher deine Einstellungen ab, starte das Panel wieder und schon bekommst du deine Sensorwerte angezeigt.
Schlusswort
Ich hoffe ich konnte dir mit dieser Anleitung etwas weiterhelfen und dir die Einrichtung von DHT-Sensoren auf dem Raspberry erleichtern. Wie du siehst ist es eigentlich ganz einfach und mit wenigen Schritten erledigt. Solltest du Fragen haben, so kannst du diese gerne im Forum oder den Kommentaren los werden.