arduino als IR Empfänger einsetzen?

  • Hi,


    hat einer so etwas schon im Einsatz? Würde gerne mit einem Arduino Board per IR die Fernbedienung empfangen um den VDR einzuschalten, LCD-Ein/Aus/Kontrast und was sonst noch so anfällt. Aber vor allem frage ich micht, wie man die Empfangen Codes dem VDR beibringt???

    Gruß Martin (linuxdep)

  • Hi,


    als IR-Dekoder mittel AVR würde sich http://www.mikrocontroller.net/articles/IRMP anbieten, die Quellen müsste aber ans pde-Arduino Format angepasst werden.
    und auf der VDR Seite tut es dann irmplircd für USB IR Remote Receiver (based on irmp)


    Die restlichen Funktionen müsstest Du dir wahrscheinlich selber programmieren ...


    Andreas

  • Danke erst mal für die Antwort, schein ja noch keiner was mit Arduino und VDR gemacht zu haben.


    Eine Lib für IR Empfangen und senden scheint es ja schon zu geben siehe
    http://www.arcfn.com/2009/08/m…rared-remote-library.html


    Auf seiten vom VDR würde ich das Signal am liebsten direkt einkoppeln per USB oder Seriell und nicht wieder per IR.


    Würde ja auf den Atric zurückgreifen, da ich aber gerne mein LCD per FB on/off schalten würde, fehlt mir da ein Schaltausgang (relais).

    Gruß Martin (linuxdep)

  • Auf seiten vom VDR würde ich das Signal am liebsten direkt einkoppeln per USB oder Seriell und nicht wieder per IR.


    Wie soll man das verstehen?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Auf seiten vom VDR würde ich das Signal am liebsten direkt einkoppeln per USB oder Seriell und nicht wieder per IR.


    Es spricht nix dagegen die "Tasten" (die du im VDR Plugin direkt per USB von diesem Board abfragst) per VDR Plugin direkt in den VDR zu geben. Ohne Umweg über /dev/input, lirc oder ähnlichen. Schau dir mal das lircrc Plugin an, das zeigt wie das ganz einfach geht (ohne VDR FB anlernen oder ähnliche Umwege). Setzt natürlich vorraus das du wirklich was programieren willst.


    cu

  • linuxdep :
    Sag Bescheid, wenn du so was fertiggebracht hast.
    Ich benutze selber Arduino und habe auch schon mit der von dir erwähnten IR-Library gute Erfolge erzielt. Ich steuere damit per IR-FB einen LED-Strip.


    Ich bin zwar erst Arduino-Anfänger, aber soweit ich das sehe ist die Hardwarekomponente überhaupt kein Problem.
    Ansonsten sind im deutschsprachigen Bereich des Arduino-Forums (http://arduino.cc/forum/index.php/board,31.0.html) sehr kompetente und freundliche Leute unterwegs.


    mfG,
    f.

    VDR-neu: HW: HP M01-F0000ng, Ryzen 3 3200G, Vega8, DigitalDevices Cine C2/T2, IR-Empfänger: Atric USB Eco,

    FB: HarmonyHub . SW: yavdr ansible focal

    VDR-alt: HW: Asrock Q1900M, Celeron J1900, Nvidia Geforce 210, DigitalDevices Cine C2/T2, IR-Empfänger: Atric USB Eco, Gehäuse: MC-1200. FB: HarmonyHub . SW: yavdr ansible focal
    VDR3: Raspberry Pi3 als Streaming Client, MLD 5.1

  • linuxdep :


    Interessiert mich auch. USB IR-Empfänger ist immer wieder ein Krampf, so was _richtig_ schönes, standardisiertes, bezahlbares gibt's da imho zur Zeit nicht.


    Das erwähnte IRMP hört sich zwar Klasse an, bedeutet in der Praxis aber wohl Löten bis der Arzt kommt, und dann noch Aufbau auf Lochraster, alle Teile irgendwo einzeln zusammenbestellen -->für mich "no way".


    So ein fertig aufgebautes Arduino uno board (kosten wohl so um die 25 bis 30.- EUR ?), dann noch den IR-Sensor (hab ich hier glaub noch einige rumliegen von seriellen lirc-Empfängern), bisschen flashen und tut (z.B. mit Logitech und KLS VDR 1.6 Profil), und wenn man dann noch irgendwie USB Wakeup hinbekommen würde *** ein Traum *** ;-)


    Grüße, Peter

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein

  • Das ging ja *wirklich* schnell! Läuft das bei Dir schon auf real hardware?


    .... ich geh mir jetzt erst mal ein arduino uno bestellen ;-)


    Grüße, Peter


    Das ist nicht von mir, bei mir läuft IRMP nur auf einem nativen AVR (ATMEGA168) mit eine paar zusätzlichen Hardwaretasten in einem modifizieren Player-Chassis.
    Selber setze ich eine leicht angepasst Version, der folgenden Variante ein http://www.mikrocontroller.net…es/USB_IR_Remote_Receiver ein.


    Für IRMP wurde ja bereits ein VDR Weg angeboten http://www.vdr-portal.de/board…te-receiver-based-on-irmp

  • So, mal ein kleiner Zwischenstand:


    - arduino uno und IR-Empfänger sind angekommen (mit Versand habe ich ~ 32.- EUR bezahlt)
    - Entwicklungsumgebung (Arduino IDE 1.0 #22) ist installiert und unter Kubuntu 11.10 funktionsfähig (Einfach aus repo installiert)
    - die von anbr gepostete IRMP-Umsetzung von Stefan Seyfried lässt sich compilieren und hochladen
    - das zur IRMP mitgelieferte Testprogramm funktioniert: Die IR-Codes von meinem Samsung-Fernseher und meinem Yamaha-Receiver werden auf der Testconsole der IDE ausgegeben
    - die RC-5 Codes des Harmony KLS VDR 1.6 Profiles werden noch nicht erkannt.


    Next Steps:
    - Schauen, warum RC-5 nicht erkannt wird
    - Schauen, wie man die Codes irmplircd kompatibel zum VDR schicken kann


    Grüße, Peter

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein


  • ...
    Next Steps:
    - Schauen, warum RC-5 nicht erkannt wird
    - Schauen, wie man die Codes irmplircd kompatibel zum VDR schicken kann


    Die verschiedenen FB-Protokolle werden in irmpconfig.h enabled / disabled. RC-5 ist standardmässig nicht enabled, auf 1 gesetzt und tut.

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein

  • So, bin wieder einen Schritt weiter:


    - USB-Treiber im kernel ist konfiguriert

    Code
    1. Device Drivers -> USB support -> USB Serial Converter support -> USB FTDI Single Port Serial Driver
    2. Device Drivers -> USB support -> USB Modem (CDC ACM) support


    Damit kann der arduino als /dev/ttyACM0 angesprochen werden.


    Die erkannten codes kann man sich dann z.B. mit

    Code
    1. minicom -D /dev/ttyACM0


    anschauen.


    So langsam werden mir auch die Probleme klar: Der hier im Board diskutierte Bauvorschlag von www.mikrocontroller.net meldet sich als USB HID Device, der arduino als ?serielles Terminaldevice? an. Soweit ich das bisher verstanden habe, kann man den arduino wohl mit einer geänderten Firmware / bootloader auch als HID-Device umflashen, dann funktioniert aber z.B. das Hochladen von der IDE nicht mehr.


    Man müsste also einen daemon für das per serieller USB-Kommunikation angebundene Arduino-Device schreiben, vermutlich sowas ähnliches wie das irmpdlirc von glotzipapa oder der daemon von anbr. Ist das überhaupt sinnvoll, den arduino so anzubinden?


    Mal ne ganz verwegene Idee: Kann man dem VDR das /dev/ttyACM0 als kontrollierendes Terminal unterschieben (gibts afaik eine Kommandozeilenoption für) und dann quasi per simulierter Tastatureingabe steuern? Statt der erkannten Hex-Codes nur (die entsprechenden) ascii-Characters zu schicken erscheint mir nicht so schwierig. Nachteil wäre natürlich, das damit nur der VDR (und nicht XBMC oder andere Systemfunktionen) gesteuert werden könnte.


    Fragen über Fragen ....

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein

  • So, ich hab das ganze mit (nicht ganz optimal passenden Bauteilen (aber was soll ich sonst am Sonntag machen ;)) und einem Arduino Duemilanove gerade nachgebaut). Mit pyserial kann ich die Ausgabe des Beispielprogramms problemlos auslesen:

    Code
    1. #!/usr/bin/python
    2. import serial
    3. ser = serial.Serial('/dev/ttyUSB0', 115200)
    4. while 1:
    5. line = ser.readline()
    6. print line[:-1]
    7. ser.close()


    Mir fehlt nur noch ein Mapping zwischen den jeweiligen Hexcodes und den in der input.h des Kernels definierten Tasten - sobald ich das für eine meiner FB (ich probiere es mal für ein RC-6 MCE-Profil meiner Harmony 300) habe, hänge ich es statt eines lircd-Sockets an mein lircd2uinput und schon habe ich eine "Tastatur" mit der ich alles steuern kann, was unter Linux darauf hört. Per eventlircd/inputlircd kann man das dann natürlich auch als Lirc-Eingaben verwerten.


    Ich sehe die Serielle Schnittstelle eher als Vorteil, da man damit evtl. noch Relais über den Arduino schalten kann usw.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • seahawk1986 :


    Ich habe in der Zwischenzeit mal Richtung remote-plugin versucht, das dürfte mit "-t" und leicht umgestrickten Beispielprogramm auch funktionieren. Steuert dann aber nur den VDR.


    Dein Ansatz hört sich aber deutlich besser an, das probiere ich auch mal aus.


    Grüße, Peter

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein

  • So, mal mein Zwischenstand:
    Benötig werden die Python-Module pyserial, python-uinput und simplejson (der Rest sollte bei einer normalen Python-Installation dabei sein).
    Für Ubuntu gibt es python-uinput für Natty und Oneiric im main-PPA des yaVDR-Teams, der Rest muss es sich aus dem Git holen (siehe https://github.com/yavdr/yavdr…aster/lircd2uinput/README) und selbst bauen (falls die verwendete Distribution keine Pakete/Quellen dafür mitbringt).


    Es gibt ein kleines Python-Skript, mit dem man eine passende Keymap (wird als json abgelegt) erzeugen kann: http://paste.ubuntu.com/830141/
    Einfach Taste drücken, dann Namen eingeben (aktuell werden nur die 66 yaVDR-Standard-Tastennamen (zweite Spalte der Tabelle) unterstützt, ich versuche da noch einen schönen Weg zu finden das auf alle Tasten, die in der input.h definiert sind, auszudehnen).
    Zum Schluss nochmal eine beliebige Taste drücken, dann "quit" eingeben und die json-Datei wird erzeugt.


    Das eigentliche Skript gibt es hier: http://paste.ubuntu.com/830172/ oder auf GitHub: https://github.com/seahawk1986/serial2uinput
    Es erstellt ein uinput-Device und muss daher normalerweise mit Root-Rechten gestartet werden. Die Keytable wird standardmäßig in dem Verzeichnis, in dem das Skript liegt erwartet (anpassbar über Parameter -k bzw. --keymap=/Pfad/zur/Keymap)
    Ein typischer Start-Aufruf sieht bei mir so aus:

    Code
    1. sudo python serial2uinput.py --max-gap=250000 --min-gap=100000 -k /home/alexander/python/keymap.json


    Die Tastenwiederholrate kann ebenfalls auf die eigenen Wünsche angepasst werden (bei XBMC sollte man für --max-gap nicht unter 250000 gehen, sonst prellt es u.U.), siehe mögliche Start-Optionen:


    Viel Spaß beim Ausprobieren.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    The post was edited 2 times, last by seahawk1986 ().

  • seahawk1986 : Danke für das serial to uinput interface.
    Technisch läuft es meiner Einschätzung nach (python-modul für uinput ist installiert, rudimentärer key-Table angelegt, serial2uinput.py läuft ohne Fehlermeldung)


    Ablauftechnisch blicke ich aber noch nicht durch, vielleicht kannst Du mir mal auf die Sprünge helfen. Was ich bisher verstanden habe:
    serial2uinput lauscht auf der seriellen Schnittstelle, holt die erkannten IR-Codes vom Arduino ab und mappt sie in uinput geeignete KEYs um.
    Diese werden dann von serial2uinput in das ?vom Kernel angelegte? uinput-Device (/dev/input/uinput) eingespeist.


    Was ich noch nicht verstehe:
    Wo kommen die von serial2uinput eingespeisten KEY's wieder raus: Aus /dev/input/eventX? Oder woanders? Und noch spannender: Was ist das Mittel der Wahl, um sie dort abzuholen / wie kann ich sie dann nutzen: mit inputlircd oder mit eventlircd? Und die erzeugen dann den lircd-Socket, auf die sich VDR oder XBMC dann connecten?

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

    Linux is the best OS I have ever seen -- Albert Einstein

  • Wo kommen die von serial2uinput eingespeisten KEY's wieder raus: Aus /dev/input/eventX?


    Genau. Wenn du mit "cat /proc/bus/input/devices" mal auf die Eingabegeräte schaust, solltest du soetwas sehen:

    Code
    1. I: Bus=0000 Vendor=0000 Product=0000 Version=0000
    2. N: Name="lircd"
    3. P: Phys=
    4. S: Sysfs=/devices/virtual/input/input5
    5. U: Uniq=
    6. H: Handlers=kbd event5
    7. B: PROP=0
    8. B: EV=3
    9. B: KEY=10000 4000000108fc310 a478d100000000 0 18c00 18040302801 8e168000000000 ffe


    Das liegt an Zeile 32 im Skript:

    Python
    1. def __init__(self, uinput_name="lircd", options=None):


    Ich habe da lircd eingetragen, da es unter yaVDR eine udev-Regel gibt, die alle Tastaturartigen Eingabegeräte, die lircd heißen automatisch über eventlircd einbindet: http://paste.ubuntu.com/831617/ Zeile 30f).


    Mit evtest kannst du z.B. sehen welche Tasten auf den entsprechenden Gerät gedrückt werden.


    Was ist das Mittel der Wahl, um sie dort abzuholen / wie kann ich sie dann nutzen: mit inputlircd oder mit eventlircd?


    Man kann beides verwenden (zu inputlircd: http://wiki.ubuntuusers.de/LIRC#Verwenden-von-inputlirc ), bei eventlircd ist die Konfiguration etwas komplexer, dafür ist es aufgrund seiner evmaps gut geeignet viele verschiedene Empfänger zusammen mit einer FB-Konfiguration im VDR und XBMC zu betreiben.
    Beide sollten einen lircd-Socket erzeugen, den man dann dem VDR übergeben kann.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Freut mich, wenn es klappt :D - ich muss mal sehen, wie man da ein Einschalten des Rechners und ein paar andere Spielereien noch integrieren kann, ohne IRMP mit seinem Interrupt auf dem Arduino zu sehr in die Queere zu kommen...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)