1 // (c) Bernhard Tittelbach, 2013
8 pubsub "github.com/tuxychandru/pubsub"
10 r3events "svn.spreadspace.org/realraum/go.svn/r3-eventbroker_zmq/r3events"
14 func MetaEventRoutine_Movement(ps *pubsub.PubSub, granularity, gran_duration int , threshold uint32) {
15 var last_movement int64
16 movement_window := ring.New(granularity+1)
17 events_chan := ps.Sub("movement")
18 defer ps.Unsub(events_chan, "movement")
19 myticker := time.NewTicker(time.Duration(gran_duration) * time.Second)
22 case event := <- events_chan:
24 case r3events.MovementSensorUpdate:
25 movement_window.Value = (uint32) (movement_window.Value.(uint32) + 1)
28 movement_window.Prev().Value = (uint32) (0)
29 movement_window = movement_window.Next()
31 movement_window.Do(func(v interface{}){if v != nil {movsum += v.(uint32)}})
32 ts := time.Now().Unix()
33 if movsum > threshold {
34 ps.Pub( r3events.SomethingReallyIsMoving{true,ts}, "movement")
38 if last_movement > 0 && ts - last_movement < 3600*6 && ts - last_movement > 3600*3 {
40 ps.Pub( r3events.SomethingReallyIsMoving{false, ts}, "movement")