Switched from Deconz to ZHA - It was great, now it's not?

HA 2023.2.3, VM install, OS 9.5.

ZHA Diagnostics

{
“home_assistant”: {
“installation_type”: “Home Assistant OS”,
“version”: “2023.2.3”,
“dev”: false,
“hassio”: true,
“virtualenv”: false,
“python_version”: “3.10.7”,
“docker”: true,
“arch”: “x86_64”,
“timezone”: “America/New_York”,
“os_name”: “Linux”,
“os_version”: “5.15.90”,
“supervisor”: “2023.01.1”,
“host_os”: “Home Assistant OS 9.5”,
“docker_version”: “20.10.22”,
“chassis”: “vm”,
“run_as_root”: true
},
“custom_components”: {
“var”: {
“version”: “0.15.0”,
“requirements”: []
},
“zha_toolkit”: {
“version”: “v0.8.29”,
“requirements”: [
“packaging>=20.8”,
“pytz”
]
}
},
“integration_manifest”: {
“domain”: “zha”,
“name”: “Zigbee Home Automation”,
“config_flow”: true,
“documentation”: “Zigbee Home Automation - Home Assistant”,
“requirements”: [
“bellows==0.34.7”,
“pyserial==3.5”,
“pyserial-asyncio==0.6”,
“zha-quirks==0.0.92”,
“zigpy-deconz==0.19.2”,
“zigpy==0.53.0”,
“zigpy-xbee==0.16.2”,
“zigpy-zigate==0.10.3”,
“zigpy-znp==0.9.2”
],
“usb”: [
{
“vid”: “10C4”,
“pid”: “EA60”,
“description”: “2652”,
“known_devices”: [
“slae.sh cc2652rb stick”
]
},
{
“vid”: “1A86”,
“pid”: “55D4”,
“description”: “sonoffplus*”,
“known_devices”: [
“sonoff zigbee dongle plus v2”
]
},
{
“vid”: “10C4”,
“pid”: “EA60”,
“description”: “sonoffplus*”,
“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”
]
}
],
“codeowners”: [
@dmulcahey”,
@adminiuga”,
@puddly
],
“zeroconf”: [
{
“type”: “_esphomelib._tcp.local.”,
“name”: “tube*”
},
{
“type”: “_zigate-zigbee-gateway._tcp.local.”,
“name”: “zigate
},
{
“type”: “_zigstar_gw._tcp.local.”,
“name”: “zigstar
},
{
“type”: “_slzb-06._tcp.local.”,
“name”: “slzb-06*”
}
],
“dependencies”: [
“file_upload”
],
“after_dependencies”: [
“onboarding”,
“usb”,
“zeroconf”
],
“iot_class”: “local_polling”,
“loggers”: [
“aiosqlite”,
“bellows”,
“crccheck”,
“pure_pcapy3”,
“zhaquirks”,
“zigpy”,
“zigpy_deconz”,
“zigpy_xbee”,
“zigpy_zigate”,
“zigpy_znp”
],
“is_built_in”: true
},
“data”: {
“config”: {},
“config_entry”: {
“entry_id”: “522011ecc75736cf2c39795a3b1347b6”,
“version”: 3,
“domain”: “zha”,
“title”: “SkyConnect v1.0, s/n: 064e99cca025ec11a1dffb87a8a1c857 - Nabu Casa”,
“data”: {
“device”: {
“path”: “/dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_064e99cca025ec11a1dffb87a8a1c857-if00-port0”,
“flow_control”: “software”,
“baudrate”: 115200
},
“radio_type”: “ezsp”
},
“options”: {},
“pref_disable_new_entities”: false,
“pref_disable_polling”: false,
“source”: “user”,
“unique_id”: null,
“disabled_by”: null
},
“application_state”: {
“node_info”: {
“nwk”: 0,
“ieee”: “REDACTED”,
“logical_type”: 0
},
“network_info”: {
“extended_pan_id”: “REDACTED”,
“pan_id”: 6754,
“nwk_update_id”: 0,
“nwk_manager_id”: 0,
“channel”: 11,
“channel_mask”: 134215680,
“security_level”: 5,
“network_key”: “REDACTED”,
“tc_link_key”: {
“key”: [
90,
105,
103,
66,
101,
101,
65,
108,
108,
105,
97,
110,
99,
101,
48,
57
],
“tx_counter”: 73728,
“rx_counter”: 0,
“seq”: 0,
“partner_ieee”: “REDACTED
},
“key_table”: [],
“children”: [],
“nwk_addresses”: {},
“stack_specific”: {
“ezsp”: {
“hashed_tclk”: “19561a0ce0eac97ea4ed76cf5dbbe9b0”
}
},
“metadata”: {
“ezsp”: {
“manufacturer”: “Nabu Casa”,
“board”: “SkyConnect v1.0”,
“version”: “7.1.1.0 build 273”,
“stack_version”: 9,
“can_write_custom_eui64”: true
}
},
“source”: “[email protected]
},
“counters”: {
“controller_app_counters”: {
“unicast_rx”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘unicast_rx’, _raw_value=8122, reset_count=0, _last_reset_value=0)”
},
“unicast_tx_success”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘unicast_tx_success’, _raw_value=7391, reset_count=0, _last_reset_value=0)”
},
“broadcast_tx_failure”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘broadcast_tx_failure’, _raw_value=1, reset_count=0, _last_reset_value=0)”
},
“unicast_tx_failure”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘unicast_tx_failure’, _raw_value=1345, reset_count=0, _last_reset_value=0)”
},
“broadcast_tx_failure_unexpected”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘broadcast_tx_failure_unexpected’, _raw_value=118, reset_count=0, _last_reset_value=0)”
},
“broadcast_rx”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘broadcast_rx’, _raw_value=294, reset_count=0, _last_reset_value=0)”
},
“broadcast_tx_success_unexpected”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘broadcast_tx_success_unexpected’, _raw_value=177, reset_count=0, _last_reset_value=0)”
},
“broadcast_tx_success”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘broadcast_tx_success’, _raw_value=3, reset_count=0, _last_reset_value=0)”
},
“unicast_tx_success_unexpected”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘unicast_tx_success_unexpected’, _raw_value=1, reset_count=0, _last_reset_value=0)”
}
},
“ezsp_counters”: {
“MAC_RX_BROADCAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘MAC_RX_BROADCAST’, _raw_value=1172, reset_count=16, _last_reset_value=47963)”
},
“MAC_TX_BROADCAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘MAC_TX_BROADCAST’, _raw_value=121, reset_count=16, _last_reset_value=6961)”
},
“MAC_RX_UNICAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘MAC_RX_UNICAST’, _raw_value=435, reset_count=16, _last_reset_value=12176)”
},
“MAC_TX_UNICAST_SUCCESS”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘MAC_TX_UNICAST_SUCCESS’, _raw_value=542, reset_count=16, _last_reset_value=10355)”
},
“MAC_TX_UNICAST_RETRY”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘MAC_TX_UNICAST_RETRY’, _raw_value=16, reset_count=16, _last_reset_value=621)”
},
“MAC_TX_UNICAST_FAILED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘MAC_TX_UNICAST_FAILED’, _raw_value=476, reset_count=16, _last_reset_value=20741)”
},
“APS_DATA_RX_BROADCAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DATA_RX_BROADCAST’, _raw_value=5, reset_count=16, _last_reset_value=294)”
},
“APS_DATA_TX_BROADCAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DATA_TX_BROADCAST’, _raw_value=5, reset_count=16, _last_reset_value=294)”
},
“APS_DATA_RX_UNICAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DATA_RX_UNICAST’, _raw_value=356, reset_count=16, _last_reset_value=7765)”
},
“APS_DATA_TX_UNICAST_SUCCESS”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DATA_TX_UNICAST_SUCCESS’, _raw_value=326, reset_count=16, _last_reset_value=7065)”
},
“APS_DATA_TX_UNICAST_RETRY”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DATA_TX_UNICAST_RETRY’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“APS_DATA_TX_UNICAST_FAILED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DATA_TX_UNICAST_FAILED’, _raw_value=17, reset_count=16, _last_reset_value=1328)”
},
“ROUTE_DISCOVERY_INITIATED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘ROUTE_DISCOVERY_INITIATED’, _raw_value=8, reset_count=16, _last_reset_value=656)”
},
“NEIGHBOR_ADDED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘NEIGHBOR_ADDED’, _raw_value=0, reset_count=16, _last_reset_value=20)”
},
“NEIGHBOR_REMOVED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘NEIGHBOR_REMOVED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“NEIGHBOR_STALE”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘NEIGHBOR_STALE’, _raw_value=21, reset_count=16, _last_reset_value=1132)”
},
“JOIN_INDICATION”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘JOIN_INDICATION’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“CHILD_REMOVED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘CHILD_REMOVED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“ASH_OVERFLOW_ERROR”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘ASH_OVERFLOW_ERROR’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“ASH_FRAMING_ERROR”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘ASH_FRAMING_ERROR’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“ASH_OVERRUN_ERROR”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘ASH_OVERRUN_ERROR’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“NWK_FRAME_COUNTER_FAILURE”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘NWK_FRAME_COUNTER_FAILURE’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“APS_FRAME_COUNTER_FAILURE”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_FRAME_COUNTER_FAILURE’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“UTILITY”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘UTILITY’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“APS_LINK_KEY_NOT_AUTHORIZED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_LINK_KEY_NOT_AUTHORIZED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“NWK_DECRYPTION_FAILURE”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘NWK_DECRYPTION_FAILURE’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“APS_DECRYPTION_FAILURE”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘APS_DECRYPTION_FAILURE’, _raw_value=0, reset_count=16, _last_reset_value=4)”
},
“ALLOCATE_PACKET_BUFFER_FAILURE”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘ALLOCATE_PACKET_BUFFER_FAILURE’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“RELAYED_UNICAST”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘RELAYED_UNICAST’, _raw_value=0, reset_count=16, _last_reset_value=2)”
},
“PHY_TO_MAC_QUEUE_LIMIT_REACHED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PHY_TO_MAC_QUEUE_LIMIT_REACHED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PACKET_VALIDATE_LIBRARY_DROPPED_COUNT”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PACKET_VALIDATE_LIBRARY_DROPPED_COUNT’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“TYPE_NWK_RETRY_OVERFLOW”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘TYPE_NWK_RETRY_OVERFLOW’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PHY_CCA_FAIL_COUNT”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PHY_CCA_FAIL_COUNT’, _raw_value=540, reset_count=16, _last_reset_value=25325)”
},
“BROADCAST_TABLE_FULL”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘BROADCAST_TABLE_FULL’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PTA_LO_PRI_REQUESTED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PTA_LO_PRI_REQUESTED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PTA_HI_PRI_REQUESTED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PTA_HI_PRI_REQUESTED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PTA_LO_PRI_DENIED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PTA_LO_PRI_DENIED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PTA_HI_PRI_DENIED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PTA_HI_PRI_DENIED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PTA_LO_PRI_TX_ABORTED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PTA_LO_PRI_TX_ABORTED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“PTA_HI_PRI_TX_ABORTED”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘PTA_HI_PRI_TX_ABORTED’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“ADDRESS_CONFLICT_SENT”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘ADDRESS_CONFLICT_SENT’, _raw_value=0, reset_count=16, _last_reset_value=0)”
},
“EZSP_FREE_BUFFERS”: {
“__type”: “<class ‘zigpy.state.Counter’>”,
“repr”: “Counter(name=‘EZSP_FREE_BUFFERS’, _raw_value=251, reset_count=16, _last_reset_value=0)”
}
}
},
“broadcast_counters”: {},
“device_counters”: {},
“group_counters”: {}
},
“versions”: {
“bellows”: “0.34.7”,
“zigpy”: “0.53.0”,
“zigpy_deconz”: “0.19.2”,
“zigpy_xbee”: “0.16.2”,
“zigpy_znp”: “0.9.2”,
“zigpy_zigate”: “0.10.3”,
“zhaquirks”: “0.0.92”
}
}
}

