- for event := range(events_chan) {
- Debug_.Printf("Presence prior: %t : %T %+v", last_presence, event, event)
- new_presence := last_presence
- ts := time.Now().Unix()
- switch evnt := event.(type) {
- case r3events.SomethingReallyIsMoving:
- if evnt.Movement {
- //ignore movements that happened just after locking door
- if (evnt.Ts - last_event_indicating_presence) > movement_timeout {
- new_presence = true
- }
- last_event_indicating_presence = evnt.Ts
- } else {
- if last_presence { Syslog_.Printf("Presence: Mhh, SomethingReallyIsMoving{%+v} received but presence still true. Quite still a bunch we have here.", evnt) }
- if front_locked && front_shut && back_shut && evnt.Confidence >= 90 && last_event_indicating_presence > 1800 && (last_door_cmd == nil || (last_door_cmd.Using != "Button" && last_door_cmd.Ts >= last_manual_lockhandling )){
- new_presence = false
- }
- }
- case r3events.BoreDoomButtonPressEvent:
- new_presence = true
- last_event_indicating_presence = evnt.Ts
- case r3events.DoorCommandEvent:
- last_door_cmd = &evnt
- case r3events.DoorManualMovementEvent:
- last_manual_lockhandling = evnt.Ts
- last_event_indicating_presence = evnt.Ts
- case r3events.DoorLockUpdate:
- front_locked = evnt.Locked
- last_frontlock_use = evnt.Ts
- last_event_indicating_presence = evnt.Ts
- case r3events.DoorAjarUpdate:
- if front_shut == false && evnt.Shut && front_locked && evnt.Ts - last_frontlock_use > 2 {
- Syslog_.Print("Presence: ignoring frontdoor ajar event, since obviously someone is fooling around with the microswitch while the door is still open")
- } else {
- front_shut = evnt.Shut
- }
- last_event_indicating_presence = evnt.Ts
- case r3events.BackdoorAjarUpdate:
- back_shut = evnt.Shut
- last_event_indicating_presence = evnt.Ts
- }
+ for event := range events_chan {
+ Debug_.Printf("Presence prior: %t : %T %+v", last_presence, event, event)
+ new_presence := last_presence
+ ts := time.Now().Unix()
+ evnt_type := r3events.NameOfStruct(event)
+ switch evnt := event.(type) {
+ case r3events.SomethingReallyIsMoving:
+ if evnt.Movement {
+ //ignore movements that happened just after locking door
+ if (evnt.Ts - last_event_indicating_presence) > movement_timeout {
+ new_presence = true
+ }
+ last_event_indicating_presence = evnt.Ts
+ } else {
+ if last_presence {
+ Syslog_.Printf("Presence: Mhh, SomethingReallyIsMoving{%+v} received but presence still true. Quite still a bunch we have here.", evnt)
+ }
+ if front_locked && front_shut && back_shut && evnt.Confidence >= 90 && last_event_indicating_presence > 1800 && (last_door_cmd == nil || (last_door_cmd.Using != "Button" && last_door_cmd.Ts >= last_manual_lockhandling)) {
+ new_presence = false
+ }
+ }
+ case r3events.BoreDoomButtonPressEvent:
+ new_presence = true
+ last_event_indicating_presence = evnt.Ts
+ case r3events.DoorCommandEvent:
+ last_door_cmd = &evnt
+ case r3events.DoorManualMovementEvent:
+ last_manual_lockhandling = evnt.Ts
+ last_event_indicating_presence = evnt.Ts
+ case r3events.DoorLockUpdate:
+ front_locked = evnt.Locked
+ last_frontlock_use = evnt.Ts
+ last_event_indicating_presence = evnt.Ts
+ case r3events.DoorAjarUpdate:
+ if front_shut == false && evnt.Shut && front_locked && evnt.Ts-last_frontlock_use > 2 {
+ Syslog_.Print("Presence: ignoring frontdoor ajar event, since obviously someone is fooling around with the microswitch while the door is still open")
+ } else {
+ front_shut = evnt.Shut
+ }
+ last_event_indicating_presence = evnt.Ts
+ case r3events.BackdoorAjarUpdate:
+ back_shut = evnt.Shut
+ last_event_indicating_presence = evnt.Ts
+ }