openHAB :: Einbinden von Schaltern und Kontakten

31Alle Schalter, Kontakte oder Schwimmer aus diesem Artikel können in das Hausautomatisierungssystem openHAB eingebunden werden. Nachdem openHAB installiert und konfiguriert wurde, wollen wir uns in diesem Beitrag den notwendigen Scripten sowie den Definitionen innerhalb openHAB widmen. Die hier vorgestellte Methode basiert auf den Zugriff des openHAB-Servers auf einen oder mehrere Raspberry mittels SSH. Die dazu notwendigen Abläufe werden in Bash-Scripten zusammengefasst.

In diesem Beispielszenario wurde ein Raspberry mit der IP-Adresse „192.168.23.236“ und der openHAB-Server mit der Adresse „192.168.23.212“ konfiguriert.

 

Verfügbare Artikel zu openHAB

little_blue_dot Einleitunglittle_blue_dot Einbinden der Internetgeschwindigkeitlittle_blue_dot RFID-Lesegerät einbinden
little_blue_dot Installationlittle_blue_dot Präsenzerkennung via Bluetooth und Pinglittle_blue_dot Einbinden von DS18B20-Sensoren
little_blue_dot Konfigurationlittle_blue_dot Kleines Netzwerkmonitoringlittle_blue_dot ical-Abfallkalender einbinden
little_blue_dot Reverse-Proxy für OpenHABlittle_blue_dot Einbinden von LG-Fernsehern [Update]little_blue_dot openHAB als Wecker
little_blue_dot Datenspeicherung und Statistikenlittle_blue_dot Einbinden Schaltern und Kontaktenlittle_blue_dot Einbinden von Bewegungssensoren
little_blue_dot Regeln planen und konfigurierenlittle_blue_dot Einbinden von Funksteckdosen (433 MHz)little_blue_dot Einbinden einer FritzBox
little_blue_dot Einbinden von USB-Steckdosenleisten (SIS-PMS)little_blue_dot Infrarotgesteuerte Geräte einbindenlittle_blue_dot Sprachausgabe auf einem Raspberry
little_blue_dot Einbinden von Temperatursensorenlittle_blue_dot Steuerung mit NFC-Tagslittle_blue_dot Schaltbare Steckdosenleiste mit Relais
little_blue_dot Externer Zugriff mit my.openhab

 

 

Zwingend vorausgesetzt wird zunächst, dass eine Anmeldung via SSH ohne Passwort ermöglicht wird, was in diesem Beitrag ausführlich beschrieben wurde. Das Auslesen einzelner GPIO-Ports auf dem Raspberry wird in diesem Artikel beschrieben.

Testen wir zunächst, ob der Kontakt lokal auf dem Raspberry ausgelesen werden kann und der korrekte Status angezeigt wird:

/usr/local/bin/gpio read 11

 

In unserem Beispiel ist am GPIO-Port 11 (gem. wiringPi-Logik) ein Schwimmer angeschlossen, der den Stromkreis je nach Wasserstand öffnet oder schließt.

 

35

 

Im nächsten Schritt prüfen wir, ob dieser Befehl remote vom openHAB-Server ausgeführt werden kann:

/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.236 "/usr/local/bin/gpio read 11"

 

Bei Erfolg wird uns auch jetzt der Schaltzustand ausgegeben:

 

36

 

 

Nun können wir ein Bash-Script erstellen, das openHAB nutzt, um den Schaltzustand in ein Item zu schreiben:

#!/bin/bash
GPIO=$2
INPUT=$(/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.$1 "/usr/local/bin/gpio read $GPIO")
echo $INPUT

 

Das Script erwartet als ersten Parameter das letzte Oktett der IP-Adresse des Raspberry, an welchem der Schalter bzw. der Kontakt angeschlossen ist. Der zweite Parameter setzt den abzufragenden GPIO-Port. Wir speichern das neue Script als „/scripts/wtrlvl.sh„, erlauben die Ausführung durch

chmod +x /scripts/wtrlvl.sh

und übertragen den Besitz an „openhab“ durch

chown openhab: /scripts/wtrlvl.sh

 

Die entsprechende Item-Definition kann so konfiguriert werden:

Number WTR_FISCHE <cistern> { exec="<[/scripts/wtrlvl.sh 236 11:60000:REGEX((.*?))]" }

 

Anschließend fügen wir das Item in unsere Sitemap ein:

Text item=WTR_FISCHE valuecolor=[0="red",1="green"] label="Wasserstand Fische [MAP(wtrlvl.map):%s]"

 

Die Übersetzung in der .map-Konfigurationsdatei hierfür habe ich so definiert:

1=optimal
0=niedrig
undefined=unbekannt
-=unbekannt

 

Letztendlich sieht unser Beispiel in der Sitemap wie folgt aus:

 

37

 

Wie wir sehen, ist der Wasserstand, entgegen der Beispiele weiter oben, zu niedrig. Der Schwimmer hat daher den Stromkreis geöffnet und das entsprechende Item auf den Wert „0“ gesetzt. Übersetzt aus der Transform-Map wird nun der Text „niedrig“ ausgegeben und durch die Darstellungsoption „valuecolor“ in roter Farbe angezeigt. Zudem wird die leere Version des Symbols „cistern“ angezeigt.