IR Remote Control für XBMC
Der XBMC Mediaplayer lässt sich auf verschiedenste Arten steuern.
Zum einen gibt es z.B. Apps für das Smartfon. Aber wer so wie ich eine Multifunktionsferbedienung besitzt möchte doch bestimmt den XBMC Mediaplayer auf der Raspberry mit der IR Fernbedinung steuern.
Um die Steuerbefehle zu empfangen wird ein IR Receiver benötigt. Wichtig ist bei der Auswahl, dass ein 3,3 Volt Typ verwendet wird. Dies ist nötig, da der IR-Empfänger direkt an die GPIO Pins der Raspberry angeschlossen wird.
Ich habe hierzu den TSOP4838 verwendet.
Software installieren
Als erstes installieren wir die benötigte Software.
Die Auswertung der Signale übernimmt das Paket lirc
Dieses wird mit
sudo apt-get install lirc
installiert.
Hardware installieren
Der IR-Empfänger wird wie schon erwähnt an die GPIO Pins angeschlossen.
Im Treiber ist als Default der GPIO18 ausgewählt.
Die Belegung der GPIO Pins findet man im Raspberry Wiki unter General Purpose Input/Output (GPIO)
Man muss also den Empfänger entsprechend an die Pins anklemmen.
Ist dies geschehen kann man mit folgenden Kommandos die Funktion Testen:
modprobe lirc_rpi
mode2 -d /dev/lirc0
Drückt man nun Tasten auf der Fernbedienung sieht man codierte Ausgaben.
Wenn soweit alles funktioniert, dann ist als nächstes die Konfiguration von lirc an der Reihe
Konfiguration von lirc
Als erstes Stellen wir lirc so ein, dass er die benötigten Module automatisch läd.
Dies macht man in der Datei /etc/lirc/hardware.conf
Folgenden Inhalt sollte diese Datei haben:
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
#LIRCD_ARGS="--uinput"
LIRCD_ARGS=""
#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false
#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false
#Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
Nun starten wir den lirc Prozess neu:
/etc/init.d/lirc restart
Nun müssen die Befehle der Fernbedienung angelernt werden.
Dies macht man mit dem Befehl
irrecord -d /dev/lirc0 ~/lirc.conf
Nach der Konfiguration muss ie Datei ~/lirc.conf
nach /etc/lirc/lircd.conf kopiert werden.
Wichtig ist auch die Zeile mit dem Bezeichner
name lirc
Hier schreibt Ihr am besten den Namen der verwendeten Fernbedienung hin. Der name wird gleich beim XBMC wieder benötigt.
Startet nun lirc neu (siehe oben)
Nachdem lirc gestartet ist ruft ihr das Kommando irw auf. Werden jetzt Tasten gedrück, erscheinen diese angelerntet Tasten auf der Konsole.
Konfiguration von XMBC
Damit XMBC auf die Tasten der Fernbedinung reagieren kann muss eine entsprechende Konfigurationsdatei abgelegt werden.
Diese Datei liegt unter dem Homedirectory des XBMC Benutzers und heißt ~/.xbmc/userdata/Lircmap.xml
Meine Lircmap.xml sieht z.B. so aus:
<!-- This file contains the mapping of LIRC keys to XBMC keys used in Keymap.xml -->
<!-- -->
<!-- How to add remotes -->
<!-- <remote device="name_Lirc_calls_the_remote"> -->
<!-- -->
<!-- For the commands the layout following layout is used -->
<!-- <XBMC_COMMAND>LircButtonName</XBMC_COMMAND> -->
<!-- -->
<!-- For a list of XBMC_COMMAND's check out the <remote> sections of keymap.xml -->
<lircmap>
<remote device="lirc">
<altname>devinput</altname>
<left>KEY_LEFT</left>
<right>KEY_RIGHT</right>
<up>KEY_UP</up>
<down>KEY_DOWN</down>
<select>KEY_OK</select>
<select>KEY_ENTER</select>
<start>KEY_SELECT</start>
<back>KEY_ESC</back>
<back>KEY_EXIT</back>
<back>KEY_BACK</back>
<back>KEY_CLOSE</back>
<record>KEY_RECORD</record>
<play>KEY_PLAY</play>
<play>KEY_PLAYPAUSE</play>
<pause>KEY_PAUSE</pause>
<stop>KEY_STOP</stop>
<stop>KEY_STOPCD</stop>
<forward>KEY_FASTFORWARD</forward>
<reverse>KEY_REWIND</reverse>
<volumeplus>KEY_VOLUMEUP</volumeplus>
<volumeminus>KEY_VOLUMEDOWN</volumeminus>
<channelplus>KEY_CHANNELUP</channelplus>
<channelminus>KEY_CHANNELDOWN</channelminus>
<skipplus>KEY_NEXTSONG</skipplus>
<skipminus>KEY_PREVIOUSSONG</skipminus>
<title>KEY_TITLE</title>
<subtitle>KEY_SUBTITLE</subtitle>
<language>KEY_LANGUAGE</language>
<mute>KEY_MUTE</mute>
<power>KEY_POWER</power>
<myvideo>KEY_VIDEO</myvideo>
<mymusic>KEY_AUDIO</mymusic>
<mypictures>KEY_MHP</mypictures>
<mytv>KEY_TV</mytv>
<one>KEY_1</one>
<two>KEY_2</two>
<three>KEY_3</three>
<four>KEY_4</four>
<five>KEY_5</five>
<six>KEY_6</six>
<seven>KEY_7</seven>
<eight>KEY_8</eight>
<nine>KEY_9</nine>
<zero>KEY_0</zero>
<red>KEY_RED</red>
<green>KEY_GREEN</green>
<yellow>KEY_YELLOW</yellow>
<blue>KEY_BLUE</blue>
<menu>KEY_MENU</menu>
<info>KEY_INFO</info>
<info>KEY_PROPS</info>
<start>KEY_HOME</start>
<display>KEY_ANGLE</display>
<recordedtv>KEY_PVR</recordedtv>
<teletext>KEY_TEXT</teletext>
</remote>
</lircmap>
Wichtig ist hier die Stelle mit dem namen remote device. Als Wert wird hier der vorhin in der lirc.conf vergebene Name eingetragen.
Starten und Stoppen von XBMC mit der Fernbedinung
Auch das Starten und Stoppen von XBMC mit der Fernbedienung ist möglich. Ich habe mir hierzu ein Hilfsskript geschreiben.
Doch zuerst muss man noch den Powerknopf mit einem Befehl (Skript) verknüpfen.
Dies macht man in der Datei /etc/lirc/lircmd.conf mit folgendem Inhalt:
begin
prog = irexec
button = KEY_POWER
config = /root/xbmcstartstop.sh&
end
Beim drücken vom Powerknopf wird nun das Skript /root/xbmcstartstop.sh ausgeführt.
Dieses Skript sieht dann so aus:
#!/bin/bash
SERVICE='xbmc-standalone'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "$SERVICE service running"
~/xbmc stop
else
echo "$SERVICE is not running"
~/xbmc start
fi