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

Hi @dlnraja , even though I have updates blocked, the sensor has changed type again and stopped working. It stopped working right around the time a new version was released, even though the app on my Homey hasn’t actually updated… Thanks a lot; let me know if you need me to provide any details. Regards.

Hi @VicHY ,

Homey can flip that radar to “curtain” even when the app doesn’t update (old caps come back from Homey’s store). Blocking updates left you without the heal.

Please unlock updates once, install Test ≥ 9.0.995, then restart the app. Wait 2–3 minutes — if it’s still curtain, remove + re-pair as Presence Sensor Radar.

If it comes back, send diagnostic + the app version shown on the device. Thanks.

Hi @dlnraja

I have created the diags logs using the latest available version (9.0.992). The code is b84526bg-ec5b-45a3-b9e8-23f197401089.
I am not at home right now; I will try testing it this afternoon when I get back.
Thanks for the quick response and the assistance.

Hi @dlnraja

I’m trying to add a Tuya Zigbee thermostatic radiator valve to Universal Tuya Zigbee on Homey Pro.

Device: ZG253 thermostatic radiator valve
Model ID: TS0601
Manufacturer: _TZE284_ogx8u5z6

The device pairs successfully with Homey but Universal Tuya adds it as an unknown/generic Zigbee device.

The Homey interview confirms the Tuya 0xEF00 cluster.

Another _TZE284 TS0601 radiator valve (_TZE284_ne4pikwm) already appears to be supported by the TRV driver, so I’m hoping this variant can be mapped to the same or a similar driver.

I can provide any additional diagnostic/logs needed.

Thanks!

Device interview:

