X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=go%2Fr3-eventbroker_zmq%2Fmetamovement.go;h=7210e6d89c4585e20fca289a1613da934dd80b6c;hb=ff98cdc53bc87b9d4f3215df248c188a84cb2fb1;hp=98d8e8d562fe320776872a0fe14d44b74fb82d0b;hpb=03f11406495d2de6340f0331f91ebfd25fbe67ed;p=svn42.git diff --git a/go/r3-eventbroker_zmq/metamovement.go b/go/r3-eventbroker_zmq/metamovement.go index 98d8e8d..7210e6d 100644 --- a/go/r3-eventbroker_zmq/metamovement.go +++ b/go/r3-eventbroker_zmq/metamovement.go @@ -7,24 +7,21 @@ import ( //~ "./brain" pubsub "github.com/tuxychandru/pubsub" "container/ring" + "./r3events" ) -type SomethingReallyIsMoving struct { - Movement bool - Ts int64 -} - func MetaEventRoutine_Movement(ps *pubsub.PubSub, granularity, gran_duration int , threshold uint32) { var last_movement int64 movement_window := ring.New(granularity+1) events_chan := ps.Sub("movement") + defer ps.Unsub(events_chan, "movement") myticker := time.NewTicker(time.Duration(gran_duration) * time.Second) - + for { select { case event := <- events_chan: switch event.(type) { - case MovementSensorUpdate: + case r3events.MovementSensorUpdate: movement_window.Value = (uint32) (movement_window.Value.(uint32) + 1) } case <- myticker.C: @@ -34,13 +31,13 @@ func MetaEventRoutine_Movement(ps *pubsub.PubSub, granularity, gran_duration int movement_window.Do(func(v interface{}){if v != nil {movsum += v.(uint32)}}) ts := time.Now().Unix() if movsum > threshold { - ps.Pub( SomethingReallyIsMoving{true,ts}, "movement") + ps.Pub( r3events.SomethingReallyIsMoving{true,ts}, "movement") last_movement = ts } - + if last_movement > 0 && ts - last_movement < 3600*6 && ts - last_movement > 3600*3 { last_movement = 0 - ps.Pub( SomethingReallyIsMoving{false, ts}, "movement") + ps.Pub( r3events.SomethingReallyIsMoving{false, ts}, "movement") } } } } \ No newline at end of file