Raspbian VDR Streaming Client - LIRC

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Lirc - Raspberry Pi mit der Fernbedienung steuern

Der Raspberry Pi bringt bereits am GPIO-Header Anschlussmöglichkeiten für einen IR-Empfänger mit. Mit etwas Bastelgeschick lässt sich ein passender IR-Empfänger für kleines Geld selber bauen. Wie ich das gemacht habe beschreibe ich hier.

Materialliste für den IR-Empfänger

IR-Empfänger:         TSOP4836 axial bedrahtet 36 kHz 950 nm oder TSOP4838 axial bedrahtet 38 kHz 950 nm oder TSOP 31236 (Reichelt)
Verbindungskabel:     RB-CB3-25 Bunt oder RB-CB3-50 Bunt (25cm Länge oder 50cm Länge)
Schrumpfschlauch:     Dünnwandiger Schrumpfschlauch Ø vor/nach Schrumpfung: 9 mm/3 mm Schrumpfrate 3:1 Schwarz
Schrumpfschlauch-Set: Nachfüllbeutel für Schrumpfschlauch-Set 2 : 1 40 mm Bunt 125 St.

Fernbedienung

Bei der Selektion einer Fernbedienung für den VDR mit dem IR-Empfänger gibt es ein paar Kriterien die man verstehen sollte:

Eine lernfähige Fernbedienung ist sinnvoll damit man den Fernseher zusammen mit dem VDR von derselben Fernbedienung steuern kann.

Eine Fernbedienung muß wirklich die vier Farbtasten haben damit man mit ihr vernünftig den VDR bedienen kann. Idealerweise hat sie zudem unabhängig voneinander ein Cursorkreuz (up/down/left/right und OK) und die VCR tasten (start/stop/pause/FF/FR/Record) damit lassen sich dann alle Funktionen am logischten bedienen, auch wenn ein paar der Tasten letztlich dasselbe bewirken im VDR.

Der beschriebene IR-Empfänger ist in der Preisklasse unter ca 50 Euro die beste und insgesamt auch die einfachste Option um die größte Anzahl an Fernbedienungen "anzulernen". Es kommt allerdings auf den von der Fernbedienung verwendeten Code an, wie schnell und zuverlässig die Fernbedienung dann wirklich am VDR läuft.

Je größer bei einer Fernbedienung die Zahl der Bits für einen Befehl ist, desto wahrscheinlicher wird im allgemeinen auch die Fehlerkennungsrate bei der beschriebenen softwarebasierten IR Erkennung im VDR (lirc mit einem einfachen IR Empfänger ohne Intelligenz). Der von Philips entwickelte RC5 code ist erfahrungsgemäß einer, der vom lirc mit dem einfachen IR Empfänger generell sehr gut erkannt wird und bei der die Fernbedienung auch eine gute auto-repeat Rate von Tastenbefehlen hat. Der neuere RC6 code hat mehr bist pro Befehl und ist damit nicht so gut.

Bei programmierbaren Fernbedienungen kann man entweder Codes von existierenden Fernbedienungen per IR-Transfer anlernen oder einen von hunderten von existierenden Fernbdienungs Codesets auswählen. Das Anlernen via IR-Transfer hat den Nachteil dass dabei die lernende Fernbedienung den Code teilweise länger macht es auf der Originalfernbedienung weil sie beim Anlernen evtl. nicht die kürzeste Codesequenz erkennt. Danach funktioniert dann derselbe IR-Befehl von der lernenden Fernbedienung am VDR schlechter als von der Originalfernbedienung. Bei Auswahl eines Codesets passiert das im allgemeinen nicht, die lernfähige Fernbedienung ist dann meistens so gut wie die Originalfernbedienung in der Erkennung beim VDR.

Die lernfähigen Fernbedienungen haben nie genau dieselben Tasten wie Originalfernbedienungen, wenn man da also eine bestimmte Fernbedienung per Codeauswahl anlernt, dann kann es leicht sein das bestimmte Tasten die kein Äquivalent auf der Originalfernbedienung haben, danach keine Funktion auf der lernenden Fernbedienung haben. In dem Fall will man dann auf diese Tasten per IR-Transfer weitere IR-Befehle von einer anderen, hoffentlich ähnlichen Fernbedienung anlernen oder andere Tricks verwenden um einen Code auf diese Tasten zu bekommen.

