OpenHAB Raspberry Pi und DHT22 Temperatur Sensor

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen
OpenHAB DHT22 HABPanel 1.png

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:

OpenHAB DHT22 Thing 1.png

Die folgendermaßen Konfiguriert sind:

OpenHAB DHT22 Thing 2.png

OpenHAB DHT22 Thing 3.png

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:

OpenHAB DHT22 Items 1.png

die beiden sind so konfiguriert:

OpenHAB DHT22 Items 2.png

OpenHAB DHT22 Items 3.png

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:

OpenHAB DHT22 Items 4.png

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.

OpenHAB DHT22 Group 1.png

OpenHAB DHT22 Group 3.png


OpenHAB DHT22 Group 2.png

OpenHAB DHT22 Group 4.png

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:

OpenHAB DHT22 Grafana 1.png

dann noch ein paar Einstellungen:

OpenHAB DHT22 Grafana 2.png OpenHAB DHT22 Grafana 3.png

und zum Schluss vergeben wir noch einen Namen.

OpenHAB DHT22 Grafana 4.png

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.

OpenHAB DHT22 Grafana 5.png

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

OpenHAB DHT22 Grafana 6.png

HABPanel Einrichtung

Hier richten wir einfach zwei Dummy Widgets ein:

OpenHAB DHT22 HABPanel 2.pngOpenHAB DHT22 HABPanel 3.png

Das Ergebnis sieht dann so aus:

OpenHAB DHT22 HABPanel 1.png

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:

OpenHAB DHT22 Alexa 1.png