diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index b967db5b0..0500ce716 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -368,8 +368,10 @@ #define DOMOTICZ_OUT_TOPIC "domoticz/out" // Domoticz Output Topic // -- MQTT - Home Assistant Discovery ------------- -#define USE_HOME_ASSISTANT // Enable Home Assistant Discovery Support (+4.1k code, +6 bytes mem) - #define HOME_ASSISTANT_DISCOVERY_PREFIX "homeassistant" // Home Assistant discovery prefix +#define USE_HOME_ASSISTANT // Enable Home Assistant Discovery Support (+4.1k code, +6 bytes mem) + #define HOME_ASSISTANT_DISCOVERY_PREFIX "homeassistant" // Home Assistant discovery prefix + #define HOME_ASSISTANT_LWT_TOPIC "homeassistant/status" // homeassistant Birth and Last Will Topic (default = homeassistant/status) + #define HOME_ASSISTANT_LWT_SUBSCRIBE true // Subscribe to Home Assistant Birth and Last Will Topic (default = true) // -- MQTT - TLS - AWS IoT ------------------------ // Using TLS starting with version v6.5.0.16 compilation will only work using Core 2.4.2 and 2.5.2. No longer supported: 2.3.0 diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino index e4d523b20..3a6963fd9 100644 --- a/tasmota/xdrv_12_home_assistant.ino +++ b/tasmota/xdrv_12_home_assistant.ino @@ -823,7 +823,7 @@ void HAssAnnounceDeviceInfoAndStatusSensor(void) MqttPublish(stopic, true); if (!Settings.flag.hass_discovery) { masterlog_level = 0; - AddLog_P2(LOG_LEVEL_INFO, PSTR("LOG: Home Assistant Discovery disabled")); + AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_LOG "Home Assistant Discovery disabled")); } } @@ -925,6 +925,18 @@ void HAssAnyKey(void) MqttPublish(stopic); } +bool HAssMqttLWT(void) +{ + if (strncasecmp_P(XdrvMailbox.topic, PSTR(HOME_ASSISTANT_LWT_TOPIC), strlen(HOME_ASSISTANT_LWT_TOPIC)) != 0) { + return false; + } + + if ((strncasecmp_P(XdrvMailbox.data, PSTR("online"), strlen("online")) == 0) && (XdrvMailbox.data_len == 6)) { + MqttPublishTeleState(); + return true; + } +} + /*********************************************************************************************\ * Interface \*********************************************************************************************/ @@ -932,6 +944,7 @@ void HAssAnyKey(void) bool Xdrv12(uint8_t function) { bool result = false; + bool hasslwt = HOME_ASSISTANT_LWT_SUBSCRIBE; if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT switch (function) @@ -963,10 +976,22 @@ bool Xdrv12(uint8_t function) case FUNC_MQTT_INIT: hass_mode = 0; // Discovery only if Settings.flag.hass_discovery is set hass_init_step = 2; // Delayed discovery + break; // if (!Settings.flag.hass_discovery) { // AddLog_P2(LOG_LEVEL_INFO, PSTR("MQT: homeassistant/49A3BC/Discovery = {\"dev\":{\"ids\":[\"49A3BC\"]},\"cmd_t\":\"cmnd/test1/\",\"Discovery\":0}")); // } + case FUNC_MQTT_SUBSCRIBE: + if (hasslwt) { + char htopic[TOPSZ]; + snprintf_P(htopic, sizeof(htopic), PSTR(HOME_ASSISTANT_LWT_TOPIC)); + MqttSubscribe(htopic); + AddLog_P2(LOG_LEVEL_DEBUG, PSTR("MQT: subscribed to " HOME_ASSISTANT_LWT_TOPIC)); + } break; + case FUNC_MQTT_DATA: + if (hasslwt) { result = HAssMqttLWT(); } + break; + } } return result;