For the past year or so, I’ve been heavily focusing on presence sensors, tinkering with anything that I could get my hands on. Some were great, some passable – but others complete trash. My experiences are summarized in the following article: Best and Worst Presence Sensors for Home Assistant.
About a month or so, I came across an interesting battery-powered presence sensor from the Tuya ecosystem, which appears to be reusing a familiar motion sensor case. This device has a dedicated PIR motion and 24GHz mmWave radar sensor, white labelled as model Tuya ZG-204ZM.
In this article, I’ll be dismantling the device, testing it’s performance and battery life and examining its potential to be used as a daily presence sensor. You can get it from AliExpress for ~$15, as it’s not any Amazon stores at the moment.
Technical Specification
- Model: ZG-204ZM
- Protocol: Zigbee 3.0
- Operating Voltage: DC 3.3V
- Illuminance: 0-3000lx
- Detection Sensors: PIR + mmWave 24GHz
- Detection Range (static): 0-6m
- Detection Range (moving): 0-10m
- Detection Angle (mmWave): ±60 °
- Battery Type: 2xAAA (LR03)
- Battery Life: ~6 months
- Price: ~$15 at AliExpress
Package Contents and Teardown
This battery-powered presence sensor ships in a simple box containing the device itself, a user manual and a sticker for installation. Because of shipping limitations, batteries are not included and you will have to supply them yourself.
It’s a fairly simple and familiar design, with a PIR Fresnel lens mounted on the front. There’s a small hole underneath for the illuminance sensor, which might prove to be too small for an accurate measurement.
On the backside, an articulating stand is installed whose flexibility is controlled with 3 screws. There are two holes at the top and bottom for mounting the device on a hard surface with a set of screws.
The device feels very light and empty, although it has a good shape and design for a presence sensor. All that matters is its performance, reliability and battery life.
This PIR and mmWave presence sensor is powered by a set of AAA batteries installed on the back. You need to slide the cover downwards to open the battery compartment, which is not so obvious at first. I highly suggest you look into getting rechargeable AAA batteries, reducing waste and saving money.
Opening the device was fairly easy, I simply pried it open with a tool from the Kaiweets set. The black PCB is quite rare and very interesting to me personally, since it’s a trademark to Aqara devices. The PIR sensors is unbranded and I couldn’t make out what model it was.
Zooming into the PCB and you can make out what powers this battery presence sensor. This ZG-204ZM model relies on the Telink TLSR8258 [Datasheet] module for communication, which is quite an interesting choice. It does not use one of the Tuya proprietary modules.
For reference, the TLSR8258 is the communication chip used in Bluetooth Xiaomi thermometers, for which I wrote guides about converting them to Zigbee. You can check out the tutorials for the LYWSD03MMC and CGDK2.
For mmWave presence detection, they opted for the 24GHz HLK-LD2410S [Datasheet] model from Hi-Link and its easy to see why. This sensor requires very little power to operate, drawing only 0.1 mA @ 1 Hz reported frequency. It’s also powered by 3.3V instead of 5V, which only bolsters its case as a suitable mmWave radar for battery-powered applications.
Despite being so “underpowered”, this sensor can detect movement up to 9 meters and static presence up to 6 meters. Combined with a PIR, which I suspect is the waking-up mechanism of the radar sensor, the ZG-204ZM has potential to be a reliable human presence sensor. Okay, trust but verify.
Home Assistant Integration
The device is fully supported out of the box in Zigbee2MQTT and partially in ZHA. To pair it to your coordinator, you need to hold the button above the batteries for around 5 seconds. The indicator LED will start blinking and the device will enter pairing mode.
If you are having issues during pairing, click the button every few seconds to keep the sensor alive.
Zigbee2MQTT
There is already a working converted in Zigbee2MQTT for the Tuya Zigbee ZG-204ZM Battery Presence Sensor. Once paired, it’s automatically identified as model ZG-204ZM by manufacturer _TZE200_2aaelwxk. The device type is set correctly as an EndDevice, unable to relay traffic from adjacent devices back to the coordinator.
It exposes the following entities in Home Assistant through Zigbee2MQTT:
- Presence: Binary sensor On/Off
- Motion State: Motion sensor status with possible states:
none
,small
,large
,static
- Illuminance (lux): Measured light level in lx
- Battery: Remaining battery level in %
- Fading time: Presence keep time in seconds from 0-28800s
- Static detection distance: Value in meters from 0-10m
- Static detection sensitivity: Sensor sensitivity from 0-10x
- LED indicator: On/Off
- Linkquality: Signal strength in LQI
All control parameters are functional and working as they should. I played around with the settings which rendered different results. The illuminance reading can also be calibrated from the Settings (Specific) menu as a percentual offset.
ZHA
This battery-powered presence sensor is partially working in ZHA, with no occupancy cluster and any configuration parameters exposed. While the illuminance reading is correct and updated, the Motion and Occupancy clusters are exposed as a single entity. The cluster is not responsive and unusable as is, clearing motion at random times and at random intervals.
Testing the ZG-204ZM
To test the performance and operation of this battery-powered PIR and mmWave sensor, I mounted the device in my office and did some tests in Zigbee2MQTT. The text bellow is everything I was able to learn while tinkering with the ZG-204ZM.
Detection and clearance speed
The ZG-204ZM detects motion instantly, with the presence
and motion
entities changing state at the same time. The motion entity changes to large
as soon as you enter the room, which is great for triggering automations. I never saw the entity change state to small
, no matter if you move or not, which is why I think it will not be able to differentiate between smaller and bigger movements.
Once the room is cleared, the motion entity changes to static
and then finally to none
. Until the motion entity changes to none
, the presence retains its state as True
. The fading time parameter is not respected when set under 30 seconds. If you set it to less than 30, it defaults and clears presence at 60 seconds. This cluster probably needs some additional work.
Detection range and sensitivity
The range and sensitivity parameters can be adjusted in Zigbee2MQTT and the operation of the device is heavily reliant on these settings. It actually surprised me that this battery powered presence sensor can detect movement at a range of 9 meters! For a large room, I found the optimal settings to be 6 meters and 6-7 sensitivity.
Since the mmWave radar (presence) is conditionally triggered by the PIR sensor (movement), it’s very easy to eliminate false triggers. The PIR sensor is very sensitive and will keep the radar sensor active even at the slightest movements.
Okay, about static presence.
I was able to deduct that the mmWave sensor is only active when the motion state is set to static
. When the motion state is large
, small
or none
, the mmWave sensor is sleeping to save battery. As soon as you stop moving, the motion state changes to static
while the presence remains True
. When you leave the room and the timer expires, both sensors change state to False
and none
respectively.
Sitting at my office desk with the sensor mounted at a window at about 2.5 meters, I did not experience a single false negative trigger. Actually very impressive performance from a battery-powered occupancy sensor.
About Battery life
The big question is how long will the batteries last? According to the mmWave radar specification sheet, the sensor requires very little power to operate. Combined with a PIR sensor and some clever operation logic, the manufacturer states a good set of AAAs will last 6 months.
At the moment, I do not have enough data to give a fact-checked estimate of the battery life. However, I have no reason to believe it will not, since my battery levels are reported at 100% after 4 days of constant use and tinkering. I also repaired the device to different coordinators multiple times, a process which needs a significant amount of juice. The 6 month battery life claim is most likely true. I will keep the device active and update this article in a couple of months.
Final Thoughts
This is the first battery-powered presence sensor I’m testing and I have to admit I am pleasantly surprised. I did not expect much, especially from a device coming from the Tuya ecosystem. The PIR and mmWave combo in this device appears to be working well and detect presence reliably.
The overall build quality is nothing special, but it does use a radar sensor from a well-known manufacturer (Hi-Link). I assume choices are limited for a battery-powered radar sensor, and the LD2410S was among the few that fit the requirements.
In the few days I tested this sensor, it gave me no false triggers of any kind. Like all presence sensors, the range and sensitivity parameters require some adjustments to operate correctly in your particular setup. I suggest you lower all parameters to their lowest values and slowly increase them until you get it to perform optimally. You will not get that fine-grain control found in DIY presence sensors or other ESPHome based devices like the Apollo MSR-1, but I do think this device can be used as a daily driver.
If you want to try out the battery-powered Tuya ZG-204ZM Presence Sensor, consider using one of our affiliate links bellow. You will be supporting SmartHomeScene at no additional cost to you.
Tuya Battery PIR + mmWave
Presence Sensor ZG-204ZM
AliExpress | AliExpress | AliExpress
United States | Canada | United Kingdom
Germany | Netherlands | Sweden
Spain | France | Italy
*If links fail to open, try disabling your AdBlocker.
Interesting device, but IMHO missing one significant measure as I see. All non-battery powered presence sensors I tested, were able to provide distance till the object. Maybe not so accurate, but still. So they would work in scenarios when need to run scenario when presence/motion within 1m from the radar. So batteries adding some shortcomings and from my perspective it’s kind of more precise motion sensor, than presence sensor. However, battery power is a huge benefit. Anyway, thank you for the review.
Great review!
What about the sensor’s field of vision? did you test it out?
Yes, it’s detects static presence about 60° horizontally
so 120° in total? what is the max range for the mmwave sensor at these angles? usually its much less.
Sooooo… Tempting! Makes me thinking going to Z2M from ZHA!
I’m developing a ZHA quirk, you can ghold out a few days. It will work with ZHA as well
This is great news, finally I can replace the many Aqara motion sensors that I have in locations without power, meaning the lights won’t go out when I’m sitting still.
Thanks for another great review.
I’m pretty disappointed with limited ZHA integration, although it might be more of the HA issue than the sensor itself.
It seems odd to me that with big ZHA push there are still so many instances of limited support for plenty sensors.
I’m working on the custom quirk, it will work in ZHA. Stay tuned
Thanks and appreciate your efforts.
I placed my order after your review. I hope it works for my restroom when I am on my throne :))) Also, I hope more such devices come up soon with better smaller designs. However, by far my favorite MMwave is the one with build in relay. I got 6 for all my rooms and hallways. I wish there was a way to stop my cat from triggering it 🙁
The best use case
Whooo nice finding!! Just what i was hoping for: https://smarthomescene.com/reviews/sonoff-presence-sensor-teardown-and-review-snzb-06p/#comment-10572
Like always, thanks for your great review!
Will it work with the ConBee II (deConz) ?
Yes, I see no reason why it shouldn’t.
Is there an existing driver for it (GitHub?) that someone has written to work with Hubitat?
Good review, thanks!
Did you ever experianced any problem in zigbee2mqtt were chaning fadeout-time didnt make any difference? My never reaches “static” mode but goes straight from large -> none.
Bought another one with your links, hopefully that will work better!
That’s weird, it should stay in static as long as its detecting presence. Which coordinator do you have?
Any advice on making this device usable? The mmWave radar in mine seems to be rubbish compared with my other Moes ones, I can set distance to 5m and sensitivity to max and be sitting 2m from it literally waving at it and the state will still change from Static to None – it’s almost like the settings aren’t propagating over properly (although the device still resets and flashes the led when I do change a setting)
Can you tell me which coordinator you are using? Device works well with CC2562 (UZG-01). Seems like a weird issue.
I’m using a ConBee II stick, plenty of other repeaters and a stable network. Weirdly I found having taken the batteries out and put them back in again it seemed to work as expected for a while, but then the same issues recurred. It’s as if the mmWave sensor itself is crashing after a while. I will continue to test!
Big fan of your site by the way, always enjoy your reviews which are always incredibly detailed and informative!
Thank you for the feedback.
Out of curiosity, have you updated the firmware of the Conbee II?
I’m not sure about this one, but newer devices have trouble with the Conbee II and its old chip.
Perhaps its time for a new coordinator (UZG-01) and turn the Conbee II into a Thread border router. 🙂
On further investigation – it seems like there is a bug in either the Z2M quirk or in the firmware itself. I am finding repeatedly that after removing and replacing the batteries the device performs as expected, responsive to very fine movements and not getting any false negatives. However as soon as I change one of the parameters – doesn’t seem to matter if it’s the distance, fade time, or sensitivity – the mmwave sensor seems not to detect anything and will automatically mark as ‘away’ after the fade time (even on max sensitivity/distance with me flapping a hand about). Strange.
I have followed your link to AliExpress and around £12 gets you a Pir only version and £26 gets a PIR plus mmwave version which is around $15 and $30.
Unfortunately, pricing on AliExpress is location dependent :/