best

How to set up presence detection with mmWave and PIR

Learn how to set up presence detection with mmwave and pir sensors in a local-first smart home using Home Assistant, with tips for HomeKit and Hubitat.

On this page
  1. Why combine mmWave and PIR
  2. Choosing the right sensors
  3. Setting up in Home Assistant
  4. Cross-platform notes: HomeKit and Hubitat
  5. Quick verdict

Presence detection is one of the most impactful upgrades you can make to a smart home. It lets you automate lighting, climate, and security based on whether a room is actually occupied. Combining mmWave and PIR sensors gives you reliable, low-latency detection that runs entirely on your local network. This guide walks through setting both up in Home Assistant, with notes for HomeKit and Hubitat users.

Why combine mmWave and PIR

The two sensor types are complementary, which is exactly why good presence sensors include both.

PIR (passive infrared) sensors detect the heat signature of a moving body. They are fast, cheap, and very low power, which makes them ideal for triggering lights on the instant someone enters. Their weakness is that they only see motion, so a still person eventually reads as “no one here,” and they can occasionally be fooled by warm air or sunlight.

mmWave (millimeter-wave radar) sensors emit radio waves and measure reflections, so they detect even tiny movements, including breathing. That means they keep a room marked “occupied” while you sit still on the couch or work at a desk. The trade-off is that they respond a touch slower and need careful tuning to avoid false triggers from fans or moving curtains.

The classic pattern: use PIR to turn lights on fast, and mmWave to keep them on (and turn them off only when the room is truly empty).

Choosing the right sensors

For a local-first setup, you want sensors that run locally and integrate cleanly with Home Assistant. If you’d rather compare a full field of options before deciding, see our best mmWave presence sensors for Home Assistant roundup and the broader best local presence sensors guide; the two picks below are simply the sensors this walkthrough uses.

  • All-in-one (mmWave + PIR), Wi-Fi/ESPHome: The Everything Presence One combines an mmWave radar, an industrial PIR, plus light, temperature, and humidity sensors. It runs ESPHome over Wi-Fi, so it connects directly to Home Assistant with no hub or proprietary cloud. (Its newer sibling, the Everything Presence Lite, adds multi-target, multi-zone tracking if you need per-zone occupancy.)
  • PIR over Zigbee: The Aqara Motion Sensor P1 is a low-power Zigbee PIR sensor. It pairs with any Zigbee coordinator and works well for fast on-triggers. (Note: the newer Aqara Motion Sensor P2 is Matter-over-Thread, not Zigbee.)

A note on protocols, because product marketing often muddies this: the Everything Presence One is a Wi-Fi/ESPHome device, not a Zigbee or Z-Wave device. The Aqara Motion Sensor P1 is Zigbee (its P2 sibling is Matter-over-Thread). And the Aqara Hub M3, if you use one, is a Zigbee + Thread + Matter hub. It does not support Z-Wave. If you want Z-Wave sensors, you need a Z-Wave controller (such as a Z-Wave USB stick), which is a separate radio entirely.

Setting up in Home Assistant

Step 1: Add the sensors

For the ESPHome-based Everything Presence One, flash/adopt it in the ESPHome dashboard, connect it to your Wi-Fi, and it appears in Home Assistant as a set of entities (mmWave occupancy, PIR motion, illuminance, temperature, humidity). No hub required.

For the Zigbee Aqara Motion Sensor P1, you need a Zigbee coordinator. A USB stick like the ConBee III works with ZHA, deCONZ, or Zigbee2MQTT. You don’t edit configuration.yaml for this; you set up the coordinator through the ZHA integration (or your chosen Zigbee stack) in the Home Assistant UI, then put it into pairing mode and press the sensor’s pairing button.

Step 2: Build a combined occupancy helper

The most reliable approach is to derive a single “occupied” state from both sensors. A simple template binary sensor reads occupied if either the PIR or the mmWave sensor is active:

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

The delay_off adds a short grace period so the room doesn’t flip to “empty” the instant the radar drops out.

Step 3: Automate on the combined state

Now drive your lights from the combined occupancy sensor, not the raw PIR. Turn on the moment occupancy goes on, and off only after it has been off (for example, the helper above stays on for 2 minutes after last detection):

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

This gives you the fast on-response of PIR and the “stay on while I’m still” reliability of mmWave.

Step 4: Tune the radar

mmWave sensors usually expose distance and sensitivity settings. Reduce the maximum detection distance so the radar doesn’t see through a wall into the hallway, and dial back sensitivity if fans or curtains cause false occupancy. The Everything Presence One exposes these as adjustable entities in Home Assistant.

Cross-platform notes: HomeKit and Hubitat

For HomeKit, the cleanest path is to keep Home Assistant as your sensor hub and expose your combined occupancy sensor to Apple Home via Home Assistant’s built-in HomeKit Bridge integration. (Note: Home Assistant Green has no built-in radio and is not a HomeKit hub, so it can’t pair sensors or serve as an Apple Home hub on its own.)

For Hubitat, the Hubitat Elevation C-8 pairs Zigbee and Z-Wave sensors natively and is a flexible automation platform. ESPHome/Wi-Fi sensors like the Everything Presence One aren’t native to Hubitat, so most people keep those on Home Assistant and bridge states between the two if needed.

Quick verdict

For the best results with the least fuss, use a combined mmWave + PIR sensor like the Everything Presence One, which runs locally over ESPHome and exposes both sensor types plus environmental data. Merge PIR and mmWave into one occupancy helper, automate off that helper, and tune the radar’s range and sensitivity. The payoff is lighting that turns on instantly and never leaves you sitting in the dark, all running locally with no cloud.

Next steps

Compare this category side by side

If you want fewer opinions and more matrix-style tradeoffs, the comparison pages are the next stop.

See comparisons →

Inspect all products

The full product database keeps the caveats, setup notes, and compatibility details attached to each device.

Browse products →

Back up and read the explainers

If a buying guide feels too specific too fast, the guides section covers the broader local-first logic behind it.

Read guides →

Related articles

Best local-first smart home hubs

The best smart home hubs and controllers for people who care about local control, Home Assistant compatibility, and fewer long-term regrets.

Read article →

Best smart plugs with local control and energy monitoring

The best local smart plugs with energy monitoring for Home Assistant: real local control over Zigbee, Z-Wave, or Wi-Fi plus accurate power data, no cloud.

Read article →

Best local security cameras for Home Assistant

The best Home Assistant-friendly local camera options for buyers who care about RTSP, ONVIF, NVR compatibility, and lower cloud dependence.

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