Für den Prototyp kam eine vorhandene Logitech-Fernbedienung zum Einsatz, deren Tastenbelegungen wir später auf die kompaktere Fernbedienung Seki Slim übertrugen [5]. Mit dem folgenden Befehl zeichneten wir lediglich die Tasten “Power”, “Vor”, “Zurück”, “Lauter”, “Leiser” und “Pause” auf:
$ sudo irrecord /etc/lirc/Logi.conf
Falls der Befehl beim von Ihnen verwendeten Modell Schwierigkeiten macht, ergänzen Sie den Aufruf um den Parameter -f, der den Raw-Modus von Irrecord aktiviert.
@L.Die Konfigurationsdatei Logi.conf binden Sie anschließend in die Hardware-Konfiguration /etc/lirc/hardware.conf ein (Listing 2). Dann richten Sie Irexec ein, das später ein weiteres Skript per Tastendruck ansteuert.
Listing 2
#/etc/lirc/hardware.conf LIRCD_ARGS="" START_IREXEC=true LOAD_MODULES=true DRIVER="default" DEVICE="/dev/lirc0" MODULES="" LIRCD_CONF="/etc/lirc/Logi.conf" LIRCMD_CONF=""
Die Konfiguration von Irexec wiederum findet sich in /etc/lirc/lircrc (Listing 3). Sie ordnet jedem Tastendruck einen Programmaufruf zu, in den ersten Zeilen beispielsweise der Taste KEY_POWER den Aufruf des Skripts remote.sh mit dem Argument power.
Listing 3
begin prog = irexec button = KEY_POWER config = sudo -u pi /home/pi/remote.sh power end begin prog = irexec button = KEY_NEXT config = sudo -u pi /home/pi/remote.sh next end begin prog = irexec button = KEY_PREVIOUS config = sudo -u pi /home/pi/remote.sh prev end begin prog = irexec button = KEY_VOLUMEUP config = sudo -u pi /home/pi/remote.sh volup end begin prog = irexec button = KEY_VOLUMEDOWN config = sudo -u pi /home/pi/remote.sh voldown end begin prog = irexec button = KEY_PLAY config = sudo -u pi /home/pi/remote.sh play end
Die Skripte
Das Skript remote.sh (Listing 4) nimmt die Argumente power, next, prev, volup, voldown und play entgegen. Im Skript lösen die Ereignisse verschiedene Aufrufe von XMMS2 aus, sodass der Player einen Titel vor- oder zurückspringt respektive die Lautstärke senkt oder erhöht.
Das Argument power startet das Erkennen eines QR-Codes (Zeile 6). Dazu ruft das Skript das Programm Zbarcam auf. Dieses liest die Daten über die Webcam ein und gibt die erkannten Inhalte auf der Standardausgabe aus. Diese Ausgabe liest wiederum das Skript rbar.sh ein.
Die Option --prescale=320x240 reduziert die Auflösung der Kamera – die vorgegebene HD-Auflösung wäre viel zu detailliert und zu rechenintensiv. Der Schalter --nodisplay deaktiviert das Ausgabefenster, das Sie im Skript nicht brauchen.
Listing 4
#!/bin/bash
AUDIODEV=hw:0
arg="$1"
case $arg in
"power")
zbarcam --nodisplay -Sdisable -Sqrcode.enable --prescale=320x240 /dev/video0 | /home/pi/rbar.sh
;;
"next")
echo "Next Song"
xmms2 next
;;
"prev")
echo "Previous Song"
xmms2 prev
;;
"volup")
echo "volume 5 up"
xmms2 server volume +5
;;
"voldown")
echo "volume 5 down"
xmms2 server volume -5
;;
"play")
echo "toggle playback"
xmms2 toggle
status=$(xmms2 current)
if [[ "$status" =~ ^Paused ]]; then
play -q /home/pi/no.wav
fi
;;
esac
Das Verarbeiten der erkannten QR-Code-Inhalte geschieht schließlich im Skript rbar.sh (Listing 5). Den zweizeiligen Text aus dem QR-Code sehen Sie in Listing 6: In der ersten Zeile steht der Interpret, in der zweiten der Titel des Albums. Daher liest rbar.sh in Zeile 5 und 6 zwei Eingaben. Die Zeilen 8 und 10 legen die Eingaben in die Variablen $artist und $album ab. Anschließend beendet das Skript mit killall zbarcam in Zeile 13 das Erkennen des QR-Codes.
Falls alles klappt, spielt das Skript einen lustigen Jingle ab, und die Wiedergabe startet. Ansonsten erklingt ein alternativer Ton, der auf einen Fehler hinweist. Auch dafür sollten Sie einen spaßigen Laut aussuchen: Das hilft dabei, im Fehlerfall die Frustration der kleinen Bediener in Grenzen zu halten.
Listing 5
#!/bin/bash
AUDIODEV=hw:0
while true; do
read qr
read qr2
if [[ "$qr" =~ ^QR ]]; then
artist=$(echo $qr | cut -d':' -f 3)
echo "artist: $artist"
album=$(echo $qr2 | cut -d':' -f 2-)
echo "album: $album"
if [[ "$album" =~ ^http ]]; then
killall zbarcam
xmms2 stop
xmms2 clear
xmms2 add $album
play -q /home/pi/source/rbar/ok.wav
xmms2 play
exit
s=""
else
s=$(xmms2 search album:"$album" | egrep -e "$album")
fi
if [[ -n "$s" ]]; then
killall zbarcam
xmms2 stop
xmms2 clear
xmms2 add album:"$album" -o "tracknr"
play -q /home/pi/source/rbar/ok.wav
xmms2 play
exit
else
xmms2 stop
play -q /home/pi/source/rbar/no.wav
fi
sleep 5
fi
done
Listing 6
artist:Axel Scheffler album:Der Gruffelo
QR-Codes generieren
Die QR-Codes zu den Alben erzeugen Sie mit dem Programm Qrencode auf der Kommandozeile. Erstellen Sie zu jedem QR-Code eine kleine Text-Datei qr.txt, die in zwei Zeilen die beiden Einträge für artist: und album: enthält. Mit folgendem Aufruf gibt die Software den QR-Code als PNG-Datei aus:





