Skip to content

Setup

How My Aqara Gear Actually Works in Home Assistant

Three FP2 presence sensors, a Hub E1 and an air quality monitor: how each one connects, what it runs in my house, and why nothing else I've tried fills the FP2's spot.

By CJ Zwart

Published

About an 11-minute read

All articles

My last article was about the Aqara FP2 that died 33 months into a 12-month warranty, and how Aqara's support team and engineers ended up fixing it. The obvious follow-up question is: after all that, why do I still care so much about one company's presence sensor?

Here's the short answer. When I sit down at my desk, a small figure of me appears in the desk chair on a 3D floorplan of my house. Home Assistant places me from my phone's Bluetooth signal, and when that can't tell which room I'm in, from a face match on one of my cameras. A face match only lasts while the camera can see my face. What keeps my figure in the chair after that, while I sit still and work, is the FP2 on the living room wall, which can still see somebody in the desk zone I drew for it. When I get up, and nobody has been at the desk or the dining table for about a minute, the figure goes.

This article is about the gear that makes that work, and the gear I've tried instead: what each device is, how it gets into Home Assistant, what it does in my house, and how it compares with the other presence sensors I use. It isn't a lab review. Everything here comes from my own house and my own Home Assistant config, checked against the live system while I wrote it.

At a glance

Aqara Presence Sensor FP2, living room
How it connects: HomeKit Device integration, over my local network. What it does: Five zones: kitchen, dining table, my desk, couch area and front entry. Keeps people in place on my 3D floorplan
Aqara Presence Sensor FP2, game room
How it connects: HomeKit Device integration. What it does: Covers the whole room. Keeps people in place on the floorplan
Aqara Presence Sensor FP2, bedroom
How it connects: HomeKit Device integration, moved over from Apple Home while I wrote this. What it does: No zones or jobs yet
Aqara Hub E1
How it connects: Matter. What it does: Zigbee hub for the small Aqara sensors below, shared into Home Assistant as a Matter bridge
Aqara TVOC Air Quality Monitor
How it connects: Through the Hub E1, over Matter. What it does: Temperature, humidity, a VOC reading and an air quality rating, in the same room as my NAS
Aqara Vibration Sensor
How it connects: Through the Hub E1, over Matter. What it does: On the washing machine in the garage. Working again after a new battery. Cycle-finished alert planned
SONOFF SNZB-06P24, for comparison
How it connects: ZHA, on my own Zigbee coordinator. What it does: One occupancy signal for the room, a light level and a hold-time setting
ecobee room sensors, for comparison
How it connects: Through my ecobee thermostat and ecobee's cloud. What it does: Occupancy and temperature in two bedrooms
Amazon Echo presence, for comparison
How it connects: Alexa routines that flip switches in Home Assistant. What it does: Occupancy near a few of my Echo devices
Disclosure: during that support case, Aqara sent me two replacement FP2s at no charge, as the first article explains. Aqara hasn't paid for this article and didn't see it before it was published.

Presence, zones, and why I care

If you haven't used one, a presence sensor isn't a motion sensor. A motion sensor only notices you while you're moving, so if you sit still on the couch long enough, the room decides it's empty and the lights go off. The FP2 uses millimeter-wave radar, so it keeps seeing you while you sit still.

Of the sensors I've tried, the FP2 is the only one that gives me a separate occupancy signal for each area I draw. My living room FP2 is mounted on the TV wall and looks across a space that is really five places: the kitchen, the dining table, my desk in the bay window, the couch area and the front entry. In the Aqara app, the room shows up as a grid of half-meter squares, and you draw a zone by dragging across them. One FP2 can hold up to 30 zones. I drew five, and Home Assistant sees each one as its own occupancy sensor. One device on one wall does the job of five sensors, and it knows the difference between someone at my desk and someone at the dinner table.

