[ST Edge] Aqara FP300 (Zigbee)

SmartThings Edge Driver (aqara-fp300-zigbee)

The most(ly) complete Zigbee integration for the Aqara FP300 (lumi.sensor_occupy.agl8 / PS-S04D) on SmartThings.

This community Edge Driver unlocks the full feature set of the FP300’s dual mmWave + PIR sensor, environmental sensors (temperature, humidity, illuminance), battery monitoring, and advanced manufacturer-specific configuration — all running locally on your SmartThings hub.

The FP300 is not a “normal” Zigbee presence sensor. Aqara exposes the basic environmental data through standard Zigbee clusters, but many of the interesting controls — presence mode, sensitivity, absence delay, AI features, target-distance actions, detection range, LED schedule, and various reporting parameters — live in Aqara’s manufacturer-specific cluster 0xFCC0. That is why generic integrations usually expose only a subset of the device until device-specific handling is added.
See: Zigbee2MQTT device page, ZHA support request.


Screen_Recording_20251118_124835_SmartThings-ezgif.com-video-to-webp-converter

Features

  • Dual detection — Separate presenceSensor (mmWave presence) and motionSensor (PIR motion) capabilities
  • Environmental sensors — Temperature, relative humidity, and illuminance with user-configurable offsets, sampling, and reporting modes
  • Battery — Voltage + percentage reporting (multi-source handling, including Aqara/Xiaomi-style packed reports)
  • Advanced configuration (via device preferences):
    • Presence detection mode (Both / mmWave only / PIR only)
    • Motion sensitivity (Low / Medium / High)
    • Absence delay (10–300 s)
    • PIR detection interval (2–300 s)
    • AI adaptive sensitivity & AI interference identification (fans, AC units, etc.)
    • One-shot actions: target distance tracking, spatial learning, device restart
    • Full control over temperature / humidity / illuminance sampling & reporting (off / low / medium / high / custom + thresholds, intervals, modes)
    • LED behavior: disabled at night + custom schedule (HH:MM)
    • Detection range mask — raw 24-bit (0.25 m resolution) and coarse 1 m band toggles (0–6 m)
  • Robust Zigbee handling:
    • Manufacturer-specific cluster 0xFCC0 (LUMI/Aqara manufacturer code 0x115F)
    • Write-and-verify logic with readback + timeout protection
    • Debounced infoChanged handling for rapid preference saves
    • Safe command sending with error guards
  • Target distance — Read and logged internally (ready for future custom capability exposure)
  • Zero cloud dependency — All logic runs locally on the hub

The underlying hardware combines PIR + 60 GHz mmWave radar, offers a 120° field of view, and up to 6 m detection range. Aqara also markets it as a 5-in-1 sensor because it adds temperature, humidity, and ambient light sensing on top of presence detection.
See: Aqara FP300 product page.


Supported Devices

Manufacturer Model Device Label Profile
Aqara / LUMI lumi.sensor_occupy.agl8 Aqara Presence Sensor FP300 aqara-fp300

Fingerprint IDs (both Aqara and LUMI variants) are included.

Firmware note: The sensor must be switched to Zigbee mode in the Aqara app before pairing with this driver. Aqara’s official product documentation confirms that some exclusive/advanced settings are tied to Zigbee mode, and the SmartThings community thread confirms the practical workflow: reset the device, open the Aqara app, switch it to Zigbee firmware, then pair it in SmartThings. Using the latest available Zigbee firmware is recommended.
See: Aqara product page, Aqara forum note on Zigbee firmware 0.0.0_5841.


Installation

  1. Install the Aqara FP300 Presence Sensor driver from this channel.

  2. In the SmartThings app:

    • Go to Devices+Add deviceScan for devices
    • Select Aqara Presence Sensor FP300
  3. The driver will automatically match via fingerprints and run the initial configuration.

Practical pairing note: Once the FP300 has been switched to Zigbee firmware, pairing usually works via normal SmartThings Zigbee discovery (+ → add device → scan) after putting the sensor into pairing mode.


Device Preferences (Full List)

All preferences are exposed in the SmartThings app under the device settings. Changes are applied safely with verification.

