A while back, I tested and reviewed a battery-powered presence sensor by Tuya, white-labeled as model ZG-204ZM. This particular device features both a dedicated PIR motion sensor and a 24GHz mmWave radar, utilizing Zigbee as a communication protocol.
As one of the first battery-powered mmWave sensors to hit the market, it performed surprisingly well. However, some users reported their devices getting stuck in a constant ‘presence’ state. Resolving this usually required removing the batteries or, as some reported, cleaning the chip contacts inside the unit. I never encountered these issues myself, my sample has worked perfectly fine in Zigbee2MQTT from day one.

In this article, I’m reviewing a very similar device, the Tuya Zigbee Presence Sensor model ZG-204ZH. This is also a combo presence sensor with a PIR motion sensor and an mmWave radar, operating at 24GHz. However, this one can be powered by either two AAA batteries or a 5V USB-C cable instead of just batteries.
You can get it on only AliExpress [Link 1, Link 2, Link 3].
Teardown ZG-204ZH
The Tuya ZG-204ZH Presence Sensor ships in a generic white box containing the device itself, a user manual, a mounting bracket and two stickers for installation. You can choose to mount it without the rotating bracket and simply use the sticker on a flat surface.

This combo presence sensor can be powered by either USB-C at 5V or a set of AAA batteries mounted on the back. This is a great design choice, because even though the device operates on a conditional “PIR than mmWave” logic, Zigbee can be a power hog. Having the option to just wire the sensor is very welcome.
To clarify further, the mmWave radar spends its time sleeping until it get woken up by the PIR when motion is detected. Once its online, it continues to monitor the room for static presence until no one is present and the set fading time cooldown expires. Once it detects no presence, it goes back to sleep. Rinse and repeat.


Once I opened the sensor with a small screwdriver, I was able to examine the internals. The device consists of a PIR sensor mounted in the middle, a 24GHz mmWave radar on top, an illuminance sensor on the bottom, and a communication module below the PIR sensor. The PCB is quite clean and well-made and I did not notice anything I didn’t like.
As is standard practice, the PIR sensor is covered with a Fresnel lens for better detection, while the mmWave radar uses a single set of antennas: one for transmitting and another for receiving the wave to capture and measure the echo time.

The Tuya ZG-204ZH uses a pyroelectric infrared sensor marked as model ZG013S. Just like all PIR sensors, the ZG013S is a digital passive infrared sensor designed to detect significant motion by sensing changes in heat signatures within its field of view. This is the component that initially wakes-up and activates the more power-hungry radar when necessary.
The mmWave radar module is built around the Skyrelay RC2412 [Datasheet] chip which operates on the 24GHz frequency band to detect presence through radio waves. This active sensor emits signals that bounce off objects and return to the receiver so the device can calculate distance and identify even the slightest movements. The gold-plated patches visible on the white board serve as the transmitting and receiving antennas required for this operation.
A configuration with a single set of antennas might not appear very promising, but it is not a crucial flaw regarding performance. For reference, the mmWave radar in the Xiaomi XMOSB01XS Battery Presence Sensor uses the same chip and antenna setup, yet it still performs quite well. Remains to be seen.


The communication module is integrated on the board itself, with the main antenna laid out on the right side of the chip. This device uses the Tuya ZTU Module [Datasheet], which is built around the proprietary Z2 chip. This is a low-power 32-bit RISC microcontroller clocked at 48 MHz, featuring 512KB of Flash and 64KB of RAM, compliant with ZigBee 3.0 communication and sufficient power for processing sensor data.

Home Assistant Integration ZG-204ZH
The Tuya ZG-204ZH mmWave presence sensor is fully supported in Zigbee2MQTT and partially supported in ZHA. To pair it, you power it via the USB-C port of use a set of AAA batteries and press and hold the button for about 6 seconds until the LED starts blinking.
Zigbee2MQTT

