Aqara FP300 + Home Assistant: Local Setup via Zigbee2MQTT
The FP300 can detect someone sitting still without needing a USB power cable. For Home Assistant, its Zigbee mode offers a direct route through Zigbee2MQTT. Getting it onto the right protocol is the first step; placement and absence timing determine how useful it is after pairing.
Choose the protocol before pairing
The FP300 combines PIR motion detection with mmWave presence sensing, plus light, temperature and humidity readings. It supports Zigbee and Matter over Thread, but uses one of those protocols at a time. This guide follows the Zigbee2MQTT route; Thread needs a Matter controller and a Thread border router instead.
Aqara specifies two replaceable CR2450 batteries. Its advertised battery life depends on protocol, reporting settings and use, so use the battery entity to track your own installation. Aqara’s FP300 product information describes the protocol options.
What you need
- Home Assistant with its MQTT integration connected to your broker.
- A current stable Zigbee2MQTT installation, a supported coordinator and Home Assistant discovery enabled.
- An FP300 with batteries installed, plus the Aqara Home app if you need to change its protocol.
If the Zigbee network is new, use the hub-free Aqara setup guide to establish it first.
1. Switch to Zigbee if necessary
If the sensor is already in Zigbee mode, go straight to pairing. If it is in Thread mode, follow the Aqara Home app’s nearby-device and protocol-switching flow. Keep Bluetooth enabled and follow the account or permission prompts shown by your app version.
- Keep the sensor nearby and enable Bluetooth on the phone.
- Hold its reset button for five seconds to open joining; if Bluetooth discovery still fails, use the full-reset guidance below.
- In Aqara Home, add the discovered FP300 and select Zigbee during the protocol-choice flow.
- Wait for the mode change to finish before enabling Zigbee2MQTT joining.
Switching protocols means adding the device to the new system again. Existing Matter entities and automations do not transfer to Zigbee2MQTT.
If the app cannot find the sensor
A normal network reset and a full factory reset are different operations. Zigbee2MQTT’s FP300 notes describe a five-second hold for network reset and ten rapid button presses for a full reset when Bluetooth discovery is not working. Confirm the device’s response, then retry nearby discovery. A full reset removes existing settings.
2. Pair with Zigbee2MQTT
- Enable Permit join in Zigbee2MQTT.
- Hold the FP300’s reset button for about five seconds to enter pairing mode, then wait for the device interview to finish.
- Check that Zigbee2MQTT identifies the model as an FP300, give it a useful name, and close Permit join.
- Check for the discovered device under Home Assistant’s MQTT integration.
If the interview stalls, check the batteries, protocol and radio coverage before repeating resets. The FP300 device page includes the supported model aliases and reset notes.
3. Check the discovered readings
Start with presence, illuminance, temperature, humidity and battery. Zigbee2MQTT also exposes configuration controls and diagnostic readings; which are enabled in Home Assistant depends on your software version and discovery settings. Use the actual device page rather than expecting a fixed number of entities.
Presence and PIR detection are separate signals. PIR can clear while radar still detects an occupant, so a false PIR value alone does not mean the room is empty. For lights that should stay on while someone sits still, use the presence entity.
presence_detection_options: chooseboth,mmwaveorpir; this changes which detection methods are used.motion_sensitivity:low,mediumorhigh.detection_range_composite: distance-band controls for mmWave detection, when supported by your installed FP300 definition; see the tuning section below.absence_delay_timer: the sensor’s own wait before reporting absence.pir_detection_interval: the PIR detection interval, trading frequent checks against battery use.ai_interference_source_selfidentificationandai_sensitivity_adaptive: separate interference-identification and adaptive-sensitivity controls.spatial_learning: a write-only request to learn the room background.
Temperature, humidity and light also have sampling/reporting controls. Start with their defaults and change them only to solve a measured update problem; frequent reporting can increase battery use. Diagnostics such as voltage and outage count help investigate a dropout but are not occupancy measurements.
4. Learn the room after mounting
- Fix the sensor in its intended position and make sure its view is unobstructed.
- Leave the detection area empty of people and pets.
- In Zigbee2MQTT Exposes, send
Start Learningthroughspatial_learning; the MQTT equivalent is{"spatial_learning":"Start Learning"}on its set topic. - Allow learning to complete before entering, then compare a seated-person test with an empty-room test.
Aqara’s FP300 tuning guidance distinguishes room learning, placement, sensitivity and absence delay. Learning is not a remedy for a lost Zigbee connection, and it does not guarantee that every reflection or moving object will be ignored.
Include entering, the usual seat and leaving in the test, with the room’s fans and curtains operating normally. Repeat learning after moving the sensor or making a significant room change. The FP2 guide covers the alternative when you need separate room zones.
Adjust sensitivity and absence timing
Change one setting at a time and watch the presence history. Higher sensitivity may help detect small movements but can also retain unwanted detections. Lowering it is not a general solution for detecting a sleeping or stationary person.
The current Zigbee2MQTT control for absence_delay_timer accepts 1–300 seconds. Start with a value that keeps brief pauses from switching lights off, then check how long an empty room takes to clear. For a longer lighting delay, add a Home Assistant off delay; that starts after the sensor reports absence.
The interference-learning settings concern unwanted detections, such as moving fans or curtains. Treat radio dropouts separately by checking coverage, battery and coordinator placement.
For range tuning, look for detection_range_composite in Zigbee2MQTT’s Exposes tab. The current FP300 definition provides 24 on/off distance bands, each covering 0.25 m, across 0–6 m. Use mmWave detection and press the sensor’s button to wake it and refresh its settings. These are distance bands, not separate room zones.
Use the band controls rather than treating the raw detection_range number as metres: that number encodes the selected bands. If your installation does not offer these controls, check its device definition against the current documentation before following this step.
Start with medium sensitivity and test the usual seat and the furthest occupied spot. If an empty room stays occupied, inspect moving objects and whether the enabled bands extend beyond the area you want to monitor before lowering sensitivity. Retest seated presence after any range change. If a still person disappears, improve placement or try higher sensitivity. Record the original settings so you can undo a change that solves one location but breaks another.
OTA firmware updates
The current Zigbee2MQTT device page lists OTA support for the FP300. Check the OTA panel for a firmware image applicable to your exact device. Support for the update mechanism does not guarantee that a new image is available at any particular time.
Use fresh batteries and a stable radio connection, allow the transfer to finish, and retest detection afterwards. If no suitable image is available, consult the current device notes before moving the sensor to an Aqara hub just to update it.
Local control and cloud services
With the FP300 paired to your coordinator, detection reaches Home Assistant through Zigbee2MQTT and your MQTT broker. That path does not require an Aqara hub to relay each event. App setup, software downloads and any cloud actions used by Home Assistant are separate dependencies.
To check the lighting path, disconnect the internet while leaving the LAN, broker, coordinator and Home Assistant running. Test both occupied and empty-room behaviour.
Two lighting automations to start with
Replace the example entity IDs with those in your installation. These snippets each describe a single automation for Home Assistant’s YAML editor. The first switches the light on when presence begins; it does not include a light-off rule.
alias: "Living room lights — presence with stationary hold"
trigger:
- platform: state
entity_id: binary_sensor.fp300_presence
to: "on"
action:
- service: light.turn_on
target:
entity_id: light.living_room
mode: single
The second checks illuminance when presence turns on. It does not react later merely because an already occupied room gets darker. Add a separate illuminance trigger with a presence condition if that is the behaviour you want.
alias: "Living room lights — presence and dim"
trigger:
- platform: state
entity_id: binary_sensor.fp300_presence
to: "on"
condition:
- condition: numeric_state
entity_id: sensor.fp300_illuminance
below: 50
action:
- service: light.turn_on
target:
entity_id: light.living_room
mode: single
For turning lights off, use a separate automation that requires presence to remain off for your chosen delay. A delay in Home Assistant adds to the sensor’s own absence period. Check that both together suit the room.
Frequently asked questions
Do I need an Aqara hub? Not for the Zigbee2MQTT path. You need a compatible coordinator, broker and MQTT discovery setup.
Can I get room zones? The FP300 reports occupancy for its detection area. Choose an FP2 if separate zone occupancy is the requirement.
Does it work with ZHA? Check the exact model and current ZHA device handler. Entity and setting coverage can change between releases; this guide documents Zigbee2MQTT.
Why do PIR and presence disagree? They measure different things. Use presence for continued occupancy and inspect PIR when diagnosing motion detection.
If a PIR-only sensor would be enough, the high-precision motion sensor guide offers another option.
