mirror of
https://github.com/oopuuu/zTC1.git
synced 2025-12-11 20:48:16 +08:00
Merge branch 'oopuuu:master' into master
This commit is contained in:
@@ -163,7 +163,7 @@ static int HttpGetTc1Status(httpd_request_t *req) {
|
||||
user_config->ap_name, user_config->ap_key, MQTT_SERVER, MQTT_SERVER_PORT,
|
||||
MQTT_SERVER_USR, MQTT_SERVER_PWD,
|
||||
VERSION, ip_status.ip, ip_status.mask, ip_status.gateway, user_config->mqtt_report_freq,
|
||||
user_config->power_led_enabled, 0L,socket_names);
|
||||
user_config->power_led_enabled, 0L,socket_names,childLockEnabled);
|
||||
|
||||
OSStatus err = kNoErr;
|
||||
send_http(tc1_status, strlen(tc1_status), exit, &err);
|
||||
@@ -213,6 +213,27 @@ static int HttpSetSocketName(httpd_request_t *req) {
|
||||
return err;
|
||||
}
|
||||
|
||||
static int HttpSetChildLock(httpd_request_t *req) {
|
||||
OSStatus err = kNoErr;
|
||||
|
||||
int buf_size = 32;
|
||||
char *buf = malloc(buf_size);
|
||||
|
||||
err = httpd_get_data(req, buf, buf_size);
|
||||
require_noerr(err, exit);
|
||||
int enableLock;
|
||||
sscanf(buf, "%d",&enableLock);
|
||||
user_config->user[0] = enableLock;
|
||||
childLockEnabled = enableLock;
|
||||
mico_system_context_update(sys_config);
|
||||
UserMqttSendChildLockState();
|
||||
send_http("OK", 2, exit, &err);
|
||||
|
||||
exit:
|
||||
if (buf) free(buf);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int HttpGetPowerInfo(httpd_request_t *req) {
|
||||
OSStatus err = kNoErr;
|
||||
char buf[16];
|
||||
@@ -243,7 +264,7 @@ static int HttpGetPowerInfo(httpd_request_t *req) {
|
||||
user_config->socket_names[4],
|
||||
user_config->socket_names[5]);
|
||||
sprintf(power_info_json, POWER_INFO_JSON, sockets, power_record.idx, PW_NUM, p_count, powers,
|
||||
up_time,user_config->power_led_enabled,RelayOut()?1:0,socket_names,user_config->p_count_1_day_ago,user_config->p_count_2_days_ago);
|
||||
up_time,user_config->power_led_enabled,RelayOut()?1:0,socket_names,user_config->p_count_1_day_ago,user_config->p_count_2_days_ago,childLockEnabled);
|
||||
send_http(power_info_json, strlen(power_info_json), exit, &err);
|
||||
if (socket_names) free(socket_names);
|
||||
exit:
|
||||
@@ -546,6 +567,7 @@ const struct httpd_wsgi_call g_app_handlers[] = {
|
||||
{"/led", HTTPD_HDR_DEFORT, 0, LedStatus, LedSetEnabled, NULL, NULL},
|
||||
{"/socketAll", HTTPD_HDR_DEFORT, 0, NULL, TotalSocketSetEnabled, NULL, NULL},
|
||||
{"/socketNames", HTTPD_HDR_DEFORT, 0, NULL, HttpSetSocketName, NULL, NULL},
|
||||
{"/childLock", HTTPD_HDR_DEFORT, 0, NULL, HttpSetChildLock, NULL, NULL},
|
||||
};
|
||||
|
||||
static int g_app_handlers_no = sizeof(g_app_handlers) / sizeof(struct httpd_wsgi_call);
|
||||
|
||||
@@ -65,10 +65,11 @@
|
||||
'reportFreq':'%d',\
|
||||
'ledEnabled':%d,\
|
||||
'up_time':%ld,\
|
||||
'socketNames':'%s'\
|
||||
'socketNames':'%s',\
|
||||
'child_lock_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,'socketNames':'%s','p_count_today':%ld,'p_count_yesterday':%ld}"
|
||||
#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,'socketNames':'%s','p_count_1_day_ago':%ld,'p_count_2_days_ago':%ld,'child_lock_enabled':%d}"
|
||||
|
||||
int AppHttpdStart(void);
|
||||
|
||||
|
||||
@@ -122,6 +122,18 @@
|
||||
-->
|
||||
<ul id="socket_ul" class="demo-list-control mdl-list">
|
||||
<li class="mdl-list__item">
|
||||
<span class="mdl-list__item-primary-content">
|
||||
<span class="lang" langKey="ChildLock">启用童锁</span>
|
||||
</span>
|
||||
<span class="mdl-list__item-secondary-action">
|
||||
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"
|
||||
for="list-switch-child-lock">
|
||||
<input type="checkbox" id="list-switch-child-lock" class="mdl-switch__input"
|
||||
checked/>
|
||||
</label>
|
||||
</span>
|
||||
</li>
|
||||
<li class="mdl-list__item">
|
||||
<span class="mdl-list__item-primary-content">
|
||||
<span class="lang" langKey="Led">电源指示灯</span>
|
||||
</span>
|
||||
@@ -696,7 +708,8 @@
|
||||
//主页
|
||||
Socket: {en: "Socket", cn: "插座"},
|
||||
Led:{en: "PowerLed", cn: "电源指示灯"},
|
||||
SocketAll:{en: "Total switch", cn: "总开关"}
|
||||
SocketAll:{en: "Total Switch", cn: "总开关"},
|
||||
ChildLock:{en: "Child Lock", cn: "童锁"}
|
||||
}
|
||||
function ChangeLanguage(lang) {
|
||||
if (lang == "jp") {
|
||||
@@ -783,15 +796,15 @@
|
||||
var names_arr = status.socketNames.split(",");
|
||||
var switchTexts = document.querySelectorAll('.mdl-list__item-primary-content');
|
||||
for (var i = 0; i < status_arr.length; i++) {
|
||||
var langSpan = switchTexts[i+2].querySelector('.lang');
|
||||
var indexSpan = switchTexts[i+2].querySelector('.socket-index');
|
||||
var langSpan = switchTexts[i+3].querySelector('.lang');
|
||||
var indexSpan = switchTexts[i+3].querySelector('.socket-index');
|
||||
if (langSpan) langSpan.textContent = names_arr[i]; // 修改插座名称
|
||||
if (indexSpan) indexSpan.textContent = ""; // 修改序号,可自定义起始数字
|
||||
//checkboxs[i].checked = status_arr[i] == "1";
|
||||
if (status_arr[i] == "1") {
|
||||
switch_lables[i+2].MaterialSwitch.on();
|
||||
switch_lables[i+3].MaterialSwitch.on();
|
||||
} else {
|
||||
switch_lables[i+2].MaterialSwitch.off();
|
||||
switch_lables[i+3].MaterialSwitch.off();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -856,17 +869,17 @@
|
||||
var checkboxs = socket_ul.getElementsByClassName("mdl-switch__input");
|
||||
var switch_lables = socket_ul.getElementsByClassName("mdl-switch");
|
||||
$(".mdl-switch__input").on("click", function() {
|
||||
if("list-switch-all" == this.id){
|
||||
if("list-switch-all" == this.id||"list-switch-child-lock"== this.id){
|
||||
return;
|
||||
}
|
||||
var sockets_st = "";
|
||||
for (var i = 2; i < checkboxs.length; i++) {
|
||||
for (var i = 3; 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");
|
||||
}, checkboxs[1].checked ? "1" : "0");
|
||||
|
||||
});
|
||||
|
||||
@@ -904,7 +917,11 @@
|
||||
|
||||
document.getElementById("list-switch-all").addEventListener("click", function() {
|
||||
HttpPost("/socketAll", function (re) {
|
||||
}, checkboxs[1].checked ? "1" : "0");});
|
||||
}, checkboxs[2].checked ? "1" : "0");});
|
||||
|
||||
document.getElementById("list-switch-child-lock").addEventListener("click", function() {
|
||||
HttpPost("/childLock", function (re) {
|
||||
}, checkboxs[0].checked ? "1" : "0");});
|
||||
|
||||
//Socket-end
|
||||
|
||||
@@ -1058,34 +1075,41 @@
|
||||
$("#uptime").html(power.up_time);
|
||||
|
||||
var w_v = (17.1 * power.p_count) / 1000 / 36000;
|
||||
w.innerHTML = w_v.toFixed(2);
|
||||
var w_v_t = (17.1 * power.p_count_today) / 1000 / 36000;
|
||||
w_t.innerHTML = w_v_t.toFixed(2);
|
||||
var w_v_y = (17.1 * power.p_count_yesterday) / 1000 / 36000;
|
||||
w_y.innerHTML = w_v_y.toFixed(2);
|
||||
if (power.led_enabled == 1) {
|
||||
w.innerHTML = w_v.toFixed(3);
|
||||
var w_v_t = (17.1 * (power.p_count - power.p_count_1_day_ago)) / 1000 / 36000;
|
||||
w_v_t = w_v_t < 0 ? 0 : w_v_t;
|
||||
w_t.innerHTML = w_v_t.toFixed(3);
|
||||
var w_v_y = (17.1 * power.p_count_1_day_ago - power.p_count_2_days_ago) / 1000 / 36000;
|
||||
w_v_y = w_v_y < 0 ? 0 : w_v_t;
|
||||
w_y.innerHTML = w_v_y.toFixed(3);
|
||||
if (power.child_lock_enabled == 1) {
|
||||
switch_lables[0].MaterialSwitch.on();
|
||||
} else {
|
||||
switch_lables[0].MaterialSwitch.off();
|
||||
}
|
||||
if (power.total_switch_on == 1) {
|
||||
if (power.led_enabled == 1) {
|
||||
switch_lables[1].MaterialSwitch.on();
|
||||
} else {
|
||||
switch_lables[1].MaterialSwitch.off();
|
||||
}
|
||||
if (power.total_switch_on == 1) {
|
||||
switch_lables[2].MaterialSwitch.on();
|
||||
} else {
|
||||
switch_lables[2].MaterialSwitch.off();
|
||||
}
|
||||
var status_arr = power.sockets.split(",");
|
||||
var names_arr = power.socketNames.split(",");
|
||||
var switchTexts = document.querySelectorAll('.mdl-list__item-primary-content');
|
||||
for (var i = 0; i < status_arr.length; i++) {
|
||||
//checkboxs[i].checked = status_arr[i] == "1";
|
||||
var langSpan = switchTexts[i+2].querySelector('.lang');
|
||||
var indexSpan = switchTexts[i+2].querySelector('.socket-index');
|
||||
var langSpan = switchTexts[i+3].querySelector('.lang');
|
||||
var indexSpan = switchTexts[i+3].querySelector('.socket-index');
|
||||
if (langSpan) langSpan.textContent = names_arr[i]; // 修改插座名称
|
||||
if (indexSpan) indexSpan.textContent = ""; // 修改序号,可自定义起始数字
|
||||
if (status_arr[i] == "1") {
|
||||
switch_lables[i+2].MaterialSwitch.on();
|
||||
switch_lables[i+3].MaterialSwitch.on();
|
||||
} else {
|
||||
switch_lables[i+2].MaterialSwitch.off();
|
||||
switch_lables[i+3].MaterialSwitch.off();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -145,6 +145,7 @@ int application_start(void) {
|
||||
}
|
||||
MicoSysLed(0);
|
||||
|
||||
childLockEnabled = (int)user_config->user[0];
|
||||
if (user_config->version != USER_CONFIG_VERSION) { tc1_log("WARNGIN: user params restored!");
|
||||
err = mico_system_context_restore(sys_config);
|
||||
require_noerr(err, exit);
|
||||
|
||||
@@ -75,6 +75,7 @@ extern char str_mac[16];
|
||||
extern system_config_t* sys_config;
|
||||
extern user_config_t* user_config;
|
||||
extern mico_gpio_t Relay[Relay_NUM];
|
||||
extern int childLockEnabled;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -76,6 +76,7 @@ void UserMqttTimerFunc(void *arg) {
|
||||
case 0:
|
||||
UserMqttHassAutoLed();
|
||||
UserMqttHassAutoTotalSocket();
|
||||
UserMqttHassAutoChildLock();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
@@ -264,6 +265,7 @@ void MqttClientThread(mico_thread_arg_t arg) {
|
||||
|
||||
UserMqttSendLedState();
|
||||
UserMqttSendTotalSocketState();
|
||||
UserMqttSendChildLockState();
|
||||
|
||||
mico_init_timer(&timer_handle, 150, UserMqttTimerFunc, &arg);
|
||||
registerMqttEvents();
|
||||
@@ -411,6 +413,14 @@ void ProcessHaCmd(char *cmd) {
|
||||
UserMqttSendSocketState(i);
|
||||
}
|
||||
UserMqttSendTotalSocketState();
|
||||
}else if (strcmp(cmd, "set childLock") == ' ') {
|
||||
int on;
|
||||
sscanf(cmd, "set childLock %s %d", mac, &on);
|
||||
if (strcmp(mac, str_mac)) return;mqtt_log("set childLock on[%d]", on);
|
||||
user_config->user[0] = on;
|
||||
childLockEnabled = on;
|
||||
UserMqttSendChildLockState();
|
||||
mico_system_context_update(sys_config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -499,6 +509,21 @@ OSStatus UserMqttSendLedState(void) {
|
||||
return oss_status;
|
||||
}
|
||||
|
||||
OSStatus UserMqttSendChildLockState(void) {
|
||||
char *send_buf = malloc(64);
|
||||
char *topic_buf = malloc(64);
|
||||
OSStatus oss_status = kUnknownErr;
|
||||
if (send_buf != NULL && topic_buf != NULL) {
|
||||
sprintf(topic_buf, "homeassistant/switch/%s/childLock/state", str_mac);
|
||||
sprintf(send_buf, "set childLock %s %d", str_mac, childLockEnabled);
|
||||
oss_status = UserMqttSendTopic(topic_buf, send_buf, 1);
|
||||
}
|
||||
if (send_buf) free(send_buf);
|
||||
if (topic_buf) free(topic_buf);
|
||||
|
||||
return oss_status;
|
||||
}
|
||||
|
||||
//hass mqtt鑷姩鍙戠幇鏁版嵁寮<E5B581>鍏冲彂閫<E5BD82>
|
||||
void UserMqttHassAuto(char socket_id) {
|
||||
socket_id--;
|
||||
@@ -561,6 +586,35 @@ void UserMqttHassAutoLed(void) {
|
||||
free(topic_buf);
|
||||
}
|
||||
|
||||
void UserMqttHassAutoChildLock(void) {
|
||||
char *send_buf = NULL;
|
||||
char *topic_buf = NULL;
|
||||
send_buf = (char *) malloc(600);
|
||||
topic_buf = (char *) malloc(64);
|
||||
if (send_buf != NULL && topic_buf != NULL) {
|
||||
sprintf(topic_buf, "homeassistant/switch/%s/childLock/config", str_mac);
|
||||
sprintf(send_buf,
|
||||
"{\"name\":\"童锁\","
|
||||
"\"uniq_id\":\"tc1_%s_child_lock\","
|
||||
"\"object_id\":\"tc1_%s_child_lock\","
|
||||
"\"stat_t\":\"homeassistant/switch/%s/childLock/state\","
|
||||
"\"cmd_t\":\"device/ztc1/set\","
|
||||
"\"pl_on\":\"set childLock %s 1\","
|
||||
"\"pl_off\":\"set childLock %s 0\","
|
||||
"\"device\":{"
|
||||
"\"identifiers\":[\"tc1_%s\"],"
|
||||
"\"name\":\"TC1\","
|
||||
"\"model\":\"TC1\","
|
||||
"\"manufacturer\":\"PHICOMM\"}}",
|
||||
str_mac,str_mac,str_mac, str_mac, str_mac, str_mac);
|
||||
UserMqttSendTopic(topic_buf, send_buf, 1);
|
||||
}
|
||||
if (send_buf)
|
||||
free(send_buf);
|
||||
if (topic_buf)
|
||||
free(topic_buf);
|
||||
}
|
||||
|
||||
void UserMqttHassAutoTotalSocket(void) {
|
||||
char *send_buf = NULL;
|
||||
char *topic_buf = NULL;
|
||||
|
||||
@@ -31,6 +31,8 @@ extern OSStatus UserMqttSendSocketState(char socket_id);
|
||||
|
||||
extern OSStatus UserMqttSendLedState(void);
|
||||
|
||||
extern OSStatus UserMqttSendChildLockState(void);
|
||||
|
||||
extern OSStatus UserMqttSendTotalSocketState(void);
|
||||
|
||||
extern void UserMqttHassAuto(char socket_id);
|
||||
@@ -41,6 +43,8 @@ extern void UserMqttHassAutoPower(void);
|
||||
|
||||
extern void UserMqttHassAutoLed(void);
|
||||
|
||||
extern void UserMqttHassAutoChildLock(void);
|
||||
|
||||
extern void UserMqttHassAutoTotalSocket(void);
|
||||
|
||||
extern void registerMqttEvents(void);
|
||||
|
||||
@@ -122,6 +122,8 @@ uint16_t key_time = 0;
|
||||
#define BUTTON_LONG_PRESS_TIME 10 //100ms*10=1s
|
||||
|
||||
static void KeyTimeoutHandler(void *arg) {
|
||||
if(childLockEnabled)
|
||||
return;
|
||||
static char key_trigger, key_continue;
|
||||
//按键扫描程序
|
||||
char tmp = ~(0xfe | MicoGpioInputGet(Button));
|
||||
|
||||
Reference in New Issue
Block a user