IRMP auf STM32 - ein USB IR Empfänger/Sender/Einschalter mit Wakeup-Timer

  • Ja, danke. :)

    Leider lassen sich die letzten Boards nicht damit aufwecken ....

  • Könnte so ein Relais das richtige sein?

    das Relais @ 10mA wird nicht gehen.

    Laut Datenblatt braucht das Relais zum sicheren Anziehen 2,4 Volt. Dabei hat es einen Spulenwiderstand von 45Ohm. Ab 2,4 Volt wird dann ein Strom von 53mA fließen. Wenn Du den Strom auf 10mA begrenzen willst, dann müsstest Du noch 150Ohm davor schalten. Dann fällt aber auch nur noch ein viertel der Spannung am Relais ab.

    Wenn Dein µC Ausgang OC wäre, dann könnte aber bsw. die 24 Volt Variante davon gesteuert werden. Dieses Relais hat 2880 Ohm @ 24 Volt und braucht dabei nur 8mA.

    Praktischerweise nimm einen kleinen Transistor mit Basiswiderstand. Basiswiderstand (Basisstrom) bemisst Du reichlich, damit der Transistor schön in Sättigung geht. Dann fällt nur wenig Spannung an der CE Strecke ab. Oder besser noch einen TTL Fet (RDSon < 1Ohm)

  • Ich habe noch ein paar Bilder ins Wiki gestellt. Man kann sogar durch den 220 Ohm Widerstand hindurch flashen, dann geht es auch ohne Klemmen.

  • Sorry wenn ich jetzt blöd frage, aber ich habe im Thread nichts darüber gefunden.

    Aber die CooCox Seite schein down zu sein, und wie ich es verstanden habe brauche ich das ja um die Firmware zu compilieren.


    Ich habe über eine Suche eine CooIDE mit der Version v1.7.8 gefunden...

    Passt das, oder ist das ganz falsch?


    P.S.: Habe einen "blue pill", momentan mit maple bootloader.

    Kann ich den maple bootloader verwenden, oder besser mit Standard USART bootloader?

  • Ich habe über eine Suche eine CooIDE mit der Version v1.7.8 gefunden...

    Passt das, oder ist das ganz falsch?

    Passt.

    Oder einfacher: https://github.com/j1rie/IRMP_STM32/tree/master/binaries

    Oder https://www.mikrocontroller.ne…imer#Firmware_kompilieren


    Kann ich den maple bootloader verwenden

    Ja.


    oder besser mit Standard USART bootloader?

    Geht auch.

  • Super, danke für die Antworten.

    Dann versuche ich Mal mein Glück...

  • Hi Leute

    ich bin nun auch stolzer Besitzer eines USB Einschalters - habe aber noch Optimierungsbedarf.


    Ich nutze eine Logitech Harmony mit KLS2.0 Profil und versuche das unbeabsichtigte Abschalten des VDRs zu verhindern:

    denn wenn der VDR bereits läuft (durch WoL oder einen programmierten Timer) und ich dann die Fernbedienung nutze um alle Geräte zu nutzen (TV,AVR,VDR) - wird der VDR ausgeschaltet.


    Meine erste Idee, war Ein- und Ausschalten zu trennen. Das scheint mir "sicherer" als eine Sequenzänderung.


    Ist das der "richtige" Ansatz oder hat noch jemand eine Idee ?


    danke für eure Hilfe

    Freizeit-Admin

  • Benutzt du ein Makro, oder wie verteilst du den Einschaltdruck auf diverse Geräte?


    Im Prinzip hast du mehrere Möglichkeiten:

    - für Geräte und VDR verschiedene Knöpfe

    - für VDR ein und VDR aus verschiedene Knöpfe

    - du benutzt das dafür vorgesehene Feature (*)

    - bestimmt gibt es noch mehr Varianten


    (*) per irmpexec send_magic auswerten.

    Das wird 90 Sekunden nach Start durch den Empfänger abgesetzt, und wenn es nicht kommt wurde anderweitig gestartet.

  • Kennt jemand dieses Verhalten?
    Board: BAITE Maple Mini https://www.aliexpress.com/ite…042311.0.0.57404c4d6Zvzes
    Flash Vorgang über USB erfolgreich (mit Firmware 2018-11-17_21-18_MapleMini_BL_KBD_jrie.bin)
    LED blinkt bei IR Signalen
    Allerdings wird die Platine vom Rechner nur als "nackter" Maple erkannt (unter WIN als unbekanntes Gerät und nicht wie ich erwarten würde als Tastatur)

    Oder unter Linux mit "lsusb":
    Bus 001 Device 005: ID 1eaf:0003

    Auch die GUI Software von jrie erkennt den Maple nicht.


    Inzwischen habe ich mich mal durch die verschiedenen .bin Files probiert - mit dem selben Ergebnis...


    2018-10-15_20-34_MapleMini_BL_SC_jrie.bin

    2018-11-17_21-18_MapleMini_2k_BL_KBD_jrie.bin

    2018-11-17_21-18_MapleMini_BL_KBD_jrie.bin

    2018-11-23_17-11_MapleMini_2k_BL_SC_KBD_jrie.bin

    2018-11-23_17-11_MapleMini_2k_ExtBd_BL_SC_KBD_jrie.bin

    2018-11-23_17-11_MapleMini_BL_SC_KBD_jrie.bin

    2018-11-23_17-11_MapleMini_ExtBd_BL_SC_KBD_jrie.bin

    2018-11-23_17-12_MapleMini_2k_BL_KBD_jrie.bin

    2018-11-23_17-12_MapleMini_BL_KBD_jrie.bin

    Yavdr auf Yammy / 2 Kabel Empfänger / Asrock j4105-itx / IRMP KDB

    Einmal editiert, zuletzt von Grillbert ()

  • das macht die Logitech "von alleine" über eine Aktion, oder habe ich dich nicht richtig verstanden ? ...

  • Hi.

    Ich möchte eine STM32 Stick an meinem Laptop mit Manjaro (Arch Linux Verwandschaft) und Kodi betreiben. Das Paket irmplircd von vdr4arch habe ich installiert und solange ich den Dienst per systemctl manuell starte und stoppe, funktioniert es auch.


    Mein Idee ist es allerdings, irmplircd per udev zu starten, stoppen bzw. restarten, wenn der Stick gesteckt wird. Leider klappt nur das Beenden wenn der Stick gezogen wird.


    Ich habe mir folgende udev Regel erstellt:


    Code
    # ACTION=="add", ENV{ID_SERIAL_SHORT}=="LLM_003", RUN+="/usr/bin/logger STM32 Stick gesteckt.", RUN+="/usr/bin/systemctl start irmplircd"
    # ACTION=="remove", ENV{HID_NAME}=="STMicroelectronics STM32 IRMP HID-Device", RUN+="/usr/bin/logger STM32 Stick entfernt.", RUN+="/usr/bin/systemctl stop irmplircd"


    Die Regel wird auch abgearbeitet:


    Code
    Jun 18 23:08:50 obelix root[20627]: STM32 Stick gesteckt.

    bzw.


    Code
    Jun 18 23:10:06 obelix root[20706]: STM32 Stick entfernt.


    D.h. meine erstellten ENV{ID_SERIAL_SHORT} und ENV{HID_NAME} Variablen funktionieren. Mit udevadm monitor --env habe ich herausgefunden, dass unterschiedliche Werte auftauchen, weshalb ich bei add und remove unterschiedlich abfrage. Es funktioniert jedenfalls.


    Wenn ich nun den Stick stecke, dann spawned der Prozess nach einer Minute:


    Code
    Jun 18 23:09:51 obelix systemd-udevd[20567]: Spawned process '/usr/bin/systemctl start irmplircd' [20628] is taking longer than 59s to complete
    Jun 18 23:09:51 obelix systemd-udevd[299]: 0003:1209:4444.0019: Worker [20567] processing SEQNUM=11719 is taking a long time


    Das scheint ein bekanntes Thema zu sein aber ich verstehe die Lösung nicht ?(:


    Spawning long-running processes


    Dort wird auf den Artikel Proper(-ish) way to start long-running systemd service on udev event (device hotplug) hingewiesen aber wie gesagt, peile ich das nicht so richtig....



  • Ist eigentlich alles schon drin und sollte funktionieren:

    https://github.com/VDR4Arch/vdr4arch/tree/master/irmplircd

    Wenn das nicht reicht wäre ich für einen Pull-Request dankbar. Ich nutze keine STM32 Empfänger mehr.

    Ja tut es auch aber nur wenn der Stick beim Starten bereits gesteckt ist. Passiert das nachträglich, dann muss irmplircd manuell gestartet werden. Zumindest ist das so bei mir.



  • Das scheint ein bekanntes Thema zu sein aber ich verstehe die Lösung nicht :

    Wie die Fehlermeldung dir schon sagt, darf ein RUN Befehl in einer udev-Regel nicht endlos laufen, sondern nur dazu genutzt werden einen kurzen Befehl auszuführen.


    Da die Prozesskontrolle mit Diensten wie at nicht so einfach ist, bietet es sich an irmplircd von Systemd starten zu lassen. Damit Geräteknoten von systemd berücksichtigt werden, müssen sie das TAG systemd tragen - dadurch wird dynamisch eine Unit erstellt, wenn die Hardware erkannt wurde, die wieder gestoppt wird, sobald die Hardware wieder entfernt wird.


    Bei yaVDR ist das etwas anders als bei vdr4arch gelöst, das ist das von Seiten der udev-Regel etwas expliziter - probier mal, ob es das für dich tut (die Pfade für SOCKET und KEYMAP wirst du vermutlich anpassen müssen):

    Code
    ACTION=="add", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="4444", TAG+="systemd", ENV{SYSTEMD_WANTS}="irmplircd@%k.service", SYMLINK+="irmp_stm32"
    Code: irmplircd@.service
    [Unit]
    Description=irmplircd - a daemon for IRMP receivers
    
    [Service]
    Type=forking
    Environment="SOCKET=/var/run/lirc/irmplircd" "KEYMAP=/etc/irmplircd/irmplicd.map"
    EnvironmentFile=-/etc/default/irmplircd
    ExecStart=/usr/bin/irmplircd -t ${KEYMAP} -d ${SOCKET}-%I /dev/%I
    SuccessExitStatus=0 71

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ja tut es auch aber nur wenn der Stick beim Starten bereits gesteckt ist. Passiert das nachträglich, dann muss irmplircd manuell gestartet werden. Zumindest ist das so bei mir.


    An der Stelle müsstest du dann mal etwas weiter suchen.


    Geht der "service" eventuell auf "Error-Status"? Wenn dem so ist kann schon sein, dass systemd den beim "wieder stecken" nicht mehr so ohne weiteres starten will.


    Ich habe die Software nicht mehr installiert und möchte sie eigentlich zum Testen auch nicht mehr installieren.

  • M-Reimer: Grundsätzlich ist deine Implementierung für einen klassischen VDR OK und funktioniert. Ein STM32 Stick wird dort ja nicht nachträglich eingesteckt. Wenn der Stick mit deiner Implementierung nicht angeschlossen ist, schlägt der Start des Dienstes irgendwann damit fehl:


    journalctl -f:

    Code
    Jun 23 11:18:23 obelix systemd[1]: dev-irmp_stm32.device: Job dev-irmp_stm32.device/start timed out.
    Jun 23 11:18:23 obelix systemd[1]: Timed out waiting for device /dev/irmp_stm32.
    Jun 23 11:18:23 obelix systemd[1]: Dependency failed for Start irmplircd on irmp_stm32 device.
    Jun 23 11:18:23 obelix systemd[1]: irmplircd.service: Job irmplircd.service/start failed with result 'dependency'.
    Jun 23 11:18:23 obelix systemd[1]: dev-irmp_stm32.device: Job dev-irmp_stm32.device/start failed with result 'timeout'.
    Jun 23 11:18:23 obelix sudo[16286]: pam_unix(sudo:session): session closed for user root


    journalctl -xe:


    Das da was in den Timout läuft, war mir klar und deshalb wollte ich das mit einen Script / systemctl Befehl starten / stoppen.


    Wenn ich nun das von seahawk1986 einbaue (Danke für die ausführliche Erklärung), dann funktioniert es für einen Moment aber es gibt dann einen Fehler und irmplircd fliegt weg:


    Code
    Jun 23 10:55:43 obelix irmplircd[14966]: Started
    Jun 23 10:57:13 obelix systemd[1]: irmplircd@hidraw2.service: Start operation timed out. Terminating.
    Jun 23 10:57:13 obelix systemd[1]: irmplircd@hidraw2.service: Control process exited, code=killed, status=15/TERM
    Jun 23 10:57:13 obelix systemd[1]: irmplircd@hidraw2.service: Failed with result 'timeout'.
    Jun 23 10:57:13 obelix systemd[1]: Failed to start Start irmplircd on irmp_stm32 device.
    Jun 23 10:57:13 obelix audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irmplircd@hidraw2 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
    Jun 23 10:57:13 obelix kernel: audit: type=1130 audit(1561280233.255:86): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irmplircd@hidraw2 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'


    Ich habe gesehen, Systemd Files mit @ und und ohne können parallel existieren. Also irmplircd.service und irmplircd@.service. Wenn ich die irmplircd.service deaktiviere und nur irmplircd@.service habe, dann ändert sich nichts. Könnte da udev ein Thema sein?



Jetzt mitmachen!

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