A month or so ago I received the new SkyConnect zigbee stick (soon to be ZigBee/Thread stick).
I set it up using the ZHA integration (whereas my existing Zigbee network was running via Deconz).

For a while I only moved some devices over while doing some testing. Then I bought a bunch of Aqara door sensors and started installing them. Once I added some Sonoff S31-Lites to the network, everything was working very well.

This week I moved the last 4 devices (all Hue bulbs) over to the ZHA/SkyConnect network. Just before this though I had started to notice some strange behavior. I figured things had been working well enough though, and it would be better to extend the network.

Now, most of those Aqara door sensors are not working, or very spotty.
There are 3 of them that are connected directly to the coordinator and they work great. But I have 8 others that seem to be on/off the network at random. You can see those at the top right:

I also noticed some strange things when looking at the logs.
For example, last night as I left my office I figured I should test things. IIRC when I first opened the door, nothing happened in HA.

So I closed the door, pressed the button on the Aqara door sensor to wake it up(?) then opened the door again.
This time, in the Logbook I saw “Office Door Attribute Updated event was fired”, but the state didn’t change. So I closed the door and opened it again, this time I got the “Office Door Attribute Updated event was fired”, but the state also changed to opened:

In the meantime I have power cycled the host (it’s a VM install) and that didn’t help anything.

