Einrichten einer Fernbedienung mit lirc


7

Wie kann ich mein Fernsehgerät nur mit einem Raspberry Pi und der Infrarotdiode von einer alten Fernbedienung aus steuern? Und wie kann ich IR-Befehle von einer vorhandenen Fernbedienung interpretieren?


Schönes Tutorial! Lirc ist sicherlich weit davon entfernt, "Plug and Play" zu sein.
Dmitry Grigoryev

Antworten:


8

Ich kann mein Fernsehgerät mit dem folgenden Befehl einschalten:

irsend SEND_ONCE LG_AKB72915207 KEY_POWER

So habe ich es eingerichtet.

Hardware-Setup

Ich benutze einen Raspberry Pi P1 2011.12.

Die blanke Infrarot-LED ist an GPIO#18und angeschlossen GND. Hardware-

Installieren von lirc

sudo apt-get install lirc -y

Aktualisieren /etc/modules

sudo nano /etc/modules

Und fügen Sie die folgenden Zeilen hinzu, die zu führen

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
lirc_dev
lirc_rpi gpio_in_pin=4 gpio_out_pin=18

Bitte beachten Sie, dass ich das (noch) nicht gpio_in_pinin meinem Setup verwende.

Aktualisieren /etc/lirc/hardware.conf

Das ist mein hardware.conf

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# 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"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Aktualisieren /boot/config.txt

sudo nano /boot/config.txt

Aktualisieren Sie die Zeile bezüglich des lirc-rpiModuls

# Uncomment this to enable the lirc-rpi module
dtoverlay=lirc-rpi,gpio_in_pin=4,gpio_out_pin=18
# dtparam=gpio_in_pull=up

Laden Sie die Fernbedienungsvoreinstellung herunter

Unter lirc.sourceforge.net/remotes finden Sie ein riesiges Repository mit Fernbedienungen sowie die Voreinstellungen.

In meinem Fall war der meiner Fernbedienung am nächsten liegende LG AKB73275606der LG_AKB72915207. Was mehr oder weniger meiner Fernbedienung ähnelt .

Also habe ich den Inhalt von lirc.sourceforge.net/remotes/lg/AKB72915207 kopiert nach /etc/lirc/lircd.conf:

sudo nano /etc/lirc/lircd.conf
#
# this config file was automatically generated
# using lirc-0.8.6(default) on Fri Sep 10 22:02:46 2010
#
# contributed by
#
# brand:                       TV LG 42"LD420
# model no. of remote control: AKB72915207
# devices being controlled by this remote:
#

begin remote

  name  LG_AKB72915207
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       9056  4448
  one           601  1647
  zero          601   538
  ptrail        601
  repeat       9081  2199
  pre_data_bits   16
  pre_data       0x20DF
  gap          108229
  toggle_bit_mask 0x0

      begin codes
          KEY_POWER                0x10EF                    #  Was: power
          energy                   0xA956
          avmode                   0x0CF3
          input                    0xD02F
          tvrad                    0x0FF0
          KEY_1                    0x8877                    #  Was: 1
          KEY_2                    0x48B7                    #  Was: 2
          KEY_3                    0xC837                    #  Was: 3
          KEY_4                    0x28D7                    #  Was: 4
          KEY_5                    0xA857                    #  Was: 5
          KEY_6                    0x6897                    #  Was: 6
          KEY_7                    0xE817                    #  Was: 7
          KEY_8                    0x18E7                    #  Was: 8
          KEY_9                    0x9867                    #  Was: 9
          KEY_0                    0x08F7                    #  Was: 0
          KEY_LIST                 0xCA35                    #  Was: list
          q.view                   0x58A7
          KEY_VOLUMEUP             0x40BF                    #  Was: vol_up
          KEY_VOLUMEDOWN           0xC03F                    #  Was: vol_down
          KEY_CHANNELUP            0x00FF                    #  Was: ch_up
          KEY_CHANNELDOWN          0x807F                    #  Was: ch_down
          KEY_FAVORITES            0x7887                    #  Was: fav
          ratio                    0x9E61
          KEY_MUTE                 0x906F                    #  Was: mute
          KEY_MENU                 0xC23D                    #  Was: menu
          KEY_INFO                 0xD52A                    #  Was: guide
          q.menu                   0xA25D
          KEY_UP                   0x02FD                    #  Was: up
          KEY_DOWN                 0x827D                    #  Was: down
          KEY_LEFT                 0xE01F                    #  Was: left
          KEY_RIGHT                0x609F                    #  Was: right
          KEY_OK                   0x22DD                    #  Was: ok
          KEY_BACK                 0x14EB                    #  Was: back
          KEY_INFO                 0x55AA                    #  Was: info
          KEY_EXIT                 0xDA25                    #  Was: exit
          KEY_RED                  0x4EB1                    #  Was: red
          KEY_GREEN                0x8E71                    #  Was: green
          ellow                    0xC639
          KEY_BLUE                 0x8679                    #  Was: blue
          exit2                    0x04FB
          t.opt                    0x847B
          KEY_SUBTITLE             0x9C63                    #  Was: subtitle
          KEY_STOP                 0x8D72                    #  Was: stop
          KEY_PLAY                 0x0DF2                    #  Was: play
          KEY_PAUSE                0x5DA2                    #  Was: pause
          KEY_REWIND               0xF10E                    #  Was: <<
          KEY_FORWARD              0x718E                    #  Was: >>
          simplink                 0x7E81
      end codes

