Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Device Support Request] TY0201 by _TZ3000_bjawzodf #2862

Closed
idumzaes opened this issue Dec 26, 2023 · 77 comments · Fixed by #3201 · May be fixed by #3231
Closed

[Device Support Request] TY0201 by _TZ3000_bjawzodf #2862

idumzaes opened this issue Dec 26, 2023 · 77 comments · Fixed by #3201 · May be fixed by #3231
Labels
Tuya Request/PR regarding a Tuya device

Comments

@idumzaes
Copy link

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=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *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": "sonoffplus*",
"known_devices": [
"sonoff zigbee dongle plus v2"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "sonoffplus*",
"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=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *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
[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 = {
    #  <SimpleDescriptor endpoint=1, profile=260, device_type=262
    #  device_version=1
    #  input_clusters=[0, 1, 1024, 57346]
    #  output_clusters=[25, 10]>
    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 = {
    #  <SimpleDescriptor endpoint=1 profile=260 device_type=770
    # device_version=1
    # input_clusters=[0, 1, 3, 1029, 1026, 61183]
    # output_clusters=[3, 25]>
    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 = {
    #  <SimpleDescriptor endpoint=1, profile=260, device_type="0x0302"
    #  input_clusters=["0x0000", "0x0001", "0x0003", "0x0402", "0x0405", "0xe002"]
    #  output_clusters=["0x0003", "0x000a", "0x0019"]>
    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

@TheJulianJES TheJulianJES added the Tuya Request/PR regarding a Tuya device label Dec 27, 2023
@LukaszJedynowicz
Copy link

LukaszJedynowicz commented Dec 29, 2023

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

@idumzaes
Copy link
Author

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

@idumzaes
Copy link
Author

idumzaes commented Jan 1, 2024

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

@LukaszJedynowicz
Copy link

Hi. My custom quirk works.
ty0201.zip

@idumzaes
Copy link
Author

idumzaes commented Jan 3, 2024

Hi. My custom quirk works. ty0201.zip

It sure does! Thank you!!!

@tobibachert
Copy link

tobibachert commented Jan 4, 2024

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
Copy link
Author

idumzaes commented Jan 4, 2024

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

@tobibachert
Copy link

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:

  • applied quirk
  • checked configuration (just to be sure...)
  • restarted HA
  • deleted device
  • newly added device
  • restarted HA
    --> Device is running but still without humidity.

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
Copy link

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
Copy link

Davej817 commented Jan 5, 2024

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
Copy link

LukaszJedynowicz commented Jan 5, 2024

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
Copy link

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
Copy link
Author

idumzaes commented Jan 16, 2024

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
Copy link

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

@dolorosus
Copy link

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

@ThorstenDtk
Copy link

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
Copy link
Author

idumzaes commented Jan 27, 2024 via email

@dolorosus
Copy link

I paired this device using ZHA and SkyConnect as dongle.

@mpactdev
Copy link

mpactdev commented Jan 29, 2024

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
Copy link

gielie commented Feb 3, 2024

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
Copy link

vojacekj commented Feb 3, 2024

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

@TarekTaha
Copy link

@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
Copy link

koverg70 commented Feb 4, 2024

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
Copy link

gielie commented Feb 4, 2024

@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
Copy link

koverg70 commented Feb 4, 2024

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"]>

  1. 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
Copy link

Davej817 commented Feb 5, 2024

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
Copy link

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
Copy link

Davej817 commented Feb 7, 2024

@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

@antonGritsenko
Copy link

antonGritsenko commented Mar 15, 2024

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
Copy link

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
Copy link

vojacekj commented Mar 16, 2024

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
Copy link

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 #2862 (comment). 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
Copy link

thuesen commented Mar 16, 2024

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
Copy link

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
Copy link

erkr commented Apr 13, 2024

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
Copy link

chrizzo84 commented May 21, 2024

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
Copy link

jabradf commented May 27, 2024

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

@holocronweaver
Copy link

holocronweaver commented Jun 3, 2024

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
Copy link

RXT2020 commented Jun 4, 2024

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
Copy link

jekader commented Jun 5, 2024

Recently got to play with this device and I see the fix is already out there. Thanks to @philippedeswert in #2862 (comment)

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
Copy link
Contributor

@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.

philippedeswert added a commit to philippedeswert/zha-device-handlers that referenced this issue Jun 12, 2024
This seems to be a pretty common sensor, for which several models
seem to exist : _TZ3000_bjawzodf and _TZ3000_zl1kmjqx

Fixes: issues zigpy#2862, zigpy#2851, zigpy#2701

Signed-off-by: Philippe De Swert <[email protected]>
philippedeswert added a commit to philippedeswert/zha-device-handlers that referenced this issue Jun 12, 2024
This seems to be a pretty common sensor, for which several models
seem to exist : _TZ3000_bjawzodf and _TZ3000_zl1kmjqx

Fixes: zigpy#2862, zigpy#2851, zigpy#2701

Signed-off-by: Philippe De Swert <[email protected]>
philippedeswert added a commit to philippedeswert/zha-device-handlers that referenced this issue Jun 12, 2024
This seems to be a pretty common sensor, for which several models
seem to exist : _TZ3000_bjawzodf and _TZ3000_zl1kmjqx

Fixes: zigpy#2862, zigpy#2851, zigpy#2701

Signed-off-by: Philippe De Swert <[email protected]>
philippedeswert added a commit to philippedeswert/zha-device-handlers that referenced this issue Jun 12, 2024
This seems to be a pretty common sensor, for which several models
seem to exist : _TZ3000_bjawzodf and _TZ3000_zl1kmjqx

Fixes: zigpy#2862, zigpy#2851, zigpy#2701

Signed-off-by: Philippe De Swert <[email protected]>
philippedeswert added a commit to philippedeswert/zha-device-handlers that referenced this issue Jun 12, 2024
This seems to be a pretty common sensor, for which several models
seem to exist : _TZ3000_bjawzodf and _TZ3000_zl1kmjqx

Fixes: zigpy#2862, zigpy#2851, zigpy#2701

Signed-off-by: Philippe De Swert <[email protected]>
philippedeswert added a commit to philippedeswert/zha-device-handlers that referenced this issue Jun 12, 2024
This seems to be a pretty common sensor, for which several models
seem to exist : _TZ3000_bjawzodf and _TZ3000_zl1kmjqx

Fixes: zigpy#2862, zigpy#2851, zigpy#2701

Signed-off-by: Philippe De Swert <[email protected]>
@vJan00
Copy link

vJan00 commented Jun 25, 2024

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
Copy link
Contributor

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
Copy link

maceddy commented Jul 10, 2024

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
Copy link

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
Copy link
Contributor

puddly commented Jul 28, 2024

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
Copy link

holocronweaver commented Jul 29, 2024

This quirk was already merged: #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: home-assistant/core@dc0fc31

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.

@welja
Copy link

welja commented Oct 7, 2024

I just used the instructions of @holocronweaver and it works but only after doing step 8.

I also created a zha quirks directory and created the ty0201.py but i thought it would be in the Home Assistant release allready?
Is it possible that the ty0201.py is updated so that an inexperienced user (meaning myself :) ) doesnot have to mess with the "Manage zigbee device" settings?

Just wanted to share my experience and thanks @holocronweaver for the detailed instructions!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Tuya Request/PR regarding a Tuya device
Projects
None yet