lirc Auswertung unter Python V2

Software besorgen und anwenden
Post Reply
Message
Author
Pieper
Posts: 6
Joined: 19. Feb 2014 23:38

lirc Auswertung unter Python V2

#1 Post by Pieper »

Moin Moin,

dies ist mein erster Beitrag hier und hoffe man kann mir helfen.

Hatte im Nachbar-Forum schon angefragt, habe aber bislang noch keine Lösung erhalten.

Ich habe auf dem RaspberryPi unter Rasbian "wheezy" den IR-Empfänger mit Hilfe von:

http://www.pro-linux.de/artikel/2/1624/ ... ystem.html

erfolgreich zum Laufen gebracht und bekomme auch mit "irw" die Tasten meiner FB in der Konsole angezeigt.
Wie werte ich aber jetzt die gesendeten Befehle in meinem "shutdown script" unter Python Version 2 aus?


Code: Select all

# shutdown script for Raspberry Model A
# watch LOW level on pin 5 to enter sleep mode
# status led on pin 7: ON = ready

import RPi.GPIO as GPIO
import os
import time

# use the pin number as on the raspi board

GPIO.setmode(GPIO.BOARD)

# set pin 7 as output and LOW, pin 5 is input
# Pin zum Ausschalten

GPIO.setup(7, GPIO.OUT)
GPIO.output(7, False)
GPIO.setup(5, GPIO.IN)

# Pins zur Relaissteuerung

GPIO.setup(22, GPIO.OUT)
GPIO.output(22, True)
GPIO.setup(16, GPIO.IN)
GPIO.setup(18, GPIO.IN)

while True:
# Relaisschaltung
	if not (GPIO.input(18)):
		GPIO.output(22, False)
	elif not (GPIO.input(16)):
		GPIO.output(22, True)
# /Relaisschaltung
# Shutdown
	elif not (GPIO.input(5)):
		os.system("sudo shutdown -h now")
# /Shutdown
	else:
		time.sleep(.5)
Taster am Gerät an PIN 5, 16 und 18 steuern den RPi schonmal, aber möchte diese Funktionen mit der FB steuern.

Wobei ich mit der Taste "Power" auf der FB den PIN 5 auf LOW legen möchte und mit der Taste "A/B" den PIN 22 wechselweise auf HIGH oder LOW legen möchte (wenn HIGH dann auf LOW und wenn LOW dann auf HIGH).


Meine lircd.conf:


Code: Select all

#
# this config file was automatically generated
# using	lirc-0.7.1pre2(any) on Mon Jul	4 22:11:52 2005
#
# contributed by
#
# brand:		       Technisat
# model	no. of remote control: TTS35AI
# devices being	controlled by this remote: Skystar 2.6D
#

begin remote

  name	Technisat_TTS35AI.conf
  bits		 13
  flags	RC5|CONST_LENGTH
  eps		 30
  aeps		100

  one		882   803
  zero		882   803
  plead		905
  gap	       112766
  toggle_bit	  2


      begin codes
	  Power			   0x1A8C
	  Mute			   0x1A8D
	  1			   0x1281
	  2			   0x1A82
	  3			   0x1283
	  4			   0x1A84
	  5			   0x1285
	  6			   0x1A86
	  7			   0x1287
	  8			   0x1A88
	  9			   0x1289
	  0			   0x1A80
	  -/--			   0x128A
	  A/B			   0x1AA3
	  Red			   0x0AAB
	  Green			   0x02AC
	  Yellow		   0x0AAD
	  Blue			   0x02AE
	  Ok			   0x0A97
	  Up			   0x12A0
	  Down			   0x1AA1
	  Left			   0x1291
	  Right			   0x1A90
	  SFI			   0x12AF
	  Back			   0x1AA2
	  Info			   0x028F
#	   Prog+		    0x1AA0
#	   Prog-		    0x12A1
	  TV/Radio		   0x0293
#	   Volume+		    0x1A90
#	   Volume-		    0x1291
	  Menu			   0x0A92
	  Hilfe			   0x1A8F
	  TXT			   0x12BC
	  STOP			   0x1AA9
	  EXT			   0x12B8
	  HILFE2		   0x0AB6
      end codes