Summary

  "ids": {
    "modelId": "TS0601",
    "manufacturerName": "_TZE284_ogx8u5z6"
  },
  "endpoints": {
    "ieeeAddress": "a4:c1:38:1b:8c:68:e6:51",
    "networkAddress": 40213,
    "modelId": "TS0601",
    "manufacturerName": "_TZE284_ogx8u5z6",
    "endpointDescriptors": [
      {
        "status": "SUCCESS",
        "nwkAddrOfInterest": 40213,
        "_reserved": 22,
        "endpointId": 1,
        "applicationProfileId": 260,
        "applicationDeviceId": 81,
        "applicationDeviceVersion": 0,
        "_reserved1": 1,
        "inputClusters": [
          4,
          5,
          61184,
          0,
          60672
        ],
        "outputClusters": [
          25,
          10
        ]
      }
    ],
    "deviceType": "enddevice",
    "receiveWhenIdle": false,
    "capabilities": {
      "alternatePANCoordinator": false,
      "deviceType": false,
      "powerSourceMains": false,
      "receiveWhenIdle": false,
      "security": false,
      "allocateAddress": true
    },
    "extendedEndpointDescriptors": {
      "1": {
        "clusters": {
          "groups": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "dataTypeId": 24,
                "name": "nameSupport",
                "value": {
                  "type": "Buffer",
                  "data": [
                    0
                  ]
                },
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "dataTypeId": 33,
                "name": "clusterRevision",
                "value": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ]
          },
          "scenes": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "dataTypeId": 32,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 1,
                "dataTypeId": 32,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 2,
                "dataTypeId": 33,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 3,
                "dataTypeId": 16,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 4,
                "dataTypeId": 24,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "dataTypeId": 33,
                "name": "clusterRevision",
                "value": 2,
                "reportingConfiguration": {
                  "status": "NOT_FOUND",
                  "direction": "reported"
                }
              }
            ]
          },
          "basic": {
            "attributes": [
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 0,
                "dataTypeId": 32,
                "name": "zclVersion",
                "value": 3
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 1,
                "dataTypeId": 32,
                "name": "appVersion",
                "value": 77
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 2,
                "dataTypeId": 32,
                "name": "stackVersion",
                "value": 0
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 3,
                "dataTypeId": 32,
                "name": "hwVersion",
                "value": 1
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 4,
                "dataTypeId": 66,
                "name": "manufacturerName",
                "value": "_TZE284_ogx8u5z6"
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 5,
                "dataTypeId": 66,
                "name": "modelId",
                "value": "TS0601"
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 6,
                "dataTypeId": 66,
                "name": "dateCode",
                "value": ""
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 7,
                "dataTypeId": 48,
                "name": "powerSource",
                "value": "battery"
              },
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 65502,
                "dataTypeId": 32
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65533,
                "dataTypeId": 33,
                "name": "clusterRevision",
                "value": 2
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65534,
                "dataTypeId": 48,
                "name": "attributeReportingStatus",
                "value": "PENDING"
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65506,
                "dataTypeId": 32
              },
              {
                "acl": [
                  "readable",
                  "reportable"
                ],
                "id": 65507,
                "dataTypeId": 72
              },
              {
                "acl": [
                  "readable",
                  "writable",
                  "reportable"
                ],
                "id": 65487,
                "dataTypeId": 33
              }
            ]
          }
        },
        "bindings": {
          "ota": {
            "attributes": [
              {
                "acl": [
                  "readable"
                ],
                "id": 0,
                "dataTypeId": 240,
                "name": "upgradeServerID",
                "value": "ff:ff:ff:ff:ff:ff:ff:ff"
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 1,
                "dataTypeId": 35,
                "name": "fileOffset",
                "value": 4294967295
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 2,
                "dataTypeId": 35,
                "name": "currentFileVersion",
                "value": 77
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 3,
                "dataTypeId": 33,
                "name": "currentZigBeeStackVersion",
                "value": 2
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 4,
                "dataTypeId": 35,
                "name": "downloadedFileVersion",
                "value": 4294967295
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 5,
                "dataTypeId": 33,
                "name": "downloadedZigBeeStackVersion",
                "value": 65535
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 6,
                "dataTypeId": 48,
                "name": "imageUpgradeStatus",
                "value": "normal"
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 7,
                "dataTypeId": 33,
                "name": "manufacturerID",
                "value": 4417
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 8,
                "dataTypeId": 33,
                "name": "imageTypeID",
                "value": 65535
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 9,
                "dataTypeId": 33,
                "name": "minimumBlockPeriod",
                "value": 0
              },
              {
                "acl": [
                  "readable"
                ],
                "id": 65533,
                "dataTypeId": 33,
                "name": "clusterRevision",
                "value": 3
              }
            ]
          },
          "time": {
            "attributes": [
              {
                "acl": [
                  "readable"
                ],
                "id": 65533,
                "dataTypeId": 33,
                "name": "clusterRevision",
                "value": 1
              }
            ]
          }
        }
      }
    }
  }

Please consider using the following to increase readability of your post:

  • Preformatted text option to keep the output in the original format and presented in a scrollable window. This reduces the length of your post.
  • Hide details option, to collapse/hide the entire interview output. Clicking the collapsed item will show the interview output again.

Hi @dlnraja , I tried deleting the app and installing a new version (9.0.1016).
I re-added the devices and noticed that they are now recognized with some additional data. Initially, it seems to detect presence, motion, brightness, and detection distance.
Shortly after, however, it stops detecting presence and motion; while brightness and distance readings might change slightly if you enter the bathroom or turn on a light, the variation is minimal and doesn’t seem to reflect reality.
For the time being, at least, it appears the sensor isn’t updating, and the type is switching to “curtain.”

The code is:
546914c2-3bb9-442e-87bd-bdc0a5777

Thank you so much

Hi again @dlnraja

, the sensor has updated and is now performing worse. I have them installed in two bathrooms, but only one has updated (the one that had been synchronized the longest). The button to turn the sensor on or off has disappeared, as you can see in the images showing both units.
I am also attaching an image showing the data it captures. It constantly detects presence and motion, even when no one is there.
The code is:
8d9d0199-4da0-47c8-9788-6af5a827dff4.
Thanks again.

Hi @VicHY,

