zigpy / zha-device-handlers

ZHA device handlers bridge the functionality gap created when manufacturers deviate from the ZCL specification, handling deviations and exceptions by parsing custom messages to and from Zigbee devices.
Apache License 2.0
721 stars 670 forks source link

[Device Support Request] TY0201 by _TZ3000_bjawzodf #2862

Closed idumzaes closed 2 months ago

idumzaes commented 8 months ago

Problem description

Round white temperature and humidity sensor with display purchased from Temu. Only temperature and battery shows.

I attempted using the ts0201.py and replacing ("_TZ3000_qaaysllp", "TS0201") with ("_TZ3000_bjawzodf", "TY0201") and it seems to be working.

Solution description

Temperature, Humidity and Battery level support.

Screenshots/Video

Screenshots/Video Before Quirk Screenshot 2023-12-25 at 7 50 05 PM After Quirk Screenshot 2023-12-25 at 8 10 44 PM

Device signature

Device signature { "node_descriptor": "NodeDescriptor(logical_type=, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=, mac_capability_flags=, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)", "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x0302", "input_clusters": [ "0x0000", "0x0001", "0x0003", "0x0402", "0x0405" ], "output_clusters": [ "0x0019" ] } }, "manufacturer": "_TZ3000_bjawzodf", "model": "TY0201", "class": "zigpy.device.Device" }

Diagnostic information

Diagnostic information { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2023.12.3", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.11.6", "docker": true, "arch": "x86_64", "timezone": "America/New_York", "os_name": "Linux", "os_version": "6.1.63-haos", "supervisor": "2023.12.0", "host_os": "Home Assistant OS 11.2", "docker_version": "24.0.7", "chassis": "vm", "run_as_root": true }, "custom_components": { "meross_lan": { "version": "3.0.0", "requirements": [] }, "hacs": { "version": "1.33.0", "requirements": [ "aiogithubapi>=22.10.1" ] } }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "after_dependencies": [ "onboarding", "usb" ], "codeowners": [ "@dmulcahey", "@adminiuga", "@puddly", "@TheJulianJES" ], "config_flow": true, "dependencies": [ "file_upload" ], "documentation": "https://www.home-assistant.io/integrations/zha", "iot_class": "local_polling", "loggers": [ "aiosqlite", "bellows", "crccheck", "pure_pcapy3", "zhaquirks", "zigpy", "zigpy_deconz", "zigpy_xbee", "zigpy_zigate", "zigpy_znp", "universal_silabs_flasher" ], "requirements": [ "bellows==0.37.3", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.107", "zigpy-deconz==0.22.2", "zigpy==0.60.1", "zigpy-xbee==0.20.1", "zigpy-zigate==0.12.0", "zigpy-znp==0.12.0", "universal-silabs-flasher==0.0.15", "pyserial-asyncio-fast==0.11" ], "usb": [ { "vid": "10C4", "pid": "EA60", "description": "*2652*", "known_devices": [ "slae.sh cc2652rb stick" ] }, { "vid": "1A86", "pid": "55D4", "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus v2" ] }, { "vid": "10C4", "pid": "EA60", "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus" ] }, { "vid": "10C4", "pid": "EA60", "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ] }, { "vid": "1A86", "pid": "7523", "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ] }, { "vid": "1A86", "pid": "7523", "description": "*zigstar*", "known_devices": [ "ZigStar Coordinators" ] }, { "vid": "1CF1", "pid": "0030", "description": "*conbee*", "known_devices": [ "Conbee II" ] }, { "vid": "0403", "pid": "6015", "description": "*conbee*", "known_devices": [ "Conbee III" ] }, { "vid": "10C4", "pid": "8A2A", "description": "*zigbee*", "known_devices": [ "Nortek HUSBZB-1" ] }, { "vid": "0403", "pid": "6015", "description": "*zigate*", "known_devices": [ "ZiGate+" ] }, { "vid": "10C4", "pid": "EA60", "description": "*zigate*", "known_devices": [ "ZiGate" ] }, { "vid": "10C4", "pid": "8B34", "description": "*bv 2010/10*", "known_devices": [ "Bitron Video AV2010/10" ] } ], "zeroconf": [ { "type": "_esphomelib._tcp.local.", "name": "tube*" }, { "type": "_zigate-zigbee-gateway._tcp.local.", "name": "*zigate*" }, { "type": "_zigstar_gw._tcp.local.", "name": "*zigstar*" }, { "type": "_uzg-01._tcp.local.", "name": "uzg-01*" }, { "type": "_slzb-06._tcp.local.", "name": "slzb-06*" } ], "is_built_in": true }, "data": { "ieee": "**REDACTED**", "nwk": 63935, "manufacturer": "_TZ3000_bjawzodf", "model": "TY0201", "name": "_TZ3000_bjawzodf TY0201", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4417, "power_source": "Battery or Unknown", "lqi": 87, "rssi": null, "last_seen": "2023-12-25T18:54:54", "available": true, "device_type": "EndDevice", "signature": { "node_descriptor": "NodeDescriptor(logical_type=, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=, mac_capability_flags=, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)", "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x0302", "input_clusters": [ "0x0000", "0x0001", "0x0003", "0x0402", "0x0405" ], "output_clusters": [ "0x0019" ] } }, "manufacturer": "_TZ3000_bjawzodf", "model": "TY0201" }, "active_coordinator": false, "entities": [ { "entity_id": "button.tz3000_bjawzodf_ty0201_identify", "name": "_TZ3000_bjawzodf TY0201" }, { "entity_id": "sensor.tz3000_bjawzodf_ty0201_battery", "name": "_TZ3000_bjawzodf TY0201" }, { "entity_id": "sensor.tz3000_bjawzodf_ty0201_temperature", "name": "_TZ3000_bjawzodf TY0201" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "TEMPERATURE_SENSOR" } ], "user_given_name": null, "device_reg_id": "388644d1eb87a058dbda55635d46ea92", "area_id": null, "cluster_details": { "1": { "device_type": { "name": "TEMPERATURE_SENSOR", "id": 770 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "_TZ3000_bjawzodf" }, "0x0005": { "attribute_name": "model", "value": "TY0201" } }, "unsupported_attributes": {} }, "0x0001": { "endpoint_attribute": "power", "attributes": { "0x0021": { "attribute_name": "battery_percentage_remaining", "value": 200 } }, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0402": { "endpoint_attribute": "temperature", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 2360 } }, "unsupported_attributes": {} }, "0x0405": { "endpoint_attribute": "humidity", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 3870 } }, "unsupported_attributes": { "0x0000": { "attribute_name": "measured_value" } } } }, "out_clusters": { "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": {} } } } } } }

Logs

Logs ```python [Paste the logs here] ```

Custom quirk

