Steuerung mit einer Infrarot-Fernbedienung und LIRC

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Tutorial: Raspberry Pi, Infrarot-Fernbedienung und LIRC

    Mit dem Raspberry Pi ist es einfach möglich, beliebige Funktionen mittels einer herkömmlichen Infrarot-Fernbedienung anzusteuern.

    Im Netz gibt es dazu viele Anleitungen, die aber oft schon (sehr) veraltet sind und nicht mehr funktionieren.

    Deshalb hier eine aktuelle Beschreibung (ursprünglich im April 2022, überprüft und ergänzt im November 2023).

    Voraussetzungen

    1. ein Raspberry Pi
    2. eine IR-Fernbedienung
    3. eine Infrarot-Empfänger-Diode
    4. etwas Software (LIRC) und ein bisschen Konfiguration

    1.) Der Raspberry

    Ich habe es aktuell mit einem Raspberry Pi 2B in Betrieb und zusätzlich mit einem Zero2W getestet.

    Betriebssysteme: Der 2B hat ein aktuelles Buster und der Zero2W ein aktuelles Bullseye installiert.

    2.) Die Fernbedienung(en)

    LIRC unterstützt sehr viele Fernbedienungen, siehe

    Falls aber die eigene nicht dabei sein sollte: Auch kein Problem, siehe weiter unten.

    Hier im Tutorial habe ich eine Pinnacle_RC1144201 verwendet.

    3.) Die IR-Empfänger-Diode

    z.B. eine Vishay TSOP31238

    1 = GND, 2 = VS, 3 = OUT

    Bei anderen Empfängern oder Implementierungen mag das Anschlussschema abweichen. Bitte unbedingt das dazugehörige Datenblatt lesen!

    Diese wird mit ihren drei Anschlüssen an die GPIO-Kontakte angeschlossen, bei mir an:

    • Pin 1 (3,3V)
    • Pin 6 (Ground)
    • Pin 11 (GPIO 17)

    Hier einfach einmal die Ausgabe von pinout bzgl. der GPIO-Pins:

    Um den verwendeten Pin bzw. den Anschluss dem Raspi bekannt zu geben, ist folgender Eintrag in der /boot/config.txt erforderlich:

    (einfach das '#' am Zeilenanfang entfernen)

    Code
    sudo nano /boot/config.txt
    Code
    # Uncomment this to enable infrared communication.
    dtoverlay=gpio-ir,gpio_pin=17

    4.) Die Software und die Konfiguration

    a) LIRC

    Installation des lirc Paketes:

    Code
    sudo apt update
    sudo apt install lirc

    Es werden damit u.a. einige Konfigurationsdateien angelegt in /etc/lirc/.

    Diese werden nun angepasst an den Raspberry Pi:

    Code
    sudo nano /etc/lirc/lirc_options.conf
    Code
    Orignal:
        driver = devinput
        device = auto
    
    Neu:
        driver = default
        device = /dev/lirc0

    Da der devinput Treiber nicht verwendet wird, sollte er auch komplett deaktiviert werden:

    Code
    cd /etc/lirc/lircd.conf.d
    sudo mv devinput.lircd.conf devinput.lircd.conf.dist

    b) Die Konfiguration der Fernbedienung für LIRC

    Auf http://lirc.sourceforge.net/remotes gibt es eine lange Liste von fertigen Konfigurationsdateien für unterstützte Fernbedienungen.

    Davon bitte die Passende herunterladen und sinnvoll benannt (muss mit .conf enden!) ablegen:

    Code
    /etc/lirc/lircd.conf.d/my_remote.conf

    Falls tatsächlich keine passende Datei zu finden ist, kann man sie sich auch selbst erzeugen durch "Aufnehmen" von Tastendrücken.

    Hinweis: Aus (berechtigungs-)technischen Gründen muss man sich bei dem Aufnahmekommando (sudo irrecord...) in einem Verzeichnis befinden, in dem man als normaler Benutzer Schreibrechte hat. Also z.B. in seinem Home-Verzeichnsi (/home/pi).

    Code
    irrecord --list-namespace     # listet die möglichen Tastencodes auf
    
    sudo irrecord -d /dev/lirc0  /etc/lirc/lircd.conf.d/my_remote.conf

    irrecord führt im Dialog durch den Aufnahmeprozess.

    Hinweis: Es kann sein, dass irrecord Probleme mit Störimpulsen meldet und abbricht. Die können z.B. von einer LED-Beleuchtung oder einem zu stark einstreuenden LED-Monitor her kommen. Deshalb sind insbesondere während der Aufnahme solche Störquellen zu minimieren! Selbst wenn irrecord keine diesbezügliche Störungen meldet, können sie das Aufnahmeergebnis verfälschen oder unbrauchbar machen.

    Eventuell muss diese generierte Datei noch manuell nachgearbeitet werden. Siehe man irrecord.

    Hinweis: Die Struktur der Datei muss dabei exakt erhalten bleiben! Sonst kann lircd sie später eventuell nicht verarbeiten.

    Ein einfaches Beispiel (gekürzt):

    Wenn nun eine passende .conf Datei vorliegt, muss lircd neu gestartet werden, um die Änderungen einzulesen:

    Code
    sudo systemctl restart lircd

    (Hinweis: Bei einem Testsystem hat das Restarten von lircd nicht genügt. Ich musste den Raspi neu starten.)

    Testen lässt sich die Fernbedienung dann im Terminal/Shell mit:

    Code
    irw

    ==> einfach ein paar Tasten drücken und schauen, ob etwas von irw angezeigt wird.

    irw dann mit Strg-C stoppen.

    Beispielausgabe:

    Bei technischen Problemen könnte noch dieses Testkommando helfen:

    Code
    mode2 -d /dev/lirc0

    mode2 dann ebenfalls mit Strg-C stoppen.

    c) irexec

    LIRC liefert unter anderem das Programm irexec mit.

    irexec kommuniziert mit dem im Hintergrund laufenden LIRC-Dämon und erhält Informationen über die gedrückte Taste.

    Um die jeweilge Taste mit einer Aktion zu verknüpfen, wird eine Konfigurationsdatei gefüllt: ~/.config/lircrc.

    Code
    mkdir -p .config
    nano ~/.config/lircrc

    Dort eintragen (gekürztes Beispiel):

    Die im Beispiel konfigurierten Kommandos ("config") sind natürlich hier nur Testeinträge!

    Sowohl die Bezeichnung der Fernbedienung ("remote") als auch die der Knöpfe ("button") müssen mit denen aus der Konfiguration

    der Fernbedienung wie weiter oben beschrieben übereinstimmen!

    Damit irexec seine Arbeit aufnehmen kann, muss es auch laufen...

    Testweise reicht ein

    Code
    irexec

    Beenden mit Strg-C

    Natürlich ist es sinnvoller, irexec immer automatisch im Hintergrund laufen zu haben.

    Das geht so:

    Code
    sudo nano /etc/systemd/system/irexec.service

    Dort eintragen:

    Jetzt noch aktivieren und starten:

    Code
    sudo systemctl enable --now irexec.service
    sudo systemctl status irexec.service

    Das ergibt eine Ausgabe ähnlich wie (sollte es...):

    Code
    ● irexec.service - irexec service
         Loaded: loaded (/etc/systemd/system/irexec.service; disabled; vendor preset: enabled)
         Active: active (running) since Sun 2022-04-10 11:00:03 CEST; 58min ago
       Main PID: 1494 (irexec)
          Tasks: 1 (limit: 410)
            CPU: 131ms
         CGroup: /system.slice/irexec.service
                 └─1494 /usr/bin/irexec /home/pi/.config/lircrc
    
    Apr 10 11:00:03 pi02 systemd[1]: Started irexec service.

    Viel Spaß mit LIRC und der Fernbedienung.

    Der Fantasie sind keine Grenzen gesetzt!

    8 Mal editiert, zuletzt von simonz (20. November 2023 um 19:24)

  • Steuerung mit einer Infrarot-Fernbedienung und LIRC? Schau mal ob du hier fündig wirst!

  • Beitrag von Oscar1981 (14. April 2022 um 15:18)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Beitrag von simonz (14. April 2022 um 16:10)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Moin

    irrecord will nicht:

    Irgend welche Ratschläge?

  • Grüße,

    Google sagt dazu:

    https://github.com/raspberrypi/linux/issues/3857

    Zitat

    lirc_rpi is no longer supported - use gpio_ir instead.

    https://progpi.de/lirc-steuerung…uster-bullseye/

    Ich kann dir aber nicht sagen wie aktuell das alles ist.

    Ansonsten noch hier:

    simonz
    10. April 2022 um 12:07
  • Ansonsten noch hier:

    Das ist doch dieser Beitrag. ;)

    Vielleicht hilft dir das weiter.

    Nein im letzten Beitrag steht ja auch das es mit bullsey nicht mehr funktioniert.

    Ich bin zwar jetzt soweit gekommen das irrecord startet, aber eine Aufzeichnung einer neuen lirc.conf funktioniert nicht da ich ein timeout bekomme (als würde der Empfänger nicht reagieren).

  • Das ist doch dieser Beitrag. ;)

    Nein im letzten Beitrag steht ja auch das es mit bullsey nicht mehr funktioniert.

    Ich bin zwar jetzt soweit gekommen das irrecord startet, aber eine Aufzeichnung einer neuen lirc.conf funktioniert nicht da ich ein timeout bekomme (als würde der Empfänger nicht reagieren).

    Ich wollte dir damit auch nicht sagen, dass es noch funktioniert.

    RPi und Co sind Sachen im ständigen Wandel. Das ist nicht wie DIN xyz, die 1975 verabschiedet wurde.

    Wenn in Debian nun gpio-ir angesagt ist, solltest du dich anpassen. Es ist halt so.

    "Wer nur Nägel kennt, hält jedes Stück Materie für einen Hammer."
    (einschließlich mir)

  • Ich habe es jetzt zwar hinbekommen das ich meine FB einlesen konnte, aber ich finde die Datei jetzt nicht.

    gestartet hatte ich irrecord mit:

    Code
    sudo irrecord -n -d /dev/lirc1  /etc/lirc/lircd.conf.d/my_remote.conf

    dann sollte die doch unter

    Code
    /etc/lirc/lircd.conf.d/

    liegen?

  • Habe sie zwar jetzt gefunden, aber aufgezeichnet wurde nichts.

  • Hallo Gorcon

    Nein. Ist ein Axas E4HD Ultra.

    wenn es keine fertige .conf für dein Gerät gibt, bleibt wohl nur irrecord zum laufen zu bekommen.

    Du benutzt das USB Infrared Toy aus deinen anderen Thread: https://forum-raspberrypi.de/forum/thread/58045-per-raspberry-pi-lirc-conf-erzeugen/ ?

    Das USB-Teil kann wohl mit zwei verschiedenen Treibern ir_toy oder cdc_acm laufen und macht dann auch unterschiedliche Geräteschnittstellen /dev/lircX oder /dev/ttyACMX.

    Was sagt bei dir lsusb ? Und wenn du das Teil gerade angesteckt hast, danach die Ausgabe sudo dmesg | tail -n 12 und sudo journalctl -ekg usbcore ?

    Ein Blick in die offizielle und aktuelle Anleitung kann manchmal auch hilfreich sein:

    https://forum-raspberrypi.de/Hallo%20%20%20…tion-guide.html

    Gruß Martin

  • Hat sich erledigt. Habe es mit WinLIRC unter Win 7 hinbekommen. Mit dem Raspi konnte ich nur RAW nutzen aber das brachte mir nichts.

    PS: in der Anleitung muss man zum einlesen zwingend lirc1 als device nutzen. Mit Lirc0 geht es nicht.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!