IRMP auf Pico - ein USB-HID-Keyboard IR-Empfänger/Sender/Einschalter mit Wake-up Timer

  • Um die Güte der Erkenung zu überprüfen, habe ich in irmpconfig -> y eine Wiederholraten Statistik eingebaut.
    Wenn man lange eine Taste drückt, bekommt man etwa dies:

    PC diff_us:                       114017
    uC delta detection:               113828
    PC-uC diff - delta_detection in us: 0189
    max_diff: 1245
    min_diff: 30
    PC min_diff_us:                   113940
    uC min_delta_detection:           113776
    *** rate
    *** 114 - 0498
    *** 115 - 0178
    *** 228 - 0002
    *** diff - delta_detection
    *** 000 - 500
    *** 001 - 178
    070000001101   pass_on_delta_detection_f: 113.828003 delta: 114 min_delta: 114 upper_border: 118 same key: 1 timeout: 0 repeat detected: 1

    Man sieht, dass die Erkennung auf dem PC schlechter ist als auf dem uC.
    Unter *** rate sieht man, dass 114 498-mal erkannt wurde und 115 178-mal und dass es zwei Aussetzer gab.
    min_delta, das für das timeout zwecks release Erzeugung benutzt wird, passt.
    Die Arbeit hat sich gelohnt.

    Andere Fernbedienungen mit stabiler Wiederholrate sollten ähnlich gute Ergebnisse bringen.

  • Hab es noch vereinfacht und die Erkennung vom Empfänger hinzugefügt.
    Ein Beispiel mit RC6:
    090004000601
    PC diff_us:             107027
    uC delta_detection:     106652
    PC min_diff_us:         106001
    uC min_delta_detection: 106548
    **************
    *** pc rate
    *** 106 - 0001
    *** 107 - 0824
    *** 108 - 0079
    **************
    *** uc rate
    *** 107 - 0904
    **************
    Am uC werden konstant 107 ms erkannt, auf dem PC werden 106 - 108 ms erkannt.
    RC6 hat hier keine Aussetzer.
    Die Fernbedienung hat eine stabile Wiederholrate.

  • Es gibt ein neues Release, wichtigste Änderung: irmpconfig (Linux und Windows).

  • Ich vermisse aber in irmpconfig unter Windows 11 Pro diese Funktion: "monitor until ^C (m)". Gibt es das unter Windows nicht?

    Wird es im nächsten Release geben. Allerdings geht unter Windows nur die Anzeige der Reports mit REPORT_ID_IR.
    An die Keyboard Reports kommt man unter Windows nicht heran. Wenn man gleichzeitig ein Schreibprogramm geöffnet hat, sieht man aber wenigstens die Tasten ankommen.

  • Ich hab eben auf Firmware: 2026-01-20_15-25_seeed_xiao_rp2350_hid_irmp upgedatet.
    Bei mir läuft vdr-plugin-irmp (0.0.6) und eine FB mit RC6 sky codes.

    In Vdr setup.conf steht: RcRepeatDelay = 300 u. RcRepeatDelta = 100

    Nun reagiert vdr zeitweise nicht auf einzelne Tastendrücke. Am Empfänger leuchtet die IR Empfangs LED aber auf. Ich drücke z.B. die zurück Taste mehrfach, auch mit kurzer Pause dazwischen, wiederhole den Tastendruck.
    Aber am Vdr geht nix zurück bzw. schließt nicht den OSD Dialog.

    Das ist kein Dauerzustand. Es geht auch mal alles flüssig.

    Getestet auf vdr1 und vdr2 - beide zeigen gleiches Verhalten.

    Für weitere Diagnose benötigst Du bestimmt die Konsoleausgabe vom irmp Plugin. Aber wie komme ich da heran? Bei yavdr 0.7 oder Vdr*Elec.

    Klick für meine VDR Hard- u. Software

    vdr1: HP Pro Mini 400 G9 i5 12500T 32GB | Ubuntu 24.04.3 LTS yavdr ansible vdr-2.7.7 256GB M.2 2230 | Video: 4TB M.2 Rec (XFS) + 8TB SATA Archiv (exFAT) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr2: Raspberry CM5 | dual M.2 HAT | VDR*ELEC LE13 | 1TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr3: gleich wie vdr2
    TV: Philips 55OLED805

  • Aber wie komme ich da heran?

    Bei mir so: systemctl stop vdr und dann vdr auf Kommandozeile starten.

  • Bin einen Schritt weiter.

    diese Ausgabe bekomme ich auf der Konsole - ohne Bild auf dem TV. Ausgabe zeigt wahllose Tastendrücke.
    D.h. ich kann nicht sagen wo bei vdr Bedienung genau nix ankommt.

    Hoffe damit kommst Du weiter.

    Klick für meine VDR Hard- u. Software

    vdr1: HP Pro Mini 400 G9 i5 12500T 32GB | Ubuntu 24.04.3 LTS yavdr ansible vdr-2.7.7 256GB M.2 2230 | Video: 4TB M.2 Rec (XFS) + 8TB SATA Archiv (exFAT) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr2: Raspberry CM5 | dual M.2 HAT | VDR*ELEC LE13 | 1TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr3: gleich wie vdr2
    TV: Philips 55OLED805

  • D.h. ich kann nicht sagen wo bei vdr Bedienung genau nix ankommt.

    Das müsste ich schon wissen.

  • diese Ausgabe bekomme ich auf der Konsole - ohne Bild auf dem TV. Ausgabe zeigt wahllose Tastendrücke.

    Reicht da nicht journalctl -u vdr -fl während der VDR läuft?

    Du kannst die Ausgabe des VDR von stdout explizit ins journal umlenken (sollte eigentlich standardmäßig passieren): https://www.freedesktop.org/software/syste…StandardOutput= - das gleiche geht auch für StandardError.

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hey, der Tipp funktioniert.

    vdr läuft mit Live TV. Ich drücke Menu Taste (mehrfach) und nix passiert:

    Klick für meine VDR Hard- u. Software

    vdr1: HP Pro Mini 400 G9 i5 12500T 32GB | Ubuntu 24.04.3 LTS yavdr ansible vdr-2.7.7 256GB M.2 2230 | Video: 4TB M.2 Rec (XFS) + 8TB SATA Archiv (exFAT) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr2: Raspberry CM5 | dual M.2 HAT | VDR*ELEC LE13 | 1TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr3: gleich wie vdr2
    TV: Philips 55OLED805

  • Wenn ich eine andere Taste drücke, funktioniert Taste Menu auf einmal. Bis z.B. Taste Menu wieder keine vdr Aktion auslöst.

    Klick für meine VDR Hard- u. Software

    vdr1: HP Pro Mini 400 G9 i5 12500T 32GB | Ubuntu 24.04.3 LTS yavdr ansible vdr-2.7.7 256GB M.2 2230 | Video: 4TB M.2 Rec (XFS) + 8TB SATA Archiv (exFAT) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr2: Raspberry CM5 | dual M.2 HAT | VDR*ELEC LE13 | 1TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr3: gleich wie vdr2
    TV: Philips 55OLED805

  • Die werden alle als Repeat erkannt, das ist falsch.
    Kann ich bei mir reproduzieren.

  • Komme leider erst in ein paar Tagen dazu, mich darum zu kümmern.

  • Hallo jrie, hier hat Paulaner mal die "Longpress-Funktion" erwähnt.

    Du hast geschrieben: Das sollte eigentlich auch gehen (wenn man es richtig macht).

    Geht das in allen 3 Versionen des Projektes? Bitte erkläre uns mal, wie man das macht.

    Danke!

    mein VDR
    • Software: yaVDR0.7-Ansible Ubuntu 24.04 (noble) mit vdr-2.7.9
    • DVB-T2: Hauppauge WinTV-dualHD
    • Fernseher: LG OLED42C48LA

    Edited once, last by blau: Link für "hier" zum Beitrag von @Paulaner eingefügt. (January 25, 2026 at 6:48 PM).

  • Paulaner hat yaVDR-ansible.

    Bei der irmplircd Version ist der Weg so: irmplircd → lircd2uinput → /dev/input/eventX → eventlircd → Kodi
    lircd2uinput kann Wiederholungen senden und hat einen Timeout. Man muss also die Parameter für irmplircd entsprechend klein bzw. auf 0 einstellen, damit man innerhalb des Timeouts bleibt. Dann werden Wiederholungen gesendet.

    Bei der Keyboard und der IRMP Pico Version ist der Weg so: /dev/input/eventX → eventlircd → Kodi
    Hier muss man bei der Keyboard Version den Timeout grösser als die Wiederholrate setzen, damit keine Neuen sondern Wiederholungen erzeugt werden. Die IRMP Pico Version kann das automatisch.

    Ob eventlircd die Wiederholungen durchreicht, weiß ich gerade nicht mehr. Vielleicht kann seahawk1986 was dazu sagen.

    In allen Fällen muss man das Autorepeat vom Kernel abstellen, damit man keinen Nachlauf bekommt.

    Wenn die Fernbedienung genug Tasten hat, sollte man aber lieber auf doppelte Belegung verzichten. Dann hat man eine schnellere Reaktion und es ist unkomplizierter. Wenn man es aber braucht, geht es auch.

  • Ob eventlircd die Wiederholungen durchreicht, weiß ich gerade nicht mehr. Vielleicht kann seahawk1986 was dazu sagen.

    Eventlircd hat einen zuschaltbaren Repeat-Filter - den kann man mit -R aktivieren. So wie der für yaVDR gepatch ist, filtert er initial Tastenwiederholungen unter 200 ms raus und senkt das dann ab der vierten Wiederholung auf 150 bzw. ab der 5. auf 100 ms ab.

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Wenn man sich https://github.com/j1rie/IRMP_PIC…mp/irmp.c#L2869 genau anguckt, sieht man den Fehler.
    Anfangs steht da irmp_protocol == IRMP_RC5_PROTOCOL etc, dann aber nur noch die Protokolle ohne irmp_protocol == ....
    Flüchtigkeitsfehler :wand
    Voraussichtlich morgen Abend gibt es ein neues Release.

  • Es gibt ein neues Release, wichtigste Änderung: Firmware gefixt, ansonsten kleine Fehlerbehebungen und Verbesserungen (siehe git).

  • Danke! Nun läuft alles wieder flüssig :]

    Reaktion ist wirklich top. Hatte noch nie so eine direkt reagierende Fernbedienung.

    Sehr gute Arbeit.

    Klick für meine VDR Hard- u. Software

    vdr1: HP Pro Mini 400 G9 i5 12500T 32GB | Ubuntu 24.04.3 LTS yavdr ansible vdr-2.7.7 256GB M.2 2230 | Video: 4TB M.2 Rec (XFS) + 8TB SATA Archiv (exFAT) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr2: Raspberry CM5 | dual M.2 HAT | VDR*ELEC LE13 | 1TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr3: gleich wie vdr2
    TV: Philips 55OLED805

  • Ich möchte mit der Fernbedienung meinen PC mit yaVDR 0.7 starten und dabei über ein Makro im IRMP_PICO einen LG-TV einschalten und dessen Eingang auf HDMI-1 umschalten.

    Dazu hatte ich im IRMP_PICO zunächst folgendes Makro programmiert - alles mit passenden Fernbedienungen angelernt:

    Code
    Version: 2026-01-20_16-02
    wakeup: 07000a000c00
    macro: 07000a000c00 -> 02fb04000800 02fb0400ce00
    alarm: 49710 days, 6 hours, 28 minutes, 9 seconds

    Damit schaltete der LG-TV sich zwar ein (1. Befehl), aber die Umschaltung (2. Befehl) klappt nicht.

    Zur Kontrolle benutze ich einen IRMP_STM32, weil der so eine schönen dauerhaften "receive mode" hat. Da kam an:

    Code
    Received 64 bytes:
    01 02 04 fb 08 00 00 
    RepeatCounter: 0 
    translated:
    Received 64 bytes:
    01 02 04 fb ce 00 00 
    RepeatCounter: 0 
    translated:

    Das passt also. Ich habe dann vermutet, dass der 2. Befehl zu schnell folgt. Kann man in das Makro eine Verzögerung einbauen? Da ich dazu nichts gefunden habe, habe ich den 2. Befehl wiederholt, bis "macro0" voll ist. Den LG-TV stört das nicht. Das sieht dann so aus:

    Code
    Version: 2026-01-20_16-02
    wakeup: 07000a000c00
    macro: 07000a000c00 -> 02fb04000800 02fb0400ce00 02fb0400ce00 02fb0400ce00 02fb0400ce00 02fb0400ce00 02fb0400ce00
    alarm: 49710 days, 6 hours, 23 minutes, 43 seconds

    Trotzdem schaltet der LG-TV den Eingang nicht um. Kann man vielleicht doch im Makro irgendwie warten, z. B. 1 oder 2 sec?

    mein VDR
    • Software: yaVDR0.7-Ansible Ubuntu 24.04 (noble) mit vdr-2.7.9
    • DVB-T2: Hauppauge WinTV-dualHD
    • Fernseher: LG OLED42C48LA

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!