Hallo,
Ich benötige ein Programm, welches in Abständen einen Ping sendet um das Netz zu kontrollieren und gleichzeitig muss ich 2 GPIOs mittels Interrupt kontrollieren.
Um mein Problem zu verdeutlichen, habe ich mal dieses Beispiel geschrieben. (Man verzeihe mir die unkonformität der Variablennamen)
Wenn ich das Beispiel in der Python-Shell laufen lasse, funktioniert alles einwandfrei. So starte ich das Programm zum Test von der Konsole (auch als root), /usr/bin/python /home/pi/test.py
Sobald die IP abgefragt wird, ist es nicht mehr möglich, den Interrupt auszulösen. Ich habe das Programm auf mehreren verschiedenen Pis getestet. Leider immer mit dem gleichen Ergebnis.
Vielleicht finde ich ja in diesem Forum jemanden, der mir dieses eigenartige Verhalten erklären kann? Es wäre echt toll, wenn jemand eine Lösung für mich hätte, weil ich das Programm gern mit diesen 2 Funktionen nutzen würde.
Vielen Dank schon mal im Vorraus für's Lesen.
MfG LK61
#!/usr/bin/env python
#coding: utf-8
from __future__ import absolute_import, division, print_function
import time
import RPi.GPIO as IO
import os.path
TRANS1=17
TRANS2=4
IO.setmode (IO.BCM)
IO.setwarnings(False)
IO.setup(TRANS1,IO.IN)
IO.setup(TRANS2,IO.IN)
def INT_TRANS1(channel):
print('Interrupt1 ausgeloest')
def INT_TRANS2(channel):
print('Interrupt2 ausgeloest')
def PruefeNetz():
IPx = os.system("ping -c 1 -w 1 192.168.25.27 >/dev/null")
if IPx==0:
print ("Die IP wurde erkannt")
return
IO.add_event_detect(TRANS1, IO.FALLING, callback=INT_TRANS1, bouncetime=300)
IO.add_event_detect(TRANS2, IO.FALLING, callback=INT_TRANS2, bouncetime=300)
# **************** Programmbeginn Hauptschleife
def main():
print ('Programm gestartet')
IP=PruefeNetz()
while True:
time.sleep(1)
if __name__ == '__main__':
main()
Alles anzeigen