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
719 stars 664 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

LukaszJedynowicz commented 8 months ago

Hi. My equipment works the same. Only temperature and battery shows. TY0201, _TZ3000_bjawzodf HA 2023.12.4

idumzaes commented 8 months ago

Try the custom quirk I listed on the original post. It should work for you as it is working for me.

idumzaes commented 8 months ago

I take it back. The humidity stopped working for whatever reason.

LukaszJedynowicz commented 8 months ago

Hi. My custom quirk works. ty0201.zip

idumzaes commented 8 months ago

Hi. My custom quirk works. ty0201.zip

It sure does! Thank you!!!

tobibachert commented 8 months ago

Hi. My custom quirk works. ty0201.zip

Hello,

I just received one TY0201 by _TZ3000_bjawzodf device today and encountered the same situation as described in this issue. I could add the device to HA in ZHA, but I only got battery and temperature, but not humidity. My HA is running on a raspberry PI 4 with ConBee II Zigbee stick.

After some search, I found this issue and tried the ty0201.zip custom quirk from @LukaszJedynowicz . I think i managed to activate it ( I have no experience with custom quirks until now, I followed this description) correctly as I have an additional line in the Zigbee info of the device including the typo with the missing "i" from the ty0201.py (see screenshots). But still the humidity is missing (also see screenshots). I deleted and newly added the device to be sure. Did you do anything additionally to get it running with humidity?

Thank you in advance!

Screenshot 1 - without quirk: without quirk Screenshot 2 - with quirk: with_quirk

idumzaes commented 8 months ago

It didn’t work for me at first either. Try restarting HA after applying the quirk and then adding the device again.

tobibachert commented 8 months ago

It didn’t work for me at first either. Try restarting HA after applying the quirk and then adding the device again.

Thanks for your answer. I'm sorry I wasn't precise enough what I did, unfortunately I already did these steps. In detail:

I have the latest HA core update and some other updates open, so I will take the time to do all updates now. I will give an update tomorrow if that changes anything.

tobibachert commented 8 months ago

Update: I did not succeed in getting the humidity in home assistant. I will leave it as it is for the moment, maybe there will be some activity here in the future that helps me getting it running.

Thank you @idumzaes for you support!

Davej817 commented 8 months ago

I don't know if this helps but here are a couple of internal pictures and a link to all the endpoints on the Tuya website as I too am experiencing the same problem.

1704465116493 1704465494519

https://developer.tuya.com/en/docs/connect-subdevices-to-gateways/zigbee-sensor?id=K9ik6zvmhrfh6

LukaszJedynowicz commented 8 months ago

Hi, I have two identical thermometers. The second thermometer only shows the temperature, but both provide humidity information in their diagnostics. Diagnostics are identicaly. Check your diagnostic information to see if there's humidity information available. "0x0405": { "endpoint_attribute": "humidity", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 4140 } }, "unsupported_attributes": { "0x0000": { "attribute_name": "measured_value" } } } The thermometers are of very poor quality.

ty0201 ty0201-2

Quirk: ty0201.TemperatureHumidtySensorWithScreen value: 41,40

leopold-code commented 8 months ago

Hello, I got the same device today TY0201 _TZ3000_bjawzodf firmware: 0x10013001 The problem with ZHA is a little bit different. I can see the humidity but not the temperature. Currently I have no quirks installed. I am working with the current HA Version image I am very interested in the temperature not so much in the humidity. Because of this I am looking forward for a fix. Below a screenshot from my device configuration. image

idumzaes commented 7 months ago

Hi. My custom quirk works. ty0201.zip

I can confirm this custom quirk works. I have been using it for 2 weeks without any issues. If you are still having issues, you might need to check and see if Quirks are correctly enabled.

Screenshot 2024-01-16 at 1 07 27 AM
Davej817 commented 7 months ago

Unfortunately, this still didn't work for me. image

dolorosus commented 7 months ago

Same here. The custom quirk doesn't work for me either. 2024-01-16 17_40_24-MeinHA - Einstellungen – Home Assistant

ThorstenDtk commented 7 months ago

How did you manage to pair the device? I tried to pair with PhosCon several times, also tried different devices, it never succeeded. Usually I'm using ioBroker with the Deconz adapter and RaspBee, but for testing I tried to pair using the Zigbee adapter in ioBroker and the Sonoff USB stick - that worked immediately.

idumzaes commented 7 months ago

I’ve been using ZHA with a Sonoff Zigbee 3.0 USB Dongle Plus.  I’ve never used PhisCon, Deconz, ioBroker or RaspBee. On Jan 27, 2024, at 3:10 PM, ThorstenDtk @.***> wrote: How did you manage to pair the device? I tried to pair with PhosCon several times, also tried different devices, it never succeeded. Usually I'm using ioBroker with the Deconz adapter and RaspBee, but for testing I tried to pair using the Zigbee adapter in ioBroker and the Sonoff USB stick - that worked immediately.

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

dolorosus commented 7 months ago

I paired this device using ZHA and SkyConnect as dongle.

mpactdev commented 7 months ago

The custom quirk mentioned does not work for me either. I'm not experienced with quirk development, but I also don't know why it works for anyone (please someone explain if they know, I'm legit curious, not criticizing) - since on the surface it appears to make the replacement template identical to the original.

Furthermore, if anyone understands how it's putting humidity in "unsupported_attributes" in the first place, please explain as well... the address 0x0405 is the valid address in the Zigbee spec for this attribute, just as 0x0402 is the correct address for temperature.

gielie commented 7 months ago

For me the quirk posted here didn't work either so I changed it a bit and now it works for me. this Is my quirk. `"""Tuya TY0201 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 TemperatureHumidtySensorWithScreen(CustomDevice): """Temu temperature and humidity sensor with screen."""

signature = {
    #  <SimpleDescriptor endpoint=1, profile=260, device_type="0x0302"
    #  input_clusters=["0x0000", "0x0001", "0x0003", "0x0402", "0x0405", "0xe002]
    #  output_clusters=["0x0003", "0x000a", "0x0019"]>
    MODELS_INFO: [("_TZ3000_bjawzodf", "TY0201")],
    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,
              ],
            OUTPUT_CLUSTERS: [
                Ota.cluster_id,
            ],
        },
    },
}

replacement = {
    ENDPOINTS: {
        1: {
            INPUT_CLUSTERS: [
                Basic.cluster_id,
                PowerConfiguration.cluster_id,
                Identify.cluster_id,
                TemperatureMeasurement.cluster_id,
                RelativeHumidity.cluster_id,
            ],
            OUTPUT_CLUSTERS: [
                Ota.cluster_id,
            ],
        },
    },
}`
vojacekj commented 7 months ago

@gielie could you post it as a file? I think formatting broke it.

TarekTaha commented 7 months ago

@gielie I have the same problem: "Only temperature shown". I had a look at the code posted above; it's the same as in the quirk files above, but I don't see any difference. What did you actually change?

koverg70 commented 7 months ago

I have had the same issue: no humidity only temperature in HA Today I have upgraded to latest (2024.1.6) HA and added the custom quirk. After that no measurement at all. Even the temperature and battery disappeared. Then I stopped HA (docker container), removed the quirk and the cache in the custom quirk folder. Started HA Docker container (on Raspberry Pi 4).

And it wokrs: image

gielie commented 7 months ago

@gielie I have the same problem: "Only temperature shown". I had a look at the code posted above; it's the same as in the quirk files above, but I don't see any difference. What did you actually change?

I changed this part

  #  input_clusters=["0x0000", "0x0001", "0x0003", "0x0402", "0x0405"]
   #  output_clusters=["0x0019"]>

into this

  #  input_clusters=["0x0000", "0x0001", "0x0003", "0x0402", "0x0405", "0xe002”]
  #  output_clusters=["0x0003", "0x000a", "0x0019"]>
koverg70 commented 7 months ago

Hi @gielie !

Thanks for sharing your config. Let me ask two questions:

  1. These modified lines are only source comments. How do these effect the configuration? There is also a typo in the first comment line "0xe002 missing closing quoutes.

    # input_clusters=["0x0000", "0x0001", "0x0003", "0x0402", "0x0405", "0xe002] # output_clusters=["0x0003", "0x000a", "0x0019"]>

  2. Shouldn't the modification be made on the following lists two? How do you do it?

    INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, TemperatureMeasurement.cluster_id, RelativeHumidity.cluster_id, ], OUTPUT_CLUSTERS: [ Ota.cluster_id, ],

Regards,

Gábor

Davej817 commented 7 months ago

This is very strange. Following the change to the quirks file, one of the sensors has started showing temperature and humidity but another is only showing temperature still.

I have tried repeatedly restarting HA and removing the cache file but no further change.

koningdde commented 7 months ago

Hi, Iam trying to get this working also, I got all the same results as above except a working device.

I cannot find how the clear the cache for the quirks, can anyone point me in the right direction?

My feeling is that any change I make to the quirk is not loaded when I pair the device.

Thanks in advance.

Danny

Davej817 commented 7 months ago

@koningdde your quirks cache is in config\zha_quirks\__pycache__. You can also see if your quirk is being used by looking at the device info image

koningdde commented 7 months ago

@koningdde your quirks cache is in config\zha_quirks\__pycache__. You can also see if your quirk is being used by looking at the device info image

Thank you, I should have been looking a little closer as it is states obvious in the folder. I will restart this adventure now and see if the quirks is used again, indeed the quirk was not loaded at my configuation.

Davej817 commented 7 months ago

To add to the confusion I unpaired the working device, re-paired and the sensor returned to only showing temperature. It seems there is something more at play. I now have no idea how I got it fully working.

koningdde commented 7 months ago

Weird results here also, i removed the devices, after pairing one is showing temperature, the other one has no data. When pairing the endpoints looks fine.

image

Data is available on one device, but only temperature: image

Seems to me we are on the wrong track or the device doen's communicate as i should, maybe a timing problem in the RF system.

I think the devices are rubbish :)

gielie commented 7 months ago

Weird results here also, i removed the devices, after pairing one is showing temperature, the other one has no data. When pairing the endpoints looks fine.

image

Data is available on one device, but only temperature: image

Seems to me we are on the wrong track or the device doen's communicate as i should, maybe a timing problem in the RF system.

I think the devices are rubbish :)

Don’t give up, with my Quirk I have 5 devices working, I can remove them and add them without any problem.

But the main thing is that it is an ZHA problem in Z2MQTT they are all working out of the box.

koningdde commented 7 months ago

Thanks, i don't feel like migrating to Z2MQTT yet, because i need to pair everything again, Although i like the idea that i can manipulate the communication more.

insane2subro commented 7 months ago

After repeatedly deleting the device and re-adding worked using the custom quirk given on this thread.

idumzaes commented 7 months ago

After repeatedly deleting the device and re-adding worked using the custom quirk given on this thread.

Pretty much what I did to get mine working with ZHA and it’s been working ever since. Though I only have one of these sensors.

tomeq82 commented 7 months ago

I have four of these devices, the same, and they act randomly - some of them register humidity, some of them temperature. I never got two readings at once. Suprisingly, they are ultra reliable under zigbee2mqtt, in contrast to other meters...

thuesen commented 6 months ago

Here's the ty0201.py.zip that I ended up using which seems to work for me. I don't know if it continues to work, as of now, it does.

This is the file mentioned earlier in the thread, and with the changes from @gielie. I made no other changes to it, I'm just posting it here as a file to make it easier to download (remember to unzip) :)

gielie commented 6 months ago

Mine stopt working after a couple of days, can’t get them to include anymore in zha, I switched to z2mqtt, no more troubles.

Someone needs to pick this up why zha doesn’t work but z2mqtt has no problem with this device.

thuesen commented 6 months ago

Mine stopt working after a couple of days, can’t get them to include anymore in zha, I switched to z2mqtt, no more troubles.

Well that doesn't bode well.

Also, I can't get my 2nd of these devices to give me humidity, despite the same quirk is being applied as for the 1st one.

Weird.

EDIT: Well that was quick. Not sure if it was HA restart or not that caused it, but ZHA stopped reading the Humidity. The diagnostic file contains the correct value from the sensor though, but it's also unsupported it seems:

        "0x0405": {
            "endpoint_attribute": "humidity",
            "attributes": {
              "0x0000": {
                "attribute_name": "measured_value",
                "value": 3800
              }
            },
            "unsupported_attributes": {
              "0x0000": {
                "attribute_name": "measured_value"
              },
              "0xfffd": {
                "attribute_name": "cluster_revision"
              }
            }
          }

Here's to hoping ZHA can fix this at some point.

tomeq82 commented 6 months ago

This seems to be something very elementary at the protocol level query - as those particular meters doesn't work well here, while they work perfect in z2mqtt, but on the contrary - meters from Sonoff (eg. TH01) doesn't work well in z2mqtt while they are perfect here (ZHA) - i whish I have skills to compare differences, when the devices "talks" and how to debug that...

idumzaes commented 6 months ago

On damn. My single one of these stopped reporting humidity so I’m back to square one.
I’m thinking about switching to Z2MQTT but that’s a drastic move for just one device. I’ll probably just end up not using this sensor.

philippedeswert commented 6 months ago

The quirk did not immediately work for me. But after some other tweaking and restarting home assistant it finally got the humidity. I did notice the same thing as @theusen, which is that for some reason the humidity gets marked as unsupported. Thus I thought to maybe map it to something Tuya specific... No idea if this is even sane, as it is entirely new to me.

` """Tuya TY0201 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, )

from zhaquirks.tuya.air import ( TuyaAirQualityTemperature, TuyaAirQualityHumidity, )

class TemperatureHumiditySensorWithScreen(CustomDevice):
"""Temu temperature and humidity sensor with screen."""

signature = {                                          
    #  <SimpleDescriptor endpoint=1, profile=260, device_type="0x0302"
    #  input_clusters=["0x000", "0x0001", "0x0003", "0x0402", "0x0405"]
    #  output_clusters=["0x0019"]>                                     
    MODELS_INFO: [("_TZ3000_bjawzodf", "TY0201")],                     
    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,                           
              ],                                                       
            OUTPUT_CLUSTERS: [                                         
                Ota.cluster_id,                                       
            ],                                                         
        },                                                            
    },                                                                 
}                                                                     

replacement = {                                                        
    ENDPOINTS: {                                                      
        1: {                                                           
            INPUT_CLUSTERS: [                                         
                Basic.cluster_id,                                      
                PowerConfiguration.cluster_id,         
                Identify.cluster_id,                   
                TuyaAirQualityTemperature,    
                TuyaAirQualityHumidity,                
            ],                                
            OUTPUT_CLUSTERS: [                         
                Ota.cluster_id,                   
            ],                                
        },                                        
    },                                        
}                        

`

llucax commented 6 months ago

Hi @philippedeswert, I was just trying to make this work and saw your comment and tried it out, and I can confirm that it works for me too! I couldn't get the original quirk to work at all, even after several repairs and restarts.

I had to figure out the correct file format because your comment formatting is messed up, but after applying the changes, restarting and re-pairing I finally got the humidity to show! :tada:

gielie commented 6 months ago

Hi @philippedeswert, I was just trying to make this work and saw your comment and tried it out, and I can confirm that it works for me too! I couldn't get the original quirk to work at all, even after several repairs and restarts.

I had to figure out the correct file format because your comment formatting is messed up, but after applying the changes, restarting and re-pairing I finally got the humidity to show! 🎉

Could you share the file u used? Many thanks.

philippedeswert commented 6 months ago

Hi @philippedeswert, I was just trying to make this work and saw your comment and tried it out, and I can confirm that it works for me too! I couldn't get the original quirk to work at all, even after several repairs and restarts. I had to figure out the correct file format because your comment formatting is messed up, but after applying the changes, restarting and re-pairing I finally got the humidity to show! 🎉

Could you share the file u used? Many thanks.

I apologize for the bad formatting, the quoting/code block just did not want to work correctly. Had to rename the file to .txt, but I guess it should be ok.

Anyway I hope it helps. I suspect there is still some Tuya specific thing with the clusters/power as reconfiguring now works for the temperature and humidity but not for the battery,

ty0201.txt

tobibachert commented 6 months ago

Hi @philippedeswert, I was just trying to make this work and saw your comment and tried it out, and I can confirm that it works for me too! I couldn't get the original quirk to work at all, even after several repairs and restarts. I had to figure out the correct file format because your comment formatting is messed up, but after applying the changes, restarting and re-pairing I finally got the humidity to show! 🎉

Could you share the file u used? Many thanks.

I apologize for the bad formatting, the quoting/code block just did not want to work correctly. Had to rename the file to .txt, but I guess it should be ok.

Anyway I hope it helps. I suspect there is still some Tuya specific thing with the clusters/power as reconfiguring now works for the temperature and humidity but not for the battery,

ty0201.txt

Great...with this querk, humidity is finally working for me after newly adding the device. Thanks a lot!

gielie commented 6 months ago

Hi @philippedeswert, I was just trying to make this work and saw your comment and tried it out, and I can confirm that it works for me too! I couldn't get the original quirk to work at all, even after several repairs and restarts. I had to figure out the correct file format because your comment formatting is messed up, but after applying the changes, restarting and re-pairing I finally got the humidity to show! 🎉

Could you share the file u used? Many thanks.

I apologize for the bad formatting, the quoting/code block just did not want to work correctly. Had to rename the file to .txt, but I guess it should be ok.

Anyway I hope it helps. I suspect there is still some Tuya specific thing with the clusters/power as reconfiguring now works for the temperature and humidity but not for the battery,

ty0201.txt

great work, this works for all my devices, many thanks.

thuesen commented 6 months ago

How do you re-add it / factory reset it?

I can't seem to figure out how to get it work. Whenever I remove it from ZHA, and I start to pair it again, it just re-appears in the list.

It seems if I hold down the top-button on the device for more than 10 seconds, it seems to forget its connected to my ZHA. But once I add it again, it gets the old quirk added (I believe), despite I removed it and only use the new one.

Davej817 commented 6 months ago

Absolutely excellent @gielie that did it. Now showing humidity. I hadn't realised that I had to remove the device and unpair the sensor by holding the button in until the signal strength on the display disappeared. I then paired as usual and voila it works.

koningdde commented 6 months ago

I changed the network to Z2MQTT an it is working without problems, so i cannot test this anymore, but i hope for you guys this is working now.