tcp stack 6k, move message shuntingYard to scheduler

This commit is contained in:
MichaelDvP
2025-11-03 11:37:24 +01:00
parent c562b88b32
commit 1de647e8a5
4 changed files with 18 additions and 6 deletions

View File

@@ -40,7 +40,7 @@ build_flags =
-D CONFIG_ASYNC_TCP_PRIORITY=10 ; default -D CONFIG_ASYNC_TCP_PRIORITY=10 ; default
-D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 ; 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_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 ; ESPAsyncWebServer
; -D WS_MAX_QUEUED_MESSAGES=0 ; not used, default 8 ; -D WS_MAX_QUEUED_MESSAGES=0 ; not used, default 8
; -D SSE_MAX_QUEUED_MESSAGES=1 ; for log messages, default 32 ; -D SSE_MAX_QUEUED_MESSAGES=1 ; for log messages, default 32

View File

@@ -212,16 +212,20 @@ bool System::command_message(const char * value, const int8_t id, JsonObject out
return false; // must have a string value 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"); LOG_WARNING("Message result is empty");
return false; return false;
} }
LOG_INFO("Message: %s", computed_value.c_str()); // send to log LOG_INFO("Message: %s", EMSESP::webSchedulerService.computed_value.c_str()); // send to log
Mqtt::queue_publish(F_(message), computed_value); // send to MQTT if enabled Mqtt::queue_publish(F_(message), EMSESP::webSchedulerService.computed_value); // send to MQTT if enabled
output["api_data"] = computed_value; // send to API output["api_data"] = EMSESP::webSchedulerService.computed_value; // send to API
return true; return true;
} }

View File

@@ -459,6 +459,11 @@ void WebSchedulerService::loop() {
static uint32_t last_uptime_min = 0; static uint32_t last_uptime_min = 0;
static uint32_t last_uptime_sec = 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 // get list of scheduler events and exit if it's empty
if (scheduleItems_->empty()) { if (scheduleItems_->empty()) {
return; return;

View File

@@ -86,6 +86,9 @@ class WebSchedulerService : public StatefulService<WebScheduler> {
uint8_t count_entities(bool cmd_only = false); uint8_t count_entities(bool cmd_only = false);
bool onChange(const char * cmd); bool onChange(const char * cmd);
std::string raw_value;
std::string computed_value;
#if defined(EMSESP_TEST) #if defined(EMSESP_TEST)
void load_test_data(); void load_test_data();
#endif #endif