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
    1. [ 2.528280] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    2. [ 2.528476] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    3. [ 4.382574] input: lircd-uinput as /devices/virtual/input/input15

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

    Code
    1. modprobe lirc_serial
    2. systemctl restart lircd
    3. dmesg | grep lirc
    4. [ 2.528280] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    5. [ 2.528476] systemd[1]: lircd-setup.service: Cannot add dependency job, ignoring: Unit lircd-setup.service is masked.
    6. [ 4.382574] input: lircd-uinput as /devices/virtual/input/input15
    7. [ 342.696769] lirc_dev: IR Remote Control driver registered, major 247
    8. [ 342.699322] lirc_serial: module is from the staging directory, the quality is unknown, you have been warned.
    9. [ 343.660075] lirc_serial lirc_serial.0: auto-detected active high receiver
    10. [ 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

    VDR1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 18.04, VDR 2.4x
    VDR2: ASUS P4B533, Celeron 2.4G, FF 1.5, Ubuntu 10.10, VDR 1.6 (SS2 Rev 2.6B)
    VDR Server: sheeva-plug

  • 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
    1. rm /etc/systemd/system/multi-user.target.wants/lircd-setup.service
    2. ln -s /lib/systemd/system/lircd-setup.service /etc/systemd/system/multi-user.target.wants


    eingibst.

    VDR1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 18.04, VDR 2.4x
    VDR2: ASUS P4B533, Celeron 2.4G, FF 1.5, Ubuntu 10.10, VDR 1.6 (SS2 Rev 2.6B)
    VDR Server: sheeva-plug

  • 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:

    Quote

    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

    VDR1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 18.04, VDR 2.4x
    VDR2: ASUS P4B533, Celeron 2.4G, FF 1.5, Ubuntu 10.10, VDR 1.6 (SS2 Rev 2.6B)
    VDR Server: sheeva-plug

  • 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
    1. [ 59.205802] serial_ir serial_ir.0: port 03f8 already in use
    2. [ 59.205816] serial_ir serial_ir.0: use 'setserial /dev/ttySX uart none'
    3. [ 59.205821] serial_ir serial_ir.0: or compile the serial port driver as module and
    4. [ 59.205826] serial_ir serial_ir.0: make sure this module is loaded first
    5. [ 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
    6. [ 59.205816] serial_ir serial_ir.0: use 'setserial /dev/ttySX uart none'
    7. [ 59.205821] serial_ir serial_ir.0: or compile the serial port driver as module and
    8. [ 59.205826] serial_ir serial_ir.0: make sure this module is loaded first
    9. [ 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?

    VDR1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 18.04, VDR 2.4x
    VDR2: ASUS P4B533, Celeron 2.4G, FF 1.5, Ubuntu 10.10, VDR 1.6 (SS2 Rev 2.6B)
    VDR Server: sheeva-plug

  • Du meinst so?:


    Code
    1. 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
    1. dmesg | grep lirc
    2. [ 23.767746] input: lircd-uinput as /devices/virtual/input/input16
    3. [ 245.490764] rc rc0: lirc_dev: driver serial_ir registered at minor = 0, raw IR receiver, raw IR transmitterdmesg | grep lirc
    4. [ 23.767746] input: lircd-uinput as /devices/virtual/input/input16
    5. [ 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
    1. [ 245.489639] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    2. [ 245.490014] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input17
    3. [ 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
    4. [ 245.490014] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input17
    5. [ 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
    1. modprobe lirc_dev
    2. modprobe serial_ir
    3. 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
    1. # COM2 equivalent: /dev/ttyS1
    2. options serial_ir irq=3 io=0x2f8

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

    Code
    1. 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.

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • Das hat funktioniert, nach einem Reboot.

    Code
    1. [ 27.490904] serial_ir serial_ir.0: auto-detected active high receiver
    2. [ 27.526963] Registered IR keymap rc-rc6-mce
    3. [ 27.535703] IR RC6 protocol handler initialized
    4. [ 27.563167] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    5. [ 27.563357] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input17
    6. [ 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
    1. alias char-major-61 lirc_serial
    2. 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
    1. Registered IR keymap rc-rc6-mce

    besonders in's Auge:


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


    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
    1. 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.

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • 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
    1. 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
    1. modinfo serial_ir

    Mal versucht?

    -- wird überarbeitet -- VDR- Server: Gigabyte Brix 3150 - (2x Hauppauge DualHD DVB-C Sticks mit 4 Tunern) - Ubuntu 18.04 - Aufnahme und Streaming-Server
    Client Wohnzimmer: DQ77KB - i3 - Logitech z-5500 - Blaupunkt 39" TV - Openelec (Streaming)
    Client Büro: Asus AT3N7A-I , yaVDR0.6.1 (Streaming + Cutting) - 19" TFT
    Test Client1: Raspberry Pi + openelec

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


    Code
    1. modprobe serial_ir sense=1


    Ergebnis (nach Lirc-Neustart):


    Code
    1. [ 3425.164461] serial_ir: unknown parameter '/dev/ttyS1' ignored
    2. [ 3425.164914] serial_ir serial_ir.0: Manually using active low receiver
    3. [ 3425.164931] Registered IR keymap rc-rc6-mce
    4. [ 3425.165014] rc rc0: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0
    5. [ 3425.165133] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc0/input24
    6. [ 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.

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD