openHAB :: Infrarotgesteuerte Geräte einbinden (LED-Band)

30In diesem Artikel zeigte ich, wie wir Endgeräte mit dem Raspberry via Infrarot steuern können. Nach dem Artikel waren wir in der Lage, Steuerbefehle mittels einer Linux-Konsole abzusetzen und gezielte Aktionen an Endgeräten (bspw. das gezeigte RGB-LED-Lichtband) auszulösen. Leider erlauben es die Umstände nicht, dass ich jederzeit ein handliches Gerät mit einer offenen SSH-Sitzung mit mir führe. Zudem wäre die ständige Eingabe des jeweiligen LIRC-Kommandos doch eher umständlich. Daher zeige ich in diesem Beitrag, wie infrarotgesteuerte Endgeräte, hier als Beispiel wieder der LED-Lichtstreifen, mittels openHAB gesteuert werden können.

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

 

 

 

Bash-Script erstellen

Für die Umsetzung unserer Ziele müssen wir zunächst sicherstellen, dass sich der openHAB-Server ohne Passwort und sonstiger Abfragen via SSH mit der Himbeere verbinden kann, auf welcher wir den Infrarotsender anschlossen und konfigurierten. Wie die passwortlose Anmeldung via SSH möglich ist, zeigt dieser Artikel detailiert. Wenn die dort aufgeführten Schritte umgesetzt wurden, können wir an dieser Stelle mit der Erstellung eines Bash-Scriptes fortsetzen, welches aus openHAB heraus die Steuerbefehle an den jeweiligen Raspberry sendet.

Dazu erstellen wir beispielsweise die Datei “/scripts/ledband.sh” mit folgendem Inhalt:

#!/bin/bash
/usr/bin/ssh -i /scripts/.ssh/id_rsa root@192.168.23.$1 "/usr/bin/irsend SEND_ONCE $2 $3"

 

Wir erlauben die Ausführung des Scripts durch

chmod +x /scripts/ledband.sh

und übertragen den Besitz an “openhab” durch

chown openhab: /scripts/ledband.sh

 

In diesem kleinen Script müssen die ersten drei Oktette der IP-Adresse natürlich an die eigenen Gegebenheiten angepasst werden. Zur weiteren Erklärung sei erwähnt, dass das Script drei Parameter erwartet:

  1. das letzte Oktett des Raspberry, so können verschiedene Himbeeren via openHAB angesprochen werden
  2. der Name der konfigurierten Fernbedienung, in unserem Beispiel so wie auch im letzten Artikel verwenden wir den Namen “ledband_SZ
  3. der Name der auszuführenden Taste

 

 

openHAB-Addon installieren

Die Umsetzung unserer Infrarotsteuerung realisieren wir in diesem Artikel mit dem openHAB-Addon “exec“, welches wir mittels apt-Paketverwaltung wie folgt installieren:

apt-get install openhab-addon-binding-exec

 

Item(s) konfigurieren

ir_controller

Da unsere LED-Lichtleiste nicht mit einem bereits für openHAB verfügbares Addon gesteuert werden kann, ist es notwendig, für nahezu jeden Schaltbefehl ein seperates Item zu definieren. Für alle Funktionen des hier gezeigten LED-Lichtbandes würden die Definitionen wie folgt aussehen:

