Thank you for providing the logs! They are very helpful, and I can now replicate the Zigbee messages sent by your device. I will notify you when an update is available in the coming days.
The complexity is coming from this 'Work Mode' (represented by the 'switch' attribute in the last version - we should change it to something else, probably 'Operation Mode' ?)
I believe that the 'auto' mode is designed for basic light control, where the lights are wired and operated by the built-in relay. In Hubitat, we should use the 'manual' mode, as it allows the hub's Rule Machine (RM) or lighting apps to manage the lights based on presence and motion detection.
So, make all your further tests in ''manual' mode ('Switch On Time' value should be irrelevant in this mode).
Can you use the setPar() command to test changing the fadingTime and the two different sensitivity settings individually? These are the most important settings (together with the maximumDistance).
Hi Krassimir,
I continue to test in ''manual' mode ('Switch On Time' value should be irrelevant in this mode) but this appears to stop some operation of the sensor, or the sensors reporting.
If I use the [setPar() command] to change a parameter like 'radarSensitivity' then the changed data will not appear in 'Current State', unless the 'Manual/Auto' switch is toggled & saved.
With the mode set as 'Manual' - I have also seen random data appear in 'fadingTime' such as -264 and I saw that the sensor stopped reporting after some hours.
I really do not understand what 'fadingTime' is supposed to be doing. I thought it was a time period that was applied, once the sensor stopped detecting motion but unless the sensor is starting this 'fadingTime' before it sends 'Inactive' I don't think it's applying a fixed time period..
Hi,
I finally had time to do some testing too, updated driver to 4.2.1 and json to 1.0.2 and i'm kinda seeing the behaviour @njanda is seeing.
Does your presence sensor behave correctly in detecting presence?
I finally had time to test the sensor in a real environment and it's barely detecting large movement (only when really close to it) and both sensitivity parameters change but it seems they do nothing. Plus, it behaves more like a movement sensor than a presence sensor: if i stand still it stops detecting me almost immediately.
Had a LINPTECH sensor in the same position and it was working flawlessly.
Unless there's some kind of magic in the parameters settings, i guess that this mmwave sensor is kinda bad.
As a last resort, i think i will try with a tuya hub and see if it starts behaving differently, plus i can sniff the datapoints in case they are not like the ones in here : zigbee-herdsman-converters/src/devices/neo.ts at master · Koenkk/zigbee-herdsman-converters · GitHub
@njanda done some more testing and my device is working like it should, even illuminance is sent according to the table (in lux steps, not actual lux).
The only strange thing that got me previously was that sensitivity is working backwards, where 0 is more sensitive and 7 is very very low.
I was making the assumption that the higher the value the higher the sensitivity and got caught in a loop.
@kkossev The only issue now is that the only effective way to be sure that a parameter is actually set on the device is the setPar function, cause saving preference for some strange reason makes this device not setting all preferences.
I will collect more logs and paste in here later.
Andrea,
Yes my detector is reliable at detecting presence. Sometimes crazy sensitive ! Catching my dog yawning in his bed 5m behind me while I'm experimenting with settings.
Able to detect large movements (stand up) as well as slight finger movement on mouse but what I'm noticing is that this movement detection, seems to change with "time since last detection". I suspect it takes a large movement to 'wake' the sensor and then after that it is in a 'watch for small movement" mode, or such.
It's great that you also think the sensitivity is reversed because I've kept doubting myself but then my testing would always suggest it again.
I'm not seeing luminance data coming through at all. Steps of Lux would probably work for me, otherwise I will just use 'time of night' to alter my bathroom light dimmer. (I hate 100% lights on at 3am !)
Here's a LOG of the detector being added HERE
Hi, kkossev
Long time no see. Is it possible to register a new device now?
Device Data
Show raw names
Application 93
Endpoint Id 01
Manufacturer _TZE200_kb5noeto
Model TS0601
Tuya Version 2.1.3
Summary
dev:2192025-11-20 07:18:46.076 PMinfommMot updateFromGitHub: Performance - Total: 478ms
dev:2192025-11-20 07:18:46.047 PMinfommMot updateFromGitHub: Successfully uploaded deviceProfilesV4_mmWave.json to Hubitat local storage, 9ms, 108537 bytes
dev:2192025-11-20 07:18:46.035 PMdebugmmMot updateFromGitHub: JSON Metadata - Author: kkossev, Device Profiles: 31
dev:2192025-11-20 07:18:46.034 PMdebugmmMot updateFromGitHub: JSON Metadata - Version: 4.0.9, Timestamp: 2025-10-19 8:00 PM
dev:2192025-11-20 07:18:45.994 PMinfommMot Successfully downloaded deviceProfilesV4_mmWave.json from GitHub, 108535 characters in 390ms
dev:2192025-11-20 07:18:45.986 PMdebugmmMot updateFromGitHub: Response status: 200
dev:2192025-11-20 07:18:45.603 PMdebugmmMot updateFromGitHub: HTTP params: [uri:https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Tuya%20Zigbee%20mmWave%20Sensor/deviceProfilesV4_mmWave.json]
dev:2192025-11-20 07:18:45.601 PMinfommMot updateFromGitHub: downloading deviceProfilesV4_mmWave.json from https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Tuya%20Zigbee%20mmWave%20Sensor/deviceProfilesV4_mmWave.json
dev:2192025-11-20 07:18:45.595 PMdebugmmMot oneTimeUpdateFromGitHub: attempting to download deviceProfilesV4_mmWave.json and update product profiles from GitHub url https://raw.githubusercontent.com/kkossev/Hubitat/development/Drivers/Tuya%20Zigbee%20mmWave%20Sensor/deviceProfilesV4_mmWave.json...
dev:2192025-11-20 07:18:45.587 PMdebugmmMot received device model TS0601
dev:2192025-11-20 07:18:45.585 PMdebugmmMot Basic cluster: ZCLVersion = 03
dev:2192025-11-20 07:18:45.580 PMdebugmmMot received device manufacturer _TZE200_kb5noeto
dev:2192025-11-20 07:18:45.562 PMdebugmmMot parse: descMap = [raw:6DB101000064040042105F545A453230305F6B62356E6F65746F0000002003010000209305000042065453303630310700003003FEFF86, dni:6DB1, endpoint:01, cluster:0000, size:64, attrId:0004, encoding:42, command:01, value:_TZE200_kb5noeto, clusterInt:0, attrInt:4, additionalAttrs:[[value:03, encoding:20, attrId:0000, consumedBytes:4, attrInt:0], [value:93, encoding:20, attrId:0001, consumedBytes:4, attrInt:1], [value:TS0601, encoding:42, attrId:0005, consumedBytes:9, attrInt:5]]] description=read attr - raw: 6DB101000064040042105F545A453230305F6B62356E6F65746F0000002003010000209305000042065453303630310700003003FEFF86, dni: 6DB1, endpoint: 01, cluster: 0000, size: 64, attrId: 0004, encoding: 42, command: 01, value: 105F545A453230305F6B62356E6F65746F0000002003010000209305000042065453303630310700003003FEFF86
dev:2192025-11-20 07:18:45.524 PMinfommMot is now online!
dev:2192025-11-20 07:18:45.523 PMinfommMot healthStatus changed to online
dev:2192025-11-20 07:18:44.250 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.248 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.245 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.244 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.242 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.240 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.237 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.236 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.232 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.230 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.227 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.226 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.223 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.222 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:44.215 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:44.211 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:43.733 PMdebugmmMot no refresh() commands defined for device type mmWaveSensor
dev:2192025-11-20 07:18:43.732 PMdebugmmMot no customRefresh method defined
dev:2192025-11-20 07:18:43.731 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:43.729 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:43.727 PMdebugmmMot refreshFromDeviceProfileList()
dev:2192025-11-20 07:18:43.726 PMdebugmmMot customRefresh()
dev:2192025-11-20 07:18:43.724 PMdebugmmMot customcheckDriverVersion()
dev:2192025-11-20 07:18:43.720 PMinfommMot tuyaVersion set to 2.1.3
dev:2192025-11-20 07:18:43.712 PMwarnmmMot UNKNOWN mmWave model/manufacturer TS0601/_TZE200_kb5noeto
dev:2192025-11-20 07:18:43.710 PMinfommMot UNKNOWN mmWave model/manufacturer TS0601/_TZE200_kb5noeto
dev:2192025-11-20 07:18:43.707 PMdebugmmMot customInitEvents()
dev:2192025-11-20 07:18:43.705 PMdebugmmMot resetCooldownFlag: cooldown period ended, can attempt profile loading again
dev:2192025-11-20 07:18:43.686 PMdebugmmMot customInitializeVars(false)
dev:2192025-11-20 07:18:43.684 PMdebugmmMot initEventsDeviceProfile(false) for deviceProfile=UNKNOWN DEVICE?.device?.powerSource=null ps.isEmpty()=null
dev:2192025-11-20 07:18:43.681 PMinfommMot setDeviceNameAndProfile: deviceName=UNKNOWN : device model TS0601 manufacturer _TZE200_kb5noeto was not found!
dev:2192025-11-20 07:18:43.679 PMdebugmmMot setDeviceNameAndProfile: deviceName=UNKNOWN model=TS0601 manufacturer=_TZE200_kb5noeto previousProfile = UNKNOWN
dev:2192025-11-20 07:18:43.674 PMinfommMot setDeviceNameAndProfile: unknown model null manufacturer null previousProfile = UNKNOWN -> setting state.deviceProfile = UNKNOWN
dev:2192025-11-20 07:18:43.671 PMdebugmmMot setDeviceNameAndProfile: returned deviceName=UNKNOWN deviceProfile=UNKNOWN previousProfile = UNKNOWN
dev:2192025-11-20 07:18:43.669 PMwarnmmMot getDeviceNameAndProfile: NOT FOUND! deviceName =UNKNOWN profileName=UNKNOWN for model TS0601 manufacturer _TZE200_kb5noeto
dev:2192025-11-20 07:18:43.668 PMdebugmmMot getDeviceNameAndProfile: model=TS0601 manufacturer=_TZE200_kb5noeto profiles=false
dev:2192025-11-20 07:18:43.665 PMdebugmmMot ensureProfilesLoaded: in cooldown period, skipping profile load attempt
dev:2192025-11-20 07:18:43.661 PMdebugmmMot setDeviceNameAndProfile: calling getDeviceNameAndProfile(null, null) previousProfile = UNKNOWN
dev:2192025-11-20 07:18:43.659 PMdebugmmMot ensureProfilesLoaded: in cooldown period, skipping profile load attempt
dev:2192025-11-20 07:18:43.614 PMinfommMot ensureProfilesLoaded: failed to load device profiles (loadProfilesFromJSON() failed)
dev:2192025-11-20 07:18:43.612 PMwarnmmMot startCooldownTimer: starting cooldown timer for 30000 ms to prevent multiple profile loading attempts
dev:2192025-11-20 07:18:43.500 PMinfommMot loadProfilesFromJSON: file deviceProfilesV4_mmWave.json not found - one-time attempt to download from GitHub...
dev:2192025-11-20 07:18:43.498 PMwarnmmMot loadProfilesFromJSON: lastReadFileError = status code: 404, reason phrase: Not Found for deviceProfilesV4_mmWave.json g_OneTimeProfileLoadAttempted=false
dev:2192025-11-20 07:18:43.496 PMwarnmmMot loadProfilesFromJSON: readFile returned null for deviceProfilesV4_mmWave.json
dev:2192025-11-20 07:18:43.494 PMerrormmMot Connection Exception: status code: 404, reason phrase: Not Found
dev:2192025-11-20 07:18:43.147 PMdebugmmMot getProfilesFilename: using STANDARD JSON: deviceProfilesV4_mmWave.json (lastJSONSource=null)
dev:2192025-11-20 07:18:43.145 PMdebugmmMot ensureProfilesLoaded: loading device profiles...(isEmpty=true, g_profilesLoaded=false)
dev:2192025-11-20 07:18:43.133 PMdebugmmMot deviceProfileInitializeVars(false)
dev:2192025-11-20 07:18:43.114 PMdebugmmMot customInitializeVars()... fullInit = false
dev:2192025-11-20 07:18:43.101 PMdebugmmMot motionInitializeVars()... fullInit = false
dev:2192025-11-20 07:18:43.087 PMdebugmmMot batteryInitializeVars()... fullInit = false
dev:2192025-11-20 07:18:43.078 PMwarnmmMot} healthStatus changed to unknown
dev:2192025-11-20 07:18:43.052 PMdebugmmMot InitializeVars()... fullInit = false
dev:2192025-11-20 07:18:42.999 PMinfommMot Updated to version 4.2.1 2025/10/19 8:26 AM (TS0601 _TZE200_kb5noeto) (C-7 2.4.3.158) from version unknown
dev:2192025-11-20 07:18:42.997 PMdebugmmMot checkDriverVersion: updating the settings from the current driver version null to the new version 4.2.1 2025/10/19 8:26 AM (TS0601 _TZE200_kb5noeto) (C-7 2.4.3.158)
dev:2192025-11-20 07:18:42.988 PMdebugmmMot refresh()... DEVICE_TYPE is mmWaveSensor model=TS0601 manufacturer=_TZE200_kb5noeto
dev:2192025-11-20 07:18:42.870 PMinfommMot sent device configuration
dev:2192025-11-20 07:18:42.867 PMdebugmmMot configure(): sent cmds = [he raw 0x6DB1 1 0x01 0x0000 {10 00 00 04 00 00 00 01 00 05 00 07 00 FE FF}, delay 200]
dev:2192025-11-20 07:18:42.864 PMdebugmmMot sendZigbeeCommands: sent cmd=[he raw 0x6DB1 1 0x01 0x0000 {10 00 00 04 00 00 00 01 00 05 00 07 00 FE FF}, delay 200]
dev:2192025-11-20 07:18:42.828 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.819 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.822 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.819 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.780 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.778 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.786 PMdebugmmMot configureDevice(): cmds=
dev:2192025-11-20 07:18:42.785 PMdebugmmMot no customConfigureDevice method defined
dev:2192025-11-20 07:18:42.783 PMinfommMot configureDevice...
dev:2192025-11-20 07:18:42.776 PMdebugmmMot initializeDevice(): cmds=
dev:2192025-11-20 07:18:42.774 PMdebugmmMot no customInitializeDevice method defined
dev:2192025-11-20 07:18:42.772 PMinfommMot initializeDevice...
dev:2192025-11-20 07:18:42.769 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.766 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.766 PMdebugmmMot aqaraBlackMagic() was SKIPPED
dev:2192025-11-20 07:18:42.737 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.739 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.737 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.735 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.732 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.728 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.726 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.721 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.690 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.688 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.685 PMinfommMot tuyaBlackMagic()...
dev:2192025-11-20 07:18:42.684 PMwarnmmMot populateCurrentProfile: cannot populate profile for 6DB1 - profile name is UNKNOWN
dev:2192025-11-20 07:18:42.677 PMdebugmmMot populateCurrentProfile: populating profile for device 6DB1
dev:2192025-11-20 07:18:42.670 PMdebugmmMot configure(): settings: [logEnable:true, txtEnable:true]
dev:2192025-11-20 07:18:42.657 PMinfommMot configure()... cfgCtr=1
dev:2192025-11-20 07:16:59.435 PMinfommMot illuminance is 1090 Lux
dev:2192025-11-20 07:15:00.273 PMinfommMot illuminance is 1079 Lux
dev:2192025-11-20 07:14:59.442 PMinfommMot is inactive
dev:2192025-11-20 07:14:32.978 PMinfommMot illuminance is 1081 Lux
dev:2192025-11-20 07:14:30.082 PMinfommMot illuminance is 932 Lux
dev:2192025-11-20 07:14:28.106 PMinfommMot is active
dev:2192025-11-20 07:13:57.380 PMinfommMot illuminance is 1076 Lux
dev:2192025-11-20 07:13:56.546 PMinfommMot is inactive
dev:2192025-11-20 07:12:02.395 PMinfommMot battery is 100%
dev:2192025-11-20 07:12:02.374 PMdebugskipped:[raw:catchall: 0000 8021 00 00 0040 00 6DB1 00 00 0000 00 00 BA00, profileId:0000, clusterId:8021, clusterInt:32801, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:6DB1, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[BA, 00]]
dev:2192025-11-20 07:11:59.613 PMwarnconfigure...
dev:2192025-11-20 07:11:47.460 PMinfommMot illuminance is 1075 Lux
dev:2192025-11-20 07:11:45.729 PMinfommMot illuminance is 1073 Lux
dev:2192025-11-20 07:11:41.918 PMinfommMot illuminance is 1 Lux
dev:2192025-11-20 07:11:39.334 PMinfommMot illuminance is 258 Lux
dev:2192025-11-20 07:11:11.017 PMinfommMot illuminance is 1100 Lux
dev:2192025-11-20 07:11:05.963 PMinfommMot illuminance is 1271 Lux
dev:2192025-11-20 07:11:02.168 PMinfommMot battery is 75%
dev:2192025-11-20 07:11:01.340 PMinfommMot illuminance is 868 Lux
dev:2192025-11-20 07:11:00.518 PMinfommMot illuminance is 869 Lux
dev:2192025-11-20 07:10:57.664 PMinfommMot illuminance is 872 Lux
dev:2192025-11-20 07:10:52.106 PMinfommMot illuminance is 872 Lux
dev:2192025-11-20 07:10:50.278 PMinfommMot is active
dev:2192025-11-20 07:10:43.202 PMinfoHuman Presence Sensor illuminance is 847 Lux
dev:2192025-11-20 07:10:43.082 PMdebugskipped:[raw:catchall: 0000 8021 00 00 0040 00 6DB1 00 00 0000 00 00 B600, profileId:0000, clusterId:8021, clusterInt:32801, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:6DB1, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[B6, 00]]
dev:2192025-11-20 07:10:41.569 PMinfoHuman Presence Sensor battery is 100%
dev:2192025-11-20 07:10:41.569 PMinfoHuman Presence Sensor battery is 100%
dev:2192025-11-20 07:10:41.469 PMdebugskipped:[raw:catchall: 0000 8021 00 00 0040 00 6DB1 00 00 0000 00 00 B600, profileId:0000, clusterId:8021, clusterInt:32801, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:6DB1, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[B6, 00]]
dev:2192025-11-20 07:10:38.517 PMw
arnconfigure...
Hi @jw970065 ,
The latest version of this driver requires an initial download of the deviceProfilesV4_mmWave.json from GitHub, and you have done it, as I can see at the end of the attached log files :
Your device TS0601 _TZE200_kb5noeto is not new, it should already be working with this driver.
Test again and let me know.
I have confirmed that this device works 'Human Presence Sensor' and 'Tuya Zigbee mmWave Sensor'.
But it wasn't possible to set various values,
I've tried it a few times and it's become possible.
Thank you.
Sorry replied wrong. Deleted message and replied correctly.
Hi @kkossev,
One of my Tuya Zigbee Human Presence Detectors recently joined the great device pile in the sky, so I purchased a new one. When I paired the new one, it didn’t pick up the correct driver—actually, it didn’t pick up any driver.
I checked my other two sensors and realized this was one of those cases where I had to manually select the correct driver (which, in classic fashion, I had completely forgotten). I switched it to Tuya Zigbee mmWave Sensor, hit Configure to load defaults, and then headed to Preferences to select the right model… only to discover it wasn’t listed.
Naturally, I assumed I must be behind on updates. I ran HPM, didn’t get an update, and that’s when it dawned on me that I had absolutely lost track of the proper steps to match this sensor to the correct driver. A quick dive into the forum and GitHub did not help—if anything, I managed to thoroughly confuse myself.
If you could kindly set me straight, I’d be very grateful. Below are my details (hopefully correct… unless I messed those up too—wouldn’t be my first time
).
Tuya Zigbee mmWave Sensor
Driver Version (per HPM): Tuya Zigbee mmWave Sensor v3.5.1
Current States
battery 100
batteryVoltage 3
healthStatus online
illuminance 834
lastBattery Mon Nov 24 06:12:14 EST 2025
motion inactive
powerSource unknown
Status clear
State Variables
deviceProfile UNKNOWN
deviceType mmWaveSensor
driverVersion 3.5.1 2025/04/25 10:29 PM (ZG-204ZM HOBEIAN) (C-7 2.4.3.158)
health {"checkCtr3":0,"offlineCtr":0}
lastRx {"timeStamp":"2025-11-24 07:40:51.681","batteryTime":1763982734259,"illumTime":1763988051698}
lastTx {}
motionStarted 2025-11-24 06:11:09.862
states {"isRefresh":false,"isDigital":false,"isPing":false}
stats {"cfgCtr":3,"bVoltCtr":4,"battCtr":4,"rxCtr":140,"txCtr":0,"illumCtr":49,"rejoinCtr":1}
Device Data
Application 94
Endpoint Id 01
In Clusters 0000,0003,0500,EF00,0001,0400
Manufacturer HOBEIAN
Model ZG-204ZM
Software Build 0112112025
I’m sure I’m missing one or two obvious steps (my specialty), so any guidance or a quick refresher on how to ensure I’m using the correct driver would be greatly appreciated.
Thanks in advance for your help!
Hi David,
I’ve updated the first post in this thread so others looking for information on how to update the driver can easily find it as well :
Searching the forum for "ZG-204ZM" shows some information,
and one of the links shows that your device may be natively supported in HE!
Can you please try the HE inbuilt driver and let us know whether it works OK with your device?

