X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=go%2Fr3-eventbroker_zmq%2Fpresence.go;h=be7b12f518d29758ee75ecac3346068755518139;hb=ff98cdc53bc87b9d4f3215df248c188a84cb2fb1;hp=953af110a6dc5451f77be5e7660eca186bad601f;hpb=03f11406495d2de6340f0331f91ebfd25fbe67ed;p=svn42.git diff --git a/go/r3-eventbroker_zmq/presence.go b/go/r3-eventbroker_zmq/presence.go index 953af11..be7b12f 100644 --- a/go/r3-eventbroker_zmq/presence.go +++ b/go/r3-eventbroker_zmq/presence.go @@ -6,13 +6,10 @@ import ( "time" //~ "./brain" pubsub "github.com/tuxychandru/pubsub" + "./r3events" + //~ "log" ) -type PresenceUpdate struct { - Present bool - Ts int64 -} - type doorstate struct { locked bool shut bool @@ -22,38 +19,40 @@ func MetaEventRoutine_Presence(ps *pubsub.PubSub) { //~ 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") - + 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) { - case SomethingReallyIsMoving: + case r3events.SomethingReallyIsMoving: if evnt.Movement { last_movement = evnt.Ts } else { last_movement = 0 } - case ButtonPressUpdate: + case r3events.ButtonPressUpdate: last_buttonpress = evnt.Ts new_presence = true //~ case DoorCommandEvent: //~ last_door_cmd = &evnt - case DoorLockUpdate: + case r3events.DoorLockUpdate: doorstatemap[evnt.DoorID]=doorstate{locked:evnt.Locked, shut:doorstatemap[evnt.DoorID].shut} - case DoorAjarUpdate: + case r3events.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 { @@ -63,10 +62,10 @@ 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(PresenceUpdate{new_presence, ts} , "presence") + ps.Pub(r3events.PresenceUpdate{new_presence, ts} , "presence") } } } \ No newline at end of file