[APP][Pro] Universal TUYA Zigbee Device App - test

@Karsten_Hille — Temperature/Humidity sensor broken → Fixed in v5.8.38 . Update and your sensor will work again.

@Hartmut_Dunker — BSEED TS0726 4-gang, only button 1 works (diag 83af3e29 + 0fd344ca) → Fixed in v5.8.40 . Root cause: Homey’s interview doesn’t create onOff clusters on endpoints 2-4, so commands for gangs 2/3/4 silently fail. Fix: app now manually instantiates onOff clusters on EP2-4 at boot. In v5.8.30 it fell back to Tuya DP commands but your BSEED is ZCL-only and ignores those. After updating to v5.8.43, please delete and re-pair your switch.

@DutchDuke — Soil sensor _TZE284_oitavov2 install error → Fixed in v5.8.38 . Update and re-add the device.

@Lasse_K — Water sensor + contact sensor showing as unknown → I need your manufacturer name and model ID to add fingerprints. Please send a diagnostic report from the Homey app (Device → Settings → Send Diagnostic Report) so I can see the exact Zigbee IDs.

@FinnKje — Presence sensor flipping on/off every minute (diag 3aed664b) → Fixed in v5.8.40 . Root cause: device sends compound multi-DP frames, parser was reading the whole buffer as one value (67109120 instead of 1). Now correctly slices and parses each DP individually.

@Cam — TS0041 / _TZ3000_5bpeda8u button not registering (diag 9d71284c) → Fixed in v5.8.40 . Root cause: button sends onOff commands (client-to-server) which need a BoundCluster to capture. Without it, frames were silently dropped. Now installed universally for all 1-gang buttons. Delete and re-pair after updating.

v5.8.43 also includes: PR#125 from @michelhelsdingen — HOBEIAN 10G radar sensor IAS motion conflict fix, battery config fix, humidity scaling fix. Plus v5.8.42 fingerprint conflict fix for HOBEIAN ZG-204ZM.

Thanks everyone for the diagnostic reports — they’re invaluable! :folded_hands:

update soon everyone , and okay i will check your diag. (

Here’s the info on the ZS06 IR remote:

Diag report: 1af2e2be-48e8-42c6-8606-f9981791aff6

Device info: Tuya ZS06 control via MQTT | Zigbee2MQTT

Interview:


  "ids": {
    "modelId": "TS1201",
    "manufacturerName": "_TZ3290_7v1k4vufotpowp9z"
  },
  "endpoints": {
    "ieeeAddress": "e4:06:bf:ff:fe:3f:dd:68",
    "networkAddress": 51288,
    "modelId": "TS1201",
    "manufacturerName": "_TZ3290_7v1k4vufotpowp9z",
    "endpointDescriptors": [
      {
        "status": "SUCCESS",
        "nwkAddrOfInterest": 51288,
        "_reserved": 26,
        "endpointId": 1,
        "applicationProfileId": 260,
        "applicationDeviceId": 61440,
        "applicationDeviceVersion": 0,
        "_reserved1": 1,
        "inputClusters": [
          0,
          4,
          5,
          3,
          60672,
          57348,
          6
        ],
        "outputClusters": [
          25,
          10
        ]
      },
      {
        "status": "SUCCESS",
        "nwkAddrOfInterest": 51288,
        "_reserved": 10,
        "endpointId": 242,
        "applicationProfileId": 41440,
        "applicationDeviceId": 97,
        "applicationDeviceVersion": 0,
        "_reserved1": 0,
        "inputClusters": [],
        "outputClusters": [
          33
        ]
      }
    ],
    "deviceType": "router",
    "receiveWhenIdle": true,
    "capabilities": {
      "alternatePANCoordinator": false,
      "deviceType": true,
      "powerSourceMains": true,
      "receiveWhenIdle": true,
      "security": false,
      "allocateAddress": true
    },
    "extendedEndpointDescriptors": {
      "1": {
        "clusters": {
          "basic": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "name": "zclVersion",
                "value": 3,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 1,
                "name": "appVersion",
                "value": 67,
                "reportingConfiguration": {
                  "direction": "reported",
                  "attributeDataType": 32,
                  "minInterval": 1,
                  "maxInterval": 150,
                  "minChange": 0,
                  "status": "SUCCESS"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 2,
                "name": "stackVersion",
                "value": 0,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 3,
                "name": "hwVersion",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 4,
                "name": "manufacturerName",
                "value": "_TZ3290_7v1k4vufotpowp9z",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 5,
                "name": "modelId",
                "value": "TS1201",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 6,
                "name": "dateCode",
                "value": "",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 7,
                "name": "powerSource",
                "value": "mains",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 65502,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65534,
                "name": "attributeReportingStatus",
                "value": "PENDING",
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65504,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65505,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65506,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65507,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "groups": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "name": "nameSupport",
                "value": {
                  "type": "Buffer",
                  "data": [
                    0
                  ]
                },
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "scenes": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 3,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 4,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "identify": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 0,
                "name": "identifyTime",
                "value": 0,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 1,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          },
          "onOff": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "name": "onOff",
                "value": false,
                "reportingConfiguration": {
                  "direction": "reported",
                  "attributeDataType": 16,
                  "minInterval": 1,
                  "maxInterval": 65534,
                  "status": "SUCCESS"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "name": "clusterRevision",
                "value": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ],
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          }
        },
        "bindings": {
          "ota": {},
          "time": {
            "attributes": [],
            "commandsGenerated": "UNSUP_GENERAL_COMMAND",
            "commandsReceived": "UNSUP_GENERAL_COMMAND"
          }
        }
      },
      "242": {
        "clusters": {},
        "bindings": {}
      }
    }
  }