The game room FP2 is simpler. It covers the whole room, so it answers one question: is anybody in there? The bedroom FP2 is the newest. It lived in Apple Home until I moved it into Home Assistant while writing this, so it has no zones or jobs yet.

How the FP2s get into Home Assistant

I pair each FP2 to Home Assistant directly with the HomeKit Device integration (older guides call it HomeKit Controller). It talks to the sensor over my local network, with no cloud service in the loop day to day. Each of my FP2s arrived with one occupancy sensor for its whole detection area, one for every zone I'd drawn, and a light level sensor.

Three things I learned doing it:

  • A HomeKit accessory can only be paired with one controller at a time. Home Assistant's own documentation says so. My bedroom FP2 started out in Apple Home, so to move it, I removed it from Apple Home first. Home Assistant then found it as a new HomeKit device and asked for its HomeKit pairing code, which I read off the label on the FP2. If you want an FP2 in Apple Home as well, Home Assistant's HomeKit Bridge integration can share it back.
  • Zone names didn't come with it. The Aqara app's FP2 settings have a Name Sync option that copies zone names between the Aqara app and Apple Home, in either direction, but Home Assistant isn't part of that. On all three of my FP2s, every sensor arrived as "Presence Sensor 1," "Presence Sensor 2" and so on, with number 1 covering the whole detection area and the zones after it. I renamed mine by hand in Home Assistant. To work out which number is which zone, walk into one zone at a time and watch which sensor turns on.
  • A zone I added later showed up on its own. While writing this, I drew a new zone on the game room FP2, and Home Assistant had a new "Presence Sensor 2" for it within seconds. It still needed a name.

My FP2s also show up through my SmartThings integration, but that route only gives one presence on/off per sensor and a light level, with no zones, so nothing in my setup uses it.

What the FP2s actually run

The 3D floorplan

My Home Assistant dashboard has a 3D model of the house, with a small figure for each person that moves to whatever room they're in. You can see it in my 3D floorplan demo. I set the room states myself for the demo, so you can see how the figures move. Two things decide who is in which room: my phone's Bluetooth signal, through the Bermuda integration, and face recognition in Frigate, the video recorder that watches my cameras. My iPhone changes its Bluetooth address for privacy. I got its identity resolving key through my MacBook and added it to Home Assistant's Private BLE Device integration. That lets Home Assistant recognize the phone as its address changes, so Bermuda can work out which room it's in.

Those sources are good at saying who someone is, but not always at saying that they're still there. A camera, for example, can only recognize someone while it sees their face, and once that moment passes, the floorplan would normally take the figure out again shortly after. That's where the FP2 comes in. When a camera has placed someone in a room an FP2 covers, the floorplan keeps them there for as long as that room's zones report somebody, and lets go once they've been empty for about a minute. For my own figure, the camera is only the fallback, for when Bermuda can't tell which room my phone is in. The cameras and Bermuda know who. The FP2 knows somebody is still there.

There's one honest limit here. The FP2 can tell that somebody is in a zone, but not who, and the hold works room by room. My desk and the dining table count as one room, so if someone is still at the table when I leave my desk, my figure stays in the chair until both zones have been empty for about a minute. For a floorplan, I can live with that.

My pets are on the floorplan too. Frigate's object classification tells me which dog or cat a camera is seeing, and for now their figures come from the cameras alone, with a timer that takes each one out again. Getting the FP2s to keep my pets in place the way they keep people is something I'm still working on.

The glue is one template sensor that turns the FP2 zones into a list of occupied rooms. It only answers "which rooms have somebody in them right now?" The one-minute hold for camera-placed figures lives in separate floorplan automations. The dining room gets two zones, the table and my desk, because either one means somebody is in that room. If you aren't building something similar, you can skip the example. The entity names in it are examples, not my real ones:

template:
  - sensor:
      - name: "FP2 Occupied Rooms"
        state: >-
          {%- set zones = {
            'kitchen': ['binary_sensor.example_kitchen_zone'],
            'dining_room': ['binary_sensor.example_table_zone', 'binary_sensor.example_desk_zone'],
            'living_room': ['binary_sensor.example_couch_zone'],
            'entry': ['binary_sensor.example_entry_zone'],
            'game_room': ['binary_sensor.example_game_room_presence'] } -%}
          {%- set ns = namespace(rooms=[]) -%}
          {%- for room, ents in zones.items() -%}
            {%- if ents | select('is_state', 'on') | list | count > 0 -%}
              {%- set ns.rooms = ns.rooms + [room] -%}
            {%- endif -%}
          {%- endfor -%}
          {{ ns.rooms | join(',') if ns.rooms else 'none' }}

The Hub E1 and its two sensors

The Hub E1 is Aqara's small USB-powered Zigbee hub. My TVOC monitor and vibration sensor pair to it, not to my own Zigbee coordinator. In my experience, Aqara expects these sensors to join an Aqara hub, and I couldn't find a way to pair them to a third-party coordinator. The hub then shares them into Home Assistant over Matter, as a bridge, and they show up as devices behind the hub. Matter also lets more than one controller pair with the same device, so the hub is paired directly to both Apple Home and Home Assistant at the same time, which a HomeKit accessory like the FP2 can't do.

One thing I learned setting it up: both the Hub E1 and my own Zigbee coordinator run Zigbee, and both happen to be on channel 20, so two separate Zigbee networks share the same slice of the 2.4 GHz band in my house. It has worked fine so far. If either network ever gets flaky, moving one of them to another channel is the first thing I'd try.

The TVOC monitor runs on two CR2450 coin cells. TVOC stands for total volatile organic compounds, the mix of gases that comes off things like paint, cleaning products and cooking. Through the hub, Home Assistant gets its temperature, humidity, a VOC reading in parts per million, an air quality rating and its battery level. It sits in the same room as my NAS, the storage box on my network, which gives it a quiet but useful job. My NAS alert fires on the drives' own temperature readings, and the message it sends to my phone also includes the room temperature from the TVOC monitor. It can't tell me why a drive ran hot, but it's a quick clue about whether the room is warm too.

The vibration sensor sits on the washing machine in the garage, for a "cycle finished" alert I haven't built yet. Through my Hub E1, it doesn't show up as a vibration sensor. Home Assistant gets an on/off sensor labeled "Occupancy," which turns on when the sensor is shaken, plus its battery level. It runs on a CR2032 coin cell. There's no sensitivity setting on the Home Assistant side, so that stays in the Aqara app.

While I wrote this, it had been unavailable in Home Assistant for at least a week. Apple Home showed it as "No Response" too. Home Assistant's Matter diagnostics showed why: the hub itself was reporting the sensor as unreachable, so Home Assistant was only passing that on. Its battery level went unavailable along with everything else, so there was no low-battery warning to go on. Pressing the sensor's button, restarting the hub and asking Home Assistant's Matter server to read the hub's devices again (it calls this re-interviewing) didn't bring it back. A new battery did. One catch: when it came back, the main sensor had a new entity ID in Home Assistant, the name that automations and dashboards use, which broke two of my dashboards until I renamed it back.

I shook the sensor by hand to see how quickly it would clear. Home Assistant still showed it as on about two minutes after I stopped. Most washes have quiet stretches too, like filling or soaking, so the sensor turning off doesn't mean the cycle is done. My plan is an alert that waits for enough shaking to show a load has started, then for the sensor to stay off for longer than the quiet stretches I see in a real wash. If the sensor goes unavailable, that doesn't count as quiet. I haven't recorded a full load yet, so I still need to pick both thresholds and build the alert.

How the alternatives compare

SONOFF SNZB-06P24

The SONOFF is a 24 GHz radar presence sensor that runs on USB-C power and joins my own Zigbee network through ZHA, Home Assistant's built-in Zigbee integration. When I checked in November 2026, it cost $24.90 on SONOFF's US store, against $82.99 for an FP2 on Aqara's, so less than a third of the price.

