From cfecb390f9920ac9a06c87d4a9f9b21c02ec81a1 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 25 Jul 2024 14:31:24 +0200 Subject: [PATCH] scheduler task priority, add comments --- src/web/WebSchedulerService.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index ad3fc6cb7..2a49c95cc 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -39,7 +39,7 @@ void WebSchedulerService::begin() { snprintf(topic, sizeof(topic), "%s/#", F_(scheduler)); Mqtt::subscribe(EMSdevice::DeviceType::SCHEDULER, topic, nullptr); // use empty function callback #ifndef EMSESP_STANDALONE - xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", 4096, NULL, 3, NULL); + xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", 4096, NULL, 1, NULL); #endif } @@ -192,6 +192,15 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) { char result[12]; output["value"] = Helpers::render_boolean(result, scheduleItem.active); } + if (scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_CONDITION) { + output["condition"] = scheduleItem.time; + } else if (scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_ONCHANGE) { + output["onchange"] = scheduleItem.time; + } else if (scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_TIMER) { + output["timer"] = scheduleItem.time; + } else { + output["time"] = scheduleItem.time; + } output["command"] = scheduleItem.cmd; output["cmd_data"] = scheduleItem.value; output["readable"] = true; @@ -426,8 +435,8 @@ bool WebSchedulerService::command(const char * name, const std::string & command return false; } -#include "shuntingYard.hpp" - +// called from emsesp.cpp on every entity-change +// queue schedules to be handled executed in scheduler-loop bool WebSchedulerService::onChange(const char * cmd) { for (ScheduleItem & scheduleItem : *scheduleItems_) { if (scheduleItem.active && scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_ONCHANGE @@ -439,6 +448,9 @@ bool WebSchedulerService::onChange(const char * cmd) { return false; } +#include "shuntingYard.hpp" + +// handle condition schedules, parse string stored in schedule.time field void WebSchedulerService::condition() { for (ScheduleItem & scheduleItem : *scheduleItems_) { if (scheduleItem.active && scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_CONDITION) { @@ -529,6 +541,7 @@ void WebSchedulerService::loop() { } } +// process schedules async void WebSchedulerService::scheduler_task(void * pvParameters) { while (1) { delay(100); // no need to hurry