Ver.5843. Watersensor & Contact sensor installs again in normal fashion. Watersensor still has no alarm. Contact sensor still in reverse. Thanks.

PIR does not work: 25cbd6ae-364e-4477-a1c9-0009cfcb6719

You physically have the devices, which I intend to use. Pls. pair them with your Homey and check out if they really work…

Yes working on it today.

ZG-204ZM Deep Support (4x4_Pete)

Research Sources Used

  • Z2M ZG-204ZM page — full DP mapping and exposes
  • Z2M Issue #21919 — external converter with confirmed DPs
  • SmartHomeScene review — hardware teardown (Telink TLSR8258 + HLK-LD2410S 24GHz radar), specs (PIR + mmWave, 2xAAA, 0-3000 lux, 0-6m static / 0-10m moving)
  • 4x4_Pete interview data — clusters [0, 1, 3, 1024, 1280, 61184], HOBEIAN manufacturer

Device Profile (5-in-1)

  1. PIR motion → IAS Zone cluster 1280
  2. 24GHz radar presence → Tuya DP1 (bool)
  3. Motion state → Tuya DP101 (enum: none/large/medium/small)
  4. Illuminance → ZCL cluster 1024 + Tuya DP106 fallback
  5. Battery → ZCL powerConfiguration + Tuya DP121 fallback

Changes Made

HOBEIAN_ZG204ZM config enriched (

device.js):

  • Added DP121 (battery via Tuya DP fallback)
  • Added DP122 (motion_detection_mode: only_pir / pir_and_radar / only_radar)
  • Added DP123 (motion_detection_sensitivity: 0-10)
  • Aligned setting keys with ZG_204ZM_RADAR for consistency

CRITICAL FIX —

onSettings() added (device.js):

  • Previously: user changed settings → saved locally but never sent to device
  • Now: dynamically reads dpMap setting: entries and writes Tuya DPs to hardware
  • Affects: motion_detection_mode , fading_time , indicator , motion_detection_sensitivity , static_detection_distance , static_detection_sensitivity

New setting (

driver.compose.json):

  • Added static_detection_distance (0-6m) for mmWave radar range configuration

Verification :

  • ZCL battery (powerConfiguration with throttle + minChange) :white_check_mark:
  • ZCL illuminance (log-scale conversion + shared ZCL/DP throttle) :white_check_mark:
  • IAS Zone (PIR) + DP1 (radar) coexist correctly — no noIasMotion flag needed :white_check_mark:
  • Routing: HOBEIAN + ZG-204ZM → HOBEIAN_ZG204ZM config (explicit match) :white_check_mark:

Checking and finalising today i hope for your device and real interveiw that i make with real devices. aklso ckenig 2nd device right now

Always working with internet information, interviews , diag logs and my also homey pro box

Now working on fixing wrong detection of capability and features

Hi @dlnraja

Thanks for looking into my button again. Unfortunately there’s no change, still no button presses registering.

Version: 5.8.66
Diagnostic code: 4b2150c6-11f9-412e-a133-e71bc4d0f538

Hi @dlnraja ,

Good news!

The presence sensor is found and connected correctly in ver 5.8.66 as presence sensor (no longer unknow zigbee device). but its not yet working as expected.

  • The motion is only registered for 1 sec (or even less).
  • Lux is not updated
  • distance is not updated
  • Battery icon is show with a ‘?’ but the device is USB powered

17c03ea7-894d-4646-bfb2-4e3b6adc5b2c

Ver.5865. Watersensor went back to unknown.