The name of the system driver is "Human Presence Sensor"
Thank you so much for the detailed response — I really appreciate you taking the time to update the thread and point me in the right direction.
I followed your steps as suggested. I first cleared out the Current States and State Variables using the "device" driver as I always do when replacing a driver. After that, I switched over to the Human Presence Sensor system driver, closed and reopened the device page, and then ran both Configure and Refresh (with another open/close cycle just to be sure everything loaded cleanly).
These were the results I saw:
Based on what I’m seeing, it doesn’t appear that the built-in driver is fully compatible with this particular device — at least not with the model I have.
One quick question for you:
Does the 4.2.x driver you’ve written include the correct fingerprint for this device, or should I be selecting a specific model/variant after updating?
Thanks again for all your work on this. Your guidance saves a lot of head-scratching on my end!
ZG-204ZM model is explicitely shown as supported in Hubitat release notes :
Is this a battery-powered Zigbee device? If so, clicking commands in the device page often does nothing, as these devices spend most of their time in a sleep state with the radio turned off, so they usually won’t respond until they wake up and check in.
The most reliable way to properly configure sleepy Zigbee devices is to pair them again with your hub without deleting the existing device. Also, enable Debug logging in the driver — it can provide useful information during the process.
I’m not sure yet whether this new device will work with the Tuya driver. When searching for “ZG-204ZM” in the forum, I found seven results — were you able to check the other six references and see if they provide any useful information about this (possibly) same device?
Hi @kkossev,
Thanks again for your help — and for your patience. I reached out because I’ve got two similar sensors (TS0601_24GHZ_PIR_RADAR) and I genuinely thought this one was part of the same little Tuya family reunion you’ve been supporting with some quick code changes over time. Turns out I was a bit of a noodlehead on that assumption. ![]()
Just to close the loop on my end:
I removed the device, started fresh, and paired it again. Hubitat didn’t find a matching driver, so it went straight to the generic “Device” driver — the one that lovingly wipes Current States and State Variables clean. I then switched it over to the Human Presence Sensor driver, paired (and paired it again just for fun ) as you suggested… still no luck.
The Commands, Preferences and Defice Info look like what I posted earlier.
Current States shows only the raw basics:
- battery: 100
- illuminance: 1457
- motion: active
…and no State Variables at all.
This is what debug tells me but its not clear to me what it means
[dev:779](https://192.168.1.51/device/edit/779#)2025-11-24 04:11:45.658 PM
debug
skipped:[raw:catchall: 0000 8021 00 00 0040 00 A30B 00 00 0000 00 00 0900, profileId:0000, clusterId:8021, clusterInt:32801, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:A30B, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[09, 00]]
[dev:779](https://192.168.1.51/device/edit/779#)2025-11-24 04:11:43.688 PM
debug
skipped:[raw:catchall: 0000 0013 00 00 0040 00 A30B 00 00 0000 00 00 180BA3D1C5F1FE5238C1A480, profileId:0000, clusterId:0013, clusterInt:19, sourceEndpoint:00, destinationEndpoint:00, options:0040, messageType:00, dni:A30B, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:00, direction:00, data:[18, 0B, A3, D1, C5, F1, FE, 52, 38, C1, A4, 80]]
Yes, it’s definitely a battery-powered Zigbee device.

I did see now where it does say
But I guess not all Human Presence Sensor (ZG-204ZM) Zigbee devices are created equal.
I went through the other forum threads as you recommended. Your earlier comments actually made me realize I’ve reached the “officially optionless” stage. In hindsight, I really should have noticed your very valid warning: “With Tuya sensors, you never quite know what you’ll get — even if it looks identical to another model.”
I also missed the part where you mentioned that you’ve stepped back from trying to support new Tuya mmWave devices. So now I feel extra silly for bothering you with this one!
At this point, I think I’ve acquired a very fancy, very unhelpful cat toy — because while the model matches, but it’s clearly not exposing anything meaningful.
Thank you again for the guidance, the honesty, and all the work you’ve done on these drivers. I really appreciate it.
The HE inbuilt driver seems to be working - the battery, the illuminance and the motion attributes are populated in the first seconds after the pairing!
The problem is that this device does not stay connected to your hub, and leaves the Zigbee network a few seconds later. This is seen from the ZDO message (profileId:0000, clusterId:0013) - the device tries to re-join the network, most probably unsuccessfully.
If your hub is a C-7, reboot the hub and pair the ZG-204ZM at a close distance as soon as the device web page becomes available.
If your hub is C-8, use the Double Luck voodoo to pair it again.
Note, that whether a Zigbee device will stay connected or not does not depend on the device driver used (either system or custom) - the connection is handled on a Zigbee coordinator (hub system) level.
You can verify whether the device stays connected by enabling the Debug logging in the stock driver, then removing the batteries for 15-30 seconds and reinserting the batteries back. Do you see anything in the live logs?
Hi @kkossev,
Thanks so much for jumping in — especially since this isn’t your driver. I really appreciate you sharing your Zigbee expertise, because that’s an area where I’m… let’s say running a bit low on supplies. ![]()
I actually had a bit of good news this morning. After reading your reply — and before doing another re-pairing — I checked the device logs and was surprised to see that it did report some illuminance and motion events:
dev:7792025-11-25 06:57:47.804 AMinfoSide Hall Sensor illuminance is 2629 Lux
dev:7792025-11-25 06:57:46.416 AMinfoSide Hall Sensor illuminance is 2629 Lux
dev:7792025-11-25 06:57:40.976 AMinfoSide Hall Sensor illuminance is 2618 Lux
dev:7792025-11-25 06:57:39.018 AMinfoSide Hall Sensor is active
dev:7792025-11-25 06:57:33.703 AMinfoSide Hall Sensor illuminance is 2628 Lux
dev:7792025-11-25 06:57:33.112 AMinfoSide Hall Sensor is inactive
dev:7792025-11-25 06:57:07.766 AMinfoSide Hall Sensor illuminance is 2629 Lux
dev:7792025-11-25 06:57:02.921 AMinfoSide Hall Sensor illuminance is 2632 Lux
dev:7792025-11-25 06:56:53.033 AMinfoSide Hall Sensor illuminance is 2629 Lux
dev:7792025-11-25 06:56:49.684 AMinfoSide Hall Sensor illuminance is 2634 Lux
dev:7792025-11-25 06:56:32.336 AMinfoSide Hall Sensor illuminance is 2635 Lux
My best guess is that this happened because my hub does a scheduled reboot a couple of times a week through an app. Everything probably aligned just right overnight and the sensor decided to check in, finally.. At least that’s my story — and I’m sticking to it. ![]()
Turning on Debug logging doesn’t reveal much more; the logs look about the same either way.
What is a bit disappointing is that the stock Human Presence Sensor driver doesn’t seem to provide any Preference options. Here’s the comparison:
Your driver’s preferences (lots of options):
Stock Human Presence Sensor driver (basically empty):
I tried pairing again this morning and got the following:
dev:7792025-11-25 07:04:56.073 AMinfoSide Hall Sensor illuminance is 804 Lux
dev:7792025-11-25 07:04:45.642 AMdebugskipped:[raw:catchall: 0000 8021 ...]
dev:7792025-11-25 07:04:43.674 AMdebugskipped:[raw:catchall: 0000 0013 ...]
dev:7792025-11-25 07:04:42.589 AMwarnconfigure...
But even after re-pairing, the Preferences section is still basically devoid of options. That may simply be the full extent of what the stock driver exposes — just a slim set of attributes to work with. It is reporting motion, battery, and illuminance reliably, which is good, but I was certainly hoping for a bit more to adjust and more attributes to use in Webcore.
Stock Human Presence Sensor driver (basically limited):
Either way, thank you again — not just for responding, but for taking the time to walk me through what’s happening at the Zigbee level. That extra context really helps.
Honestly, I’m not sure what the next logical step is. I can try deleting the device and attempting one more fresh pairing, but I suspect I’ll end up with the same limited Preference options — which at this point might be the clinical definition of insanity. Ah, the joys of home automation… “Retire,” I thought. “Get a hobby,” I thought. ![]()
Thanks again for all your help!
Hi @kkossev,
I wanted to follow up with you regarding the HOBIAN ZG-204ZM. I really didn’t want to give up on it yet — even though, as I mentioned earlier, I was pretty disappointed with the limited Current States available for Webcore and the lack of Preference options in the stock driver. So, naturally, I did what any stubborn home-automation hobbyist would do: I dove into the internet, read everything I could get my hands on, and attempted every suggestion I found… with results that ranged from “meh” to “why did I even try that?” ![]()
During that research rabbit hole, I came across this forum comment:
It appears to be the exact same model I have, and in that thread it did work. That’s when I realized my first (but certainly not last) mistake — I had originally installed an older driver version using the copy-and-paste method, which meant I never had access to the Load Standard Profiles From GitHub feature.
Taking your earlier forum advice to heart, I switched to HPM and ran a repair on the driver. And wouldn’t you know it — the Commands screen I’d been hunting for suddenly appeared. From there, I clicked Run on “Load Standard Profiles From GitHub,” then selected Load All Defaults under Configure and ran that as well. After reopening the device page… lo and behold… the Current States I’d been missing finally showed up. ![]()
Current States
| Attribute | Value |
|---|---|
| status | clear |
| battery | 100 |
| batteryVoltage | 3 |
| fadingTime | 30 |
| healthStatus | online |
| humanMotionState | none |
| illuminance | 44 |
| lastBattery | Wed Nov 26 07:45:29 EST 2025 |
| ledIndicator | 1 |
| motion | inactive |
| motionDetectionMode | 1 - PIRandRadar |
| powerSource | battery |
| radarSensitivity | 6 |
| staticDetectionDistance | 3.0 |
| staticDetectionSensitivity | 3 |
Once everything looked right, I configured the device and moved it into “production” for testing. So far, it’s behaving surprisingly well. One thing I did notice is that it selected a different Device Profile than I expected, and I’m not entirely sure whether that’s normal or a subtle hint that something still isn’t lining up correctly.
State Variables
| Variable | Value |
|---|---|
| deviceProfile | TS0601_24GHZ_PIR_RADAR |
| deviceType | mmWaveSensor |
| driverVersion | 4.2.1 2025/10/19 8:26 AM (ZG-204ZM HOBEIAN) (C-7 2.4.3.158) |
| gitHubV4 | {} |
| health | {"checkCtr3":0,"offlineCtr":0} |
| lastRx | {"timeStamp":"2025-11-26 09:06:06.595","batteryTime":1764161129456,"illumTime":1764164382291} |
| lastTx | {"cmdTime":1764159962717} |
| motionStarted | 2025-11-26 08:39:30.415 |
| profilesV4 | {} |
| states | {"isRefresh":false,"isDigital":false,"isPing":false} |
| stats | {"cfgCtr":1,"bVoltCtr":1,"battCtr":1,"rxCtr":1086,"txCtr":48,"illumCtr":264} |
With all that said, I wanted to get your take: do you foresee any issues using the TS0601_24GHZ_PIR_RADAR profile on the HOBIAN ZG-204ZM? Everything seems fine so far
— no errors in the logs, and it’s reporting illuminance, humanMotionState, motion, etc. as expected — but I’d much rather check with someone who actually knows what they’re doing before I accidentally create the world’s most confused Webcore routines and send my automations into an endless loop.
Thanks again — sincerely — for your time, patience, and Zigbee expertise. I clearly needed every bit of it. ![]()
So, I put the Sonoff SNZB-06P(Kitchen Radar) back in my system to see what would happen as I've added other Sonoff devices previously removed that I believed were causing issues with my setup and no issues, now. It's been up for about a week with no issues. The data is for just over 24 hours. This has fewer messages than many things in my system. The leader by far is a Third Reality plug. The "Kitchen Iris" immediately above the "Kitchen Radar" is an Iris V2 PIR sensor. The Iris will never get triggered without the Sonoff being triggered. The Sonoff gets triggered without the Iris being triggered. ![]()
Yet a new variant that doesn't work. That white Tuya Human presense with three batteries.
https://a.aliexpress.com/_EG90foo
Summary
"endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x0051", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0xed00", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZE284_debczeci", "model": "TS0601", "class": "zigpy.device.Device" }



















