Endgeräte mit dem Raspberry via Infrarot fernsteuern

ir_controller

Aus „Gründen“ suchte ich vor einiger Zeit eine örtliche Filiale eines bekannten, in orangenen Farbtönen gehaltenen Baumarktes auf. Dort wurde ich Opfer einer arglistigen Marketingkampagne. Im Eingangsbereich wurde im unmittelbaren Sichtbereich die Stirnseite eines Regals mit halbwegs günstigen RGB-LED-Lichtleisten angereichert und mit einem geringen Preis beworben. Ich nahm mir vor, dieser Versuchung zu widerstehen, jedoch bemerkte ich an der Kasse, dass sich dieser Artikel dennoch in meinen Besitzstand geschlichen hat. Nun besaß ich also 5 meter dieses technischen Wunderwerks, nebst Controller und einer der Preisklasse enstprechenden Fernbedienung.

Dieses LED-Band ist einfach angeschlossen und noch einfacher bedient. Doch „Einfach“ kann natürlich jeder der beabsichtigten Käufergruppe. Ich möchte dieses LED-Band via Linux-Konsole und darauf basierend später auch mit meinem Hausautomatisierungssystem (eingesetzt wird openHAB) integrieren. Wie das umgesetzt wurde und welche weiteren Bauteile und Schritte dazu notwendig sind, zeigt dieser Artikel. Analog zum LED-Band kann mit diesen Methoden jedes erdenkliche Gerät mit einem Raspberry Pi gesteuert werden, das seine Befehle via Infrarot erwartet.

 

 

 

 

System aktualisieren

Zunächst aktualsieren wir unseren Raspberry Pi. Für die Anwendungszwecke dieser Anleitung ist dieser Schritt besonders wichtig, da ich mit einem zweiten Exemplar massive Probleme hatte, die notwendigen Kernel-Module zu laden. Wie alle Befehle in diesem Artikel führen wir auch die folgenden als Nutzer „root“ aus. Aktualisieren wir zunächst die Firmware der Himbeere mit

rpi-update

 

Nachdem der Vorgang erfolgreich abgeschlossen wurde, aktualisieren wir unsere gesamte Raspbian-Distribution mittels

apt-get dist-upgrade -y

 

Nach längerer Wartezeit und den daraus resultierten Tassen Kaffee aktualisieren wir die Paketbibliotheken und direkt im Anschluss die verfügbaren, zu erneuernden Pakete:

apt-get update -y && apt-get upgrade -y

 

Nun wird es Zeit, das System neu zu starten:

shutdown -r now

 

 

Der Infrarot-Empfänger

Bevor wir das neu erworbene LED-Band mit unserem Raspberry steuern können, muss dieser natürlich zunächst die Steuerbefehle der mitgelieferten Fernbedienung erlernen. Dazu benötigen wir ein Infrarot-Empfangsmodul, beispielsweise das in diesem Artikel eingesetzte TSOP4838.

ir-empfaenger

 

Empfänger anschließen

Die später eingesetzte Software erwartet den Infrarot-Empfänger grundsätzlich auf dem GPIO-Port 18. Daher wollen auch wir diesen nutzen und ggf. dort bereits angeschlossene Dinge auf andere, freie GPIO-Ports verschieben. Bitte zunächst unbedingt das Datenblatt des TSOP beachten, da in diesem Artikel natürlich nur der beschrieben und skizziert werden kann, der sich im persönlichen Einsatz befindet. Für meinen Empfänger nutzte ich dafür das passende Datenblatt. Wenn die PIN-Belegung in Erfahrung gebracht wurde, können wir nun den Empfänger am Raspberry Pi anschließen. Die Orientierung wird durch den kleinen „Knubbel“ auf der Oberseite des Empfängers erleichtert und für den von mir erworbenen gestalten sich die Verbindungen wie folgt (vorher System herunterfahren und von der Spannungsversorgung trennen!):

Anschlussschema-IR-Receiver

 

 

 

P1070539

 

Installieren

Softwareseitig nutzen wir für unsere Zwecke das Programm „Linux Infrared Remote Control„, kurz LIRC. Dieses befindet sich glücklicherweise in den Repositories und kann daher mit

apt-get install lirc -y

installiert werden.

 

Im nächsten Schritt konfigurieren wir die Datei „/boot/config.txt„. Dort fügen wir folgende Zeile ein:

dtoverlay=lirc-rpi,gpio_in_pin=17,gpio_out_pin=18

