openHAB :: Infrarotgesteuerte Geräte einbinden (LED-Band)
In 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
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:
- das letzte Oktett des Raspberry, so können verschiedene Himbeeren via openHAB angesprochen werden
- der Name der konfigurierten Fernbedienung, in unserem Beispiel so wie auch im letzten Artikel verwenden wir den Namen „ledband_SZ„
- 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
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:
- Wir definieren das Item als Schalter
- Wir benennen die Schalter einheitlich mit „LED_SZ_$FUNKTION„
- Wir beschrieben in kurzen Worten die Funktion des Schalters
- Wir konfiguieren das anzuzeigende Icon, welches sich als „.png„-Datei im Ordner „/usr/share/openhab/webapp/images“ befinden muss.
- 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.
[ddownload id=“7621″ style=“button“ button=“blue“] 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:
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:
Daniel Wenzel
31.12.2015 @ 06:33
Hallo Adam,
leider kann ich diese Icons nicht zur Verfügung stellen, weil ich mir diese bei der Google-Bildersuche zusammengestellt habe. Für den Privatgebrauch ist dieses Vorgehen kein Problem, aber Anbieten kann ich diese Bilder hier natürlich nicht. Die Farb-Icons habe ich jedoch selbst erstellt und mit den kann ich folglich tun und lassen, was ich möchte: beispielsweise hier als Download anbieten.
Adam
31.12.2015 @ 04:36
Hallo,
leider ist die Datei led-icons.rar nicht vollständig.
Es fehelen die Icons für den Frame „Allgemeine Schaltungen“.
Wäre super wenn du diese ergänzen würdest.
Ansonsten klasse Beiträge!
Daniel Wenzel
18.12.2015 @ 04:30
Hallo,
eigentlich habe ich das Problem nicht. Man sollte nur dran denken, zwischen den einzelnen Befehlen via openHAB eine gewisse Pause zu lassen, sonst könnte der ein oder andere Befehl untergehen.
Pedro
17.12.2015 @ 10:25
Hi Daniel, ja es hat funktioniert Danke :-)
Hast du schonmal das Problem gehabt das manche Befehle gesendet werden und andere nicht?
Wenn ich jeden einzelnen Befehl in das schwarze Fenster eingebe, funktionieren alle. Auf der App komischerweise nur die Hälfte.
Gruß
Daniel Wenzel
14.12.2015 @ 17:37
Hallo,
das Archiv muss ohne sich in einem Unterordner zu befinden in den von dir angegebenen Pfad entpackt werden.
Dann hast du zwei Möglichkeiten:
1) Du gibst das Icon bei der Itemdefinition an. Das könnte so aussehen:
Switch ITEMNAME „ITEMBEZEICHNUNG“ !iconname_ohne_dateiendung! { BEFEHL }
(Den ICONNAMEN nicht mit Ausrufezeichen einklammern sondern mit links eine spitze Klammer auf, rechts eine spitze Klammer zu. Leider kann das hier im Kommentarsystem nicht richtig angezeigt werden.)
2) Du gibts das Icon in der Sitemap an:
Text item=ITEMNAME icon="ICONNAME_OHNE_DATEIENDUNG" label="ITEMBEZEICHNUNG"
Ich hoffe, ich konnte dir damit helfen.
Grüße, Daniel
Pedro
14.12.2015 @ 09:34
Hallo, als aller erstes möchte ich mich bei euch für diese Seite bedanken. Ich bin totaler Anfänger und hab nur durch die Hilfe von euch sehr schöne Sachen realisieren können. Danke.
Ich hätte eine kurze Frage zu dem Icon Paket. Ich habe es runtergeladen, entpackt, in Ordner „Openhab/configuration/Webapps/icons“ geschoben wo alle anderen auch drin sind. Habe dann Openhab neu gestartet. Leider wird das Icon nicht angezeigt. Woran könnte das den liegen? Gruß
Daniel Wenzel
31.10.2015 @ 16:00
Siehe unten, richte bitte mal einen automatischen SSH-Login für den Nutzer „pi“ ein.
Daniel Wenzel
31.10.2015 @ 15:59
Dies scheint wirklich ein Berechtigungsproblem zu sein. Wie sieht denn deine remote.sh aus? Wird in der remote.sh ein SSH-Befehl auf einem entfernten Raspberry ausgeführt?
Möglicherweise läuft openhab bei dir als Nutzer „pi“, aber der SSH-Key wurde für den Nutzer „root“ angelegt und rüberkopiert.
Wenn du auf einem entfernten Raspberry schalten willst und deine openhab-Instanz als Nutzer „pi“ läuft, führe bitte mal die folgende Anleitung durch:
https://klenzel.de/1871
Diesmal aber bitte als Nutzer „pi“.
Und teile bitte mit, mit welchem Nutzer openhab läuft.
Daniel Wenzel
31.10.2015 @ 15:55
Hallo, unter welchem Nutzer ein Prozess unter Linux läuft, lässt sich mit folgenden (verketteten) Befehlen herausfinden:
ps aux |grep openhab
In der ersten Spalte steht der Nutzer, unter dem der Prozess „openhab“ ausgeführt wird.
Henrik
31.10.2015 @ 09:49
Update 2: Es ist das Passwort:
Dies bekomme ich, wenn ich den Daemon in der Console starte und den Button in der Sitemap drücke. Er weigert sich im Prinzip nur, dass Skript ohne Kennwortabfrage auszuführen. (gleiche Meldung auch mit root@ im Skript nur das root dann nach Kennwort fragt)
2015-10-31 09:45:04.698 [INFO ] [.o.b.exec.internal.ExecBinding] – executed comm andLine ‚/home/pi/openhab/scripts/remote.sh 20 sky_sz KEY_POWER‘
2015-10-31 09:45:04.701 [INFO ] [runtime.busevents ] – sky_sz_ONOFF received command ON
pi@192.168.178.20’s password:
pi@192.168.178.20’s password:
pi@192.168.178.20’s password:
Henrik
30.10.2015 @ 19:20
Nachtrag: Es scheint ein Berechtigungsproblem zu sein. Kann ich herausfinden, unter welchem User „openhab“ läuft. Ich vermute das das Script nicht ausgeführt wird, es im Hintergrund eine Passwortabfrage gibt.
Henrik
30.10.2015 @ 18:08
Item: Switch sky_sz_ONOFF „Betrieb“ {exec=“ON:/home/pi/openhab/scripts/remote.sh 20 sky_sz KEY_POWER“}
Sitemap: sitemap remote label=“Remote Sky“
{
Frame label=“Allgemeine Schaltungen“ {
Switch item=sky_sz_ONOFF mappings=[ON=“An“]
}
Zusätzlich ist mir aufgefallen, dass das Bash-Skript an anderer Stelle liegt also bei dir und zwar im Pfad /home/pi/openhab/scripts/remote.sh
Hier ist mir aufgefallen, dass wenn ich das Skript in der Konsole mit root@… starte, eine Kennwortabfrage kommt, wenn ich roo@ durch pi@ ersetze, lässt sich das Skript ohne Kennwort ausführen.
Daniel Wenzel
28.10.2015 @ 21:46
Hallo,
kannst du mir dafür mal bitte die entsprechenden Blöcke aus den items und der sitemap posten?
Henrik
28.10.2015 @ 20:14
Guten Abend erneut…
bei mir ist leider ein weiteres Problem aufgetreten. Das besagte Skript lässt sich nicht ausführen in der Sitemap. Sprich die Buttons ON und OFF sind ohne Funktion. Das Skript selber lässt sich in der Konsole ohne weiteres ausführen!
Hast du hier einen guten Tipp für mich?
Daniel Wenzel
31.05.2015 @ 12:25
Hallo,
die „Schaltpläne“ zum Anschließen der Infrarot-Sender und Empfänger findest du hier:
https://klenzel.de/3588
Mani
31.05.2015 @ 11:31
Sehr interessant! Vielen Dank für den schönen Beitrag! Hab auch so ein LED-Band. Hab auch schon erste Erfahrungen mit openHAB und würde gerne dieses Projekt nachbauen. Gibt es eine Schaltung hier zu?