end remote

Starten Sie nun den lircDienst neu:

sudo /etc/init.d/lirc restart

Befehle senden

Jetzt kann ich meinen Fernseher folgendermaßen ein- und ausschalten:

irsend SEND_ONCE <DEVICE> <KEY>

nämlich:

irsend SEND_ONCE LG_AKB72915207 KEY_POWER

Und voilà mein Fernseher schaltet sich ein und aus.




Update: Hinzufügen eines Empfängers

Aktualisieren /etc/modules

snd-bcm2835
lirc_dev
lirc_rpi gpio_in_pin=18 gpio_out_pin=17

Aktualisieren /etc/lirc/hardware.conf

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# 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"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Fügen Sie Folgendes hinzu /boot/config.txt:

# LIRC
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
dtparam=gpio_in_pull=up

Um die Fernbedienung zu testen, führen Sie Folgendes aus, um die Impulse anzuzeigen

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

Verwenden Sie die folgenden Befehle, um eine neue Fernbedienung aufzunehmen. Stellen Sie sicher, dass Sie Ihre Fernbedienung für die lirc-Community freigeben, indem Sie die Konfiguration an lirc@bartelmus.de senden.

irrecord --list-namespace # Shows the allowed identifiers for the commands
irrecord -f -d /dev/lirc0 ~/lirc.conf

Um nun die Konfiguration zu testen, starten Sie den lirc-Dienst und führen ihn aus irw

#  sudo /etc/init.d/lirc start
[ ok ] Loading LIRC modules:.
[ ok ] Starting remote control daemon(s) : LIRC :.
root@phone2:~# irw
0000000008087887 00 KEY_POWER LG_6710CMAM09D
0000000008087887 01 KEY_POWER LG_6710CMAM09D
0000000008087887 02 KEY_POWER LG_6710CMAM09D
000000000808c837 00 KEY_PAGEUP LG_6710CMAM09D
000000000808c837 01 KEY_PAGEUP LG_6710CMAM09D
00000000080848b7 00 KEY_PAGEDOWN LG_6710CMAM09D
000000000808c837 00 KEY_PAGEUP LG_6710CMAM09D



Fehlerbehebung

Starten Sie den Socket-Daemon manuell

sudo lircd --device /dev/lirc0

Tutorials, die mir geholfen haben

Fehlermeldungen, die ich während meines Setups erhalten habe

irsend: hardware does not support sending
irsend: command failed: SEND_ONCE LG_AKB72915207 KEY_POWER
irsend: unknown remote: "/etc/lirc/lircd.conf"
lirc_rpi: gpio chip not found!

Andere Beiträge über lirc

lsmod

lsmod
...
lirc_dev               10211  1 lirc_rpi
rc_core                23776  1 lirc_dev

Anzeigen von Fehlern im Zusammenhang mit dem lircProzess:

dmesg | grep -i lirc
[    5.118133] lirc_dev: IR Remote Control driver registered, major 244
[    7.148664] lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
[    8.269729] lirc_rpi: auto-detected active high receiver on GPIO pin 4
[    8.270174] lirc_rpi lirc_rpi: lirc_dev: driver lirc_rpi registered at minor = 0
[    8.270188] lirc_rpi: driver registered!
[   16.197900] input: lircd as /devices/virtual/input/input0

