Hallo!
Wie einige inzwischen schon wissen, arbeite ich an einer Steuerung meiner Garagentore über die BLYNK-App.
Ich kann inzwischen:
- Das Steuersignal an die Tore übergeben
- Endschalter auslesen
- gezielt in die Lüftungsstellung fahren
Nun hab ich noch das Problem, dass das Tor ja bis zu 22 Sekunden braucht um zwischen zwei Endlagen hin und her zu fahren. Wenn man nicht vor dem Tor steht, ist es am Handy schwer nachzuvollziehen, ob sich das Tor noch bewegt (/bewegen müsste) oder ob etwas schiefgegangen ist.
Deswegen würde ich bei Start der Torfahrt gern für 22 Sekunden ein Signal an die App senden lassen, dass dem Nutzer sagt "Tor ist ggf. beschäftigt". Wenn ich dafür aber sleep nutze, friert mir ja das ganze Programm für 22 Sekunden ein. Das bedeutet, dass ich weder dieses Tor Stoppen noch das andere Starten kann.
Ich dachte ja an eine while-Schleife und einen "Marker", der immer gesetzt wird, wenn ich an der App eine Taste drücke aber darauf reagiert er nicht:
# TuerL control through V0 virtual pin
@blynk.on("V0")
def v0_write_handler(value):
# global led_switch
if int(value[0]) is not 0:
Marker = 1
GPIO.output(TuerL, GPIO.LOW)
print('linke Tuer aktiv')
iL=0
Marker = 0
blynk.virtual_write(4, 'BESCHAEFTIGT')
while iL<22 and Marker is 0:
sleep(1)
iL += 1
blynk.virtual_write(4, 'BEREIT')
else:
GPIO.output(TuerL, GPIO.HIGH)
print('linke Tuer passiv')
# TuerR control through V1 virtual pin
@blynk.on("V1")
def v1_write_handler(value):
# global led_switch
if int(value[0]) is not 0:
Marker = 1
GPIO.output(TuerR, GPIO.LOW)
iR = 0
Marker = 0
blynk.virtual_write(4, 'BESCHAEFTIGT')
while iR<22 and Marker is 0: # and GPIO.output(TuerL) is LOW:
iR += 1
sleep(1)
blynk.virtual_write(4, 'BEREIT')
else:
GPIO.output(TuerR, GPIO.HIGH)
print('rechte Tuer passiv')
Alles anzeigen
Vielen Dank für eure Hinweise!
Michael