Any other ideas for things I should be testing?

Interference or rouge device(s) are normally to blame so start by following https://community.home-assistant.io/t/guide-for-zigbee-interference-avoidance-and-network-range-coverage-optimization/515752

And https://www.home-assistant.io/integrations/zha#defining-zigbee-channel-to-use

As well as → https://www.home-assistant.io/integrations/zha#best-practices-to-avoid-pairingconnection-difficulties

Thanks @Hedda.

I was planning to come back to reply, but it’s been a busy day and this is my first chance to get to my computer.

Around 3am we woke up because one of my automations triggered that sets off an alert for a door opening (but the door hadn’t opened, it just re-established connection and created a false alarm). At the same time my wife noticed some cameras had gone offline (the few that are WiFi) and she mentioned she’s noticed they had been doing that every few days at the same time… :thinking:

When I woke up this morning I put it all together and remembered that I had turned on a setting in the UniFi controller that optimizes the WiFi AP’s channels, and it was running every 1-3 days at 3am. I also remembered that ZigBee and 2.4g WiFi can have interference so I started the process of clearing some space for ZigBee and the devices in the area of the AP that had overlap with my Zigbee channel are working again. I’ll keep an eye on it, but hopefully this resolves it.

1 Like

It would seem that I spoke too soon, unfortunately. I’ll do some more testing, but my 2.4Ghz WiFi network is all in the 6/11 channels now, leaving channel 1 open. My Zigbee network is on channel 11, so it should be pretty clear (no neighbors close enough to worry much about either).
I also moved the coordinator to a USB 2 port instead of a USB 3 port (though, in general, devices connected to the coordinator seem to be working well - it’s when a hop is involved that I start to see problems).

I did just notice that the link to the ZHA docs says “ZHA prefers to use Zigbee channel 15 by default.” I’m not sure if that is outdated though - I didn’t modify the channel when I configured ZHA and ZHA/SkyConnect seemed to default to channel 11.

I did still have my old Conbee coordinator plugged in a few days ago, but I’ve since unplugged it and I’m still having issues with devices not working properly/seemingly not on the network.

For example:

I suppose it could be the Sonoff Zigbee plug(s) causing problems. I had read good things about them though, and they had been working well for a few weeks. I could try replacing them with a different zigbee router - unfortunately, it looks like Ikea no longer sells the Tradfri Signal Repeater in the US.

@Hedda - Any recommendations for finding rogue devices?