Custom quirk """Tuya TS201 temperature, humidity and optional illumination sensors.""" from zigpy.profiles import zha from zigpy.profiles.zha import DeviceType from zigpy.quirks import CustomCluster, CustomDevice import zigpy.types as t from zigpy.zcl.clusters.general import Basic, Identify, Ota, PowerConfiguration, Time from zigpy.zcl.clusters.measurement import ( IlluminanceMeasurement, RelativeHumidity, TemperatureMeasurement, ) from zigpy.zdo.types import NodeDescriptor from zhaquirks.const import ( DEVICE_TYPE, ENDPOINTS, INPUT_CLUSTERS, MODELS_INFO, NODE_DESCRIPTOR, OUTPUT_CLUSTERS, PROFILE_ID, ) class ValueAlarm(t.enum8): """Temperature and humidity alarm values.""" ALARM_OFF = 0x02 MAX_ALARM_ON = 0x01 MIN_ALARM_ON = 0x00 class TuyaTemperatureHumidityAlarmCluster(CustomCluster): """Tuya temperature and humidity alarm cluster (0xE002).""" name = "Tuya Temperature and Humidity Alarm Cluster" cluster_id = 0xE002 attributes = { # Alarm settings 0xD00A: ("alarm_temperature_max", t.uint16_t, True), 0xD00B: ("alarm_temperature_min", t.uint16_t, True), 0xD00C: ("alarm_humidity_max", t.uint16_t, True), 0xD00E: ("alarm_humidity_min", t.uint16_t, True), # Alarm information 0xD00F: ("alarm_humidity", ValueAlarm, True), 0xD006: ("temperature_humidity", ValueAlarm, True), # Unknown 0xD010: ("unknown", t.uint8_t, True), } class NeoTemperatureHumidtyIlluminanceSensor(CustomDevice): """Neo temperature, humidity and illumination sensor.""" signature = { # MODELS_INFO: [("_TZ3000_bjawzodf", "TY0201")], ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: DeviceType.LIGHT_SENSOR, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, IlluminanceMeasurement.cluster_id, TuyaTemperatureHumidityAlarmCluster.cluster_id, ], OUTPUT_CLUSTERS: [ Time.cluster_id, Ota.cluster_id, ], }, }, } replacement = { ENDPOINTS: { 1: { INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, IlluminanceMeasurement.cluster_id, TuyaTemperatureHumidityAlarmCluster, ], OUTPUT_CLUSTERS: [ Time.cluster_id, Ota.cluster_id, ], }, 2: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: DeviceType.TEMPERATURE_SENSOR, INPUT_CLUSTERS: [ Basic.cluster_id, TemperatureMeasurement.cluster_id, RelativeHumidity.cluster_id, ], }, }, } class ZemismartTemperatureHumidtySensor(CustomDevice): """Zemismart temperature and humidity sensor.""" signature = { # MODELS_INFO: [("_TZ3000_lfa05ajd", "TS0201")], ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, RelativeHumidity.cluster_id, TemperatureMeasurement.cluster_id, 0xEEFF, # Unknown ], OUTPUT_CLUSTERS: [Identify.cluster_id, Ota.cluster_id], } }, } replacement = { NODE_DESCRIPTOR: NodeDescriptor( 0x02, 0x40, 0x80, 0x1037, 0x7F, 0x0064, 0x2C00, 0x0064, 0x00, # Forcing capability 0x80 instead of 0x84 so AC Power = false ), ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, RelativeHumidity.cluster_id, TemperatureMeasurement.cluster_id, ], OUTPUT_CLUSTERS: [Identify.cluster_id, Ota.cluster_id], } }, } class RelativeHumidityX10(CustomCluster, RelativeHumidity): """Handles invalid humidity values.""" def _update_attribute(self, attrid, value): # x10 factor in measured_value`(attrid=0) if attrid == 0: value = value * 10 super()._update_attribute(attrid, value) class MoesTemperatureHumidtySensorWithScreen(CustomDevice): """Moes temperature and humidity sensor with screen.""" signature = { # ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: DeviceType.TEMPERATURE_SENSOR, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, TemperatureMeasurement.cluster_id, RelativeHumidity.cluster_id, TuyaTemperatureHumidityAlarmCluster.cluster_id, ], OUTPUT_CLUSTERS: [ Identify.cluster_id, Time.cluster_id, Ota.cluster_id, ], }, }, } replacement = { ENDPOINTS: { 1: { INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, TemperatureMeasurement.cluster_id, RelativeHumidityX10, TuyaTemperatureHumidityAlarmCluster, ], OUTPUT_CLUSTERS: [ Identify.cluster_id, Time.cluster_id, Ota.cluster_id, ], }, }, }

Additional information

https://www.temu.com/tuya-smart-zigbee-temperature-and-humidity-sensor-smart-life-app-control-indoor-humidity-detector-works-with-zigbee-gateway-hub-g-601099531358811.html

thuesen commented 6 months ago

Someone wrote this morning that:

After applying this quick, my ZHA shows nothing - no temp, no humidity.

But that message is now gone. If that someone managed to fix that issue, please enlighten us :D I'm stuck at the same, after finally getting the device removed from ZHA (I think).

philippedeswert commented 6 months ago

Someone wrote this morning that:

After applying this quick, my ZHA shows nothing - no temp, no humidity.

But that message is now gone. If that someone managed to fix that issue, please enlighten us :D I'm stuck at the same, after finally getting the device removed from ZHA (I think).

Usually restarting ZHA helps with that, but only after you added the device back... I had some cases when trying things out that the device would not report temp and/or humidity but would be fine after a ZHA restart.

gielie commented 6 months ago

Someone wrote this morning that:

After applying this quick, my ZHA shows nothing - no temp, no humidity.

But that message is now gone. If that someone managed to fix that issue, please enlighten us :D I'm stuck at the same, after finally getting the device removed from ZHA (I think).

In your custom quirk folder is a pycache folder, you can try to remove the files or the whole folder, restart and add your device.

thuesen commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity.

I guess I'll let it be for now. Maybe it will change its mind eventually.

vojacekj commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity.

I guess I'll let it be for now. Maybe it will change its mind eventually.

Same here with @philippedeswert quirk I now don't even see temperature, which was only thing working out of the box.

I used txt file provided, I see that this quirk was applied but temperature and humidity is missing. (Did restart, remove device and cache, etc )

philippedeswert commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity. I guess I'll let it be for now. Maybe it will change its mind eventually.

Same here with @philippedeswert quirk I now don't even see temperature, which was only thing working out of the box.

I used txt file provided, I see that this quirk was applied but temperature and humidity is missing. (Did restart, remove device and cache, etc )

I hope you changed the txt extension back to .py?

vojacekj commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity. I guess I'll let it be for now. Maybe it will change its mind eventually.

Same here with @philippedeswert quirk I now don't even see temperature, which was only thing working out of the box.

I used txt file provided, I see that this quirk was applied but temperature and humidity is missing. (Did restart, remove device and cache, etc )

I hope you changed the txt extension back to .py?

Yes I did as, I don't think it would be applied otherwise.

antonGritsenko commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity.

I guess I'll let it be for now. Maybe it will change its mind eventually.

You are not alone :) Same story, diagnostic shows that now temperature is not supported, but show nothing for both )))

UPD: after yet another restart the humidity back to live, but not temperature )) Magic... I can read both values using Manage Zigbee Device, btw...

UPD2: hm, now Download Diagnostic shows that all *value attributes supported, I did restart of the HA and guess what... it works... May be my manual execution of the Read Values in the Manage Zigbee Device did the trick, not sure..

UPD3: similar comment here, so may be really reading values manually do the magic...

tobibachert commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity. I guess I'll let it be for now. Maybe it will change its mind eventually.

You are not alone :) Same story, diagnostic shows that now temperature is not supported, but show nothing for both )))

UPD: after yet another restart the humidity back to live, but not temperature )) Magic... I can read both values using Manage Zigbee Device, btw...

UPD2: hm, now Download Diagnostic shows that all *value attributes supported, I did restart of the HA and guess what... it works... May be my manual execution of the Read Values in the Manage Zigbee Device did the trick, not sure..

UPD3: similar comment here, so may be really reading values manually do the magic...

UPD3 seems to do it...same procedure as described, manual reading, temperature and humidity could be read but were not available as entities in the device, then restarting HA and - MAGIC - they're here and updating! Let's see if it stays this way, if you compare my comment some days ago I was somehow able to get both values directly after adding the device with the custom quirk, but then the values stopped both updating.

vojacekj commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity. I guess I'll let it be for now. Maybe it will change its mind eventually.

You are not alone :) Same story, diagnostic shows that now temperature is not supported, but show nothing for both )))

UPD: after yet another restart the humidity back to live, but not temperature )) Magic... I can read both values using Manage Zigbee Device, btw...

UPD2: hm, now Download Diagnostic shows that all *value attributes supported, I did restart of the HA and guess what... it works... May be my manual execution of the Read Values in the Manage Zigbee Device did the trick, not sure..

UPD3: similar comment here, so may be really reading values manually do the magic...

UPD3 seems to do it...same procedure as described, manual reading, temperature and humidity could be read but were not available as entities in the device, then restarting HA and - MAGIC - they're here and updating! Let's see if it stays this way, if you compare my comment some days ago I was somehow able to get both values directly after adding the device with the custom quirk, but then the values stopped both updating.

Do you use any quirk? If yes which one?

Edit: yes it looks like it is finally working also for me without any quirk. Just read those values and restart the HA ( I recently also updated HA to newest version 2024.3.1, if anybody interested, but I am not sure if that has anything to do with this, so upgrade on your own risk)

Edit2: Got bit confused, in the end I had to use quirk to manually read data, but if quirk was then removed it was still working afterwards.

tobibachert commented 6 months ago

Thank you philippe and gielie for your suggestions. I was not aware of the pycache folder, File Editor was hiding it. I tried to clear it, restart ZHA, HA, re-pair etc etc., but it keeps appearing with only "Firmware", no temperature or humidity. I guess I'll let it be for now. Maybe it will change its mind eventually.

You are not alone :) Same story, diagnostic shows that now temperature is not supported, but show nothing for both ))) UPD: after yet another restart the humidity back to live, but not temperature )) Magic... I can read both values using Manage Zigbee Device, btw... UPD2: hm, now Download Diagnostic shows that all *value attributes supported, I did restart of the HA and guess what... it works... May be my manual execution of the Read Values in the Manage Zigbee Device did the trick, not sure.. UPD3: similar comment here, so may be really reading values manually do the magic...

UPD3 seems to do it...same procedure as described, manual reading, temperature and humidity could be read but were not available as entities in the device, then restarting HA and - MAGIC - they're here and updating! Let's see if it stays this way, if you compare my comment some days ago I was somehow able to get both values directly after adding the device with the custom quirk, but then the values stopped both updating.

Do you use any quirk? If yes which one?

Edit: yes it looks like it is finally working also for me without any quirk. Just read those values and restart the HA ( I recently also updated HA to newest version 2024.3.1, if anybody interested, but I am not sure if that has anything to do with this, so upgrade on your own risk)

I was using this querk from philipedeswert above https://github.com/zigpy/zha-device-handlers/issues/2862#issuecomment-1975062539. I am running HA 2024.2.5 at the moment. The values are still updating this morning :-) I will try without querk after your comment and give an update later

thuesen commented 6 months ago

Worked for me too, doing the manual reading. Afterwards, humidity and temperature appears and seems to update. Hope it continues to work :) Thanks for bringing that idea out there!

Still using the quirk. Don't know if it will work without the quirk.

antonGritsenko commented 6 months ago

Worked for me too, doing the manual reading. Afterwards, humidity and temperature appears and seems to update. Hope it continues to work :) Thanks for bringing that idea out there!

Still using the quirk. Don't know if it will work without the quirk.

No, it doesn't work without quirk, even can't read values manually.

erkr commented 5 months ago

The version in this comment from @philippedeswert works for me ( needed to re-pair the device, then restart HA, as initially I had no temperature and no humidity)

chrizzo84 commented 3 months ago

I do have _TZ3000_zl1kmjqx and with quirk in this comment it is working for me. I just did a reconfig + restart of HA, than it started working. Thank you!

Only what I had to do is to adjust MODELS_INFO to:

MODELS_INFO: [ ("_TZ3000_bjawzodf", "TY0201"), ("_TZ3000_zl1kmjqx", "TY0201"), ("_TZ3000_zl1kmjqx", "") ]

jabradf commented 3 months ago

The file from @philippedeswert worked for me too, thanks!

holocronweaver commented 3 months ago

