diff --git a/CHANGELOG.md b/CHANGELOG.md index f6baaaa56..b4994fa0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ All notable changes to this project will be documented in this file. - Berry add ``gpio`` module - Berry add ``light`` module - Support for dummy energy monitor using user values set by commands ``VoltageSet``, ``CurrentSet``, ``PowerSet`` and ``FrequencySet``. Enable by selecting any GPIO as ``Option A2`` (#10640) +- Command ``Backlog 1;`` to allow execution of following commands without delay ### Changed - PubSubClient library from EspEasy v2.7.12 to Tasmota v2.8.12 diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 55c397eac..671e21e2f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -83,6 +83,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota - Command ``Sensor80 1 <0..7>`` to control MFRC522 RFID antenna gain from 18dB (0) to 48dB (7) [#11073](https://github.com/arendst/Tasmota/issues/11073) - Command ``SerialBuffer 256..520`` to change hardware serial receive buffer size from default (256) to max local buffer size (520) [#11448](https://github.com/arendst/Tasmota/issues/11448) - Command ``SetOption126 1`` to enable DS18x20 arithmetic mean over teleperiod for JSON temperature based on [#11472](https://github.com/arendst/Tasmota/issues/11472) +- Command ``Backlog 1;`` to allow execution of following commands without delay - Commands ``MqttKeepAlive 1..100`` to set Mqtt Keep Alive timer (default 30) and ``MqttTimeout 1..100`` to set Mqtt Socket Timeout (default 4) [#5341](https://github.com/arendst/Tasmota/issues/5341) - Commands ``DisplayType`` to select sub-modules where implemented and ``DisplayInvert`` to select inverted display where implemented - Support for SML VBUS [#11125](https://github.com/arendst/Tasmota/issues/11125) diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index c8b13f2f0..02a920f7c 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -317,8 +317,10 @@ void CommandHandler(char* topicBuf, char* dataBuf, uint32_t data_len) /********************************************************************************************/ -void CmndBacklog(void) -{ +void CmndBacklog(void) { + // Backlog command1;command2;.. Execute commands in sequence with a delay in between set with SetOption34 + // Backlog 1;command1;command2;.. Execute commands in sequence with no delay + if (XdrvMailbox.data_len) { #ifdef SUPPORT_IF_STATEMENT @@ -340,15 +342,19 @@ void CmndBacklog(void) } } if (*blcommand != '\0') { + if (BACKLOG_EMPTY && ('1' == *blcommand)) { + TasmotaGlobal.backlog_nodelay = true; + } else { #ifdef SUPPORT_IF_STATEMENT - if (backlog.size() < MAX_BACKLOG) { - backlog.add(blcommand); - } + if (backlog.size() < MAX_BACKLOG) { + backlog.add(blcommand); + } #else - TasmotaGlobal.backlog[TasmotaGlobal.backlog_index] = blcommand; - TasmotaGlobal.backlog_index++; - if (TasmotaGlobal.backlog_index >= MAX_BACKLOG) TasmotaGlobal.backlog_index = 0; + TasmotaGlobal.backlog[TasmotaGlobal.backlog_index] = blcommand; + TasmotaGlobal.backlog_index++; + if (TasmotaGlobal.backlog_index >= MAX_BACKLOG) TasmotaGlobal.backlog_index = 0; #endif + } } blcommand = strtok(nullptr, ";"); } diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 59735a55f..38aa5a8ef 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -141,6 +141,7 @@ struct { bool rule_teleperiod; // Process rule based on teleperiod data using prefix TELE- bool serial_local; // Handle serial locally bool fallback_topic_flag; // Use Topic or FallbackTopic + bool backlog_nodelay; // Execute all backlog commands with no delay bool backlog_mutex; // Command backlog pending bool stop_flash_rotate; // Allow flash configuration rotation bool blinkstate; // LED state @@ -398,11 +399,14 @@ void BacklogLoop(void) { if (!nodelay_detected) { ExecuteCommand((char*)cmd.c_str(), SRC_BACKLOG); } - if (nodelay) { + if (nodelay || TasmotaGlobal.backlog_nodelay) { TasmotaGlobal.backlog_timer = millis(); // Reset backlog_timer which has been set by ExecuteCommand (CommandHandler) } TasmotaGlobal.backlog_mutex = false; } + if (BACKLOG_EMPTY) { + TasmotaGlobal.backlog_nodelay = false; + } } }