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) {