Once the device is added to Zigbee2MQTT, it is identified as model ZG-204ZM with Zigbee manufacturer _TZE200_tyffvoij. While the model name is incorrect (it should be ZG-204ZH), it makes no difference for actually using this sensor as the endpoints are the same. However, do note that there is also a 4-in-1 version of the same device, with an added temperature sensor. If you happen to order that one, it will be identified as the HOBEIAN ZG-204ZH with an additional temp sensor.
It’s also important to note that it does not matter whether you are powering this via batteries or USB-C, it will always operate as an End Device in your mesh network instead of a router. Once paired, here’s what the sensor exposes in Zigbee2MQTT:

The exposes in Zigbee2MQTT are pretty self explanatory,
- Presence:Â Binary sensor On/Off, triggered by either motion or static presence
- Motion State: Motion sensor status with possible states:
none,small,large,static - 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:Â mmWave Sensor sensitivity from 0-10x
- Indicator: On/Off
- Motion detection mode: With possibility to use PIR only, mmWave only or a combination
- Motion detection sensitivity: PIR Sensor Sensitivity from 0-10x
- Illuminance (lux): Measured light level in lx
- Linkquality: Signal strength in LQI
ZHA

Integrating this sensor in ZHA brings nothing to the table except a single presence state binary sensor and an illuminance sensor. You don’t get any configuration entities for distance, sensitivity, or cooldown time. While the binary presence entity works properly, as it’s a combination of the PIR and mmWave sensor of the device, the ZG-204ZH is crippled in ZHA. To be honest, so are most devices (compared to Zigbee2MQTT), but that’s a different story.
The only way to fully utilize this device is to either develop a custom quirk for handling the end points properly or use Zigbee2MQTT. I have no interest in making a quirk, as device support isn’t the only issue I have with ZHA. Onwards to testing with Zigbee2MQTT.
Installation and Testing
As most presence sensors I test and review, I mounted the Tuya ZG-204ZH on top of my PC case, overlooking my office. Sauron held the sensor in place, while I played around and tinkered with various settings and different setups to determine how well does this device perform.

