diff --git a/lib/extension/bridgeConfig.js b/lib/extension/bridgeConfig.js index e2382a479..329d54fb0 100644 --- a/lib/extension/bridgeConfig.js +++ b/lib/extension/bridgeConfig.js @@ -30,7 +30,7 @@ class BridgeConfig { } permitJoin(topic, message) { - this.zigbee.permitJoin(message.toString().toLowerCase() === 'true'); + this.zigbee.permitJoin(message.toString().toLowerCase() === 'true', () => this.publish()); } logLevel(topic, message) { @@ -42,6 +42,8 @@ class BridgeConfig { } else { logger.error(`Could not set log level to '${level}'. Allowed level: '${allowedLogLevels.join(',')}'`); } + + this.publish(); } devices(topic, message) { @@ -136,6 +138,16 @@ class BridgeConfig { return true; } + + publish() { + const topic = `${settings.get().mqtt.base_topic}/bridge/config`; + const payload = { + log_level: logger.transports.console.level, + permit_join: this.zigbee.getPermitJoin(), + }; + + this.mqtt.publish(topic, JSON.stringify(payload), {retain: true, qos: 0}, null); + } } module.exports = BridgeConfig; diff --git a/lib/zigbee.js b/lib/zigbee.js index da5b6224e..3918a25cc 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -95,7 +95,7 @@ class Zigbee { logger.error(message); } - permitJoin(permit) { + permitJoin(permit, callback) { if (permit) { logger.info('Zigbee: allowing new devices to join.'); } else { @@ -106,9 +106,17 @@ class Zigbee { if (error) { logger.info(error); } + + if (callback) { + callback(); + } }); } + getPermitJoin() { + return this.shepherd.controller._permitJoinTime === 255; + } + getAllClients() { return this.getDevices().filter((device) => device.type !== 'Coordinator'); }