Hallo Marcus,
ich habe ein Problem mit einer Logik, die über UDP Telegramme getriggert wird. Die Sache ist leider etwas heikel, da es um den Fingerprintleser an der Türe geht. Meine Freundin hat heute mehrere Male den Finger über den Leser gezogen, weil die Tür dabei nicht auf ging, obwohl der Leser mit grün (= erfolgreich) quitiert hat. Darauf hin hat sie bei den Schwiegereltern den Ersatzschlüssel geholt und ist damit dann rein. Als sie drin war ging dann plötzlich die Tür auf. Den WAF kannst du dir wahrscheinlich vorstellen.
In den Logs sehe ich, das Eintreffen der UDP Telegramme und das die Logik getriggert werden soll. Tatsächlich getriggert wird sie aber erst einige Zeit später, was man an der Ausgabe in der Logik sieht. Die Logs habe ich mal auf den IMHO relevanten Teil runter gebrochen und unten mal gepostet. Verdächtig finde ich, dass der Scheduler im Minutentakt neue Workerthreads hinzufügt, aber vielleicht ist das auch normal!?
Obwohl nicht wirklich notwendig, da entsprechend über das Routing im Switch abgesichert, habe ich mal alle IP und KNX Adressen usw. aus dem Log entfernt und durch Dummy Werte ersetzt. Diese sollten hier aber auch keine Rolle spielen.
Und hier die entsprechende Logik:
die so konfiguriert wurde:
Wäre schön, wenn du da mal drüber schauen könntest. Ich könnte dafür zwar auch ein Plugin schreiben, aber letztlich sollte das doch eigentlich problemlos auch als Logik funktionieren.
ich habe ein Problem mit einer Logik, die über UDP Telegramme getriggert wird. Die Sache ist leider etwas heikel, da es um den Fingerprintleser an der Türe geht. Meine Freundin hat heute mehrere Male den Finger über den Leser gezogen, weil die Tür dabei nicht auf ging, obwohl der Leser mit grün (= erfolgreich) quitiert hat. Darauf hin hat sie bei den Schwiegereltern den Ersatzschlüssel geholt und ist damit dann rein. Als sie drin war ging dann plötzlich die Tür auf. Den WAF kannst du dir wahrscheinlich vorstellen.
In den Logs sehe ich, das Eintreffen der UDP Telegramme und das die Logik getriggert werden soll. Tatsächlich getriggert wird sie aber erst einige Zeit später, was man an der Ausgabe in der Logik sieht. Die Logs habe ich mal auf den IMHO relevanten Teil runter gebrochen und unten mal gepostet. Verdächtig finde ich, dass der Scheduler im Minutentakt neue Workerthreads hinzufügt, aber vielleicht ist das auch normal!?
Obwohl nicht wirklich notwendig, da entsprechend über das Routing im Switch abgesichert, habe ich mal alle IP und KNX Adressen usw. aus dem Log entfernt und durch Dummy Werte ersetzt. Diese sollten hier aber auch keine Rolle spielen.
Code:
... 2013-06-10 12:40:09,698 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:09,698 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0000_0_xxxxxxxxxxxxxx_2_- -- scheduler.py:trigger:117 2013-06-10 12:40:09,701 fingerprint DEBUG Payload = 1_0000_0_xxxxxxxxxxxxxx_2_- -- fingerprint.py:<module>:10 2013-06-10 12:40:09,701 fingerprint INFO Unknown finger -- fingerprint.py:<module>:31 2013-06-10 12:40:11,317 Scheduler DEBUG series next time: 2013-06-10 12:40:21+02:00 -- scheduler.py:_next_time:238 2013-06-10 12:40:12,833 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:12,833 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:40:21,076 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:21,076 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:40:38,142 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:38,142 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0000_0_xxxxxxxxxxxxxx_2_- -- scheduler.py:trigger:117 ... 2013-06-10 12:40:43,064 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:43,064 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0000_0_xxxxxxxxxxxxxx_2_- -- scheduler.py:trigger:117 2013-06-10 12:40:43,163 fingerprint DEBUG Payload = 1_0000_0_xxxxxxxxxxxxxx_2_- -- fingerprint.py:<module>:10 2013-06-10 12:40:43,163 fingerprint INFO Unknown finger -- fingerprint.py:<module>:31 2013-06-10 12:40:43,164 Scheduler INFO Adding worker thread. Total: 12 -- scheduler.py:_add_worker:250 ... 2013-06-10 12:40:47,948 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:47,948 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_4_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:40:56,472 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:40:56,472 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:41:07,877 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:41:07,877 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:41:21,003 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:41:21,003 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:41:35,048 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:41:35,048 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:41:44,253 fingerprint DEBUG Payload = 1_0000_0_xxxxxxxxxxxxxx_2_- -- fingerprint.py:<module>:10 2013-06-10 12:41:44,253 Scheduler INFO Adding worker thread. Total: 13 -- scheduler.py:_add_worker:250 2013-06-10 12:41:44,253 fingerprint INFO Unknown finger -- fingerprint.py:<module>:31 ... 2013-06-10 12:41:52,355 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:41:52,355 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:42:05,117 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:42:05,118 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0000_0_xxxxxxxxxxxxxx_2_- -- scheduler.py:trigger:117 2013-06-10 12:42:08,521 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:42:08,521 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:42:17,121 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:42:17,121 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0000_0_xxxxxxxxxxxxxx_2_- -- scheduler.py:trigger:117 2013-06-10 12:42:21,310 Scheduler DEBUG series next time: 2013-06-10 12:42:31+02:00 -- scheduler.py:_next_time:238 2013-06-10 12:42:22,205 SmartHome.py DEBUG udp:xxx.xxx.xxx.xxx:yyyyy Incoming connection from xxx.xxx.xxx.xxx:yyyyy -- __init__.py:handle_read:157 2013-06-10 12:42:22,205 SmartHome.py DEBUG Triggering fingerprint - by: network source: xxx.xxx.xxx.xxx destination: None value: 1_0002_7_xxxxxxxxxxxxxx_1_1 -- scheduler.py:trigger:117 ... 2013-06-10 12:42:45,346 fingerprint DEBUG Payload = 1_0000_0_xxxxxxxxxxxxxx_2_- -- fingerprint.py:<module>:10 2013-06-10 12:42:45,346 Scheduler INFO Adding worker thread. Total: 14 -- scheduler.py:_add_worker:250 2013-06-10 12:42:45,346 fingerprint INFO Unknown finger -- fingerprint.py:<module>:31 ... 2013-06-10 12:43:46,436 fingerprint DEBUG Payload = 1_0000_0_xxxxxxxxxxxxxx_2_- -- fingerprint.py:<module>:10 2013-06-10 12:43:46,436 Scheduler INFO Adding worker thread. Total: 15 -- scheduler.py:_add_worker:250 2013-06-10 12:43:46,436 fingerprint INFO Unknown finger -- fingerprint.py:<module>:31 ... 2013-06-10 12:44:47,525 Scheduler INFO Adding worker thread. Total: 16 -- scheduler.py:_add_worker:250 ... 2013-06-10 12:44:47,526 fingerprint DEBUG Payload = 1_0002_4_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,526 fingerprint INFO User 2 with finger 4 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,526 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,526 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,526 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,526 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,526 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,526 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,527 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,527 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,527 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,527 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,527 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,527 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,527 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,527 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,527 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,527 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,528 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,528 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,528 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,528 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,528 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,528 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,528 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,528 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,528 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 2013-06-10 12:44:47,528 fingerprint DEBUG Payload = 1_0002_7_xxxxxxxxxxxxxx_1_1 -- fingerprint.py:<module>:10 2013-06-10 12:44:47,529 fingerprint INFO User 2 with finger 7 -- fingerprint.py:<module>:43 2013-06-10 12:44:47,529 fingerprint DEBUG eg.flur.tuer.auf = True via Logic None -- item.py:_update:214 ... 2013-06-10 12:44:47,600 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,600 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,631 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,632 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,663 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,663 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,695 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,695 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,727 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,727 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,749 SmartHome.py DEBUG 1.1.3 set 1/5/72 to 60 -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,775 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,775 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,809 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,809 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,840 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,840 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,871 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,871 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214 2013-06-10 12:44:47,903 SmartHome.py DEBUG 1.0.254 set x/x/x to True -- __init__.py:parse_telegram:177 2013-06-10 12:44:47,903 SmartHome.py DEBUG eg.flur.tuer.auf = True via KNX 1.0.254 -- item.py:_update:214
Code:
DELIMITER = '_' SN = 'xxxxxxxxxxxxxx' if not trigger['source'] == 'xxx.xxx.xxx.xxx': logger.info("logic called from an invalid ip adress ({0})".format(trigger['source'])) exit() # retrieve the payload payload = trigger['value'] logger.debug("Payload = {0}".format(payload)) # split the payload parts = payload.split(DELIMITER) # assign the single values user = int(parts[1]) finger = parts[2] serial = parts[3] action = int(parts[4]) relais = parts[5] if user > 2: logger.info("Unknown user id ({0})".format(user)) exit() if not serial == SN: logger.info("Unknown serial number") exit() if action == 2: logger.info("Unknown finger") exit() if not action == 1: logger.info("Unknown action") exit() if finger == '-': finger = None else: finger = int(finger) logger.info("User {0} with finger {1}".format(user, finger)) if finger == 4 or finger == 7: # open the door sh.eg.flur.tuer.auf(True) elif finger == 3: # open the garage door sh.aa.garage.tuer(True) elif finger == 8: # open the garage gate sh.aa.garage.tor(sh.aa.garage.tor.oben())
Code:
['fingerprint'] filename = 'fingerprint.py' nw = yes nw_udp_listen = xxxxx # port number
Kommentar