X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=track-presence.py;h=716b34cdc189e8bf08fb4567f39a98b186060318;hb=fb206ac0c5fbd2c043f80cb91519e1559e7e1d08;hp=e3ae886c968aba5d01b05ae7f2aa9c2ffdbb88e8;hpb=6c8941534a7d98c12632481f83e3cd7687edff27;p=svn42.git diff --git a/track-presence.py b/track-presence.py index e3ae886..716b34c 100755 --- a/track-presence.py +++ b/track-presence.py @@ -149,9 +149,9 @@ threads_running=True def trackSensorStatusThread(uwscfg,status_tracker,connection_listener): global sshp, threads_running #RE_TEMP = re.compile(r'temp\d: (\d+\.\d+)') - RE_PHOTO = re.compile(r'photo\d: [^0-9]*?(\d+)') - RE_MOVEMENT = re.compile(r'movement|button\d?|PanicButton') - RE_ERROR = re.compile(r'Error: (.+)') + RE_PHOTO = re.compile(r'photo\d: [^0-9]*?(\d+)',re.I) + RE_MOVEMENT = re.compile(r'movement|button\d?|PanicButton',re.I) + RE_ERROR = re.compile(r'Error: (.+)',re.I) while threads_running: uwscfg.checkConfigUpdates() sshp = None @@ -213,9 +213,9 @@ door_socklock=threading.Lock() def trackDoorStatusThread(uwscfg, status_tracker,connection_listener): global door_sockhandle, door_socklock, threads_running #socket.setdefaulttimeout(10.0) #affects all new Socket Connections (urllib as well) - RE_STATUS = re.compile(r'Status: (\w+), idle') - RE_REQUEST = re.compile(r'Request: (\w+) (?:(Card|Phone) )?(.+)') - RE_ERROR = re.compile(r'Error: (.+)') + RE_STATUS = re.compile(r'Status: (\w+), idle',re.I) + RE_REQUEST = re.compile(r'Request: (\w+) (?:(Card|Phone) )?(.+)',re.I) + RE_ERROR = re.compile(r'Error: (.+)',re.I) while threads_running: uwscfg.checkConfigUpdates() with door_socklock: @@ -296,13 +296,13 @@ class StatusTracker: #(threading.Thread): self.last_movement_unixts=0 self.last_light_value=0 self.last_light_unixts=0 - self.lock=threading.Lock() + self.lock=threading.RLock() #Notify State locked by self.presence_notify_lock self.last_somebody_present_result=False self.last_warning=None self.count_same_warning=0 self.who_might_be_here=None - self.presence_notify_lock=threading.Lock() + self.presence_notify_lock=threading.RLock() #timer self.timer=None self.timer_timeout=0 @@ -313,8 +313,11 @@ class StatusTracker: #(threading.Thread): self.door_open=True if self.door_open != self.door_open_previously: self.door_who=who + self.lock.release() + self.updateWhoMightBeHere(who) + self.lock.acquire() self.door_manual_switch_used=(who is None or len(who) == 0) - self.door_physically_present=(self.door_manual_switch_used or how.startswith("Card")) + self.door_physically_present=(self.door_manual_switch_used or (not how is None and how.startswith("Card"))) if not self.door_open_previously is None: self.last_door_operation_unixts=time.time() self.lock.release() @@ -322,7 +325,6 @@ class StatusTracker: #(threading.Thread): self.lock.acquire() self.door_open_previously = self.door_open self.lock.release() - self.updateWhoMightBeHere(who) logging.debug("doorOpen: open: %s, who: %s, how: %s, manual_switch: %s; physically_present: %s" % (self.door_open,self.door_who,how,self.door_manual_switch_used,self.door_physically_present)) def doorClosed(self,who,how): @@ -331,8 +333,11 @@ class StatusTracker: #(threading.Thread): self.door_open=False if self.door_open != self.door_open_previously: self.door_who=who + self.lock.release() + self.updateWhoMightBeHere(who) + self.lock.acquire() self.door_manual_switch_used=(who is None or len(who) == 0) - self.door_physically_present=(self.door_manual_switch_used or how.startswith("Card")) + self.door_physically_present=(self.door_manual_switch_used or (not how is None and how.startswith("Card"))) if not self.door_open_previously is None: self.last_door_operation_unixts=time.time() self.lock.release() @@ -340,7 +345,6 @@ class StatusTracker: #(threading.Thread): self.lock.acquire() self.door_open_previously = self.door_open self.lock.release() - self.updateWhoMightBeHere(who) logging.debug("doorClosed: open: %s, who: %s, how:%s, manual_switch: %s; physically_present: %s" % (self.door_open,self.door_who,how,self.door_manual_switch_used,self.door_physically_present)) def movementDetected(self): @@ -434,6 +438,7 @@ class StatusTracker: #(threading.Thread): self.last_somebody_present_result = somebody_present if not self.status_change_handler is None: self.status_change_handler(somebody_present, door_open=self.door_open, who=self.who_might_be_here) + self.forgetWhoMightBeHere(somebody_present) warning = self.getPossibleWarning() if warning == self.last_warning: self.count_same_warning+=1 @@ -444,7 +449,6 @@ class StatusTracker: #(threading.Thread): logging.debug("checkPresenceStateChangeAndNotify: warning: " + str(warning)) if not self.status_change_handler is None: self.status_change_handler(somebody_present=None, door_open=self.door_open, who=self.who_might_be_here, warning=warning) - self.forgetWhoMightBeHere(somebody_present) ############ Connection Listener ############ class ConnectionListener: