question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[Device Support Request] Moes Temperature And Humidity Sensor With LED Screen TS0201 (_TZ3000_itnrsufe)

See original GitHub issue

Is your feature request related to a problem? Please describe. Device from https://www.aliexpress.com/item/1005004443497564.html reports relative humidity in a wrong way. Instead of reporting value*100 (as it described in ZCL) it reports value*10. As a result ZHA converts it to actual_relative_humidity/10. Right now LED screen on the device showing 42% but HA showing 4.2%

Describe the solution you’d like I think zhaquirk is needed for the device. The zhaquirk should apply multiplication by 10 for relative humidity value.

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": 260,
      "device_type": "0x0302",
      "in_clusters": [
        "0x0000",
        "0x0001",
        "0x0003",
        "0x0402",
        "0x0405",
        "0xe002"
      ],
      "out_clusters": [
        "0x0003",
        "0x000a",
        "0x0019"
      ]
    }
  },
  "manufacturer": "_TZ3000_itnrsufe",
  "model": "TS0201",
  "class": "zigpy.device.Device"
}
Diagnostic information
{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2022.7.6",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.10.5",
    "docker": true,
    "arch": "x86_64",
    "timezone": "Europe/Kiev",
    "os_name": "Linux",
    "os_version": "5.15.55",
    "supervisor": "2022.07.1",
    "host_os": "Home Assistant OS 8.4",
    "docker_version": "20.10.14",
    "chassis": "embedded",
    "run_as_root": true
  },
  "custom_components": {
    "hisense_tv": {
      "version": "22.05.09",
      "requirements": [
        "wakeonlan==2.0.1"
      ]
    },
    "xiaomi_cloud_map_extractor": {
      "version": "v2.2.0",
      "requirements": [
        "pillow",
        "pybase64",
        "python-miio",
        "requests",
        "pycryptodome"
      ]
    },
    "hacs": {
      "version": "1.25.5",
      "requirements": [
        "aiogithubapi>=22.2.4"
      ]
    },
    "viomi_vacuum_v8": {
      "version": "0.0.1",
      "requirements": [
        "construct==2.10.59",
        "python-miio==0.5.4"
      ]
    },
    "xiaomi_miot": {
      "version": "0.6.7",
      "requirements": [
        "construct==2.10.56",
        "python-miio>=0.5.6",
        "micloud>=0.3"
      ]
    }
  },
  "integration_manifest": {
    "domain": "zha",
    "name": "Zigbee Home Automation",
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/zha",
    "requirements": [
      "bellows==0.31.1",
      "pyserial==3.5",
      "pyserial-asyncio==0.6",
      "zha-quirks==0.0.77",
      "zigpy-deconz==0.18.0",
      "zigpy==0.47.3",
      "zigpy-xbee==0.15.0",
      "zigpy-zigate==0.9.0",
      "zigpy-znp==0.8.1"
    ],
    "usb": [
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*2652*",
        "known_devices": [
          "slae.sh cc2652rb stick"
        ]
      },
      {
        "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": "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"
        ]
      }
    ],
    "codeowners": [
      "@dmulcahey",
      "@adminiuga"
    ],
    "zeroconf": [
      {
        "type": "_esphomelib._tcp.local.",
        "name": "tube*"
      },
      {
        "type": "_zigate-zigbee-gateway._tcp.local.",
        "name": "*zigate*"
      }
    ],
    "after_dependencies": [
      "onboarding",
      "usb",
      "zeroconf"
    ],
    "iot_class": "local_polling",
    "loggers": [
      "aiosqlite",
      "bellows",
      "crccheck",
      "pure_pcapy3",
      "zhaquirks",
      "zigpy",
      "zigpy_deconz",
      "zigpy_xbee",
      "zigpy_zigate",
      "zigpy_znp"
    ],
    "is_built_in": true
  },
  "data": {
    "ieee": "**REDACTED**",
    "nwk": 9904,
    "manufacturer": "_TZ3000_itnrsufe",
    "model": "TS0201",
    "name": "_TZ3000_itnrsufe TS0201",
    "quirk_applied": false,
    "quirk_class": "zigpy.device.Device",
    "manufacturer_code": 4417,
    "power_source": "Battery or Unknown",
    "lqi": 134,
    "rssi": null,
    "last_seen": "2022-07-29T17:24:12",
    "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": 260,
          "device_type": "0x0302",
          "in_clusters": [
            "0x0000",
            "0x0001",
            "0x0003",
            "0x0402",
            "0x0405",
            "0xe002"
          ],
          "out_clusters": [
            "0x0003",
            "0x000a",
            "0x0019"
          ]
        }
      }
    },
    "entities": [
      {
        "entity_id": "button.tz3000_itnrsufe_ts0201_fe09270d_identify",
        "name": "_TZ3000_itnrsufe TS0201"
      },
      {
        "entity_id": "sensor.tz3000_itnrsufe_ts0201_fe09270d_power",
        "name": "_TZ3000_itnrsufe TS0201"
      },
      {
        "entity_id": "sensor.tz3000_itnrsufe_ts0201_fe09270d_temperature",
        "name": "_TZ3000_itnrsufe TS0201"
      },
      {
        "entity_id": "sensor.tz3000_itnrsufe_ts0201_fe09270d_humidity",
        "name": "_TZ3000_itnrsufe TS0201"
      }
    ],
    "neighbors": [],
    "endpoint_names": [
      {
        "name": "TEMPERATURE_SENSOR"
      }
    ],
    "user_given_name": null,
    "device_reg_id": "7307ee75763fadf572cf0f05484f1418",
    "area_id": "vanna_tualet_drugii_poverkh",
    "cluster_details": {
      "1": {
        "device_type": {
          "name": "TEMPERATURE_SENSOR",
          "id": 770
        },
        "profile_id": 260,
        "in_clusters": {
          "0x0001": {
            "endpoint_attribute": "power",
            "attributes": {
              "0x0020": {
                "attribute_name": "battery_voltage",
                "value": 30
              },
              "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": 2545
              }
            },
            "unsupported_attributes": {}
          },
          "0x0405": {
            "endpoint_attribute": "humidity",
            "attributes": {
              "0x0000": {
                "attribute_name": "measured_value",
                "value": 422
              }
            },
            "unsupported_attributes": {}
          },
          "0xe002": {
            "endpoint_attribute": null,
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0000": {
            "endpoint_attribute": "basic",
            "attributes": {
              "0x0004": {
                "attribute_name": "manufacturer",
                "value": "_TZ3000_itnrsufe"
              },
              "0x0005": {
                "attribute_name": "model",
                "value": "TS0201"
              }
            },
            "unsupported_attributes": {}
          }
        },
        "out_clusters": {
          "0x0003": {
            "endpoint_attribute": "identify",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0019": {
            "endpoint_attribute": "ota",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x000a": {
            "endpoint_attribute": "time",
            "attributes": {},
            "unsupported_attributes": {}
          }
        }
      }
    }
  }
}
Additional logs
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=1029, SrcAddr=0x26B0, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=163, SecurityUse=<Bool.false: 0>, TimeStamp=9513272, TSN=0, Data=b'\x08\xC6\x0A\x00\x00\x21\xC9\x01', MacSrcAddr=0x26B0, MsgResultRadius=29)
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Received ZCL frame: b'\x08\xC6\x0A\x00\x00\x21\xC9\x01'
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=198, command_id=10, *is_reply=True)
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Decoded ZCL frame: RelativeHumidity:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=457))])
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Received command 0x0A (TSN 198): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=457))])
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Attribute report received: measured_value=457
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=198, command_id=<GeneralCommand.Default_Response: 11>, *is_reply=True)
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy.zcl] [0x26B0:1:0x0405] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>)
2022-07-29 16:23:58 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=sensor.tz3000_itnrsufe_ts0201_fe09270d_humidity, old_state=<state sensor.tz3000_itnrsufe_ts0201_fe09270d_humidity=4.7; state_class=measurement, unit_of_measurement=%, device_class=humidity, friendly_name=_TZ3000_itnrsufe TS0201 fe09270d humidity @ 2022-07-29T16:23:57.050111+03:00>, new_state=<state sensor.tz3000_itnrsufe_ts0201_fe09270d_humidity=4.6; state_class=measurement, unit_of_measurement=%, device_class=humidity, friendly_name=_TZ3000_itnrsufe TS0201 fe09270d humidity @ 2022-07-29T16:23:58.177734+03:00>>
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x26B0), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=1029, TSN=198, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=30, Data=b'\x18\xC6\x0B\x0A\x00')
2022-07-29 16:23:58 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)

Issue Analytics

  • State:closed
  • Created a year ago
  • Comments:7 (3 by maintainers)

github_iconTop GitHub Comments

2reactions
PlusPlus-uacommented, Jul 30, 2022

@javicalle thanks, it did the trick. I think it has a sense to merge ts0201_neo.py and ts0201_zemismart.py in one file and add there this new class. What do you think?

1reaction
PlusPlus-uacommented, Jul 31, 2022

Yes, I’ll prepare PR. Just have spent rest of weekend with my family, so had no time for it.

Read more comments on GitHub >

github_iconTop Results From Across the Web

[Device Support Request] Neo Tuya Temperature, Humidity ...
ZHA recognises the illumination sensor and battery. Temperature and Humidity don't have an obvious endpoint. Describe the solution you'd like
Read more >
Tuya TS0201 temperature sensor - Home Assistant Community
I was looking for a sensor with a display, maybe some one else can recommend ... [Device Support Request] Neo Tuya Temperature, Humidity...
Read more >
[RELEASE] Tuya Temperature Humidity Illuminance LCD ...
MOES Tuya ZigBee Smart Home Temperature And Humidity Sensor With LED Screen image, Model:TS0201 Manufacturer: TZ3000_itnrsufe. Supports: ...
Read more >
Tuya Zigbee Temperature and Humidity Sensor with LCD ...
#TechGuruAndrew. Tuya Zigbee Temperature and Humidity Sensor with LCD Screen Display. 17K views 2 years ago. TechGuru Andrew.
Read more >
Tuya Wifi Smart Home Temperature and Humidity Sensor ...
Support Fahrenheit & Celsius Display. Connected to Wifi directly, low power consumption, reliable and efficient transmission; The LCD screen dynamically ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found