IPS IR-Steuerung mittels Raspberry PI

Hallo zusammen,

kurze kleine Anleitung für alle die einen Raspberry haben und gerne ein Paar IR-Signale an IP-Symcon weiterleiten möchten.
Bei mir steuer ich damit zb. einen IPS-basierten Wecker mit der Fernbedienung im Schlafzimmer.

Auf dem Raspberry:
Verwendet wird ein TSOP 4838 IR Empfänger
Dieser wird wie folgt angeschlossen:


TSOP   RASPBERRY
VS        3,3V 
GND       GND
OUT       PIN 18

Raspi Installation:


sudo apt-get install lirc
echo "lirc_rpi" | sudo tee -a /etc/modules

Hardware.conf anpassen:

sudo nano /etc/lirc/hardware.conf

Parameter in der hardware.conf


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

Prüfen ob IR empfänger was empfängt:


sudo /etc/init.d/lirc stop
sudo mode2 -d /dev/lirc0
# Abbruch mit CTRL+C

Nun müssen wir noch die LIRC Konfiguration erstellen:
Achtung dabei die Standard Tasten-Werte nutzen (KEY_1, KEY_MUTE etc.)

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

So nun läuft der IR-Empfänger, damit er aber bestimmte Befehle entgegen nimmt und an IP-Symcon sendet, nutzen wir irexec. Dazu eine Konfigurationsdatei erstellen:

sudo nano ~/irexec.conf
# Beispiel Inhalt:
begin irexec
        begin
                prog = irexec
                button = KEY_POWER
                config = ~/sendcmd KEY_POWER
        end
        begin
                prog = irexec
                button = KEY_0
                config = ~/sendcmd 0
        end
end irexec

Datei kann beliebig erweitert werden…

Um die Daten an IPS zu senden nutzen wir einen TCP Call und auf IPS-Seite einen ServerSocket.
Man könnte auch JSONRPC nutzen - was IPS ja unterstützt.
sendcommand-File erstellen

sudo nano ~/sendcmd

Inhalt der Datei, bitte IP-Adresse des IPS-Servers und Port des ServerSockets anpassen.
Mittels dieses Scripts werden daten per TCP Call an den IPS-Server geschickt - $1 und $2 sind Variablend für Parameter die diesem Script übergeben werden können.


#!/bin/bash
echo $1 , $2
echo "IRCMD|$1|$2" > /dev/tcp/192.168.178.40/11024

Datei jetzt noch ausführbar machen

sudo chmod g+x,u+x,o+x ~/sendcmd

Damit irexec bei neustart gestartet wird, geht es am einfachsten mit der crontab:

crontab -e

Inhalt einfügen ans Ende:

@reboot irexec -d /home/pi/irexec.conf

um IREXEC zu testen:

sudo killall irexec
irexec ~/irexec.conf

Test beenden mit CTRL+C und als Daemon starten:

irexec -d /home/pi/irexec.conf

Das war’s eigentlich schon. Jetzt müssen wir auf IPS-Seite nur noch einen ServerSocket erstellen, an den Port 11024 (oder angepasst) binden und eine Registervariable erzeugen, die auf den ServerSocket zeigt und auf ein Auswertescript, das wie folgt aussehen kann:

	// Input from Socket Server -----------------------------------------------
	$val = ($_IPS['VALUE']);
	//Split Message from RPI
	$cmd = explode("|",$val);
	$obj     = $cmd[0];
	$par1   = $cmd[1];
	$par2   = $cmd[2];

   if($obj == 'IRCMD'){
        switch($par1){
			case "KEY_POWER": // irgendwas machen
                                   break;
			case "0":                       // irgendwas machen
                                   break;
      }
  }

Vielen Dank für Deinen Beitrag. Du hast mir sehr geholfen. :slight_smile:

Ich wusste nicht, wie ich vom Raspberry Pi Befehle an IPS schicken kann.

Gruß
WegiMa

Nachdem in dieser Anleitung hardware.conf angepasst wurde musste ich zwingend noch diese Datei anpassen

sudo nano /boot/config.txt

In dieser Datei gibt es einen Eintrag „dtoverlay“.
Diesen Überschreiben mit:

dtoverlay=lirc-rpi,gpio_in_pin=18

Wenn ich das nicht gemacht habe bekam ich folgende Fehlermeldung:

irrecord: could not get file information for /dev/lirc0
irrecord: default_init(): No such file or directory
irrecord: could not init hardware (lircd running ? --> close it, check permissions)

Liebe community,

nach genau dieser Anleitung bin ich vorgegangen, habe aber das Problem, dass IREXEC nichts zu machen scheint. Habe in meiner lircd.conf die KEY’s alle sauber drin und auch die irexec.conf sieht m.E. gut aus. Wenn ich irexec ~/irecex.conf auf der Konsole starte und dann die Tasten drücke - sollte auf der Kommandozeile dann was zu sehen sein?
Bei mir tut sich da nämlich nichts.
Wenn ich ~/sendcmd 1 manuell ausführe sehe ich im IPS-Meldungen-Tab die eingehende Verbindung…
Irgend Jemand noch eine Idee? Ich verwende jessie minimal (die Tage frisch installiert)


begin remote

  name  mce
  bits            5
  flags RC6|CONST_LENGTH
  eps            30
  aeps          100

  header       2698   846
  one           470   414
  zero          470   414
  pre_data_bits   32
  pre_data       0x1BFF83DF
  gap          106246
  min_repeat      2
#  suppress_repeat 2
#  uncomment to suppress unwanted repeats
  toggle_bit_mask 0x8000
  rc6_mask    0x100000000

      begin codes
          key_1                    0x1E
          key_0                    0x1F
      end codes

end remote

und die irexec.conf:

begin irexec
        begin
                prog = irexec
                button = KEY_0
                config = ~/sendcmd 0
        end
                begin
                prog = irexec
                button = KEY_1
                config = /home/pi/sendcmd 1
        end
end irexec

Danke vorab für Eure Hilfe!