Ich grüße euch,
ich bin seit ein paar Tagen daran mein Script für eine Alarmanlage umzuschreiben und übersichtlicher zu gestalten und hatte dadurch auch schon einige Aha-Effekte beim lernen von Python.
Jetzt bin ich an einer Stelle wo ich nicht mehr weiter komme und hoffe das der ein oder andere mir zumindest einen Stups in die richtige Richtung gibt.
Ich nutze Telegram um den Alarm Ein- bzw. Auszuschalten.
Beim Einschalten soll zu erst geprüft werden ob alle Türen geschlossen sind. Wenn dies der fall ist schaltet der Alarm Ein ansonsten wird mir gesagt welche Tür noch offen ist bzw. geschlossen werden muss.
Das Funktioniert soweit.
Mein Problem ist das ich bei eingeschaltetem Alarm keine Einbruchsmeldung bekomme.
Die Idee war jetzt eine Statusvariable in der "def send_message" funktion zu setzen. Dann hab ich gemerkt das die Variable bei jedem Funktionsaufruf zurückgesetzt wird.
Da kommt der Schlips ins Rad. Ich habe keine Ahnung wie ich das lösen soll.
#!/usr/bin/env python
import datetime
import telepot
from telepot.loop import MessageLoop
from gpiozero import Button
import time
import functools
now = datetime.datetime.now()
dateTime = now.strftime("%d/%m/%Y %H:%M")
#--------------------------------------------------------
#Telgram
#--------------------------------------------------------
token = "Zahlen- und Buchstabensalat"
chat_id = irgeneine komische nummer
#--------------------------------------------------------
#Bezeichnung der einzelnen Türkontakte
#--------------------------------------------------------
holztuer = Button(17, pull_up=False, bounce_time=0.1)
werkstatttuer = Button(18, pull_up=False, bounce_time=0.1)
#bartuer = Button(22, pull_up=False, bounce_time=0.1)
#westtuer = Button(27, pull_up=False, bounce_time=0.1)
#--------------------------------------------------------
#Telegram, Prüfung Türen Auf/zu, Alarm Ein/Aus
#--------------------------------------------------------
def handle(msg):
chat_id = msg['chat']['id']
command = msg['text']
print(f"Received: {command}")
if command == "/an":
print("prüfe ob alle tueren geschlossen")
if not holztuer.is_pressed:
send_message(an = False, text = 2, door = "Holztür")
print("holztuer offen")
elif not werkstatttuer.is_pressed:
send_message(an = False, text = 2, door = "Werkstatttür")
print("Werkstatttür offen")
else:
print("alle tueren geschlossen")
send_message(an = True)
print("alarm an")
elif command == "/aus":
send_message(an = False, text = 1)
print("alarm aus")
#--------------------------------------------------------
#Nachricht an Telefon
#--------------------------------------------------------
def send_message(an = None, text = 0, onOff = "", door = "", openClose = ""):
scharf = False
if an:
bot.sendMessage (chat_id, f"Alarm AN. \n {dateTime}")
scharf = True
elif not an:
if text == 1:
bot.sendMessage (chat_id, f"Alarm AUS. \n {dateTime}")
scharf = False
elif text == 2:
bot.sendMessage (chat_id, f"{door} noch offen. Alarm AUS. \n {dateTime}")
elif scharf:
bot.sendMessage (chat_id, f"Alarm!!! {door} wurde {openClose} \n {dateTime}")
#--------------------------------------------------------
#Überwachung der Tueren bei eingeschaltetem Alarm
#--------------------------------------------------------
holztuer.when_released = functools.partial(send_message, door ="Holztuer", openClose = "geöffnet")
holztuer.when_pressed = functools.partial(send_message, door ="Holztuer", openClose = "geschlossen")
werkstatttuer.when_released = functools.partial(send_message, door ="Werkstatttuer", openClose = "geöffnet")
werkstatttuer.when_pressed = functools.partial(send_message, door ="Werkstatttuer", openClose = "geschlossen")
bot = telepot.Bot(f"{token}")
print(bot.getMe())
MessageLoop(bot, handle).run_as_thread()
print('Up and Running....')
#Keep the program running.
while 1:
time.sleep(1)
Display More
beste Grüße und schönes Wochenende