Universalfernbedienung (Raspberry Pi)

Erstellt von Sebastian am Mo, 27.04.2015 - 22:32
Universalfernbedienung

In meinem letzten Eintrag zum Thema Universalfernbedienung wurde das Thema mit dem Arduino umgesetzt. Eine Einbindung in Fhem zur Haussteuerung wird dadurch erschwert, dass eine Kommunikation zwischen den Geräten stattfinden muss. Anstelle eines umfangreichen Protokolls für die Datenkommunikation wird die Universalfernbedienung direkt mit dem Raspberry Pi umgesetzt. Im Gegensatz zum Arduino werden die GPIO Ports leider nur mit 3,3V betrieben anstelle von 5V.

Hardware

Die Hardware wird ähnlich wie bei dem Arduino direkt an die GPIO Ports angeschlossen. Hierbei ist die unterschiedliche Belegung der Ports bei den Raspberry Pi Modelle zu beachten. In diesem Artikel ist der Anschluss GPIO PIN 22 für den IR Empfänger und der GPIO PIN 23 für den IR Sender vorgesehen.

LIRC

Anstelle einer kleinen Bibliothek für die IR Erkennung und das Senden wird LIRC eingesetzt. "LIRC ist die Abkürzung für Linux Infrared Remote Control. Es handelt sich dabei um ein Programm für Linux, mit dessen Hilfe man Befehle von IR-Fernbedienungen in Programmbefehle umsetzen kann. Nötig ist dafür lediglich ein Infrarot-Empfänger. [...] Um die Signale von Fernbedienungen korrekt zu decodieren, benötigt man eine Konfigurationsdatei, die auf die jeweilige Fernbedienung abgestimmt ist. Man kann diese entweder selbst erzeugen, oder eine passende Datei aus dem Internet herunterladen." (Quelle: Wikipedia)

Zur Installation und Einrichtung auf dem Raspberry Pi gibt es einen interessanten Artikel der für die folgenden Aufrufe als Basis dient. Die Installation von LIRC erfolgt dabei einfach mittels apt-get.

$ sudo apt-get install lirc

Um die benötigten Module per Hand zu laden und diese zu testen gibt es den Befehl modprobe. Bei dem lirc_rpi ist die korrekte Belegung der GPIO Ports zu beachten!

$ sudo modprobe lirc_dev
$ sudo modprobe lirc_rpi gpio_in_pin=22 gpio_out_pin=23

UPDATE: 27.04.2015: Ab sofort wird das Modul nicht mehr über /etc/modules gelanden sondern über /boot/config.txt

$ sudo vi /boot/config.txt
dtoverlay=lirc-rpi,gpio_out_pin=23,gpio_in_pin=22

Damit die Module beim Start geladen werden, müssen diese in die modules Datei eingetragen werden.

$ sudo vi /etc/modules
lirc_dev
lirc_rpi gpio_in_pin=22 gpio_out_pin=23

Das lirc Device kann mittels ls im dev Verzeichnis ermittelt werden.

$ ls -l /dev/lir*
crw-rw---T 1 root video 248, 0 Jan  5 12:16 /dev/lirc0

In der Config Datei von LIRC müssen das Device und die Module eingetragen werden.

$ sudo vi /etc/lirc/hardware.conf
# -u --uinput            generate Linux input events
LIRCD_ARGS="--uinput"
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

Neustarten des Daemon.

$ sudo /etc/init.d/lirc restart

Empfänger testen

Der Empfänger kann auf seine Grundlegende Funktionalität geprüft werden indem der LIRC Daemon gestommt wird und mittels mode2 die RAW Ausgabe von dem Device angeschaut wird. Beim Drücken von beliebigen Tasten auf einer IR Fernbedienung sollten abwechselnd space und pule Einträge erscheinen.

$ sudo /etc/init.d/lirc stop
$ mode2 -d /dev/lirc0
space 1622
pulse 667
space 1573
pulse 675

Sender testen

Die initiale lircd.conf ist leer. Es können entweder bestehende Konfigurationsdateien genutzt werden, sofern es welche für die Fernbedienung gibt, oder eigene aufgenommen werden.

$ cat /etc/lirc/lircd.conf

Bestehende Konfigurationsdatei

In dem Sourceforce Remote Projekt sind viele Fernbedienungen bereits erfasst. Außerdem liefert LIRC eigene Dateien mit.

$ ls /usr/share/lirc/remotes/

Bei der YAMAHA RAX9 Fernbedienung gibt es bereits eine Datei in dem Projekt.

