Guides

How to add presence detection to every room

How I add reliable presence detection to every room of a local-first Home Assistant house: mmWave and PIR sensors by room type, network tracking for who's home, and why I skip Bluetooth trackers.

On this page
  1. Motion vs presence
  2. Sensor types and tradeoffs
  3. Choosing sensors by room type
  4. Who is home: network-based detection
  5. Combining signals for reliability
  6. Wiring PIR and mmWave into one occupancy sensor
  7. Practical notes

Presence detection is where most of my automations get their trigger, and it takes more than a motion sensor in each room. Room presence tells the system that a person is in the space rather than that something moved past; whole-house presence tells it who is home. This guide covers both, room by room, with local control, and it does it without Bluetooth trackers. AirTags, Tile and the like have real drawbacks for whole-home presence: they drain battery, require people to carry them, and add another device to manage. You can build reliable presence detection from devices you likely already own plus a few sensors.

For most rooms, the Aqara FP2 is the best balance of capability and local control; pair it with the Aqara Door Window Sensor P2 for door-based confirmation and you have presence detection that runs on your own hardware once it is set up. If you’d rather keep mmWave off Wi-Fi altogether, the Zigbee Aqara FP1E is the more local-first Aqara pick, and the one I run. If budget is tight, use the Aqara Motion Sensor P2 with occupancy delays; it won’t match mmWave reliability, but it works for basic automation. For who-is-home, network detection through your router or UniFi controller is the best starting point: free if your hardware is supported, no extra hardware, whole-house coverage. Bluetooth trackers are overkill for most households and add maintenance you don’t need.

Motion vs presence

The difference between motion detection and presence detection is the difference between a light that turns off when you’re still and one that stays on while you read in bed. Basic motion sensors only trigger on movement, so they fail in exactly the situations where you need them most - sitting still, sleeping, or working at a desk.

Room presence detection keeps your automations running without manual overrides. You can auto-off lights when everyone leaves a room, maintain climate control while someone’s home, or trigger ventilation based on occupancy rather than arbitrary schedules. For a deeper walkthrough of wiring presence into every light, see how to add occupancy-aware lighting to every room.

Sensor types and tradeoffs

Different sensor technologies give you different capabilities, and each has real limitations worth understanding.

PIR (Passive Infrared) motion sensors are the cheapest option and work well for basic occupancy. The Philips Hue motion sensor is reliable if you already have Hue; it’s Zigbee, battery-efficient, and integrates with both Home Assistant and HomeKit. It pairs to the Philips Hue Bridge for the snappiest response (about a 10-second no-motion cooldown), but it is a standard Zigbee 3.0 sensor, so it also joins ZHA or Zigbee2MQTT directly with no bridge - where the firmware default cooldown is closer to 5 minutes. (The Hue Bridge is Zigbee-only - it has no Z-Wave radio.) The Aqara Motion Sensor P2 uses Matter over Thread, works locally with Home Assistant, and integrates cleanly without any cloud dependencies. Frient Zigbee sensors such as the Motion Sensor Pro and Entry Sensor work with Home Assistant directly and can also feed Hubitat setups.

Millimeter-wave (mmWave) sensors detect micro-movements like breathing, making them far better for presence detection. The Aqara FP2 is the standout option here - it detects presence even when completely still, supports multiple detection zones per room, and runs locally. Note that the FP2 is a Wi-Fi device, not Zigbee or Thread: it will not join your Zigbee mesh, and it needs a one-time setup pass in the Aqara app before Home Assistant can adopt it locally. The Aqara FP1E is the Zigbee alternative; it detects micro-movements even when someone sits still, so a room stays “occupied” instead of flipping to empty. The Everything Presence One is purpose-built for Home Assistant with excellent community integration, and two more ESPHome presence sensors from the catalog are the Apollo MSR-2 and the Apollo MTR-1 Multi-Target Radar. These sensors do cost more than PIR alternatives, but the reliability gains are substantial if you want automation that behaves. If mmWave is the route you want, compare the best mmWave presence sensors for Home Assistant.

