This commit is contained in:
zogodo
2019-09-25 17:10:21 +08:00
parent 21a07a4d97
commit 3f2605cd78
8 changed files with 91 additions and 95 deletions

View File

@@ -22,7 +22,7 @@ bool json_plug_task_analysis(unsigned char x, unsigned char y, cJSON * pJsonRoot
void user_send(int udp_flag, char *s)
{
if (udp_flag || !user_mqtt_isconnect())
user_udp_send(s); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_udp_send(s); //发送数据
else
user_mqtt_send(s);
}
@@ -31,8 +31,8 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
{
unsigned char i;
bool update_user_config_flag = false; //<EFBFBD><EFBFBD>־λ,<2C><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool return_flag = true; //Ϊtrueʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>򲻷<EFBFBD><F2B2BBB7><EFBFBD>
bool update_user_config_flag = false; //标志位,记录最后是否需要更新储存的数据
bool return_flag = true; //true时返回json结果,否则不返回
cJSON * pJsonRoot = cJSON_Parse(pusrdata);
if (!pJsonRoot)
@@ -41,7 +41,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
return;
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>device report(MQTTͬ<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
//解析UDP命令device report(MQTT同样回复命令)
cJSON *p_cmd = cJSON_GetObjectItem(pJsonRoot, "cmd");
if (p_cmd && cJSON_IsString(p_cmd) && strcmp(p_cmd->valuestring, "device report") == 0)
{
@@ -57,17 +57,17 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
char *s = cJSON_Print(pRoot);
// os_log("pRoot: %s\r\n", s);
user_send(udp_flag, s); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_send(udp_flag, s); //发送数据
free((void *) s);
cJSON_Delete(pRoot);
// cJSON_Delete(p_cmd);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//以下为解析命令部分
cJSON *p_name = cJSON_GetObjectItem(pJsonRoot, "name");
cJSON *p_mac = cJSON_GetObjectItem(pJsonRoot, "mac");
//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//开始正式处理所有命令
if ((p_name && cJSON_IsString(p_name) && strcmp(p_name->valuestring, sys_config->micoSystemConfig.name) == 0) //name
|| (p_mac && cJSON_IsString(p_mac) && strcmp(p_mac->valuestring, strMac) == 0) //mac
)
@@ -75,7 +75,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
cJSON *json_send = cJSON_CreateObject();
cJSON_AddStringToObject(json_send, "mac", strMac);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//解析重启命令
// cJSON *p_cmd = cJSON_GetObjectItem(pJsonRoot, "name");
if(p_cmd && cJSON_IsString(p_cmd) && strcmp(p_cmd->valuestring, "restart") == 0)
{
@@ -83,20 +83,20 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
mico_system_power_perform(mico_system_context_get(), eState_Software_Reset);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//解析版本
cJSON *p_version = cJSON_GetObjectItem(pJsonRoot, "version");
if (p_version)
{
os_log("version:%s",VERSION);
cJSON_AddStringToObject(json_send, "version", VERSION);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
//解析运行时间
cJSON *p_total_time = cJSON_GetObjectItem(pJsonRoot, "total_time");
if (p_total_time)
{
cJSON_AddNumberToObject(json_send, "total_time", total_time);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//解析功率
cJSON *p_power = cJSON_GetObjectItem(pJsonRoot, "power");
if (p_power)
{
@@ -109,11 +109,11 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
}
os_log("power:%d", (int)power);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>setting-----------------------------------------------------------------
//解析主机setting-----------------------------------------------------------------
cJSON *p_setting = cJSON_GetObjectItem(pJsonRoot, "setting");
if (p_setting)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ota
//解析ota
cJSON *p_ota = cJSON_GetObjectItem(p_setting, "ota");
if (p_ota)
{
@@ -122,7 +122,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
}
cJSON *json_setting_send = cJSON_CreateObject();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/deviceid
//设置设备名称/deviceid
cJSON *p_setting_name = cJSON_GetObjectItem(p_setting, "name");
if (p_setting_name && cJSON_IsString(p_setting_name))
{
@@ -130,7 +130,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(sys_config->micoSystemConfig.name, p_setting_name->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt ip
//设置mqtt ip
cJSON *p_mqtt_ip = cJSON_GetObjectItem(p_setting, "mqtt_uri");
if (p_mqtt_ip && cJSON_IsString(p_mqtt_ip))
{
@@ -138,7 +138,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(user_config->mqtt_ip, p_mqtt_ip->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt port
//设置mqtt port
cJSON *p_mqtt_port = cJSON_GetObjectItem(p_setting, "mqtt_port");
if (p_mqtt_port && cJSON_IsNumber(p_mqtt_port))
{
@@ -146,7 +146,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
user_config->mqtt_port = p_mqtt_port->valueint;
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt user
//设置mqtt user
cJSON *p_mqtt_user = cJSON_GetObjectItem(p_setting, "mqtt_user");
if (p_mqtt_user && cJSON_IsString(p_mqtt_user))
{
@@ -154,7 +154,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(user_config->mqtt_user, p_mqtt_user->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt password
//设置mqtt password
cJSON *p_mqtt_password = cJSON_GetObjectItem(p_setting, "mqtt_password");
if (p_mqtt_password && cJSON_IsString(p_mqtt_password))
{
@@ -162,25 +162,25 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
sprintf(user_config->mqtt_password, p_mqtt_password->valuestring);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ota
//开发返回数据
//返回设备ota
if (p_ota) cJSON_AddStringToObject(json_setting_send, "ota", p_ota->valuestring);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/deviceid
//返回设备名称/deviceid
if (p_setting_name) cJSON_AddStringToObject(json_setting_send, "name", sys_config->micoSystemConfig.name);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt ip
//返回mqtt ip
if (p_mqtt_ip) cJSON_AddStringToObject(json_setting_send, "mqtt_uri", user_config->mqtt_ip);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt port
//返回mqtt port
if (p_mqtt_port) cJSON_AddNumberToObject(json_setting_send, "mqtt_port", user_config->mqtt_port);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt user
//返回mqtt user
if (p_mqtt_user) cJSON_AddStringToObject(json_setting_send, "mqtt_user", user_config->mqtt_user);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mqtt password
//返回mqtt password
if (p_mqtt_password) cJSON_AddStringToObject(json_setting_send, "mqtt_password", user_config->mqtt_password);
cJSON_AddItemToObject(json_send, "setting", json_setting_send);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug-----------------------------------------------------------------
//解析plug-----------------------------------------------------------------
for (i = 0; i < PLUG_NUM; i++)
{
if (json_plug_analysis(udp_flag, i, pJsonRoot, json_send))
@@ -193,7 +193,7 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
{
char *json_str = cJSON_Print(json_send);
// os_log("pRoot: %s\r\n", json_str);
user_send(udp_flag, json_str); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_send(udp_flag, json_str); //发送数据
free((void *) json_str);
}
cJSON_Delete(json_send);
@@ -210,9 +210,9 @@ void user_function_cmd_received(int udp_flag, char* pusrdata)
}
/*
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json
*udp_flag:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>udp/mqtt<EFBFBD><EFBFBD>־λ,<2C>˴<EFBFBD><CBB4>޸IJ<DEB8><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ,<2C><>Ҫʵʱ<CAB5><CAB1><EFBFBD>¸<EFBFBD>domoticz
*x:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*解析处理定时任务json
*udp_flag:发送udp/mqtt标志位,此处修改插座开关状态时,需要实时更新给domoticz
*x:插座编号
*/
bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON * pJsonSend)
{
@@ -228,7 +228,7 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
cJSON *json_plug_send = cJSON_CreateObject();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug on------------------------------------------------------
//解析plug on------------------------------------------------------
if (p_plug)
{
cJSON *p_plug_on = cJSON_GetObjectItem(p_plug, "on");
@@ -242,12 +242,12 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
user_mqtt_send_plug_state(x);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug<EFBFBD><EFBFBD>setting<EFBFBD><EFBFBD>Ŀ----------------------------------------------
//解析plugsetting项目----------------------------------------------
cJSON *p_plug_setting = cJSON_GetObjectItem(p_plug, "setting");
if (p_plug_setting)
{
cJSON *json_plug_setting_send = cJSON_CreateObject();
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug<EFBFBD><EFBFBD>setting<EFBFBD><EFBFBD>name----------------------------------------
//解析plugsettingname----------------------------------------
cJSON *p_plug_setting_name = cJSON_GetObjectItem(p_plug_setting, "name");
if (p_plug_setting_name)
{
@@ -260,7 +260,7 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
cJSON_AddStringToObject(json_plug_setting_send, "name", user_config->plug[x].name);
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>plug<EFBFBD><EFBFBD>setting<EFBFBD><EFBFBD>task----------------------------------------
//解析plugsettingtask----------------------------------------
for (i = 0; i < PLUG_TIME_TASK_NUM; i++)
{
if (json_plug_task_analysis(x, i, p_plug_setting, json_plug_setting_send))
@@ -279,8 +279,8 @@ bool json_plug_analysis(int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON
}
/*
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json
*x:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> y:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*解析处理定时任务json
*x:插座编号 y:任务编号
*/
bool json_plug_task_analysis(unsigned char x, unsigned char y, cJSON * pJsonRoot, cJSON * pJsonSend)
{