OpenHAB Raspberry Pi und BH1750 Helligkeits Sensor
Ich dachte mir, da mein Raspberry Pi mit openHAB als Smart Home Schaltzentrale im Wohnzimmer steht, dann kann ich diesen auch mit einem Helligkeitssensor ausstatten und den ausgelesenen Wert in openHAB verwenden. Via HABPanel kann man diesen dann auch anzeigen und per Grafana als Grafik ausgeben. Als Sensor habe ich mich für den oft verwendeten BH1750 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 bh1750.py Python Script die Werte ausliest und in eine Datei schreibt, die von openHAB gelesen werden kann.
Via Github verfügbar:
/usr/local/sbin/lightsensor2file.sh
#!/usr/bin/env bash
#########################################################################
#Name: lightsensor2file.sh
#Subscription: This Script writes just the bh1750.py 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/lightsensor.txt
# read lightsensor
VALUE=$(/usr/local/sbin/bh1750.py)
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/lightsensor2file.sh
Das Script lassen wir nun via cronjob alle Minute ausführen:
/etc/cron.d/lightsensor2file
# writes output of BH1750 Sensor to a file which could be parsed by openHAB Exec Binding * * * * * root /usr/local/sbin/lightsensor2file.sh
Daten in openHAB einlesen
Zunächst müssen wir hierfür das Exec Binding installieren.
Damit 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/lightsensor.txt
Nun legen wir das Thing für den Lichtsensor an:
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 Transformation ist hier copy and paste bar:
REGEX((.*) lux)
In der Things Übersicht sollte es dann so aussehen:
Nachdem nun das Thing eingerichtet ist kommen wir zum Item, das wir als String Ausgabe einrichten werden:
Falls ihr euch nun fragt wieso hier eine Gruppe hinterlegt ist, dazu komme ich später. Fakt ist ersteinmal, das Item ist angelegt und man sieht den Wert in PaperUI Control:
Der Wert ist wie ihr sehen könnt ein String und hat somit keine Dimension. Kann aber dennoch direkt in openHAB verwendet werden. Grafana und InfluxDB arbeiten hier ein wenig anders und erwarten eine Number Ausgabe. Ich habe mir deshalb mittel einer Gruppe 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.
Grafik mit Grafana
die angelegte Gruppe speichert nun die Werte richtig in der InfluxDB und kann in Grafana als Panel eingebunden werden. Dafür einfach ein neues Panel einem Dashboard hinzufügen und die folgenden Queries nutzen:
dann noch ein paar Einstellungen:
und zum Schluss vergeben wir noch einen Namen.
Wenn dann alles geklappt hat und bereits ein paar Daten drin sind, sieht das Ergebnis so aus:
HABPanel Einrichtung
Hier richten wir einfach ein Dummy Widget ein:
Das Ergebnis sieht dann so aus: