diff --git a/lib/mqtt.js b/lib/mqtt.js index 9f7450a8e..d6e5d23f7 100644 --- a/lib/mqtt.js +++ b/lib/mqtt.js @@ -12,7 +12,14 @@ class MQTT { const mqttSettings = settings.get().mqtt; logger.info(`Connecting to MQTT server at ${mqttSettings.server}`); - const options = {}; + const options = { + will: { + topic: this.prefixTopic('bridge/state'), + payload: 'offline', + retain: true, + }, + }; + if (mqttSettings.user && mqttSettings.password) { options.username = mqttSettings.user; options.password = mqttSettings.password; @@ -68,8 +75,7 @@ class MQTT { } publish(topic, payload, options, callback, baseTopic) { - baseTopic = baseTopic ? baseTopic : settings.get().mqtt.base_topic; - topic = `${baseTopic}/${topic}`; + topic = this.prefixTopic(topic, baseTopic); if (!this.client || this.client.reconnecting) { logger.error(`Not connected to MQTT server!`); @@ -81,6 +87,11 @@ class MQTT { this.client.publish(topic, payload, options, callback); } + prefixTopic(topic, baseTopic) { + baseTopic = baseTopic ? baseTopic : settings.get().mqtt.base_topic; + return `${baseTopic}/${topic}`; + } + log(type, message) { const payload = {type: type, message: message}; this.publish('bridge/log', JSON.stringify(payload), {retain: false});