From 283ceb794f406ab49ee97ba0d6de28d8d528d1c3 Mon Sep 17 00:00:00 2001 From: Brian Rolfe Date: Mon, 7 Jan 2019 17:50:14 -0500 Subject: [PATCH] Add MQTT Last Will and Testament support along with HomeAssistant avilability for alarm_control_panel --- .../Arduino/HomeAssistant-MQTT/HomeAssistant-MQTT.ino | 8 +++++++- .../esp8266/HomeAssistant-MQTT/HomeAssistant-MQTT.ino | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/examples/Arduino/HomeAssistant-MQTT/HomeAssistant-MQTT.ino b/examples/Arduino/HomeAssistant-MQTT/HomeAssistant-MQTT.ino index 77b4f49..0a8fc64 100644 --- a/examples/Arduino/HomeAssistant-MQTT/HomeAssistant-MQTT.ino +++ b/examples/Arduino/HomeAssistant-MQTT/HomeAssistant-MQTT.ino @@ -45,6 +45,7 @@ - platform: mqtt name: "Security System Partition 1" state_topic: "dsc/Get/Partition1" + availability_topic: "dsc/Status" command_topic: "dsc/Set" payload_disarm: "1D" payload_arm_home: "1S" @@ -52,6 +53,7 @@ - platform: mqtt name: "Security System Partition 2" state_topic: "dsc/Get/Partition2" + availability_topic: "dsc/Status" command_topic: "dsc/Set" payload_disarm: "2D" payload_arm_home: "2S" @@ -144,6 +146,9 @@ const char* mqttPartitionTopic = "dsc/Get/Partition"; // Sends armed and alarm const char* mqttZoneTopic = "dsc/Get/Zone"; // Sends zone status per zone: dsc/Get/Zone1 ... dsc/Get/Zone64 const char* mqttFireTopic = "dsc/Get/Fire"; // Sends fire status per partition: dsc/Get/Fire1 ... dsc/Get/Fire8 const char* mqttTroubleTopic = "dsc/Get/Trouble"; // Sends trouble status +const char* mqttStatusTopic = "dsc/Status"; +const char* mqttBirthMessage = "online"; +const char* mqttLwtMessage = "offline"; const char* mqttSubscribeTopic = "dsc/Set"; // Receives messages to write to the panel unsigned long mqttPreviousTime; @@ -366,9 +371,10 @@ void mqttHandle() { bool mqttConnect() { - if (mqtt.connect(mqttClientName, mqttUsername, mqttPassword)) { + if (mqtt.connect(mqttClientName, mqttUsername, mqttPassword, mqttStatusTopic, 0, true, mqttLwtMessage)) { Serial.print(F("MQTT connected: ")); Serial.println(mqttServer); + mqtt.publish(mqttStatusTopic, mqttBirthMessage, true); mqtt.subscribe(mqttSubscribeTopic); } else { diff --git a/examples/esp8266/HomeAssistant-MQTT/HomeAssistant-MQTT.ino b/examples/esp8266/HomeAssistant-MQTT/HomeAssistant-MQTT.ino index 36c202f..030cc00 100644 --- a/examples/esp8266/HomeAssistant-MQTT/HomeAssistant-MQTT.ino +++ b/examples/esp8266/HomeAssistant-MQTT/HomeAssistant-MQTT.ino @@ -45,6 +45,7 @@ - platform: mqtt name: "Security System Partition 1" state_topic: "dsc/Get/Partition1" + availability_topic: "dsc/Status" command_topic: "dsc/Set" payload_disarm: "1D" payload_arm_home: "1S" @@ -52,6 +53,7 @@ - platform: mqtt name: "Security System Partition 2" state_topic: "dsc/Get/Partition2" + availability_topic: "dsc/Status" command_topic: "dsc/Set" payload_disarm: "2D" payload_arm_home: "2S" @@ -145,6 +147,9 @@ const char* mqttPartitionTopic = "dsc/Get/Partition"; // Sends armed and alarm const char* mqttZoneTopic = "dsc/Get/Zone"; // Sends zone status per zone: dsc/Get/Zone1 ... dsc/Get/Zone64 const char* mqttFireTopic = "dsc/Get/Fire"; // Sends fire status per partition: dsc/Get/Fire1 ... dsc/Get/Fire8 const char* mqttTroubleTopic = "dsc/Get/Trouble"; // Sends trouble status +const char* mqttStatusTopic = "dsc/Status"; +const char* mqttBirthMessage = "online"; +const char* mqttLwtMessage = "offline"; const char* mqttSubscribeTopic = "dsc/Set"; // Receives messages to write to the panel unsigned long mqttPreviousTime; @@ -363,9 +368,10 @@ void mqttHandle() { bool mqttConnect() { - if (mqtt.connect(mqttClientName, mqttUsername, mqttPassword)) { + if (mqtt.connect(mqttClientName, mqttUsername, mqttPassword, mqttStatusTopic, 0, true, mqttLwtMessage)) { Serial.print(F("MQTT connected: ")); Serial.println(mqttServer); + mqtt.publish(mqttStatusTopic, mqttBirthMessage, true); mqtt.subscribe(mqttSubscribeTopic); } else {