Browse Source

Send Home Assistant blank message only once

i18n
Xose Pérez 6 years ago
parent
commit
05611a9c47
1 changed files with 23 additions and 9 deletions
  1. +23
    -9
      code/espurna/homeassitant.ino

+ 23
- 9
code/espurna/homeassitant.ino View File

@ -11,6 +11,7 @@ Copyright (C) 2017-2018 by Xose Pérez <xose dot perez at gmail dot com>
#include <ArduinoJson.h> #include <ArduinoJson.h>
bool _haEnabled = false; bool _haEnabled = false;
bool _haSendFlag = false;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -19,21 +20,19 @@ void _haWebSocketOnSend(JsonObject& root) {
root["haPrefix"] = getSetting("haPrefix", HOMEASSISTANT_PREFIX); root["haPrefix"] = getSetting("haPrefix", HOMEASSISTANT_PREFIX);
} }
void _haConfigure() {
bool enabled = getSetting("haEnabled", HOMEASSISTANT_ENABLED).toInt() == 1;
if (enabled != _haEnabled) haSend(enabled);
_haEnabled = enabled;
}
void _haSend() {
// -----------------------------------------------------------------------------
// Pending message to send?
if (!_haSendFlag) return;
void haSend(bool add) {
// Are we connected?
if (!mqttConnected()) return;
DEBUG_MSG_P(PSTR("[HA] Sending autodiscovery MQTT message\n")); DEBUG_MSG_P(PSTR("[HA] Sending autodiscovery MQTT message\n"));
String output; String output;
if (add) {
if (_haEnabled) {
DynamicJsonBuffer jsonBuffer; DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject(); JsonObject& root = jsonBuffer.createObject();
@ -84,18 +83,33 @@ void haSend(bool add) {
mqttSendRaw(topic.c_str(), output.c_str()); mqttSendRaw(topic.c_str(), output.c_str());
mqttSend(MQTT_TOPIC_STATUS, MQTT_STATUS_ONLINE, true); mqttSend(MQTT_TOPIC_STATUS, MQTT_STATUS_ONLINE, true);
_haSendFlag = false;
}
void _haConfigure() {
bool enabled = getSetting("haEnabled", HOMEASSISTANT_ENABLED).toInt() == 1;
_haSendFlag = (enabled != _haEnabled);
_haEnabled = enabled;
_haSend();
} }
// -----------------------------------------------------------------------------
void haSetup() { void haSetup() {
_haConfigure(); _haConfigure();
#if WEB_SUPPORT #if WEB_SUPPORT
wsOnSendRegister(_haWebSocketOnSend); wsOnSendRegister(_haWebSocketOnSend);
wsOnAfterParseRegister(_haConfigure); wsOnAfterParseRegister(_haConfigure);
#endif #endif
// On MQTT connect check if we have something to send
mqttRegister([](unsigned int type, const char * topic, const char * payload) { mqttRegister([](unsigned int type, const char * topic, const char * payload) {
if (type == MQTT_CONNECT_EVENT) haSend(_haEnabled);
if (type == MQTT_CONNECT_EVENT) _haSend();
}); });
} }
#endif // HOMEASSISTANT_SUPPORT #endif // HOMEASSISTANT_SUPPORT

Loading…
Cancel
Save