I have a Zigbee network based on the SONOFF 3.0 dongle, six IKEA TRADFRI repeaters, a USB repeater and a Zigbee socket that acts as a repeater as well.
The devices have operated all for over a year, but following intermittent problems I revised the layout last October.
- I moved the hub away from a TV that was producing 2.4 GHz-band interference for some reason
- The hub and dongles are in a central location
- I moved the SONOFF dongle and a Bluetooth dongle about 2m away from the hub and each other to prevent mutual interference
- I ensured that the Zigbee and WiFi bands are well separated
- I redistributed the repeaters, keeping them away from WiFi access points and other known sources of interference
I was delighted that the network became much more stable and there were very few intermittent problems.
However, three months later it all fell apart. Pretty much all the Zigbee devices are offline, except the coordinator. If I reconnect the repeaters, they configure successfully but go offline again within minutes (I have the “Consider mains powered devices unavailable after” set to 60 seconds). If the repeaters are all offline, it is not surprising that the end devices are too.
I cannot think of anything I have changed apart from keeping the system up to date.
The general log shows no relevant errors.
If I enable debug logging and reload the Zigbee Coordinator, I get a debug log that I cannot decipher – I attach an extract from the end as the whole thing is apparently too big:
[...]
2024-02-15 21:41:05.064 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=sensor.bed_occupied, old_state=<state sensor.bed_occupied=Unknown; icon=, friendly_name=Main bedroom bed occupancy @ 2024-02-15T21:40:50.586152+00:00>, new_state=<state sensor.bed_occupied=Unoccupied; icon=mdi:bed-empty, friendly_name=Main bedroom bed occupancy @ 2024-02-15T21:41:05.064420+00:00>>
2024-02-15 21:41:05.072 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': 00:12:4b:00:24:45:1b:a8, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.930135, 'min_update_delta': 30.0})
2024-02-15 21:41:05.072 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': 00:12:4b:00:24:45:1b:a8, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.930135, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.110 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.110 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.110 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:85:97:9e:2f:76, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.933835, 'min_update_delta': 30.0})
2024-02-15 21:41:05.111 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:85:97:9e:2f:76, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.933835, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.111 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.111 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.112 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:cb:fb:ec:c4:0d, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.936185, 'min_update_delta': 30.0})
2024-02-15 21:41:05.112 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:cb:fb:ec:c4:0d, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.936185, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.112 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.112 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.113 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:24:95:e2:78:8c, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.938618, 'min_update_delta': 30.0})
2024-02-15 21:41:05.113 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:24:95:e2:78:8c, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.938618, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.114 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.114 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.114 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:f9:65:93:0b:81, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.939173, 'min_update_delta': 30.0})
2024-02-15 21:41:05.115 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:f9:65:93:0b:81, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.939173, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.115 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.115 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.116 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:a0:c5:64:f8:c5, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.940265, 'min_update_delta': 30.0})
2024-02-15 21:41:05.116 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:a0:c5:64:f8:c5, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.940265, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.116 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.116 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.117 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:e6:4c:10:e7:04, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.943709, 'min_update_delta': 30.0})
2024-02-15 21:41:05.117 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:e6:4c:10:e7:04, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.943709, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.117 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.117 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.118 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:dc:4c:9a:f2:6e, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.94485, 'min_update_delta': 30.0})
2024-02-15 21:41:05.118 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:dc:4c:9a:f2:6e, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.94485, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.118 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.118 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:05.119 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:22:c0:ad:89:9f, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.945994, 'min_update_delta': 30.0})
2024-02-15 21:41:05.119 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f46c65058a0>, '\n INSERT INTO attributes_cache_v12\n VALUES (:ieee, :endpoint_id, :cluster_id, :attrid, :value, :timestamp)\n ON CONFLICT (ieee, endpoint_id, cluster, attrid) DO UPDATE\n SET value=excluded.value, last_updated=excluded.last_updated\n WHERE\n value != excluded.value\n OR :timestamp - last_updated > :min_update_delta\n ', {'ieee': a4:c1:38:22:c0:ad:89:9f, 'endpoint_id': 1, 'cluster_id': 1280, 'attrid': 2, 'value': <ZoneStatus: 0>, 'timestamp': 1708033264.945994, 'min_update_delta': 30.0}) completed
2024-02-15 21:41:05.119 DEBUG (Thread-33) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>)
2024-02-15 21:41:05.119 DEBUG (Thread-33) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f46c65058a0>) completed
2024-02-15 21:41:08.136 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event logging_changed[L]>