end remote
Suche schon seit Tagen im Netz, aber lirc unter Python scheint noch sehr neu zu sein.
Danke für Eure Hilfe!


.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Du brauchst dieses Python-Skript nicht, um den Raspi herunterzufahren. Das Ding macht nichts anderes, als in einer Endlosschleife die GPIOs abzufragen und sobald input5 gedrückt ist, den Befehl "sudo shutdown -h now" aufzurufen.

Um mit der Fernbedienung ein Kommando auszulösen, guck dir bitte eins der Beispiele mit prog=irexec unter http://www.lirc.org/html/configure.html#lircrc_format an. Dort baust du nach dem Ausprobieren des Beispiels statt echo eben "sudo shutdown -h now" ein.

Die GPIOs kann man ebenfalls von überallher steuern. Dazu muss man nur 0 oder 1 in eine der Pseudodateien reinschreiben, die der Kernel unter /sys/class/gpio/ bereitstellt. Wie es genau geht, steht hier: http://raspberrypiguide.de/howtos/raspb ... io-how-to/

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Pieper
Posts: 6
Joined: 19. Feb 2014 23:38

#3 Post by Pieper »

So,

habe die Tut´s mal durchgespielt, Shutdown ist auch so mit der FB ohne Probleme möglich,
aber der Teil mit der GPIO-Abfrage zur Umschaltung von GPIO 25 (PIN22) verlangt nach
der verlinkten Site leider root-Rechte und das möchte ich gerne verhindern.

Manuell über die SSH- Konsole hatte das zwar geklappt, aber die Einträge werden wohl in der rc.local ignoriert?

Muß ich nochmal genauer prüfen, da ein Lesen der Konsolen-Anzeige am TV über HDMI vom mplayer sofort nach dem booten verhindert wird (Hyperion-Ambilight).

Gibt es nicht evtl. noch eine andere Möglichkeit, mein Python-Script zu erweitern?


.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

Pieper wrote:aber der Teil mit der GPIO-Abfrage zur Umschaltung von GPIO 25 (PIN22) verlangt nach der verlinkten Site leider root-Rechte und das möchte ich gerne verhindern.
Und wo bitte ist das ein Problem? Zum Herunterfahren brauchst du die auch. irexec lässt du als root-Daemon laufen und die Feststellung, welche Kommandos nun irexec benutzen dürfen steht ja in der globalen lircd.conf.

Du kannst aber auch die Zugriffsrechte auf die GPIO-Pseudodateien mit chmod und chown ändern.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Pieper
Posts: 6
Joined: 19. Feb 2014 23:38

#5 Post by Pieper »

Das Problem ist aber, das die Verzeichnisse unter /sys/class/gpio/ nach jedem
Neustart wieder angelegt werden müssen, und daher die Rechte
erneut vergeben werden müssen.

Zumindest habe ich das so aus dem Tut gelesen, und auch so festgestellt
.


.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#6 Post by Janka »

Pieper wrote:Das Problem ist aber, das die Verzeichnisse unter /sys/class/gpio/ nach jedem
Neustart wieder angelegt werden müssen, und daher die Rechte
erneut vergeben werden müssen.
Das sind Pseudodateien. Die existieren nur als Zustände im Kernel, also im RAM. Bau das chmod/chown einfach in das Bootscript ein. Die anderen Dienste, z.B. udev machen es auch nicht anders, als die Rechte jeweils beim Booten wie per Konfiguration gewünscht einzustellen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Pieper
Posts: 6
Joined: 19. Feb 2014 23:38

#7 Post by Pieper »

Hi,

endschuldige die "dummen" Einsteigerfragen, nutze aber meinen RPI erst seit 2 Monaten mit wheezy, zum Betrieb mit Hyperion, und bin froh, das ich das selber soweit zum Laufen gebracht habe.
Bei Interesse kann ich ja mal Bilder machen.

Welches Bootscript meintst du, rc.local oder config.txt, oder gibts da noch andere?

Wäre für ein Beispiel, was ich da wo reinschreiben soll, dankbar!

Aber keine Angst, wenn das dann funktioniert geht das noch weiter!

Display 1602 über i2c kommt auch noch :wink:

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#8 Post by Janka »

