Presence sensing automation without cameras works best when you stop asking one device to know everything. A camera can see a room, but most lighting, HVAC, and media automations only need four smaller answers: is someone still here, who is probably here, did someone just enter or leave, and is an appliance giving useful context?
That distinction matters because indoor cameras carry social overhead before the first automation even fires. In the 2026 Forbes/Copeland Smart Home Data Privacy Report, 70% of respondents said they would switch brands for better privacy, and 55% said they do not understand how their devices collect data.[1] You do not need to turn that into a manifesto to see the practical problem: a motion sensor mounted above a doorway is a setup detail; a camera in a living room is a household negotiation.

The camera-free sensor map
Use mmWave radar as the room-presence anchor, Bluetooth Low Energy as the identity hint, PIR or door contacts as transition signals, and smart plugs or router presence as supporting context. That mix sounds more complicated than a camera until the first time someone reads motionless on a sofa and the lights stay on without recording video.
| Layer | Best at | Weak at | Typical automation job |
|---|---|---|---|
| mmWave radar | Holding presence for still occupants | Knowing who the person is; avoiding false zones without tuning | Keep lights, HVAC, or media modes active while someone remains in a room |
| Bluetooth room presence | Estimating which person, phone, or watch is nearby | Detecting still bodies without a beacon; clean room boundaries in dense layouts | Personalize scenes, desk setups, comfort modes, or notifications |
| PIR or door sensors | Fast entry, exit, and short hallway transitions | Still occupants | Start timers, wake lights quickly, confirm bathroom or closet use |
| Smart plugs and router presence | Appliance or home/away context | Primary room occupancy | Add confidence when a TV, kettle, heater, or computer is actually being used |
The wired mmWave anchors worth knowing are the Aqara FP2 and Everything Presence Lite. The Aqara FP2 uses 60–64 GHz radar, supports up to 40 m² and 30 zones, and is described as offline-capable after firmware 1.1.6; its early-2026 street price was around $83.[2][3] Everything Presence Lite uses a 24 GHz LD2450 radar module, has a reported 5–6 m range, can track three people, is fully local through ESPHome, and was around $45 in the same early-2026 pricing window.[3]
Those numbers are useful for planning, not for pretending a spec sheet can see through furniture. mmWave placement changes the result. A sensor staring across a room may see sofa breathing and ceiling-fan noise differently from one mounted near a doorway. A zone that looks perfect in an empty calibration pass can become messy when a partner adds a floor lamp or a dog bed.
For identity, ESPresence and Bermuda use ESP32 listeners to estimate room-level location from BLE signal strength emitted by devices such as phones or watches. They stay camera-free and cloud-free in typical Home Assistant deployments, and they can drive per-person automations, but BLE does not solve the seated-person problem by itself because it is not sensing micro-movement from a body.[4][5]
A base Home Assistant pattern before room tuning
Most rooms become easier to reason about if you split detection into three helpers: occupied, recently active, and known person nearby. The first should come from mmWave when possible. The second can come from PIR, a door contact, or a short timer. The third can come from BLE. Then automations subscribe to the helper instead of every raw sensor.
template:
- binary_sensor:
- name: "Living Room Occupied Layered"
unique_id: living_room_occupied_layered
state: >
{{ is_state('binary_sensor.living_room_mmwave_presence', 'on')
or is_state('binary_sensor.living_room_recent_motion', 'on')
or is_state('binary_sensor.tv_energy_active', 'on') }}
delay_off:
minutes: 5That is deliberately boring YAML. It gives you one stable entity to test, graph, and override. If the room misbehaves, you can look at the raw mmWave, PIR, and smart plug entities separately instead of rewriting the lighting automation every evening.
Living room: wired mmWave earns its outlet

