定时任务现在支持操作更多功能

This commit is contained in:
Your Name
2025-03-24 00:12:57 +08:00
parent 60977f0327
commit 6598250af1
7 changed files with 922 additions and 845 deletions

View File

@@ -476,8 +476,8 @@ static int HttpAddTask(httpd_request_t *req) {
OSStatus err = kNoErr; OSStatus err = kNoErr;
//1577369623 4 0 //1577369623 4 0
char buf[16] = {0}; char buf[20] = {0};
err = httpd_get_data(req, buf, 16); err = httpd_get_data(req, buf, 20);
require_noerr(err, exit); require_noerr(err, exit);
pTimedTask task = NewTask(); pTimedTask task = NewTask();
@@ -486,14 +486,12 @@ static int HttpAddTask(httpd_request_t *req) {
send_http(mess, strlen(mess), exit, &err); send_http(mess, strlen(mess), exit, &err);
return err; return err;
} }
int re = sscanf(buf, "%ld %d %d %d", &task->prs_time, &task->socket_idx, &task->on, int re = sscanf(buf, "%ld %d %d %d", &task->prs_time, &task->operation, &task->on,
&task->weekday);http_log("AddTask buf[%s] re[%d] (%ld %d %d %d)", &task->weekday);http_log("AddTask buf[%s] re[%d] (%ld %d %d %d)",
buf, re, task->prs_time, task->socket_idx, task->on, buf, re, task->prs_time, task->operation, task->on,
task->weekday); task->weekday);
task->socket_idx--;
if (task->prs_time < 1577428136 || task->prs_time > 9577428136 if (task->prs_time < 1577428136 || task->prs_time > 9577428136
|| task->socket_idx < 0 || task->socket_idx > 5 || task->operation < 0 || task->operation > 11) { http_log("AddTask Error!");
|| (task->on != 0 && task->on != 1)) { http_log("AddTask Error!");
re = 0; re = 0;
} }

View File

