Serielles IR mit Lirc 0.10 unter Debian9

  • Hallo Forum,

    ich moechte einen selbstgebauten IR-Receiver (nach offizieller Anleitung) an Seriell/COM2 unter Debian 9 (Stretch) mit Lirc an's Laufen bekommen. Wegen den bekannten, grossen Problemen mit dem neuen Lirc 0.9.4, das in den Debian-Quellen ist, habe ich auf Lirc 0.10.1 geupdatet. Ausserdem habe ich DIVERSE Config-Dateien im Debian erstellt/geaendert, um den Seriell-Anschluss zu konfigurieren. Um es kurz zu machen: Das ist die Ausgabe von Lirc beim Booten:


    Code
    [    2.528280] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    [    2.528476] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    [    4.382574] input: lircd-uinput as /devices/virtual/input/input15

    und das die Ausgabe von lirc, wenn ich es manuell starte:

    Code
    modprobe lirc_serial
    systemctl restart lircd
    dmesg | grep lirc
    [    2.528280] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    [    2.528476] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    [    4.382574] input: lircd-uinput as /devices/virtual/input/input15
    [  342.696769] lirc_dev: IR Remote Control driver registered, major 247
    [  342.699322] lirc_serial: module is from the staging directory, the quality is unknown, you have been warned.
    [  343.660075] lirc_serial lirc_serial.0: auto-detected active high receiver
    [  343.660335] lirc_serial lirc_serial.0: lirc_dev: driver lirc_serial registered at minor = 0

    Wie man sehen kann wird da was gefunden. /dev/lirc0 wird ebenfalls angelegt. /sys/class/rc ist allerdings leer und mode2 registriert keine Eingaben.

    Weiss jemand wie ich jetzt weitermachen soll?


    Ich haenge auch noch meine /etc/lirc/lirc_options.conf an:



    Uebrigens wurde unter Debian ganz offensichtlich lirc_serial NICHT durch serial_ir ersetzt. Keine Ahnung warum.

  • Hi,


    was gibt denn

    systemctl cat lircd-setup

    aus? Bei mir (Ubuntu) ist das

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Aehmm...kommt da noch was? Sollte ich eine neue Datei anlegen und Deinen Inhalt reinkopieren? Ist das ueberhaupt wichtig zur jetzigen Zeit? Wuerde mir ja vorerst reichen, Lirc manuell an's Laufen zu kriegen. Ueber den Autostart mache ich mir dann im Anschluss Sorgen...oder nicht?

  • Das erklärt die Meldung : "systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked"

    Ich denke auch, du kannst das vorerst ignorieren.


    Du kannst das wegbekommen, indem du

    Code
    rm /etc/systemd/system/multi-user.target.wants/lircd-setup.service
    ln -s /lib/systemd/system/lircd-setup.service /etc/systemd/system/multi-user.target.wants


    eingibst.

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Ich hab' Dir jetzt mal blind vertraut und die beiden Befehle einfach eingegeben.

    Ich sollte erwaehnen, dass ich waehrend der Ausfuehrung von mode2 mal das Spannungsmessgeraet an den COM2 gehalten habe: An der RTS-Leitung messe ich -11V. Da sollten +11V dransein. Folglich koennen die auch nicht in +5V gewandelt werden. Die ganze Receiver-Schaltung bekommt also gar keinen Strom. Das zeigt auch die Messung. Alle Bauteile haben 0,7V.

    Frage: Welcher Softwareteil sollte denn die Pins richtig schalten, so dass RTS als Stromquelle dient. Ich ging davon aus, dass das Lirc das macht, weil die Anleitung von denen ist. War ja deren Entscheidung RTS als Strom/Spannungsquelle zu nutzen.


    Edit:


    Ich kann mir selbst antworten: In der Lirc-Anleitung steht:

    Zitat

    The power for the circuit comes from the RTS line of the serial port. D1 protects the circuit from the negative voltage that is usually on the RTS pin. The LIRC driver will change the serial port settings on initialization so that the circuit will get the necessary positive voltage.

    Das heisst also Lirc muss laufen und COM2 korrekt ansprechen, damit der Receiver Saft bekommt.

  • Ich glaube es liegt an den Lirc-Kernel-Modules. Da ist irgendwie der Wurm drin. Bei der Internetsuche habe ich erfahren, dass nicht nur lirc_serial geladen werden muss sondern vorher auch noch lirc_dev. Mit insmod ist es nicht moeglich. Mit modprobe schon, aber es kommen Fehler:


    Diese unkown-symbol-Fehler kommen auch bei insmod. Diese Fehler treten mit lirc 0.9.4 und lirc 10.0.1 auf. In diesem Threadwurde deshalb eigens eine alte Lirc-Version in einem ppa archiviert, wo der Fehler nicht auftritt. Leider ist es fuer Ubuntu. Ausserdem ist es so alt, dass die Abhaengigkeiten nicht aufgeloest werden koennen.


    Kann man ein erneutes Kompilieren dieser Kernel-Module nicht irgendwie von Hand anstossen? Das ist doch normalerweise nach jedem Kernel-Update noetig und geschieht automatisch.

  • > habe ich auf Lirc 0.10.1 geupdate

    Wie hast du das gemacht? Anscheinend passen deine Lirc Module nicht zu deinem Kernel

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Pakete von Debian Testing. Ist aber jetzt wieder egal, weil ich die wieder weggemacht habe. Habe stattdessen den Kernel geupdatet auf 4.19.0 (von 4.09 oder so). Das wurde in der Sourceforge-Mailing-List von Lirc empfohlen, weil bis Kernel 4.16 kann da ein Bug im Kernel sein, der Seriell mit Lirc verhindert. Ab 4.17 soll' s dann wieder laufen.


    Jedenfalls sind jetzt die Modul-Beschwerden vom Lirc weg, Lirc verwendet jetzt serial_ir statt dem alten lirc_serial und die Lirc-Version ist wieder die alte 0.94c aus den offiziellen Debian-Quellen.

    Damit waere schonmal die erste Frage beantwortet: lirc_serial: alter kernel, serial_ir neuer Kernel. Das hat mit der Lirc-Version offenbar nichts zu tun.


    Jetzt gibt's aber ein neues Problem: Weder startet der Lirc-Daemon automatisch, noch wird beim manuellen Start COM2 angesprochen. Die /etc/lirc/lirc_options.conf muesste das doch alles regeln.


    Code
    [   59.205802] serial_ir serial_ir.0: port 03f8 already in use
    [   59.205816] serial_ir serial_ir.0: use 'setserial /dev/ttySX uart none'
    [   59.205821] serial_ir serial_ir.0: or compile the serial port driver as module and
    [   59.205826] serial_ir serial_ir.0: make sure this module is loaded first
    [   59.205909] serial_ir: probe of serial_ir.0 failed with error -16[   59.205802] serial_ir serial_ir.0: port 03f8 already in use
    [   59.205816] serial_ir serial_ir.0: use 'setserial /dev/ttySX uart none'
    [   59.205821] serial_ir serial_ir.0: or compile the serial port driver as module and
    [   59.205826] serial_ir serial_ir.0: make sure this module is loaded first
    [   59.205909] serial_ir: probe of serial_ir.0 failed with error -16


    port 0x03f8 ist COM1 bei mir. Da muesste 0x02f8 stehen!


    Edit:


    Hier nochmal meine /etc/lirc/lirc_options.conf:



  • > code2 = /usr/sbin/modprobe serial_ir

    Warum gibst du hier nicht mit, dass du com2 verwendest?

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Du meinst so?:


    Code
    code2 = /usr/sbin/modprobe serial_ir ttyS1code2 = /usr/sbin/modprobe serial_ir ttyS1


    ja, da tut sich was. Die Ausgaben hatte ich noch nicht:


    Code
    dmesg | grep lirc
    [   23.767746] input: lircd-uinput as /devices/virtual/input/input16
    [  245.490764] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitterdmesg | grep lirc
    [   23.767746] input: lircd-uinput as /devices/virtual/input/input16
    [  245.490764] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitter

    und /var/log/messages hat jetzt am Ende:


    Auch sehr schoen: /sys/class/rc/rc0 ist zum ersten mal erzeugt worden! Das hatte ich noch nie! dmesg gibt dazu folgendes aus:


    Code
    [  245.489639] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    [  245.490014] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input17
    [  245.490764] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitter[  245.489639] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    [  245.490014] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input17
    [  245.490764] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitter

    Leider musste ich dafuer immernoch


    Code
    modprobe lirc_dev
    modprobe serial_ir
    systemctl restart lirc

    eintippen, damit was kommt.

    Auch mode2 und irw zeigen mir noch keie Ausgaben. Vielleicht sollte ich mal neu booten?

  • Leider ist sehr schlecht bis gar nicht dokumentiert, wie das alles zusammenspielt und funktioniert.


    Die Einstellungen in /etc/lirc/lirc_options.conf betreffen ja nicht die Modulparameter der Kernelmodule. Damit serial_ir einen bestimmten COM-Port benutzt, muss man das schon als Modulparameter vorgeben. Bei Ubuntu (und dann wahrscheinlich auch Debian) geht das mit einer

    /etc/modprobe.d/serial_ir.conf mit folgendem Inhalt für den seriellen Port COM1


    Code
    # COM2 equivalent: /dev/ttyS1
    options serial_ir irq=3 io=0x2f8

    Im [modinit]-Abschnitt der /etc/lirc/lirc_options.conf muss dann analog

    Code
    code = /usr/bin/setserial ttyS1 uart none

    stehen.

    Und ich würde mal probieren, im Abschnitt [lircd] den driver = devinput in driver = default zu ändern.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Das hat funktioniert, nach einem Reboot.

    Code
    [   27.490904] serial_ir serial_ir.0: auto-detected active high receiver
    [   27.526963] Registered IR keymap rc-rc6-mce
    [   27.535703] IR RC6 protocol handler initialized
    [   27.563167] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    [   27.563357] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input17
    [   27.569071] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitter


    In /etc/modprobe.d sind jetzt zwei Dateien: Die neue (serial_ir.conf) und eine Datei lirc.conf, die ich vor vielen Versuchen angelegt hatte und aus irgendeiner Anbleitung stammte. Ihr Inhalt:


    Code
    alias char-major-61 lirc_serial
    options lirc_serial irq=3 io=0x2f8


    Wie geht's jetzt weiter? Zwar habe ich /dev/lirc0 und /sys/class/rc/rc0 angelegt bekommen. mode2 und irw registrieren aber nichts. Die RTS-Leitung des Receivers hat immernoch -11V und muesste von Lirc eingeschaltet werden (+11V), damit der Receiver Strom bekommt.


    Edit:


    Das Ende von /var/log/messages:



    Mir faellt die Zeile

    Code
    Registered IR keymap rc-rc6-mce

    besonders in's Auge:


    Code
    #ll /etc/lirc/lircd.conf.d/
    insgesamt 52
    drwxr-xr-x 2 root root  4096 Feb 25 16:58 .
    drwxr-xr-x 3 root root  4096 Feb 25 18:56 ..
    -rw-r--r-- 1 root root 33704 Apr  6  2017 devinput.lircd.conf
    -rw-r--r-- 1 root root    56 Feb 21 19:09 Homebrew_Serial.conf
    -rw-r--r-- 1 root root   615 Apr  6  2017 README.conf.d
    #


    rc-rc6-mce.conf kommt gar nicht im Ordner fuer die Fernbedienungen (/etc/lirc/lircd.conf.d) vor.



  • Der Serielle Empfänger bekommt standardmäßig (lässt sich über ir-keytable ändern bzw. in der /etc/rc_maps.cfg vorkonfigurieren) den im Kernel eingebauten IR-Decoder für RC-6 zugeordnet und die Keymap für eine RC6(A) MCE Fernbedienung.


    Außerdem hast in der lirc_options.conf devinput als Treiber gewählt, damit liest lircd von den Kernel Input Devices und reicht die Tastendrücke auf seinem Socket weiter. Lirc ist damit an Decoding der IR-Signale so nicht nicht beteiligt, wenn du das erreichen willst, müsstest du das Protokoll auf lirc setzen und den Treiber auf default, vgl. http://www.lirc.org/html/default.html

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Mein Reden :)

    Ändere in /etc/lirc/lirc_options.conf im Abschnitt [lircd] den driver von devinput auf default.

    /etc/modprobe.d/lirc.conf kannst Du löschen.

    Solange Du im Log

    Code
    serial_ir serial_ir.0: auto-detected active high receiver

    bekommst, hast Du ein Problem. Das muss low sein.

    Wenn Da eine Spannung umgeschaltet werden muss, dann durch serial-ir, denn das hat lirc-serial ersetzt.

    lircd ist nur ein Daemon und schaltet keine Hardware.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Endlich Infos! Den Treiber hatte ich nach der letzten Aufforderung schon auf default gesetzt. Hatte vergessen, das zu schreiben. Die verlinkte Lirc-Seite benutzt folgenden Befehl, um das Lirc-Protokoll zu erzwingen:


    Code
    echo 'lirc' > /sys/class/rc/rc0/protocols

    Auf der Seite wird aber auch darauf hingewiesen, dass Lirc 0.9.3.+ das automatisch macht. Sicherheitshalber habe ich die Zeile nun der /etc/lirc/lirc_options.conf hinzugefuegt:



    /sys/class/rc/rc0 war ja vorher gar nicht vorhanden. Der neue Befehl haette also keinen Effekt gehabt.


    Mit serial_ir...tja das ist ein Kernel-Modul. Da gibt's weder einen Help-Switch noch ne man-page. Wo kriege ich Infos zu moeglichen Optionen her? Erste Suchmaschinen-Ergebnisse lieferten nichts brauchbares.

  • Code
    modinfo serial_ir

    Mal versucht?

    Wohnzimmer: NUC10I3 - Logitech z-5500 - Panasonic 55" TV - Hauppauge Dual DVB-C Stick - Ubuntu 22.04 LTS - yavdr ansible
    Schlafzimmer: NUC10I3 - LG 42" TV - Hauppauge Dual DVB-C Stick - Ubuntu 22.04 LTS - yavdr ansible

    Streamingserver: -im Aufbau-
    diverse Test Clients: -Raspberry Pi + openelec, i3 mit Geforce1030

  • Nein, kannte ich noch nicht. Werde ich machen. Habe aber das hier versucht, abgewandelt von hier:


    Code
    modprobe serial_ir sense=1


    Ergebnis (nach Lirc-Neustart):


    Code
    [ 3425.164461] serial_ir: unknown parameter '/dev/ttyS1' ignored
    [ 3425.164914] serial_ir serial_ir.0: Manually using active low receiver
    [ 3425.164931] Registered IR keymap rc-rc6-mce
    [ 3425.165014] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    [ 3425.165133] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input24
    [ 3425.165510] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitter

    Da steht jetzt active-low! Leider bringt es nichts: Der Receiver empfaengt immernoch nichts.

  • auf alle Fälle solltest Du

    code2 = /sbin/modprobe serial_ir ttyS1

    in

    code2 = /sbin/modprobe serial_ir

    ändern. Mit sense die Autoerkennung zu übergehen dürfte auch nichts bringen. Wenn da nicht automatisch active-low kommt, ist der Empfänger entweder nicht richtig angeschlossen und/oder hat einen Hardware-Fehler.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!