Door and window sensors are a simpler approach - install them on interior doors and you can infer room occupancy based on which doors are open. The Aqara Door Window Sensor P2 is Matter-compatible and reliable. This works best as a complement to motion sensors rather than a standalone solution, since you can’t tell if someone’s still in a room with the door closed.

Smart thermostats with room sensors can contribute occupancy data, though they are primarily climate devices. The Ecobee Premium ships with a remote SmartSensor that detects motion and reports occupancy, useful as an extra input. Be clear about what that costs you, though, because it is a cloud thermostat: Home Assistant’s ecobee integration is cloud polling and ecobee publishes no local HTTP API, so by that route the occupancy signal stops when your internet does. The Google Nest Thermostat is not an option for this at all: Google’s Nest Temperature Sensors report temperature only, they do not work with the budget 2020 Nest Thermostat in the first place (they need a Nest Learning Thermostat or a Thermostat E), and Home Assistant’s Nest integration exposes no occupancy or motion entity for a thermostat. The ecobee does have a local path: the thermostat speaks HomeKit, so pairing it to Home Assistant through the HomeKit Controller integration keeps the sensor readings on your LAN. That uses the single HomeKit controller slot on the thermostat, so it is a choice between Home Assistant and Apple Home rather than both. Ecobee occupancy is also slow, often tens of minutes to register that a room has emptied, and it can’t distinguish household members.

Motion and presence sensors are room-level, not person-level. You know someone is in the house, not specifically who. For per-person detection, combine sensors with the network tracking covered below.

Choosing sensors by room type

For bedrooms and offices where people sit still, mmWave is essential. PIR sensors will constantly time out and leave you in the dark. The Aqara FP1E is the cheaper single-area option and still handles static presence well. It is not a cut-down FP2, though: the FP1E is a plain Zigbee sensor, the globally available successor to the China-only FP1, and it pairs to any Zigbee coordinator through ZHA or Zigbee2MQTT with no Aqara hub. It does room-level presence without the FP2’s multi-zone tracking.

For bathrooms and kitchens, PIR is usually sufficient since people are typically moving in these spaces. The Eve Motion works well with Home Assistant via Thread, or you can wire a Shelly relay (Shelly Plus 1, now discontinued, or the current Shelly 1 Gen4) to a basic PIR for a budget approach.

For living areas where you might be watching TV or reading, mmWave again proves worthwhile. The Everything Presence Lite suits this well, and it is not simply a cut-down Presence One: it drops the One’s PIR and its temperature and humidity sensors, but its LD2450 radar tracks up to three people at once and supports detection zones configured from Home Assistant, which the One does not do at all.

For garages, basements, or utility rooms, door sensors plus basic motion is usually enough. These spaces have lower automation needs and simpler detection requirements.

Who is home: network-based detection

The most practical approach to whole-house presence for most people is tracking devices on your Wi-Fi network - phones, watches, laptops - through your router or access points.

For Home Assistant, several router integrations create device_tracker entities. ASUS routers (AsusWRT), many TP-Link models, and others are supported; check Home Assistant’s integration list for your specific hardware before buying anything. If you run Ubiquiti UniFi, the UniFi Network integration is the one that does device tracking - it creates device_tracker entities for connected clients and updates in near real time. (UniFi Protect is the camera/NVR side, not presence detection.) There’s also the simple built-in Ping integration if you just want to check whether a known IP responds. For a deeper walkthrough of this method, see network presence detection in Home Assistant.

Tradeoffs worth understanding: network detection misses people who disable Wi-Fi or are on cellular only. It can be slow to mark someone away - the UniFi integration defaults to about 300 seconds since “last seen” before considering a client gone - and a phone that sleeps its radio can briefly drop off. Tuning the away timeout helps.

For multi-person households, network detection can identify individual devices by client/MAC, which is the most practical route to per-person presence. Motion sensors alone can’t tell people apart, so many households accept “someone is home” automations except where per-person triggers are needed.

Combining signals for reliability

