rename PanicButton to BoreDooomButton and eliminate door id
[svn42.git] / go / r3-eventbroker_zmq / presence.go
index aac99f5..c8553e2 100644 (file)
@@ -7,22 +7,20 @@ import (
     //~ "./brain"
     pubsub "github.com/tuxychandru/pubsub"
     "./r3events"
+    //~ "log"
     )
 
-type doorstate struct {
-    locked bool
-    shut bool
-}
-
 func MetaEventRoutine_Presence(ps *pubsub.PubSub) {
     //~ var last_door_cmd *DoorCommandEvent
     var last_presence bool
     var last_movement, last_buttonpress int64
-    doorstatemap := make(map[int]doorstate,1)
+    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) {
+        //~ log.Printf("Presence: %s - %s", event, doorstatemap)
         new_presence := last_presence
         ts := time.Now().Unix()
         switch evnt := event.(type) {
@@ -32,23 +30,21 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub) {
                 } else {
                     last_movement = 0
                 }
-            case r3events.ButtonPressUpdate:
+            case r3events.BoreDoomButtonPressEvent:
                 last_buttonpress = evnt.Ts
                 new_presence = true
             //~ case DoorCommandEvent:
                 //~ last_door_cmd = &evnt
             case r3events.DoorLockUpdate:
-                doorstatemap[evnt.DoorID]=doorstate{locked:evnt.Locked, shut:doorstatemap[evnt.DoorID].shut}
+                front_locked = evnt.Locked
             case r3events.DoorAjarUpdate:
-                doorstatemap[evnt.DoorID]=doorstate{locked:doorstatemap[evnt.DoorID].locked, shut:evnt.Shut}
+                front_shut = evnt.Shut
+            case r3events.BackdoorAjarUpdate:
+                back_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 }
-        }
+        any_door_unlocked := ! front_locked
+        any_door_ajar := ! (front_shut && back_shut)
 
         if new_presence != last_presence {
             //... skip state check .. we had a definite presence event
@@ -59,7 +55,7 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub) {
         } else {
             new_presence = false
         }
-
+        //~ log.Printf("Presence: new: %s , last:%s", new_presence, last_presence)
         if new_presence != last_presence {
             last_presence = new_presence
             ps.Pub(r3events.PresenceUpdate{new_presence, ts} , "presence")