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
751 stars 688 forks source link

[Device Support Request] Silvercrest SAPZ A2 (TS011F par _TZ3000_ynmowqk2 ) #2708

Open jacme31 opened 1 year ago

jacme31 commented 1 year ago

Problem description

I try to pair a LIDL Device (Silvercrest SAPZ A2 : a new version sold in France with power consumption measuremenst of the SAPZ A1 which already works well with ZHA) . During the pairing ZHA loads the quirk "zhaquirks.tuya.ts011f_plug.Plug" and everything seems to works, but the device stays in pairing mode, it disconnect/ reconnects multiple times before disconnecting defintevly.

Solution description

A well connected ZHA device ...

Screenshots/Video

Screenshots/Video [ ![image](https://github.com/zigpy/zha-device-handlers/assets/24212977/88a54ff9-e364-42cf-810c-03d35f010811) ]

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=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)", "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x010a", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZ3000_ynmowqk2", "model": "TS011F", "class": "zhaquirks.tuya.ts011f_plug.Plug" }]

Diagnostic information

Diagnostic information ```json [{ "home_assistant": { "installation_type": "Home Assistant OS", "version": "2023.11.1", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.11.6", "docker": true, "arch": "aarch64", "timezone": "Europe/Paris", "os_name": "Linux", "os_version": "6.1.21-v8", "supervisor": "2023.10.1", "host_os": "Home Assistant OS 11.1", "docker_version": "24.0.6", "chassis": "embedded", "run_as_root": true }, "custom_components": { "signal_ecogaz": { "version": "0.1.0", "requirements": [ "Async-OAuthlib==0.0.9" ] }, "waste_collection_schedule": { "version": "1.43.0", "requirements": [ "icalendar", "recurring_ical_events", "icalevents", "bs4", "lxml" ] }, "rte_ecowatt": { "version": "0.6.3", "requirements": [ "Async-OAuthlib==0.0.9" ] }, "ha_strava": { "version": "3.2.28", "requirements": [ "aiohttp>=3.6.1", "voluptuous>=0.11.7" ] }, "pollens": { "version": "2023.06.01", "requirements": [] }, "metar": { "version": "2021.07.1", "requirements": [ "metar" ] }, "zha_toolkit": { "version": "v1.1.4", "requirements": [ "pytz" ] }, "myEnedis": { "version": "2.3.0", "requirements": [ "packaging>=20.8" ] }, "garmin_connect": { "version": "0.2.17", "requirements": [ "garminconnect==0.2.3", "tzlocal" ] }, "garbage_collection": { "version": "4.10.2", "requirements": [ "python-dateutil>=2.8.2" ] }, "scheduler": { "version": "v0.0.0", "requirements": [] }, "dreame_vacuum": { "version": "v1.0.1", "requirements": [ "pillow", "numpy", "pybase64", "requests", "pycryptodome", "python-miio", "py-mini-racer", "tzlocal" ] }, "resmed_myair": { "version": "0.1.11", "requirements": [ "beautifulsoup4", "PyJWT" ] }, "pyscript": { "version": "1.5.0", "requirements": [ "croniter==1.3.8", "watchdog==2.3.1" ] }, "holidays": { "version": "1.9.6", "requirements": [ "python-dateutil>=2.8.2", "holidays>=0.14.2" ] }, "hacs": { "version": "1.33.0", "requirements": [ "aiogithubapi>=22.10.1" ] } }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "after_dependencies": [ "onboarding", "usb" ], "codeowners": [ "@dmulcahey", "@adminiuga", "@puddly" ], "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.36.8", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.106", "zigpy-deconz==0.21.1", "zigpy==0.59.0", "zigpy-xbee==0.19.0", "zigpy-zigate==0.11.0", "zigpy-znp==0.11.6", "universal-silabs-flasher==0.0.14", "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": "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": 20544, "manufacturer": "_TZ3000_ynmowqk2", "model": "TS011F", "name": "_TZ3000_ynmowqk2 TS011F", "quirk_applied": true, "quirk_class": "zhaquirks.tuya.ts011f_plug.Plug", "quirk_id": "tuya.plug_on_off_attributes", "manufacturer_code": 4417, "power_source": "Mains", "lqi": 180, "rssi": -55, "last_seen": "2023-11-06T19:28:56", "available": false, "device_type": "Router", "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=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)", "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x010a", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZ3000_ynmowqk2", "model": "TS011F" }, "active_coordinator": false, "entities": [ { "entity_id": "button.tz3000_ynmowqk2_ts011f_identifier", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "select.tz3000_ynmowqk2_ts011f_etat_de_mise_sous_tension", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "select.tz3000_ynmowqk2_ts011f_backlight_mode", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "sensor.tz3000_ynmowqk2_ts011f_courant", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "sensor.tz3000_ynmowqk2_ts011f_tension", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "sensor.tz3000_ynmowqk2_ts011f_puissance", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "sensor.tz3000_ynmowqk2_ts011f_summation_delivered", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "switch.tz3000_ynmowqk2_ts011f_commutateur", "name": "_TZ3000_ynmowqk2 TS011F" }, { "entity_id": "switch.tz3000_ynmowqk2_ts011f_securite_enfants", "name": "_TZ3000_ynmowqk2 TS011F" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_PLUG_IN_UNIT" } ], "user_given_name": null, "device_reg_id": "b8806e3f5272d48c7aad1684c454b29c", "area_id": "cellier", "cluster_details": { "1": { "device_type": { "name": "ON_OFF_PLUG_IN_UNIT", "id": 266 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0001": { "attribute_name": "app_version", "value": 69 }, "0x0004": { "attribute_name": "manufacturer", "value": "_TZ3000_ynmowqk2" }, "0x0005": { "attribute_name": "model", "value": "TS011F" }, "0x0007": { "attribute_name": "power_source", "value": 1 }, "0xfffe": { "attribute_name": "reporting_status", "value": 0 }, "0x0000": { "attribute_name": "zcl_version", "value": 3 } }, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x8001": { "attribute_name": "backlight_mode", "value": 1 }, "0x8000": { "attribute_name": "child_lock", "value": 0 }, "0x4002": { "attribute_name": "off_wait_time", "value": 0 }, "0x0000": { "attribute_name": "on_off", "value": 1 }, "0x4001": { "attribute_name": "on_time", "value": 0 }, "0x8002": { "attribute_name": "power_on_state", "value": 2 } }, "unsupported_attributes": { "0x4003": { "attribute_name": "start_up_on_off" } } }, "0x0702": { "endpoint_attribute": "smartenergy_metering", "attributes": { "0x0000": { "attribute_name": "current_summ_delivered", "value": 0 }, "0x0302": { "attribute_name": "divisor", "value": 100 }, "0x0306": { "attribute_name": "metering_device_type", "value": 0 }, "0x0301": { "attribute_name": "multiplier", "value": 1 }, "0x0200": { "attribute_name": "status", "value": 0 }, "0x0303": { "attribute_name": "summation_formatting", "value": 0 }, "0x0300": { "attribute_name": "unit_of_measure", "value": 0 } }, "unsupported_attributes": { "0x0400": { "attribute_name": "instantaneous_demand" }, "0x0100": { "attribute_name": "current_tier1_summ_delivered" }, "0x0102": { "attribute_name": "current_tier2_summ_delivered" }, "0x0104": { "attribute_name": "current_tier3_summ_delivered" }, "0x0304": { "attribute_name": "demand_formatting" }, "0x0106": { "attribute_name": "current_tier4_summ_delivered" }, "0x0108": { "attribute_name": "current_tier5_summ_delivered" }, "0x010a": { "attribute_name": "current_tier6_summ_delivered" } } }, "0x0b04": { "endpoint_attribute": "electrical_measurement", "attributes": { "0x0603": { "attribute_name": "ac_current_divisor", "value": 1000 }, "0x0602": { "attribute_name": "ac_current_multiplier", "value": 1 }, "0x050b": { "attribute_name": "active_power", "value": 0 }, "0x0508": { "attribute_name": "rms_current", "value": 0 }, "0x0505": { "attribute_name": "rms_voltage", "value": 235 } }, "unsupported_attributes": { "0x0300": { "attribute_name": "ac_frequency" }, "0x0601": { "attribute_name": "ac_voltage_divisor" }, "0x0302": { "attribute_name": "ac_frequency_max" }, "0x0600": { "attribute_name": "ac_voltage_multiplier" }, "0x0604": { "attribute_name": "ac_power_multiplier" }, "0x0605": { "attribute_name": "ac_power_divisor" }, "0x0401": { "attribute_name": "ac_frequency_divisor" }, "0x0507": { "attribute_name": "rms_voltage_max" }, "0x0400": { "attribute_name": "ac_frequency_multiplier" }, "0x050a": { "attribute_name": "rms_current_max" }, "0x0000": { "attribute_name": "measurement_type" }, "0x050d": { "attribute_name": "active_power_max" }, "0x050f": { "attribute_name": "apparent_power" }, "0x0510": { "attribute_name": "power_factor" }, "0x0402": { "attribute_name": "power_multiplier" }, "0x0403": { "attribute_name": "power_divisor" } } }, "0xe000": { "endpoint_attribute": "tuya_manufacturer_specific_57344", "attributes": {}, "unsupported_attributes": {} }, "0xe001": { "endpoint_attribute": "tuya_external_switch_type", "attributes": { "0xd030": { "attribute_name": "external_switch_type", "value": 0 } }, "unsupported_attributes": {} } }, "out_clusters": { "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} }, "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": {} } } } } } }] ```