//LED-Lichtband SZ
Switch	LB_SZ_ONOFF			"Betrieb"				<lb_haupt>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_POWER] >[OFF:/scripts/ledband.sh 237 ledband_SZ KEY_POWER2]" }
Switch	LB_SZ_HELLIGKEIT	"Helligkeit"			<lb_helligkeit>	{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_BRIGHTNESSUP] >[OFF:/scripts/ledband.sh 237 ledband_SZ KEY_BRIGHTNESSDOWN]" , autoupdate="false" }
Switch	LB_SZ_ROT			"LED-Farbe rot"			<lb_rot>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_RED]" , autoupdate="false" }
Switch	LB_SZ_GRUEN			"LED-Farbe grün"		<lb_gruen>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_GREEN]" , autoupdate="false" }
Switch	LB_SZ_BLAU			"LED-Farbe blau"		<lb_blau>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_BLUE]" , autoupdate="false" }
Switch	LB_SZ_WEISS			"LED-Farbe weiß"		<lb_weiss>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_0]" , autoupdate="false" }
Switch	LB_SZ_ORANGE		"LED-Farbe orange"		<lb_orange>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_1]" , autoupdate="false" }
Switch	LB_SZ_HELLGRUEN		"LED-Farbe hell-grün"	<lb_hgruen>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_2]" , autoupdate="false" }
Switch	LB_SZ_MITTELBLAU	"LED-Farbe mittel-blau"	<lb_mblau>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_3]" , autoupdate="false" }
Switch	LB_SZ_BRAUN			"LED-Farbe braun"		<lb_braun>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_4]" , autoupdate="false" }
Switch	LB_SZ_GRUENBLAU		"LED-Farbe grün-blau"	<lb_gruenblau>	{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_5]" , autoupdate="false" }
Switch	LB_SZ_LILA			"LED-Farbe lila"		<lb_lila>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_6]" , autoupdate="false" }
Switch	LB_SZ_HELLORANGE	"LED-Farbe hell-orange"	<lb_horange>	{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_7]" , autoupdate="false" }
Switch	LB_SZ_TUERKIS		"LED-Farbe türkis"		<lb_tuerkis>	{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_8]" , autoupdate="false" }
Switch	LB_SZ_PINK			"LED-Farbe pink"		<lb_pink>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_9]" , autoupdate="false" }
Switch	LB_SZ_GELB			"LED-Farbe gelb"		<lb_gelb>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_YELLOW]" , autoupdate="false" }
Switch	LB_SZ_HELLBLAU		"LED-Farbe hell-blau"	<lb_hblau>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_A]" , autoupdate="false" }
Switch	LB_SZ_HELLLILA		"LED-Farbe hell-lila"	<lb_hlila>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ BTN_B]" , autoupdate="false" }
Switch	LB_SZ_FLASH			"Modus Flash"			<lb_flash>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_PROG1]" , autoupdate="false" }
Switch	LB_SZ_STROBE		"Modus Strobe"			<lb_strobe>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_PROG2]" , autoupdate="false" }
Switch	LB_SZ_FADE			"Modus Fade"			<lb_fade>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_PROG3]" , autoupdate="false" }
Switch	LB_SZ_SMOOTH		"Modus Smooth"			<lb_smooth>		{ exec=">[ON:/scripts/ledband.sh 237 ledband_SZ KEY_PROG4]" , autoupdate="false" }

 Zur Erklärung der einzelnen Spalten der jeweiligen Item-Definition:

  1. Wir definieren das Item als Schalter
  2. Wir benennen die Schalter einheitlich mit “LED_SZ_$FUNKTION
  3. Wir beschrieben in kurzen Worten die Funktion des Schalters
  4. Wir konfiguieren das anzuzeigende Icon, welches sich als “.png“-Datei im Ordner “/usr/share/openhab/webapp/images” befinden muss.
  5. Wir verwenden das Addon “exec“, um die Schaltbefehle via SSH auf dem Raspberry auszuführen. Dazu wird unser vorher erstelltes Script “/scripts/ledband.sh” ausgeführt und als Parameter das letzte Oktett der IP-Adresse des Raspberry, der Name der konfigurierten LIRC-Fernbedienung sowie die zu schaltende Taste angegeben. Die meisten Items werden später nur als Button angezeigt, daher benötigen wir für die Funktionen und Farben keine Einstellung für “OFF“. Zudem konfigurieren wir mit “autoupdate=”false”“, dass der Status des jeweiligen Buttons nicht aktualisiert und auch nicht gespeichert wird. Unsere Knöpfe in der Sitemap werden nur gedrückt, nicht “umgeschaltet”.

 

Farbsymbole zum herunterladen

Hier möchte ich zumindest die Symbole der einzelnen Farben zum herunterladen anbieten, damit sich diese Arbeit gespart werden kann.

Download
Icons LED-Band

 

 

Gerät in Sitemap einbinden

