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

  • Ja, danke. :)

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

    Hard- + Software Konfiguration:

    Matrix-Case: Matrix-ARM-Board + FF HD 6400 + Unicable

    Debian-Buster - vdr-2.5.6 - Plugins: dvbhddevice - targavfd - skinnopacity - osdteletext - epgsearch - markad


    RaspberryPi3b+
    raspbian - vdr-2.5.6 + device.patch

    Plugins: rpihddevice - skinnopacity - osdteletext - epgsearch - markad

    Tuner: USB DVBSky S960 DVB-S2 Tuner

    Am basteln:

    Pine H64 Modell B + Sundtek USB Dual DVB-S2 @Unicable

    RasberryOS - vdr-2.5.6 - Plugins: softhddevice-drm (rella) - skinnopacity - osdteletext - epgsearch

    ——

    RockPro64 Board mit softhddevice-drm mit DD Max-S8 (8Tuner) über Unicable auf armbian - vdr-2.5.6

    Plugins: softhddevice-drm (zillerbaer) - skinnopacity - epgsearch - osdteletext

    ————————————

    Am basteln:

    Compute Module 4 on IO-Board - FF-HD-6400 über PCIe Extender + Unicable

    RasberryOS - vdr-2.5.6 - Plugins: dvbhddevice - targavfd - skinnopacity - osdteletext - epgsearch - markad

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

    Hardware - Software - ...

    VDR-HD
    Hardware: Lian Li PC-C37B USB 3.0, ASRock Z87M Extreme4, Intel Core i5-4670T, Zotac GT630 2GB (ZT-60416-20L), 4096 MB Ram, DD Cine S2 V6.5 + DuoFlex C/C2/T/T2 Erweiterung V3, 120 GB SSD + 250 GB NB-HDD
    Software: Gentoo Linux, Kernel 4.12.5-ddbridge, VDR 2.2.0 ebuild, Plugins: skindesigner, softhddevice, ...


    Myself: schiarch a.k.a gorgo a.k.a georg :D

  • 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.net/articles/IRMP_…are_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...

    Hardware - Software - ...

    VDR-HD
    Hardware: Lian Li PC-C37B USB 3.0, ASRock Z87M Extreme4, Intel Core i5-4670T, Zotac GT630 2GB (ZT-60416-20L), 4096 MB Ram, DD Cine S2 V6.5 + DuoFlex C/C2/T/T2 Erweiterung V3, 120 GB SSD + 250 GB NB-HDD
    Software: Gentoo Linux, Kernel 4.12.5-ddbridge, VDR 2.2.0 ebuild, Plugins: skindesigner, softhddevice, ...


    Myself: schiarch a.k.a gorgo a.k.a georg :D

  • 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

    meine VDR-Hardware

    easyVDRv3: xx yy / Asrock J3455-itx / 8GB RAM / 2TB WD20EARS / OctopusNet v2 S2 - easyVDR 3.5.0hevc

    Bereits in Rente sind:
    easyVDRv2: Chieftec Mesh/ Intel DQ67SW / Core i3-2100 / 4GB RAM / WD20EARS / CineS2 6.5 / Philips MCE IR - easyVDR 2.5.0


    easyVDRv1: ATCs 620 / Asrock K7S41GX / AMD Geode NX 1750 / 1GB RAM / 400 GB HD / Nexus

  • 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

    Edited once, last by Grillbert (June 17, 2019 at 6:06 PM).

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

    meine VDR-Hardware

    easyVDRv3: xx yy / Asrock J3455-itx / 8GB RAM / 2TB WD20EARS / OctopusNet v2 S2 - easyVDR 3.5.0hevc

    Bereits in Rente sind:
    easyVDRv2: Chieftec Mesh/ Intel DQ67SW / Core i3-2100 / 4GB RAM / WD20EARS / CineS2 6.5 / Philips MCE IR - easyVDR 2.5.0


    easyVDRv1: ATCs 620 / Asrock K7S41GX / AMD Geode NX 1750 / 1GB RAM / 400 GB HD / Nexus

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

    Meine VDRs

    VDR1: ASUS H81-GAMER Gaming | Intel® Core™ i3-4130 | GeForce GT 1030 | yaVDR Ansible | Mystique SaTiX-S2 Dual | GraphTFT mit Elecrow 10,1-Zoll-IPS-Monitor | ACPI Wakeup | Atric IR-Einschalter Rev.5
    VDR2: HP DC7700p | GeForce 610 | easyVDR 2.5 - VDR 2.2.0 | TeVii S464 V2.0 | ST-Link v2 IRMP-STM32 WakeUp

    Test VDR: Fujitsu Esprimo D756 E85+ Intel Core i5-6500 | Intel HD Graphics 530 | easyVDR 5 / yaVDR ansible | ST-Link v2 IRMP-STM32 WakeUp | Cine S2 V6.2

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

    Meine VDRs

    VDR1: ASUS H81-GAMER Gaming | Intel® Core™ i3-4130 | GeForce GT 1030 | yaVDR Ansible | Mystique SaTiX-S2 Dual | GraphTFT mit Elecrow 10,1-Zoll-IPS-Monitor | ACPI Wakeup | Atric IR-Einschalter Rev.5
    VDR2: HP DC7700p | GeForce 610 | easyVDR 2.5 - VDR 2.2.0 | TeVii S464 V2.0 | ST-Link v2 IRMP-STM32 WakeUp

    Test VDR: Fujitsu Esprimo D756 E85+ Intel Core i5-6500 | Intel HD Graphics 530 | easyVDR 5 / yaVDR ansible | ST-Link v2 IRMP-STM32 WakeUp | Cine S2 V6.2

  • 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
    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.)

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

    Meine VDRs

    VDR1: ASUS H81-GAMER Gaming | Intel® Core™ i3-4130 | GeForce GT 1030 | yaVDR Ansible | Mystique SaTiX-S2 Dual | GraphTFT mit Elecrow 10,1-Zoll-IPS-Monitor | ACPI Wakeup | Atric IR-Einschalter Rev.5
    VDR2: HP DC7700p | GeForce 610 | easyVDR 2.5 - VDR 2.2.0 | TeVii S464 V2.0 | ST-Link v2 IRMP-STM32 WakeUp

    Test VDR: Fujitsu Esprimo D756 E85+ Intel Core i5-6500 | Intel HD Graphics 530 | easyVDR 5 / yaVDR ansible | ST-Link v2 IRMP-STM32 WakeUp | Cine S2 V6.2

Participate now!

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