Logs

Logs ```python [ 2023-11-06 17:40:48.340 DEBUG (MainThread) [zigpy.application] Device is initialized 2023-11-06 17:40:48.341 DEBUG (MainThread) [zigpy.quirks.registry] Checking quirks for _TZ3000_ynmowqk2 TS011F (a4:c1:38:8a:59:c8:0e:a6) 2023-11-06 17:40:48.341 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.341 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1} {1, 242} 2023-11-06 17:40:48.341 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.342 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 242} {1, 242} 2023-11-06 17:40:48.342 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.342 DEBUG (MainThread) [zigpy.quirks.registry] Fail because input cluster mismatch on at least one endpoint 2023-11-06 17:40:48.342 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.342 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 242} {1, 242} 2023-11-06 17:40:48.342 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.343 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2} {1, 242} 2023-11-06 17:40:48.343 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.343 DEBUG (MainThread) [zigpy.quirks.registry] Fail because device_type mismatch on at least one endpoint 2023-11-06 17:40:48.343 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.343 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1} {1, 242} 2023-11-06 17:40:48.343 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.344 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {242, 1, 2, 3} {1, 242} 2023-11-06 17:40:48.344 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.344 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 3, 4, 5, 242} {1, 242} 2023-11-06 17:40:48.344 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.344 DEBUG (MainThread) [zigpy.quirks.registry] Fail because input cluster mismatch on at least one endpoint 2023-11-06 17:40:48.345 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.345 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 242} {1, 242} 2023-11-06 17:40:48.345 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.348 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 3, 4, 5, 242} {1, 242} 2023-11-06 17:40:48.348 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.348 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {242, 1, 2, 3} {1, 242} 2023-11-06 17:40:48.348 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.348 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {242, 11} {1, 242} 2023-11-06 17:40:48.348 DEBUG (MainThread) [zigpy.quirks.registry] Considering 2023-11-06 17:40:48.349 DEBUG (MainThread) [zigpy.quirks.registry] Found custom device replacement for a4:c1:38:8a:59:c8:0e:a6: 2023-11-06 17:40:48.371 DEBUG (MainThread) [zigpy.appdb] Error handling '_save_attribute' event with (a4:c1:38:8a:59:c8:0e:a6, 1, 0, 4, '_TZ3000_ynmowqk2', datetime.datetime(2023, 11, 6, 16, 40, 48, 339603, tzinfo=datetime.timezone.utc)) params: FOREIGN KEY constraint failed 2023-11-06 17:40:48.372 DEBUG (MainThread) [zigpy.zcl] [0x9327:1:0x0006] Executing spell on Tuya device a4:c1:38:8a:59:c8:0e:a6 2023-11-06 17:40:48.373 DEBUG (MainThread) [zigpy.zcl] [0x9327:1:0x0000] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=113, command_id=, *direction=) 2023-11-06 17:40:48.374 DEBUG (MainThread) [zigpy.zcl] [0x9327:1:0x0000] Sending request: Read_Attributes(attribute_ids=[4, 0, 1, 5, 7, 65534]) 2023-11-06 17:40:48.389 DEBUG (MainThread) [zigpy.appdb] Error handling '_save_attribute' event with (a4:c1:38:8a:59:c8:0e:a6, 1, 0, 5, 'TS011F', datetime.datetime(2023, 11, 6, 16, 40, 48, 339707, tzinfo=datetime.timezone.utc)) params: FOREIGN KEY constraint failed .... ... ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=129, command_id=7, *direction=) 2023-11-06 17:40:49.020 DEBUG (MainThread) [zigpy.zcl] [0x9327:1:0x0702] Decoded ZCL frame: TuyaZBMeteringCluster:Configure_Reporting_rsp(status_records=[ConfigureReportingResponseRecord(status=, direction=, attrid=258), ConfigureReportingResponseRecord(status=, direction=, attrid=260), ConfigureReportingResponseRecord(status=, direction=, attrid=262)]) ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=119, command_id=, *direction=) 2023-11-06 17:41:00.883 DEBUG (MainThread) [zigpy.zcl] [0x9327:1:0x0000] Sending reply: Default_Response(command_id=10, status=) 2023-11-06 17:41:03.947 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2023, 11, 6, 16, 41, 3, 947821, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=, address=0x9327), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=210, profile_id=0, cluster_id=2, data=Serialized[b'%\x00\x00'], tx_options=, radius=0, non_member_radius=0, lqi=184, rssi=-54) 2023-11-06 17:41:03.949 DEBUG (MainThread) [zigpy.zdo] [0x9327:zdo] ZDO request ZDOCmd.Node_Desc_req: [0x0000] 2023-11-06 17:41:03.949 DEBUG (MainThread) [zigpy.zdo] [0x9327:zdo] No handler for ZDO request:ZDOCmd.Node_Desc_req([0x0000]) 2023-11-06 17:41:08.942 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:08.959 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:08.968 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:08.985 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:08.992 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:08.999 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:09.006 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:09.019 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:09.026 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network 2023-11-06 17:41:09.034 INFO (MainThread) [zigpy.application] Device 0x9327 (a4:c1:38:8a:59:c8:0e:a6) left the network ] ```

Custom quirk

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

Additional information

No response

mdeweerd commented 12 months ago

I just got several of these plugs too - same behavior.

For reference: HA forum discussion .

It indicates that this works with Z2M where it is declared in lidl.js .

I tested the Tuya Magic Spell - not working better.

mdeweerd commented 12 months ago

Here are some decodings of relevant packets from a sniffer log.

_TZ3000_ynmowqk2.zip

It's the device that is requesting to leave the network.

MattWestb commented 12 months ago

I have only fast looking and the device is getting the network key OK and then the coordinator is requesting and getting the Node Descriptor Request, OK (R22 device) and the device is requesting the same and is getting R22 so shall being OK. Then the device shall requesting updating the TC-Link key (R19 and higher is supporting it) but its not doing it so its policy is it must updating the TC-Link key => Leaving.

Must looking deeper of the flags and comparing with other device sniffs that is working OK.

PS Its one TELink choped devices so can being buggy.

MattWestb commented 12 months ago

By the way is the Ti coordinator running on updated firmware (2023) ?

mdeweerd commented 12 months ago

@MattWestb Thanks for checking!

It's not a TI coordinator for me - it's an EZSP.

I opened a topic to see if anybody has the way to update the EZSP: https://community.home-assistant.io/t/how-bellows-zigbee-repairs-nv3-interface-not-available-in-this-firmware-please-upgrade/635319 .

I've seen and add-on that seems to help with that, but not much of a procedure.

MattWestb commented 12 months ago

Im very sorry but its only 2 frames with key and both looks the same only network key and the sender is 0x000= and its .. . .

Frame 83: 73 bytes on wire (584 bits), 73 bytes captured (584 bits) on interface unknown, id 0
IEEE 802.15.4 Data, Dst: 0x0d6a, Src: 0x0000, Bad FCS
ZigBee Network Layer Data, Dst: 0x0d6a, Src: 0x0000
    Frame Control Field: 0x0008, Frame Type: Data, Discover Route: Suppress Data
    Destination: 0x0d6a
    Source: 0x0000
    Radius: 30
    Sequence Number: 239
    [Extended Source: TexasIns_00:01:6a:41:0c (00:12:4b:00:01:6a:41:0c)]
    [Origin: 4]
ZigBee Application Support Layer Command
    Frame Control Field: Command (0x21)
    Counter: 206
    ZigBee Security Header
        Security Control Field: 0x30, Key Id: Key-Transport Key, Extended Nonce
        Frame Counter: 552963
        Extended Source: TexasIns_00:01:6a:41:0c (00:12:4b:00:01:6a:41:0c)
        Message Integrity Code: f2f2bfe3
        [Key: 5a6967426565416c6c69616e63653039]
        [Key Label: ZigBeeAlliance09 Key]
    Command Frame: Transport Key

Frame 282: 73 bytes on wire (584 bits), 73 bytes captured (584 bits) on interface unknown, id 0
IEEE 802.15.4 Data, Dst: 0x0d6a, Src: 0x0000, Bad FCS
ZigBee Network Layer Data, Dst: 0x0d6a, Src: 0x0000
    Frame Control Field: 0x0008, Frame Type: Data, Discover Route: Suppress Data
    Destination: 0x0d6a
    Source: 0x0000
    Radius: 30
    Sequence Number: 188
    [Extended Source: TexasIns_00:01:6a:41:0c (00:12:4b:00:01:6a:41:0c)]
    [Origin: 4]
ZigBee Application Support Layer Command
    Frame Control Field: Command (0x21)
    Counter: 18
    ZigBee Security Header
        Security Control Field: 0x30, Key Id: Key-Transport Key, Extended Nonce
        Frame Counter: 552964
        Extended Source: TexasIns_00:01:6a:41:0c (00:12:4b:00:01:6a:41:0c)
        Message Integrity Code: a3e26415
        [Key: 5a6967426565416c6c69616e63653039]
        [Key Label: ZigBeeAlliance09 Key]
    Command Frame: Transport Key

Have you burning one new IEEE in the Silabs chip ?

Extended Source: TexasIns_00:01:6a:41:0c (00:12:4b:00:01:6a:41:0c)

MattWestb commented 12 months ago

The latest EZSP and RCP 7.3.x / 4.3.x can loading one software IEEE that is not burned in the chip (stored in the NVM3) but its no problem running older firmware that cant do it only if migrating to one other hardware if not having that support ZHA is burning one new IEEE in the chip and cant being reverted (with SWD flashing its possible then its in user data that cant being OTA flashed normally).

mdeweerd commented 12 months ago

Have you burning one new IEEE in the Silabs chip ?

Yes - I migrated from a CC2531.

An add-on I found to flash is: https://github.com/home-assistant/addons/tree/master/silabs_flasher .

MattWestb commented 12 months ago

Shall working OK i have not testing it as addon only before in veritual env. Try with different EZSP version if some is working OK. The 6.7.8.X is stable production and 6.10.X is candidate. All 6.8 and 6.9 is alpa and is not good for production. The 7.1.X is little beta and the same with 7.2.X and normally is 7.3.2 the best if having one MG21 device. Witch device is you using in your system is it any free firmware for it ?

mdeweerd commented 12 months ago

I have SonOFF ZBDongle-E to enable - it had v6.10.3 . I just made an update using the webflasher.

The Multiprotocol Add-on did not want to startup (did not find the port), so I have reboots the HAOS system (OS itself). It still complains about "Failed to connect, secondary seems unresponsive" .

Trying to find out what to do...

mdeweerd commented 12 months ago

I did not program the correct firmware, it was Zigbee FW with new version. After flashing the RCP version, the integration started. However I have lost all related entities.

The insturctions indicate:

If you had an existing ZHA setup, you will need to remove this entirely. > Make sure to backup your network first!

So I removed it using the UI and then the configuration as well, but after restoration I do not have the entities .. Kind of furious...

However, I could pair the TS011F

MattWestb commented 12 months ago

One very interesting question is the RCP using the original IEEE or the burned one from the CC2531 but now you shall also having the possibility changing it without burning the chip IF our Puddly have making all right. Then if its using the original IEEE i think ZHA is thinking its one new instance and do not reusing all old saved devices.

mdeweerd commented 12 months ago

It's using the TI IEEE address.

To recover entities (different than those I had), I:

Luckily I had an export of the critical devices in devices.csv with zha-toolkit which helped map the devices to their original entity names and locations.

MattWestb commented 12 months ago

If the IEEE was the same in the "new network" and the old backup its likely the frame counter was set to zero and the network was throwing all frames from the coordinator as replay attack.

Great that you is up and running after some hardware digging (its little different for code digging but its more my thing as code is yours) !!