$ mkdir lirc
$ cd lirc
$ wget http://lirc.sourceforge.net/remotes/yamaha/RAX9
$ sudo cp RAX9 /etc/lirc/lircd.conf

Mit dem Programm irw können die Eingaben der Fernbedienung gelesen werden.

$ irw 
000000005ea158a7 03 vol+ rax9
000000005ea1e817 00 aux rax9

Sollte dort keine Ausgabe erscheinen kann der Daemon testweise im Vordergrund gestartet werden. Eventuell werden hier Fehler oder Warnungen angezeigt.

$ sudo /etc/init.d/lirc stop
$ sudo lircd --nodaemon -H devinput

Das Senden erfolgt mittels irsend.

$ irsend SEND_ONCE rax9 aux

Eigene Konfigurationsdatei erstellen

Der Daemon wird gestoppt und mit den Programm irrecord wird eine eigene Datei pro Fernbedienung aufgenommen.

$ sudo /etc/init.d/lirc stop

Für die SAMSUNG - AA59-00743A Fernbedienung wäre ein möglicher Aufruf wie folgt.

$ sudo irrecord -H default -d /dev/lirc0 AA59-00743A

Das Programm führt den Benutzer durch den Prozess der Aufnahme. Die Liste der Keycodes hilft bei der korrekt Zuordnung. Nach dem Aufnehmen wird die generierte Datei als neue /etc/lirc/lircd.conf kopiert und der Daemon neugestartet. Mittels irw können wie oben beschrieben die gedrückten Tasten ermittelt werden.

$ sudo cp AA59-00743A.conf /etc/lirc/lircd.conf
$ sudo /etc/init.d/lirc restart
$ irw
00000000e0e040bf 00 KEY_POWER Samsung_AA59-00743A
$ irsend SEND_ONCE Samsung_AA59-00743A KEY_POWER

Das gleiche wird für alle anderen Fernbedienung durchgeführt (Hier die LG - AKB73615701).

sudo irrecord -H default -d /dev/lirc0 AKB73615701

Am Ende werden alle Konfigurationsdateien in einer Datei zusammengefasst und als neue lircd.conf genutzt.

$ cat *.conf > lircd.conf
$ sudo cp lircd.conf /etc/lirc/lircd.conf

oder

cat AKB73615701.conf AA59-00743A.conf RAX9 > lircd.conf
sudo cp lircd.conf /etc/lirc/lircd.conf

FHEM Einbindung

Mit dem Modul Remotcontrol kann ein Floorplan erstellt werden. Auf dem Floorplan werden alle Tasten hinterlegt. Die Samsung Fernbedienung könnte wie folgt definiert werden.

define RC_TV remotecontrol
attr RC_TV rc_iconpath icons/remotecontrol
attr RC_TV rc_iconprefix black_btn_
attr RC_TV room 1.0_Wohnzimmer
attr RC_TV row00 KEY_POWER:POWEROFF,:blank,KEY_SELECT:SOURCE
attr RC_TV row02 :blank,:blank,:blank
attr RC_TV row03 KEY_1:1,KEY_2:2,KEY_3:3
attr RC_TV row04 KEY_4:4,KEY_5:5,KEY_6:6
attr RC_TV row05 KEY_7:7,KEY_8:8,KEY_9:9
attr RC_TV row06 :blank,KEY_0:0,KEY_REWIND:PRECH
attr RC_TV row07 :blank,:blank,:blank
attr RC_TV row08 KEY_VOLUMEUP:UP,KEY_MUTE:MUTE,KEY_CHANNELUP:CHUP
attr RC_TV row09 KEY_VOLUMEDOWN:DOWN,:blank,KEY_CHANNELDOWN:CHDOWN
attr RC_TV row10 KEY_MENU:MENU,:blank,KEY_PROGRAM:GUIDE
attr RC_TV row11 :blank,:blank,:blank
attr RC_TV row12 :blank,KEY_UP:UP,KEY_INFO:INFO
attr RC_TV row13 KEY_LEFT:LEFT,KEY_ENTER:ENTER,KEY_RIGHT:RIGHT
attr RC_TV row14 :blank,KEY_DOWN:DOWN,KEY_EXIT:EXIT
define NRC_TV notify RC_TV {system("irsend SEND_ONCE Samsung_AA59-00743A $EVENT")}

