X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=go%2Fr3-eventbroker_zmq%2Fpresence.go;h=cf58e5d7194064c1cd9627cb334c343b2a628869;hb=d3cd153880388935532949db5c8f4a26731f6964;hp=01087baaf109a3587419a3b509119ef7ebcac74b;hpb=b07f14117f5b11ddce087d6a9177587c9438ca65;p=svn42.git diff --git a/go/r3-eventbroker_zmq/presence.go b/go/r3-eventbroker_zmq/presence.go index 01087ba..cf58e5d 100644 --- a/go/r3-eventbroker_zmq/presence.go +++ b/go/r3-eventbroker_zmq/presence.go @@ -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 }