jacme31 commented 12 months ago

@MattWestb and @mdeweerd : Thank you very much for your investigation into this issue. I am not competent enough to understand all your exchanges in detail. It seems to me that I have generally understood from your analyzes and experiences that the problem came from the zigbee coordinator and that a new radio firmware could solve the problem. For my part I use an HA Yellow with the on-board radio chip:

"ezsp": {
                   "manufacturer": "Nabu Casa",
                   "board": "Yellow v1.2",
                   "version": "6.10.3.0 version 297",
                   "stack_version": 8,
                   "can_burn_userdata_custom_eui64": false,
                   "can_rewrite_custom_eui64": false
               }

I have no idea how this network firmware can be updated even though I saw the following links: https://github.com/home-assistant/addons/tree/master/silabs_flasher. https://github.com/NabuCasa/silabs-firmware/wiki/Flash-Silicon-Labs-radio-firmware-manually Generally speaking, I'm a little fearful, and I'd rather not use my new SAPZ devices than lose my network and have to re-pair all existing devices... ​

mdeweerd commented 12 months ago

If the IEEE was the same in the "new network" and the old backup its likely the frame counter was set to zero and the network was throwing all frames from the coordinator as replay attack.

I migrated many months ago already and the migration was flawless!

I think that changing to the RCP FW using the multiprotocol Add-on should also be don by initiating a migration rather than removing "everything" - the only issue being the port - ZHA might grab the port before the add-on does. So the trick would be to change the ZHA port to a bad port (currently by hacking) or disabling it until the add-on starts up I guess.

Great that you is up and running after some hardware digging (its little different for code digging but its more my thing as code is yours) !!

My things are HW and SW (I design HW boards and SW from FW to application level - I've also worked on design and verification of baseband ASICs for phones) !

However you noticed the Link key issue!

Generally speaking, I'm a little fearful, and I'd rather not use my new SAPZ devices than lose my network and have to re-pair all existing devices...

I'ld suggest you to stick with the Zigbee SW version.

Nabu Casa indicates there are no known issues with the current FW, but this is one!

https://skyconnect.home-assistant.io/firmware-update/

The add-on silabs-flasher seems to be an official method to update the key.

I'ld make sure to have a recent backup, then proceed with the upgrade (implies disabling - not removing - zha) and enable zha again. The network info is probably maintained and if not you can restore it. IMHO the only reason for the issues I had was that the documentation for the alternative code said to remove zha... . I did not have to repair the devices, but I did have to remap the devices to the entities I was using - and one of the side-effets there is that in several cases the entity_name postfix was incremented (_6 to _7 for instance).

Of course - up to you if and when you want to try the upgrade. And I would report this to Nabu Casa anyway. A Coordinator FW change fixes it so it can be argued that there is an issue with the coordinator FW.

jacme31 commented 10 months ago

Finally I configured the Multi Protocol Support of my HA Yellow (even though I'm not using Thread at the moment) After that, pairing worked well. We might think that the multiprotocol has a different zigbee stack... (Micrologiciel : 7.3.1.0 build 0) ​

MacDada commented 8 months ago

During the pairing ZHA loads the quirk "zhaquirks.tuya.ts011f_plug.Plug" and everything seems to works, but the device stays in pairing mode, it disconnect/ reconnects multiple times before disconnecting defintevly.

I have the same exact issue with Nous A1Z Smart ZigBee Socket (identified by ZHA as TS011F by _TZ3000_2putqrmw, Firmware: 0x0000004d).

HA OS 2024.2.1 Sonoff Dongle–P (identified by ZHA as CC2652 by Texas Instruments, Firmware: Z-Stack 20230507)

  1. ZHA -> Add device
  2. Hold the button on the socket for a few seconds -> it starts flashing its led
  3. ZHA (re)discovers it
  4. It works! I can control the socket from HA (it is still flashing its led! even though the pairing should have completed [?])
  5. Finally, the led stops flashing -> the socket is not longer controllable from HA (and the values don't get updated)
  6. Go to 1 :-P
aalwash commented 4 months ago

Any update on this? I have the same issue as @MacDada Can I provide any logs, if so, which logs and how can I collect them?

I have Sonoff Zigbee Dongle Firmware Z-Stack 20210708

silvar05123 commented 3 weeks ago

I have also the same problem any Updates?