Wegen der letzten Punkte lohne es sich also bei Benutzung einer lernfähigen Fernbedienung eine Codesetnummer zu suchen, die einen einfachen code (eg: RC5) erzeugt und der auch auf allen Tasten verschiedene Codes erzeugt.

Lernfähige Fernbedienungen gibt es in mehreren Klassen:

1. Die einfachste Klasse kann nur Codesets auswählen, aber keine Tasten separat per IR-Transfer anlernen, oder sonst wie mit Funktion belegen.

2. Die bessere Klasse kann Tasten auch per IR-Transfer lernen. Dies ist das empfohlene Minimum wenn man für den VDR eine lernfähige Fernbedienung wählt. Diese Klasse gibt es von Firmen wie OneForAll schon um die 10 Euro.

3. Die nächste bessere Klasse kann zudem noch Codes per USB anlernen. Dies ist vor allem dann sinnvoll, wenn man noch andere exotische Geräte (außer dem VDR) bedienen will, oder wenn man am VDR einen exotischen - e.G.: USB- basierten - IR-Emfänger einsetzt. Wenn man nur einen üblichen TV und den VDR einsetzen will, dann ist dies nicht notwendig. Diese Fernbedienungen gibt es bei OneForAll z.b. auch aber ca. 15 Euro (URC 6430/URC 6440).

4. Noch bessere und teurere lernfähige Fernbedienungen haben Displays, Macro-Definitionen usw. Macro Definitionen sind meistens dann notwendig wenn man mehr als bloß einen Fernseher mit der Ein/Aus-Taste bedienen will, eg: Fernseher+Verstärker.

Mit dem beschriebenen IR-Empfänger kann man am einfachsten die "liegt gerade noch herum" Fernbedienung anlernen, und dann überlegen welche Fernbedienung man idealerweise kauft und verwendet. Im Beispiel hier wurde eine existierende TechnoTrend Fernbedienung verwendet.

In OneForAll URC6440 wird beschrieben wie man die lernfähigen Fernbedienungen URC-6440 (gilt gleichermaßen für URC-6430 und andere URC Fernbedienungen) anlernen kann. Dabei werden RC5 codes verwendet und alle Tasten nutzbar gemacht indem mit Tricks die paar fehlenden Tasten speziell mit Codes belegt werden. Dies wurde auch am RPI erfolgreich verwendet. Die URC-6430/6440 sind wegen Ihrer Features und Ihres Preises sehr interessant für die Nutzung mit VDR.

Andere Hersteller von lernfähigen Fernbedienungen stützen sich häufig auf die Code-Datenbanken von OneForAll, wenn man also eine nicht-OneForAll lernfähige Fernbedienung hat die über vierstellige Codenummern programmiert wird kann man auch versuchen ob die Codenummern für die OneForAll funktionieren, ansonsten Codenummern für möglichst alte Philips Fernbedienungen probieren, die verwenden am ehesten RC5. Ebenso Philips OEM Produkte oder bekannte RC5 Lizenznehmer- eg: Tivo (Philips OEM).

Raspberry Pi Schaltbild

Das gezeigte Schaltbild ist von einem Raspberry Pi Modell B. Die PIN Belegung von einem Raspberry PI B+ ist identisch zu dem Vorgängermodell. Je nach Empfänger muss man die unterschiedlichen Anschlussbelegungen beachten. Immer im Datenblatt nachsehen.

RaspberryPI Schaltbild.png

IR-Empfänger zusammenbauen

Ich habe drei Verbindungskabel für meinen IR-Empfänger verwendet (Rot, Schwarz und Lila). Auf einer Seite der Verbindungskabel habe ich die Stecker abgeschnitten und diese, wie auf dem obigen Schaltbild, am TSOP angelötet.

VS:  rotes Kabel
GND: schwarzes Kabel
Out: lila Kabel

Über die einzelnen Lötstellen habe ich Schrumpfschläuche gezogen und diese mit einem Heißluftfön verschmolzen (Feuerzeug geht auch). Wer nicht die einzelnen Verbindungskabel sehen möchte kann nochmals einen Schrumpfschlauch über die gesammten Verbindungskabel ziehen. Zum Schluss werden die Verbindungskabel wie auf dem obigen Schaltbild auf den Raspberry Pi aufgesteckt.

Lirc Konfiguration

Module laden

sudo modprobe lirc_rpi

