Sonoff SNZB-03 no longer pairing after a year of flawless service

Hi there,

I know there are a few threads about issues with the Sonoff SNZB-03, and many conclude that it’s best to switch to a different brand, but I haven’t found anyone in exactly my situation and thus would like to be sure nothing can be done.

The gist of it:

  • the sensor has been working for 1 or 2 years already. It’s been one of the first zigbee sensors I installed and has never caused problems (I have occasional disappearing sensors, probably due to wifi interference, but the motion sensors always trigger into “detected” even when temporarily “unavailable” for a few hours; in any case note that all the following attempts were made with the sensor 5cm away from the zigbee dongle - also a Sonoff!)
  • a week or 2 ago, however, this one (I have another one still working) became permanently unavailable
  • I tried “reconfiguring”, with no luck. It shows “binding” (green mark), then “reporting” (green mark), then in the advanced view it shows some orange crosses related to the battery, then after a rather long time it concludes that it failed.
  • I put in a new battery (fresh Duracell, produced in July 2023, expiring in July 2033) and tried reconfiguring again, no luck, same thing
  • I removed the sensor from HA altogether and tried adding it back again. It’s detected (as MS01 by eWeLink), but configuration never really ends. The sensor ends up listed in HA, but has no entities. The logs are very long, and I’m not sure which parts to post; lots of requests being set, timeouts being extended, and occasionally ZigbeePackets being received.
  • Reconfiguring after that yields the same as in earlier reconfiguration attempts.

Here’s a few lines from the reconfiguration attempt which may or may not be relevant:

2024-01-20 11:56:45.879 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=1280, SrcAddr=0xE89F, SrcEndpoint=1, DstEndpoint=2, WasBroadcast=<Bool.false:
 0>, LQI=174, SecurityUse=<Bool.false: 0>, TimeStamp=13424526, TSN=0, Data=b'\x19\x09\x00\x00\x00\x00\x00\x00\x00', MacSrcAddr=0xE89F, MsgResultRadius=29)
2024-01-20 11:56:45.882 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 1, 20, 10, 56, 45, 882113, tzinfo=datetime.timezone.utc), src=AddrModeAddre
ss(addr_mode=<AddrMode.NWK: 2>, address=0xE89F), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=2, source_route=None, extended_timeout=False, tsn=0, profile_id=49246, c
luster_id=1280, data=Serialized[b'\x19\t\x00\x00\x00\x00\x00\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=29, non_member_radius=0, lqi=174, rssi=None)
2024-01-20 11:56:45.883 WARNING (MainThread) [zigpy.application] Unknown device AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F)
2024-01-20 11:56:45.885 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=1280, SrcAddr=0xE89F, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false:
 0>, LQI=174, SecurityUse=<Bool.false: 0>, TimeStamp=13424526, TSN=0, Data=b'\x19\x09\x00\x00\x00\x00\x00\x00\x00', MacSrcAddr=0xE89F, MsgResultRadius=29)