Hi @dlnraja

Moes 4 button wireless scene switch. Just tried v 5.8.65 and still no flow triggered with physical keys. Please see attached diag log.

34b9565c-aee9-4906-bd21-145a18461285

Please let me know if something else is required. Thanks. The

Fred

Ver.5866. Watersensor still unknown.

@dlnraja

Update, ver 5.8.77

Motion, lux and distance are working now, looks good!

Device also shows

  • temperature and
  • humidity

but those two values doesnt change.

Not sure if its a bug or not supported by the device itself?

Ver.5878. Watersensor still unknown. Ver.5843 The Watersensor installed as a Watersensor.

:partying_face: My soil sensors _TZE284_oitavov2 work :tada:

Thank you @dlnraja for all the work!!

There is just 1 small issue, the temperature reading seems to be off, it says it’s 1,8 degrees celsius while in reality it’s 18 degrees. Is that something that could be corrected in the app?

Yes I will add an multiplier for your device .

Hy Dylan,

with version 5.8.30 already and now 5.8.78 all four physical buttons work. The device in Homey pro shows the correct state (on/off) when i press the physical button. On the other hand, when i press a virtual button in Homey, all four physical buttons from the switch simultaneously chnage the state to on or off.
Here a new diag: 2cf6ccf7-78e8-4271-bc4b-3dc33c64e366

Best regards, Hartmut

@dlnraja

Did some (chatgpt) research regarding the IR blaster (ZS06), where i compared your code to the zigbee herdsman used by Z2M. This came out:

:small_blue_diamond: Conclusion

The problem in Homey is that your _enableAdvancedLearnMode() does not send the Zosung-specific commands used by the Tuya.ts driver in Zigbee-herdsman (tzZosung.zosung_learn_ir_code).

That’s why:

  • The button immediately turns off

  • The LED does not light up

  • No code is learned

Homey needs to send the exact same Zosung command structure (with endpoint, cluster ID, payload) as in Zigbee-herdsman’s tzZosung.zosung_learn_ir_code.

Everything you are currently doing in _enableAdvancedLearnMode with onOff or a generic Tuya DP will not work for this device.

Based on the Zigbee-herdsman tuya.ts info for the ZS06/Zosung IR hub, here’s an example of how _enableAdvancedLearnMode could be implemented in Homey to actually trigger IR learning correctly.

Homey _enableAdvancedLearnMode Example:

async _enableAdvancedLearnMode() {
    if (!this.zigbeeEndpoint) throw new Error('No Zigbee endpoint available');

    // Zosung cluster & command info
    const CLUSTER_ID = 0xEF00;  // Tuya/Zosung manufacturer-specific cluster
    const COMMAND_LEARN_IR = 0x02; // matches tzZosung.zosung_learn_ir_code
    const TRANSACTION_ID = Math.floor(Math.random() * 255); // random transaction ID

    // Payload: start learning
    const payload = [
        { attrId: 0x0000, dataType: 0x42, attrData: Buffer.from([0x01]) } // 0x01 = start learn
    ];

    try {
        // Send the manufacturer-specific command to start learning
        await this.zigbeeEndpoint.command(
            CLUSTER_ID,          // Manufacturer-specific cluster
            COMMAND_LEARN_IR,    // Learn IR command
            payload,             // Payload buffer
            { disableDefaultResponse: true }
        );

        // Optional: Set a flag in Homey so UI can show learning in progress
        this.learningMode = true;

        this.log('IR learning mode enabled. Point your remote at the blaster and press a button.');

    } catch (err) {
        this.error('Failed to start IR learning mode:', err);
        throw new Error('Could not enable IR learning');
    }
}

:white_check_mark: Key Notes

  1. Cluster 0xEF00 = Tuya/Zosung manufacturer-specific cluster.

  2. Command 0x02 matches Zigbee-herdsman’s tzZosung.zosung_learn_ir_code.

  3. Payload: 0x01 = start learning. After a code is received, Zosung sends it back as a separate DP (learned_ir_code).

  4. Random transaction ID ensures Zigbee doesn’t reject repeated commands.

  5. Learning flag helps Homey UI display “learning in progress.”

Hi,

I love your app -much appreciated.

I have a couple of _TZ3000_bgtzm4ny TS0044 (ZG-101ZS) zigbee scene switches with 4 buttons.

I can add the device and trigger a flow but only with ‘Button x was pressed’ and then I have to double press to trigger it.

Nothing else seems to work.

Report: 4a3b2feb-12d0-422c-ae77-97a7d045045a

What should I do?

Ver.5888. Watersensor installs as Watersensor again. No alarm. Thanks.