From 6a336702961ff5801f55b7d75fd61ed851995534 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Fri, 22 Jan 2021 19:16:35 +0100 Subject: [PATCH] Network scan stability improvement --- lib/extension/networkMap.js | 1 + lib/util/utils.js | 4 ++++ test/networkMap.test.js | 7 ++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/extension/networkMap.js b/lib/extension/networkMap.js index e1d8f057a..5adf8adf7 100644 --- a/lib/extension/networkMap.js +++ b/lib/extension/networkMap.js @@ -212,6 +212,7 @@ class NetworkMap extends Extension { for (const device of devices.filter((d) => d.type != 'EndDevice')) { failed.set(device, []); + await utils.sleep(1); // sleep 1 second between each scan to reduce stress on network. const resolvedEntity = this.zigbee.resolveEntity(device); try { const result = await device.lqi(); diff --git a/lib/util/utils.js b/lib/util/utils.js index 7ed39df2e..e169e9aea 100644 --- a/lib/util/utils.js +++ b/lib/util/utils.js @@ -206,6 +206,9 @@ function validateFriendlyName(name) { } return errors; } +function sleep(seconds) { + return new Promise((resolve) => setTimeout(resolve, seconds * 1000)); +} module.exports = { millisecondsToSeconds: (milliseconds) => milliseconds / 1000, @@ -214,6 +217,7 @@ module.exports = { getDependencyVersion, objectHasProperties, toSnakeCase, + sleep, getObjectProperty, getEndpointNames: () => endpointNames, isXiaomiDevice: (device) => { diff --git a/test/networkMap.test.js b/test/networkMap.test.js index 1745a1c35..f40908967 100644 --- a/test/networkMap.test.js +++ b/test/networkMap.test.js @@ -17,10 +17,10 @@ const MQTT = require('./stub/mqtt'); const settings = require('../lib/util/settings'); const Controller = require('../lib/controller'); const flushPromises = () => new Promise(setImmediate); -const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); Date.now = jest.fn() Date.now.mockReturnValue(10000); const mocksClear = [MQTT.publish, logger.warn, logger.debug]; +const setTimeoutNative = setTimeout; describe('Networkmap', () => { let controller; @@ -43,6 +43,11 @@ describe('Networkmap', () => { const device = zigbeeHerdsman.devices.bulb_color; device.lastSeen = 1000; external_converter_device.lastSeen = 1000; + global.setTimeout = (r) => r(); + }); + + afterEach(async () => { + global.setTimeout = setTimeoutNative; }); function mock() {