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
UPDATE 27.06.2024: Apparently, there are two different variants of this device with the same hardware.
_TZE200_2aaelwxk – Works great, does not get stuck, like in my review.
_TZE200_5b5noeto – Gets stuck at presence detected and has other issues.
Unfortunately, it’s not possible to tell which one you will get. This is my seller. Buy at your own risk.
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.
UPDATE 01.06.2024: It appears that users are having mixed experiences with this device. There may be hardware variations from different manufacturers, despite the devices looking identical. My sample works perfectly, as it does for about 50% of users. Buy at your own risk.
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
Thank you soooo much! Can’t wait for the update.
Hey just wondering if you’ve had any luck getting this working with ZHA? I’m not sure how quirks work.
I’ve just ordered and it’s expected to arrive by month end. Hopefully it’ll work by then.
looking forward to it.
I tried to migrate my whole ZHA to Z2M but I ran into so many problems I rolled back.
When/where/how it will be available in ZHA?
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 :/
I’m UK ingot it on amazon for £10 there’s many listing 4anging from £10-15
Yes, you are right. Like this one?
Fantastic review (and amazing site, it is quite fantastic for those who are building a smart home).
I know it is a cheap sensor, but since it has radar capability, is it possible to configure 2 different zones?
No, the LD2410S does not support detection zones.
Hi,
any progress for custom quirk?
Will you update this post?
I have bought a couple of these but am very disappointed to find that I’m unable to see any of the Z2M configuration options in my ZHA installation. Would your quirk (whatever a quirk is!) fix that?
Can confirm that these devices are pretty damn good, been comparing the performance versus my PIR sensor + dfrobot sen0395 mmwave sensors (running on EverythingPresenceOne ESPhome firmware) that I’ve been using for a long time and all things considered they detect presence nearly as accurately (without having to run a usb cable up the wall to power the thing!). Am in the process of transitioning all my rooms to these sensors!
I just received and installed it in my restroom. I was getting false negatives as it was over my head about 50 cm and it was going away when I was there. I changed the possition to be at about my chest level and so far so good is has been working nicely.
P.S. One new addition probably in the newest MQTT is that the fade time is down to 10 seconds instead of 30 which is much better. I wish I was able to go down to 1 second, but even 10 is fine. After I leave the restroom it turns the lights off and the fan withing 10-15 sec generally 🙂 Happy to use it in a place where no cable is possible!
Just got one of these and mighty confused about configuring it… like now mine has stuck as me being “home” for hours in a room I am not. Is there some sort “reset” as to it understand the room is empty (and then report on changes) or does it not work like that? Like I have an FPS2 and that one I can understand better at least and I can run that thing which sort of analyzed the room freshly.
Have you been able to fix it? I’m also facing the same situation as you, I’m frustrated because I can’t fix it
Try to disassemble the sensor and wipe off the flux in the place where the presence sensor is soldered to the chip. It helped me, after this exercise it works without failures.
https://imgur.com/a/5pZtOlQ
Tried your way but didn’t change anything
Hi, I have bought this sensor since day 1 it launched in China. I have the same exact issue whereby it will never reach None state. As I try pry open using a test pen, I immediately clean the area as mention and also the 2 golden pad. I bring back to my own house to try and it work like a charm. Now I may need to monitor any false detection for a day as I am not at my home till tmlr. Thanks guy!
I had tried to clean the 5 contacts as mention in the other channel. It works when the device is dismantle with no cover. Once I install back the cover, it will not work properly anymore. It will always stuck at Presence state.
I just found this new version – https://s.click.aliexpress.com/e/_DmandIj
Do you think you can review it? 🙂 thanks
Yes, I have it Alex.
I will dedicate some time to it and test it out.
Just got one of these and mighty confused about configuring it… like now mine has stuck as me being “home” for hours in a room I am not. Is there some sort “reset” as to it understand the room is empty (and then report on changes) or does it not work like that?
I have similar issues with some of those sensors. I bought 4 and 2 of them seem to never reset the motion state from “large” to “none”.
I bought 4 of these based on the strength of this review. Unfortunately I have the same problem others have posted here where after some amount of time, usually less than a day, they get “stuck” reporting presence. After pulling the batteries and restarting, they’ll work for a few hours, maybe half a day, then I’ll see that the motion state never changes from ‘large’ and the presence state never turns off.
Another oddity is that they won’t report presence state until I set the distance and sensitivity. Until then, they report presence state of Null.
That’s very odd behavior. My sample has been working flawlessly, no hiccups whatsoever.
See this image for the past week:
Its mirroring the states across both entities correctly and has never gotten stuck.
Now that I’ve had a couple days to run all 4, I see that I’m 50/50 on working sensors.
https://imgur.com/0MNIBAa
Same here. I bought a 2 pack.
One sensor works okay ( it’s in my garage, though presence only seems to work when set less than 4m, regardless of sensitivity value – so maybe it’s still not totally working correctly…)
The other sensor doesn’t work at all. When distance is configured lower than 2m, presence goes straight from large to none. Configured greater than 2m, presence never leaves static.
Quality control seems pretty poor.
Hi! I ran into the same problem that many people write about: the sensor freezes in a state of constant “presence”. I managed to solve it. I disassembled the sensor and wiped the flux from the chip in the place where the contacts of the presence sensor are soldered.
I also found the motion sensor has bad soldering (it fell out). Resoldering and cleaning did the job (so far). Logic tells me that when motion ‘freezes’, presence detection will no longer work.
How id you resolder the PIR? I was afraid to pull the plastic shroud that holds the fresnel lens so I don’t know if the PIR is an SMD or not
https://imgur.com/a/5pZtOlQ
I am very excited I found another battery powered mmwave sensor, and the interesting part is from Xiaomi! This will be their 3rd mmwave sensor and their 1st battery powerd! Do you think you can get a sample of it and test it for us: Here is the video – https://youtu.be/gWClx7QCep4
What bothers me is this line: “Notably, the sensor is advertised as being able to accurately detect people even when they are not moving, as long as there is constant lighting.”
Here is the whole article: https://www.gizmochina.com/2024/05/13/xiaomi-people-presence-sensor-specs-price/
any progress with ZHA support?
Another brand new mmwave sensor. I would love to see it reviewed by you!
https://www.aliexpress.com/item/1005006412041826.html
🙂 Thanks
Location Germany:
“Unfortunately, this item is currently not available at your location.”
Please provide details of the device you found.
I’ve managed to find a quirk for this I’ve set up a dir for it and linked it in my configuration.yaml and put true for quirks, reset HA, removed and reconnected and it can’t get it to work it doesn’t show that its using the quirk.
https://gist.github.com/vinzent/2cd645b848fd3b6a0c3e5762956ec89f#file-zg-204zm-py
This quirk merely converts the Motion cluster to an Occupancy cluster with the same binary states.
Thats true. It’s my first quirk. At least it seems I can set the fading time , detection senisitivy and static detection distance by the “Manage zigbee device” functionality of ZHA. Just don’t know if it really works. 😉
Great article! However, I’m encountering some difficulties and I’m not quite sure why this is problematic.
I’ve purchased three units of the Model: ZG-204ZS/ZG-204ZM. But the pairing doesn’t seem to work as it should.
They are detected quickly, but are displayed as Model: ZG-204ZL, which means there’s no presence sensor included…
Do you have any idea what I might be doing wrong?
I have the Sonoff 3.0 Model P configured with my Zigbee2MQTT.
Any assistance would be greatly appreciated!
You bought the PIR-only version by mistake.
Doh!
I think you are right….
Thank you
Hi,
Where can i download the quirk for this device?
Thank you for the review and the quirk!
I just received three units from AliExpress.
They are described as:
Tuya Zigbee Human Presence Detector Smart Human Body PIR Sensor Motion Microwave Radar Detector Works With Alexa Google Home
ZHA will recognize it as MS01 by zbeacon.
Funtionality is that of a PIR only. Has anyone seen this?
I suppose I could pry the little device open to find a mmWave radio.
Hi
I made a hack of a quirk that at least exposes the configuration parameters as numbers. I made it part of the ts0601.py, I have not submitted it to HA because it’s a hackjob and I’m not sure if the code is good enough. But it works for me and is enough for me so if you can use it, here’s the link:
https://github.com/mikosoft83/ha_stuff/blob/master/ts0601_motion.py
I tried adding it but I’m struggling to get it to use the quirk how do i do this?
My experience with this unit is that it generally works well (Z2M on Sonoff P dongle) with one big problem. Minor issue is the 30s fade time but I can live with it (setting it shorter makes it 60s?). The biggest issue I have is the way it lies about the battery life/level. I have mine in the downstairs toilet, on a typical day like yesterday it got triggered 17 times. The last set of batteries lasted 2-3 weeks! And worse, it lies – it stays at 100% battery all the time until the last day when it drops to 10% for 12 hours, then 5% for 12 hours then dies. This is the second set of batteries and same behaviour both time. I can’t recommend this for any use case with regular traffic – might be OK in a room you don’t go into every day.
I saw this article and decided to buy it. It arrived today and I’ve put it in my office next to my Aqara FP1 to compare the performance before I put it in the bathroom.
I must say this is working excellent for me so far. Unlike others have reported here, it changes from motion to ‘static’ or ‘static’ to ‘none’ just fine with Z2M.
This is a game changer for where I don’t want to drag a power cable like bathroom or hallway. I’ll be getting a few more of these for sure.
Also bought you a Coffee because I love this blog, your tests are incredibly helpful and it’s my No 1. source to keep updated with what’s new out there.
Please keep up the good work 🙏
Hey, thank you so much for the support!
Make sure you test the battery life down to replacement first. It may not take as long as you think because the 100% battery level is probably a lie. See my comment above.
Hi !
How reliable do you think the light measurement part is? Do you think show the real value?
I have a Xiaomi light detector, it follows the lux value well when it shows 500lux on this 2800lux . On Xiaomi 1200lux this device show the max 2999 lux.
I noticed that, it gets a little light, it moves between a very narrow range near the maximum value.
If I set calibration, it still measures within narrow limits.
I would not rely on the illuminance reading of this sensor.
Well this is my experience with this device – It sets presence to Home when powered on and stays in that state until you remove the battery and put it back, where is stays as Away until it detects presence or movement.
The Motion state entity switches between static and large depending on human presence. It never goes to None for me so I can’t even kludge up some usage for it with the erraneous presence value.
Opening up to clean the flux doesn’t seem to help. It’s dry and wiping it doesn’t make a difference.
Luckily it’s cheap, but this is sadly not recommended from me.
I bought two of these to try out from your 2nd AliExpress affiliate link (“haozee Official Store”). They took exactly two weeks to arrive to me in USA.
I’ve been testing them for several hours so far today. After some fiddling with sensitivity and range, I’m happy to report that they are accurate with no false negatives thus far!
Zigbee2MQTT reports Zigbee Model=TS0601, Zigbee Manufacturer=_TZE200_kb5noeto (one character off from the one you mentioned “Gets stuck at presence detected and has other issues”), Manufacturer=Tuya, Model=ZG-204ZM. No issues getting stuck on Presence Detected etc.
If all goes well with more testing, I’ll probably roll the dice and order some more from the same seller.
Could you come back after 3/4 weeks and update on battery level?
I’ll try to remember! So far they’re all still at 100% after 5 days. Like others here, I suspect it just always reports 100% until it dies.
The very first one I bought elsewhere confirm having the famous forever presence issues.
I bought another one from my country Lazada seller which actually delivered from China.
It works perfectly.
I immediately order another 3 more which arrive yesterday. All 3 are working properly too.
The only different is the SmartLife device UI is very different from the first problematic one. I guess there is a hardware change in the latter batch.
The newer batch seem able to set Presence Keep Time as 10sec as all my 3 new set is able to do so.
Yeah, I got _TZE200_kb5noeto and it does not operate reliably. I can confirm… I put it in the bathroom and I sometimes get false triggers when nobody is in there.
PS. The device has a firmware v. 0122052017 and now has some more entities (additionally you can set Motion detection mode [only_pir, pir_and_radar, only_radar] and Motion detection sensitivity [0-10]).
I will try to get another one from your link 🙂 and see if I get the better one.
PS. I got mine from “haozee Official Store”.
Some problem here. I too got mine from “haozee Official Store”.
Hey guys, how you check which variant is the device?
_TZE200_2aaelwxk
_TZE200_5b5noeto
_TZE200_2aaelwxk
I mean I am using smart Life app and I do not know how to check which variant is my current device. Is there a way to see wat is your hardware variant?
I didn’t bother with their app, but the device page in Zigbee2MQTT (first screenshot in this review under the “Zigbee2MQTT” section) shows all of that info. Not sure about ZHA.
I got mine from Lazada Haozee too. So far all working.