Presence-hold vs motion-pulse
PIR emits motion pulses. When motion stops, the pulse ends and the automation assumes empty. CSI occupancy and presence detection emit holds: the space remains “occupied” while a still person breathes in it.
Automation platforms should subscribe to hold and clear events, not motion edges, for anything that should persist while a person is present.
Debouncing and hysteresis
Raw CSI flickers at detection boundaries. A person near the edge of coverage, environmental noise, or multipath fading can toggle occupancy rapidly. Production automations need three filtering layers:- Entry debounce — Require N consecutive occupied samples before declaring presence. This prevents false triggers from brief noise.
- Exit hysteresis — Require M consecutive empty samples before clearing. This prevents lights turning off while you pause between keystrokes.
- Minimum hold time — Once occupied, maintain hold for at least T seconds regardless of brief dips.
HVAC and scene design
Occupancy-aware HVAC needs a sustained signal, not a motion trigger. A home office occupied for three hours of focused work should not cycle ventilation off because the occupant stopped typing. Wire occupancy holds to climate zones. Use motion pulses for entry scenes (“arrived home” triggers). Layer activity detection only when you need behavior-responsive scenes, not for basic presence.Integration surface
Wavey emits structured events: occupancy state, motion intensity, and presence confidence. These are suitable for Home Assistant, custom MQTT bridges, or direct API integration. The open-source stack on GitHub documents current event schemas.Occupancy detection
The hold signal source for automation
Getting started
Deployment architecture and first nodes
vs PIR
Why PIR fails for presence holds