Auflisten einer Fernbedienung:

Auflistung aller Fernbedienungen:

irsend LIST "" ""
irsend: LG_AKB72915207

Auflisten der Befehle für eine bestimmte Fernbedienung

irsend LIST LG_AKB72915207 ""
irsend: 00000000000010ef KEY_POWER
irsend: 000000000000a956 energy
irsend: 0000000000000cf3 avmode
irsend: 000000000000d02f input
irsend: 0000000000000ff0 tvrad
irsend: 0000000000008877 KEY_1
irsend: 00000000000048b7 KEY_2
irsend: 000000000000c837 KEY_3
irsend: 00000000000028d7 KEY_4
irsend: 000000000000a857 KEY_5
irsend: 0000000000006897 KEY_6
irsend: 000000000000e817 KEY_7
irsend: 00000000000018e7 KEY_8
irsend: 0000000000009867 KEY_9
irsend: 00000000000008f7 KEY_0
irsend: 000000000000ca35 KEY_LIST
irsend: 00000000000058a7 q.view
irsend: 00000000000040bf KEY_VOLUMEUP
irsend: 000000000000c03f KEY_VOLUMEDOWN
irsend: 00000000000000ff KEY_CHANNELUP
irsend: 000000000000807f KEY_CHANNELDOWN
irsend: 0000000000007887 KEY_FAVORITES
irsend: 0000000000009e61 ratio
irsend: 000000000000906f KEY_MUTE
irsend: 000000000000c23d KEY_MENU
irsend: 000000000000d52a KEY_INFO
irsend: 000000000000a25d q.menu
irsend: 00000000000002fd KEY_UP
irsend: 000000000000827d KEY_DOWN
irsend: 000000000000e01f KEY_LEFT
irsend: 000000000000609f KEY_RIGHT
irsend: 00000000000022dd KEY_OK
irsend: 00000000000014eb KEY_BACK
irsend: 00000000000055aa KEY_INFO
irsend: 000000000000da25 KEY_EXIT
irsend: 0000000000004eb1 KEY_RED
irsend: 0000000000008e71 KEY_GREEN
irsend: 000000000000c639 ellow
irsend: 0000000000008679 KEY_BLUE
irsend: 00000000000004fb exit2
irsend: 000000000000847b t.opt
irsend: 0000000000009c63 KEY_SUBTITLE
irsend: 0000000000008d72 KEY_STOP
irsend: 0000000000000df2 KEY_PLAY
irsend: 0000000000005da2 KEY_PAUSE
irsend: 000000000000f10e KEY_REWIND
irsend: 000000000000718e KEY_FORWARD
irsend: 0000000000007e81 simplink

lircStatus anzeigen :

Der folgende Befehl sollte keine Fehler anzeigen

sudo /etc/init.d/lirc status

Folgendes sehe ich in meinem Arbeits-Setup:

$ sudo /etc/init.d/lirc status
● lirc.service - LSB: Starts LIRC daemon.
   Loaded: loaded (/etc/init.d/lirc)
   Active: active (running) since Wed 2017-08-09 08:21:34 UTC; 21min ago
  Process: 385 ExecStart=/etc/init.d/lirc start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/lirc.service
           ├─444 /usr/sbin/lircd --driver=default --device=/dev/lirc0 --uinput
           └─458 /usr/sbin/lircmd

Aug 09 08:36:22 JHD lircd-0.9.0-pre1[444]: accepted new client on /var/run/lirc/lircd
Aug 09 08:36:22 JHD lircd-0.9.0-pre1[444]: removed client
Aug 09 08:36:24 JHD lircd-0.9.0-pre1[444]: accepted new client on /var/run/lirc/lircd
Aug 09 08:36:25 JHD lircd-0.9.0-pre1[444]: removed client
Aug 09 08:36:26 JHD lircd-0.9.0-pre1[444]: accepted new client on /var/run/lirc/lircd
Aug 09 08:36:26 JHD lircd-0.9.0-pre1[444]: removed client
Aug 09 08:36:27 JHD lircd-0.9.0-pre1[444]: accepted new client on /var/run/lirc/lircd
Aug 09 08:36:27 JHD lircd-0.9.0-pre1[444]: removed client
Aug 09 08:36:29 JHD lircd-0.9.0-pre1[444]: accepted new client on /var/run/lirc/lircd
Aug 09 08:36:29 JHD lircd-0.9.0-pre1[444]: removed client