Pieper wrote:Welches Bootscript meintst du, rc.local
Ja, /etc/rc.local. Das wird als root beim Booten der Maschine ausgeführt und zu dem Zeitpunkt existieren die benötigten Nodes schon, da sie ja der Kernel selbst bereitstellt.

Evtl. musst du chmod/chown mit voller Pfadangabe versehen, keine Ahnung wie der PATH innerhalb dieses Skriptes gesetzt ist. Mein Raspi ist gerade auf Wanderschaft.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Pieper
Posts: 6
Joined: 19. Feb 2014 23:38

#9 Post by Pieper »

@ Janka: Super Hilfe von dir, und besten Dank nochmals!

Zur Info an alle, die ähnliches vorhaben.

Meine .lircrc:

Code: Select all

   begin
        remote = Technisat_TTS35AI.conf
        button = Power
        prog   = irexec
        repeat = 0
        config = sudo shutdown -h now
    end

   begin
        remote = Technisat_TTS35AI.conf
        button = 1
        prog   = irexec
        repeat = 0
        config = echo "1" > /sys/class/gpio/gpio25/value
    end

   begin
        remote = Technisat_TTS35AI.conf
        button = 2
        prog   = irexec
        repeat = 0
        config = echo "0" > /sys/class/gpio/gpio25/value
    end
Meine rc.local:

Code: Select all

!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/usr/bin/gpio2spi </dev/null >/dev/null 2>&1 &
#/usr/bin/hyperion-v4l2 --width 360 --height 288 --crop-width 5 --crop-height 10 --size-decimator 3 --frame-decimator 1 --signal-threshold 0.05 --skip-reply
#/usr/bin/hyperion-v4l2 --width 360 --height 288 --crop-width 5 --crop-height 10 --size-decimator 3 --frame-decimator 1 --skip-reply --signal-threshold 0.05
/usr/bin/mplayer -tv driver=v4l2&#58;width=96&#58;height=54 device=/dev/video0 -vo fbdev -fs -fps 20  tv&#58;// </dev/null >/dev/null 2>&1 &
/usr/bin/hyperiond /etc/hyperion.config.json </dev/null >/dev/null 2>&1 &

sudo python /home/pi/shutdown.py &



# Freigabe der Rechte für GPIO

sudo chmod 222 /sys/class/gpio/export /sys/class/gpio/unexport

echo "25" > /sys/class/gpio/export

echo "out" > /sys/class/gpio/gpio25/direction

# Ende Freigabe



sudo irexec &


exit 0
und meine shutdown.py:

Code: Select all

# shutdown script for Raspberry Model A
# watch LOW level on pin 5 to enter sleep mode
# status led on pin 7

import RPi.GPIO as GPIO
import os
import time

# use the pin number as on the raspi board

GPIO.setmode&#40;GPIO.BOARD&#41;

# set pin 7 as output and LOW, pin 5 is input
# Pin zum Ausschalten

GPIO.setup&#40;7, GPIO.OUT&#41;
GPIO.output&#40;7, False&#41;
GPIO.setup&#40;5, GPIO.IN&#41;

# Pins zur Relaissteuerung

GPIO.setup&#40;22, GPIO.OUT&#41;
GPIO.output&#40;22, True&#41;
GPIO.setup&#40;16, GPIO.IN&#41;
GPIO.setup&#40;18, GPIO.IN&#41;

while True&#58;

# Relaisschaltung
	if not &#40;GPIO.input&#40;18&#41;&#41;&#58;
		GPIO.output&#40;22, False&#41;
	elif not &#40;GPIO.input&#40;16&#41;&#41;&#58;
		GPIO.output&#40;22, True&#41;
# /Relaisschaltung



# Shutdown
	elif not &#40;GPIO.input&#40;5&#41;&#41;&#58;
		os.system&#40;"sudo shutdown -h now"&#41;
# /Shutdown
	else&#58;
		time.sleep&#40;.5&#41;

Evtl. hilft das ja jemanden :lol:


.

Pieper
Posts: 6
Joined: 19. Feb 2014 23:38

#10 Post by Pieper »

Hier nochmals die Site, die zum Durchbruch führte:

http://wiki.ubuntuusers.de/Lirc/Tasten_ ... en_belegen

Post Reply