Module in den Device Tree

Wenn der RPI mit einem Kernel 3.18 oder neuer läuft, folgenden Eintrag in die bootconfig eintragen, danach rebooten.

 sudo vi /boot/config.txt
 dtoverlay=lirc-rpi

Module in den Autostart

Damit die Module nach einem System start automatisch geladen werden müssen diese in die modules eingetragen werden.

sudo cp /etc/modules /etc/modules_orig
sudo vi /etc/modules
lirc_rpi

Lirc device ermitteln

ls -l /dev/lir*
crw-rw---T 1 root video 247, 0 Jan  4 12:23 /dev/lirc0

Hardware konfiguration

sudo cp /etc/lirc/hardware.conf /etc/lirc/hardware.conf_orig
sudo vi /etc/lirc/hardware.conf
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"

# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

Neustarten des Lirc Daemon

sudo /etc/init.d/lirc restart

Erster Test vom IR-Empfänger

Kernelmodul laden

sudo modprobe lirc_rpi
dmesg |grep lirc

lirc_dev: IR Remote Control driver registered, major 248
lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
lirc_rpi: auto-detected active low receiver on GPIO pin 18
lirc_rpi lirc_rpi.0: lirc_dev: driver lirc_rpi registered at minor = 0
lirc_rpi: driver registered!

Hier ist zu sehen das der IR-Empfänger am GPIO Pin 18 erkannt wird.

Prüfen ob Signale der Fernbedienung ankommen

sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0

Danach ein paar Tasten auf der Fernbedienung drücken, wenn alles funktionoiert sollte es so aussehen:

space 3260954
pulse 876
space 805
pulse 1718
space 1636
pulse 1722
space 1630
pulse 1724
space 1632
pulse 1714
space 820
pulse 864
space 795
pulse 882
space 793
pulse 886
space 799
pulse 874
space 1638
pulse 882

Anlernen der Fernbedienung

Datei mit gültigen Lirc Namespaces erstellen

sudo irrecord --list-namespace | grep KEY &> ~/lirc_strings.txt

Aus dieser Datei holt Ihr euch dann die passenden Namen für eure Tasten. Anzeigen der Datei:

sudo cat ~/lirc_strings.txt

Anlernmodus starten

sudo /etc/init.d/lirc stop
sudo irrecord -d /dev/lirc0 ~/lircd.conf

Nach starten dem Dialog auf der Konsole folgen.

irrecord -  application for recording IR-codes for usage with lirc

Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)

This program will record the signals from your remote control
and create a config file for lircd.

A proper config file for lircd is maybe the most vital part of this
package, so you should invest some time to create a working config
file. Although I put a good deal of effort in this program it is often
not possible to automatically recognize all features of a remote
control. Often short-comings of the receiver hardware make it nearly
impossible. If you have problems to create a config file READ THE
DOCUMENTATION of this package, especially section "Adding new remote
controls" for how to get help.

If there already is a remote control of the same brand available at
http://www.lirc.org/remotes/ you might also want to try using such a
remote as a template. The config files already contain all
parameters of the protocol used by remotes of a certain brand and
knowing these parameters makes the job of this program much
easier. There are also template files for the most common protocols
available in the remotes/generic/ directory of the source
distribution of this package. You can use a template files by
providing the path of the file as command line parameter.

Please send the finished config files to <lirc@bartelmus.de> so that I
can make them available to others. Don't forget to put all information
that you can get about the remote control in the header of the file.

Press RETURN to continue. 
Now start pressing buttons on your remote control.

It is very important that you press many different buttons and hold them
down for approximately one second. Each button should generate at least one
dot but in no case more than ten dots of output.
Don't stop pressing buttons until two lines of dots (2x80) have been
generated. 

Press RETURN now to start recording.
................................................................................
Found const length: 107332
Please keep on pressing buttons like described above.
................................................................................
RC-5 remote control found.
Found possible header: 876 828
No repeat code found.
Signals are biphase encoded.
Removed header.
Signal length is 13
Now enter the names for the buttons.

Please enter the name for the next button (press <ENTER> to finish recording)
KEY_POWER

Now hold down button "KEY_POWER".

Please enter the name for the next button (press <ENTER> to finish recording)
KEY_MUTE

Now hold down button "KEY_MUTE".

Please enter the name for the next button (press <ENTER> to finish recording)
...
...
...

Lirc Konfiguration einspielen