The living room is where PIR-only automations usually embarrass themselves. Someone watches a film, stops moving, and the lights decide the room is empty. This is the room where a wired mmWave sensor is least optional if you want camera-free presence to feel finished.
Start with a wired mmWave sensor facing the seating area rather than the whole room. If you use an Aqara FP2, its zone support lets you separate sofa, media console, doorway, and maybe a reading chair; the FP2’s published capabilities include up to 30 zones across up to 40 m².[2] If you prefer a local ESPHome path, Everything Presence Lite is attractive because it exposes radar data locally and avoids a cloud dependency, but it expects more tinkering comfort than a retail puck.[3]
| Living-room choice | Use it when | Watch for |
|---|---|---|
| Aqara FP2 | You want zones for sofa, TV area, or doorway logic | Zone calibration, placement drift, firmware behavior |
| Everything Presence Lite | You want ESPHome and local radar entities | DIY expectations, enclosure and mounting decisions |
| BLE listener | You want person-specific scenes or media preferences | Phone/watch signal overlap with adjacent rooms |
| TV smart plug | You want media context without integrating the TV directly | Standby power thresholds that change by model |
A good living-room recipe does not turn lights on simply because the TV is drawing power. It uses TV power as a modifier. If mmWave says someone is on the sofa and the TV plug crosses your tested active threshold, shift to a media scene. If mmWave says the room is empty, the TV plug should not keep the whole space alive forever; it might only delay shutoff or send a notification that something was left on.
alias: Living room - media presence scene
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.living_room_occupied_layered
to: "on"
- platform: state
entity_id: binary_sensor.tv_energy_active
to: "on"
condition:
- condition: state
entity_id: binary_sensor.living_room_mmwave_presence
state: "on"
action:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.tv_energy_active
state: "on"
sequence:
- service: scene.turn_on
target:
entity_id: scene.living_room_movie
default:
- service: light.turn_on
target:
entity_id: light.living_room_lamps
data:
brightness_pct: 55For multi-occupant homes, resist the temptation to make BLE the only decider. BLE can help choose whose lamp scene or thermostat preference wins, but mmWave should keep the room occupied when everyone’s phone is charging elsewhere. ESPresence and Bermuda are better treated as identity layers than body sensors.[4][5]
Bedroom: presence has to respect sleep
Bedrooms punish aggressive automations. A sensor that is wonderful in a living room can become annoying beside a bed if it sees through the wrong doorway, wakes lights during sleep, or needs a USB cable in the one place nobody wants another visible cable.
If an outlet and clean mounting angle exist, wired mmWave still gives the best stationary hold. If not, battery mmWave or PIR/mmWave hybrids become more reasonable. The Aqara FP300 combines 60 GHz mmWave with PIR, uses Zigbee and Thread, and has a manufacturer battery-life claim of three years on CR2450 cells; early-2026 pricing was around $40.[3][6] The SwitchBot Presence Sensor also combines 60 GHz mmWave and PIR, has a manufacturer battery-life claim of two years on AAA batteries, and was around $25 in the cited comparison period.[3][6]
Battery-life claims should be treated as planning hints, not promises. Update frequency, signal conditions, and network routing can change the experience. In a bedroom, the more important question is whether the device can reliably hold occupied while someone is asleep without making every blanket adjustment look like a reason to blast ceiling lights.
- Use bed-zone mmWave for sleep-aware climate or fan logic, not for bright wake lighting.
- Use BLE only for personalization, such as deciding which bedside lamp or comfort profile applies.
- Use a door contact or PIR to detect entry quickly, then let mmWave decide whether the room remains occupied.
- Keep a manual override near the bed. Presence automation feels clever until someone is sick, reading late, or trying not to wake another person.
alias: Bedroom - gentle occupied lighting
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.bedroom_door_motion_recent
to: "on"
condition:
- condition: state
entity_id: input_boolean.sleep_mode
state: "off"
action:
- wait_template: "{{ is_state('binary_sensor.bedroom_mmwave_presence', 'on') }}"
timeout: "00:00:10"
continue_on_timeout: false
- service: light.turn_on
target:
entity_id: light.bedside_lamps
data:
brightness_pct: 25The wait is doing useful work here. The door or PIR signal wakes the automation quickly, but the room does not fully commit until mmWave confirms someone stayed. That avoids a hallway pass-by turning the bedroom into a stage.
Bathroom: humidity, privacy, and short occupancy windows
Bathrooms are the easiest rooms to justify camera-free design and the hardest rooms to wire neatly. People sit still. Steam happens. Doors close. Outlets may be badly placed or unavailable. A ceiling PIR alone will eventually fail someone in the shower or on the toilet.
A practical bathroom setup starts with a door contact and either a humidity-tolerant presence sensor or a conservative PIR/mmWave hybrid. The Meross MS605 is described as IP67-rated, around $50, and carrying a three-year battery-life claim in the cited material, making it relevant where moisture and wiring are the constraints.[7] Low-cost PIR plus mmWave combinations can also work, but the placement matters more than the shopping list.
- Place the sensor so it sees the occupied zones, not the hallway through a cracked door.
- Use the door closing as a confidence boost, not as permanent proof that someone is inside.
- Use humidity rise for fan logic, not as a substitute for presence.
- Give lights a longer off-delay than a hallway, because bathroom stillness is normal.
alias: Bathroom - presence and fan logic
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.bathroom_presence
to: "on"
- platform: numeric_state
entity_id: sensor.bathroom_humidity
above: 65
action:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.bathroom_presence
state: "on"
sequence:
- service: light.turn_on
target:
entity_id: light.bathroom
- conditions:
- condition: numeric_state
entity_id: sensor.bathroom_humidity
above: 65
sequence:
- service: fan.turn_on
target:
entity_id: fan.bathroom_exhaustTreat the humidity threshold in that example as a placeholder. Your baseline humidity, fan strength, and sensor placement decide the real value. The important separation is that the fan can react to moisture while the lights react to presence.
Kitchen: appliance clues help, but they do not prove presence
Kitchens tempt people into overfitting. A coffee machine turns on, so someone must be present. The dishwasher runs, so the kitchen is occupied. A kettle spikes, so start the morning scene. Sometimes that is correct. Often it is just an appliance doing appliance things.
Smart plug energy monitoring from devices such as TP-Link Kasa or Shelly PM can add appliance-level clues, and router presence can help with broader home/away state, but both are adjunct cues rather than primary room sensors.[4][5] In a kitchen, that distinction keeps automations from turning into folklore.
Use mmWave or PIR/mmWave to decide whether someone is in the kitchen. Use energy monitoring to decide what kind of kitchen activity is happening. A coffee-machine draw might trigger under-cabinet lights in the morning if presence is already true. A stove-adjacent smart plug might extend the occupied timeout while cooking, assuming the appliance is safe and appropriate to monitor. A dishwasher cycle should usually inform notifications or energy dashboards, not human presence.
alias: Kitchen - appliance-assisted lighting
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.kitchen_presence
to: "on"
- platform: state
entity_id: binary_sensor.coffee_machine_active
to: "on"
condition:
- condition: state
entity_id: binary_sensor.kitchen_presence
state: "on"
action:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.coffee_machine_active
state: "on"
- condition: time
after: "05:30:00"
before: "10:30:00"
sequence:
- service: light.turn_on
target:
entity_id: light.kitchen_counter
data:
brightness_pct: 45
default:
- service: light.turn_on
target:
entity_id: light.kitchen_ceiling
data:
brightness_pct: 70The kitchen also benefits from shorter off-delays than a living room and longer ones than a hallway. People step away while cooking. They also pass through with groceries. The sensor mix should make that ambiguity visible rather than hiding it inside a single motion entity.
Hallways, closets, and transition spaces
Hallways do not need identity, zones, or philosophical purity. They need speed. A PIR sensor is often fine because the automation goal is brief: turn on a path light, then turn it off. If you want a cheap powered mmWave option, the Sonoff SNZB-06P was cited around $15 in the 2026 room-recipe material, but this is exactly the kind of price to check at purchase time.[3]
Closets are similar unless someone regularly stands still inside one. A door contact can be better than a presence sensor: door opens, light turns on; door closes, light turns off after a short grace period. Battery mmWave only becomes worth it when the closet behaves more like a small room.
alias: Hallway - fast path light
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.hallway_motion
to: "on"
action:
- service: light.turn_on
target:
entity_id: light.hallway
data:
brightness_pct: 35
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.hallway_motion
to: "off"
for: "00:01:00"
- service: light.turn_off
target:
entity_id: light.hallwayWhere zero-hardware presence fits
Wi-Fi router presence through Home Assistant device trackers is useful for home and away state. It is not room presence. It can help prevent the whole house from going into away mode while a phone remains connected, but it cannot tell whether someone is reading in the living room or napping in the bedroom.[4][5]
The same is true for smart plug energy monitoring. It is excellent as a clue: the TV is active, the desk monitor is drawing power, the kettle just boiled. It is weak as a claim about bodies. A room can be occupied with every appliance off, and an appliance can run after the person leaves.
Tuning layered presence without making it endless
Calibration feels less annoying when each room has one pass/fail test. Do not tune a sensor until it is vaguely perfect. Tune it until the room’s actual automation stops failing in the way that matters.
| Room | Test that matters | If it fails |
|---|---|---|
| Living room | Sit still through a show or reading session; lights stay correct | Narrow the mmWave zone, reduce doorway spill, add TV energy as context |
| Bedroom | Enter briefly versus stay in bed; automation reacts differently | Separate entry trigger from sleep or bed-zone presence |
| Bathroom | Door closed and person still; lights do not time out | Increase off-delay, adjust sensor angle, add door state as confidence |
| Kitchen | Appliance runs with and without a person present | Make energy a modifier, not the occupied source |
| Hallway | Walk-through lights feel immediate and shut off soon | Use PIR or shorter timers; avoid overbuilding |
A good layered setup should also expose uncertainty. If BLE says a phone is in the living room but mmWave says empty, the system should not confidently run a personal scene. It might wait, check recent motion, or fall back to a neutral lighting state. The goal is not to make every sensor agree; it is to make disagreement harmless.
Camera-free presence automation becomes reliable when every sensor has a limited job. mmWave holds the room for still people. BLE adds identity when a phone or watch is available. PIR and door contacts catch transitions. Smart plugs and router presence add context. Designed that way, cameras can be left out of room automation entirely without pretending that any one puck can understand a home by itself.
References
- Forbes/Copeland 2026 Smart Home Data Privacy Report, Forbes, May 2026
- LinknLink guide, LinknLink
- SmartHomeScene 2026 roundup, SmartHomeScene, 2026
- XDA Developers' 5-ways article, XDA Developers
- How-To Geek's Home Assistant guide, How-To Geek
- SmartHomeCompared comparison, SmartHomeCompared
- Sensy-One room-by-room sensor data, Sensy-One
Implementation Notes
Share platform-specific tips, report that a recipe no longer works after a platform update, or contribute variations for different device combinations.
Comments
Join the discussion with an anonymous comment.