Dabei ist darauf zu achten, bei der Nummerierung die GPIO-Ports anzugeben (nicht die wiringPi-Ports oder physikalischen Ports!)

 

Konfigurieren

LIRC benötigt nun Angaben über die Hardware, die wir einsetzen wollen. Dazu editieren wir mit einem Editor der persönlichen Vorliebe (nano!) die Konfigurationsdatei „/etc/lirc/hardware.conf“ wie folgt. In der ersten Zeile tragen wir in den Anführungszeichen die Methode der Eingabe ein:

LIRCD_ARGS="--uinput"

 

Die beiden Zeilen, in denen Startparameter gesetzt werden können, lassen wir auskommentiert (#).

# START_LIRCMD=false
# START_IREXEC=false

 

Wir weisen LIRC an, beim Starten entsprechende Module zu laden:

LOAD_MODULES=true

 

Der „default„-Treiber spricht in unserem Fall das Gerät „/dev/lirc0“ an und nutzt dazu das Modul „lirc_rpi„:

DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

 

Die letzten beiden Konfigurationen belassen wir bei nicht ausgefüllten Anführungszeichen:

LIRCD_CONF=""
LIRCMD_CONF=""

 

Nun wird es abermals Zeit, unseren Raspberry Pi neu zu starten:

shutdown -r now

 

Testen

Nach dem erfolgten Neustart des Systems prüfen wir direkt, ob die Kernel-Module ordnungsgemäß geladen wurden. Dazu betrachten wir den Kernelringpuffer mit dem Befehl

dmesg

 

Nun sollte auch der Dienst LIRC beim Systemstart erfolgreich gestartet worden sein. Für unseren ersten Test jedoch würde der Dienst stören und daher stoppen wir diesen via

/etc/init.d/lirc stop

 

Nun starten wir ein Tool, das sämtliche empfangenen Infrarot-Signale im „Rohformat“ (RAW) auf dem Bildschirm ausgibt. Richten wir also eine Infrarot-Fernbedienung auf den Empfänger und drücken verschiedene Tasten. Ist bis zu diesem Punkt alles erfolgreich verlaufen, erscheinen nun die Infrarot-Befehle auf der Konsole.

mode2 -d /dev/lirc0

Dieses Tool lässt sich mit der Tastenkombination „STRG“ und „c“ wieder beenden.

 

Fernbedienungsbefehle erlernen

Aus leidlicher Erfahrung kann ich berichten, dass selbst zwei vom identischen Hersteller beschaffte LED-Bänder auf unterschiedliche IR-Codes reagieren, eine mitgelieferte Fernbedienung also nicht zwangsläufig auch für andere LED-Bänder des gleichen Typs verwendet werden können. Daher ist es zumindest für die erste Fernbedienung notwendig, dessen ausgesendete Codes unserem LIRC bekannt zu machen. Der LIRC-Dienst ist aus dem vorherigen Schritt noch beendet, falls nicht, holen wir dies an dieser Stelle nach.

Wissenswert bei LIRC ist für unsere Zwecke, dass der zu erlenenden Fernbedienung sowie allen Tasten jeweils eine Bezeichnung zugewiesen wird. In unserem Beispiel nennen wir die Fernbedienung zweckmäßig „ledband_SZ„. Die Bezeichnungen der einzelnen Tasten sind seitens LIRC vorgebeben und wir suchen uns aus dem Pool der vorgegebenen Bezeichnung eine möglichst passende aus. Eine Auflistung der Möglichkeiten erreicht man mit dem Befehl:

irrecord --list-namespace

 

Zum aktuellen Stand (03/2015) existieren folgende Benennungsmöglichkeiten:

KEY_0 KEY_F21 KEY_MEDIA_REPEAT KEY_TAPE
KEY_102ND KEY_F22 KEY_MEMO KEY_TEEN
KEY_1 KEY_F23 KEY_MENU KEY_TEXT
KEY_2 KEY_F24 KEY_MESSENGER KEY_TIME
KEY_3 KEY_F2 KEY_MHP KEY_TITLE
KEY_4 KEY_F KEY_MINUS KEY_TUNER
KEY_5 KEY_F3 KEY_MODE KEY_TV
KEY_6 KEY_F4 KEY_MOVE KEY_TV2
KEY_7 KEY_F5 KEY_MP3 KEY_TWEN
KEY_8 KEY_F6 KEY_MSDOS KEY_U
KEY_9 KEY_F7 KEY_MUHENKAN KEY_UNDO
KEY_A KEY_F8 KEY_MUTE KEY_UNKNOWN
KEY_AB KEY_F9 KEY_N KEY_UP
KEY_ADDRESSBOOK KEY_FASTFORWARD KEY_NEW KEY_UWB
KEY_AGAIN KEY_FAVORITES KEY_NEWS KEY_V
KEY_ALTERASE KEY_FILE KEY_NEXT KEY_VCR
KEY_ANGLE KEY_FINANCE KEY_NEXTSONG KEY_VCR2
KEY_APOSTROPHE KEY_FIND KEY_NUMERIC_0 KEY_VENDOR
KEY_ARCHIVE KEY_FIRST KEY_NUMERIC_1 KEY_VIDEO
KEY_AUDIO KEY_FN KEY_NUMERIC_2 KEY_VIDEO_NEXT
KEY_AUX KEY_FN_1 KEY_NUMERIC_3 KEY_VIDEOPHONE
KEY_B KEY_FN_2 KEY_NUMERIC_4 KEY_VIDEO_PREV
KEY_BACK KEY_FN_B KEY_NUMERIC_5 KEY_VOICEMAIL
KEY_BACKSLASH KEY_FN_D KEY_NUMERIC_6 KEY_VOLUMEDOWN
KEY_BACKSPACE KEY_FN_E KEY_NUMERIC_7 KEY_VOLUMEUP
KEY_BASSBOOST KEY_FN_ESC KEY_NUMERIC_8 KEY_W
KEY_BATTERY KEY_FN_F KEY_NUMERIC_9 KEY_WAKEUP
KEY_BLUE KEY_FN_F10 KEY_NUMERIC_POUND KEY_WIMAX
KEY_BLUETOOTH KEY_FN_F1 KEY_NUMERIC_STAR KEY_WLAN
KEY_BOOKMARKS KEY_FN_F11 KEY_NUMLOCK KEY_WORDPROCESSOR
KEY_BREAK KEY_FN_F12 KEY_O KEY_WWW
KEY_BRIGHTNESS_CYCLE KEY_FN_F2 KEY_OK KEY_X
KEY_BRIGHTNESSDOWN KEY_FN_F3 KEY_OPEN KEY_XFER
KEY_BRIGHTNESSUP KEY_FN_F4 KEY_OPTION KEY_Y
KEY_BRIGHTNESS_ZERO KEY_FN_F5 KEY_P KEY_YELLOW
KEY_BRL_DOT10 KEY_FN_F6 KEY_PAGEDOWN KEY_YEN
KEY_BRL_DOT1 KEY_FN_F7 KEY_PAGEUP KEY_Z
KEY_BRL_DOT2 KEY_FN_F8 KEY_PASTE KEY_ZENKAKUHANKAKU
KEY_BRL_DOT3 KEY_FN_F9 KEY_PAUSE KEY_ZOOM
KEY_BRL_DOT4 KEY_FN_S KEY_PAUSECD KEY_ZOOMIN
KEY_BRL_DOT5 KEY_FORWARD KEY_PC KEY_ZOOMOUT
KEY_BRL_DOT6 KEY_FORWARDMAIL KEY_PHONE KEY_ZOOMRESET
KEY_BRL_DOT7 KEY_FRAMEBACK KEY_PLAY BTN_0
KEY_BRL_DOT8 KEY_FRAMEFORWARD KEY_PLAYCD BTN_1
KEY_BRL_DOT9 KEY_FRONT KEY_PLAYER BTN_2
KEY_C KEY_G KEY_PLAYPAUSE BTN_3
KEY_CALC KEY_GAMES KEY_POWER BTN_4
KEY_CALENDAR KEY_GOTO KEY_POWER2 BTN_5
KEY_CAMERA KEY_GRAPHICSEDITOR KEY_PRESENTATION BTN_6
KEY_CANCEL KEY_GRAVE KEY_PREVIOUS BTN_7
KEY_CAPSLOCK KEY_GREEN KEY_PREVIOUSSONG BTN_8
KEY_CD KEY_H KEY_PRINT BTN_9
KEY_CHANNEL KEY_HANGEUL KEY_PROG1 BTN_A
KEY_CHANNELDOWN KEY_HANJA KEY_PROG2 BTN_B
KEY_CHANNELUP KEY_HELP KEY_PROG3 BTN_BACK
KEY_CHAT KEY_HENKAN KEY_PROG4 BTN_BASE
KEY_CLEAR KEY_HIRAGANA KEY_PROGRAM BTN_BASE2
KEY_CLOSE KEY_HOME KEY_PROPS BTN_BASE3
KEY_CLOSECD KEY_HOMEPAGE KEY_PVR BTN_BASE4
KEY_COFFEE KEY_HP KEY_Q BTN_BASE5
KEY_COMMA KEY_I KEY_QUESTION BTN_BASE6
KEY_COMPOSE KEY_INFO KEY_R BTN_C
KEY_COMPUTER KEY_INSERT KEY_RADIO BTN_DEAD
KEY_CONFIG KEY_INS_LINE KEY_RECORD BTN_DIGI
KEY_CONNECT KEY_ISO KEY_RED BTN_EXTRA
KEY_CONTEXT_MENU KEY_J KEY_REDO BTN_FORWARD
KEY_COPY KEY_K KEY_REFRESH BTN_GAMEPAD
KEY_CUT KEY_KATAKANA KEY_REPLY BTN_GEAR_DOWN
KEY_CYCLEWINDOWS KEY_KATAKANAHIRAGANA KEY_RESERVED BTN_GEAR_UP
KEY_D KEY_KBDILLUMDOWN KEY_RESTART BTN_JOYSTICK
KEY_DASHBOARD KEY_KBDILLUMTOGGLE KEY_REWIND BTN_LEFT
KEY_DATABASE KEY_KBDILLUMUP KEY_RFKILL BTN_MIDDLE
KEY_DEL_EOL KEY_KEYBOARD KEY_RIGHT BTN_MISC
KEY_DEL_EOS KEY_KP0 KEY_RIGHTALT BTN_MODE
KEY_DELETE KEY_KP1 KEY_RIGHTBRACE BTN_MOUSE
KEY_DELETEFILE KEY_KP2 KEY_RIGHTCTRL BTN_PINKIE
KEY_DEL_LINE KEY_KP3 KEY_RIGHTMETA BTN_RIGHT
KEY_DIGITS KEY_KP4 KEY_RIGHTSHIFT BTN_SELECT
KEY_DIRECTION KEY_KP5 KEY_RO BTN_SIDE
KEY_DIRECTORY KEY_KP6 KEY_S BTN_START
KEY_DISPLAY_OFF KEY_KP7 KEY_SAT BTN_STYLUS
KEY_DISPLAYTOGGLE KEY_KP8 KEY_SAT2 BTN_STYLUS2
KEY_DOCUMENTS KEY_KP9 KEY_SAVE BTN_TASK
KEY_DOLLAR KEY_KPASTERISK KEY_SCALE BTN_THUMB
KEY_DOT KEY_KPCOMMA KEY_SCREEN BTN_THUMB2
KEY_DOWN KEY_KPDOT KEY_SCROLLDOWN BTN_THUMBL
KEY_DVD KEY_KPENTER KEY_SCROLLLOCK BTN_THUMBR
KEY_E KEY_KPEQUAL KEY_SCROLLUP BTN_TL
KEY_EDIT KEY_KPJPCOMMA KEY_SEARCH BTN_TL2
KEY_EDITOR KEY_KPLEFTPAREN KEY_SELECT BTN_TOOL_AIRBRUSH
KEY_EJECTCD KEY_KPMINUS KEY_SEMICOLON BTN_TOOL_BRUSH
KEY_EJECTCLOSECD KEY_KPPLUS KEY_SEND BTN_TOOL_DOUBLETAP
KEY_EMAIL KEY_KPPLUSMINUS KEY_SENDFILE BTN_TOOL_FINGER
KEY_END KEY_KPRIGHTPAREN KEY_SETUP BTN_TOOL_LENS
KEY_ENTER KEY_KPSLASH KEY_SHOP BTN_TOOL_MOUSE
KEY_EPG KEY_L KEY_SHUFFLE BTN_TOOL_PEN
KEY_EQUAL KEY_LANGUAGE KEY_SLASH BTN_TOOL_PENCIL
KEY_ESC KEY_LAST KEY_SLEEP BTN_TOOL_QUADTAP
KEY_EURO KEY_LEFT KEY_SLOW BTN_TOOL_RUBBER
KEY_EXIT KEY_LEFTALT KEY_SOUND BTN_TOOL_TRIPLETAP
KEY_F10 KEY_LEFTBRACE KEY_SPACE BTN_TOP
KEY_F11 KEY_LEFTCTRL KEY_SPELLCHECK BTN_TOP2
KEY_F12 KEY_LEFTMETA KEY_SPORT BTN_TOUCH
KEY_F13 KEY_LEFTSHIFT KEY_SPREADSHEET BTN_TR
KEY_F14 KEY_LINEFEED KEY_STOP BTN_TR2
KEY_F15 KEY_LIST KEY_STOPCD BTN_TRIGGER
KEY_F1 KEY_LOGOFF KEY_SUBTITLE BTN_WHEEL
KEY_F16 KEY_M KEY_SUSPEND BTN_X
KEY_F17 KEY_MACRO KEY_SWITCHVIDEOMODE BTN_Y
KEY_F18 KEY_MAIL KEY_SYSRQ BTN_Z
KEY_F19 KEY_MAX KEY_T
KEY_F20 KEY_MEDIA KEY_TAB

 

Nun beginnen wir mit dem Lernprozess. Die in den folgenden Schritten generierte Konfigurationsdatei für unsere Fernbedienung wird zunächst im Heimatverzeichnis „/root/“ und dem Dateinamen „ledband_sz.conf“ gespeichert. Sollte beim Lernprozess etwas schief laufen, kann diese Datei mittels

rm ~/ledband_sz.conf

wieder gelöscht und der Prozess von vorne begonnen werden.

 

Das Anlernen wird gestartet mit:

irrecord -d /dev/lirc0 ~/ledband_sz.conf

 

Das Programm irrecord teilt uns nun Schritt für Schritt mit, was wir zu tun haben. Ich zeige den Ablauf in gekürzter Form:

root@rbp237:/scripts# /etc/init.d/lirc stop
[ ok ] Stopping remote control daemon(s): LIRC:.
root@rbp237:/scripts# irrecord -d /dev/lirc0 ~/ledband_sz.conf

irrecord -  application for recording IR-codes for usage with lirc

Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)

