OpenHAB Raspberry Pi und DHT22 Temperatur Sensor

Aus Laub-Home Wiki

Ich dachte mir, da mein Raspberry Pi mit openHAB als Smart Home Schaltzentrale im Wohnzimmer steht, dann kann ich diesen auch mit einem Temperatur (inkl. Luftfeuchtigkeitssensor) ausstatten und die zwei ausgelesenen Werte in openHAB verwenden. Via HABPanel kann man diese dann auch anzeigen und Per Grafana in die normale Temperatur Anzeige mit aufnehmen oder eine eigene Grafik erstellen. Als Sensor habe ich mich für den oft verwendeten DHT22 entschieden. Wie man diesen Anschließt und ausliest habe ich hier bereits beschrieben:

Mein Grundsetup findet ihr hier, ist aber im Prinzip ein Raspberry Pi 4 mit einer Docker openHAB Installation mit InfluxDB und Grafana:

Sensor auslesen

Basierend auf diesem Setup habe ich nun ein kleines Shellscript geschrieben, welches mir via Adafruit Python Script die Werte ausliest und in eine Datei schreibt, die von openHAB gelesen werden kann.

Via Github verfügbar:

/usr/local/sbin/tempsensor2file.sh

#!/usr/bin/env bash
#########################################################################
#Name: tempsensor2file.sh 
#Subscription: This Script writes just the Adafruit Output to a txt file 
#to a backup directory
##by A. Laub
#andreas[-at-]laub-home.de
#
#License:
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License as published by the
#Free Software Foundation, either version 3 of the License, or (at your option)
#any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#or FITNESS FOR A PARTICULAR PURPOSE.
#########################################################################
#Set the language
export LANG="en_US.UTF-8"
#Load the Pathes
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# set the variables
# where to log data
DATAFILE=/opt/openHAB/data/openhab/conf/scripts/tempsensor.txt

# read Temp with Adafruit
VALUE=$(/opt/Adafruit_Python_DHT/examples/AdafruitDHT.py 22 2)

if [ -z "$VALUE" ]; then
    echo "Value is empty"
else
    echo $VALUE > $DATAFILE
fi

Ändert hier bitte den Ort des DATAFILE entsprechend eurer Umgebung. Auch falls euer Adafruit Script an einem anderen Ort liegt. nun geben wir diesem noch das execute Recht:

chmod +x /usr/local/sbin/tempsensor2file.sh

Das Script lassen wir nun via cronjob alle Minute ausführen:
/etc/cron.d/tempsensor2file

# writes output of DHT22 Sensor to a file which could be parsed by openHAB Exec Binding
* * * * * root /usr/local/sbin/tempsensor2file.sh

Daten in openHAB einlesen

Zunächst müssen wir hierfür das Exec Binding installieren.

Dann brauchen wir die beiden folgenden Things:

Die folgendermaßen Konfiguriert sind:

Die beiden Things unterscheiden sich in der Transformation. Ihr könnt auch einen kleineren Intervall eingeben, dieser bringt allerdings nur etwas > 60s, da unser cronjob immer zur vollen Minute läuft. Ich habe es hier auf 3 Minuten stehen, was vollkommen ausreichend ist.

Die Transformationen sind hier copy and paste bar:

Luftfeuchtigkeit:
REGEX(.*Humidity=(\d*.\d*).*)

Temperatur:
REGEX(Temp=(\d*.\d*).*)

Nachdem nun die Things eingerichtet sind kommen wir zu den Items, die wir als String Ausgabe einrichten:

die beiden sind so konfiguriert:

Falls ihr euch nun fragt wieso eine Gruppe hier hinterlegt ist, dazu komme ich später. Fakt ist ersteinmal, sind die beiden Items angelegt, sieht man diese inkl. Werte in PaperUI Control:

Die Werte sind wie ihr sehen könnt ein String und haben keine Dimension. Können aber dennoch direkt in openHAB verwendet werden. Grafana und InfluxDB arbeiten hier ein wenig anders und erwarten eine Number Ausgabe. Ich habe mir deshalb mittels zweier Gruppen beholfen, in die ich das jeweilige Item eingefügt habe.


nun haben wir die Möglichkleit in Grafana eine Grafik mit diesen Werten zu erstellen.

Aber bevor das alles funktioniert müssen wir erst unseren Befehl, den wir zum Auslesen der SensorDatei verwenden in openHAB erlauben:

/opt/openHAB/data/openhab/conf/misc/exec.whitelist

cat /openhab/conf/scripts/tempsensor.txt

Grafik mit Grafana

die beiden angelegten Gruppen speichern nun die Werte richtig in der InfluxDB und können eingebunden werden. Dafür einfach ein neues Dashboard erstellen und die folgenden Queries nutzen:

dann noch ein paar Einstellungen:

und zum Schluss vergeben wir noch einen Namen.

Nun sagen wir noch dass die Luftfeuchtigkeit auf die Y Achse gehört, dafür klicken wir einfach in der Grafiklegende auf die Farbe vor dem Label.

Wenn dann alles geklappt hat und bereits ein paar Daten drin sind, sieht das Ergebnis so aus:

HABPanel Einrichtung

Hier richten wir einfach zwei Dummy Widgets ein:

Das Ergebnis sieht dann so aus:

Alexa - Wie ist die Temperatur im Wohnzimmer?

Möchte man d ie Temperatur via Amazon Echo, Alexa ausgeben, so muss man das Item noch mit den richtigen metadata versorgen. Dafür gehen wir in die REST API UI und suchen uns den PUT Request für Item Metadata. Dort fügen wir unseren Itemnamen ein, bei Namespace kommt alexa rein und dann beim body, value CurrentTemperature. dann mit Try it out! abschießen und in der Amazon Alexa Mobile App nach neuen Geräten suchen. Mehr Details zum Einrichten von Items für Amazon Alexa findet ihr hier: