From 1de647e8a5d99ceaf6c3577d4e0cf207001c331f Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 3 Nov 2025 11:37:24 +0100 Subject: [PATCH] tcp stack 6k, move message shuntingYard to scheduler --- platformio.ini | 2 +- src/core/system.cpp | 14 +++++++++----- src/web/WebSchedulerService.cpp | 5 +++++ src/web/WebSchedulerService.h | 3 +++ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/platformio.ini b/platformio.ini index 9d3cc153e..d238b747c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -40,7 +40,7 @@ build_flags = -D CONFIG_ASYNC_TCP_PRIORITY=10 ; default -D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 ; default -D CONFIG_ASYNC_TCP_RUNNING_CORE=1 ; force async_tcp task to be on same core as Arduino app (default is any core) - -D CONFIG_ASYNC_TCP_STACK_SIZE=8192 ; stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k - (was 6KB/6144, default is 16KB/8192*2) + -D CONFIG_ASYNC_TCP_STACK_SIZE=6144 ; default is 16KB/8192*2 ; ESPAsyncWebServer ; -D WS_MAX_QUEUED_MESSAGES=0 ; not used, default 8 ; -D SSE_MAX_QUEUED_MESSAGES=1 ; for log messages, default 32 diff --git a/src/core/system.cpp b/src/core/system.cpp index fd5184a90..2bf2fe7a7 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -212,16 +212,20 @@ bool System::command_message(const char * value, const int8_t id, JsonObject out return false; // must have a string value } - auto computed_value = compute(value); // process the message via Shunting Yard + EMSESP::webSchedulerService.computed_value.clear(); + EMSESP::webSchedulerService.raw_value = value; + for (uint8_t wait = 0; wait < 2000 && !EMSESP::webSchedulerService.raw_value.empty(); wait++) { + delay(1); + } - if (computed_value.length() == 0) { + if (EMSESP::webSchedulerService.computed_value.empty()) { LOG_WARNING("Message result is empty"); return false; } - LOG_INFO("Message: %s", computed_value.c_str()); // send to log - Mqtt::queue_publish(F_(message), computed_value); // send to MQTT if enabled - output["api_data"] = computed_value; // send to API + LOG_INFO("Message: %s", EMSESP::webSchedulerService.computed_value.c_str()); // send to log + Mqtt::queue_publish(F_(message), EMSESP::webSchedulerService.computed_value); // send to MQTT if enabled + output["api_data"] = EMSESP::webSchedulerService.computed_value; // send to API return true; } diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 616ca95a4..bc69acfbe 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -459,6 +459,11 @@ void WebSchedulerService::loop() { static uint32_t last_uptime_min = 0; static uint32_t last_uptime_sec = 0; + if (!raw_value.empty()) { // process a value from system/message command + computed_value = compute(raw_value); + raw_value.clear(); + } + // get list of scheduler events and exit if it's empty if (scheduleItems_->empty()) { return; diff --git a/src/web/WebSchedulerService.h b/src/web/WebSchedulerService.h index 799067514..977f14a8a 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -86,6 +86,9 @@ class WebSchedulerService : public StatefulService { uint8_t count_entities(bool cmd_only = false); bool onChange(const char * cmd); + std::string raw_value; + std::string computed_value; + #if defined(EMSESP_TEST) void load_test_data(); #endif