This program will record the signals from your remote control
and create a config file for lircd.

[...]

Press RETURN to continue.


Now start pressing buttons on your remote control.

It is very important that you press many different buttons and hold them
down for approximately one second. Each button should generate at least one
dot but in no case more than ten dots of output.
Don't stop pressing buttons until two lines of dots (2x80) have been
generated.

Press RETURN now to start recording.
................................................................................
Found const length: 108272
Please keep on pressing buttons like described above.
................................................................................
Space/pulse encoded remote control found.
Signal length is 67.
Found possible header: 9082 4441
Found trail pulse: 633
Found repeat code: 9083 2197
Signals are space encoded.
Signal length is 32
Now enter the names for the buttons.

Please enter the name for the next button (press <ENTER> to finish recording)
KEY_BRIGHTNESSUP

Now hold down button "KEY_BRIGHTNESSUP".

[...]

Please enter the name for the next button (press <ENTER> to finish recording)

Checking for toggle bit mask.
Please press an arbitrary button repeatedly as fast as possible.
Make sure you keep pressing the SAME button and that you DON'T HOLD
the button down!.
If you can't see any dots appear, then wait a bit between button presses.

Press RETURN to continue.
..............................
No toggle bit mask found.
Successfully written config file.
root@rbp237:/scripts#

 

