Merge pull request #9096 from effelle/development

HAss Discovery LWT
This commit is contained in:
Theo Arends 2020-08-16 08:09:15 +02:00 committed by GitHub
commit 26e8a985e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 4 deletions

View File

@ -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" // home Assistant 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

View File

@ -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,26 @@ 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 (Settings.flag.hass_discovery && (strncasecmp_P(XdrvMailbox.data, PSTR("online"), strlen("online")) == 0) && (XdrvMailbox.data_len == 6)) {
MqttPublishTeleState();
return true;
}
}
void HassLwtSubscribe(bool hasslwt)
{
char htopic[TOPSZ];
snprintf_P(htopic, sizeof(htopic), PSTR(HOME_ASSISTANT_LWT_TOPIC));
if (hasslwt) {
MqttSubscribe(htopic);
} else { MqttUnsubscribe(htopic); }
}
/*********************************************************************************************\
* Interface
\*********************************************************************************************/
@ -932,6 +952,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)
@ -951,7 +972,6 @@ bool Xdrv12(uint8_t function)
if (hass_tele_period >= Settings.tele_period)
{
hass_tele_period = 0;
mqtt_data[0] = '\0';
HAssPublishStatus();
}
@ -963,9 +983,15 @@ 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:
HassLwtSubscribe(hasslwt);
break;
case FUNC_MQTT_DATA:
result = HAssMqttLWT();
break;
}
}