-func MetaEventRoutine_Presence(ps *pubsub.PubSub) {
- //~ var last_door_cmd *DoorCommandEvent
+func MetaEventRoutine_Presence(ps *pubsub.PubSub, movement_timeout, button_timeout int64) {
+ var last_door_cmd *r3events.DoorCommandEvent
var front_locked, front_shut, back_shut bool = true, true, true
events_chan := ps.Sub("door", "doorcmd", "buttons", "movement")
defer ps.Unsub(events_chan, "door", "doorcmd", "buttons", "movement")
for event := range(events_chan) {
var front_locked, front_shut, back_shut bool = true, true, true
events_chan := ps.Sub("door", "doorcmd", "buttons", "movement")
defer ps.Unsub(events_chan, "door", "doorcmd", "buttons", "movement")
for event := range(events_chan) {
- //~ Debug_.Printf("Presence: %s - %s", event, doorstatemap)
+ Debug_.Printf("Presence prior: %t : %T %+v", last_presence, event, event)
new_presence := last_presence
ts := time.Now().Unix()
switch evnt := event.(type) {
case r3events.SomethingReallyIsMoving:
if evnt.Movement {
new_presence := last_presence
ts := time.Now().Unix()
switch evnt := event.(type) {
case r3events.SomethingReallyIsMoving:
if evnt.Movement {
any_door_ajar := ! (front_shut && back_shut)
if new_presence != last_presence {
//... skip state check .. we had a definite presence event
} else if any_door_unlocked || any_door_ajar {
new_presence = true
any_door_ajar := ! (front_shut && back_shut)
if new_presence != last_presence {
//... skip state check .. we had a definite presence event
} else if any_door_unlocked || any_door_ajar {
new_presence = true