From 7c53e9bb150fa6db53ab7c71b0e8357f50ae599a Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Thu, 7 Jun 2018 20:41:11 +0300 Subject: [PATCH] Added settings removal and bug fixes --- lib/controller.js | 1 + lib/util/settings.js | 8 ++++++++ lib/zigbee.js | 20 ++++++++++++-------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/controller.js b/lib/controller.js index a2a0b0f05..d04012e47 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -318,6 +318,7 @@ class Controller { logger.error(`Cannot handle '${topic}' because deviceID of '${message.toString()}' cannot be found`); return; } + settings.removeDevice(deviceID); this.zigbee.removedevice(deviceID); } else { logger.error(`Cannot handle MQTT config option '${option}' with Payload is null - we need the friendly_name to proceed`); diff --git a/lib/util/settings.js b/lib/util/settings.js index d642381a5..9ce814094 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -27,9 +27,17 @@ function addDevice(id) { writeRead(); } +function removeDevice(id) { + if (settings.devices) { + delete settings.devices[id]; + writeRead(); + } +} + module.exports = { get: () => settings, write: () => write(), getDevice: (id) => settings.devices ? settings.devices[id] : false, addDevice: (id) => addDevice(id), + removeDevice: (id) => removeDevice(id), }; diff --git a/lib/zigbee.js b/lib/zigbee.js index 232d8496f..2595ea49a 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -109,7 +109,7 @@ class Zigbee { } removedevice(deviceID) { - this.shepherd.remove('deviceID', (err) => { + this.shepherd.remove(deviceID, (err) => { if (err) { logger.warn(`Failed to remove ${deviceID}`); this.forceRemove(deviceID); @@ -122,13 +122,17 @@ class Zigbee { forceRemove(deviceID) { const device = this.shepherd._findDevByAddr(deviceID); // force - return this.shepherd._unregisterDev(device, (err) => { - if (err) { - logger.warn(`Failed to force remove ${deviceID}`); - } else { - logger.info(`Successfully removed by force ${deviceID}`); - } - }); + if (device) { + return this.shepherd._unregisterDev(device, (err) => { + if (err) { + logger.warn(`Failed to force remove ${deviceID}`); + } else { + logger.info(`Successfully removed by force ${deviceID}`); + } + }); + } else { + logger.warn(`Could not find ${deviceID} for force removal`); + } } ping(deviceID) {