Zwei vorgefertigte Konfigurationsdateien

Ich möchte hier die Konfigurationsdatei für zwei LED-Lichtbänder zur Verfügung stellen, die mit der oben gezeigten Methode erstellt wurden. Möglicherweise kann dann der Lernschritt entfallen und eine der Konfigurationsdateien passt zufälligerweise zu dem eigenen LED-Controller.

[ddownload id=“7617″ style=“button“ button=“blue“]
FB Typ 1
[ddownload id=“7618″ style=“button“ button=“blue“]
FB Typ 2

 

Diese können wie folgt der eigenen Konfigurationsdatei hinzugefügt werden:

cd /tmp
wget https://klenzel.de/downloads/ledband_WZ.conf
wget https://klenzel.de/downloads/ledband_SZ.conf
cat /tmp/ledband_WZ.conf >> /etc/lirc/lircd.conf
cat /tmp/ledband_SZ.conf >> /etc/lirc/lircd.conf

 

Konfiguration sichern

Nachdem der Lernprozess abgeschlossen wurde, befindet sich nun die entsprechende Konfigurationsdatei im Ordner, den wir beim Aufruf des Lernprogramms angaben. Um diese zu implementieren, sichern wir zunächst die vorhandene LIRC-Konfigurationsdatei mit

mv /etc/lirc/lircd.conf /etc/lirc/lircd.conf.orig

 

