home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
71.06k stars 29.72k forks source link

ZHA does not detect SLZB-06 as a repeater #91801

Closed aircooledbeemer closed 1 year ago

aircooledbeemer commented 1 year ago

The problem

I'm trying to add smlight SLZB-06 flashed as a router (Z-Stack firmware here: https://github.com/Koenkk/Z-Stack-firmware/tree/master/router/Z-Stack_3.x.0/bin) to a ZHA integration using HA SkyConnect coordinator. When trying to add a device and pressing "Router reconnect" nothing happens. The device is properly detected when adding to an existing ZIGBEE2MQTT network.

I would like to extend my ZHA network using the ethernet capability of the SLZB-06...

I contacted the folks at smlight.me and they say the issue is with ZHA not supportiing the firmware I f;lashed.

I will happily collect any documentation you ask me for.

What version of Home Assistant Core has the issue?

core-2023.4.5

What was the last working version of Home Assistant Core?

none

What type of installation are you running?

Home Assistant OS

Integration causing the issue

ZHA

Link to integration documentation on our website

https://www.home-assistant.io/integrations/zha

Diagnostics information

No response

Example YAML snippet

No response

Anything in the logs that might be useful for us?

No response

Additional information

No response

home-assistant[bot] commented 1 year ago

Hey there @dmulcahey, @adminiuga, @puddly, mind taking a look at this issue as it has been labeled with an integration (zha) you are listed as a code owner for? Thanks!

Code owner commands Code owners of `zha` can trigger bot actions by commenting: - `@home-assistant close` Closes the issue. - `@home-assistant rename Awesome new title` Renames the issue. - `@home-assistant reopen` Reopen the issue. - `@home-assistant unassign zha` Removes the current integration label and assignees on the issue, add the integration domain after the command.

(message by CodeOwnersMention)


zha documentation zha source (message by IssueLinks)

puddly commented 1 year ago

smlight.me's response is incorrect. Joining new devices to a network is completely independent of the Zigbee integration and is handled 100% by the firmware, it doesn't matter if you are using ZHA or Z2M. The fact that you can't add it means that your coordinator is likely experiencing interference preventing it from being able to communicate properly.

Please upload the diagnostics information for the ZHA integration.

aircooledbeemer commented 1 year ago

This is the log when I try to add a new device to the network (pressing router reconnect on the SLZB-06):

0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x2F2A), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=14, profile_id=260, cluster_id=1026, data=Serialized[b'\x08\x87\n\x00\x00)\xa0\x07'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-76) [0x2F2A:1:0x0402] Received ZCL frame: b'\x08\x87\n\x00\x00)\xa0\x07' [0x2F2A:1:0x0402] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, is_cluster=False, is_general=True), tsn=135, command_id=10, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Decoded ZCL frame: TemperatureMeasurement:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=1952))]) [0x2F2A:1:0x0402] Received command 0x0A (TSN 135): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=1952))]) [0x2F2A:1:0x0402] Attribute report received: measured_value=1952 [0x2F2A:1:0x0402] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=135, command_id=<GeneralCommand.Default_Response: 11>, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>) 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x2F2A), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=15, profile_id=260, cluster_id=1026, data=Serialized[b'\x08\x88\n\x00\x00)\x94\x07'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-77) [0x2F2A:1:0x0402] Received ZCL frame: b'\x08\x88\n\x00\x00)\x94\x07' [0x2F2A:1:0x0402] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, is_cluster=False, is_general=True), tsn=136, command_id=10, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Decoded ZCL frame: TemperatureMeasurement:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=1940))]) [0x2F2A:1:0x0402] Received command 0x0A (TSN 136): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=1940))]) [0x2F2A:1:0x0402] Attribute report received: measured_value=1940 [0x2F2A:1:0x0402] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=136, command_id=<GeneralCommand.Default_Response: 11>, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>) Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x2F2A), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=16, profile_id=260, cluster_id=1029, data=Serialized[b'\x08\x89\n\x00\x00!\xd5\x12'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-78) [0x2F2A:1:0x0405] Received ZCL frame: b'\x08\x89\n\x00\x00!\xd5\x12' [0x2F2A:1:0x0405] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, is_cluster=False, is_general=True), tsn=137, command_id=10, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0405] Decoded ZCL frame: RelativeHumidity:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=4821))]) [0x2F2A:1:0x0405] Received command 0x0A (TSN 137): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=4821))]) [0x2F2A:1:0x0405] Attribute report received: measured_value=4821 [0x2F2A:1:0x0405] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=137, command_id=<GeneralCommand.Default_Response: 11>, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0405] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>) 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x2F2A), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=17, profile_id=260, cluster_id=1026, data=Serialized[b'\x08\x8a\n\x00\x00)\xc8\x07'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-77) [0x2F2A:1:0x0402] Received ZCL frame: b'\x08\x8a\n\x00\x00)\xc8\x07' [0x2F2A:1:0x0402] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, is_cluster=False, is_general=True), tsn=138, command_id=10, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Decoded ZCL frame: TemperatureMeasurement:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=1992))]) [0x2F2A:1:0x0402] Received command 0x0A (TSN 138): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=1992))]) [0x2F2A:1:0x0402] Attribute report received: measured_value=1992 [0x2F2A:1:0x0402] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=138, command_id=<GeneralCommand.Default_Response: 11>, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>) 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x2F2A), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=18, profile_id=260, cluster_id=1026, data=Serialized[b'\x08\x8b\n\x00\x00)\xe7\x07'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-77) [0x2F2A:1:0x0402] Received ZCL frame: b'\x08\x8b\n\x00\x00)\xe7\x07' [0x2F2A:1:0x0402] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, is_cluster=False, is_general=True), tsn=139, command_id=10, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Decoded ZCL frame: TemperatureMeasurement:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=2023))]) [0x2F2A:1:0x0402] Received command 0x0A (TSN 139): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=int16s, value=2023))]) [0x2F2A:1:0x0402] Attribute report received: measured_value=2023 [0x2F2A:1:0x0402] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=139, command_id=<GeneralCommand.Default_Response: 11>, direction=<Direction.Client_to_Server: 1>) [0x2F2A:1:0x0402] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>) 0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xC714), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=204, profile_id=260, cluster_id=1029, data=Serialized[b'\x18\x9a\n\x00\x00!\xa8\x16'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-86) Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xC714), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=204, profile_id=260, cluster_id=1029, data=Serialized[b'\x18\x9a\n\x00\x00!\xa8\x16'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-86) [0xC714:1:0x0405] Received ZCL frame: b'\x18\x9a\n\x00\x00!\xa8\x16' [0xC714:1:0x0405] Received ZCL frame: b'\x18\x9a\n\x00\x00!\xa8\x16' [0xC714:1:0x0405] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=154, command_id=10, direction=<Direction.Client_to_Server: 1>) [0xC714:1:0x0405] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, is_cluster=False, is_general=True), tsn=154, command_id=10, direction=<Direction.Client_to_Server: 1>) [0xC714:1:0x0405] Decoded ZCL frame: RelativeHumidity:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=5800))]) [0xC714:1:0x0405] Decoded ZCL frame: RelativeHumidity:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=5800))]) [0xC714:1:0x0405] Received command 0x0A (TSN 154): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=5800))]) [0xC714:1:0x0405] Received command 0x0A (TSN 154): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=uint16_t, value=5800))]) [0xC714:1:0x0405] Attribute report received: measured_value=5800 [0xC714:1:0x0405] Attribute report received: measured_value=5800 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0xC714: Device seen - marking the device available and resetting counter 0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False 0xC714: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0xC714: Device seen - marking the device available and resetting counter 0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False 0xC714: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Device seen - marking the device available and resetting counter 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0x2F2A: Update device availability - device available: True - new availability: True - changed: False 0xC714: Device seen - marking the device available and resetting counter 0xC714: Device seen - marking the device available and resetting counter 0xC714: Update device availability - device available: True - new availability: True - changed: False 0xC714: Update device availability - device available: True - new availability: True - changed: False

There is not much in the console log of the SLZB-06: [302609] | Router reconnect

I used CC1352P2_CC2652P_other_router_20221102.hex to flash the stick, connection type of the stick is LAN mode.

config_entry-zha-6edb310fa3a52773f016f840aa08aaa4.json.txt

Tarik2142 commented 1 year ago

smlight.me's response is incorrect. Joining new devices to a network is completely independent of the Zigbee integration and is handled 100% by the firmware, it doesn't matter if you are using ZHA or Z2M. The fact that you can't add it means that your coordinator is likely experiencing interference preventing it from being able to communicate properly.

Please upload the diagnostics information for the ZHA integration.

Hi, puddly!

When using SLZB-06+Z2M, everything works and another SLZB-06 in router mode is added to the network. This problem occurred when using SkyConnect+ZHA, so I thought the problem was with ZHA as it controls the coordinator. So is this a bug in the SkyConnect firmware?

puddly commented 1 year ago

So is this a bug in the SkyConnect firmware?

Unlikely. The moment the network key is sent to the device and it announces itself, the firmware's role is done.

@aircooledbeemer @Tarik2142 please attach the ZHA integration's diagnostic JSON.

image
aircooledbeemer commented 1 year ago

Here is the ZHA debug information collected while trying to add the device to the network, hope it helps, the diagnostic is already available above.

home-assistant_zha_2023-04-25T07-44-51.024Z.log

puddly commented 1 year ago

@aircooledbeemer could you attach the diagnostic JSON from the integration itself? I included a screenshot above to show how to download it. It includes information that isn't in the debug log.

aircooledbeemer commented 1 year ago

This is what I see when adding the device to Zigbee2MQTT:

Gerätename 0x00124b002578e957 Beschreibung

Zuletzt gesehen vor 3 Minuten Verfügbarkeit Online Geräte-Typ Router Zigbee Modell ti.router Zigbee Hersteller TexasInstruments Beschreibung Texas Instruments router Unterstützungsstatus

Unterstützt

IEEE Addresse 0x00124b002578e957 Netzwerk Adresse 0x2AD1 Firmware-Version 20221102 Hersteller Custom devices (DiY) Modell ti.router Spannungsversorgung Interview erfolgreich Wahr

Not sure if that helps....

And the diagnostic information collected just now... config_entry-zha-6edb310fa3a52773f016f840aa08aaa4.json.txt

puddly commented 1 year ago

For completeness, a ZZH stick flashed with router firmware joins both a normal SkyConnect Zigbee network and a Yellow multi-PAN network within 10s:

image image

When using SLZB-06+Z2M, everything works and another SLZB-06 in router mode is added to the network.

One major difference is that Z2M always picks channel 11, while ZHA (before 2023.4.1) always picked channel 15. If you have noise on one and not the other, you will have problems joining new devices.

issue-triage-workflows[bot] commented 1 year ago

There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest Home Assistant version and check if that solves the issue. Let us know if that works for you by adding a comment 👍 This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.