Raspi Infrarot-Empfänger für Fernbedienung (LIRC-Installation und IREXEC aktivieren)
Kategorien: Raspberry Pi
Ohne Frage ist der Haupteinsatzbereich eines Raspberry Pi’s der eines Mediacenters.
Für rund 40 Euro (ohne das Beiwerk wie Netzteil, SD-Karte, HDMI-Kabel, Fernbedienung, …) bekommt man ein wirklich geniales kleines, genügsames Gerät um den Fernseher “Smart” zu machen. Meistens hat man ja das weitere Zubehör noch irgendwo rumliegen und kommt dann vielleicht auf 10-15 Euro Zusatzkosten.
Ich nutze jetzt seit über einem Jahr einen Raspberry Pi 2 als Mediacenter und die kleine Kiste läuft Tag und Nacht, da sie ja auch sehr stromsparend ist. Tag und Nacht wären Pi mal Daumen rund 13 Euro Stromkosten im Jahr.
Auch muss ich nur ganz selten mal neustarten. Ein recht stabiles System und durch die ausreichende passive Kühlung (der Sommer 2015 war ja richtig heiß) ist er auch mucksmäuschenstill und mit einer entsprechenden Bedieneroberfläche kommt man auch ruckelfrei durch die Menüs der Mediacenter-Software.
Sogar HD-Material lässt sich ruckelfrei abspielen. Man hat Internetradio, Youtube, und viele weitere Dinge, die man durch Zusatzapps auf seinem Mediacenter installieren kann.
Wer also ein megagünstiges, aber dennoch gutes Mediacenter haben möchte, macht damit keinen Fehler.
Einziges Manko ist, dass wir ja nicht unbedingt eine Tastatur und Maus im Wohnzimmer haben wollen, um das Mediacenter zu bedienen. Sicher gibt es für das Mediacenter (wir werden Kodi verwenden) einige Apps für das Smartphone, mit dem man dann sein Mediacenter bedienen kann und der ein oder andere findet das toll, aber ich muss sagen, dass ich lieber eine richtige Fernbedienung benutze, denn man hat dort die Haptik der Tasten und keine plane Glasfläche auf die man immer erst schauen muss, wenn man eine Taste drücken möchte.
So kann man schön im Dunkeln liegen und mit einer herkömmlichen Fernbedienung sein Mediacenter blind steuern.
Unsere Methode ist die günstigste um den Raspi Fernbedienungstauglich zu machen, sie verbraucht keinen USB-Anschluss wie eine fertige Lösung, setzt aber ein wenig Bastelei voraus, aber wer hier liest, der will das ja auch so. 🙂
Und wir können jede x-beliebige Fernbedienung nehmen, da wir sie unter Linux kinderleicht anlernen können. Das geht recht fix und man kann seine Fernbedienung ganz individuell gestalten, oder aber auch die seines Lieblingsgeräts verwenden, an die man sich so sehr gewöhnt hat.
Fangen wir mit dem Hardware-Part an. Was brauchen wir? Zum Testen erstmal:
- 1 x Raspberry Pi (mit lauffähigem Raspian)
- 1 x Breadboard
- 1 x Breakout-Board GPIO-Pins (optional. Alternativ gehen natürlich auch drei Drahtbrücken Male/Female)
- 1 x Infrarot-Modul TSOP4838 (Kostenpunkt ~0,60 Euro)
Bei dem IR-Modul gehen auch alle anderen aus der 48er-Reihe. (Es gibt auch noch eine 22er-Reihe 2230, … Die müssten auch gehen, habe ich aber nicht ausprobiert. Falls vorhanden, einfach mal ausprobieren. Die 48er-Reihe deckt aber die wichtigsten Infrarot-Codeverfahren ab. Mehr Hintergrundinfo dazu hier.)
Die letzten beide Werte nach der Serie geben die Frequenz an, in der gesendet und empfangen wird. Unserer arbeitet im 38 kHz-Bereich.
Ein weiterer Vorteil dieses Moduls ist, dass es keinen direkten Sichtkontakt zum Sender benötigt. Man kann es also auch sehr schön etwas versteckt hinter dem Fernseher anbringen.
Ok, werfen wir zuerst mal einen Blick ins Datenblatt der TSOP48xx-IR-Diode … Wir sehen dort die Pinbelegung der drei Pins und einen Spannungsbereich, der zwischen 2,5 V und 5,5 V liegt.
Auf der zweiten Seite des Datenblatts sehen wir auch noch eine Beispielschaltung. Hier werden optional noch ein Widerstand und ein Elektrolyt-Kondensator verwendet um Spannungen zu glätten.
Darauf kann man aber verzichten. Ich denke mal, dass der Spannungsregler im Raspi einwandfrei arbeitet, dann kommt es auch nicht zu großen Spannungspitzen.
So, jetzt haben wir alle Informationen die wir benötigen und bauen eine Testanordnung auf einem Breadbord auf:
Hier auch noch einmal der Schaltplan:
Das ist auch schon alles. Jetzt müssen wir natürlich noch dafür sorgen, dass das Infrarotmodul auch softwareseitig arbeitet.
Dazu starten wir unseren Raspberry. Ich setze voraus, dass ein installiertes lauffähiges Raspian auf dem Raspberry läuft.
Falls Ihr eine grafische Benutzeroberfläche benutzt, so öffnet einen Terminal um auf die Konsolenebene wechseln zu können.
Im folgenden Schritt werden wir LIRC installieren. LIRC steht für “Linux Infrared Remote Control”. Es ist ein Programm für Linux, mit dessen Hilfe man Befehle von IR-Fernbedienungen in Programmbefehle umsetzen kann. Nötig ist dafür lediglich ein Infrarotempfänger und den haben wir ja an unserem Raspberry am Pin 18 hängen.
Da unsere Fernbedienung noch nicht mit dem IR-Empfänger vertraut ist, müssen diese beiden Teile jetzt aufeinander abgestimmt werden. Mit einfachen Worten: Wir werden, nachdem wir LIRC installiert haben, unsere Fernbedienung anlernen.
Die Installation von LIRC geht dabei ganz einfach mittels sudo und apt-get.
1 |
sudo apt-get install lirc |
Eventuelle Fragen mit Yes beantworten.
Um die benötigten Module per Hand zu laden und diese zu testen gibt es den Befehl modprobe. Bei dem lirc_rpi ist im weiteren Verlauf die korrekte Belegung der GPIO Pins zu beachten! In unserem Falle hängt der IR-Empfänger ja mit der DATA-Leitung an Pin 18.
Wir geben nun folgendes ein und bestätigen mit Return:
1 |
sudo modprobe lirc_dev |
Sollte nun gar nichts passieren ist alles in Ordnung und LIRC ist bereit. Falls nicht, erscheint eine Fehlermeldung in Form von
1 |
FATAL: Module lirc_dev not found. |
Falls das passiert ist, müsst Ihr Euch mal im Netz umschauen. Der Fehler könnte dann viele Gründe haben, die ich jetzt an dieser Stelle gar nicht alle berücksichtigen kann. Es würde dann aber definitiv nicht an dem IR-Modul, oder dem Aufbau liegen, da ja der LIRC-Treiber unabhängig von der Hardware installiert wird. Das Problem ist dann in der Linux-Konfiguration zu suchen.
Jetzt müssen wir dafür sorgen, dass beim Bootvorgang die LIRC-Unterstützung immer geladen wird. Dazu müssen wir eine Datei im /boot-Verzeichnis bearbeiten. Ich verwende als Texteditor VIM. Wenn Ihr nano verwendet, dann statt “vi” “nano” tippen.
1 |
sudo vi /boot/config.txt |
In die config.txt fügen wir folgende Zeile an das Ende der Datei ein:
1 |
dtoverlay=lirc-rpi,gpio_out_pin=18 |
Habt Ihr einen anderen Pin als 18 genommen, so müsst Ihr den verwendeten Pin statt der 18 an dieser Stelle eintragen.
Wir speichern die Datei nun ab und schließen sie wieder.
Jetzt müssen wir noch eine Datei anpassen. Ruft dazu folgenden Befehl auf:
1 |
sudo vi /etc/modules |
In dieser Textdatei tragen wir auch am Ende des Inhalts folgende zwei Zeilen ein:
1 2 |
lirc_dev lirc_rpi gpio_in_pin=18 |
Auch hier beachten, dass der korrekte Pin eingegeben wird, falls abweichend von meinem Tutorial.
Wir speichern und schließen die Datei.
Jetzt können wir das LIRC-Device in unserem /dev-Verzeichnis ermitteln. Hierzu tippen wir folgendes ein:
1 |
ls -l /dev/lir* |
und es muss als Ausgabe das Device lirc0 erscheinen.
1 |
crw-rw---T 1 root video 248, 0 Jan 5 12:16 /dev/lirc0 |
Abschließend muss in der Config-Datei von LIRC das Device und die Module eingetragen werden:
1 |
sudo vi /etc/lirc/hardware.conf |
Wir tragen folgendes entweder neu ein, oder ändern vorhandenes auf die folgenden Einstellungen:
1 2 3 4 |
LIRCD_ARGS="--uinput" DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi" |
Jetzt sind wir so weit fertig und starten den LIRC-Demon neu. Dieser sollte nun ohne meckern neu starten:
1 |
sudo /etc/init.d/lirc restart |
Test unseres IR-Empfängers
Jetzt kommen wir zu dem Punkt, an dem wir unseren Empfänger (und unseren Sender) auf ihre grundlegende Funktionalität hin überprüfen müssen. Wir können hierzu mode2 nutzen um die RAW-Ausgabe unseres Empfängers zu sehen. Beim Drücken von beliebigen Tasten auf einer IR-Fernbedienung sollten abwechselnd space und pulse Einträge erscheinen. Kleiner Hinweis: Es gibt ein paar ganz wenige Fernbedienungen die nicht geeignet sind für diese Herangehensweise. Ich hatte so eine von T-Online die mit dem Gerät “T-Online Vision S100” mitgeliefert wurde. Sieht zwar aus wie eine Fernbedienung, fasst sich auch an wie eine Fernbedienung ist aber bei genauerer Betrachtungsweise gar keine Fernbedienung, sondern ein Gerät mit einer Tastaturemulation. Diese Art von Fernbedienung funktioniert nicht. Sind aber eher die Ausnahmen solche Fernbedienungen.
Ok, testen wir. Hierzu müssen wir den eben neu gestarteten LIRC-Demon stoppen, denn mode2 läuft nicht mit gestartetem Demon.
1 |
sudo /etc/init.d/lirc stop |
Danach starten wir mode2 mit folgendem Befehl:
1 |
sudo mode2 -d /dev/lirc0 |
Jetzt halten wir unsere Fernbedienung vor den Empfänger und drücken mal ein paar beliebige Tasten. Wird die Fernbedienung erkannt, rattern Wort- und Zahlenpaare (pulse und space) herunter.
Beispielausgabe:
1 2 3 4 5 6 7 8 9 |
pulse 617 space 506 pulse 623 space 501 pulse 617 space 1623 pulse 622 space 501 [...] |
Dann haben wir alles richtig gemacht und unser TSOP4838 erkennt unsere Fernbedienung und jetzt, vereinfacht ausgedrückt, müssen wir der Fernbedienung nur noch beibringen, was sie zu sagen hat, damit unser Raspberry weiß, was er mit dem Befehl xyz anzufangen hat.
Hierzu konfigurieren wir nun unseren Sender, sprich unsere Fernbedienung.
Senderkonfiguration
Es gibt eine initiale Konfigurationsdatei namens lircd.conf, die in der Regel leer ist. Es können nun entweder bestehende Konfigurationsdateien genutzt werden, so fern es eine Konfigurationsdatei für diese Fernbedienung gibt, oder man lernt sie einfach an.
Auf den Sourceforge-Projektseiten von LIRC findet man eine Reihe von verschiedenen Fernbedienungen diverser Hersteller. (http://lirc.sourceforge.net/remotes/) Falls die passende Datei dabei ist, dann öffnet diese am einfachsten im Browser, markiert den gesamten Inhalt, öffnet mittels
1 |
sudo vi /etc/lirc/lircd.conf |
die lircd.conf-Datei und fügt den kopierten Inhalt dort rein.
Alternativ unter der Kommandozeilenebene wie folgt (an Hand eines Beispiels für eine Yamaha-RAX9-Fernbedienung) die vier Zeilen nacheinander abarbeiten:
1 2 3 4 |
sudo mkdir lirc sudo cd lirc sudo wget http://lirc.sourceforge.net/remotes/yamaha/RAX9 sudo cp RAX9 /etc/lirc/lircd.conf |
Auch gibt es auf Eurem Raspi ein LIRC-Verzeichnis “/usr/share/lirc/remotes/”, in dem Fernbedienungsconfig-Dateien gefunden werden können.
1 |
sudo ls /usr/share/lirc/remotes/ |
Bei einem Fund könnt Ihr ganz einfach die Datei kopieren (als Beispiel Acer Aspire 6530G):
1 |
sudo cp /usr/share/lirc/remotes/acer/lircd.conf.Aspire_6530G /etc/lirc/lircd.conf |
Ich habe meine angelernt, da ich hier eine Fernbedienung von einem nicht mehr genutzten Mediacenter hatte (Modell eGreat) und diese natürlich nicht zu finden war.
Dafür gehen wir wie folgt vor:
Falls der LIRC-Demon noch läuft, so müssen wir ihn zuerst stoppen:
1 |
sudo /etc/init.d/lirc stop |
Jetzt starten wir das Tool mit dem wir die Tasten unserer Fernbedienung aufzeichnen können. Als Beispiel nehme ich meine eGreat-Fernbedienung:
1 |
sudo irrecord -H default -d /dev/lirc0 eGreat.conf |
Der Parameter “-H” ist der Treiber. Den können wir auf “default” setzen, da wir ja vorhin “default” in der LIRC-Config-Datei eingetragen hatten.
Der Parameter “-d” ist unser IR-Empfänger, das ja auf den Namen lirc0 hört.
“eGreat.conf” ist der Name der Aufzeichnungsdatei und vor dem .conf ist gleich der Name der Fernbedienung innerhalb der Datei, die hier erstellt wird.
Es folgt ein Startbildschirm mit viel Text und der Aufforderung die Aufzeichnung nun mit “Return” zu starten.
Im nächsten Schritt wird man aufgefordert viele unterschiedliche Tasten auf der Fernbedienung nach Möglichkeit je Taste für eine Sekunde zu drücken. Sie erzeugt dann einen Punkt auf dem Bildschirm. Es sollten aber pro Taste nicht mehr als zehn Punkte sein (also nicht zu lange auf eine Taste drücken) und man sollte mindestens 80 Zeichen auf dem Bildschirm – was umgerechnet 2 Zeilen sind – eingeben, bevor man aufhört.
Wir starten jetzt mir “Return” und tippen auf unserer Fernbedienung los. Nach der ersten Reihe kommt eine kurze Ausgabe die ungefähr wie folgt lautet:
1 2 3 |
................................................................................ Found const length: 108081 Please keep on pressing buttons like described above. |
Also noch eine Reihe. Man sollte nicht zu lange Pause dazwischen machen, denn nach 10 Sekunden Inaktivität erfolgt ein Abbruch. Dann muss man von Vorne beginnen.
Haben wir auch brav die zweite Reihe abgeschlossen, erscheint eine Meldung mit ungefährem Inhalt:
1 2 3 4 5 6 7 8 9 10 |
Space/pulse encoded remote control found. Signal length is 67. Found possible header: 9053 4439 Found trail pulse: 633 Found repeat code: 9057 2184 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) |
Unsere Fernbedienung wurde analysiert und nun können wir die Button-Namen für unsere Tasten zuordnen.
Hier mal eine Liste mit allen rund 450 möglichen Tasten die man vergeben kann. Wir benötigen sie später, damit wir mit der entsprechenden Button-Taste eine Aktion zum Durchführen zuordnen können. Die meisten Button-Namen sind ja selbsterklärend.
Die Liste kann man auch mit dem folgenden Parameter aufrufen:
1 |
sudo irrecord -l |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 |
KEY_0 KEY_102ND KEY_1 KEY_2 KEY_3 KEY_4 KEY_5 KEY_6 KEY_7 KEY_8 KEY_9 KEY_A KEY_AB KEY_ADDRESSBOOK KEY_AGAIN KEY_ALTERASE KEY_ANGLE KEY_APOSTROPHE KEY_ARCHIVE KEY_AUDIO KEY_AUX KEY_B KEY_BACK KEY_BACKSLASH KEY_BACKSPACE KEY_BASSBOOST KEY_BATTERY KEY_BLUE KEY_BLUETOOTH KEY_BOOKMARKS KEY_BREAK KEY_BRIGHTNESS_CYCLE KEY_BRIGHTNESSDOWN KEY_BRIGHTNESSUP KEY_BRIGHTNESS_ZERO KEY_BRL_DOT10 KEY_BRL_DOT1 KEY_BRL_DOT2 KEY_BRL_DOT3 KEY_BRL_DOT4 KEY_BRL_DOT5 KEY_BRL_DOT6 KEY_BRL_DOT7 KEY_BRL_DOT8 KEY_BRL_DOT9 KEY_C KEY_CALC KEY_CALENDAR KEY_CAMERA KEY_CANCEL KEY_CAPSLOCK KEY_CD KEY_CHANNEL KEY_CHANNELDOWN KEY_CHANNELUP KEY_CHAT KEY_CLEAR KEY_CLOSE KEY_CLOSECD KEY_COFFEE KEY_COMMA KEY_COMPOSE KEY_COMPUTER KEY_CONFIG KEY_CONNECT KEY_CONTEXT_MENU KEY_COPY KEY_CUT KEY_CYCLEWINDOWS KEY_D KEY_DASHBOARD KEY_DATABASE KEY_DEL_EOL KEY_DEL_EOS KEY_DELETE KEY_DELETEFILE KEY_DEL_LINE KEY_DIGITS KEY_DIRECTION KEY_DIRECTORY KEY_DISPLAY_OFF KEY_DISPLAYTOGGLE KEY_DOCUMENTS KEY_DOLLAR KEY_DOT KEY_DOWN KEY_DVD KEY_E KEY_EDIT KEY_EDITOR KEY_EJECTCD KEY_EJECTCLOSECD KEY_EMAIL KEY_END KEY_ENTER KEY_EPG KEY_EQUAL KEY_ESC KEY_EURO KEY_EXIT KEY_F10 KEY_F11 KEY_F12 KEY_F13 KEY_F14 KEY_F15 KEY_F1 KEY_F16 KEY_F17 KEY_F18 KEY_F19 KEY_F20 KEY_F21 KEY_F22 KEY_F23 KEY_F24 KEY_F2 KEY_F KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F8 KEY_F9 KEY_FASTFORWARD KEY_FAVORITES KEY_FILE KEY_FINANCE KEY_FIND KEY_FIRST KEY_FN KEY_FN_1 KEY_FN_2 KEY_FN_B KEY_FN_D KEY_FN_E KEY_FN_ESC KEY_FN_F KEY_FN_F10 KEY_FN_F1 KEY_FN_F11 KEY_FN_F12 KEY_FN_F2 KEY_FN_F3 KEY_FN_F4 KEY_FN_F5 KEY_FN_F6 KEY_FN_F7 KEY_FN_F8 KEY_FN_F9 KEY_FN_S KEY_FORWARD KEY_FORWARDMAIL KEY_FRAMEBACK KEY_FRAMEFORWARD KEY_FRONT KEY_G KEY_GAMES KEY_GOTO KEY_GRAPHICSEDITOR KEY_GRAVE KEY_GREEN KEY_H KEY_HANGEUL KEY_HANJA KEY_HELP KEY_HENKAN KEY_HIRAGANA KEY_HOME KEY_HOMEPAGE KEY_HP KEY_I KEY_INFO KEY_INSERT KEY_INS_LINE KEY_ISO KEY_J KEY_K KEY_KATAKANA KEY_KATAKANAHIRAGANA KEY_KBDILLUMDOWN KEY_KBDILLUMTOGGLE KEY_KBDILLUMUP KEY_KEYBOARD KEY_KP0 KEY_KP1 KEY_KP2 KEY_KP3 KEY_KP4 KEY_KP5 KEY_KP6 KEY_KP7 KEY_KP8 KEY_KP9 KEY_KPASTERISK KEY_KPCOMMA KEY_KPDOT KEY_KPENTER KEY_KPEQUAL KEY_KPJPCOMMA KEY_KPLEFTPAREN KEY_KPMINUS KEY_KPPLUS KEY_KPPLUSMINUS KEY_KPRIGHTPAREN KEY_KPSLASH KEY_L KEY_LANGUAGE KEY_LAST KEY_LEFT KEY_LEFTALT KEY_LEFTBRACE KEY_LEFTCTRL KEY_LEFTMETA KEY_LEFTSHIFT KEY_LINEFEED KEY_LIST KEY_LOGOFF KEY_M KEY_MACRO KEY_MAIL KEY_MAX KEY_MEDIA KEY_MEDIA_REPEAT KEY_MEMO KEY_MENU KEY_MESSENGER KEY_MHP KEY_MINUS KEY_MODE KEY_MOVE KEY_MP3 KEY_MSDOS KEY_MUHENKAN KEY_MUTE KEY_N KEY_NEW KEY_NEWS KEY_NEXT KEY_NEXTSONG KEY_NUMERIC_0 KEY_NUMERIC_1 KEY_NUMERIC_2 KEY_NUMERIC_3 KEY_NUMERIC_4 KEY_NUMERIC_5 KEY_NUMERIC_6 KEY_NUMERIC_7 KEY_NUMERIC_8 KEY_NUMERIC_9 KEY_NUMERIC_POUND KEY_NUMERIC_STAR KEY_NUMLOCK KEY_O KEY_OK KEY_OPEN KEY_OPTION KEY_P KEY_PAGEDOWN KEY_PAGEUP KEY_PASTE KEY_PAUSE KEY_PAUSECD KEY_PC KEY_PHONE KEY_PLAY KEY_PLAYCD KEY_PLAYER KEY_PLAYPAUSE KEY_POWER KEY_POWER2 KEY_PRESENTATION KEY_PREVIOUS KEY_PREVIOUSSONG KEY_PRINT KEY_PROG1 KEY_PROG2 KEY_PROG3 KEY_PROG4 KEY_PROGRAM KEY_PROPS KEY_PVR KEY_Q KEY_QUESTION KEY_R KEY_RADIO KEY_RECORD KEY_RED KEY_REDO KEY_REFRESH KEY_REPLY KEY_RESERVED KEY_RESTART KEY_REWIND KEY_RFKILL KEY_RIGHT KEY_RIGHTALT KEY_RIGHTBRACE KEY_RIGHTCTRL KEY_RIGHTMETA KEY_RIGHTSHIFT KEY_RO KEY_S KEY_SAT KEY_SAT2 KEY_SAVE KEY_SCALE KEY_SCREEN KEY_SCROLLDOWN KEY_SCROLLLOCK KEY_SCROLLUP KEY_SEARCH KEY_SELECT KEY_SEMICOLON KEY_SEND KEY_SENDFILE KEY_SETUP KEY_SHOP KEY_SHUFFLE KEY_SLASH KEY_SLEEP KEY_SLOW KEY_SOUND KEY_SPACE KEY_SPELLCHECK KEY_SPORT KEY_SPREADSHEET KEY_STOP KEY_STOPCD KEY_SUBTITLE KEY_SUSPEND KEY_SWITCHVIDEOMODE KEY_SYSRQ KEY_T KEY_TAB KEY_TAPE KEY_TEEN KEY_TEXT KEY_TIME KEY_TITLE KEY_TUNER KEY_TV KEY_TV2 KEY_TWEN KEY_U KEY_UNDO KEY_UNKNOWN KEY_UP KEY_UWB KEY_V KEY_VCR KEY_VCR2 KEY_VENDOR KEY_VIDEO KEY_VIDEO_NEXT KEY_VIDEOPHONE KEY_VIDEO_PREV KEY_VOICEMAIL KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_W KEY_WAKEUP KEY_WIMAX KEY_WLAN KEY_WORDPROCESSOR KEY_WWW KEY_X KEY_XFER KEY_Y KEY_YELLOW KEY_YEN KEY_Z KEY_ZENKAKUHANKAKU KEY_ZOOM KEY_ZOOMIN KEY_ZOOMOUT KEY_ZOOMRESET BTN_0 BTN_1 BTN_2 BTN_3 BTN_4 BTN_5 BTN_6 BTN_7 BTN_8 BTN_9 BTN_A BTN_B BTN_BACK BTN_BASE BTN_BASE2 BTN_BASE3 BTN_BASE4 BTN_BASE5 BTN_BASE6 BTN_C BTN_DEAD BTN_DIGI BTN_EXTRA BTN_FORWARD BTN_GAMEPAD BTN_GEAR_DOWN BTN_GEAR_UP BTN_JOYSTICK BTN_LEFT BTN_MIDDLE BTN_MISC BTN_MODE BTN_MOUSE BTN_PINKIE BTN_RIGHT BTN_SELECT BTN_SIDE BTN_START BTN_STYLUS BTN_STYLUS2 BTN_TASK BTN_THUMB BTN_THUMB2 BTN_THUMBL BTN_THUMBR BTN_TL BTN_TL2 BTN_TOOL_AIRBRUSH BTN_TOOL_BRUSH BTN_TOOL_DOUBLETAP BTN_TOOL_FINGER BTN_TOOL_LENS BTN_TOOL_MOUSE BTN_TOOL_PEN BTN_TOOL_PENCIL BTN_TOOL_QUADTAP BTN_TOOL_RUBBER BTN_TOOL_TRIPLETAP BTN_TOP BTN_TOP2 BTN_TOUCH BTN_TR BTN_TR2 BTN_TRIGGER BTN_WHEEL BTN_X BTN_Y BTN_Z |
Nehmen wir mal an, es gibt eine Taste “1” auf unserer Fernbedienung, dann tippen wir jetzt “KEY_1” ein
1 2 |
Please enter the name for the next button (press <ENTER> to finish recording) KEY_1 |
Es folgt die Anweisung nun die entsprechende Taste “1” zu drücken:
1 |
Now hold down button "KEY_1". |
Das machen wir nun für alle Tasten auf der Fernbedienung, oder zumindest wenigstens für die, die wir später in unserem Mediacenter benutzen wollen.
Als Endergebnis sieht meine “eGreat”-Datei dann so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# Please make this file available to others # by sending it to <lirc@bartelmus.de> # # this config file was automatically generated # using lirc-0.9.0-pre1(default) on Thu May 7 17:16:16 2015 # # contributed by # # brand: egreatIR # model no. of remote control: # devices being controlled by this remote: # repeat 9068 2174 # gap 108071 #include "/usr/share/lirc/remotes/hersteller/myRemote.conf" begin remote name egreatIR bits 16 flags SPACE_ENC|CONST_LENGTH eps 30 aeps 100 header 9065 4431 one 641 1602 zero 641 480 ptrail 640 repeat 9068 3174 pre_data_bits 16 pre_data 0x202 gap 108071 toggle_bit_mask 0x0 begin codes KEY_POWER 0xB24D KEY_EJECTD 0xF00F KEY_1 0x807F KEY_2 0x40BF KEY_3 0xC03F KEY_4 0x20DF KEY_5 0xA05F KEY_6 0x609F KEY_7 0xE01F KEY_8 0x10EF KEY_9 0x906F KEY_0 0x00FF KEY_MENU 0xA25D KEY_TITLE 0xC837 KEY_VOLUMEUP 0xA857 KEY_VOLUMEDOWN 0x38C7 KEY_MUTE 0xC23D KEY_AUDIO 0xE817 KEY_AGAIN 0x7887 KEY_NEXT 0xF807 KEY_HOME 0x58A7 KEY_RETURN 0x42BD KEY_UP 0xD02F KEY_DOWN 0x708F KEY_LEFT 0x08F7 KEY_RIGHT 0x8877 KEY_OK 0xB04F KEY_INFO 0xB847 KEY_TIME 0xE21D KEY_REWIND 0x6897 KEY_FORWARD 0x9867 KEY_PLAY 0x02FD KEY_STOP 0x827D KEY_SUBTITLE 0x18E7 KEY_SLOW 0x52AD KEY_REPEAT 0x629D KEY_BOOKMARKS 0x48B7 KEY_ZOOM 0xD827 KEY_SCALE 0x28D7 KEY_SETUP 0x30CF KEY_TV 0x22DD KEY_RED 0xCA35 KEY_GREEN 0xDA25 KEY_YELLOW 0xEA15 KEY_BLUE 0x2AD5 end codes end remote |
Solltet Ihr den Vorgang abbrechen, oder unter dem gleichen Dateinamen noch einmal starten und es existiert diese Datei bereits, wird das mit folgendem Fehler quittiert:
1 |
irrecord: file "eGreat.conf" does not contain valid data |
Dann löscht einfach die Datei und dann könnt Ihr die Anlernprozedur noch einmal durchführen.
1 |
sudo rm eGreat.conf |
Um den Vorgang zu beenden lasst Ihr das Key_-Input-Feld leer und drückt Return, dann wird die Datei gespeichert.
Um das Ganze jetzt abzuschließen, müssen wir die eben erstellte Datei als lircd.conf in das entsprechende Verzeichnis kopieren bzw. anhängen.
1 |
cat eGreat.conf >> /etc/lirc/lircd.conf |
Anhängen deshalb, weil wir auch mehr als nur eine Fernbedienung in der lircd.conf hinterlegen können. Hierzu legen wir eine neue Anlernprozedur wieder mit
1 |
sudo irrecord -H default -d /dev/lirc0 DATEINAME.conf |
an und wiederholen die Schritte von Oben.
Nun müssen wir LIRC natürlich wieder neu starten mit
1 |
sudo /etc/init.d/lirc start |
Jetzt machen wir den alles entscheidenden Test und prüfen, ob unsere eben zugeordneten Tasten auch zu unseren Tasten passen, die wir auf unserer Fernbedienung drücken.
Dazu starten wir das Tool “irw” mit einem einfachen
1 |
irw |
Jetzt drücken wir eine Taste auf unserer Fernbedienung und es muss die entsprechende Ausgabe herauskommen. Nehmen wir die Taste “1” die wir mit “KEY_1” belegt haben (wir hätten sie auch “KEY_EJECTD” nennen können. Es geht nur darum, dass dieser Name später intern herangezogen wird um eine Aktion durchzuführen.) als Beispiel und drücken sie, dann erscheint auf dem Monitor folgendes:
1 |
000000000202807f 00 KEY_1 egreatIR |
Das heißt, die Taste 1 wird richtig erkannt für die Fernbedienung “egreatIR”. Hätten wir weitere Fernbedienungen, würde beim entsprechenden Tastendruck der Name der entstprechenden Fernbedienung erscheinen. Ich kenne aber keinen, der mehr als eine eingetragen hat, aber wie immer: “Machbar ist alles” 🙂
IREXEC aktivieren
Wollen wir zum Beispiel unabhängig von einem Mediacenter mit einer bestimmten Taste eine Aktion am Computer ausführen lassen, müssen wir irexec aktivieren, denn der LIRC-Demon dekodiert zwar die Signale der Fernbedienung, kann aber selbst keine Befehle ausführen.
Im LIRC-Paket ist daher ein Tool namens irexec, das eine Auswertungsdatei namens .lircrc benötigt.
Es können alle Befehle auf Tastendruck ausgeführt werden, die man auch in einem Terminal ausführen kann und darf.
Die Datei .lircrc sollte als versteckte Datei im Homeverzeichnis des Benutzers angelegt sein. Dort wird auch beim Ausführen von irexec als Erstes gesucht.
Damit diese Datei von allen Benutzern verwendet werden kann, muss man sie mit root-Rechten versehen und als /etc/lircrc und als /etc/lirc/lircrc ablegen.
Die .lircrc-Datei ist eine Textdatei und beinhaltet die Anweisungen, die mit den Tastendrücken der Fernbedienung ausgewertet werden sollen.
LIRC-Demon liest bei jeder Betätigung einer Fernbedienungstaste die Datei von oben nach unten ein und die Treffer werden der Reihe nach abgearbeitet.
Wichtig! Denn die Reihenfolge ist für den Befehl “mode” oder “flags” sehr wichtig.
Alle Anweisungen sind jeweils zu Blöcken zusammengefasst und starten mit einem “begin” und enden mit einem “end”. Andernfalls kann der Befehl nicht abgearbeitet werden und es kommt zu seltsamen Fehlern.
Hier mal ein Beispiel. Die folgende Anweisung bewirkt, dass beim Drücken der “Eject”-Taste (KEY_EJECTD haben wir ja LIRC weiter oben beigebracht) der Fernbedienung eine Glocke ertönt und danach der Rechner neu startet. Unabhängig, ob ich das im Kodi-Mediacenter mache, oder in der Eingabeaufforderung, da LIRC ständig im Hintergrund aktiv ist.
1 2 3 4 5 6 |
begin prog = irexec button = KEY_EJECTD repeat = 0 config = /home/BENUTZER/ownScripts/bellring && sudo shutdown -r now end |
Nur so am Rande: In dem “bellring”-Script ist der Befehl
1 |
aplay -D plughw:0,1 /home/BENUTZER/ownScripts/Bell2.wav |
hinterlegt. “aplay” ist ein kleines Tool, welches Sounds abspielt (kann auch mit apt-get installiert werden. aplay ist Bestandteil des Pakets alsa-utils. sudo apt-get install alsa-utils) und in dieser Konfiguration den Sound über das HDMI-Kabel an den Fernseher weiterleitet.
Detaillierte Informationen zu den Befehlen innerhalb der .lircr-Datei könnt Ihr am Besten hier auf der Ubuntuusers-Wiki nachlesen.
Damit irexec auch nach jedem Rechnerneustart aktiv ist, müssen wir das Ganze nun automatisch starten lassen.
Hierzu legen wir uns auch gleich ein elegantes Start/Stop-Script an, das wir in das /etc/init.d-Verzeichnis legen können.
sudo vi /etc/init.d/irexec
In die Datei schreiben wir folgenden Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#! /bin/sh # /etc/rc2.d/S99irexec ### BEGIN INIT INFO # Provides: irexec # Required-Start: $local_fs $network # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: irexec # Description: irexec-daemon start or stop ### END INIT INFO case "$1" in start) su BENUTZERNAME --command='/usr/bin/irexec -d /home/(NAME DES BENUTZERS)/.lircrc' ;; stop) killall /usr/bin/irexec ;; restart) killall /usr/bin/irexec su BENUTZERNAME --command='/usr/bin/irexec -d /home/(NAME DES BENUTZERS)/.lircrc' ;; *) echo "Usage: `basename $0` {start|stop|restart}" >&2 exit 64 ;; esac exit 0 |
Ich arbeite mit SUDO, daher “su” (Mein Benutzer hat in der sudo-Datei den Eintrag “BENUTZERNAME ALL=(ALL) NOPASSWD: ALL”.
Euer Benutzer muss die Datei ausführen, so wie die .lircrc öffnen dürfen und darüber hinaus die Rechte haben, die Anweisungen innerhalb der Datei ausführen zu dürfen. Den Befehl “shutdown” wie in meinem Beispiel darf ja nicht jeder Benutzer ausführen.
Jetzt müssen wir das Script noch ausführbar machen:
1 |
chmod u+x /etc/init.d/irexec |
Und am Ende wollen wir es ja mit dem Autostart verbinden:
1 |
update-rc.d irexec defaults |
So, wir haben es geschafft. Wenn wir nun unseren Rechner neu booten wird jedesmal LIRC und IREXEC gestartet und wir können die Anweisungen, die wir in der .lircrc-Datei erfasst haben, jederzeit mit unserer Fernbedienung ausführen lassen.
Im nächsten Teil werden wir unseren Versuchsaufbau als Endergebnis umsetzen. Die Schaltung ist ja nicht wirklich ein Hexenwerk, aber man kann Kabel löten üben in Verbindung mit dem Einsatz von Schrumpfschlauch.
Im übernächsten Teil werden wir Kodi installieren – und noch viel wichtiger – die Keymaps konfigurieren, damit unsere Fernbedienung sich geschmeidig in das Mediacenter einfügt und nicht nur mit den Standard-Tasten läuft.