Dann passen wir zunächst die Konfigurationsdatei der Fernbedienung an…

nano ~/ledband_sz.conf

…und ändern in der mit „name“ beginnenden Zeile den Namen der Fernbedienung, in unserem Beispiel zu „ledband_SZ„.

 

Den Inhalt der geänderten und gespeicherten Datei fügen wir nun der lirc-Konfigurationsdatei hinzu. Mit dieser Methode werden vorhandene Einträge nicht überschrieben oder gelöscht und es wäre sogar möglich, mehrere Fernbedienungskonfigurationen hinzuzufügen. Lediglich der Name sollte sich, wie oben gezeigt, voneinander unterscheiden.

cat ~/ledband_sz.conf >> /etc/lirc/lircd.conf

Sollte sich in der Datei „lircd.conf“ noch eine Zeile mit „UNCONFIGURED“ befinden, löschen wir diese.

 

Nun ist es an der Zeit, den LIRC-Dienst wieder zu starten:

/etc/init.d/lirc start

 

Wir testen, ob die Befehle der Fernbedienung von LIRC richtig interpretiert und der gewünschten Tastenbezeichnung zugeordnet wurde, indem wir das Tool

irw

starten. Dieses Tool zeigt jede auf der physischen Fernbedienung gedrückten Taste mit der entsprechenden Zurodnung auf dem Bildschirm an. Das Tool kann mit der Tastenkombination „STRG“ und „c“ beendet werden.

 

Infrarot-Befehle empfangen

An dieser Stelle besteht die Möglichkeit, den Raspberry mit der Infrarot-Fernbedienung zu steuern. Im folgenden Beispiel wollen wir erreichen, dass unsere Himbeere beim Druck auf die Taste „KEY_POWER“ ordnungsgemäß heruntergefahren wird. Dazu Nutzen wir das Tool „irexec„, welches mit einer wie folgt gestalteten Konfigurationsdatei gestartet wird. In dieser Konfigurationsdatei können auch mehrere Aktionen für Fernbedienungstasten festgelegt werden. Dazu muss für jede Taste ein Block beginnend mit „begin“ und endend mit „end“ erstellt werden. Erstellen wir nun beispielsweise die Datei „/scripts/irexec.conf„:

begin irexec

begin
prog   = irexec
remote = ledband_SZ
button = KEY_POWER
config = /scripts/shutdown.sh
end

begin
prog   = irexec
remote = andere_fb
button = KEY_POWER
config = /scripts/anderes_script.sh
end

end irexec

 

Die hier konfigurierte Datei „/scripts/shutdown.sh“ enthält lediglich die Zeilen

#!/bin/bash
sudo shutdown -h now

 

Da dieses Tool zwar im Hintergrund läuft und auf Befehle der realen Fernbedienung wartet, jedoch unabhängig vom eigentlich LIRC zu betrachten ist, muss der Startaufruf

irexec --daemon /scripts/irexec.conf

in einem Start-Script hinterlegt werden, das beim Systemstart ausgeführt wird. Hierfür würde sich unter anderem die Datei „/etc/rc.local“ anbieten, in welche wir die obige Zeile einfügen. Die Zeile kann jedoch unabhängig vom Systemstart jederzeit in der Konsole ausgeführt werden. Zudem sollte erwähnt werden, dass für jede Konfigurationsdatei ein seperater irexec-Prozess gestartet werden muss.

 

Der Infrarot-Sender

Bis jetzt sind wir in der Lage, auf Infrarot-Kommandos zu reagieren und wissen, welche Taste der realen Fernbedienung welche Bedeutung hat. Diese Kommandos wollen wir nun mit dem Raspberry nachahmen, um so über die Linux-Konsole die jeweiligen Schaltbefehle zu senden und das Endgerät somit zu steuern.

P1070526

 

Sender anschließen

Das bereits installierte Programm LIRC erwartet den Infrarot-Sender, der eigentlich nichts weiter als eine IR-Diode darstellt, auf dem GPIO-Port 17. Daher sollten wir zunächst prüfen, ob dieser Port noch frei ist und ggf. die an diesem GPIO-Port angeschlossenen „Geräte“ auf einen anderen, freien Port verlegen.

