LIRC
Inhaltsverzeichnis |
Beschreibung
LIRC - (L)inux (I)nfrared (R)emote (C)ontrol
Mit dem LIRC Projekt ist es möglich, einen Computer (PC) über nahezu jede Fernbedienung zu steuern. Hierzu ist ein LIRC-fähiges Empfangsmodul nötig, das man ab ca. 5 Euro (zzgl. Versand) fertig kaufen oder aber nach Anleitung (siehe Links) selbst zusammenlöten kann.
Hardwareanforderungen
- LIRC kompatibler Empfänger
- Standardversion für externe COM-Schnittstelle
- Spannungsversorgung erfolgt via RTS der COM-Schnittstelle (+/-12 V), damit keine negative Spannung am Eingang des 5-Volt-Spannungsreglers 78L05 anliegt, ist die Diode 1N4148 eingebaut.
- Modifizierte Version für interne COM-Schnittstelle
- In dieser Version wird die Versorgungsspannung (+5 V) intern am Mainboard abgegriffen (z. B. interner USB-Port), daher entfällt der Spannungsregler und die Diode.
Manche Mainboards liefern an RTS unter Belastung weniger als +10 V. Sollte dies der Fall sein, so funktioniert möglicherweise die Standardversion nicht mehr, da der 78L05 eine Eingangsspannung von mindestens +8 V benötigt, um zuverlässig zu arbeiten. Zusätzlich fallen an der Diode nochmals 0,7 Volt ab. In diesen Fall sollte man auf die modifizierte Version zurückgreifen.
Schaltbild
Mehrere LIRC-Empfänger: Es ist möglich, zwei Infrarotempfänger mit LIRC an einem COM-Port zu betreiben. Beide Empfänger werden dann parallel geschaltet:
o +12 V | - | | 10 kOhm | | - Ausgang 1 | Eingang o----------|<----*----o | Ausgang 2 | o----------|<----- Masse Masse o---------------------o
Softwareanforderungen
- dialog (nur für die Konfiguration über das Menu setup.sh)
- setserial
- Kernel-Quellen sollten installiert sein.
- Die jeweils aktuellen Kernel der 2.6er Serie werden evt. noch nicht vollständig unterstützt. Versuchen sie in diesem Fall, die CVS-Version von LIRC.
Installation
Kurzfassung
Kurzfassung, die den größten Teil aller Installationen abdecken sollte (com1)
Vorhandene lircd.conf nach /etc kopieren
lirc Paket entpacken und in das Verzeichnis wechseln
./configure --with-driver=serial make make install setserial /dev/ttyS0 uart none modprobe lirc_serial irrecord /etc/lircd.conf # oder Download per wget http://lirc.sourceforge.net/remotes/... -O /etc/lircd.conf lircd irw /dev/lircd # Fernbedienung testen
In der CVS Version wird lircd folgendermassen installiert
cvs -d:pserver:anonymous@lirc.cvs.sourceforge.net:/cvsroot/lirc login # Passwort-Abfrage einfach mit Return-Taste übergehen cvs -z8 -d:pserver:anonymous@lirc.cvs.sourceforge.net:/cvsroot/lirc co lirc cd lirc cvs update #Aktualisierung der Quellen nach dem 1. Durchlauf nur nur hierueber noetig ./autogen.sh ./setup.sh make
Ausführlich
Entpacken:
cd $SOURCEDIR tar jxvf lirc-<VERSION>.tar.bz2 cd lirc-<VERSION>
Einfach setup.sh aufrufen
setup.sh
und den Anweisungen folgen.
Alternativ kann configure von Hand aufgerufen werden. Diese ist nicht so verwirrend und lirc kann den persönlichen Erfordernissen angepasst werden. Z. B.:
./configure --help
gibt alle möglichen Optionen aus.
./configure --enable-debug #etwas mehr Output beim Start
oder
./configure --with-driver=<dein_Treiber>
Hier gleich die von lirc-0.7.1pre4 gelisteten Treiber: none, any, act200l, adaptec, animax, atilibusb, atiusb, audio, avermedia, avermedia_vdomate, avermedia98, bestbuy, bestbuy2, breakoutbox, bte, caraca, chronos, comX, creative_infracd, dsp, cph03x, cph06x,creative, devinput, dvico, ea65, exaudio, flyvideo, gvbctv5pci, hauppauge, hauppauge_dvb, hercules_smarttv_stereo,igorplugusb, imon, irdeo, irdeo_remote,irman, irreal, it87, knc_one, kworld,leadtek_0007, leadtek_0010, leadtek_pvr2000,livedrive_midi, livedrive_seq, logitech,lptX, mceusb, mediafocusI, mouseremote, mouseremote_ps2, mp3anywhere, packard_bell, parallel, pcmak, pcmak_usb, pctv, pixelview_bt878, pixelview_pak, pixelview_pro, provideo, realmagic, remotemaster, sa1100, sasem, serial, silitek, sir, slinke, streamzap, tekram, tekram_bt829, tira, tvbox, udp, uirt2, uirt2_raw.
Anschließend, wenn man den seriellen Treiber wählt:
./configure --with-driver=serial
Ansonsten serial durch den richtigen Treiber für die Hardware ersetzen. Dazu muss herausgefunden werden, welche Hardware genutzt wird und welchen Port die IR-Fernbedienung benutzt. Es empfiehlt sich, als root in einer Shell ein cat auf den vermuteten Port zu setzen, wobei unterschiedliche Hardware entsprechend verschiedenste Ports benutzen. Eine serielle Fernbedienung wird bestimmt /dev/ttyS0..4 benutzen. Dann auf der Fernbedienung ein paar Tasten drücken. Wenn der richtige Port erwischt wurde, erscheinen auf der Shell kryptische Zeichen. Beachte, dass die Ausgabe gepuffert sein kann! Unter Umständen muss man einige dutzende Male auf die Fernbedienung drücken, bis der Ausgabepuffer voll ist und die Zeichen auf der Konsole angezeigt werden.
Meine audigy .. EX (Ausführung mit 5 1/4 Zoll Frontbedienteil) nutzt Midi, d. h., man muss die verschiedenen Midi-Ports ausprobieren. Bei mir brachte ein
cat /dev/snd/midiC0D1
(ich nutze Alsa) die gewünschten Ergebnisse. Ist man so weit gekommen, so ist dieser Erfolg eine kleine Gratulation wert, da nun gewährleistet ist, dass ein IR-Signal an einem bestimmten device und damit in der Shell ankommt und wichtig, dass die Fernbedienung ordnungsgemäß arbeitet. Dieses device nutzt der lircd später als Input! Wenn man sich noch nicht absolut sicher ist, welche Treiber mit der Fernbedienung wirklich funktionieren, empfiehlt sich für den ersten Build folgendes:
./configure --with-driver=any
Dann kann man die Treiberoption beim Starten des lircd angeben:
lircd -H <dein_Treiber> #die gleichen Optionen wie bei configure
Jetzt noch ein einfaches:
make
Um die Kernel-Module und Programme zu installieren:
make install
Ein Eintrag in der /etc/modprobe.conf kann sinnvoll sein:
alias char-major-61 lirc_serial options lirc_serial irq=4 io=0x3f8 #hier Standartwerte für COM1, an dem der Empfänger angeschlossen ist
Bevor beim Booten die Module lirc_serial und lirc_dev geladen werden, muss der UART disabled werden:[1]
setserial /dev/ttyS0 uart none
Für die Audigy kann man die zusätzliche Option enable_ir=1 beim Laden des Moduls snd-emu10k1 angeben. Ob dies aber wirklich nötig, ist habe ich noch nicht überprüft.
Konfiguration
Um den lirc-daemon starten zu können, benötigen wir eine lircd.conf(Beispiel für die DBox2), diese ist unter /etc (kann auch /etc/lirc sein, je nach Distri) abzulegen.
Man kann sich aber auch einen funktionierenden Befehl zusammenstellen und später die ermittelten Optionen in die entsprechenden Konfigurationsdateien einfügen. Das hat den Vorteil, daß man sicher zu einem Ergebnis kommt, auch mit der verfügbaren Hardware. Meist ist nur Aufgrund der voneinander abhängigen Einstellungen in den Konfigurationsdateien ein Misserfolg möglich. Der selbsthergestellte lircd befindet sich per Vorgabe in /usr/local/sbin, also
/usr/local/sbin/lircd --help gibt erstmal die unterstützten Optionen. Anmerkung: die vollständige Pfadangabe ist wichtig da sonst eine andere Version z.B. durch Paketinstallation ausgeführt wird.
/usr/local/sbin/lircd -d /dev/snd/midi... hier /den Pfad von dem ermittelten Gerät eingeben
--driver=driver hier deinen vermuteten Treiber angeben, oder kurz -d serial ; -d livedrive_midi. Der erste Versuch muss aber nicht unbedingt richtig sein, bei meiner audigy war nicht creative sondern livedrive_midi der richtige Treiber.
Dann die Option
--nodaemon oder kurz -n um den lircd auf der Shell beobachten zu können.
und
-p 0666 um allen Schwierigkeiten in Richtung fehlender Berechtigungen zum Lesen des Input-devices zu Umgehen
und dann noch eine Option auf die ich nur Zufall gestossen bin
/home/ich/download/RM-900
Das ist die Datei die bestimmt in welche Zeichen der kryptische Salat umgewandelt wird. Der lircd sollte dann folgende Zeile ausgeben: parsing rm900 remote ;). Eine zu deiner Hardware passende Datei kannst du unter http://lirc.sourceforge.net/remotes/ downloaden. Notfalls kann man auch die Datei öffnen um den enthaltenden Kommentaren Hinweise auf die richtige Datei zu entnehmen. Verwende bitte den Pfad zu deiner heruntergeladenen Datei.
Und um ganz sicher zu gehen
-o /dev/lircd Das bestimmt das device in welches der lircd schreibt. Der lircd wandelt eigentlich nur die kryptischen Zeichenfolgen welcher er vom Input liest in lesbare Zeichenketten um und gibt diese an das Output-device aus.
Zusammen sieht das für mich wie folgt aus:
/usr/local/sbin/lircd -H livedrive_midi -d /dev/snd/midiC0D1 -n -p 0666 -o /dev/lircd /home/rak64/download/RM-900
Das ist ein enorm langer Befehl. Aber er sollte funktionieren, wenn nicht: einfach kill (Ctrl +C) plus pkill lircd und die Optionen anpassen bis sich Erfolg einstellt. Den Erfolg kontolliert man, indem man eine zweite Shell öffnet und irw eingibt oder auch, um die selbsthergestellte Datei zu treffen /usr/local/bin/irw ein. Der lircd antwortet mit : registering local client und accepted new client on /dev/lircd Wenn die Optionen nicht zutreffen sind, gibt irw folgende Fehlermeldung aus: connect: Connection refused Nun am Besten den kompletten funktionierenden Befehl aufschreiben. Das Editieren der Optionen dürfte jetzt kein riesiges Problem mehr darstellen. Mit Rumprobieren wie beschrieben müsste eigentlich jeder, auch der nicht-Guru seine IR-Fernbedienung zum Laufen kriegen (ich habe anderthalb Wochen trainiert um hierher zu kommen). Wie gesagt, lirc funktioniert super, man muss nur die erforderlichen Optionen ermitteln!
Neuanlernen der Fernbedienung
Um die Fernbedienung per Hand anzulernen müssen Sie folgende Schritte vornehmen.
1. Prozess lircd anhalten
/etc/init.d/lirc stop
2. Löschen oder Umbennen einer Vorhandenen /etc/lircd.conf, diese Datei beinhaltet die LIRC Konfiguration der Fernbedienung.
rm /etc/lircd.conf
3. Neue lircd.conf anlernen. (evtl. ist beim folgenden Befehlsaufruf die Option -d /dev/lirc0 nötig, ohne diese wird /dev/lirc verwendet.)
irrecord /etc/lircd.conf
Die hierbei wichtigen Tasten sind.
Up Down Menu Ok Back Left Right Red Green Yellow Blue 0...9 Power Volume+ Volume- Mute
Zu finden in der remote.conf. Der Speicherort der remote.conf kann je nach eingesetzter Distribution variieren und beinhaltet alle aus LIRC entnommen Tasten und deren Aktion.
find / -name remote.conf
4. Prozess lirc starten.
/etc/init.d/lirc start
5. Fernbedienung überprüfen.
irw
6. Lircd direkt überprüfen.
Um den Lircd direkt zu überprüfen, kann der Socket direkt benutzt werden, dort sind dann auch die Befehle, wie Green, Red, etc. direkt gesehen werden:
socat UNIX-CONNECT:/dev/lircd STDIO
Anmerkung: Falls irw ordnungsgemäß funktioniert und der VDR fehlerfrei LIRC aufruft, die Fernbedienung aber dennoch nicht im VDR funktioniert, vergewissert Euch, dass /etc/lirc.conf und remote.conf auch wirklich die gleichen Namen der Tastenbelegungen haben.
Ändern des COM-Ports.
Adresse und Interrupt des seriellen Anschlusses werden direkt in /etc/modules.conf eingegeben. Wenn /etc/modprobe.d/lirc existiert, sind die Änderungen dort vorzunehmen.
Für /dev/ttyS0 (COM1 - Standardwerte).
alias char-major-61 lirc_serial options lirc_serial irq=4 io=0x3f8
Für /dev/ttyS1 (COM2 - Standardwerte).
alias char-major-61 lirc_serial options lirc_serial irq=3 io=0x2f8
Ein vorhandener setserial Eintrag mit ttyS0 ist durch ttyS1 zu ersetzen.
Anschließend die Abhängigkeiten der Module aktualisieren, dazu
depmod
aufrufen, lircd und lirc_serial neu laden.
/etc/init.d/lircd stop rmmod lirc_serial modprobe -v lirc_serial /etc/init.d/lirc start
Zum prinzipiellen Überprüfen der Hardware hilft das Programm mode2. Das korrekte Device mit übergeben, mode2 funktioniert bereits, bevor lircd läuft. Es ist daher die erste Anlaufstelle zum Debuggen, noch bevor lircd.conf oder remote.conf ins Spiel kommen. mode2 gibt kontinuierlich die von der Fernbedienung empfangenen Codes (als Pulse/Pause-Zeiten) auf stdout aus.
mode2 -d /dev/lirc mode2 -d /dev/lirc0
Konfiguration der lircrc zum Ausführen von Aktionen
Irexec ist ein nützlicher daemon, mit dem man so ziemlich alles anstellen kann.
Die Konfigurations-Datei lircrc wird unter /etc/lircrc oder unter /home/anwendername/.lircrc abgespeichert.
Aufbau der lircrc.
begin prog = <Daemon für Skript- und Programm-Ausführungen> button = <Tasten-Name, ist in der lircd.conf definiert> config = <Auszuführender Befehl> mode = <Modus: Schaltet Modus ein oder aus> repeat = <Wiederholung an oder aus (0 oder 1)> remote = <Name des Buttons in der lircd.conf> end
Beispiele.
4 x Button Power würde einen Reboot einleiten, somit sind Doppel-Belegungen ("ueber") vdr möglich.
begin prog = irexec button = Power button = Power button = Power button = Power config = reboot end
1 Key = 2 Funktionen.
begin prog = irexec button = Reserve config = eject config = eject -t end
Wurde diese Datei erzeugt, kann der daemon gestartet werden, wichtig dass dieses nach lirc geschieht (Reihenfolge beachten).
start-stop-daemon --start --verbose --exec /usr/local/sbin/lircd -- /etc/lircd.conf start-stop-daemon --start --verbose --exec /usr/local/bin/irexec -- --daemon /etc/lircrc
Optionen
lircd
Parameter (kurz) | Parameter (lang) | Beschreibung |
---|---|---|
-h | --help | display this message |
-v | --version | display version |
-n | --nodaemon | don't fork to background |
-p | --permission=mode | file permissions for /dev/lircd |
-H | --driver=driver | use given driver |
-d | --device=device | read from given device |
-l | --listen[=port] | listen for network connections on port |
-c | --connect=host[:port] | connect to remote lircd server |
-o | --output=socket | output socket filename |
-P | --pidfile=file | daemon pid file |
-L | --logfile=file | daemon log file |
irexec
Parameter (kurz) | Parameter (lang) | Beschreibung |
---|---|---|
-h | --help | display usage summary |
-v | --version | display version |
-d | --daemon | run in background |
-n | --name | use this program name |
Sonstiges
Länge des Kabels:
Ein Betrieb des LIRC Emfängers ist bei einer Kabellänge von bis zu 25 m möglich.
Mehrere LIRC Empfänger:
Es ist möglich, zwei Infrarot Empfänger mit LIRC an einem COM-Port zu betreiben. Beide Empfänger werden dann parallel geschaltet.
Mehrere FBs:
cat lircd.conf(1) lircd.conf(2) > lircd.conf
Mehrere PCs zusammenschalten
Es ist möglich, die empfangenen Fernbedienungscodes an weitere Computer weiterzuleiten. Dazu ist der lircd auf dem SenderPC mit der Option --listen zu starten und auf dem EmpfängerPC mit der Option --driver=null --connect=SenderPC
Auf dem EmpfängerPC sind keine Kerneltreiber notwendig. Lediglich lircd wird benötigt. Mit dem Programm irw können Tastendrücke auf der Fernbedienung sowohl auf dem Sender- als auch auf dem Empfänger-PC angezeigt werden.
Snapshot
cvs -d:pserver:anonymous@lirc.cvs.sourceforge.net:/cvsroot/lirc login cvs -z8 -d:pserver:anonymous@lirc.cvs.sourceforge.net:/cvsroot/lirc co lirc
Siehe auch
Links
- LIRC (L)inux (I)nfrared (R)emote (C)ontrol Projekt Seite
- CVS snapshots
- Homepage des Linux-Kernels
- Index unterstützter Fernbedienungen
- Sehr gute Bauanleitung und Teileliste für einen Empfänger
- ausführliche Beschreibung mit Theorieteil
- Sehr ausführliche Bauanleitung mit Bezugsquelle für einen fertigen Empfänger
- c't Artikel siehe unten Minimal-Empfänger
- Wer handwerklich nicht so begabt ist (~ 10 Euro)
- Wer handwerklich nicht so begabt ist (auch IR-Einschalter) (~ 5 Euro)
- Diplomarbeit
- Kleines Projekte "IR-Verlängerung" über 2 Adern
- Umfangreiche Anleitungen zum Selbstbau von verschiedenen Infrarot Empfängern (seriell, USB, PC Ein- und Ausschalten)