Infrarot (IR) Sender und Empfänger am RaspberryPI steuern mithilfe einer Android Application

Ich wollte mit meinem Raspi eine universelle Fernbedienung für alle meine Infrarot Geräte verwenden (Musikanlage, TV, LED Licht). Am besten wäre es natürlich wenn sich im Endeffekt alle Geräte von zum Beispiel dem Handy steuern lassen würden. Nach einer langen Internet Recherche und meinen Programmierkenntnissen wurde die Idee Wirklichkeit. In diesem Projekt stelle ich alle notwendigen Schritte für eine erfolgreiche Umsetzung vor.


Inhaltsverzeichnis:

  1. Was brauchen wir?
  2. IR Sender und Empfänger basteln
  3. LIRC Bibliothek auf dem RaspPI installieren und einrichten
  4. Android Application programmieren

 

Was brauchen wir?

Für meine Zwecke habe ich einen RaspberryPI Model B Rev.2 verwendet. Es kann aber auch die Rev.1 benutzt werden. Das Model B ist aber notwendig. Hier wird nicht nur eine Ethernet Schnittstelle angeboten sondern auch die Performance ist deutlich besser als die vom Vorgänger.

Für den IR Sender und Empfänger brauchen wir folgende Sachen:

IR Empfänger – Hier empfehle ich den TSOP4838 (38 kHz 950 nm Vishay TSOP4838) zum Beispiel bei Conrad , Ebay

IR Diode – Die ist eig. egal, ich habe diese hier genommen: Conrad

Transistor – Wird benötigt, um den Zustand zu schalten.Zum Beispiel dieser hier : Reichelt oder Conrad

Widerstände – 220 Ohm

Widerstände – 19,5 Ohm (bzw.nicht unbedingt notwendig da im Normalfall kein Strom höher als 50mA bezogen werden kann – sehe Kommentar von Dominik)

Optional: Ein Steckboard um die Schaltung besser prüfen zu können (bevor man alles miteinander verlötet). Zum Beispiel Reichelt

Android:

Ich programmiere in Eclipse. Ich werde nicht auf jeden Schritt einer Anwendungsentwicklung eingehen. Ich setzte die Grundkenntnisse voraus und werde nur die wichtigsten Stellen erklären. Persönlich habe ich für Android 4.0+ entwickelt. Aber die Sachen die wir brauchen lassen sich auch locker mit älteren Android API’s Versionen einrichten.

IR Sender und Empfänger basteln

Zuerst bitte diese Schaltung basteln, mein Freund:

RaspberryPI IR Schaltung

Bitte guck dir das Datenblatt des IR Empfängers genau an um zu erfahren wie dieser angeschlossen werden muss. (Die kleine Grafik oben bezieht sich explizit auf einem Empfänger den ich benutzt habe).

Wenn dein RaspberryPI danach neu startet und die Konsole läuft, können wir weiter machen ;).

LIRC Bibliothek auf dem RaspPI installieren und einrichten

Zuerst müssen wir die Bibliothek natürlich installieren dazu tippen wir in die Konsole das hier ein:

> sudo apt-get install lirc

Solltet ihr andere GPIO’s, für die Signal Übertragung, genommen haben. So müssen diese entsprechend in den Modulen eingetragen werden. Benutzt ihr so wie ich die PIN’s von der obigen Schaltung könnt ihr diesen Schritt auslassen:

