From 700e9c0c3ac798554dada54830f05b55dca4a9de Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Mon, 3 May 2021 20:04:54 +0200 Subject: [PATCH] Improve network scan stability. https://github.com/Koenkk/zigbee2mqtt/issues/7163 --- lib/extension/networkMap.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/extension/networkMap.js b/lib/extension/networkMap.js index 83b8e7bfa..742276cca 100644 --- a/lib/extension/networkMap.js +++ b/lib/extension/networkMap.js @@ -214,8 +214,23 @@ class NetworkMap extends Extension { failed.set(device, []); await utils.sleep(1); // sleep 1 second between each scan to reduce stress on network. const resolvedEntity = this.zigbee.resolveEntity(device); + + const doRequest = async (request, firstAttempt = true) => { + try { + return await request(); + } catch (error) { + if (!firstAttempt) { + throw error; + } else { + // Network is possibly congested, sleep 5 seconds to let the network settle. + await utils.sleep(5); + return await doRequest(request, false); + } + } + }; + try { - const result = await device.lqi(); + const result = await doRequest(async () => await device.lqi()); lqis.set(device, result); logger.debug(`LQI succeeded for '${resolvedEntity.name}'`); } catch (error) { @@ -225,7 +240,7 @@ class NetworkMap extends Extension { if (includeRoutes) { try { - const result = await device.routingTable(); + const result = await doRequest(async () => await device.routingTable()); routingTables.set(device, result); logger.debug(`Routing table succeeded for '${resolvedEntity.name}'`); } catch (error) {