[RELEASE] Tuya Zigbee Multi-Sensor 4 In 1 (PIR motion sensors and mmWave presence radars) w/ healthStatus

Hi @kkossev - any more ideas about exposing this reporting time parameter in your driver?

Cheers

I would avoid purchasing anything from this seller. If you have the time and the patience, you can open a case and ask for a refund. This item description is made intentionally misleading on the sellers site, there are many proofs that can be screenshotted and provided as a proof. If you have just one ( €12.74 + free shipping is an unrealistically low price for a 3-in-1 sensor!) it may be not worth the time and the effort...

Thank you for the device fingerprint, I can confirm it is now OK in the driver version 1.2.2

Honestly, I don't know how to proceed with this device support.. I can't distinguish between the original models that are true 3-in-1 sensors (motion, temperature and humidity) and the 'cost reducted' version that has only the PIR sensor.

Have you already tried the HE inbuilt 'Generic Zigbee Motion Sensor (no temp)' driver?

@bbholthome many thanks for the detailed debug logs!
I will analyze it and come back later.

It may be a common hiccup issue after the latest platform updates, I am monitoring also the Philips Hue Gen2 Zigbee driver problems.

This device should be recognized as a 4-in-1 type of sensor in the latest driver versions, can you update to the latest dev. branch version ver. 1.2.2 (the link in the second post) and check again?

I found that -for what its worth- you cannot distinguish on description. If the seller purpously puts misleading descriptions in the add, your stuck and all you can do is open a case.

However, i found that the driver accurately exposes functionality and you can rely on this. Also i found that the led colour on both types differ. Again, for what its worth, but i found models with only pir light up blue and with illuminance light up red upon detection.

1 Like

Hold off I found something.
Odd zigbee behavior

Unfortunately, I took 8. There was no way to get a refund because they did not consider evidence via screenshots and videos of the smartlife app not displaying temperature and humidity sufficient. The return shipping costs are almost as much as I spent on the purchase, so here I am. I hope the single negative review (mine) is helpful to others.

Yes, with that I get the Alexa integration right, but the powerSource data is still wrong and that's my primary interest, otherwise I can't get power failure notifications (or is there another way?).

Anyway, thank you for your work.

Hi @kkossev - it was correctly detected as a Tuya 4 in 1 with the 1.2.1 driver I was using. I just updated to the latest 1.2.2 driver anyway, but there is no “reporting time” parameter available in set par or elsewhere. Assume that hasn’t been added to the driver as yet?

Not yet, I hope that during the weekend will be able to compare it with Zigbee2MQTT implementation.

Hello.
I am trying to apply your driver to my sensor. Could you help me? I always appreciate your dedication because I use your drivers.

https://a.aliexpress.com/_msYlWAA

  • endpointId: 01
  • application: 46
  • driver: v1.0.1.1123
  • manufacturer: _TZE200_xpq2rzhq
  • model: TS0601

Device pairing info

Manufacturer: _TZE200_xpq2rzhq
Endpoint 01 application: 46
Endpoint 01 endpointId: 01
Endpoint 01 idAsInt: 1
Endpoint 01 inClusters: 0000,0004,0005,EF00
Endpoint 01 initialized: true
Endpoint 01 manufacturer: _TZE200_xpq2rzhq
Endpoint 01 model: TS0601
Endpoint 01 outClusters: 0019,000A
Endpoint 01 profileId: 0104
Endpoint 01 stage: 4
2 Likes

Hi @user3644 ,

_TZE200_xpq2rzhq radar was added to the latest dev. branch version 1.2.2 "2023/03/17 7:46 AM".
You can update to it from the link in the second post, or from within HE driver editor - click on the 'Import' button.

I am planning in the next driver major change version to add an option 'Device Profile'. This will allow new devices to be configured manually from the HE users, without waiting for the developer to add the new device fingerprint into the driver.

1 Like

using your driver and it is not doing anything after joining.. except one sense of motion that never cleared.. and using the clear function returned a null in the logs.. in addition i have it on usb power and it is showing battery..

ie

did a rejoin and it found it in place and promptly reported temp the first time and now at least motion appears to be working..

ie


Screenshot 2023-03-17 175806

still doesnt know its on usb power though.

also getting constant battery reports not needed for a usb powered device.. is there any way to turn that off and also configure the temp reporting interval or increment before it reports? obviously not worried about battery dieing since on usb, but too many messages on the mesh.

Seems like you are using an old version of this driver, and your device is not recognized as a 4-in-1 sensor. Do you see any illuminance readings?

TS0202 _TZ3210_wuhzzfqg is a new manufacturer and it was added to this driver on the 25th of December last year (starting from version 1.1.0).

No its the latest driver. Yes there is illuminance. Just not seeing it in those events as its not changing in a dark basement.

1 Like

OK, I will check and comment on the issues reported some time later today or tomorrow.

1 Like

Tried my _TZE200_3towulqd with fresh battery and motion is there. It detects motion even when there is no motion.

Logs

dev:7832023-03-18 12:44:02.322infoHämärätunnistin Motion reset to inactive after 12s

dev:7832023-03-18 12:44:02.321debugHämärätunnistin (DP=0x01) motion event fncmd = 1

dev:7832023-03-18 12:44:02.320debugHämärätunnistin dp_id=4 dp=1 fncmd=1

dev:7832023-03-18 12:44:02.315debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00800104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 80, 01, 04, 00, 01, 01]]

dev:7832023-03-18 12:44:02.114debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:44:02.108debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 007F0C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 7F, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:43:50.309infoHämärätunnistin Detected motion

dev:7832023-03-18 12:43:50.275debugHämärätunnistin (DP=0x01) motion event fncmd = 0

dev:7832023-03-18 12:43:50.274debugHämärätunnistin dp_id=4 dp=1 fncmd=0

dev:7832023-03-18 12:43:50.270debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 007E0104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 7E, 01, 04, 00, 01, 00]]

dev:7832023-03-18 12:43:50.049debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:43:50.046debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 007D0C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 7D, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:43:49.007infoHämärätunnistin Motion reset to inactive after 12s

dev:7832023-03-18 12:43:49.005debugHämärätunnistin (DP=0x01) motion event fncmd = 1

dev:7832023-03-18 12:43:49.004debugHämärätunnistin dp_id=4 dp=1 fncmd=1

dev:7832023-03-18 12:43:49.001debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 007C0104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 7C, 01, 04, 00, 01, 01]]

dev:7832023-03-18 12:43:48.784debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:43:48.780debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 007B0C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 7B, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:43:37.009infoHämärätunnistin Detected motion

dev:7832023-03-18 12:43:36.976debugHämärätunnistin (DP=0x01) motion event fncmd = 0

dev:7832023-03-18 12:43:36.975debugHämärätunnistin dp_id=4 dp=1 fncmd=0

dev:7832023-03-18 12:43:36.971debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 007A0104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 7A, 01, 04, 00, 01, 00]]

dev:7832023-03-18 12:43:36.734debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:43:36.730debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00790C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 79, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:43:25.564infoHämärätunnistin Motion reset to inactive after 12s

dev:7832023-03-18 12:43:25.562debugHämärätunnistin (DP=0x01) motion event fncmd = 1

dev:7832023-03-18 12:43:25.561debugHämärätunnistin dp_id=4 dp=1 fncmd=1

dev:7832023-03-18 12:43:25.558debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00780104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 78, 01, 04, 00, 01, 01]]

dev:7832023-03-18 12:43:25.343debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:43:25.340debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00770C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 77, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:43:13.530infoHämärätunnistin Detected motion

dev:7832023-03-18 12:43:13.502debugHämärätunnistin (DP=0x01) motion event fncmd = 0

dev:7832023-03-18 12:43:13.501debugHämärätunnistin dp_id=4 dp=1 fncmd=0

dev:7832023-03-18 12:43:13.498debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00760104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 76, 01, 04, 00, 01, 00]]

dev:7832023-03-18 12:43:13.297debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:43:13.292debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00750C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 75, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:43:07.293infoHämärätunnistin Motion reset to inactive after 19s

dev:7832023-03-18 12:43:07.291debugHämärätunnistin (DP=0x01) motion event fncmd = 1

dev:7832023-03-18 12:43:07.290debugHämärätunnistin dp_id=4 dp=1 fncmd=1

dev:7832023-03-18 12:43:07.287debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00740104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 74, 01, 04, 00, 01, 01]]

dev:7832023-03-18 12:43:07.071debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:43:07.067debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00730C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 73, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:42:48.636infoHämärätunnistin Detected motion

dev:7832023-03-18 12:42:48.615debugHämärätunnistin (DP=0x01) motion event fncmd = 0

dev:7832023-03-18 12:42:48.614debugHämärätunnistin dp_id=4 dp=1 fncmd=0

dev:7832023-03-18 12:42:48.611debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00720104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 72, 01, 04, 00, 01, 00]]

dev:7832023-03-18 12:42:48.446debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:42:48.443debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00710C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 71, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:42:15.035debugHämärätunnistin ignored motion inactive event after 70s

dev:7832023-03-18 12:42:15.033debugHämärätunnistin (DP=0x01) motion event fncmd = 1

dev:7832023-03-18 12:42:15.032debugHämärätunnistin dp_id=4 dp=1 fncmd=1

dev:7832023-03-18 12:42:15.029debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 00700104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 70, 01, 04, 00, 01, 01]]

dev:7832023-03-18 12:42:14.811debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:42:14.807debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 006F0C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 6F, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:42:05.073infoHämärätunnistin Motion reset to inactive after 60s (software timeout)

dev:7832023-03-18 12:41:05.064infoHämärätunnistin Detected motion

dev:7832023-03-18 12:41:05.026debugHämärätunnistin (DP=0x01) motion event fncmd = 0

dev:7832023-03-18 12:41:05.025debugHämärätunnistin dp_id=4 dp=1 fncmd=0

dev:7832023-03-18 12:41:05.022debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 006E0104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 6E, 01, 04, 00, 01, 00]]

dev:7832023-03-18 12:41:04.812debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:41:04.807debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 006D0C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 6D, 0C, 02, 00, 04, 00, 00, 03, E8]]

dev:7832023-03-18 12:40:55.733debugHämärätunnistin ignored resetToMotionInactive (software timeout) after 60s

dev:7832023-03-18 12:40:44.114infoHämärätunnistin Motion reset to inactive after 48s

dev:7832023-03-18 12:40:44.113debugHämärätunnistin (DP=0x01) motion event fncmd = 1

dev:7832023-03-18 12:40:44.112debugHämärätunnistin dp_id=4 dp=1 fncmd=1

dev:7832023-03-18 12:40:44.108debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 006C0104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 6C, 01, 04, 00, 01, 01]]

dev:7832023-03-18 12:40:43.935debugHämärätunnistin dp_id=2 dp=12 fncmd=1000

dev:7832023-03-18 12:40:43.931debugHämärätunnistin parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 8BF3 01 00 0000 02 01 006B0C020004000003E8, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:8BF3, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 6B, 0C, 02, 00, 04, 00, 00, 03, E8]]

Motion is not the problem. That stated working when i re did the pairing the problem
Is the duplicate battery report every cycle and r
The fact it is on usb power but still says its
on battery. Also the lack of a setting to tell it
How often or at what change level to report temp.

I understand that, I just had to push the current version which has some other improvements accumulated (together with this easy exception handling fix) into HPM to have a base, last stable working version. Version 1.2.2 is also uploaded to the Google Drive archive (the link is in the second post).

I will make it hardcoded in the next version - battery reports are to be registered as events no more often than 8 hours. The sensor will still send these over the air, there is no configuration command for that on device level, it's just an annoying Tuya hardcoded 'feature'.

Unfortunalely, this device always reports the powerSource attribute value 0x03, which in ZCL specs is a 'battery'. The 'DC source' value is 0x04, but it is never sent by the device (just another hardcoded parameter in Tuya firmware), so practically there is no way to understand when the 4-in-1 sensor is on USB or is battery powered - the device reports one and the same. When on USB power, the sensor still reports the battery level, just the value is always 100%.
As most of these 4-in-1 devices probably run on USB power, what I can do is to hardcode the powerSource to be always DC.

I will add this in the next version, but before adding just another setting this driver needs some more complex code refactoring, as it become rather messy and it is now difficult to distinguish between the many different models in the code. These 4-in-1 devices are rather unusual - they expose the standard IAS cluster (0x0500) in the inClusters list, but actually use the Tuya specific 0xEF00 cluster for reporting, and the device model is not the usual Tuya-specific TS0601, but TS0202, which usually used ZCL clustered for reporting... a big Tuya firmware mess!

Sorry Petteri, I haven't implemented the application version check for your device yet. It's another example of Tuya mess - one and the same device model and manufacturer, but inverted motion reporting between the different firmware versions.
I will notify you when have it ready in the next days.

2 Likes