Screen_Recording_20260401_020703_SmartThings-ezgif.com-video-to-webp-converter

Detection & Presence

Preference Type Range / Options Default Description
Presence detection mode Enum both, mmwave, pir both Select which sensing method is used for presence detection
Motion sensitivity Enum low, medium, high medium Main sensitivity control for presence detection
Absence delay (s) Integer 10–300 30 Time before not present is reported after no presence is detected
PIR detection interval (s) Integer 2–300 30 PIR timing / cadence parameter; higher detection frequency improves accuracy but costs battery
AI adaptive sensitivity Boolean On / Off Off Lets the device adapt sensitivity to the room over time
AI interference identification Boolean On / Off Off Helps filter or identify fans, AC units, curtains, and similar moving interference sources
Start target distance tracking Boolean On (triggers) → Off Off One-shot maintenance/action trigger for target-distance tracking
Start spatial learning Boolean On (triggers) → Off Off One-shot action that runs Aqara AI spatial learning
Restart device Boolean On (triggers) → Off Off One-shot reboot of the FP300

Notes:

  • presenceSensor and motionSensor are intentionally separate. The FP300 has both a mmWave presence signal and a PIR motion signal, and they are not equivalent.
  • In both mode, the PIR path may go inactive while mmWave presence remains active. That is normal for this class of device and one of the reasons the driver exposes two separate capabilities.
  • Aqara specifically positions AI adaptive sensitivity and spatial learning as part of the FP300’s interference handling / room adaptation logic.
    See: Zigbee2MQTT device page, Aqara product page.

Detection Range (Advanced)

Preference Type Range / Default Description
Detection range mask (advanced) Integer 0–16,777,215 (0xFFFFFF) Raw 24-bit mask for 24 quarter-meter segments
Detect 0–1 m / 1–2 m / … / 5–6 m Boolean On / Off (default On) Coarse 1 m band toggles derived from the finer native mask

How this works:

  • The FP300’s native detection-range model is finer-grained than the SmartThings UI. Zigbee2MQTT exposes 24 separate 0.25 m slices from 0.00 m to 6.00 m.
  • This driver offers both a raw 24-bit mask and a friendlier 1 m abstraction.
  • Depending on firmware / integration path, the underlying detection-range payload may appear as a legacy integer-style value or as a manufacturer-specific octet string / buffer that contains a prefix plus the actual 24-bit mask.
    See: Zigbee2MQTT device page, ZHA FP300 quirk/gist reference.

Environmental Sensors

Temperature / Humidity / Illuminance each have:

  • Sampling mode: off / low / medium / high / custom
  • Custom sampling period (s)
  • Reporting interval (s)
  • Reporting threshold (delta)
  • Reporting mode: threshold / interval / both

What these obscure settings actually do:

  • Sampling mode controls how frequently the FP300 samples that sensor internally. Higher frequency improves responsiveness but costs battery.
  • Custom mode unlocks manual control of period / interval / threshold.
  • Reporting interval is the maximum periodic update time.
  • Reporting threshold is the minimum delta before the sensor reports early.
  • Reporting mode decides whether the device reports on threshold change, periodic interval, or both.

Temperature offsets and Humidity offsets are also available (global preferences). These are standard SmartThings-style calibration adjustments exposed through device preferences.

Power / battery notes:

  • Aqara rates the FP300 for up to 3 years in Zigbee mode and up to 2 years in Thread mode, depending on settings and usage.
  • Higher PIR frequency and more aggressive environmental sampling/reporting can reduce battery life.
  • The sensor uses two replaceable CR2450 cells.
    See: Aqara product page.

How It Works (Technical Highlights)

  • Manufacturer cluster 0xFCC0 — All advanced config lives here. The driver uses safe write_attribute + immediate read_attribute verification with token-based deduplication and 4-second timeouts.
  • Detection range — The driver handles both a user-friendly coarse mask and the device’s native fine-grained detection-range format.
  • Debounced preference application — Rapid changes in the app are coalesced (1-second delay + generation counter).
  • Battery handling — Prefers direct percentage report from packed Aqara/Xiaomi-style 0x00F7; falls back to voltage linear mapping.
  • Lifecycle — Proper binding, reporting configuration, prevent_leave, initial preference sync, and delayed full refresh on configure.

