My FP300 is extremely reliable now - no issues anymore.
By the way: the FP300 firmware update didn’t change the presence or motion attributes themselves. From my testing, the important Aqara/Lumi attributes are still there and still readable:
0xFCC0 / 0x0142 = presence
0xFCC0 / 0x014D = PIR motion
The problem seems to be that after the newer firmware, the device no longer reliably sends automatic reports for these manufacturer-specific attributes unless reporting is explicitly configured.
That explains the behaviour perfectly: manual reads still work, refresh still works, temperature/humidity/lux still work, but presence or motion can get stuck because the integration is waiting for reports that never arrive.
The fix in my SmartThings driver was not a timer workaround. I had to explicitly bind and configure reporting for the Aqara manufacturer cluster:
Cluster: 0xFCC0
Manufacturer code: 0x115F
Configure reporting:
0x0142 presence
0x014D PIR motion
Type: Uint8 / 0x20
Min interval: 0
Max interval: 300
Reportable change: 1
After doing that, the device started sending real attribute reports again, and presence/motion updates worked live instead of only after refresh.
So in my opinion, ZHA and Zigbee2MQTT need to make sure their FP300 support does the same thing:
Bind 0xFCC0 / manuSpecificLumi to the coordinator
Configure reporting for 0x0142 and 0x014D
Use manufacturer code 0x115F
Handle both read responses and attribute reports
For ZHA, this probably belongs in the FP300 quirk.
For Zigbee2MQTT, this belongs in the device “configure()” logic for the FP300 converter.
There is also a separate battery issue. The new firmware seems to report confusing battery values: standard Zigbee battery reads as “0”, while Aqara’s manufacturer value may show something like “12”. Aqara’s own app still says the battery is full, so that raw “12” should not simply be displayed as “12%”.
So the real issue is not that the device is “unsupported” or that the attributes are gone. The firmware appears to require explicit manufacturer-specific reporting configuration now. Without that, integrations can still read the values - but they don’t reliably receive live updates.