Complete Guide to Adding Zemismart Zigbee Screen Switch ZMS-206 to Home Assistant via ZHA (with Converter Tool)

Thank you - I have just updated remotely - haven't been able to confirm that the change worked. But one other item I have experienced in the past two weeks is that the switches occasionally drop from the zha network and don't recover. I've been through some fault finding and believe it is likely caused by the switches. See below summary. Can you please advise how to work through?

Everything now points to one conclusion: these two _TZE28C1000000_xibaabmu 4-gang switches have a firmware/quirk fault that hangs the device after a few hours. The evidence is consistent:

  • Other Tuya TS0601s on the same coordinator are perfectly stable (live LQI right now)
  • Both 4-gang switches drop independently, hours apart (not a coordinator event)
  • Both link directly to the coordinator with strong signal (not a routing/range problem)
  • They hang unrecoverably until power-cycled (device-side stack lockup)
  • A passive read every 20 min doesn't revive them (device stops responding entirely)

Can you provide logs?

See below extract from the log.

===================================================================
 ZHA DEBUG EXTRACT - Entry Switch continuous unsecured-rejoin loop
===================================================================
 Device:      _TZE28C1000000_xibaabmu  TS0601  4-gang wall switch
 IEEE:        a4:c1:38:ef:f7:ef:45:76
 Firmware:    0x00000063
 Coordinator: Sonoff ZBDongle-E (EZSP / EmberZNet)
 Host:        Home Assistant Core 2026.4.3, ZHA
 Log window:  2026-07-02 15:50 - 18:32 AEST (UTC+10)
===================================================================

 KEY FINDING
 -----------
 Over the 2h42m capture, this device produced 512 join-handler events
 and ZERO normal operational frames. Breakdown of the 256 application-
 layer trustCenterJoinHandler frames:

     256 / 256  status         = STANDARD_SECURITY_UNSECURED_REJOIN
     256 / 256  policyDecision = DENY_JOIN

 Interpretation:
  - The switch continuously attempts an UNSECURED rejoin (rejoining
    without the network key), every ~30-60 seconds, indefinitely.
  - The trust centre correctly DENIES every unsecured rejoin.
  - Result: the device can never re-establish a secure link and remains
    unavailable until physically power-cycled (which forces a fresh
    secured association). It then degrades back into this loop.
  - The device is cycling short addresses (0x775E, 0xA5C8, 0x6EDA),
    consistent with repeated failed re-association.

 This indicates the device is failing to retain / correctly use its
 network security material, i.e. a device-side firmware fault on
 build 0x63 - not a signal, range, or coordinator issue:
  - Signal strong throughout: LQI ~156, RSSI ~-61.
  - Device links directly to the coordinator (single hop).
  - Other Tuya TS0601 devices on the same coordinator are stable.
  - A second identical unit is intermittently stable.

===================================================================
 EVIDENCE 1: Join status / policy breakdown (raw counts)
===================================================================

trustCenterJoinHandler status types:
    256   STANDARD_SECURITY_UNSECURED_REJOIN
trustCenterJoinHandler policy decisions:
    256   DENY_JOIN

===================================================================
 EVIDENCE 2: Full EZSP frames - 8 representative join events
 (untruncated - shows status, policyDecision, parent, addresses)
===================================================================

2026-07-02 15:50:31.227 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:51:07.856 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:52:01.725 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:52:52.342 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:53:40.047 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:54:32.717 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:55:20.299 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}
2026-07-02 15:55:57.967 DEBUG (MainThread) [bellows.ezsp.protocol] Received command trustCenterJoinHandler: {'newNodeId': 0x6EDA, 'newNodeEui64': a4:c1:38:ef:f7:ef:45:76, 'status': <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, 'policyDecision': <EmberJoinDecision.DENY_JOIN: 2>, 'parentOfNewNodeId': 0x0000}

===================================================================
 EVIDENCE 3: Timestamped join-event sequence (representative sample)
 Full capture had 256 such events every ~30-60s; sample shown.
===================================================================

2026-07-02 15:50:31.227 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:51:07.857 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:52:01.725 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:52:52.343 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:53:40.047 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:54:32.717 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:55:20.299 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:55:57.967 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:56:57.946 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 15:57:57.392 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 15:57:57.418 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 15:58:45.074 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 15:58:45.100 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 15:59:20.297 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:00:06.652 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:00:37.308 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:01:35.347 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:02:19.318 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:03:02.593 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:03:02.620 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:03:46.629 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:03:46.654 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:04:18.659 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:04:56.442 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:05:47.555 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:06:27.488 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:07:59.489 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:07:59.514 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:08:32.937 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:09:06.618 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:09:06.647 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:09:52.300 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:09:52.325 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:10:27.777 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:10:27.807 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:11:20.763 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:11:20.790 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x775E]
2026-07-02 16:12:15.711 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:12:57.366 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]
2026-07-02 16:13:32.517 DEBUG (MainThread) [bellows.zigbee.application] Received trustCenterJoinHandler frame with [0x6EDA, a4:c1:38:ef:f7:ef:45:76, <EmberDeviceUpdate.STANDARD_SECURITY_UNSECURED_REJOIN: 3>, <EmberJoinDecision.DENY_JOIN: 2>, 0x0000]

[... pattern repeats identically for the remainder of the 256 events
     through to 18:32:03 AEST - full log available on request ...]

try powering off and restarting, or removing and re-pairing the device and then observing the results.

I have to power off and remove the device every time it fails - other wise it doesn't do anything. I can try removing and repairing and will provide feedback.