后台以及ha mqtt增加总开关功能

This commit is contained in:
nhkefus
2025-03-17 10:40:45 +08:00
parent a3e3639cf9
commit 7113b361e8
6 changed files with 105 additions and 6 deletions

View File

@@ -205,7 +205,7 @@ static int HttpGetPowerInfo(httpd_request_t *req) {
char *powers = GetPowerRecord(idx);
char *sockets = GetSocketStatus();
sprintf(power_info_json, POWER_INFO_JSON, sockets, power_record.idx, PW_NUM, p_count, powers,
up_time,user_config->power_led_enabled);
up_time,user_config->power_led_enabled,RelayOut()?1:0);
send_http(power_info_json, strlen(power_info_json), exit, &err);
exit:
return err;
@@ -437,6 +437,26 @@ static int LedSetEnabled(httpd_request_t *req) {
return err;
}
static int TotalSocketSetEnabled(httpd_request_t *req){
OSStatus err = kNoErr;
int buf_size = 97;
int on;
char *buf = malloc(buf_size);
err = httpd_get_data(req, buf, buf_size);
require_noerr(err, exit);
sscanf(buf, "%d", &on);
UserRelaySetAll(on);
UserMqttSendTotalSocketState();
send_http("OK", 2, exit, &err);
exit:
if (buf) free(buf);
return err;
}
static int Otastatus(httpd_request_t *req) {
OSStatus err = kNoErr;
char buf[16] = {0};
@@ -477,6 +497,7 @@ const struct httpd_wsgi_call g_app_handlers[] = {
{"/task", HTTPD_HDR_DEFORT, APP_HTTP_FLAGS_NO_EXACT_MATCH, HttpGetTasks, HttpAddTask, NULL, HttpDelTask},
{"/ota", HTTPD_HDR_DEFORT, 0, Otastatus, OtaStart, NULL, NULL},
{"/led", HTTPD_HDR_DEFORT, 0, LedStatus, LedSetEnabled, NULL, NULL},
{"/socketAll", HTTPD_HDR_DEFORT, 0, NULL, TotalSocketSetEnabled, NULL, NULL},
};
static int g_app_handlers_no = sizeof(g_app_handlers) / sizeof(struct httpd_wsgi_call);

View File

@@ -67,7 +67,7 @@
'up_time':%ld\
}"
#define POWER_INFO_JSON "{'sockets':'%s','idx':%d,'len':%d,'p_count':%ld,'powers':[%s],'up_time':'%s','led_enabled':%d}"
#define POWER_INFO_JSON "{'sockets':'%s','idx':%d,'len':%d,'p_count':%ld,'powers':[%s],'up_time':'%s','led_enabled':%d,'total_switch_on':%d}"
int AppHttpdStart(void);

View File

@@ -134,6 +134,18 @@
</span>
</li>
<li class="mdl-list__item">
<span class="mdl-list__item-primary-content">
<span class="lang" langKey="SocketAll">总开关</span>
</span>
<span class="mdl-list__item-secondary-action">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"
for="list-switch-all">
<input type="checkbox" id="list-switch-all" class="mdl-switch__input"
checked/>
</label>
</span>
</li>
<li class="mdl-list__item">
<span class="mdl-list__item-primary-content">
<span class="lang" langKey="Socket">插座</span>-1
</span>
@@ -634,7 +646,8 @@
About: {en: "About", cn: "关于"},
//主页
Socket: {en: "Socket", cn: "插座"},
Led:{en: "PowerLed", cn: "电源指示灯"}
Led:{en: "PowerLed", cn: "电源指示灯"},
SocketAll:{en: "Total switch", cn: "总开关"}
}
function ChangeLanguage(lang) {
if (lang == "jp") {
@@ -789,13 +802,15 @@
var switch_lables = socket_ul.getElementsByClassName("mdl-switch");
$(".mdl-switch__input").on("click", function() {
var sockets_st = "";
for (var i = 1; i < checkboxs.length; i++) {
for (var i = 2; i < checkboxs.length; i++) {
sockets_st += (checkboxs[i].checked ? "1," : "0,");
}
HttpPost("/socket", function (re) {
}, sockets_st);
HttpPost("/led", function (re) {
}, checkboxs[0].checked ? "1" : "0");
HttpPost("/socketAll", function (re) {
}, checkboxs[1].checked ? "1" : "0");
});
//Socket-end
@@ -951,14 +966,19 @@
switch_lables[0].MaterialSwitch.on();
} else {
switch_lables[0].MaterialSwitch.off();
}
if (power.total_switch_on == 1) {
switch_lables[1].MaterialSwitch.on();
} else {
switch_lables[1].MaterialSwitch.off();
}
var status_arr = power.sockets.split(",");
for (var i = 0; i < status_arr.length; i++) {
//checkboxs[i].checked = status_arr[i] == "1";
if (status_arr[i] == "1") {
switch_lables[i+1].MaterialSwitch.on();
switch_lables[i+2].MaterialSwitch.on();
} else {
switch_lables[i+1].MaterialSwitch.off();
switch_lables[i+2].MaterialSwitch.off();
}
}