From 3196c0a974353f9dd05a03cdc641cd99c9968921 Mon Sep 17 00:00:00 2001 From: Koenkk Date: Wed, 13 Jun 2018 19:51:40 +0200 Subject: [PATCH] Send all cached status on hass/status:online. #105 --- lib/controller.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/controller.js b/lib/controller.js index c1e676a04..84899103f 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -69,6 +69,10 @@ class Controller { `${settings.get().mqtt.base_topic}/bridge/config/+`, ]; + if (settings.get().homeassistant) { + subscriptions.push('hass/status'); + } + this.mqtt.connect(this.handleMQTTMessage, subscriptions, () => this.handleMQTTConnected()); } }); @@ -87,6 +91,10 @@ class Controller { } // Resend all cached states. + this.sendAllCachedStates(); + } + + sendAllCachedStates() { this.zigbee.getAllClients().forEach((device) => { if (this.stateCache.hasOwnProperty(device.ieeeAddr)) { this.mqttPublishDeviceState(device.ieeeAddr, this.stateCache[device.ieeeAddr], false); @@ -312,6 +320,13 @@ class Controller { this.handleMQTTMessageConfig(topic, message); } else if (topic.match(mqttDeviceRegex) || topic.match(mqttDevicePrefixRegex)) { this.handleMQTTMessageDevice(topic, message, topic.match(mqttDevicePrefixRegex)); + } else if (topic === 'hass/status') { + if (message.toString().toLowerCase() === 'online') { + const timer = setTimeout(() => { + this.sendAllCachedStates(); + clearTimeout(timer); + }, 3000); + } } else { logger.warn(`Cannot handle MQTT message with topic '${topic}' and message '${message}'`); }