Browse Source

ha: more cancelation reasons

master
Maxim Prokhorov 5 years ago
parent
commit
e8acf33a69
1 changed files with 20 additions and 2 deletions
  1. +20
    -2
      code/espurna/homeassistant.ino

+ 20
- 2
code/espurna/homeassistant.ino View File

@ -97,8 +97,11 @@ struct ha_config_t {
struct ha_discovery_t {
constexpr static const unsigned long SEND_TIMEOUT = 1000;
constexpr static const unsigned char SEND_RETRY = 5;
ha_discovery_t() {
ha_discovery_t() :
_retry(SEND_RETRY)
{
#if SENSOR_SUPPORT
_messages.reserve(magnitudeCount() + relayCount());
#else
@ -106,6 +109,10 @@ struct ha_discovery_t {
#endif
}
~ha_discovery_t() {
DEBUG_MSG_P(PSTR("[HA] Discovery %s\n"), empty() ? "OK" : "FAILED");
}
// TODO: is this expected behaviour?
void add(String& topic, String& message) {
_messages.emplace_back(std::move(topic), std::move(message));
@ -125,6 +132,11 @@ struct ha_discovery_t {
return !_messages.size();
}
bool retry() {
if (!_retry) return false;
return --_retry;
}
void prepareSwitches(ha_config_t& config);
#if SENSOR_SUPPORT
void prepareMagnitudes(ha_config_t& config);
@ -132,6 +144,7 @@ struct ha_discovery_t {
Ticker timer;
std::vector<mqtt_msg_t> _messages;
unsigned char _retry;
};
@ -141,7 +154,12 @@ void _haSendDiscovery() {
if (!_ha_discovery) return;
if (_ha_discovery->empty()) {
const bool connected = mqttConnected();
const bool retry = _ha_discovery->retry();
const bool empty = _ha_discovery->empty();
if (!connected || !retry || empty) {
_ha_discovery = nullptr;
return;
}


Loading…
Cancel
Save