//~ var last_door_cmd *DoorCommandEvent
var last_presence bool
var last_movement, last_buttonpress int64
- doorstatemap := make(map[byte]doorstate,1)
+ doorstatemap := make(map[int]doorstate,1)
events_chan := ps.Sub("door", "doorcmd", "buttons", "movement")
-
+
for event := range(events_chan) {
new_presence := last_presence
ts := time.Now().Unix()
case DoorAjarUpdate:
doorstatemap[evnt.DoorID]=doorstate{locked:doorstatemap[evnt.DoorID].locked, shut:evnt.Shut}
}
-
+
any_door_unlocked := false
any_door_ajar := false
for _, ds := range(doorstatemap) {
if ds.locked == false {any_door_unlocked = true }
if ds.shut == false {any_door_ajar = true }
}
-
+
if new_presence != last_presence {
//... skip state check .. we had a definite presence event
} else if any_door_unlocked || any_door_ajar {
} else {
new_presence = false
}
-
+
if new_presence != last_presence {
last_presence = new_presence
ps.Pub(PresenceUpdate{new_presence, ts} , "presence")