The behavior you are describing actually points to two distinct issues overlapping—a Homey cache bug, and the physical calibration of the MTG075 radar itself. Here are a few investigation tracks to help us isolate the problem:

  • The “Curtain” Type Bug: As mentioned earlier, Homey sometimes pulls old cached capabilities, forcing the device to switch to a curtain controller. If it stays as a curtain after updating to the latest test version and waiting a few minutes, you will need to remove and re-pair it specifically as a “Presence Sensor Radar” to force the correct driver to load.

  • Stuck in “Occupied” Mode: When you mention it stops detecting presence/motion while lux and distance still fluctuate slightly, it highly suggests the sensor is actually stuck in the “Occupied” (Presence = true) state. Because it never returns to “Unoccupied”, it cannot trigger any new presence or motion events in Homey.

  • Bathroom Environmental Interference: Bathrooms are notoriously tricky for mmWave radars. The MTG075 is extremely sensitive to micro-movements. An exhaust fan (even behind a plastic cover), a vibrating shower screen, or moving water can easily keep the radar locked in a continuous “Occupied” state.

  • Calibration Check: Once you have it properly paired again and displaying the correct UI, check if the presence alarm remains stuck on “Yes”. I recommend temporarily lowering the Radar Sensitivity and reducing the Departure Delay (Keep Time) in the advanced settings. You might also want to test the sensor in a standard, quiet room first to confirm it clears presence correctly outside of the bathroom environment.

Let me know how it behaves once re-paired and with these settings tweaked!

Looking at GitHub issues for this specific Tuya mmWave sensor (like the _TZE204_dtzziy1e or MTG075), your exact symptom—Lux and distance updating, but presence stuck/frozen—is a very common hardware quirk. Here is what usually causes it:

  1. Tuya MCU Freeze: Sometimes the internal chip crashes (often after a power fluctuation). The sensor keeps sending Lux data, but the radar module stops processing presence. Fix: Unplug the sensor from power entirely for 2-3 minutes, plug it back in, and check if it resets.

  2. Ghost Presence / Over-sensitivity: Users on other hubs report that default sensitivity settings (usually 7-9) are too high. It picks up micro-movements (like an exhaust fan or a towel moving) and resets the “Departure Delay” timer every second, meaning it never reaches “Clear”. Fix: Lower the Radar Sensitivity to 3 or 4, and decrease the Departure Delay to 5 seconds for testing.

  3. Zigbee Flooding: These sensors are notoriously “chatty” and update distance/lux every second. Sometimes the Zigbee coordinator misses the crucial “Presence Cleared” message because of network saturation

I will try to implemente a massive stability update for Tuya mmWave Radars (MTG075 / ZG-204 etc.)

Tuya’s hardware is notoriously chatty and sometimes crashes internally. This new release introduces an ‘Ultimate Software Shield’:

  1. Anti-Spam Filter: Throttles distance/lux updates to prevent your Homey Zigbee mesh from crashing.

  2. Auto-Restore: Automatically pushes your settings back to the sensor if it loses power and resets its brain to 0.

  3. Software Watchdog: If the sensor gets stuck in ‘Occupied’ mode and fails to send a clear signal, the app will now automatically clear the presence based on your departure delay setting.

  4. Emergency Clear: Added a new Flow card to manually clear presence if the bathroom exhaust fan is messing with the sensor!"*

Good morning @dlnraja,

First of all, thank you very much for your effort and patience.

This morning I installed the latest version (9.0.1037), and I had to use the Repair option on both sensors before they updated correctly.

I tested them afterwards, and only one of the bathrooms was detecting presence properly. On the other sensor, the Human Presence and Motion parameters were continuously showing “No”, even though both bathrooms have exactly the same configuration.

I ran the Repair process again, and for now both sensors seem to be detecting motion and presence correctly. They have been working for a couple of hours without issues.

I’m not at home right now, but at least I can see that neither of them has switched back to Curtain mode yet.

I’ve also noticed that the illuminance and distance detection values now seem to be correct. Previously, even with the bathroom lights on, the sensor would report only 1 or 2 lux instead of well over 100 lux, which would be expected. The same happened with distance: I could stand right next to the sensor and it would report that I was 3 meters or more away, which is impossible because the bathroom is smaller than that.