sudo cp /etc/lirc/lircd.conf /etc/lirc/lircd.conf_orig
sudo cp ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc start

Neustart vom System

sudo init 6

Nach einem Neustart vom VDR wird automatisch das Anlernmenü für die Fernbedienung gestartet.

Optional: VDR und Lirc Konfigurationen

Die beiden untigen Konfigurationen werden durch den Anlernprozess von VDR und Lirc erstellt. Falls Ihr die gleiche Hardware verwendet könnt Ihr die Konfigurationen verwenden und somit den Anlernprozess umgehen.

remote.conf

Ihr könnt euch die remote.conf mittels VDR über das OSD-Anlernprogramm erstellen. Wenn Ihr euch die remote.conf manuell erstellen möchtet müssen die VDR-LIRC Kommandos mit den Tasten aus der obigen IRTrans Konfigurationsdatei zugeordnet werden. Achtung! Die Namen sind Case Sensitive.

sudo vi /var/lib/vdr/remote.conf
LIRC.Up          KEY_UP
LIRC.Down        KEY_DOWN
LIRC.Menu        KEY_MENU
LIRC.Ok          KEY_OK
LIRC.Back        KEY_BACK
LIRC.Left        KEY_LEFT
LIRC.Right       KEY_RIGHT
LIRC.Red         KEY_RED
LIRC.Green       KEY_GREEN
LIRC.Yellow      KEY_YELLOW
LIRC.Blue        KEY_BLUE
LIRC.0           KEY_0
LIRC.1           KEY_1
LIRC.2           KEY_2
LIRC.3           KEY_3
LIRC.4           KEY_4
LIRC.5           KEY_5
LIRC.6           KEY_6
LIRC.7           KEY_7
LIRC.8           KEY_8
LIRC.9           KEY_9
LIRC.Play        KEY_PLAY
LIRC.Pause       KEY_PAUSE
LIRC.Stop        KEY_STOP
LIRC.Record      KEY_RECORD
LIRC.FastFwd     KEY_FASTFORWARD
LIRC.FastRew     KEY_REWIND
LIRC.Power       KEY_POWER
LIRC.Channel+    KEY_CHANNELUP
LIRC.Channel-    KEY_CHANNELDOWN
LIRC.Volume+     KEY_VOLUMEUP
LIRC.Volume-     KEY_VOLUMEDOWN
LIRC.Mute        KEY_MUTE
LIRC.Schedule    KEY_EPG
LIRC.Info        KEY_INFO

lircd.conf

sudo vi /etc/lirc/lircd.conf
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Sun Aug 24 12:08:49 2014
#
# contributed by
#
# brand:                       /home/pi/lircd.conf
# model no. of remote control:
# devices being controlled by this remote:
# 

begin remote

  name  /home/pi/lircd.conf
  bits           13
  flags RC5|CONST_LENGTH
  eps            30
  aeps          100

  one           867   810
  zero          867   810
  plead         884
  gap          107337
  toggle_bit_mask 0x800

      begin codes
          KEY_UP                   0x154D
          KEY_DOWN                 0x1551
          KEY_MENU                 0x1559
          KEY_OK                   0x154F
          KEY_BACK                 0x1553
          KEY_LEFT                 0x154E
          KEY_RIGHT                0x1550
          KEY_RED                  0x1554
          KEY_GREEN                0x1555
          KEY_YELLOW               0x1556
          KEY_BLUE                 0x1557
          KEY_0                    0x154C
          KEY_1                    0x1543
          KEY_2                    0x1544
          KEY_3                    0x1545
          KEY_4                    0x1546
          KEY_5                    0x1547
          KEY_6                    0x1548
          KEY_7                    0x1549
          KEY_8                    0x154A
          KEY_9                    0x154B
          KEY_PLAY                 0x157B
          KEY_PAUSE                0x157E
          KEY_STOP                 0x157C
          KEY_RECORD               0x157A
          KEY_FASTFORWARD          0x157F
          KEY_REWIND               0x157D
          KEY_POWER                0x1541
          KEY_CHANNELUP            0x1563
          KEY_CHANNELDOWN          0x1564
          KEY_VOLUMEUP             0x1565
          KEY_VOLUMEDOWN           0x1566
          KEY_MUTE                 0x1558
          KEY_EPG                  0x1562
          KEY_INFO                 0x1552
      end codes

end remote