Initial motion detection
The initial detection is very fast, triggering instantly once you enter the field of view. This makes it a reliable automation trigger for controlling lights or any other time-sensitive automations. Since the binary presence entity automatically sets to ‘true’ whenever the motion state transitions from none to small, large, or static, both entities update at the exact same time and work equally well as triggers.
Static presence detection
While the available parameters allow you to set detection distance up to 10 meters and sensitivity to level 10, this 24 GHz radar works reliably up to 3.5-4 meters for static presence and up to 5-6 meters for PIR motion detection.
I tested these limits by orienting the sensor in various ways, entering its field of view from different angles, and sitting in front of it at varying distances. With the sensitivity set to 8, the sensor worked as advertised, detecting me sitting still at a distance of about 3.5 meters without false negatives.
Now, it is important to understand the behavior of the motion state entity, which reports none, small, large, or static. When there is no presence, the entity remains at none. When there is movement, it displays either large or small, depending on the intensity (e.g., walking in front of the sensor versus waving a hand).
However, when you are sitting still, the sensor rarely switches to static, instead maintaining the state at small or large. Even though static should theoretically be displayed when you are stationary, I have only seen it appear as a quick blip before reverting. This doesn’t really change how useful it is in automations, but it is worth noting so you know what to expect from this entity.
Furthermore, I discovered that the fading time (or presence clear time) cannot go lower than 10 seconds. Even though Zigbee2MQTT allows you to set it down to 0 seconds (instant clear), this is not applicable in practice. The lowest cooldown period for this device is 10 seconds, no matter how low you set it in Zigbee2MQTT.
Motion detection mode
As I’ve explained earlier, this device operates on a simple presence detection logic. The PIR sensor wakes up the mmWave radar, which takes over and detects static presence until the room is cleared, at which point it goes back to sleep according to your set fading time. If motion is detected, the PIR wakes up the radar again, rinse and repeat.
However, Zigbee2MQTT has got the values wrong. Instead of only_pir, only_radar, and pir_and_radar, these need to be only_radar, pir_and_radar, and pir_or_radar. There is no possibility to use the PIR sensor on this device alone and effectively turn it into a standard motion sensor.
Now, the difference between pir_and_radar and pir_or_radar is significant. The pir_and_radar mode requires both sensors to confirm presence simultaneously to trigger a state change, which is excellent for eliminating false positives (like a fan moving or curtains moving). In contrast, pir_or_radar will trigger if either sensor detects activity, prioritizing maximum sensitivity and speed at the cost of potential false triggers.
While the conditional operation logic remains the same (PIR wakes up the device, mmWave continues to detect), this mode requires both conditions to be met before the presence state changes. Therefore, the best method to use this device in Zigbee2MQTT is pir_and_radar.
Illuminance sensor
The illuminance sensor works properly by responding to light changes, though the reported values can be sporadic. For example, covering the sensor drops the reading to 1 lx but almost never reaches 0 lx. Even inside a pitch-black drawer, it briefly touched 0 before reverting to 1 lx. Furthermore, the scaling seems off: in a well-lit room, it floats around 2500 lx, but in direct sunlight, it caps at 3000 lx rather than boosting to the expected 10,000+ lx.
While the device can be used for automations as is, you will need to observe its behavior and specific reporting ranges to create reliable triggers according to your installation location. In my opinion, automating based on illuminance is highly overrated and unreliable, regardless of which specific sensor/device you choose to use.
Battery life and network analysis
Now, this is where things get tricky. Whether you are powering this device with batteries or via USB-C, its Zigbee update rates remain the same. It updates very frequently, which is bad news for powering this device with just two AAA batteries.
The culprit here is the idiotic illuminance sensor. Where there is no presence, the illuminance doesn’t change state at all, only updating when presence is detected. However, when there is presence detected and even if you haven’t moved the sensor one bit, the value updates every 3 seconds on average, sometimes faster. This kills the batteries without a doubt and you will have to replace them in three months at this rate.
Why someone thought illuminance needed such a frequent update rate, which cannot be changed btw, is beyond me. It is such an easy way to ruin an otherwise solid presence sensor. The fix here is to either cover the sensor with some tape or take the device out of its case and tweeze the sensor off completely. As I mentioned earlier, illuminance automations are overrated anyway. There are much better ways to achieve the same thing if you think about it.
Final Thoughts
All things considered, the Tuya ZG-204ZH is surprisingly decent for the price. The hardware is solid, with a clean internal layout and a very useful dual-power design. Being able to choose between standard AAA batteries or a permanent USB-C connection is a feature I wish more manufacturers would include. The combination of a PIR sensor for fast initial triggering and a mmWave radar for holding static presence is a reliable and proven system that works well, as long as you stay within its presence detection range.
In daily use, the sensor performs great for presence detection. The initial detection speed is instant thanks to the PIR, and the radar successfully keeps the lights on even when you are sitting completely still. While the “static” state reporting is a bit twitchy for the motion state entity (often jumping between “small” and “large” movement) the main presence entity is very stable. This is what ultimately matters for your automations, so the quirky reporting is easy to overlook.
Obviously, your experience will depend entirely on your Zigbee integration. If you use Zigbee2MQTT, you get a full set of options to tweak sensitivity, distance, and detection modes. If you are on ZHA, you are currently out of luck, as the integration is bare-bones and lacks the necessary configuration entities. For now, I can only recommend this device if you are running Zigbee2MQTT.
The biggest downside of this device is undoubtedly the illuminance sensor. While the sporadic lux readings are annoying, the update frequency is the real problem. It reports light level changes constantly, spamming your network and preventing the device from sleeping when presence is detected. If you run this on batteries, this behavior will drain them in a couple of months. It is a massive oversight that ruins the battery-powered potential of this sensor.
If you plan to power this device via USB-C, you can ignore the battery concerns completely. This defeats the purpose of this device of course, as there a much better options out there. In that case, the ZG-204ZH becomes a solid, affordable wired presence sensor. But if you must use batteries, be prepared to replace them often or physically disable the light sensor to stop the drain.










