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

TS004F by _TZ3000_ja5osu5g #3108

Open jrmurdoch opened 2 months ago

jrmurdoch commented 2 months ago

Problem description

This is a single button device, its working in a switch like manner, single press "on" double press "off"

_TZ3000_ja5osu5g TS004F Switch turned on 11:48:45 - 3 minutes ago _TZ3000_ja5osu5g TS004F Switch turned off 11:48:42 - 4 minutes ago

Solution description

I'd like to use this to open a garage door, is it possible to change the output to: single press / double press / long press

Screenshots/Video

Screenshots/Video [Paste/upload your media here]

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=4742, 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", "0x0003", "0x0004", "0x0006", "0x1000", "0xe001" ], "output_clusters": [ "0x0003", "0x0004", "0x0006", "0x0008", "0x000a", "0x0019", "0x1000" ] } }, "manufacturer": "_TZ3000_ja5osu5g", "model": "TS004F", "class": "zigpy.device.Device" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2024.4.3", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.12.2", "docker": true, "arch": "aarch64", "timezone": "Pacific/Auckland", "os_name": "Linux", "os_version": "6.1.63-haos-raspi", "supervisor": "2024.04.0", "host_os": "Home Assistant OS 11.5", "docker_version": "24.0.7", "chassis": "embedded", "run_as_root": true }, "custom_components": { "hacs": { "version": "1.27.2", "requirements": [ "aiogithubapi>=22.2.4" ] }, "pid_controller": { "version": "v1.1.5", "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.38.1", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.114", "zigpy-deconz==0.23.1", "zigpy==0.63.5", "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": "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 }, "data": { "ieee": "**REDACTED**", "nwk": 36009, "manufacturer": "_TZ3000_ja5osu5g", "model": "TS004F", "name": "_TZ3000_ja5osu5g TS004F", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4742, "power_source": "Battery or Unknown", "lqi": 132, "rssi": -67, "last_seen": "2024-04-13T11:56:02", "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=4742, 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", "0x0003", "0x0004", "0x0006", "0x1000", "0xe001" ], "output_clusters": [ "0x0003", "0x0004", "0x0006", "0x0008", "0x000a", "0x0019", "0x1000" ] } }, "manufacturer": "_TZ3000_ja5osu5g", "model": "TS004F" }, "active_coordinator": false, "entities": [ { "entity_id": "button.tz3000_ja5osu5g_ts004f_identify", "name": "_TZ3000_ja5osu5g TS004F" }, { "entity_id": "select.tz3000_ja5osu5g_ts004f_start_up_behavior", "name": "_TZ3000_ja5osu5g TS004F" }, { "entity_id": "sensor.tz3000_ja5osu5g_ts004f_battery", "name": "_TZ3000_ja5osu5g TS004F" }, { "entity_id": "switch.tz3000_ja5osu5g_ts004f_switch", "name": "_TZ3000_ja5osu5g TS004F" }, { "entity_id": "update.tz3000_ja5osu5g_ts004f_firmware", "name": "_TZ3000_ja5osu5g TS004F" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_SWITCH" } ], "user_given_name": null, "device_reg_id": "429c6db8f123ec96da88b23a23e43072", "area_id": null, "cluster_details": { "1": { "device_type": { "name": "ON_OFF_SWITCH", "id": 0 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "_TZ3000_ja5osu5g" }, "0x0005": { "attribute_name": "model", "value": "TS004F" } }, "unsupported_attributes": {} }, "0x0001": { "endpoint_attribute": "power", "attributes": { "0x0021": { "attribute_name": "battery_percentage_remaining", "value": 200 }, "0x0020": { "attribute_name": "battery_voltage", "value": 30 } }, "unsupported_attributes": { "0x0031": { "attribute_name": "battery_size" }, "0x0033": { "attribute_name": "battery_quantity" } } }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x0000": { "attribute_name": "on_off", "value": false }, "0x4003": { "attribute_name": "start_up_on_off", "value": 1 } }, "unsupported_attributes": {} }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} }, "0xe001": { "endpoint_attribute": null, "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": {} }, "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": {}, "unsupported_attributes": {} }, "0x0008": { "endpoint_attribute": "level", "attributes": {}, "unsupported_attributes": {} }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} } } } } } } ```

Logs

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

Custom quirk

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

Additional information

No response

vJan00 commented 2 months ago

Hey there, I got the same problem over here and I fixed it, here is how:

The quirk for the button already exists but it assumes that the Button is from the DeviceType DIMMER_SWITCH (0x0104). Instead you Button is saying it's an ON_OFF_SWITCH (0x0000) which is why ZHA won't load the right quirk.

To Fix this issue you have to install the quirk manually and change the DeviceType:

  1. Go into your HomeAssistant configuration directory where the configuration.yaml is located. Then make a new directory if it doesn't already exists called zha_quirks.
  2. Go into the created directory and add the file from the following link ts004f.py.
  3. Edit the File and change line 335 (TuyaSmartRemote004FSK Class -> Signature -> Endpoints -> 1 -> DeviceType) from zha.DeviceType.DIMMER_SWITCH to zha.DeviceType.ON_OFF_SWITCH
  4. Go back into the config folder and edit your configuration.yaml. Add the following lines:
    zha:
    custom_quirks_path: /config/zha_quirks
  5. Restart HomeAssistant and see if the quirk now is getting used.

Maybe someone can look up how we can fix this longterm? A custom quirk should not be the longterm solution.

nealhead commented 2 months ago

3. zha.DeviceType.ON_OFF_SWITCH

I can't get this working for the life of me either. My button presses don't even show up in events.

vJan00 commented 2 months ago

My button presses don't even show up in events.

If the signature shows the following the quirk isn’t getting loaded correctly: "class": "zigpy.device.Device"

If you post your Signature here I could double check if your button is the one these topic goes about, not every button „TS004F _TZ3000_ja5oso5g“ is the same.

jrmurdoch commented 2 months ago
  1. zha.DeviceType.ON_OFF_SWITCH

I can't get this working for the life of me either. My button presses don't even show up in events.

If it doesn't show up at all press the button 3 times fast. This switches the mode then the events should show

nealhead commented 2 months ago

My button presses don't even show up in events.

If the signature shows the following the quirk isn’t getting loaded correctly: "class": "zigpy.device.Device"

If you post your Signature here I could double check if your button is the one these topic goes about, not every button „TS004F _TZ3000_ja5oso5g“ is the same.

Strike that, following your directions (and actually reading them thoroughly this time) seems to have fixed it. I hadn't changed the ON_OFF switch portion to the correct devices.