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
683 stars 634 forks source link

[Device Support Request] Add support for Giex GX02 water timer #3052

Open Aazamandius opened 3 months ago

Aazamandius commented 3 months ago

Problem description

There are a new water timer Giex GX02

I tied to make it works with quirks - and now it show watering, litres and single switch

It's just need to replace here MODELS_INFO: [("_TZE200_sh1btabb", "TS0601"), ("_TZE200_a7sghmms", "TS0601")], with MODELS_INFO: [("_TZE204_7ytb3h8u", "TS0601")]

I'm not sure can it show device settings like start or stop watering timers or other local automations (stop after 60 litres for example)

Solution description

Please add support this device to handler And if possible make UI settings for locat device automations settings

Screenshots/Video

Screenshots/Video [Paste/upload your media here]

Device signature

Device signature ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2024.2.4", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.12.1", "docker": true, "arch": "x86_64", "timezone": "Europe/Moscow", "os_name": "Linux", "os_version": "6.6.16-haos", "supervisor": "2024.03.0", "host_os": "Home Assistant OS 12.0", "docker_version": "24.0.7", "chassis": "vm", "run_as_root": true }, "custom_components": { "hacs": { "version": "1.34.0", "requirements": [ "aiogithubapi>=22.10.1" ] }, "delete": { "version": "1.9", "requirements": [] }, "gismeteo": { "version": "2.5.2", "requirements": [ "colorlog==6.7.0", "ruff==0.0.291" ] } }, "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.38.0", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.111", "zigpy-deconz==0.23.0", "zigpy==0.62.3", "zigpy-xbee==0.20.1", "zigpy-zigate==0.12.0", "zigpy-znp==0.12.1", "universal-silabs-flasher==0.0.18", "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": 14713, "manufacturer": "_TZE204_7ytb3h8u", "model": "TS0601", "name": "_TZE204_7ytb3h8u TS0601", "quirk_applied": true, "quirk_class": "TS0601_TZE204_7ytb3h8u.GiexValve", "quirk_id": null, "manufacturer_code": 4417, "power_source": "Battery or Unknown", "lqi": 216, "rssi": -46, "last_seen": "2024-03-13T10:08:40", "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": "0x0000", "input_clusters": [ "0x0000", "0x0001", "0x0004", "0x0005", "0x0006", "0x0702", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZE204_7ytb3h8u", "model": "TS0601" }, "active_coordinator": false, "entities": [ { "entity_id": "sensor.tze204_7ytb3h8u_ts0601_battery", "name": "_TZE204_7ytb3h8u TS0601" }, { "entity_id": "sensor.kran_instantaneous_demand", "name": "_TZE204_7ytb3h8u TS0601" }, { "entity_id": "sensor.kran_summation_delivered", "name": "_TZE204_7ytb3h8u TS0601" }, { "entity_id": "switch.tze204_7ytb3h8u_ts0601_switch", "name": "_TZE204_7ytb3h8u TS0601" }, { "entity_id": "update.tze204_7ytb3h8u_ts0601_firmware", "name": "_TZE204_7ytb3h8u TS0601" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_SWITCH" } ], "user_given_name": "\u041a\u0440\u0430\u043d", "device_reg_id": "6c6b6f86d6d09b3d3fba7a7b7ef4f502", "area_id": "teplitsa", "cluster_details": { "1": { "device_type": { "name": "ON_OFF_SWITCH", "id": 0 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0001": { "attribute_name": "app_version", "value": 73 }, "0x0004": { "attribute_name": "manufacturer", "value": "_TZE204_7ytb3h8u" }, "0x0005": { "attribute_name": "model", "value": "TS0601" } }, "unsupported_attributes": { "0x0013": { "attribute_name": "alarm_mask" } } }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x0000": { "attribute_name": "on_off", "value": 0 } }, "unsupported_attributes": { "0x4001": { "attribute_name": "on_time" }, "0x4002": { "attribute_name": "off_wait_time" }, "0x4003": { "attribute_name": "start_up_on_off" } } }, "0x0001": { "endpoint_attribute": "power", "attributes": { "0x0021": { "attribute_name": "battery_percentage_remaining", "value": 160 } }, "unsupported_attributes": {} }, "0x0702": { "endpoint_attribute": "smartenergy_metering", "attributes": { "0x0000": { "attribute_name": "current_summ_delivered", "value": 0 }, "0x0306": { "attribute_name": "metering_device_type", "value": 2 }, "0x0300": { "attribute_name": "unit_of_measure", "value": 7 } }, "unsupported_attributes": { "0x0020": { "attribute_name": "active_register_tier_delivered" }, "0x0205": { "attribute_name": "remaining_battery_life_days" }, "0x0019": { "attribute_name": "control_temperature" } } }, "0xef00": { "endpoint_attribute": "tuya_manufacturer", "attributes": { "0xef72": { "attribute_name": "irrigation_duration", "value": "00:00:06,0" }, "0xef66": { "attribute_name": "irrigation_end_time", "value": "13:53:19" }, "0xef69": { "attribute_name": "irrigation_interval", "value": 0 }, "0xef01": { "attribute_name": "irrigation_mode", "value": 0 }, "0xef67": { "attribute_name": "irrigation_num_times", "value": 0 }, "0xef65": { "attribute_name": "irrigation_start_time", "value": "13:53:13" }, "0xef68": { "attribute_name": "irrigation_target", "value": 0 }, "0xef00": { "attribute_name": "mcu_version", "value": "1.0.0" } }, "unsupported_attributes": {} } }, "out_clusters": { "0x000a": { "endpoint_attribute": "time", "attributes": { "0xfffd": { "attribute_name": "cluster_revision", "value": 1 } }, "unsupported_attributes": { "0x0000": { "attribute_name": "time" } } }, "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": {} } } } } } } ```

Diagnostic information

Diagnostic information ```json [Paste the diagnostic information here] ```

Logs

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

Custom quirk

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

Additional information

No response

WJ4IoT commented 3 months ago

Install the latest version of Z2M (1.36.1 commit: ffc2ff1) and this device is supported, so far looks good, but my device is just arrived and garden does not need extra water yet.

pablopezg commented 1 month ago

I've seen that only battery and ON/OFF features are available right now. When do you expect to have the rest?

Pokeypoet commented 1 month ago

Hello, Could you please paste your custom quirk here please? I don't see to be able to make it work and unsure if it's the quirk or something else I am doing wrong.

pablopezg commented 1 month ago

Hello,

The custom quirk that I use is the one here: https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/tuya/ts0601_valve.py

Now I realized that after rebooting the HA two new sensors appears: image

But I was wondering about the rest of sensors that should be available on such device:

Pokeypoet commented 1 month ago

Great, thanks for the link to quirk, work for me now 👍

I would also be very interested in implementing the remaining sensors.