No single method is perfect, and the local smart home community has settled on combining signals. A practical recipe: use network detection as your primary home/away signal, add motion/presence sensors in key rooms (entryway, living room) to catch arrivals and confirm occupancy, and use thermostat occupancy as a fallback. Home Assistant’s Bayesian sensor can blend these probability-weighted inputs into one occupancy state.

Wiring PIR and mmWave into one occupancy sensor

Inside a single room the pattern is simpler than Bayesian: PIR turns the lights on fast, and mmWave keeps them on until the room is empty. PIR sees the heat of a moving body, so it fires the instant someone walks in, but a still person eventually reads as nobody. mmWave measures reflected radio, so it sees breathing and keeps the room “occupied” while you sit at a desk, at the cost of being a touch slower and needing tuning. The Everything Presence One puts both in one ESPHome device; for the PIR half of a two-device setup, the Zigbee Aqara Motion Sensor P1 I run pairs with any coordinator - but it is not the part to build the fast half on. I rate it 3/5 because it is slow to report: regularly 5 to 10 seconds before the update reaches Home Assistant, which is long enough to get down a hallway before the lights catch up.

Derive one occupancy state from both signals rather than automating off the raw PIR. A template binary sensor reads occupied if either sensor is active, with delay_off as a grace period so the room does not flip to empty the moment the radar drops out:

template:
  - binary_sensor:
      - name: "Office Occupancy"
        device_class: occupancy
        state: >
          {{ is_state('binary_sensor.office_pir', 'on')
             or is_state('binary_sensor.office_mmwave', 'on') }}
        delay_off:
          minutes: 2

Then drive the lights from that helper: on when it turns on, off when it turns off.

automation:
  - alias: Office lights follow occupancy
    triggers:
      - trigger: state
        entity_id: binary_sensor.office_occupancy
        to: "on"
    actions:
      - action: light.turn_on
        target:
          entity_id: light.office

  - alias: Office lights off when empty
    triggers:
      - trigger: state
        entity_id: binary_sensor.office_occupancy
        to: "off"
    actions:
      - action: light.turn_off
        target:
          entity_id: light.office

Last, tune the radar. mmWave sensors expose a maximum detection distance and a sensitivity setting; pull the distance in so the sensor does not see through the wall into the hallway, and back off the sensitivity if a fan or a curtain keeps the room occupied. The Everything Presence One exposes both as adjustable entities in Home Assistant.

Practical notes

Whatever sensors you choose, a few practical notes will save you headaches:

Use occupancy holds. Set a delay before declaring a room empty - 10 minutes is a good starting point. This prevents lights from cutting out when you sit still to check your phone.

Combine sensor types for better reliability. Use motion as the trigger, then mmWave or door sensors to confirm presence. The Everything Presence One does this inside one device, pairing an mmWave radar with a PIR sensor so an automation can require both. The FP2 is radar-only, so give it a separate PIR or door sensor if you want that second signal.

Mind the installation angle. mmWave sensors need proper placement - ceiling mount typically works best, and they can struggle around air vents or fans that cause false positives.

Consider power options. Most mmWave sensors need constant power - the Aqara FP2, for instance, runs on USB-C with no battery option at all - while battery-powered PIR sensors are easier to place but require occasional battery changes.

Don’t try to solve every room the same way. Bedrooms need mmWave. Hallways might only need a door sensor. Utility rooms might not need presence at all. Build sensor coverage to match your automation needs, not an idealized perfect system.

Keep going

All articles →
Article

Networking and presence detection in Home Assistant

How router and Wi-Fi based presence detection works in Home Assistant, the device_tracker options that actually hold up, and how to combine network presence.

Read article →
Article

Best mmWave presence sensors for Home Assistant

The mmWave presence sensors worth buying for Home Assistant: why they beat PIR, my picks with prices, placement gotchas, and HomeKit/Hubitat notes.

Read article →
Article

Best local presence sensors for Home Assistant and local-first homes

Everything Presence Lite first for a Home Assistant house: local mmWave, no cloud account. Plus Apollo MSR-2, Aqara FP1E and FP2, and wired picks room by room.

Read article →
New guides and product notes, no inbox required. Follow via RSS →