Nachdem alle notwendigen Items definiert wurden und die item-Datei in openHAB eingelesen wurde, erstellen wir nun die entsprechende Konfiguration für die Sitemap. Grafisch habe ich mir das so vorgestellt, dass im jeweiligen Raum zunächst nur eine einzelne Zeile für das LED-Band angezeigt wird. Wenn diese ausgewählt wird, gelangt man in ein umfangreicheres Untermenü, in welchem sämtliche Funktionen geschaltet werden können. Dabei wird zwischen “Allgemeinen Schaltungen” wie der Betriebszustand oder die Helligkeit und der “Farbauswahl” unterschieden. Diese beiden Bereiche erscheinen mit leichten Abstand untereinander.

Text item=LB_SZ_ONOFF label="LED Lichtband" icon="lb_haupt" {
	Frame label="Allgemeine Schaltungen" {
		Switch item=LB_SZ_ONOFF mappings=[ON="An", OFF="Aus"]
		Switch item=LB_SZ_HELLIGKEIT mappings=[ON="Heller", OFF="Dunkler"]
		Switch item=LB_SZ_FLASH mappings=[ON="Aktivieren"]
		Switch item=LB_SZ_STROBE mappings=[ON="Aktivieren"]
		Switch item=LB_SZ_FADE mappings=[ON="Aktivieren"]
		Switch item=LB_SZ_SMOOTH mappings=[ON="Aktivieren"]
	}

	Frame label="Farbauswahl" {
		Switch item=LB_SZ_ROT mappings=[ON="Auswählen"]
		Switch item=LB_SZ_GRUEN mappings=[ON="Auswählen"]
		Switch item=LB_SZ_BLAU mappings=[ON="Auswählen"]
		Switch item=LB_SZ_WEISS mappings=[ON="Auswählen"]
		Switch item=LB_SZ_ORANGE mappings=[ON="Auswählen"]
		Switch item=LB_SZ_HELLGRUEN mappings=[ON="Auswählen"]
		Switch item=LB_SZ_MITTELBLAU mappings=[ON="Auswählen"]
		Switch item=LB_SZ_BRAUN mappings=[ON="Auswählen"]
		Switch item=LB_SZ_GRUENBLAU mappings=[ON="Auswählen"]
		Switch item=LB_SZ_LILA mappings=[ON="Auswählen"]
		Switch item=LB_SZ_HELLORANGE mappings=[ON="Auswählen"]
		Switch item=LB_SZ_TUERKIS mappings=[ON="Auswählen"]
		Switch item=LB_SZ_PINK mappings=[ON="Auswählen"]
		Switch item=LB_SZ_GELB mappings=[ON="Auswählen"]
		Switch item=LB_SZ_HELLBLAU mappings=[ON="Auswählen"]
		Switch item=LB_SZ_HELLLILA mappings=[ON="Auswählen"]
	}
}

 

Das Ergebnis zeigt sich in unserem Browser oder in unserer openHAB-App in gekürzter Form wie folgt:

3

 

 

Regeln erstellen

Der eigenen Kreativität kann an dieser Stelle freien Lauf gelassen werden, wenn es darum geht, Regeln für unsere LED-Lichtleiste zu erstellen. Ich habe mich beispielsweise dazu entschieden, dass die Lichtleiste nach einer Stunde Aktivität automatisch wieder ausgeschaltet wird. Dazu benötigen wir zunächst ein Java-Modul sowie eine Variablendefinitionen:

import org.openhab.core.library.types.DecimalType
var Timer timerLBSZ = null

 

Anschließend erstellen wir für diesen Zweck zwei neue Regeln:

rule "LED-Band SZ nach einer Stunde ausschalten"
when
   Item LB_SZ_ONOFF changed from OFF to ON
then
   timerLBSZ = createTimer(now.plusMinutes(60)) [|
   sendCommand(LB_SZ_ONOFF, OFF)
   ]
end

rule "LED-Band SZ Timer abbrechen"
when
   Item LB_SZ_ONOFF changed from ON to OFF
then
   if (timerLBSZ != null) timerLBSZ.cancel()
end

 

Möglich wäre auch, die Lichtleiste einfach nur morgens um sieben Uhr einschalten zu lassen:

rule "Morgens ledband_SZ an"
when
   Time cron "0 0 7 * * ?"
then
   sendCommand(LB_SZ_ONOFF, ON)
end

 

 

Demonstrationsvideo

Hier ein kurzes Video für die, die nicht glauben wollen, dass das günstige Baumarkt-LED-Lichtband mit openHAB gesteuert werden kann: