From 6d684b7c1110481cb56de0005f7554fce4ac16f7 Mon Sep 17 00:00:00 2001 From: tb-killa Date: Sat, 21 Jul 2018 18:15:56 +0200 Subject: [PATCH 1/3] ADD RenameFriendlyName Function --- lib/util/settings.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/util/settings.js b/lib/util/settings.js index c29e34dc..42efee99 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -44,6 +44,20 @@ function getIDByFriendlyName(friendlyName) { ); } +function RenameFriendlyName(original,replace) { + originalName = getIDByFriendlyName(original) + if(!originalName) { + return false; + } + removeDevice(originalName) + if (!settings.devices) { + settings.devices = {}; + } + settings.devices[originalName] = {friendly_name: replace, retain: false}; + writeRead(); + return true; +} + module.exports = { get: () => settings, write: () => write(), @@ -51,4 +65,5 @@ module.exports = { addDevice: (id) => addDevice(id), removeDevice: (id) => removeDevice(id), getIDByFriendlyName: (friendlyName) => getIDByFriendlyName(friendlyName), + RenameFriendlyName: (original,replace) => RenameFriendlyName(original,replace), }; From aab18de88dc04cd0e516cdc66811770b86e602d8 Mon Sep 17 00:00:00 2001 From: tb-killa Date: Sat, 21 Jul 2018 18:19:11 +0200 Subject: [PATCH 2/3] ADD Rename Function via MQTT Command --- lib/controller.js | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/lib/controller.js b/lib/controller.js index 0a45692a..8351e476 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -400,7 +400,42 @@ class Controller { } else { cleanup(); } - } else { + } else if (option === 'rename') { + // Convert the MQTT message to a Zigbee message. + let json = null; + try { + json = JSON.parse(message); + } catch (e) { + // Cannot be parsed to JSON, assume state message. + return; + } + if (!json.hasOwnProperty('oldname')) { + logger.error('Failed to renamed - oldname property is missing'); + return; + } + if (!json.hasOwnProperty('newname')) { + logger.error('Failed to renamed - newname property is missing'); + return; + } + if(json.oldname.toString() == null || json.oldname.toString() == '' || json.oldname.toString().length <= 0) { + logger.error('Failed to renamed - oldname value is missing or Null'); + return; + } + if(json.newname.toString() == null || json.newname.toString() == '' || json.newname.toString().length <= 0) { + logger.error('Failed to renamed - newname value is missing or Null'); + return; + } + if(json.newname.toString() === json.oldname.toString()) { + logger.error(`Failed to renamed - ${json.oldname} and ${json.newname} seem to be eqal.`); + return; + } + const renamed = settings.RenameFriendlyName(json.oldname,json.newname); + if(renamed) { + logger.info(`Successfully renamed - ${json.oldname} to ${json.newname} `); + }else { + logger.error(`Failed to renamed - ${json.oldname} to ${json.newname}`); + } + } else { logger.warn(`Cannot handle MQTT config option '${option}' with message '${message}'`); } } From 8ea62f535ed5f185c35551e8355cad1dc1e1a986 Mon Sep 17 00:00:00 2001 From: Koenkk Date: Tue, 24 Jul 2018 18:25:16 +0200 Subject: [PATCH 3/3] Update change friendly name of device. --- lib/controller.js | 71 ++++++++++++++++++++++---------------------- lib/util/settings.js | 20 ++++++------- 2 files changed, 44 insertions(+), 47 deletions(-) diff --git a/lib/controller.js b/lib/controller.js index 8351e476..c281d036 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -400,42 +400,41 @@ class Controller { } else { cleanup(); } - } else if (option === 'rename') { - // Convert the MQTT message to a Zigbee message. - let json = null; - try { - json = JSON.parse(message); - } catch (e) { - // Cannot be parsed to JSON, assume state message. - return; - } - if (!json.hasOwnProperty('oldname')) { - logger.error('Failed to renamed - oldname property is missing'); - return; - } - if (!json.hasOwnProperty('newname')) { - logger.error('Failed to renamed - newname property is missing'); - return; - } - if(json.oldname.toString() == null || json.oldname.toString() == '' || json.oldname.toString().length <= 0) { - logger.error('Failed to renamed - oldname value is missing or Null'); - return; - } - if(json.newname.toString() == null || json.newname.toString() == '' || json.newname.toString().length <= 0) { - logger.error('Failed to renamed - newname value is missing or Null'); - return; - } - if(json.newname.toString() === json.oldname.toString()) { - logger.error(`Failed to renamed - ${json.oldname} and ${json.newname} seem to be eqal.`); - return; - } - const renamed = settings.RenameFriendlyName(json.oldname,json.newname); - if(renamed) { - logger.info(`Successfully renamed - ${json.oldname} to ${json.newname} `); - }else { - logger.error(`Failed to renamed - ${json.oldname} to ${json.newname}`); - } - } else { + } else if (option === 'rename') { + const invalid = `Invalid rename message format expected {old: 'friendly_name', new: 'new_name} ` + + `got ${message.toString()}`; + + let json = null; + try { + json = JSON.parse(message.toString()); + } catch (e) { + logger.error(invalid); + return; + } + + // Validate message + if (!json.new || !json.old) { + logger.error(invalid); + return; + } + + if (settings.changeFriendlyName(json.old, json.new)) { + logger.info(`Successfully renamed - ${json.old} to ${json.new} `); + } else { + logger.error(`Failed to renamed - ${json.old} to ${json.new}`); + return; + } + + // Homeassistant rediscover + if (settings.get().homeassistant) { + const ID = settings.getIDByFriendlyName(json.new); + const device = this.zigbee.getDevice(ID); + const mappedModel = zigbeeShepherdConverters.findByZigbeeModel(device.modelId); + if (mappedModel) { + homeassistant.discover(device.ieeeAddr, mappedModel.model, this.mqtt, true); + } + } + } else { logger.warn(`Cannot handle MQTT config option '${option}' with message '${message}'`); } } diff --git a/lib/util/settings.js b/lib/util/settings.js index 42efee99..a63fcb87 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -44,18 +44,16 @@ function getIDByFriendlyName(friendlyName) { ); } -function RenameFriendlyName(original,replace) { - originalName = getIDByFriendlyName(original) - if(!originalName) { - return false; - } - removeDevice(originalName) - if (!settings.devices) { - settings.devices = {}; +function changeFriendlyName(old, new_) { + const ID = getIDByFriendlyName(old); + + if (!ID) { + return false; } - settings.devices[originalName] = {friendly_name: replace, retain: false}; + + settings.devices[ID].friendly_name = new_; writeRead(); - return true; + return true; } module.exports = { @@ -65,5 +63,5 @@ module.exports = { addDevice: (id) => addDevice(id), removeDevice: (id) => removeDevice(id), getIDByFriendlyName: (friendlyName) => getIDByFriendlyName(friendlyName), - RenameFriendlyName: (original,replace) => RenameFriendlyName(original,replace), + changeFriendlyName: (old, new_) => changeFriendlyName(old, new_), };