Für den Infrarotsender benötigen wir folgende Cent-Artikel:

 

 

P1070537

 

Wer bereits einen Lötkolben aus der Ferne betrachtet hat, wird hier keine Schwierigkeiten haben, die Bauteile nach dem folgenden Schema zu verlöten:

Anschlussschema-IR-LED

 

Hierbei ist wichtig, auf die Polarität der IR-LED zu achten, das obige Bild kann hierbei helfen. Beim Transistor sollte wieder unbedingt das Datenblatt beachtet werden, die hier vorgestellte Anschlussbelegung gilt natürlich nur für den von mir erworbenen.

 

Installieren und Konfigurieren

Die notwendigen Schritte haben wir bereits bei der Konfiguration des Empfängers erledigt.

 

Testen

Wir testen, ob diese Schritte erfolgreich waren und lassen LIRC einen Befehl in einer Dauerschleife senden:

irsend SEND_START ledband_SZ KEY_POWER

 

Ein interessanter Trick hierbei ist die Verwendung einer Digitalkamera. Wenn wir die IR-Diode durch die Kamera betrachten, kann man im Kamerabildschirm erkennen, ob diese leuchtet oder nicht. Für Leute mit einem Sehspektrum im Infrarotbereich entfällt dieser Umweg natürlich.

Stellen wir fest, dass die IR-Diode tatsächlich leuchtet, können wir das Senden beenden:

irsend SEND_STOP ledband_SZ KEY_POWER

 

Gerät steuern

Alle Lötarbeiten, alle Installationen und alle Konfigurationen sind nun abgeschlossen und wir können nun endlich unser Endgerät steuern. Dafür richten wir den Infrarot-Sender, also die IR-Diode, in die Richtung des Empfängers des zu steuernden Geräts und senden unsere Befehle wie folgt:

irsend SEND_ONCE ledband_SZ KEY_POWER

 

Dabei sollte „ledband_SZ“ durch den konfigurierten Namen der Fernbedienung und „KEY_POWER“ durch den gewünschten Befehl ersetzt werden.

 

Extra: Morgendlicher Sonnenaufgang

Aus der Idee, morgens von einem simulierten Sonnenaufgang geweckt zu werden, ist dieses kleine Quick&Dirty-Script entstanden. Dieses wird direkt auf dem jeweiligen Raspberry ausgeführt und beispielsweise unter „/scripts/sonnenaufgang.sh“ gespeichert.

#!/bin/bash
TAKT=30
/usr/bin/irsend SEND_ONCE ledband_WZ KEY_POWER2
sleep 2

/usr/bin/irsend SEND_ONCE ledband_WZ KEY_BTN7
sleep 2

for ((i=10;i<=1;i--)); do
        /usr/bin/irsend SEND_ONCE ledband_WZ KEY_BRIGHTNESSDOWN
        sleep 2
done

/usr/bin/irsend SEND_ONCE ledband_WZ KEY_POWER
sleep 2

for ((i=10;i<=1;i--)); do
        /usr/bin/irsend SEND_ONCE ledband_WZ KEY_BRIGHTNESSUP
        sleep $TAKT
done

 

Zudem erstellen wir eine zusätzliche Zeile in den Crontabs, welche wir mit

crontab -e

editieren können. Den Aufruf des morgendlichen Sonnenaufgangs realisieren wir mit dem Eintrag:

0 6 * * * /scripts/sonnenaufgang.sh

So startet das Script morgens um sechs Uhr und dauert in etwa fünf Minuten.

 

Integration in openHAB

Die hauptsächliche Arbeit wäre getan, kümmern wir uns nun in diesem Beitrag um die Integration unserer LED-Lichtstreifen in openHAB.

 

 

Alternative GPIO-Ports

Wenn die in diesem Artikel genannten Ports nicht zur Verfügung stehen, könnte man versuchen, Sender und Empfänger an alternativen GPIO-Ports zu betreiben. In unseren Beispielen möchten wir den GPIO-Port 19 für den IR-Empfänger und den GPIO-Port 21 für den IR-Sender nutzen.

Dazu fügen wir der Datei „/boot/config.txt“ folgende Zeile hinzu bzw. ändern die dort vorhandene wie folgt ab:

dtoverlay=lirc-rpi,gpio_out_pin=21,gpio_in_pin=19