diff --git a/interface/src/app/main/Scheduler.tsx b/interface/src/app/main/Scheduler.tsx index 74f2a40b5..e91364988 100644 --- a/interface/src/app/main/Scheduler.tsx +++ b/interface/src/app/main/Scheduler.tsx @@ -283,7 +283,9 @@ const Scheduler: FC = () => { - {si.flags < ScheduleFlag.SCHEDULE_TIMER ? ( + {si.flags === 0 ? ( + <> + ) : si.flags < ScheduleFlag.SCHEDULE_TIMER ? ( <> {dayBox(si, ScheduleFlag.SCHEDULE_MON)} {dayBox(si, ScheduleFlag.SCHEDULE_TUE)} diff --git a/interface/src/app/main/SchedulerDialog.tsx b/interface/src/app/main/SchedulerDialog.tsx index 2fdb95e22..529c00f7a 100644 --- a/interface/src/app/main/SchedulerDialog.tsx +++ b/interface/src/app/main/SchedulerDialog.tsx @@ -72,6 +72,17 @@ const SchedulerDialog = ({ } }; + const saveandactivate = async () => { + editItem.active = true; + try { + setFieldErrors(undefined); + await validate(validator, editItem); + onSave(editItem); + } catch (error) { + setFieldErrors(error as ValidateFieldsError); + } + }; + const remove = () => { editItem.deleted = true; onSave(editItem); @@ -326,36 +337,36 @@ const SchedulerDialog = ({ )} - - - )} + + + {!creating && ( @@ -386,6 +397,16 @@ const SchedulerDialog = ({ > {creating ? LL.ADD(0) : LL.UPDATE()} + {editItem.flags === 0 && editItem.cmd !== '' && ( + + )} ); diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 2a49c95cc..37657776e 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -51,7 +51,7 @@ void WebScheduler::read(WebScheduler & webScheduler, JsonObject root) { for (const ScheduleItem & scheduleItem : webScheduler.scheduleItems) { JsonObject si = schedule.add(); si["id"] = counter++; // id is only used to render the table and must be unique - si["active"] = scheduleItem.active; + si["active"] = scheduleItem.flags ? scheduleItem.active : false; si["flags"] = scheduleItem.flags; si["time"] = scheduleItem.time; si["cmd"] = scheduleItem.cmd; @@ -198,7 +198,7 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) { output["onchange"] = scheduleItem.time; } else if (scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_TIMER) { output["timer"] = scheduleItem.time; - } else { + } else if (scheduleItem.flags != 0){ output["time"] = scheduleItem.time; } output["command"] = scheduleItem.cmd; @@ -488,6 +488,13 @@ void WebSchedulerService::loop() { cmd_changed_.pop_front(); } + for (ScheduleItem & scheduleItem : *scheduleItems_) { + if (scheduleItem.active && scheduleItem.flags == 0) { + command(scheduleItem.name.c_str(), scheduleItem.cmd, compute(scheduleItem.value)); + scheduleItem.active = false; + } + } + // check conditions every 10 seconds uint32_t uptime_sec = uuid::get_uptime_sec() / 10; if (last_uptime_sec != uptime_sec) { @@ -544,7 +551,7 @@ void WebSchedulerService::loop() { // process schedules async void WebSchedulerService::scheduler_task(void * pvParameters) { while (1) { - delay(100); // no need to hurry + delay(10); // no need to hurry if (!EMSESP::system_.upload_status()) { EMSESP::webSchedulerService.loop(); }