Python Script zur GPIO Überwachung

Begonnen von cpfeil81, 08 Februar 2014, 23:18:54

Vorheriges Thema - Nächstes Thema

cpfeil81

Hi,

ich habe ein kleines Skript in Python geschrieben, dass mir PIN 18 des GPIO überwacht.

Wird eine Aktion (High/Low) erkannt, wird ein Actor in FHEM über WGET eingeschaltet.

Nun aber zu meiner Frage: Ich verstehe die Event Handler z.B. add_event_detect noch nicht so genau. Ich habe nun gelernt, dass ich mit einer Dauerschleife das Python Skript am "Leben" halten muss, damit auch die Event Handler reagieren.

Wird aber die Fkt. über den Event Handler ausgeführt, scheint der Event Handler kein zweites Mal anzusprechen, oder? Daher habe ich in der Fkt. selbst das Löschen/Neu Setzen des Event Handler versucht - klappt auch super soweit, allerdings wird zunächst erst der Wert 1 und kurze Zeit später der Wert 0 für den PIN 18 ausgegeben.

Den PIN 18 setze ich mittels Homematic Bewegungsmelder.

from time import sleep  # Allows us to call the sleep function to slow down our loop
import RPi.GPIO as GPIO # Allows us to call our GPIO pins and names it just GPIO
import os

GPIO.setmode(GPIO.BCM)  # Set's GPIO pins to BCM GPIO numbering
INPUT_PIN = 18           # Sets our input pin, in this example I'm connecting our button to pin 4. Pin 0 is the SDA pin so I avoid using it for sensors/buttons
GPIO.setup(INPUT_PIN, GPIO.IN)  # Set our input pin to be an input


#Create a function to be executed when PIN changes
def inputHigh(channel):
    os.system("wget http://192.168.178.39:8083/fhem?cmd.Alarmrelais_Kanal1=set%20Alarmrelais_Kanal1%20on --quiet")
    print(GPIO.input(INPUT_PIN));
    sleep(1);
    GPIO.remove_event_detect(INPUT_PIN);
    sleep(1);
    GPIO.add_event_detect(INPUT_PIN, GPIO.BOTH,  callback=inputHigh, bouncetime=200);


#Add a listener
GPIO.remove_event_detect(INPUT_PIN);
GPIO.add_event_detect(INPUT_PIN, GPIO.BOTH,  callback=inputHigh, bouncetime=200);

# Start a loop that never ends
while True: sleep(10);