OpenHAB Raspberry Pi und BH1750 Helligkeits Sensor

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen
OpenHab Light Sensor HABPanel 2.png

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:

OpenHAB Light Sensor Thing.png

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:

OpenHAB Light Sensor Thing Overview.png


Nachdem nun das Thing eingerichtet ist kommen wir zum Item, das wir als String Ausgabe einrichten werden:

OpenHAB Light Sensor Item.png

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:

OpenHAB Light Sensor Item Wert.png

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.

OpenHab Light Sensor Group 1.png

OpenHab Light Sensor Group 2.png

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:

OpenHab Grafana Light Sensor Panel 1.png

dann noch ein paar Einstellungen:

OpenHab Grafana Light Sensor Panel 2.png

OpenHab Grafana Light Sensor 5.png

OpenHab Grafana Light Sensor 3.png

und zum Schluss vergeben wir noch einen Namen.

OpenHab Grafana Light Sensor Panel 4.png

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

OpenHab BH1750 Sensor Grafana.png

HABPanel Einrichtung

Hier richten wir einfach ein Dummy Widget ein:

OpenHab Light Sensor HABPanel 1.png

Das Ergebnis sieht dann so aus:

OpenHab Light Sensor HABPanel 2.png