shrug
[svn42.git] / go / r3-eventbroker_zmq / presence.go
index 3677b27..94f48d7 100644 (file)
@@ -12,7 +12,7 @@ import (
 func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeout int64) {
     var last_door_cmd *r3events.DoorCommandEvent
     var last_presence bool
-    var last_event_indicating_presence, last_frontlock_use int64
+    var last_event_indicating_presence, last_frontlock_use, last_manual_lockhandling int64
     var front_locked, front_shut, back_shut bool = true, true, true
 
     events_chan := ps.Sub("door", "doorcmd", "buttons", "movement")
@@ -32,7 +32,7 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeo
                     last_event_indicating_presence = evnt.Ts
                 } else {
                     if last_presence { Syslog_.Printf("Presence: Mhh, SomethingReallyIsMoving{%+v} received but presence still true. Quite still a bunch we have here.", evnt) }
-                    if front_locked && front_shut && back_shut && evnt.Confidence >= 20 && last_event_indicating_presence > 1800 {
+                    if front_locked && front_shut && back_shut && evnt.Confidence >= 90 && last_event_indicating_presence > 1800 {
                         new_presence = false
                     }
                 }
@@ -41,6 +41,9 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeo
                 last_event_indicating_presence = evnt.Ts
             case r3events.DoorCommandEvent:
                 last_door_cmd = &evnt
+            case r3events.DoorManualMovementEvent:
+                last_manual_lockhandling = evnt.Ts
+                last_event_indicating_presence = evnt.Ts
             case r3events.DoorLockUpdate:
                 front_locked = evnt.Locked
                 last_frontlock_use = evnt.Ts
@@ -64,7 +67,7 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeo
             //... skip state check .. we had a definite presence event
         } else if any_door_unlocked || any_door_ajar {
             new_presence = true
-        } else if last_door_cmd.Using == "Button" {
+        } else if last_door_cmd != nil && (last_door_cmd.Using == "Button"  || last_door_cmd.Ts < last_manual_lockhandling) {
             new_presence = true
         } else {
             new_presence = false