It does have zones of a sort. According to SONOFF's manual, it splits its range, out to about 4 meters, into seven distance bands, and you can switch each band on or off in SONOFF's eWeLink app. But the bands only decide which distances count. The sensor still reports one occupancy state for the whole room. In my ZHA setup, it shows up as one occupancy sensor, a light level and a hold-time setting, and I didn't see any controls for the distance bands.

I've only had a little hands-on time with it, but the gap was clear. What I missed most was the FP2's room and zone mapping, where I draw the kitchen, the table and my desk on a map and get a sensor for each. I could probably configure the SONOFF to do some of what my FP2s do, but out of the box it isn't a comparable sensor.

ecobee room sensors

My ecobee3 lite thermostat has two room sensors, in the bedroom and the guest bedroom. They report occupancy and temperature to the thermostat over their own radio link, the thermostat is on Wi-Fi, and Home Assistant reads them through the ecobee integration, which goes through ecobee's cloud.

That's what ecobee built them for: telling the thermostat which rooms are in use. Over a week of my Home Assistant history in November 2026, the guest bedroom sensor's shortest recorded "occupied" stretch was 33 minutes, and the median was 48. Over the same week, most of the FP2 zones' recorded "occupied" stretches lasted under a minute.

Echo presence, wired in by hand

My most custom setup uses Amazon Echo devices as presence sensors. Some Echos can tell when someone is nearby, and Alexa routines can act on that, but Home Assistant has no direct way to read it. So I built a bridge. When an Echo detects someone, an Alexa routine turns on a switch in Home Assistant, and a second routine turns it off when they've gone. Home Assistant shares those switches with Alexa through Home Assistant Cloud. A template sensor then turns each switch into an occupancy sensor, with a delay before it calls the room empty. Again, the entity names are examples:

template:
  - binary_sensor:
      - name: "Kitchen Occupied"
        device_class: occupancy
        delay_off:
          minutes: 8
        state: >
          {{ is_state('switch.example_kitchen_echo_presence', 'on') }}

It works, and it covers rooms without an FP2. But it has every weakness the FP2's local route avoids. Every detection travels from the Echo to Amazon's cloud, then through Home Assistant Cloud, and back into my house. And it can break without telling you. At some point, Alexa lost track of the Home Assistant switches, so the routines kept firing into nothing for at least a week, and Home Assistant kept showing one room occupied and another empty, all day. Once I found it, re-linking the routines in the Alexa app fixed it. Now Home Assistant checks every morning and warns me if Alexa hasn't updated one of those switches in the past day.

If you're starting out

  • Put one FP2 in your biggest open room before buying anything else, and spend time drawing the zones.
  • Pair it with the HomeKit Device integration if you want the zones locally in Home Assistant. If it's already in Apple Home, remove it there first.
  • Rename every sensor in Home Assistant. Walk into one zone at a time and watch which "Presence Sensor" number turns on.
  • Plan on living with Aqara's app. Zones are drawn there, and firmware updates come from there.
  • If a small room only needs "someone is here," a cheaper Zigbee presence sensor like the SONOFF may be enough, but don't expect FP2-style zones from it.
  • If you build occupancy out of motion sensors or routines, give it a delay, expect to tune it, and add a check that warns you when it stops updating.
  • If you run Aqara's hub beside your own Zigbee coordinator, check which channels they're on.
  • If a battery sensor behind your Hub E1 goes unavailable, a fresh battery is an easy first thing to try. If it comes back, check whether its entity ID changed, especially if a dashboard or automation stops working.
  • If your FP2 stays online but stops detecting anyone, and every firmware update dies partway through, read my first article before you give up on it.

After nearly three years, one dead sensor and one very good support case, the FP2 is still the first presence sensor I'd buy.