As you mentioned, these sensors are very difficult to calibrate. However, whenever they are working correctly, before eventually switching to Curtain mode, they perform quite well. It took me some time, but I believe I now have the sensitivity and the rest of the parameters more or less dialed in, although I will probably need to make a few more adjustments.

All my testing has been done with the bathroom door closed, nobody inside, the exhaust fan turned off, and the air conditioning unit switched off, so there should be no environmental interference. Also, as I mentioned, the sensors work correctly whenever I manage to keep them in the proper mode.

I currently have the following settings on both sensors:

  • Radar Sensitivity: 5
  • Detection Range: 3 m
  • Departure Delay: 20 s
  • Entry Sensitivity: 6
  • Illuminance Threshold: 50 lux

Regarding Zigbee saturation, it is certainly possible. I have considered that as well because I have many Zigbee devices. However, I tried reducing the load on the network by removing a large number of Zigbee lighting relays, effectively cutting the network load roughly in half, and I did not notice any improvement.

As for the upcoming update, please let me know when it is available and I will be happy to test it and share my results.

Thanks again!

Hi @VicHY,

That is fantastic news! The “Repair” action successfully flushed the bad cache from Homey, which explains why your Lux and distance readings are finally accurate and why it stopped reverting to a Curtain device.

Your current settings (Sensitivity at 5, Departure at 20s) are a very solid baseline for a bathroom environment. If you ever experience “ghost presence” again once you turn the exhaust fan back on, try slightly reducing the sensitivity to 4 or 3.

I am currently finalizing the code for the “Ultimate Software Shield” update. Once it passes my local testing, I will push it to the Test channel and ping you here so you can try it out.

Enjoy your stable sensors in the meantime, and thank you for the detailed feedback!

Good morning @dlnraja,

I can see that the app has been updated to version 9.0.1053, and the sensors have become misconfigured again, remaining stuck with presence and motion detection active.

It also seems that the distance and lux readings are not correct, or they are reporting unusual values.

When I get back home, I will try repairing them and check how they behave with the new version.

Thank you very much.

Hi @dlnraja

after the latest Universal Tuya update my ZG253 TRV is now correctly detected as a radiator TRV (thanks!), but none of the capabilities work :sweat_smile:

Universal Tuya version: 9.0.1055
Model ID: TS0601
Manufacturer: _TZE284_ogx8u5z6
Device: ZG253 Tuya Zigbee thermostatic radiator valve

In Homey, target temperature, measured temperature, battery, thermostat mode etc. all remain empty/null.

When trying to change the target temperature I get this error:
tuya.datapoint: value is an unexpected property

Diagnostic report ID:
6eabd9c4-cd9c-4090-ba8d-3937d35de7ca

The Homey Zigbee interview confirms the Tuya manufacturer-specific cluster 0xEF00. I can provide the full interview if needed.

Good morning @dlnraja,

I’ve been testing the sensor since Friday, and to be honest, I haven’t managed to get it to detect me all weekend, :S.

I kept updating the app as you released new versions to see if that would fix it, but no luck…

If I re-pair or reinstall the sensor, it detects it as “presence”, but no data changes (presence, motion, and lux stay frozen at 10 lux, and distance/meters stay fixed too).

After a while, it switches to curtain mode and stays stuck detecting presence and motion, just like before.

I tried the new advanced settings features, and I can restart it without having to press the physical button to get it detected as a presence sensor again. However, I was already able to do this manually by enabling the “Clear presence now” button and then disabling it again.

Attached is the diagnostics code:
af98752d-f02e-4e74-a06e-ab8c025534bf

Thank you very much!

Hello again @dlnraja
Additionally, I’ve noticed that the Homey app is running slower within Advanced Flows. When I move a card, there is a noticeable lag, and the presence sensor cards seem to continuously disappear and reload.

I tried uninstalling the most recent apps I installed, but the issue persists. Because of this, I suspect it might be related to the latest updates for ‘Universal Tuya’ and that continuous refreshing required for the sensor to detect properly.

I also tried disabling the app (without uninstalling it), but I haven’t been able to resolve the lagging issue.

Best regards