Summary of steps I took to get _TZ3000_bjawzodf working in Home Assistant, using the above comments:

  1. Download the quirk by @philippedeswert.
  2. Move the file to your Home Assistant ZHA quirks directory (in my case /config/zha_quirks) and change the file extension to .py (since it is written in Python) so that you end up with /config/zha_quirks/ty0201.py.
  3. Ensure your ZHA quirks directory is in your HA configuration.yaml:
    zha:
     custom_quirks_path: /config/zha_quirks  
  4. Remove the thermometer from HA if it was previously added.
  5. Restart Home Assistant.
  6. Add the thermometer to HA.
  7. Verify under the device's 'Zigbee info' section in HA that the quirk is being used. Should say:
    Quirk: tuya_ty0201_thermometer.TemperatureHumiditySensorWithScreen
  8. If the temperature and humidity values are not showing, go to the device in HA and select Triple Dots -> Manage zigbee device -> select TuyaAirQualityHumidity in clusters -> measured_value in attributes -> read attribute. Repeat the same for the TuyaAirQualityTemperature cluster. Restart HA again. Verify in the device's 'Download diagnostics' that the temperature and humidity are no longer unsupported values - you may need to refresh the page to see the sensors.
RXT2020 commented 3 months ago

Thanks @holocronweaver and @philippedeswert for the file and the step-by-step summary of how to solve this problem. Finally this worked for me!

jekader commented 3 months ago

Recently got to play with this device and I see the fix is already out there. Thanks to @philippedeswert in https://github.com/zigpy/zha-device-handlers/issues/2862#issuecomment-1975062539

This is not the only request for support, there's also #2851 and #2701 so many people are using this sensor. Digging through github issues and installing custom quirks might be too much for some however.

@philippedeswert would you be so kind as to send a PR to add the quirk to the repo and help any future users? Otherwise I can do that for you.

philippedeswert commented 3 months ago

@philippedeswert would you be so kind as to send a PR to add the quirk to the repo and help any future users? Otherwise I can do that for you.

I could, I just don't feel like the quirk is actually 100% correct. OTOH a PR might get some eyes on it that could make it work 100%. I'll see what I can do later tonight.

vJan00 commented 2 months ago

I looked over this thread and no solution really worked, so I worked on my own. @philippedeswert I got this Tuya sensor from AliExpress, maybe its a different one with same signature? Anyways this is my ty0201.py (custom quirk): ty0201.py.zip

It uses the TuyaLocalCluster class which the other Tuya thermometer quirks utilizes and it worked flawlessly from the beginning.

philippedeswert commented 2 months ago

I looked over this thread and no solution really worked, so I worked on my own. @philippedeswert I got this Tuya sensor from AliExpress, maybe its a different one with same signature? Anyways this is my ty0201.py (custom quirk): ty0201.py.zip

It uses the TuyaLocalCluster class which the other Tuya thermometer quirks utilizes and it worked flawlessly from the beginning.

Good you got it working. I was not 100% sure of my fix and this weekend I finally should have some time to play around with getting the quirk updated to v2.

maceddy commented 2 months ago

Maybe something changed in the firmware of these things. Last year I ordered three of these. Works perfect, all sensor are reporting. Last month I bought two more (same make/model and same device ID in Zigbee but the new ones won't display temp/hum (they did day one by the way). Re-adding does not show the sensors. Real weird.

Edit: wait a minute.. The existing devices are TS0601 and the new ones are TY0201.

elyobelyob commented 1 month ago

This needs to be a quirk less thing, if it works. I only just bought these devices, and the quirk worked. I'd have thought after 6 months, this would have hit core.

puddly commented 1 month ago

Quirks are going to be there no matter what. If you manually load one written by a community member, help write tests and make sure it's in a state to merge into the library!

holocronweaver commented 1 month ago

This quirk was already merged: https://github.com/zigpy/zha-device-handlers/pull/3201

It is in zigpy device handlers release 0.0.117 from June 26th: https://github.com/zigpy/zha-device-handlers/releases/tag/0.0.117

However it looks like Home Assistant hasn't last updated zigpy since June 14th: https://github.com/home-assistant/core/commit/dc0fc318b813795900e798053adfaecb0548a735

I am not sure how zigpy / device handler updates are distributed to Home Assistant, but I suspect it will show up in a future HA release.