Why this device is tricky / non-standard

The FP300 is one of the more unusual consumer Zigbee sensors because it mixes standard clusters and a large manufacturer-specific cluster in ways that generic drivers cannot interpret correctly out of the box.

What makes it tricky:

  • Two different detection concepts — mmWave presence and PIR motion are both exposed and need to be handled separately.
  • Private Aqara controls — Presence mode, motion sensitivity, absence delay, AI features, target-distance actions, detection range, LED scheduling, and detailed environmental reporting all sit in 0xFCC0 instead of standard Zigbee clusters.
  • Odd data encodings — Some attributes are straightforward integers, others are booleans, and others arrive as Aqara/Xiaomi-style packed buffers such as 0x00F7 battery reports or octet-string-style detection-range payloads.
  • Silent / partial responses — Some manufacturer-specific writes and reads can be quiet or inconsistent, so a robust driver benefits from explicit write verification, timeouts, deduplication, and defensive logging.
  • Firmware behavior matters — Community reports around firmware 0.0.0_5841 show that the FP300 can send duplicate or rounded temperature/humidity reports and that real-world presence behavior can be influenced heavily by placement, interference, and sensitivity settings.
    See: ZHA support request, Aqara firmware discussion, Aqara forum discussion on placement / sensitivity.

Known Limitations & Future Improvements

  • Target distance (0x015F) is read and logged but not yet exposed as a capability (easy future addition).
  • Battery percentage can occasionally read low on fresh CR2450 cells (firmware-dependent; voltage range may need tuning).
  • One-shot action preferences (Track, Learn, Restart) require manual toggle-off after use (SmartThings limitation).
  • No built-in firmware version display or OTA support in SmartThings; firmware management remains an Aqara-app workflow.
  • Placement still matters more than settings. Community experience suggests that correct placement and a sensible detection range often matter more than endlessly tweaking preferences.

Planned / Suggested enhancements:

  • Custom capability for target distance
  • Optional custom capability for diagnostic / engineering values
  • Debug logging toggle
  • Firmware version exposure

Battery Reporting Caveat

The FP300’s battery reporting is currently one of the least reliable parts of the device across multiple platforms.

Testers have reported that the battery value can jump between very low and high readings, and in some cases SmartThings may even show “no battery”. Unfortunately, this does not appear to be a SmartThings-only problem. Similar behavior has also been reported in the Aqara app, Home Assistant / ZHA, and Zigbee2MQTT-related investigations:

What seems to be happening

The FP300 does not behave like a simple standard Zigbee battery device.

In particular:

  • The standard Zigbee battery cluster (genPowerCfg.batteryPercentageRemaining) has been observed as 0 even while Aqara’s manufacturer-specific payload still contains battery-related data.

  • Aqara-specific battery information is embedded in the packed manufacturer attribute 0x00F7.

  • Current cross-platform implementations indicate that:

    • 0xff01-23 maps to battery voltage (mV)
    • 0xff01-24 maps to battery percentage remaining

That means the most reliable battery source for the FP300 is usually Aqara’s packed 0x00F7 report, not the standard Zigbee battery percentage field.

What this driver does

This driver is designed to prefer Aqara-specific battery data where available and to avoid blindly trusting inconsistent standard battery reports.

Even with that, occasional wrong readings may still occur, because there is evidence that at least part of the problem is device-side / firmware-side, not just integration-side.

Practical recommendations

If battery reporting looks wrong:

  • Make sure the FP300 is on the latest available Zigbee firmware
  • Try a battery reseat / restart
  • Give the device some time after pairing or reconfiguration before judging the battery value
  • Treat sudden one-off drops or jumps with caution unless they repeat consistently

Community reports suggest that some units recover after a restart or battery reseat, while others appear to have firmware-related reporting quirks:

Bottom line

Battery reporting on the FP300 should currently be treated as best effort, not as a perfectly trustworthy health indicator.

The sensor itself may continue to work normally even while the reported battery percentage is temporarily misleading.


Troubleshooting

  1. Presence stays stuck → Increase absence delay, reduce sensitivity, narrow the detection range, and run spatial learning.
  2. No advanced options → Ensure the device is in Zigbee mode (not Thread / Matter).
  3. Battery drains fast → Lower PIR interval / sampling rates
  4. Preferences not applying → Check driver logs in SmartThings (search for [FP300], queued verification, sending readback, verified, and timed out).
  5. Device not discovered → Factory reset, switch to Zigbee firmware in Aqara Home, then re-pair after installing the driver.
  6. Slow / unreliable detection → Placement and interference matter. Fans, AC airflow, curtains, and similar moving objects can confuse the sensor; adaptive sensitivity and a tighter detection range often help.

Logs: In the SmartThings mobile app → Device → ⋮ → View logs (filter for FP300).

Helpful references:


Changelog

Latest (revised build):

  • Separated main presence from PIR motion
  • Fixed preference ID handling and debouncing
  • Improved detection range handling (fine-grained native model + coarse SmartThings UI)
  • Added coarse 1 m band toggles
  • Added one-shot actions for target-distance tracking, spatial learning, and restart
  • Enhanced verification & safe-send logic

Credits & Community

  • Inspired by Zigbee2MQTT, ZHA quirks, and Hubitat implementations
  • Thanks to everyone testing, logging, and providing feedback!

Sources & Further Reading

14 Likes

nice! good to see a driver for this.

3 Likes

Now I can run the device over Zigbee for a while, observe how it behaves, configure it, and collect logs. I can then compare this with Matter/Thread, and afterward we’ll be able to determine whether there are any fundamental issues.

The Zigbee2MQTT guys are also actively exploring the device, and I’ll be following their progress and making the appropriate adjustments.

7 Likes

Hi,

I installed your driver in my Aeotec Hub but how I can apply it to my Aqara FP300? I can’t add the sensor in SmartThings using Zigbee protocol :cry: (only Matter).

Could you please help me?

Thanks&Regards

You have to install the Zigbee firmware on your FP300 first. Open the Aqara Home app, factory reset the device, it should automatically pick it up and ask you if you want to switch the firmware.

Yes ok, I already done but how I can add the FP300 in SmartThings if I’m using the Zigbee mode? I’m stuck, I have only the matter code to integrate FP300 in SmartThings :cry:

Hold the button for 7 seconds until the LED starts to flash, add the device as usual in the SmartThings app: + → add device → scan

BTW: this driver is an older version that I wrote to compare the device’s performance. The final (production) version will be released in about two weeks.

1 Like

Hi, is it possible to upgrade to Zigbee firmware without an Aqara Hub? Thanks for your help.

Yes.

Reset the device, open the Aqara Home app, scan for devices, follow instructions.

Thanks, I’m testing, everything seems to be going well.

1 Like

Thanks, waiting for it..hangs on presence sometimes

Im just reading about this sensor now & went to buy one & i cant find it anywhere…ouch.

Same here with both, Zigbee and Thread. Has nothing to do with the protocol or driver and changing the settings doesn’t really help. We’re waiting for the firmware update that was promised a few weeks ago.

1 Like

Thanks!!! Waiting :grin:

Can I just use the current version and upgrade in place once the new driver version is available? Or should I just wait to save myself the hassle?

Of course! The driver will be updated automatically. The basic functionality is already there, of course, but some of the preferences are kind of experimental in the current version. They are also not individually written for debugging reasons.

Don’t expect an improvement to the Matter firmware/driver, though. The issue with the stuck presence is in both firmwares.

Is your driver available yet? I did try and create my own, and it worked out fine until it didn’t mine after a while, freezes and gets stuck with presence on. is your driver available yet. And would you be willing to share the source code if it works to see where i have gone wrong.
I am back on Z2M at the moment and would like to get this working in SmartThings

Um… yes? That’s what this thread is about?

I realised that, that’s why I was following it, but you mentioned an updated driver in a few weeks

I was hoping this was a firmware issue, i get the same with the driver i created