2024-01-20 11:56:45.887 DEBUG (MainThread) [zigpy_znp.zigbee.application] Sending packet ZigbeePacket(timestamp=datetime.datetime(2024, 1, 20, 10, 56, 45, 887213, tzinfo=datetime.timezone.utc), src=AddrMo
deAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.Broadcast: 15>, address=<BroadcastAddress.RX_ON_WHEN_IDLE: 65533>), dst_ep=0, source_route=None, e
xtended_timeout=False, tsn=102, profile_id=0, cluster_id=<ZDOCmd.IEEE_addr_req: 0x0001>, data=Serialized[b'f\x9f\xe8\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=Non
e, rssi=None)
2024-01-20 11:56:45.888 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 1, 20, 10, 56, 45, 888852, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=102, profile_id=0, cluster_id=<ZDOCmd.IEEE_addr_req: 0x0001>, data=Serialized[b'f\x9f\xe8\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2024-01-20 11:56:45.890 DEBUG (MainThread) [zigpy.zdo] [0x0000:zdo] ZDO request ZDOCmd.IEEE_addr_req: [0xE89F, <AddrRequestType.Single: 0>, 0]
2024-01-20 11:56:45.891 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFD), DstEndpoint=0, DstPanId=0x0000, SrcEndpoint=0, ClusterId=1, TSN=102, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x66\x9F\xE8\x00\x00')
2024-01-20 11:56:45.894 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 1, 20, 10, 56, 45, 894404, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=0, profile_id=260, cluster_id=1280, data=Serialized[b'\x19\t\x00\x00\x00\x00\x00\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=29, non_member_radius=0, lqi=174, rssi=None)
2024-01-20 11:56:45.895 WARNING (MainThread) [zigpy.application] Unknown device AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F)
2024-01-20 11:56:45.900 DEBUG (MainThread) [zigpy_znp.zigbee.application] Sending packet ZigbeePacket(timestamp=datetime.datetime(2024, 1, 20, 10, 56, 45, 900061, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.Broadcast: 15>, address=<BroadcastAddress.RX_ON_WHEN_IDLE: 65533>), dst_ep=0, source_route=None, extended_timeout=False, tsn=103, profile_id=0, cluster_id=<ZDOCmd.IEEE_addr_req: 0x0001>, data=Serialized[b'g\x9f\xe8\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2024-01-20 11:56:45.901 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 1, 20, 10, 56, 45, 901455, tzinfo=datetime.timezone.utc), src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=103, profile_id=0, cluster_id=<ZDOCmd.IEEE_addr_req: 0x0001>, data=Serialized[b'g\x9f\xe8\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2024-01-20 11:56:45.903 DEBUG (MainThread) [zigpy.zdo] [0x0000:zdo] ZDO request ZDOCmd.IEEE_addr_req: [0xE89F, <AddrRequestType.Single: 0>, 0]
2024-01-20 11:56:45.930 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
2024-01-20 11:56:45.934 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFD), DstEndpoint=0, DstPanId=0x0000, SrcEndpoint=0, ClusterId=1, TSN=103, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x67\x9F\xE8\x00\x00')
2024-01-20 11:56:45.955 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)

Somewhere else i also have a few Python errors:

2024-01-20 12:21:00.490 WARNING (MainThread) [zigpy.application] Unknown device AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F)
2024-01-20 12:21:00.498 WARNING (MainThread) [zigpy.application] Unknown device AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F)
2024-01-20 12:25:04.878 ERROR (MainThread) [zigpy.zcl] [0xE89F:1:0x0500] Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/zigpy/device.py", line 316, in request
    return await req.result
           ^^^^^^^^^^^^^^^^
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/zigpy/endpoint.py", line 253, in request
    return await self.device.request(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/zigpy/device.py", line 315, in request
    async with asyncio_timeout(timeout):
  File "/usr/local/lib/python3.11/asyncio/timeouts.py", line 111, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/zha/core/cluster_handlers/__init__.py", line 83, in wrapper
    with wrap_zigpy_exceptions():
  File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/src/homeassistant/homeassistant/components/zha/core/cluster_handlers/__init__.py", line 66, in wrap_zigpy_exceptions
    raise HomeAssistantError(
homeassistant.exceptions.HomeAssistantError: Failed to send request: device did not respond

2024-01-20 12:25:50.725 WARNING (MainThread) [zigpy.application] Unknown device AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F)
2024-01-20 12:25:50.733 WARNING (MainThread) [zigpy.application] Unknown device AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE89F)

Is there anything else I could try before switching brands? (is Samotech as good as I saw some people say? worried about the weight for my use case, but using AAA batteries is a plus if rechargeable can be used)

Cheers,
Pierric.

For the record, if this helps anyone, it ended up working again after some time without further action (beyond everything I tried on the first day). So I would recommend trying:

  • remove the stubborn sensor from HA completely
  • remove the battery from the sensor
  • wait for 2 minutes for good measure
  • put the battery back
  • pair the sensor with HA again by adding device in HA and setting the sensor in pairing mode again (3 seconds with a pin until it blinks 3 times)
  • don’t give up yet if still getting a cryptic error, so long as the sensor is still being added, and wait for a full day to see what happens

I’ve discarded that the issue was the battery, several days after doing this and replacing the original battery (saving the new one for later), the battery is reporting at 91% (was 100% for the first day but then went down to a more realistic - though possibly still not very realistic - value).