(Der Eintrag sowie das neuladen des Modul (LIRC Dienst neustarten) hat leider nicht das gewünschte Ergebnis gebracht.

In der Datei  /etc/modules folgendes eintragen:

lirc_dev

lirc_rpi gpio_in_pin=n (oben 17) gpio_out_pin=n (oben 18)

Wenn ihr andere GPIO’s benutzt reicht es leider doch nicht aus den Eintrag in den Modules zu erweitern bzw. zu verändern. Bei mir hat es nichts gebracht und hat eher noch mehr Probleme verursacht.


So als nächstes müssen wir die Konfigurationsdatei von LIRC anpacken. Ich benutzte standardmäßig den NANO Editor im Linux, aber es würde mit jedem anderen Text Editor funktionieren. Die Datei befindet sich hier:

>cd
 >/etc/lirc/hardware.conf

Um sie bearbeiten zu können, tippen wir das hier ein:

>sudo nano hardware.conf

Wir müssen folgende Änderungen vornehmen:

LIRCD_ARGS="--listen"

#START_LIRCMD=false
#START_IREXEC=false

Es kann gut sein das diese beiden Einträge bereits auskommentiert sind.


Optional falls nicht gesetzt:

LOAD_MODULES=true
DRIVER="default"
DEVICE="/dev/lirc0/"
MODULES="lirc_rpi"

 

Durch den Eintrag „–listen“ wird ein TCP Listener auf dem Port 8765 aufgemacht. Den brauchen wir später für unsere APP.

So nun die Datei speichern und den LIRC Dienst neustarten:

>sudo /etc/init.d/lirc stop
>sudo /etc/init.d/lirc start

So ein bisschen haben wir schon geschafft. 😉 Nun können wir uns jetzt eine Fernbedienung aussuchen die wir einlesen wollen. LIRC liest die eingespeicherten Befehle standardmäßig aus dieser Datei aus /etc/lirc/lircd.conf.

Da wir uns diese nicht direkt am Anfang verhauen wollen, erstellen wir in unserem Home Verzeichnis erstmal eine andere Datei. Zum Beispiel wollen wir jetzt die Fernbedienung der LED – Lampe einlesen. Zuerst müssen wir mit der Aufzeichnung beginnen. Bei der Aufzeichnung müssen wir die entsprechende Funktion der Fernbedienung einer Taste in LIRC zuweisen. Dafür bietet uns LIRC eine fette Auswahl an möglichen Keys an:

>irrecord -list namespace

Wir suchen uns die benötigen Keys raus und schreiben sie uns auf. Nun können wir den Empfänger mal testen.

>sudo irrecord -d /dev/lirc0 ~/led.conf

Bitte folgt den Bildschirm Einweisungen so strikt wie möglich. Das liefert dann die besten Ergebnisse bei der Benutzung. Die möglichen Tastenbefehle haben wir ja von oben. Sollte der Empfänger nicht funktionieren, bitte nochmal die Schaltung überprüfen. Nach Abschluss des ganzen sind alle IR – Befehle in der led.conf in unserem Home Verzeichnis gespeichert.

So jetzt nehmen wir uns den nano Editor zur Hand und öffnen die led.conf Datei.

>nano ~/led.conf

Hier können wir den Namen der FB ändern in zum Beispiel LED. Wir speichern die Datei und kopieren den Inhalt in die /etc/lirc/lircd.conf Datei. Das geht indem man zuerst die lircd.conf Datei aufmacht. Dann mit der Tastenkombi STRG + R die led.conf Datei aus dem Homeverzeichnis holt. Jetzt kann man den alten Inhalt löschen/anpassen und den Inhalt von led.conf reinsetzen. Danach einfach die Datei speichern (eventuell sudo erforderlich).


Diese Vorgehensweise nutze ich immer wenn ich eine neue Fernbedienung einlese. Zuerst in eine eigenes Verzeichnis speichern und dann in die lircd.conf reinkopieren und ggf. anpassen.


So wir haben nun unsere erste Fernbedienung eingelesen 🙂 . Jetzt kann erstmal alles getestet werden. Zuerst aber starten wir den Dienst nochmal neu:

>sudo /etc/init.d/lirc stop
>sudo /etc/init.d/start

Jetzt können wir mit folgendem Befehl :

>irsend SEND_ONCE "Name der DB" "Taste"

vereinzelt die Befehle versenden. Ein Beispiel wäre, die Fernbedienung heißt LED und für die Einschalt-Taste haben wir den KEY_POWER Eintrag genommen. Also schreiben wir in die Konsole:

>irsend SEND_ONCE LED KEY_POWER

Nun müsste die Lichtanlage angehen (geil was?).Ist das nicht der Fall   🙁 überprüfen wir erstmal ob die IR Diode überhaupt was sendet. Dazu nehmt bitte einfach eine Kamera (Handy o.ä) und haltet sie auf die IR Diode drauf. Wenn ihr jetzt ein Befehl versendet müsste die IR Diode kurz aufleuchten. Wenn das nicht der Fall ist würde ich nochmal die Schaltung überprüfen. Leuchtet die Diode auf würde ich die Position der IR Diode zu dem Empfänger überprüfen. Einfach mal von der gleichen Position die Originale FB Testen. Geht das Licht da auch nicht an dann kann unsere IR Diode da auch nichts ausrichten. Funktioniert diese Lösung aber auch nicht dann würde ich die Keys nochmal einlesen und wie oben bereits geschrieben genau auf die Vorgehensweise achten.

Funktioniert alles? Sehr gut. Jetzt starten wir mal mit der APP Programmierung.

Fortsetzung folgt…


Update 15.12.2014

Sorry das es so lange gedauert hat. Aber Arbeit , Arbeit , Arbeit und Bock was neues zu machen, zum Beispiel eine Sprachsteuerung für den Raspberry PI. Eventuell später mehr dazu 😉

Außerdem habe ich gemerkt das WordPress gar nicht so einfach zu administrieren ist vor allem was die Kommentar-Funktion angeht.

Für die Programmierung der Android Application mache ich ein neues Thema auf…wird sonst zu viel hier…LIRC über Android steuern


TCP Port und Befehle testen

Nach der Einrichtung stellt sich die Frage welche Möglichkeiten wir haben die Befehle abzuschicken. Hier benutzen wir die IRSEND Funktion die mit LIRC mitgeliefert wird.

Die wichtigsten Funktionen sind:

SEND_ONCE -> Schickt nur ein Signal ab
SEND_START -> Schickt das Signal ganze Zeit ab
SEND_STOP -> Beendet den START Befehl
LIST -> Listet die Liste der gespeicherten FB's

Wir können jetzt zum Beispiel über den Putty uns die Verbindung zu dem TCP Port aufbauen.

Hostname : Ist die IP Adresse eures Raspberry Pi’s

Port : Default ist es der Port 8765

Connection Type : RAW

Bekommt ihr eine Verbindung so könnt ihr mit folgender Syntax Signale über die IR Diode abschicken:

<FUNKTION> <FB> <KEY>

Beispiel:

>SEND_START TV KEY_VOLUMEUP
>SEND_STOP TV KEY_VOLUMEDOWN

Diese Befehle funktionieren natürlich, wie oben bereits erwähnt, auch direkt über das Terminal:

>IRSEND "FUNKTION" "FB" "KEY"

INFO für Raspberry 2 User (bzw. Kernel Version höher 3.18.3 ):

In den Kommentaren hatten die Nutzer Probleme mit LIRC und dem Raspberry Pi 2. Die Befehle wurden nicht versendet oder die Module nicht geladen.Allerdings ist es nicht davon abhängig welche Version ihr habt sondern welche Version des Kernels bei auch läuft. Ab der Version 3.18.3 wird für das Laden der Module das sogenannte DeviceTree eingesetzt. Sollte also bei euch das Projekt nicht funktionieren liegt es vermutlich an nicht geladenen Modulen. Schaut also zuerst welche Kernel Version ihr habt:

>uname -r

Ist die Version größer/gleich 3.18.3 dann müssen wir die config Datei die nun für das Laden der Module zuständig ist bearbeiten:

>sudo nano /boot/config.txt

Hier scrollen wir ganz nach unten und fügen folgendes rein:

dtoverlay=lirc-rpi

oder wenn ihr nicht die Default Pins verwendet:

dtoverlay=lirc-rpi,gpio_out_pin=<pinnummer>,gpio_in_pin=<pinnummer>

Danach die Datei speichern und den Raspberry neustarten. Nun sollte alles funktionieren. Geht es immer noch nicht besteht die Möglichkeit das DeviceTree abzuschalten.Dazu folgendes in die boot.txt Datei einfügen:

device_tree=

und die LIRC Module in die /etc/modules Datei eintragen.

55 Gedanken zu „Infrarot (IR) Sender und Empfänger am RaspberryPI steuern mithilfe einer Android Application

  1. Tobias P.

    Hi,
    erstmal Danke, das ist das erste Tut, das ich auf anhieb checke… aber irgendwas geht doch nicht…
    ich habe die schaltung genau nachgebaut, auch alle Dateien geändert, aber beim Einrichten wird kein Tastendruck erkannt… egal was ich auch probiere…
    ich bitte verzweifelt um Hilfe, auch wenn der Beitrag jetzt auch schon etwas her ist…
    Danke!
    Gruß Tobi

    Antworten
    1. BoBek Beitragsautor

      Hi Tobi,

      heißt das, das du keine Tasten anlernen kannst oder wird nichts abgeschickt? Ich bin auch nicht mehr so in der Materie drin, aber es lässt sich bestimmt was machen. Ich brauche einfach nur mehr Infos was genau nicht geht …

      Antworten
      1. Tobias P.

        Hi BoBek,
        erst mal Danke für die Antwort.
        nun…
        die lirc-Version, die ich verwende (daran liegts wahrscheinlich) ist die 0.9.4 (in der wird ja andscheinend auf die hardware.conf verzichtet)
        scheitern tut es schon beim neustarten des lirc-Dienstes.
        Wenn ich ihn stoppen will, dann spuckt er
        >Failed to stop lirc.service: Unit lirc.service not loaded.Failed to start lirc.service: Unit lirc.service not found.mode2 -d /dev/lirc0<
        dann soll man ja auf irgendwelche Tasten drücken, welche dann als RAW ausgegeben werden, aber bei mir tut sich nicht, als würde ich nicht senden

        Antworten
        1. Tobias P.

          Okay, da ist etwas ein bisschen durcheinander gepurzelt, ich schreib das wesentliche nochmal hin:
          beim Stoppen:
          „Failed to stop lirc.service: Unit lirc.service not loaded.“
          Beim Starten:
          „Failed to start lirc.service: Unit lirc.service not found.“
          Beim Test mit mode2 -d /dev/lirc0:
          nichts

          Antworten
          1. BoBek Beitragsautor

            Ohne Scheiß, sieht für mich so aus, als ob LIRC gar nicht installiert wäre oder es zumindest den Dienst nicht gibt. Habe eben auf meinem Raspberry (Ver 1.) die Version ‚lircd 0.9.0-pre1‘ installiert. Unter /etc/ lirc finde ich alle Konfig-Dateien auch die Hardware.conf. Kann den Dienst auch ohne Probleme starten und beenden.

            Hast du einmal unter /etc/init.d nachgeschaut ob es den Dienst „lirc“ überhaupt gibt?

          2. Tobias P.

            HI,
            ähm…nein, tatsächlich ist lirc dort nicht vorhanden, genau so wenig wie lircd oder sowas in der Art.
            Ich habe es versucht neu zu installieren, aber auch dann ist lirc nicht da.
            Du sagst, du hast die 0.9.0, aber ich bekomme nur die .4, vielleicht kannst du mir kurz erklären, wie ich deine Version bekomme, weil dann muss ja deine Anleitung auch für mich funktionieren…
            Danke

          3. BoBek Beitragsautor

            Ok also ich habe die „lircd 0.9.0-pre1“ über:

            >sudo apt-get install lirc

            installiert.Das heißt mir wurde keine neuere Version angeboten. Wenn du explizit „meine“ Version installieren willst versuche es mal mit:

            >sudo apt-get install lirc=0.9.0~pre1-1.2

            dann solltest du genau die Version bekommen, welche ich eben installiert habe. Mit:

            >lircd -v

            kannst du die Version checken.

          4. Tobias P.

            Als Error wird mir:
            Version ‚0.9.0~pre1-1.2‘ for ‚lirc‘ was not found
            ausgegeben, aber es gibt doch die lirc-download seite, mit der man sich verschiedene Versionen holen kann. Jedoch verstehe ich dafür die Installation dann nicht…

          5. BoBek Beitragsautor

            APT muss funktionieren, dass ist doch das geile an Linux. Sicher, dass du es genau so kopiert hast wie ich es oben angegeben habe? Was mach das Komma bei dir vor der 0? Die Version muss schon passen. Ansonsten führe bitte nochmal

            >sudo apt-get install lirc

            aus und zeige mir deine Konsole. Steht da überhaupt das, dass Paket installiert wird bzw. worden ist?

          6. Tobias P.

            ja, APT funktioniert auch, jedoch ist diese Version nicht mehr als Package zum herunterladen in der APT Datenbank vorhanden. Jedoch glaube ich, hab ich eine Lösung gefunden. Und zwar verwende ich das aktuelle Raspbain IMG, und mit aktuell mein ich raspbain stretch, und ich denke(bzw hoffe) du verwendest noch jessi, denn ich denke da ist noch die aktuellste Lirc-Version die 0.9.0.
            Ich bin gerade dabei Jessi auf die SD zu flashen, ich melde mich dann, und hoffentlich mit der Lösung 😉

          7. Tobias P.

            Mh, ok ein Problem gelöst, folgt schon das nächste…
            also ich habe nun auch lirc 0.9.0~pre 1.2
            auch hab ich nun wieder die hardware.conf und kann den lirc Dienst starten/stoppen.
            wenn ich den Empfänger nun mit „mode2 -d /dev/lirc0“ teste, dann empfange ich jedoch nichts… obwohl alles richtig aufgebaut ist… langsam verzweifel ich…

        2. Tobias P.

          Mh, ok ein Problem gelöst, folgt schon das nächste…
          also ich habe nun auch lirc 0.9.0~pre 1.2
          auch hab ich nun wieder die hardware.conf und kann den lirc Dienst starten/stoppen.
          wenn ich den Empfänger nun mit „mode2 -d /dev/lirc0“ teste, dann empfange ich jedoch nichts… obwohl alles richtig aufgebaut ist… langsam verzweifel ich…

          Antworten
          1. BoBek Beitragsautor

            Eben nochmal bei mir angeschlossen. Ich kann ohne Probleme mit deinem Befehl empfangen. Hast du den Empfänger am Standard GPIO angeschlossen?
            In der BootConfig (/boot/config.txt) unter dtoverlay=lirc-rpi kannst du ansonsten die GPIO PIN’s! eintragen welche du verwendest (Die Info steht weiter oben im Beitrag). Die default PINS sind :

            gpio input pin (PIN12 – GPIO18)
            gpio output pin for transmission is PIN11 – GPIO17

            Sehe auch lirc_rpi

            Ansonsten fällt mir auch nichts mehr ein. An deiner Stelle würde ich nochmal die Schaltung durchgehen. Eventuell nur irgendwas falsch angeschlossen was man übersehen hat…

          2. Tobias P.

            Pin 17 und 18, aber jetzt geht es auch, ich habe den Receiver mal gewechselt, andscheinend war der andere defekt…
            Ich konnte jetzt auch all meine Geräte einlesen, biss auf meinemn Fehrnsehr, der wirft mir immer beim einlesen einzelner Tasten den fehler „something went wrong“… hast du vielleicht eine Idee?

  2. Thomas

    Hallo,

    ich kann bereits IR Signale empfangen und über Konsole senden.

    Aber den TCP Listener kann ich nicht starten.
    Auf meinem System (Raspberry 2; OSMC 2016.05-1 ;Kodi 16.1; lirc-0.9.0) gibt es keine /etc/lirc/hardware.conf.
    Auch unter einem anderen Pfad gib es die Datei nicht. sudo find / -name hardware.conf liefert kein Ergebnis.
    Was mache ich falsch?

    Antworten
    1. BoBek Beitragsautor

      Hallo Thomas,

      konnte zu der fehlenden hardware.conf im Internet auch nichts finden. Wenn du aber jetzt bereits „fast“ alles machen kannst und nur noch der TCP Listener fehlt, gibt es noch die Möglichkeit über ein Parameter diesen zu starten. Dazu erst, wenn nötig, den laufenden LIRC Dienst beenden:
      >sudo /etc/init.d/lirc stop
      und dann mit dem Parameter -l den Port aufmachen:
      >sudo lircd -l0.0.0.0:8765
      mit
      >netstat -a
      kannst du dann schauen ob ein Port 8765 aufgemacht wurde
      mehr Infos dazu findest du auf der offiziellen Seite http://www.lirc.org/html/lircd.html

      Antworten
      1. Thomas

        Hallo Bobek,

        Danke für deine Antwort.

        Ich bin mit deiner Hilfe etwas weiter gekommen.
        hab den Listener wie beschrieben gestartet.
        Nach „netstat -a“ bekomme ich folgende Aussage:
        tcp 0 0 *:8765 *:* LISTEN

        Mit Putty kann ich auf den Port connecten.

        Aber auch bei mir schließt sich das Fenster sofort, wenn ich einen Befehl absende.
        An der IR LED scheint aber nichts rauszukommen.

        Über Konsole sieht das auch nicht besser aus:
        osmc@osmc:~$ echo „SEND_ONCE AMP KEY_POWER“ | nc localhost 8765
        nc: can’t connect to remote host: Connection refused

        Folgender Befehl funktioniert aber:
        irsend -d /var/run/lirc/lircd-lirc0 SEND_ONCE AMP KEY_POWER

        Wenn ich geziehlt meine IP Adresse angebe sieht die Antwort anders aus:
        osmc@osmc:~$ echo „SEND_ONCE AMP KEY_POWER“ | nc 192.168.160.203 8765
        BEGIN
        SEND_ONCE AMP KEY_POWER
        ERROR
        DATA
        1
        hardware does not support sending
        END

        Wie komme ich jetzt weiter?

        Thomas

        Antworten
        1. BoBek Beitragsautor

          Also hier ist meine Vermutung. In der hardware.config wird die Standard Gerätedatei (DEVICE) angegeben. Bei mir ist das die /dev/lirc0. Ich vermute mal der TCP Listener greift auf die Standard Device Datei zu, ist diese nicht vorhanden oder heißt die anders wird nichts abgeschickt und die Meldung „hardware … support sending“ wird ausgegeben. Da bei dir die hardware.conf fehlt kannst du auch den DEVICE Namen nicht ändern. Nun die Frage welche Datei sich bei dir im /dev Ordner befindet.Bei mir sind es zwei lircd und lirc0. Ich habe gesehen, das du über den Parameter -d was anderes mitgibst. Bei mir sieht ein funktionierender Aufruf so aus:
          >irsend -d /dev/lircd SEND_ONCE AMP KEY_POWER
          wobei ich das „device“ nicht explizit mitgeben muss, es funktioniert auch ohne. Über nc habe ich auch keine Probleme.Kannst du mir sagen was bei dir im /dev Ordner liegt? Zusätzlich schau bitte hier nach /lib/udev/rules.d/ und poste mal den den Inhalt der Lirc Datei (bei mir heißt diese 85-lirc.rules).

          Antworten
          1. Thomas

            Hallo,

            Im meinem /dev Ordner liegt lirc0.

            Im Ordner /lib/udev/rules.d/ sind folgende Dateien:
            osmc@osmc:/lib/udev/rules.d$ ls
            42-usb-hid-pm.rules 73-idrac.rules
            50-firmware.rules 73-seat-late.rules
            50-udev-default.rules 75-net-description.rules
            55-dm.rules 75-persistent-net-generator.rules.distributed
            60-cdrom_id.rules 75-probe_mtd.rules
            60-cdrom_id.rules.distributed 75-tty-description.rules
            60-drm.rules 78-sound-card.rules
            60-fuse.rules 80-drivers.rules
            60-gnupg.rules 80-net-setup-link.rules
            60-keyboard.rules 80-networking.rules
            60-persistent-alsa.rules 80-udisks.rules
            60-persistent-input.rules 85-hdparm.rules
            60-persistent-serial.rules 85-hwclock.rules
            60-persistent-storage-dm.rules 95-udev-late.rules
            60-persistent-storage-tape.rules 97-hid2hci.rules
            60-persistent-storage.rules 98-eventlircd-names.rules
            60-persistent-v4l.rules 98-eventlircd.rules
            61-accelerometer.rules 98-eventlircd.rules.disabled
            64-btrfs.rules 98-lircd.rules
            70-power-switch.rules 98-lircd.rules.disabled
            70-uaccess.rules 99-systemd.rules

            Der inhalt von 98-lircd.rules:

            #——————————————————————————-
            # Ask lircd_helper to lirc devices.
            #——————————————————————————-
            SUBSYSTEM==“lirc“, \
            ENV{lircd_driver}=“default“, \
            ENV{lircd_conf}=“/etc/lirc/lircd.conf“

            #——————————————————————————-
            # Ask lircd_helper to handle USB devices that do not show up as lirc devices
            # and are supported by lircd. Remote controls that are USB HID devices that show
            # up as event devices are not included as as they are handled by eventlircd.
            #——————————————————————————-
            SUBSYSTEMS==“usb“, GOTO=“begin-usb“
            SUBSYSTEMS==“usb“, GOTO=“begin-usb“
            GOTO=“end-usb“
            LABEL=“begin-usb“

            ENV{ID_USB_INTERFACES}==““, IMPORT{program}=“usb_id –export %p“

            ENV{ID_VENDOR_ID}==“0fe9″, ENV{ID_MODEL_ID}==“9010″, \
            ENV{lircd_driver}=“dvicoo“, \
            ENV{lircd_conf}=“/etc/lirc/dvicoo-lircd.conf“

            ENV{ID_VENDOR_ID}==“0471″, ENV{ID_MODEL_ID}==“0617″, \
            ENV{lircd_driver}=“srm7500libusb“, \
            ENV{lircd_conf}=“/etc/lirc/philips-srm-7500-lircd.conf“

            ENV{ID_VENDOR_ID}==“0b48″, ENV{ID_MODEL_ID}==“2003″, \
            ENV{lircd_driver}=“default“, \
            ENV{lircd_conf}=“/etc/lirc/ttusbir-lircd.conf“

            ENV{ID_VENDOR_ID}==“0419″, ENV{ID_MODEL_ID}==“0001″, \
            ENV{lircd_driver}=“samsung“, \
            ENV{lircd_conf}=“/etc/lirc/samsung-lircd.conf“

            ENV{ID_VENDOR_ID}==“0bc7″, ENV{ID_MODEL_ID}==“0008″, \
            ENV{lircd_driver}=“atilibusb“, \

          2. BoBek Beitragsautor

            Wir haben anscheinend unterschiedliche Versionen von LIRC. Eine letzte Chance:
            >sudo killall lircd
            >sudo lircd -d /dev/lirc0
            >echo „SEND_ONCE AMP KEY_POWER“ | nc 192.168.160.203 8765

            Melde dich ob es funktioniert hat.

          3. Thomas

            Hallo,

            so funktioniet es.
            >sudo killall lircd
            >sudo lircd -d /dev/lirc0 -l0.0.0.0:8765
            >echo „SEND_ONCE AMP KEY_POWER“ | nc 192.168.160.203 8765

            Danke für deine Unterstützung.

  3. Holger

    Hallo ich habe das Problem das bis jetzt alles funktioniert hat bis auf das senden eines befehls.
    Da bekomme ich immer
    irsend: command failed: SEND_ONCE lgsound KEY_POWER
    irsend: transmission failed

    Woran kann das liegen?
    Benutze den Raspberry Pi 2 B
    Und ir Sender und Empfänger am gpia 22, 23

    Antworten
    1. BoBek Beitragsautor

      Hallo Holger,

      könntest du mal unter „/etc/lirc“ folgendes ausführen:
      >dmesg | grep lirc
      und mir den Inhalt nochmal posten? Außerdem bräuchte ich auch deine „hardware.config“ und „lircd.conf“ Dateien. Hast du auch alles befolgt was ich zu RaspberryPi 2 geschrieben habe? Ich nehme mal an das es so ist, weil ja der Empfänger funktioniert. Oder?

      Antworten
  4. Alex

    Hallo,

    ist es normal, dass beim Senden eines TCP Befehls über Putty, sich das Fenster gleich wieder schließt? Der Port ist aktiv und eine Verbindung baut er anscheinend auch auf

    Antworten
    1. BoBek Beitragsautor

      Hallo Alex,

      du hast vollkommen Recht. Bei mir wird zwar auch die Verbindung aufgebaut aber beim versenden wird Putty direkt geschlossen. Wenn du im Terminal irsend die Port Nummer mitgibst funktioniert komischerweise alles:
      > echo „SEND_ONCE TV KEY_POWER“ | nc localhost 8765
      Das mit Putty ist mir nicht aufgefallen, weil ich einen eigenen TCP Server auf dem Raspberry am laufen habe. Aber ich weiß das es früher funktioniert hat.Ich muss mir das mal alles in Ruhe anschauen bin aber leider über das WE nicht erreichbar. Eventuell würde ich mich am Sonntag nochmal melden. Solltest du etwas herausfinden würde ich mich über eine Antwort freuen…

      Ciao

      Antworten
      1. Alex

        Hey,

        habe jetzt ewig rumprobiert, jedoch kam ich zu keiner vernüftigen Lösung. Sobald ich gestern im Terminal den Port mitgegeben habe, ging es bei der RAW Verbindung auch ohne Portmitgabe, jedoch nur ca. 5 mal. Danach hat sich das Fenster wieder mit der Eingabetaste sofort geschlossen. Heute blieb das Fenster nie offen, egal was ich versucht habe. Habe auch eine normale LED anstatt der IR LED, um nicht immer eine Kamera nehmen zu müssen um zu sehen, ob der Pi sendet. Jedoch kam beim Senden über TCP nie ein Signal an. Werde jetzt mal deinen Java-Server versuchen.

        Lg

        Antworten
          1. BoBek Beitragsautor

            Hi Alex.

            ja der selbst gemachte Server wird natürlich funktionieren, weil hier die LIRC Befehle direkt im Terminal ausgeführt werden und eben nicht über den eingebauten TCP Listener. Ich hatte leider noch keine Zeit mir das Problem von oben genauer anzuschauen, hoffe aber das ich in paar Tagen einen Lösungsvorschlag liefern kann. Bis dahin freue ich mich wenn es über Umwege auch bei dir funktioniert.

            Ciao

  5. Dirk

    Hallo zusammen
    beim senden bekomme ich immer folgende ausgabe:
    irsend: could not connect to socket
    irsend: No such file or Directory

    eine Datei mit den namen /dev/lircd kann ich nicht finden
    kann mir jemand helfen?

    Antworten
    1. BoBek Beitragsautor

      Hallo Dirk,

      Hast du in der Hardware.conf
      >LIRCD_ARGS=“–listen“
      stehen? Wenn du
      >netstat -a
      in der Konsole ausführst, siehst du dann den geöffneten TCP Listener? Wenn du den Default Port „8765“ genommen hast dann müsste da was von *:8765 stehen (Status:Listen). Oder funktioniert das Versenden der Befehle auch aus der Konsole nicht? Eventuell lohnt sich einmal
      >lsmod
      auszuführen um zu gucken ob die Lirc Module geladen worden sind (lirc_rpi und lirc_dev). Vielleicht ist der Dienst einfach nicht aktiv. In dem Fall versuche es mal mit:
      >sudo lircd start
      Oder direkt am Anfang starten und mit:
      >dpkg –get-selections | grep -v deinstall
      schauen ob LIRC installiert worden ist. In der Liste muss dann einfach LIRC stehen. Ist das nicht der Fall dann bitte folgendes ausführen:
      >sudo apt-get update
      >sudo apt-get install lirc
      Meld dich solltest du weiterhin Probleme haben…

      Antworten
    2. Dirk

      Hallo danke für die Antwort
      die Befehle starten auch aus der Konsole nicht
      um den Empfänger in gang zu bringen musste ich
      folgende Einträge in /boot/config.txt

      dtoverlay=lirc-rpi,gpio_in_pin=17 ,gpio_out_pin=18

      es scheint mir das es noch Probleme LIRC und den RASPI2 gibt sicher bin ich mir da aber nicht!

      Hat noch jemand einen Tipp?
      Danke Dirk

      hinzufügen

      Antworten
      1. Tom

        Hallo Dirk,
        ich benutze auch den Raspi2 und bin so vorgegangen, wie auf dieser Seite beschrieben.
        Zusätzlich habe ich die /boot/config.txt um diese Zeile erweitert:
        dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=18

        Bei mir ist also in-pin und out-pin vertauscht.
        Ich glaube aber nicht, dass das Deinen Fehler auslöst.

        Bei mir war beim Senden kein Leuchten der Diode zu erkennen.
        Mit einem Oscilloskop konnte ich aber festestellen, dass einige Microsekunden lang der Pegel an PIN 17 auf 3,3Volt ging.
        Ein Update der Firmware war hier die Lösung.
        Installiere mal rpi-update, um Deine Firmware auf den neuesten Stand zu bringen.
        Mit dieser Version klappt es jetzt prima:
        Linux raspi 3.18.10-v7+ #774

        Bei mir gibt es auch keine Datei /dev/lircd, wohl aber die Datei /dev/lirc0.
        Hast Du die in /etc/lirc/hardware.conf eingetragen?
        Lade Dir mal von den lirc-Download-Seiten eine gültige lircd.conf herunter.
        Vielleicht klappt es ja damit.

        Gruß,
        Thomas

        Antworten
  6. Dominik

    Ist der geringe Vorwiderstand der LED so beabsichtigt, bzw. kann mir jemand erklären wie sich die 1,5 Ohm rechnerisch begründen lassen? Oder wird die LED einfach außerhalb ihrer Spezifikationen betrieben, da sie nur kurze Impulse bekommt, die sie verkraften kann ohne kaputt zu gehen?

    Antworten
      1. Dominik

        Hallo BoBek,

        danke für die Antwort. Ich würde es dennoch gerne etwas genauer wissen/verstehen.

        Meine Überlegung ist folgende: Ich ignoriere den Transistor bzw. unterstelle, dass an diesem keine Spannung abfällt (kein Widerstand zwischen Collector und Emitter). Dann würde ich den Vorwiderstand für die Diode (Nennspannung 1,35) folgendermaßen berechnen:
        R = (3,3 V – 1,35 V)/0.1 A = 19,5 Ohm

        Damit ich auf den 1,5 Ohm Vorwiderstand komme, müsste am Transistor eine Spannung von 1,8 V abfallen, was mit etwas viel erscheint:
        R = (3,3 V – 1,35 V – 1,8 V)/0.1 A = 1,5 Ohm

        Was mich zusätzlich etwas verwundert:
        Laut Datenblatt liefert die 3,3 V Leitung des RaspPi 50 mA. Sollte die Schaltung dann nicht maximal auf diesen Wert ausgerichtet sein?

        Bin leider kein E-Techniker. Vermutlich verstehe ich etwas komplett falsch.

        Schöne Grüße
        Dominik

        Antworten
        1. BoBek Beitragsautor

          Helloo,

          hmmm…sollte der Raspi nur 50mA liefern dann brauchen wir den Vorwiderstand gar nicht (auch bei 100mA war der eher als Sicherung gedacht) Die Spannung von (3,3V – 0,7) kann ja an der Diode abfallen solange sie ihre 1,35 Volt erreicht und der Strom nicht überschritten wird stört sie das nicht. Ich bin auch kein Elektroniker vom Beruf deshalb habe ich hier wohl nicht genug überlegt. Sorry 😀

          Antworten
          1. Dominik

            Hi,

            soweit ich es herausfinden konnte, ist die 3,3 V Leitung wohl auf 50 mA ausgelegt. Dennoch scheint es möglich zu sein mehr Strom aus dieser zu beziehen [1]. In wie weit das dem Raspi auf Dauer gut tut weiß ich jedoch nicht. Vermutlich ist es für die kurzen Impulse aber egal. Dennoch ist es evtl sicherer eine Schaltung zu bauen, die ihren Strom aus der 5 V Leitung bezieht, da diese ~300 mA liefert. Damit lassen sich sogar zwei LEDs in Reihe betreiben (siehe [2]). Was mich an dieser Schaltung in [2] jedoch stört ist der fehlende Vorwiderstand für die Basis des Transistors.

            Falls es nicht zu viel Arbeit macht, könntest Du einmal die Rechnung aufschreiben, die dich auf die 1,5 Ohm gebracht hat?

            Danke und viele Grüße
            Dominik

            [1] http://www.mikronauts.com/raspberry-pi/pi-jumper/

          2. BoBek Beitragsautor

            Hi Dominik,

            so ich habe nochmal alles rausgekrammt was ich mal zu diesem Thema gefunden habe. Es war wohl so das ich damals nicht wusste welcher Maximale Strom aus der Raspi gezogen werden kann. Deshalb war der 1,5 Ohm eher als Schutz für die restliche Schaltung gedacht falls die Diode sich verabschieden sollte. Bei einer Spannung von 2,5V und einem geringen Vorwiderstand war ein Schutz von über 2A drin. Ich werde oben hinschreiben das man den Widerstand weglassen kann.Du hast Recht wenn du sagst das man man hier gar keinen Vorwiderstand braucht, wenn es nur 50mA sind die man rausholen kann. Zu deiner Schaltung von oben – Der Widerstand der Basis sind doch die dort angegebenen 10kOhm oder nicht? Sollte man aber 300mA über die 5 Volt beziehen können würde ich in diesem Fall ein Vorwiderstand setzten.Der wäre zwar gering aber besser platziert als bei meinem Beispiel oder was meinst du dazu? Ur = 5V – 0,7V – 1,35V – 1,35V (Falls die Dioden auch mind.1,35V brauchen) = 1,6V R=1,6/0,3 = 5,33Ohm

          3. Dominik

            Hi BoBek,

            in der Schaltung mit den zwei Dioden ist der Widerstand parallel geschaltet und nicht in Reihe, damit wird der Strom durch die Basis meiner Meinung nach nicht begrenzt. In dieser Schaltung würde ich daher vorsichtshalber (wie Du es vorschlägst) einen geringen Vorwiderstand einsetzen, wobei ich mir nicht sicher bin, ob die 0.7 V zwischen Kollektor und Emitter stimmen. (Für den BC548 hatte ich mal was von 0,25 V gelesen). Zudem würde ich den Stromfluss in die Basis mit einem zusätzlichen Vorwiderstand (in Reihe) begrenzen.

            Ich denke am Ende läuft es einfach auf etwas Experimentieren hinaus. Sollte die Diode nicht hell genug leuchten muss man eben mit den Vorwiderständen spielen. Dabei besteht aber durchaus die Gefahr, dass man zu viel Strom aus dem Raspi zieht und dieser dadurch abstürzt, oder gar ein Bauteil kaputt geht (z.B. ein überlasteter Spannungswandler).

            Zurück zu deiner Schaltung:
            Die 100 mA Stromfluss für die Diode sind wohl der empfohlene Maximalwert im Dauerbetrieb. bei kurzen Belastungen darf mehr Strom fließen (im Datenblatt sind auch Werte von 1A für 100 us angegeben), ohne dass die Diode Schaden nimmt. Gleiches gilt vermutlich auch für den Spannungswandler für die 3,3 V auf dem Raspi, der kurzzeitig ebenfalls überlastet werden kann. Nebenbei dürfte auch der Transistor den Stromfluss durch die Diode begrenzen.

            Die grundsätzliche Gefahr die ich gesehen habe, ist dass mit einem 1,5 Ohm Widerstand der Stromverbrauch der Diode auf ~2A ansteigen kann und der Raspi überlastet wird. Hierbei ist auch zu beachten, dass der Stromverbrauch der Diode mit steigender Spannung überproportional ansteigt. Daher würde ich für einen sicheren Betrieb einen größeren Vorwiderstand verwenden. Um genau die 100 mA zu erreichen wäre dann ein Widerstand von ~19.5 Ohm nötig (siehe oben), was evtl. die Reichweite zu weit senkt.

            Komplette Klarheit kann vermutlich nur ein erfahrener E-Techniker in die Sache bringen. Trotzdem erstaunlich, was bei einer recht einfachen Schaltung bereits für Unstimmigkeiten entstehen können.

            Viele Grüße
            Dominik

          4. Dominik

            P.S.: Um es noch einmal deutlich zu machen: Meine Aussage war nicht, dass man den Vorwiderstand weglassen sollte, sondern diesen ggf. erhöhen sollte, um nicht zu viel Strom aus dem Raspi zu ziehen.

  7. Tevi

    Hey,

    danke für deine Anleitung. Das einlesen einer taste hat nach ein paar Start Problemen dann doch noch geklappt. Leider komme ich beim Senden nicht weiter. Nach irsend bekomme ich eine Fehlermeldung…

    >irsend SEND_ONCE LED KEY_POWER
    irsend: could not connect to socket
    irsend: No such file or directory

    Ich arbeite mit einem Raspberry Pi B+ und neu installiertem Raspbian
    An den GPIO Pins habe ich nichts verändert!

    Ich hoffe hier kannst du mir weiter helfen.

    P.S.

    Da ich beim einlesen der Fernbedienung mit irrecord anfangs Probleme hatte möchte ich hier kurz noch erklären was bei mir geholfen hat, vielleicht hilft es anderen.

    1) Vor dem einlesen muss das Modul „lirc_rpi“ geladen werden.

    >sudo modprobe lirc_rpi

    Danach kann der irrecord Befehl wie in der Anleitung steht verwendet werden.

    2) Der hier verlinkte IR Empfänger TSOP4838 hat eine andere PIN Belegung als in der Grafik gezeigt. Unbedingt das Datenblatt beachten. Ich habe mir durch falsches anschließen 2 IR Empfänger geschrottet das geht ratzfatz.

    Lg. Tevi

    Antworten
    1. BoBek Beitragsautor

      Hallo Tevi,

      erstmal vielen Dank für den Hinweis zu dem verlinkten IR-Empfänger (es ist scheiße das du zwei direkt tauschen musstest). Ich bin mir ganz sicher das ich bei der Erstellung des Beitrags die richtigen Links drin hatte. Ob Conrad da was gedreht hat?Ich habe keine Ahnung.Allerdings ist genau der Empfänger,für welchen ich die Grafik oben hochgeladen habe, auf Conrad nicht mehr zu haben. Den habe ich jetzt nur noch auf Ebay gefunden: TSOP4838. Nun ja ich werde oben die Infos aktualisieren.

      So nun zu deinem Problem:
      1).Hast du nach der Installation den LIRC Dienst neugestartet? Dabei wird ja auch modprobe ausgeführt um das Modul zu laden. Normalerweise reicht das aus. Der Dienst muss mit sudo Rechten ausgeführt werden.
      2). Nun du kannst also keine Befehle verschicken.
      –Beende erstmal den Dienst : ‚>sudo /etc/init.d/lirc stop‘
      –Nun gehst du in diesen Ordner rein:’>cd /dev‘
      –In diesem Ordner befindet sich die ‚lircd‘ Datei. Überprüfe einmal die Rechte auf die Datei mit: ‚>ls -l‘
      –Die Rechte sollten so aussehen: ‚lrwxrwxrwx 1 root root 21 Jan 16 01:46 lircd -> ../var/run/lirc/lircd‘
      –Ist das nicht der Fall setzte bitte die Rechte fest: ‚>sudo chmod 666 /dev/lircd‘
      –und starte den Dienst neu: ‚>sudo /etc/init.d/lirc start‘
      Nun teste nochmal das verschicken. Sollte es nicht funktionieren kannst du dich gerne nochmal hier melden. Dann könntest du mir auch bitte den Inhalt der lircd.conf und hardware.conf rein posten. Bis dahin viel Spaß beim basteln. 😉

      Antworten
  8. Simon

    So kompliziert scheint das Tutorial nicht zu sein, aber trotzdem stimmt bei mir was nicht. Ich habe die RazBerry Erweiterung Weshalb ich Pin 1 und Pin 6 nicht nutzen kann. Die Stromversorgung dürfte aber nicht das Problem sein. Da ich nur senden will, hab ich auch keinen Empfänger angeschlossen. Ist der nötig oder müsste es auch ohne gehen? Ich bekomme folgende Meldung.

    irsend: command failed: SEND_ONCE Samsung_BN59-00937A KEY_MUTE
    irsend: transmission failed

    Antworten
    1. BoBek Beitragsautor

      Hi! Nein der Empfänger ist nicht unbedingt notwendig. Solange du die richtige Liste (mit den richtigen Codes) in der lircd.conf drin hast kannst du die jeweiligen Systeme steuern.

      Versuche erstmal lircd mit dem –nodaemon Parameter zu starten:

      http://wiki.ubuntuusers.de/Lirc

      Dort einfach die Schritte ausführen eventuell bringt die Ausgabe etwas. Ansonsten müsste ich bei mir alles testen.

      Ps. Wichtig ist auch das die Diode über 3,3V betrieben wird. Das wäre dann bei dir GPIO 17 glaube ich.

      Antworten
      1. Simon

        Danke für die Hilfe. Ich verstehe das ganze jetzt nicht ganz. Ich habe den Parameter –nodaemon genutzt. Also Antwort bekomme ich „Unable to load LIRC kernel modules“. lsmod sagt lirc_rpi und lirc_dev sind geladen… wenn ich das richtig verstehe. Neuinstallation, insmod, rmmod, alles möglich versucht. Immer das Gleiche. Jetzt fand ich ein Posting und hab dann meine lircd.conf gelöscht (Samsung TV Codes) und dann den Code für Apple TV enigefügt. Hab das Gerät zwar nicht, aber jetzt bekomme ich mit „irsend SEND_ONCE Apple_A1294 KEY_OK“ keine Fehlermeldung. Bin momentan nur per SSH auf dem Raspi und kann erst später testen, ob die IR LED sendet, aber komisch finde ich das schon, denn mit dem –nodaemon Parameter bekomme ich noch immer die Fehlermeldung… ich werde Linux nie verstehen.

        Antworten
        1. BoBek Beitragsautor

          Ok… Schau erstmal ob die Diode was sendet. Sollte es der Fall sein dann muss es funktionieren. Sollte es aber nicht funktionieren müssen wir weiter überlegen.

          Antworten
          1. Simon

            So, erste gute Nachricht. LED sendet, nachdem ich /etc/modules geändert habe. Hab das oben wohl falsch verstanden. Bei mir geht es jetzt nach
            lirc_rpi gpio_in_pin=18 gpio_out_pin=17

            Jetzt natürlich das Problem mit dem Codes ohne IR Receiver. Aber habe Pronto Codes und pronto2lirc.py. Ersten Code umgewandelt und der Receiver geht an. Jetzt muss ich nur noch alle Codes umwandeln, die ich brauche.

          2. BoBek Beitragsautor

            Freut mich!

            Also normalerweise sind ja die LIRC Standard GPIO’s 18 und 17. Man muss sie nicht extra in den Modules angeben. Hauptsache es funktioniert jetzt ich wünsche dir viel Spaß damit 😉

  9. Frank

    Hallo,
    leider gibt es ja bislang keine Fortsetzung von deiner sehr guten Erklärung. Mich würde interessieren, wie man jetzt mittels UDP Befehlen auf den geöffneten Port den Pi zum Senden von IR Befehlen bringt. Es wäre nett, wenn du das kurz ausführen könntest. Danke.

    Antworten
    1. BoBek Beitragsautor

      Hallo Frank,

      du meinst wohl TCP Befehle die du abschicken willst. Es wird kein UDP Port aufgemacht. Ich werde mich jetzt sofort an die Erklärung setzen.

      Ich habe greade gesehen das WordPress die zwei – als ein – gemacht hat. Als Parameter vor „listen“.
      Also es müssen zwei — sein.

      Antworten
  10. Tobi

    Echt super Erklärung, hat mir stark geholfen. Kannst du mir sagen, ob es möglich ist den IR_NPN von GPIO 17 auf einen anderen PIN zu verlegen?
    Denn dann könnte ich es mit meiner Konfiguration zur Steckdosensteuerung verbinden (434MHz-Transmitter liegt auch an GPIO 17).

    Vielen Dank im Voraus und schöne Grüße
    Tobi

    Antworten
    1. BoBek Beitragsautor

      NEIN! Mach das nicht 😀 Also ich benutze auch ein 433 Mhz Sender und hatte den auch über den GPIO 17 am laufen. Danach wollte ich LIRC über GPIO 22 laufen lassen. So viele Probleme habe ich wirklich nicht erwartet.(Ich wollte zuerst einfach das Modul beim laden ändern sehe mein Beitrag oben).Ich gucke mal ob ich es schaffe den Funksender über ein anderes GPIO laufen zu lassen. Sollte jemand Erfahrung haben mit LIRC und den Anschluss über andere PINS bitte posten 🙂

      So ich habe etwas gefunden getestet und YES! es funktioniert:

      1.) Bezieht sich nur auf die Anwendung rcswitch zur Steuerung der Funksteckdosen
      2.) Im Ordner rcswitch-pi (Standardmäßig befindet sich der Ordner in deinem Home Verz.) machst du die Datei send.cpp auf. (sudo nano send.cpp)
      3.) In der Zeilte INT Pin=0 muss du eben die Null gegen deinen gewünschten GPIO-Eingang tauschen.
      Hier findest du die richtigen Werte: http://wiringpi.com/wp-content/uploads/2013/03/gpio1.png
      Bei mir war es eben der Wert 3 für GPIO 22.
      4.)Jetzt den Befehl ‚make‘ ausführen.
      5.)Danach kannst du dich über beides freuen Funk und IR.

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.