Schlecht formatierte Zitate aus Online-Tutorials

Schlecht formatierte Anführungszeichen in den Konfigurationsdateien verursachten einige Probleme, deren Behebung einige Zeit in Anspruch nahm.

”/dev/lirc0″

anstelle von richtigen Anführungszeichen

"/dev/lirc0"

3

@Besi vielen Dank. Es war sehr hilfreich für mich.

Für mich habe ich immer noch ein Problem, wenn ich meine Raspel neu starte.

Ich denke, es ist besser, es beim Start zu aktivieren

systemctl enable lirc.service

als

sudo lircd --device /dev/lirc0

Und jetzt müssen Sie die Module / etc / nicht mehr bearbeiten.

Hier mein Installationsskript:

#!/usr/bin/env bash

# Echo in Blue
function echoBlue () {
  echo -e "\x1B[0;34m\033[1m${1}\033[0m"
}

# Echo in Red
function echoRed () {
  echo -e "\x1B[0;31m\033[1m${1}\033[0m"
}

echoRed "For me PinIN=4 and PinOUT=26"

# Ask Pin Number
echoBlue "Pin In Number ?"
read pinIN
echoBlue "Pin OUT Number ?"
read pinOUT

# Install Lirc
echoBlue "Install Lirc"
sudo apt-get install lirc

# Load Module
# For raspberry instead use /boot/config.txt
#sudo cat >> /etc/modules <<EOF
#lirc_dev
#lirc_rpi gpio_out_pin=4 gpio_in_pin=26
#EOF

# Edit your /boot/config.txt by entering the command below
if ! grep -Fxq "dtoverlay=lirc-rpi,gpio_out_pin=$pinIN,gpio_in_pin=$pinOUT" /boot/config.txt; then
  echoBlue "Edit /boot/config.txt"
  cat >> /boot/config.txt <<EOF

dtoverlay=lirc-rpi,gpio_out_pin=$pinIN,gpio_in_pin=$pinOUT
EOF
else
  echoRed "Line already exist in /boot/config.txt"
fi

# Backup hardware.conf
echoBlue "Backup hardware.conf"
sudo cp /etc/lirc/hardware.conf /etc/lirc/hardware.bak.conf

# Add hardware
echoBlue "Create hardware.conf"
sudo cat > /etc/lirc/hardware.conf <<EOF
########################################################
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"
# Don't start lircmd even if there seems to be a good config file
# START_LIRCMD=false
# Don't start irexec, even if a good config file seems to exist.
# START_IREXEC=false
# Try to load appropriate kernel modules
LOAD_MODULES=true
# 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"
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
########################################################
EOF

# Now use systemcl instead of init.d
echoBlue "Stop lirc.service"
sudo systemctl stop lirc.service
echoBlue "Start lirc.service"
sudo systemctl start lirc.service
echoBlue "Status lirc.service"
sudo systemctl status lirc.service

# Launch it on startup
echoBlue "Launch it on startup"
echoBlue "o|O|y|Y ou n|N|*"
read repdrop
echo -e "\t"
case "$repdrop" in
  o|O|y|Y)
    sudo systemctl enable lirc.service
  ;;
  n|N|*)
    echoBlue "If you want to add it latter just run sudo systemctl enable lirc.service"
  ;;
esac

echoRed "You need to reboot pi"
echoRed "You have to check that /etc/lirc/lircd.conf exist or dl one on http://lirc.sourceforge.net/remotes"

0

Tolles Tutorial, sehr detailliert, aber es hat mein Problem nicht gelöst. Nach stundenlangem Versuch erhielt ich immer noch die Meldung "irsend: Hardware unterstützt das Senden nicht".

Schließlich fand ich diese https://www.raspberrypi.org/forums/viewtopic.php?t=191425#p1213186

und es löste mein Problem. Um zusammenzufassen...

sudo /usr/share/lirc/lirc-old2new

und lirc neu starten:

sudo /etc/init.d/lircd restart

Prost, Daniel

Verwendung von RPi 3 lircd-0.9.4c

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.