From 6e3312c772f6d5aba3e86f6f1ddf511ec1342861 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 12 Jan 2019 18:56:10 +0100 Subject: [PATCH] added MQTT will topic & payload --- lib/myESP/MyESP.cpp | 21 +++++++++++++++------ lib/myESP/MyESP.h | 6 ++++-- src/ems-esp.ino | 3 ++- src/my_config.h | 3 ++- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/myESP/MyESP.cpp b/lib/myESP/MyESP.cpp index 31169af26..aa02bf0b7 100644 --- a/lib/myESP/MyESP.cpp +++ b/lib/myESP/MyESP.cpp @@ -30,7 +30,8 @@ MyESP::MyESP() { _mqtt_username = NULL; _mqtt_retain = false; _mqtt_keepalive = 300; - _mqtt_will = NULL; + _mqtt_will_topic = NULL; + _mqtt_will_payload = NULL; _mqtt_base = NULL; _mqtt_qos = 0; _mqtt_reconnect_delay = MQTT_RECONNECT_DELAY_MIN; @@ -646,7 +647,7 @@ void MyESP::_mqttConnect() { mqttClient.setClientId(_app_hostname); mqttClient.setKeepAlive(_mqtt_keepalive); mqttClient.setCleanSession(false); - mqttClient.setWill(_mqtt_will, _mqtt_qos, _mqtt_retain, "0"); // payload is 0 + mqttClient.setWill(_mqtt_will_topic, _mqtt_qos, _mqtt_retain, _mqtt_will_payload); if (_mqtt_username && _mqtt_password) { myDebug_P(PSTR("[MQTT] Connecting to MQTT using user %s"), _mqtt_username); @@ -686,7 +687,8 @@ void MyESP::setMQTT(char * mqtt_host, unsigned long mqtt_keepalive, unsigned char mqtt_qos, bool mqtt_retain, - char * mqtt_will, + char * mqtt_will_topic, + char * mqtt_will_payload, mqtt_callback_f callback) { // can be empty if (!mqtt_host || *mqtt_host == 0x00) { @@ -724,10 +726,17 @@ void MyESP::setMQTT(char * mqtt_host, _mqtt_retain = mqtt_retain; // last will - if (_mqtt_will) { - free(_mqtt_will); + if (!mqtt_will_topic || *mqtt_will_topic == 0x00) { + _mqtt_will_topic = NULL; + } else { + _mqtt_will_topic = strdup(mqtt_will_topic); + } + + if (!mqtt_will_payload || *mqtt_will_payload == 0x00) { + _mqtt_will_payload = NULL; + } else { + _mqtt_will_payload = strdup(mqtt_will_payload); } - _mqtt_will = strdup(mqtt_will); } // print contents of file diff --git a/lib/myESP/MyESP.h b/lib/myESP/MyESP.h index 0c6304126..a1a1cd017 100644 --- a/lib/myESP/MyESP.h +++ b/lib/myESP/MyESP.h @@ -98,7 +98,8 @@ class MyESP { unsigned long mqtt_keepalive, unsigned char mqtt_qos, bool mqtt_retain, - char * mqtt_will, + char * mqtt_will_topic, + char * mqtt_will_payload, mqtt_callback_f callback); // debug & telnet @@ -135,7 +136,8 @@ class MyESP { unsigned long _mqtt_keepalive; unsigned char _mqtt_qos; bool _mqtt_retain; - char * _mqtt_will; + char * _mqtt_will_topic; + char * _mqtt_will_payload; // wifi DNSServer dnsServer; // For Access Point (AP) support diff --git a/src/ems-esp.ino b/src/ems-esp.ino index fb559bfac..6e4697731 100644 --- a/src/ems-esp.ino +++ b/src/ems-esp.ino @@ -994,7 +994,8 @@ void setup() { // set up myESP for Wifi, MQTT, MDNS and Telnet myESP.setTelnet(project_cmds, ArraySize(project_cmds), TelnetCommandCallback, TelnetCallback); // set up Telnet commands myESP.setWIFI(WIFI_SSID, WIFI_PASSWORD, WIFICallback); - myESP.setMQTT(MQTT_HOST, MQTT_USER, MQTT_PASS, MQTT_BASE, MQTT_KEEPALIVE, MQTT_QOS, MQTT_RETAIN, MQTT_WILL, MQTTCallback); + myESP.setMQTT( + MQTT_HOST, MQTT_USER, MQTT_PASS, MQTT_BASE, MQTT_KEEPALIVE, MQTT_QOS, MQTT_RETAIN, MQTT_WILL_TOPIC, MQTT_WILL_PAYLOAD, MQTTCallback); myESP.setSettings(FSCallback, SettingsCallback); myESP.begin(APP_HOSTNAME, APP_NAME, APP_VERSION); // start it all up diff --git a/src/my_config.h b/src/my_config.h index 8861d253a..88b54c116 100644 --- a/src/my_config.h +++ b/src/my_config.h @@ -23,7 +23,8 @@ #define MQTT_BASE "home" #define MQTT_TOPIC_START "start" #define MQTT_TOPIC_START_PAYLOAD "start" -#define MQTT_WILL "status" // for last will & testament +#define MQTT_WILL_TOPIC "status" // for last will & testament topic name +#define MQTT_WILL_PAYLOAD "0" // for last will & testament payload #define MQTT_RETAIN true #define MQTT_KEEPALIVE 300 #define MQTT_QOS 1