X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=track-presence.py;h=f9bdaa4bd36402fece6eb8cfb0ce7ffb70affe9b;hb=d1cb582de8efadfa0ca4a26e872d813f6d5a1571;hp=e3ae886c968aba5d01b05ae7f2aa9c2ffdbb88e8;hpb=6c8941534a7d98c12632481f83e3cd7687edff27;p=svn42.git diff --git a/track-presence.py b/track-presence.py index e3ae886..f9bdaa4 100755 --- a/track-presence.py +++ b/track-presence.py @@ -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: