diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index b56b89a22..85a706371 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -188,7 +188,7 @@ struct { uint8_t module_type; // Current copy of Settings.module or user template type uint8_t last_source; // Last command source uint8_t shutters_present; // Number of actual define shutters -// uint8_t prepped_loglevel; // Delayed log level message + uint8_t discovery_counter; // Delayed discovery counter #ifndef SUPPORT_IF_STATEMENT uint8_t backlog_index; // Command backlog index diff --git a/tasmota/xdrv_12_discovery.ino b/tasmota/xdrv_12_discovery.ino index 9a592159a..0e04303f1 100644 --- a/tasmota/xdrv_12_discovery.ino +++ b/tasmota/xdrv_12_discovery.ino @@ -1,5 +1,5 @@ /* - xdrv_12_discovery.ino - Discovery support for Tasmota + xdrv_12_discovery.ino - MQTT Discovery support for Tasmota Copyright (C) 2021 Erik Montnemery, Federico Leoni and Theo Arends @@ -22,7 +22,7 @@ /*********************************************************************************************\ * Tasmota discovery * - * A version of xdrv_12_home_assistant supporting the new Tasmota Discovery be used by + * A version of xdrv_12_home_assistant supporting the new Tasmota Discovery used by * latest versions of Home Assistant or TasmoManager. * * SetOption19 0 - [DiscoverOff 0] [Discover 1] Enables discovery (default) @@ -33,8 +33,6 @@ #define XDRV_12 12 -uint8_t TasDiscoverData_init_step; - void TasDiscoverMessage(void) { Response_P(PSTR("{\"ip\":\"%_I\"," // IP Address "\"dn\":\"%s\"," // Device Name @@ -222,13 +220,13 @@ void TasDiscovery(void) { } void TasRediscover(void) { - TasDiscoverData_init_step = 1; // Delayed discovery or clear retained messages + TasmotaGlobal.discovery_counter = 1; // Delayed discovery or clear retained messages } void TasDiscoverInit(void) { if (ResetReason() != REASON_DEEP_SLEEP_AWAKE) { Settings.flag.hass_discovery = 0; // SetOption19 - Enable Tasmota discovery and Disable legacy Hass discovery - TasDiscoverData_init_step = 10; // Delayed discovery + TasmotaGlobal.discovery_counter = 10; // Delayed discovery } } @@ -273,9 +271,9 @@ bool Xdrv12(uint8_t function) { if (Settings.flag.mqtt_enabled) { // SetOption3 - Enable MQTT switch (function) { case FUNC_EVERY_SECOND: - if (TasDiscoverData_init_step) { - TasDiscoverData_init_step--; - if (!TasDiscoverData_init_step) { + if (TasmotaGlobal.discovery_counter) { + TasmotaGlobal.discovery_counter--; + if (!TasmotaGlobal.discovery_counter) { TasDiscovery(); // Send the topics for discovery } } diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino index b4d1a945a..323c1b2c5 100644 --- a/tasmota/xdrv_12_home_assistant.ino +++ b/tasmota/xdrv_12_home_assistant.ino @@ -175,7 +175,6 @@ const char kHAssError2[] PROGMEM = const char kHAssError3[] PROGMEM = "HASS: Unable to create one or more entities from Json data, please check your configuration. Failed to parse"; -uint8_t hass_init_step = 0; uint8_t hass_mode = 0; int hass_tele_period = 0; @@ -1081,7 +1080,7 @@ void HAssDiscovery(void) void HAssDiscover(void) { hass_mode = 1; // Force discovery - hass_init_step = 1; // Delayed discovery + TasmotaGlobal.discovery_counter = 1; // Delayed discovery } void HAssAnyKey(void) @@ -1157,10 +1156,10 @@ bool Xdrv12(uint8_t function) switch (function) { case FUNC_EVERY_SECOND: - if (hass_init_step) + if (TasmotaGlobal.discovery_counter) { - hass_init_step--; - if (!hass_init_step) + TasmotaGlobal.discovery_counter--; + if (!TasmotaGlobal.discovery_counter) { HAssDiscovery(); // Scheduled discovery using available resources NewHAssDiscovery(); // Send the topics for Home Assistant Official Integration @@ -1182,7 +1181,7 @@ bool Xdrv12(uint8_t function) break; case FUNC_MQTT_INIT: hass_mode = 0; // Discovery only if Settings.flag.hass_discovery is set - hass_init_step = 10; // Delayed discovery + TasmotaGlobal.discovery_counter = 10; // Delayed discovery // if (!Settings.flag.hass_discovery) { // NewHAssDiscovery(); // } diff --git a/tasmota/xnrg_03_pzem004t.ino b/tasmota/xnrg_03_pzem004t.ino index a6727ab64..1abd8d95a 100644 --- a/tasmota/xnrg_03_pzem004t.ino +++ b/tasmota/xnrg_03_pzem004t.ino @@ -31,6 +31,7 @@ #define XNRG_03 3 const uint32_t PZEM_STABILIZE = 30; // Number of seconds to stabilize configuration +const uint32_t PZEM_RETRY = 5; // Number of 250 ms retries #include @@ -208,7 +209,7 @@ void PzemEvery250ms(void) Pzem.read_state = 1; } -// AddLog(LOG_LEVEL_DEBUG, PSTR("PZM: Retry %d"), 5 - Pzem.send_retry); +// AddLog(LOG_LEVEL_DEBUG, PSTR("PZM: Retry %d"), PZEM_RETRY - Pzem.send_retry); } } @@ -227,13 +228,16 @@ void PzemEvery250ms(void) Pzem.read_state = 0; // Set address } - Pzem.send_retry = 5; + Pzem.send_retry = PZEM_RETRY; PzemSend(pzem_commands[Pzem.read_state]); } else { Pzem.send_retry--; if ((Energy.phase_count > 1) && (0 == Pzem.send_retry) && (TasmotaGlobal.uptime < PZEM_STABILIZE)) { Energy.phase_count--; // Decrement phases if no response after retry within 30 seconds after restart + if (TasmotaGlobal.discovery_counter) { + TasmotaGlobal.discovery_counter += (PZEM_RETRY / 4) + 1; // Don't send Discovery yet, delay by 5 * 250ms + 1s + } } } } diff --git a/tasmota/xnrg_05_pzem_ac.ino b/tasmota/xnrg_05_pzem_ac.ino index 29d9f326a..acf826c69 100644 --- a/tasmota/xnrg_05_pzem_ac.ino +++ b/tasmota/xnrg_05_pzem_ac.ino @@ -111,6 +111,9 @@ void PzemAcEverySecond(void) PzemAc.send_retry--; if ((Energy.phase_count > 1) && (0 == PzemAc.send_retry) && (TasmotaGlobal.uptime < PZEM_AC_STABILIZE)) { Energy.phase_count--; // Decrement phases if no response after retry within 30 seconds after restart + if (TasmotaGlobal.discovery_counter) { + TasmotaGlobal.discovery_counter += ENERGY_WATCHDOG + 1; // Don't send Discovery yet, delay by 4s + 1s + } } } } diff --git a/tasmota/xnrg_06_pzem_dc.ino b/tasmota/xnrg_06_pzem_dc.ino index 5d2d5582e..df17d2c82 100644 --- a/tasmota/xnrg_06_pzem_dc.ino +++ b/tasmota/xnrg_06_pzem_dc.ino @@ -107,6 +107,9 @@ void PzemDcEverySecond(void) PzemDc.send_retry--; if ((Energy.phase_count > 1) && (0 == PzemDc.send_retry) && (TasmotaGlobal.uptime < PZEM_DC_STABILIZE)) { Energy.phase_count--; // Decrement channels if no response after retry within 30 seconds after restart + if (TasmotaGlobal.discovery_counter) { + TasmotaGlobal.discovery_counter += ENERGY_WATCHDOG + 1; // Don't send Discovery yet, delay by 4s + 1s + } } } }