Ich habe folgendes Problem. Ein im Netzwerk befindlicher Pi soll beim Start kontrollieren, ob das Netzwerk bereit ist. Dazu pinge ich einen Server an.
Wenn der Ping OK, wartet das Programm auf Eingaben ab deb GPIOs und soll einen Interrupt auslösen. In der Entwicklung Unter Python 2 funktioniert alles prima.
Starte ich das Programm von der Konsole mittels: /usr/bin/python /home/pi/test.py wird die IP korrekt erkannt. Das Programm reagiert aber nicht mehr auf Interrupts.
Nehme ich die Zeile mit dem Ping raus, funktionieren die Interrupts.
Hier mal ein stark gekürzter Code zur Verdeutlichung meines Problems. Sicher ist es etwas triviales, was ich übersehe.
Danke schon mal für's Lesen.
MfG LotharK
Code: Alles auswählen
#!/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 # Transponderlesegeraet an GPIO17
TRANS2=4 # Transponderlesegeraet an GPIO4
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 wirde 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(2)
if __name__ == '__main__':
main()