Knowing whether a room is occupied is the foundation of every interesting building automation: HVAC setbacks, lighting control, energy demand prediction, after-hours security. The default modern solution is a small camera with on-device AI. It works well technically.
We don't ship it.
Camera-based occupancy creates a privacy posture we don't want to defend. Every deployment becomes a conversation about data residency for video frames, retention policies, who can review footage, what happens during a subpoena, whether the "on-device AI" model is actually doing what the vendor claims. Even when all those answers are reasonable, the camera in the room is the wrong starting signal for a calm operating system.
What we use instead
Cynact's presence detection is a multi-signal fusion of three inputs, none of which can identify a person:
1. mmWave radar (24 GHz / 60 GHz)
Small ceiling-mounted radar modules detect both presence and micro-motion (breathing, typing, fidgeting). They work in the dark, through pillow covers, and with the occupant completely still. Resolution is "person-sized object exists" — not who, not what they're doing, not where on a frame.
2. BLE (Bluetooth Low Energy) signal density
Not BLE tracking. We don't store MACs, and Apple/Google's privacy MAC rotation means we couldn't reliably even if we wanted to. What we do is count the rough density of nearby BLE devices and how that density changes over time. A room going from 3 devices to 11 devices in 5 minutes is a meeting starting. Going to 0 is everyone leaving.
3. Environmental signals
CO₂, temperature delta from setpoint, light level, sound RMS (not audio recording — just amplitude). These don't tell you anything alone, but they correct false positives and false negatives in the radar and BLE channels.
The fusion model
We do mid-fusion: each signal produces a probability of occupancy that's adjusted by recent history, then they're combined with weights tuned per room class (private office, open meeting room, residential bedroom, gym studio). The output is a per-room occupancy probability that decays with a configurable half-life.
The whole pipeline runs locally on the Cynact edge node. No raw signals leave the site. Only the derived state — "Conference Room A: occupied, confidence 0.87" — appears in dashboards or DR decisions.
What we trade off
Camera-based occupancy can do things this stack can't: counting people, identifying behavior, mapping where in a room they are. We give all that up.
What we get in return is a system that customers can deploy without a privacy review, security teams don't flag, and HOA/facility committees actually approve. For 95% of automation use cases, "is the room occupied" is the only signal the automation needed in the first place.
Where we'd reconsider
Two cases where we'd integrate camera input: (1) a customer that explicitly wants it for security purposes and has already accepted the privacy trade-off, and (2) classes of automation that genuinely need person count or location — large auditoriums, queue management, retail floor optimization. In both cases, the customer's existing security camera stack stays its own product; we just consume derived occupancy counts via API.
The sensor side runs on Apollo Automation modules — US-assembled, open-firmware, easy to commission. Reach out if you want to dig into a specific deployment scenario — info@routbox.com.