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
731 stars 673 forks source link

[Device Support Request] TS0601 _TZE284_g2e6cpnw Smart Soil Sensor #3192

Closed menaibluey closed 3 months ago

menaibluey commented 3 months ago

Problem description

Did not find any existing issues for this device https://www.aliexpress.com/item/1005007061020176.html?spm=a2g0o.order_list.order_list_main.4.260f1802vAnJ2p

Device only shows LQI and RSSI entities.

Solution description

Would be great to have a quirk for this. I'm new to this and not confident that I would be able to configure this. Any help would be greatly appreciated.

Screenshots/Video

Screenshots/Video ![image](https://github.com/zigpy/zha-device-handlers/assets/25679918/24cfd40c-af7d-4632-a7d2-0d3ca22657f7)

Device signature

Device signature ```json { "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": "0x0051", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0xed00", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZE284_g2e6cpnw", "model": "TS0601", "class": "zigpy.device.Device" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2024.6.0", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.12.2", "docker": true, "arch": "x86_64", "timezone": "Australia/Sydney", "os_name": "Linux", "os_version": "6.6.29-haos", "supervisor": "2024.06.0", "host_os": "Home Assistant OS 12.3", "docker_version": "25.0.5", "chassis": "vm", "run_as_root": true }, "custom_components": { "localtuya": { "documentation": "https://github.com/xZetsubou/hass-localtuya/", "version": "2024.5.0", "requirements": [] }, "aarlo": { "documentation": "https://github.com/twrecked/hass-aarlo/blob/master/README.md", "version": "0.8.1.2", "requirements": [ "unidecode", "pyaarlo>=0.8.0.7" ] }, "samsungtv_smart": { "documentation": "https://github.com/ollo69/ha-samsungtv-smart", "version": "0.13.4", "requirements": [ "websocket-client!=1.4.0,>=0.58.0", "wakeonlan>=2.0.0", "aiofiles>=0.8.0", "casttube>=0.2.1" ] }, "espsomfy_rts": { "documentation": "https://github.com/rstrouse/ESPSomfy-RTS/wiki/Configuring-the-Software", "version": "2.4.4", "requirements": [ "websocket-client==1.7.0" ] }, "hacs": { "documentation": "https://hacs.xyz/docs/configuration/start", "version": "1.34.0", "requirements": [ "aiogithubapi>=22.10.1" ] }, "bureau_of_meteorology": { "documentation": "https://github.com/bremor/bureau_of_meteorology", "version": "1.2.0", "requirements": [ "iso8601" ] }, "webrtc": { "documentation": "https://github.com/AlexxIT/WebRTC", "version": "v3.5.2", "requirements": [] } }, "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.39.0", "pyserial==3.5", "zha-quirks==0.0.116", "zigpy-deconz==0.23.1", "zigpy==0.64.0", "zigpy-xbee==0.20.1", "zigpy-zigate==0.12.0", "zigpy-znp==0.12.1", "universal-silabs-flasher==0.0.20", "pyserial-asyncio-fast==0.11" ], "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*" } ], "is_built_in": true }, "setup_times": { "null": { "setup": 0.00011332705616950989 }, "5c2fce3bef520d2c1ba22045c7c3d9d6": { "wait_import_platforms": -0.0005626832135021687, "wait_base_component": -0.002928560134023428, "config_entry_setup": 18.83330877032131 } }, "data": { "ieee": "**REDACTED**", "nwk": 52523, "manufacturer": "_TZE284_g2e6cpnw", "model": "TS0601", "name": "_TZE284_g2e6cpnw TS0601", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4417, "power_source": "Battery or Unknown", "lqi": 196, "rssi": -51, "last_seen": "2024-06-08T15:20:29", "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": "0x0051", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0xed00", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZE284_g2e6cpnw", "model": "TS0601" }, "active_coordinator": false, "entities": [ { "entity_id": "update.soil_sensor_firmware", "name": "_TZE284_g2e6cpnw TS0601" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "SMART_PLUG" } ], "user_given_name": "Soil Sensor", "device_reg_id": "11e57573e41df0c92c09e16de2c6d3ed", "area_id": "backyard", "cluster_details": { "1": { "device_type": { "name": "SMART_PLUG", "id": 81 }, "profile_id": 260, "in_clusters": { "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0xef00": { "endpoint_attribute": null, "attributes": {}, "unsupported_attributes": {} }, "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0001": { "attribute_name": "app_version", "value": 77 }, "0x0004": { "attribute_name": "manufacturer", "value": "_TZE284_g2e6cpnw" }, "0x0005": { "attribute_name": "model", "value": "TS0601" } }, "unsupported_attributes": {} }, "0xed00": { "endpoint_attribute": null, "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x0019": { "endpoint_attribute": "ota", "attributes": { "0x0002": { "attribute_name": "current_file_version", "value": 77 } }, "unsupported_attributes": {} }, "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} } } } } } } ```

Logs

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

Custom quirk

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

Additional information

No response

menaibluey commented 3 months ago

I've switched to Zigbee2MQTT where this sensor is supported in the zigbee-herdsman-converter, see

Tuya Soil sensor - TS0601 TZE284_g2e6cpnw

At this stage I have no need for a ZHA quirk for this device as it's now supported in Zigbee2MQTT.

llnz commented 2 months ago

I have purchased this device and would like to use it with ZHA. I will have a go at developing a custom quirk.

tube0013 commented 2 months ago

Looks like it could be added using the existing class here: https://github.com/zigpy/zha-device-handlers/blob/8317dc69c3b36e7ae5cabe40d7937c02ca259f77/zhaquirks/tuya/ts0601_sensor.py#L335

The dps from the tuya side look the be the same based on the z2m converted linked. https://github.com/Koenkk/zigbee-herdsman-converters/blob/ad177a3c45c63713f74703131c1124cc377570bb/src/devices/tuya.ts#L1950

The supported soil sensors don't seem to match the signature, this one looks to have an extra cluster "0xed00" and the battery calculation may be different as this device has 3x AAA vs 2xAAA in the currently supported devices.