@@ -495,9 +495,9 @@
<use xlink:href="#icon-keyboard_arrow_down"/> <use xlink:href="#icon-keyboard_arrow_down"/>
</svg> </svg>
</i> </i>
<label for="task_skt_idx" class="mdl-textfield__label">插座</label> <label for="task_skt_idx" class="mdl-textfield__label">操作</label>
<ul for="task_skt_idx" <ul for="task_skt_idx"
class="mdl-menu mdl-menu--bottom-left mdl-js-menu" id="sockets_list"> class="mdl-menu mdl-menu--bottom-left mdl-js-menu" id="operations_list">
</ul> </ul>
</div> </div>
<div class="mdl-textfield mdl-js-textfield"> <div class="mdl-textfield mdl-js-textfield">
@@ -916,13 +916,6 @@
$(".mdl-layout-title").text(status.deviceName); $(".mdl-layout-title").text(status.deviceName);
document.title=status.deviceName; document.title=status.deviceName;
for (var i = 0; i < status_arr.length; i++) { for (var i = 0; i < status_arr.length; i++) {
$('#sockets_list').append(
$('<li>')
.addClass('mdl-menu__item')
.attr('data-val', `${i+1}`)
.attr('data-selected', `${i==status_arr.length - 1}`)
.text(names_arr[i])
);
var langSpan = switchTexts[i+3].querySelector('.lang'); var langSpan = switchTexts[i+3].querySelector('.lang');
var indexSpan = switchTexts[i+3].querySelector('.socket-index'); var indexSpan = switchTexts[i+3].querySelector('.socket-index');
if (langSpan) langSpan.textContent = names_arr[i]; // 修改插座名称 if (langSpan) langSpan.textContent = names_arr[i]; // 修改插座名称
@@ -972,6 +965,13 @@
.text("未设置") .text("未设置")
); );
for (let i = 0; i < BTN_OPERATIONS.length; i++) { for (let i = 0; i < BTN_OPERATIONS.length; i++) {
$('#operations_list').append(
$('<li>')
.addClass('mdl-menu__item')
.attr('data-val', `${i}`)
.attr('data-selected', `false`)
.text(BTN_OPERATIONS[i].replaceAll('切换','设置'))
);
$('#btn_action_selector').append( $('#btn_action_selector').append(
$('<li>') $('<li>')
.addClass('mdl-menu__item') .addClass('mdl-menu__item')
@@ -1341,8 +1341,8 @@ componentHandler.upgradeDom();
tb_html += "\ tb_html += "\
<tr>\ <tr>\
<td>" + tasks[i].prs_time + "</td>\ <td>" + tasks[i].prs_time + "</td>\
<td>" + names_arr[tasks[i].socket_idx-1] + "</td>\ <td>" + BTN_OPERATIONS[tasks[i].operation].replaceAll('切换','设置') + "</td>\
<td>" + (tasks[i].on == 1?"开":"关") + "</td>\ <td>" + ((tasks[i].operation==11||tasks[i].operation<8)?(tasks[i].on == 1?"开":"关"):"-") + "</td>\
<td>" + getLoopText(tasks[i].weekday) + "</td>\ <td>" + getLoopText(tasks[i].weekday) + "</td>\
<td><a href='javascript:DelTimedTask(" + tasks[i].timestamp + ");'>删除</a></td>\ <td><a href='javascript:DelTimedTask(" + tasks[i].timestamp + ");'>删除</a></td>\
</tr>"; </tr>";
@@ -1393,10 +1393,7 @@ componentHandler.upgradeDom();
//prs_time = prs_time + parseInt(sec); //prs_time = prs_time + parseInt(sec);
on = on ? "1" : "0"; on = on ? "1" : "0";
var cmd = prs_time + " " + idx + " " + on + " " + wkd; var cmd = prs_time + " " + idx + " " + on + " " + wkd;
if (cmd.length != 16) {
alert("CMD ERROR!");
return
}
HttpPost("/task", function (re) { HttpPost("/task", function (re) {
if (re != "OK") { if (re != "OK") {
alert(re); alert(re);

File diff suppressed because it is too large Load Diff

View File

@@ -6,8 +6,10 @@
#include"main.h" #include"main.h"
#include"user_gpio.h" #include"user_gpio.h"
#include "mqtt_server/user_mqtt_client.h"
#include"timed_task/timed_task.h" #include"timed_task/timed_task.h"
#include"http_server/web_log.h" #include"http_server/web_log.h"
#include "user_wifi.h"
int day_sec = 86400; int day_sec = 86400;
@@ -142,9 +144,61 @@ bool DelTask(int time)
void ProcessTask() void ProcessTask()
{ {
task_log("process task time[%ld] socket_idx[%d] on[%d]", task_log("process task time[%ld] operation[%s] on[%d]",
user_config->task_top->prs_time, user_config->task_top->socket_idx, user_config->task_top->on); user_config->task_top->prs_time, get_func_name(user_config->task_top->operation), user_config->task_top->on);
UserRelaySet(user_config->task_top->socket_idx, user_config->task_top->on); switch (user_config->task_top->operation) {
case SWITCH_ALL_SOCKETS:
UserRelaySetAll(user_config->task_top->on);
mico_system_context_update(sys_config);
for (int i = 0; i < SOCKET_NUM; i++) {
UserMqttSendSocketState(i);
}
UserMqttSendTotalSocketState();
break;
case SWITCH_SOCKET_1:
case SWITCH_SOCKET_2:
case SWITCH_SOCKET_3:
case SWITCH_SOCKET_4:
case SWITCH_SOCKET_5:
case SWITCH_SOCKET_6:
UserRelaySet(user_config->task_top->operation - 1, user_config->task_top->on);
UserMqttSendSocketState(user_config->task_top->operation - 1);
UserMqttSendTotalSocketState();
mico_system_context_update(sys_config);
break;
case SWITCH_LED_ENABLE:
if (RelayOut() && user_config->task_top->on) {
UserLedSet(1);
} else {
UserLedSet(0);
}
UserMqttSendLedState();
mico_system_context_update(sys_config);
break;
case SWITCH_CHILD_LOCK_ENABLE:
user_config->user[0] = user_config->task_top->on;
childLockEnabled = user_config->user[0];
mico_system_context_update(sys_config);
UserMqttSendChildLockState();
break;
case REBOOT_SYSTEM:
MicoSystemReboot();
break;
case CONFIG_WIFI:
micoWlanSuspendStation();
ApInit(true);
break;
case RESET_SYSTEM:
mico_system_context_restore(sys_config);
mico_rtos_thread_sleep(1);
MicoSystemReboot();
break;
default:
break;
}
DelFirstTask(); DelFirstTask();
} }
@@ -164,8 +218,8 @@ char* GetTaskStr()
tm_info = localtime(&prs_time); tm_info = localtime(&prs_time);
strftime(buffer, 26, "%m-%d %H:%M", tm_info); strftime(buffer, 26, "%m-%d %H:%M", tm_info);
sprintf(tmp_str, "{'timestamp':%ld,'prs_time':'%s','socket_idx':%d,'on':%d,'weekday':%d},", sprintf(tmp_str, "{'timestamp':%ld,'prs_time':'%s','operation':%d,'on':%d,'weekday':%d},",
tmp_tsk->prs_time, buffer, tmp_tsk->socket_idx+1, tmp_tsk->on, tmp_tsk->weekday); tmp_tsk->prs_time, buffer, tmp_tsk->operation, tmp_tsk->on, tmp_tsk->weekday);
tmp_str += strlen(tmp_str); tmp_str += strlen(tmp_str);
tmp_tsk = tmp_tsk->next; tmp_tsk = tmp_tsk->next;
} }

View File

@@ -7,8 +7,8 @@ struct TimedTask
{ {
bool on_use; //正在使用 bool on_use; //正在使用
time_t prs_time; //被执行的格林尼治时间戳 time_t prs_time; //被执行的格林尼治时间戳
int socket_idx; //要控制的插孔 int operation; //要进行的操作
int on; //开或者关 int on; //开或者关,或者其他操作
int weekday; //星期重复 0代表不重复 8代表每日重复 int weekday; //星期重复 0代表不重复 8代表每日重复
pTimedTask next; //下一个任务(按之间排序) pTimedTask next; //下一个任务(按之间排序)
}; };

View File

@@ -28,7 +28,7 @@ bool RelayOut(void) {
return false; return false;
} }
const char *get_func_name(char func_code) { char* get_func_name(char func_code) {
static char buffer[32]; static char buffer[32];
switch (func_code) { switch (func_code) {
case SWITCH_ALL_SOCKETS: case SWITCH_ALL_SOCKETS:

View File

@@ -31,6 +31,7 @@ void SetSocketStatus(char* socket_status);
void set_key_map(char user[],int index, char short_func, char long_func); void set_key_map(char user[],int index, char short_func, char long_func);
char get_short_func(char val); char get_short_func(char val);
char get_long_func(char val); char get_long_func(char val);
char *get_func_name(char func_code);
void StartLedBlink(uint8_t times); void StartLedBlink(uint8_t times);
#endif #endif