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
773 stars 702 forks source link

[Device Support Request] TZE200_udank5zs TS0601 Blind TUYA motor #3401

Open mrkaqz opened 1 month ago

mrkaqz commented 1 month ago

Problem description

I have motor blind that almost the same with from Zemismart that supported ( TZE200_fzo2pocs) but this one from Tuya is not support. Would like to add request to support. For some reason everything externally and operation is the same but just change the name.

Solution description

A new quirk requested for this device.

Screenshots/Video

Screenshots/Video Screenshot 2024-10-07 120920

Device signature

Device signature ```json { "node_descriptor": { "logical_type": 1, "complex_descriptor_available": 0, "user_descriptor_available": 0, "reserved": 0, "aps_flags": 0, "frequency_band": 8, "mac_capability_flags": 142, "manufacturer_code": 4098, "maximum_buffer_size": 82, "maximum_incoming_transfer_size": 82, "server_mask": 11264, "maximum_outgoing_transfer_size": 82, "descriptor_capability_field": 0 }, "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x0051", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZE200_udank5zs", "model": "TS0601", "class": "zigpy.device.Device" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2024.10.1", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.12.4", "docker": true, "arch": "x86_64", "timezone": "Asia/Bangkok", "os_name": "Linux", "os_version": "6.6.46-haos", "supervisor": "2024.09.1", "host_os": "Home Assistant OS 13.1", "docker_version": "26.1.4", "chassis": "embedded", "run_as_root": true }, "custom_components": { "webrtc": { "documentation": "https://github.com/AlexxIT/WebRTC", "version": "v3.5.2", "requirements": [] }, "samsungtv_smart": { "documentation": "https://github.com/ollo69/ha-samsungtv-smart", "version": "0.13.5", "requirements": [ "websocket-client!=1.4.0,>=0.58.0", "wakeonlan>=2.0.0", "aiofiles>=0.8.0", "casttube>=0.2.1" ] }, "uptime_kuma": { "documentation": "https://github.com/meichthys/uptime_kuma/blob/main/README.md", "version": "2.1.0", "requirements": [ "pyuptimekuma-hass" ] }, "petkit": { "documentation": "https://github.com/RobertD502/home-assistant-petkit/blob/main/README.md", "version": "0.1.11", "requirements": [ "petkitaio==0.1.10", "tzlocal==5.1" ] }, "frigate": { "documentation": "https://github.com/blakeblackshear/frigate", "version": "5.4.0", "requirements": [ "pytz" ] }, "zha_toolkit": { "documentation": "https://github.com/mdeweerd/zha-toolkit", "version": "v1.1.19", "requirements": [ "aiofiles>=0.4.0", "pytz>=2016.10" ] }, "xiaomi_cloud_map_extractor": { "documentation": "https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor", "version": "v2.2.0", "requirements": [ "pillow", "pybase64", "python-miio", "requests", "pycryptodome" ] }, "smartthings": { "documentation": "https://www.home-assistant.io/integrations/smartthings", "version": "1.0", "requirements": [ "pysmartapp==0.3.5", "pysmartthings==0.7.8" ] }, "feedparser": { "documentation": "https://github.com/custom-components/feedparser/blob/master/README.md", "version": "0.1.7", "requirements": [ "feedparser==6.0.8" ] }, "sonoff": { "documentation": "https://github.com/AlexxIT/SonoffLAN", "version": "3.8.1", "requirements": [ "pycryptodome>=3.6.6" ] }, "niu": { "documentation": "https://github.com/marcelwestrahome/home-assistant-niu-component", "version": "2.1.3", "requirements": [] }, "edge_tts": { "documentation": "https://github.com/hasscc/hass-edge-tts", "version": "0.0.1", "requirements": [ "edge-tts==6.1.12" ] }, "nodered": { "documentation": "https://zachowj.github.io/node-red-contrib-home-assistant-websocket/guide/custom_integration/", "version": "4.1.1", "requirements": [] }, "hacs": { "documentation": "https://hacs.xyz/docs/configuration/start", "version": "2.0.1", "requirements": [ "aiogithubapi>=22.10.1" ] }, "alarmo": { "documentation": "https://github.com/nielsfaber/alarmo", "version": "v1.10.5", "requirements": [] }, "roborock": { "documentation": "https://github.com/humbertogontijo/homeassistant-roborock", "version": "1.0.13", "requirements": [ "python-roborock==0.36.0", "ical==6.1.0", "dacite==1.8.0" ] }, "localtuya": { "documentation": "https://github.com/rospogrigio/localtuya/", "version": "5.2.1", "requirements": [] }, "presence_simulation": { "documentation": "https://github.com/slashback100/presence_simulation", "version": "4.10", "requirements": [] }, "xiaomi_miot": { "documentation": "https://github.com/al-one/hass-xiaomi-miot", "version": "0.7.20", "requirements": [ "construct>=2.10.68", "python-miio>=0.5.12", "micloud>=0.5" ] } }, "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", "zha", "universal_silabs_flasher" ], "requirements": [ "universal-silabs-flasher==0.0.22", "zha==0.0.34" ], "usb": [ { "vid": "10C4", "pid": "EA60", "description": "*2652*", "known_devices": [ "slae.sh cc2652rb stick" ] }, { "vid": "10C4", "pid": "EA60", "description": "*slzb-07*", "known_devices": [ "smlight slzb-07" ] }, { "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*" }, { "type": "_xzg._tcp.local.", "name": "xzg*" }, { "type": "_czc._tcp.local.", "name": "czc*" } ], "is_built_in": true }, "setup_times": { "null": { "setup": 5.243300000046247e-05 }, "01J4XKME2CR7G7KBAHKXR7VY37": { "wait_import_platforms": -0.010308019999996532, "config_entry_setup": 13.291217498000009 } }, "data": { "ieee": "**REDACTED**", "nwk": 50751, "manufacturer": "_TZE200_udank5zs", "model": "TS0601", "name": "_TZE200_udank5zs TS0601", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4098, "power_source": "Mains", "lqi": 128, "rssi": -68, "last_seen": "2024-10-07T12:05:03", "available": true, "device_type": "Router", "signature": { "node_descriptor": { "logical_type": 1, "complex_descriptor_available": 0, "user_descriptor_available": 0, "reserved": 0, "aps_flags": 0, "frequency_band": 8, "mac_capability_flags": 142, "manufacturer_code": 4098, "maximum_buffer_size": 82, "maximum_incoming_transfer_size": 82, "server_mask": 11264, "maximum_outgoing_transfer_size": 82, "descriptor_capability_field": 0 }, "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x0051", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZE200_udank5zs", "model": "TS0601" }, "active_coordinator": false, "entities": [ { "entity_id": "update.tze200_udank5zs_ts0601_firmware", "name": "_TZE200_udank5zs TS0601" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "SMART_PLUG" } ], "user_given_name": null, "device_reg_id": "721942a2c5b0380701d85f664980e039", "area_id": null, "cluster_details": { "1": { "device_type": { "name": "SMART_PLUG", "id": 81 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0013": { "attribute": "ZCLAttributeDef(id=0x0013, name='alarm_mask', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0001": { "attribute": "ZCLAttributeDef(id=0x0001, name='app_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0xfffd": { "attribute": "ZCLAttributeDef(id=0xFFFD, name='cluster_revision', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0006": { "attribute": "ZCLAttributeDef(id=0x0006, name='date_code', type=.LimitedCharString'>, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0012": { "attribute": "ZCLAttributeDef(id=0x0012, name='device_enabled', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0014": { "attribute": "ZCLAttributeDef(id=0x0014, name='disable_local_config', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0008": { "attribute": "ZCLAttributeDef(id=0x0008, name='generic_device_class', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0009": { "attribute": "ZCLAttributeDef(id=0x0009, name='generic_device_type', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0003": { "attribute": "ZCLAttributeDef(id=0x0003, name='hw_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0010": { "attribute": "ZCLAttributeDef(id=0x0010, name='location_desc', type=.LimitedCharString'>, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0004": { "attribute": "ZCLAttributeDef(id=0x0004, name='manufacturer', type=.LimitedCharString'>, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": "_TZE200_udank5zs" }, "0x000c": { "attribute": "ZCLAttributeDef(id=0x000C, name='manufacturer_version_details', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0005": { "attribute": "ZCLAttributeDef(id=0x0005, name='model', type=.LimitedCharString'>, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": "TS0601" }, "0x0011": { "attribute": "ZCLAttributeDef(id=0x0011, name='physical_env', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0007": { "attribute": "ZCLAttributeDef(id=0x0007, name='power_source', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x000a": { "attribute": "ZCLAttributeDef(id=0x000A, name='product_code', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x000e": { "attribute": "ZCLAttributeDef(id=0x000E, name='product_label', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x000b": { "attribute": "ZCLAttributeDef(id=0x000B, name='product_url', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0xfffe": { "attribute": "ZCLAttributeDef(id=0xFFFE, name='reporting_status', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x000d": { "attribute": "ZCLAttributeDef(id=0x000D, name='serial_number', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0002": { "attribute": "ZCLAttributeDef(id=0x0002, name='stack_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x4000": { "attribute": "ZCLAttributeDef(id=0x4000, name='sw_build_id', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0000": { "attribute": "ZCLAttributeDef(id=0x0000, name='zcl_version', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null } }, "unsupported_attributes": [] }, "0x0004": { "endpoint_attribute": "groups", "attributes": { "0xfffd": { "attribute": "ZCLAttributeDef(id=0xFFFD, name='cluster_revision', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0000": { "attribute": "ZCLAttributeDef(id=0x0000, name='name_support', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0xfffe": { "attribute": "ZCLAttributeDef(id=0xFFFE, name='reporting_status', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null } }, "unsupported_attributes": [] }, "0x0005": { "endpoint_attribute": "scenes", "attributes": { "0xfffd": { "attribute": "ZCLAttributeDef(id=0xFFFD, name='cluster_revision', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0000": { "attribute": "ZCLAttributeDef(id=0x0000, name='count', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0002": { "attribute": "ZCLAttributeDef(id=0x0002, name='current_group', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0001": { "attribute": "ZCLAttributeDef(id=0x0001, name='current_scene', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0005": { "attribute": "ZCLAttributeDef(id=0x0005, name='last_configured_by', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0004": { "attribute": "ZCLAttributeDef(id=0x0004, name='name_support', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0xfffe": { "attribute": "ZCLAttributeDef(id=0xFFFE, name='reporting_status', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0003": { "attribute": "ZCLAttributeDef(id=0x0003, name='scene_valid', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null } }, "unsupported_attributes": [] }, "0xef00": { "endpoint_attribute": null, "attributes": {}, "unsupported_attributes": [] } }, "out_clusters": { "0x0019": { "endpoint_attribute": "ota", "attributes": { "0xfffd": { "attribute": "ZCLAttributeDef(id=0xFFFD, name='cluster_revision', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0002": { "attribute": "ZCLAttributeDef(id=0x0002, name='current_file_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0003": { "attribute": "ZCLAttributeDef(id=0x0003, name='current_zigbee_stack_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0004": { "attribute": "ZCLAttributeDef(id=0x0004, name='downloaded_file_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0005": { "attribute": "ZCLAttributeDef(id=0x0005, name='downloaded_zigbee_stack_version', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0001": { "attribute": "ZCLAttributeDef(id=0x0001, name='file_offset', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x000a": { "attribute": "ZCLAttributeDef(id=0x000A, name='image_stamp', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0008": { "attribute": "ZCLAttributeDef(id=0x0008, name='image_type_id', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0006": { "attribute": "ZCLAttributeDef(id=0x0006, name='image_upgrade_status', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0007": { "attribute": "ZCLAttributeDef(id=0x0007, name='manufacturer_id', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0009": { "attribute": "ZCLAttributeDef(id=0x0009, name='minimum_block_req_delay', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0xfffe": { "attribute": "ZCLAttributeDef(id=0xFFFE, name='reporting_status', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x000b": { "attribute": "ZCLAttributeDef(id=0x000B, name='upgrade_activation_policy', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0000": { "attribute": "ZCLAttributeDef(id=0x0000, name='upgrade_server_id', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x000c": { "attribute": "ZCLAttributeDef(id=0x000C, name='upgrade_timeout_policy', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null } }, "unsupported_attributes": [ 2, "current_file_version" ] }, "0x000a": { "endpoint_attribute": "time", "attributes": { "0xfffd": { "attribute": "ZCLAttributeDef(id=0xFFFD, name='cluster_revision', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0004": { "attribute": "ZCLAttributeDef(id=0x0004, name='dst_end', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0005": { "attribute": "ZCLAttributeDef(id=0x0005, name='dst_shift', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0003": { "attribute": "ZCLAttributeDef(id=0x0003, name='dst_start', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0008": { "attribute": "ZCLAttributeDef(id=0x0008, name='last_set_time', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0007": { "attribute": "ZCLAttributeDef(id=0x0007, name='local_time', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0xfffe": { "attribute": "ZCLAttributeDef(id=0xFFFE, name='reporting_status', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0006": { "attribute": "ZCLAttributeDef(id=0x0006, name='standard_time', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0000": { "attribute": "ZCLAttributeDef(id=0x0000, name='time', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0001": { "attribute": "ZCLAttributeDef(id=0x0001, name='time_status', type=, zcl_type=, access=, mandatory=True, is_manufacturer_specific=False)", "value": null }, "0x0002": { "attribute": "ZCLAttributeDef(id=0x0002, name='time_zone', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null }, "0x0009": { "attribute": "ZCLAttributeDef(id=0x0009, name='valid_until_time', type=, zcl_type=, access=, mandatory=False, is_manufacturer_specific=False)", "value": null } }, "unsupported_attributes": [] } } } } } } ```

Logs

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

Custom quirk

Custom quirk ```python [Paste your custom quirk here] ```

Additional information

No response

mrkaqz commented 1 month ago

This device is similar to TZE200_fzo2pocs which is working just fine