From a2d09b08eae6db3734ec82206544243724d997c1 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Sat, 11 Apr 2020 20:58:22 +0200 Subject: [PATCH] Refactor DeviceConfigure --- lib/controller.js | 4 +- .../{deviceConfigure.js => configure.js} | 42 +++++++++++-------- lib/extension/networkMap.js | 3 ++ ...iceConfigure.test.js => configure.test.js} | 4 +- 4 files changed, 32 insertions(+), 21 deletions(-) rename lib/extension/{deviceConfigure.js => configure.js} (73%) rename test/{deviceConfigure.test.js => configure.test.js} (99%) diff --git a/lib/controller.js b/lib/controller.js index 7ede1a86d..16fe19eba 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -13,7 +13,7 @@ const ExtensionDeviceReceive = require('./extension/deviceReceive'); const ExtensionNetworkMap = require('./extension/networkMap'); const ExtensionSoftReset = require('./extension/legacy/softReset'); const ExtensionHomeAssistant = require('./extension/homeassistant'); -const ExtensionDeviceConfigure = require('./extension/deviceConfigure'); +const ExtensionConfigure = require('./extension/configure'); const ExtensionDeviceGroupMembership = require('./extension/legacy/deviceGroupMembership'); const ExtensionBridgeLegacy = require('./extension/legacy/bridgeLegacy'); const ExtensionGroups = require('./extension/groups'); @@ -39,7 +39,7 @@ class Controller { new ExtensionEntityPublish(...args), new ExtensionDeviceReceive(...args), new ExtensionDeviceGroupMembership(...args), - new ExtensionDeviceConfigure(...args), + new ExtensionConfigure(...args), new ExtensionNetworkMap(...args), new ExtensionGroups(...args), new ExtensionDeviceBind(...args), diff --git a/lib/extension/deviceConfigure.js b/lib/extension/configure.js similarity index 73% rename from lib/extension/deviceConfigure.js rename to lib/extension/configure.js index 68d956d80..395441814 100644 --- a/lib/extension/deviceConfigure.js +++ b/lib/extension/configure.js @@ -2,13 +2,18 @@ const settings = require('../util/settings'); const logger = require('../util/logger'); const Extension = require('./extension'); -class DeviceConfigure extends Extension { +/** + * This extension calls the zigbee-herdsman-converters definition configure() method + */ +class Configure extends Extension { constructor(zigbee, mqtt, state, publishEntityState, eventBus) { super(zigbee, mqtt, state, publishEntityState, eventBus); this.configuring = new Set(); this.attempts = {}; - this.topic = `${settings.get().mqtt.base_topic}/bridge/configure`; + + this.legacyApi = settings.get().advanced.legacy_api; + this.legacyTopic = `${settings.get().mqtt.base_topic}/bridge/configure`; } shouldConfigure(resolvedEntity) { @@ -30,26 +35,29 @@ class DeviceConfigure extends Extension { } onMQTTConnected() { - this.mqtt.subscribe(this.topic); + this.mqtt.subscribe(this.legacyTopic); } async onMQTTMessage(topic, message) { - if (topic !== this.topic) { - return; - } + /* istanbul ignore else */ + if (this.legacyApi) { + if (topic !== this.legacyTopic) { + return; + } - const resolvedEntity = this.zigbee.resolveEntity(message); - if (!resolvedEntity || resolvedEntity.type !== 'device') { - logger.error(`Device '${message}' does not exist`); - return; - } + const resolvedEntity = this.zigbee.resolveEntity(message); + if (!resolvedEntity || resolvedEntity.type !== 'device') { + logger.error(`Device '${message}' does not exist`); + return; + } - if (!resolvedEntity.definition || !resolvedEntity.definition.configure) { - logger.warn(`Skipping configure of '${resolvedEntity.name}', device does not require this.`); - return; - } + if (!resolvedEntity.definition || !resolvedEntity.definition.configure) { + logger.warn(`Skipping configure of '${resolvedEntity.name}', device does not require this.`); + return; + } - this.configure(resolvedEntity, true); + this.configure(resolvedEntity, true); + } } async onZigbeeStarted() { @@ -106,4 +114,4 @@ class DeviceConfigure extends Extension { } } -module.exports = DeviceConfigure; +module.exports = Configure; diff --git a/lib/extension/networkMap.js b/lib/extension/networkMap.js index 5095fc825..dd36b880a 100644 --- a/lib/extension/networkMap.js +++ b/lib/extension/networkMap.js @@ -4,6 +4,9 @@ const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters'); const logger = require('../util/logger'); const Extension = require('./extension'); +/** + * This extension creates a network map + */ class NetworkMap extends Extension { constructor(zigbee, mqtt, state, publishEntityState, eventBus) { super(zigbee, mqtt, state, publishEntityState, eventBus); diff --git a/test/deviceConfigure.test.js b/test/configure.test.js similarity index 99% rename from test/deviceConfigure.test.js rename to test/configure.test.js index e9cbe2189..49f5f11c1 100644 --- a/test/deviceConfigure.test.js +++ b/test/configure.test.js @@ -9,7 +9,7 @@ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const mocksClear = [MQTT.publish, logger.warn, logger.debug]; -describe('Device configure', () => { +describe('Configure', () => { let controller; expectRemoteConfigured = () => { @@ -153,7 +153,7 @@ describe('Device configure', () => { }); it('Should configure max 3 times when fails', async () => { - controller.extensions.find((e) => e.constructor.name === 'DeviceConfigure').attempts = {}; + controller.extensions.find((e) => e.constructor.name === 'Configure').attempts = {}; const device = zigbeeHerdsman.devices.remote; delete device.meta.configured; const endpoint = device.getEndpoint(1);