diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 9168f2211..dec97659a 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -14,3 +14,5 @@ For more details go to [emsesp.org](https://emsesp.org/). - set bin file upload limit to 1M again [3086](https://github.com/emsesp/EMS-ESP32/issues/3086) ## Changed + +- call compute value direct, enlarge TCP stack [#3127](https://github.com/emsesp/EMS-ESP32/discussions/3127) diff --git a/platformio.ini b/platformio.ini index 241af2c71..40e5057ef 100644 --- a/platformio.ini +++ b/platformio.ini @@ -39,7 +39,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=6144 ; default is 16KB/8192*2 + -D CONFIG_ASYNC_TCP_STACK_SIZE=8192 ; 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 f27ba427a..6cd6a6680 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -222,22 +222,10 @@ bool System::command_message(const char * value, const int8_t id, JsonObject out LOG_WARNING("Message is empty"); return false; // must have a string value } - - EMSESP::webSchedulerService.computed_value.clear(); - EMSESP::webSchedulerService.raw_value = value; - for (uint16_t wait = 0; wait < 2000 && !EMSESP::webSchedulerService.raw_value.empty(); wait++) { - delay(1); - } - - if (EMSESP::webSchedulerService.computed_value.empty()) { - LOG_WARNING("Message result is empty"); - return false; - } - - 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 - + std::string computed_value = EMSESP::webSchedulerService.compute_value(value); + 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 return true; } diff --git a/src/emsesp_version.h b/src/emsesp_version.h index 417585ea4..340c555c0 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.8.3-dev.5" +#define EMSESP_APP_VERSION "3.8.3-dev.6" diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 4bb53c3bd..45d6354c6 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -472,6 +472,10 @@ void WebSchedulerService::condition() { } } +std::string WebSchedulerService::compute_value(const char * value) { + return compute(value); +} + // process any scheduled jobs void WebSchedulerService::loop() { // initialize static value on startup @@ -479,11 +483,6 @@ 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 0d1ad2fa6..fabfd44bd 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -89,9 +89,7 @@ class WebSchedulerService : public StatefulService { bool onChange(const char * cmd); std::string get_metrics_prometheus(); - - std::string raw_value; - std::string computed_value; + std::string compute_value(const char * value); #if defined(EMSESP_TEST) void load_test_data();