zu schnell commitet
[svn42.git] / go / r3-eventbroker_zmq / presence.go
index 01087ba..cf58e5d 100644 (file)
@@ -10,9 +10,9 @@ import (
     )
 
 func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeout int64) {
-    //~ var last_door_cmd *r3events.DoorCommandEvent
+    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")
@@ -40,7 +40,10 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeo
                 new_presence = true
                 last_event_indicating_presence = evnt.Ts
             case r3events.DoorCommandEvent:
-                //~ last_door_cmd = &evnt
+                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,6 +67,8 @@ 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 != nil && (last_door_cmd.Using == "Button"  || last_door_cmd.Ts < last_manual_lockhandling) {
+            new_presence = true
         } else {
             new_presence = false
         }