Die Werte rc_iconpath und rc_iconprefix definieren den Pfad für die Bilder. Mittels rowXX werden die Zeilen mit den Buttons definiert. Jeder Button wird dabei hinterlegt mittels EVENT:IMAGE. Das notify behandelt das anklicken der Buttons und sendet den EVENT an irsend.

Beispiele der generierten Dateien


# Please make this file available to others
# by sending it to 
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Sun Jan  5 13:37:55 2014
#
# contributed by
#
# brand:                       Samsung_AA59-00743A
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

  name  Samsung_AA59-00743A
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       4532  4449
  one           595  1635
  zero          595   520
  ptrail        597
  pre_data_bits   16
  pre_data       0xE0E0
  gap          107492
  toggle_bit_mask 0x0

      begin codes
          KEY_NEXT                 0x12ED
          KEY_POWER                0x40BF
          KEY_1                    0x20DF
          KEY_2                    0xA05F
          KEY_3                    0x609F
          KEY_4                    0x10EF
          KEY_5                    0x906F
          KEY_6                    0x50AF
          KEY_7                    0x30CF
          KEY_8                    0xB04F
          KEY_9                    0x708F
          KEY_0                    0x8877
          KEY_SELECT               0x807F
          KEY_VOLUMEDOWN           0xD02F
          KEY_VOLUMEUP             0xE01F
          KEY_CHANNELDOWN          0x08F7
          KEY_CHANNELUP            0x48B7
          KEY_MENU                 0x58A7
          KEY_PROGRAM              0xF20D
          KEY_INFO                 0xF807
          KEY_ENTER                0x16E9
          KEY_EXIT                 0xB44B
          KEY_REWIND               0x1AE5
          KEY_MUTE                 0xF00F
          KEY_LEFT                 0xA659
          KEY_RIGHT                0x46B9
          KEY_UP                   0x06F9
          KEY_DOWN                 0x8679
      end codes

end remote
@bartelmus.de>

VORLÄUFIGE LG Datei! (Keys fehlen!)


# Please make this file available to others
# by sending it to 
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Sun Jan  5 14:24:26 2014
#
# contributed by
# Sebastian Pech - www.spech.de
# brand:                      LG
# model no. of remote control: AKB73615701
# devices being controlled by this remote:
#

begin remote

  name LG_AKB73615701
  bits           16
  flags SPACE_ENC|CONST_LENGTH|REPEAT_HEADER
  eps            30
  aeps          100

  header       4525  4429
  one           605  1625
  zero          605   509
  ptrail        604
  repeat        600   511
  pre_data_bits   16
  pre_data       0xB4B4
  gap          107515
  toggle_bit_mask 0x0

      begin codes
          KEY_POWER                0x0CF3
          KEY_1                    0xDC23
          KEY_FASTFORWARD          0x2CD3
          KEY_FORWARD              0xCC33
          KEY_REWIND               0xAC53
          KEY_PREVIOUS             0x4CB3
          KEY_NEXT                 0xCC33
          KEY_TITLE                0x52AD
          KEY_MENU                 0x5CA3
          KEY_HOME                 0xE619
          KEY_UP                   0xE21D
          KEY_DOWN                 0x12ED
          KEY_LEFT                 0x9A65
          KEY_RIGHT                0x5AA5
          KEY_ENTER                0x1AE5
          KEY_BACK                 0xA25D
          KEY_SUBTITLE             0x0AF5
          KEY_TITLE                0xD22D
      end codes

end remote
@bartelmus.de>

Probleme

Gibt es in der Zeile 1 der lircd.conf den Eintrag #UNCONFIGURED muss dieser gelöscht werden. Andernfalls erscheint die folgende Meldung beim Start.

$ sudo /etc/init.d/lirc restart
[ ok ] Reconfigure LIRC or manually replace /etc/lirc/lircd.conf to enable..

Kommentare

Ich bin kurz vor der verzweiflung :(
habe schon überall im netzt gesucht aber finde nix zu meinem problem.
Habe ein raspberry pi 2 und alles funzt eigentlich bis auf irsend.

root@ir:~# irsend SEND_ONCE tvpanasonic KEY_1
irsend: command failed: SEND_ONCE tvpanasonic KEY_1
irsend: unknown remote: "tvpanasonic"

habe ständig die Meldung. Hoffentlich hat jemand eine idee?

 

Einige Produktlinks sind Amazon Affiliate Links und unterstützen den Ausbau der Webseite. Vielen Dank für deinen Einkauf über einen der Links! Ich freue mich auch über eine kleine Spende mittels PayPal.Me/SPech.