Commit 2360ed07 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

【修改内容】增加门锁的场景设置和同步

See merge request chenweican/k-sdk!196
parents 7fc8146e 48b5d7ed
...@@ -152,6 +152,7 @@ typedef enum { ...@@ -152,6 +152,7 @@ typedef enum {
#define MAX_LISTEN_NUM 10 #define MAX_LISTEN_NUM 10
#define MAX_IP_LEN 16 #define MAX_IP_LEN 16
#define KK_DEVICE_SCREEN_MAX_SUPPORT 8 #define KK_DEVICE_SCREEN_MAX_SUPPORT 8
#define KK_DEVICE_LOCKUSR_MAX_SUPPORT 64
//#ifndef DEVICE_CODE_LEN //#ifndef DEVICE_CODE_LEN
//#define DEVICE_CODE_LEN 33 //#define DEVICE_CODE_LEN 33
//#endif //#endif
......
...@@ -521,7 +521,7 @@ int kk_check_dev_exist_roomId(const char* deviceCode,const char *epNum,char *roo ...@@ -521,7 +521,7 @@ int kk_check_dev_exist_roomId(const char* deviceCode,const char *epNum,char *roo
} }
int kk_room_dev_add(const char *roomId,const char *roomName,const char *deviceCode,const char *epNum,const char *devName) int kk_room_dev_add(const char *roomId,const char *roomName,const char *deviceCode,const char *epNum,const char *devName)
{ {
int res = 0; int res = SUCCESS_RETURN;
kk_area_ctx_t *ctx = _kk_area_get_ctx(); kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL; char *sqlCmd = NULL;
char *zErrMsg = 0; char *zErrMsg = 0;
...@@ -547,7 +547,7 @@ int kk_room_dev_add(const char *roomId,const char *roomName,const char *deviceCo ...@@ -547,7 +547,7 @@ int kk_room_dev_add(const char *roomId,const char *roomName,const char *deviceCo
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
_kk_area_unlock(); _kk_area_unlock();
return SUCCESS_RETURN; return res;
} }
int kk_room_reset_armingstate(void) int kk_room_reset_armingstate(void)
{ {
...@@ -721,7 +721,7 @@ int kk_room_dev_remove(const char *deviceCode,const char *epNum) ...@@ -721,7 +721,7 @@ int kk_room_dev_remove(const char *deviceCode,const char *epNum)
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
_kk_area_unlock(); _kk_area_unlock();
return SUCCESS_RETURN; return res;
} }
int kk_room_device_list_add(const char *deviceCode) int kk_room_device_list_add(const char *deviceCode)
......
...@@ -613,7 +613,7 @@ int dm_mgr_get_gw_deviceCode(_OU_ dm_mgr_dev_node_t **node) ...@@ -613,7 +613,7 @@ int dm_mgr_get_gw_deviceCode(_OU_ dm_mgr_dev_node_t **node)
dm_mgr_dev_node_t *search_node = NULL; dm_mgr_dev_node_t *search_node = NULL;
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) { list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
if (memcmp(search_node->productCode, "gateway_2", strlen("gateway_2")) == 0) { if (memcmp(search_node->productCode, KK_GW_PRODUCTID, strlen(KK_GW_PRODUCTID)) == 0) {
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */ /* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
if (node) { if (node) {
*node = search_node; *node = search_node;
...@@ -1756,6 +1756,7 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN]) ...@@ -1756,6 +1756,7 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
return FAIL_RETURN; return FAIL_RETURN;
} }
INFO_PRINT("dm_mgr_subdev_delete deviceCode:%s\n",deviceCode); INFO_PRINT("dm_mgr_subdev_delete deviceCode:%s\n",deviceCode);
kk_delete_LockUser_info((const char*)deviceCode);
kk_scene_deleteall_panel_scene_info(deviceCode);//如果是情景面板,删除对应信息 kk_scene_deleteall_panel_scene_info(deviceCode);//如果是情景面板,删除对应信息
/*房间信息中删除对应的设备*/ /*房间信息中删除对应的设备*/
kk_room_dev_remove(deviceCode,NULL); kk_room_dev_remove(deviceCode,NULL);
......
...@@ -78,7 +78,6 @@ typedef struct { ...@@ -78,7 +78,6 @@ typedef struct {
#define KK_THING_SERVICE_GETLOCALTIMER "/thing/service/getLocalTimer" #define KK_THING_SERVICE_GETLOCALTIMER "/thing/service/getLocalTimer"
#define KK_THING_SERVICE_SETCOUNTDOWN "/thing/service/setCountDown" #define KK_THING_SERVICE_SETCOUNTDOWN "/thing/service/setCountDown"
#define KK_THING_SERVICE_GETCOUNTDOWN "/thing/service/getCountDown" #define KK_THING_SERVICE_GETCOUNTDOWN "/thing/service/getCountDown"
#define KK_THING_SERVICE_GETKEYLIST "/thing/service/GetKeyList"
#define KK_THING_SERVICE_ADDKEY "/thing/service/AddKey" #define KK_THING_SERVICE_ADDKEY "/thing/service/AddKey"
#define KK_THING_SERVICE_DELETEKEY "/thing/service/DeleteKey" #define KK_THING_SERVICE_DELETEKEY "/thing/service/DeleteKey"
#define KK_THING_SERVICE_MODIFYKEY "/thing/service/ModifyKey" #define KK_THING_SERVICE_MODIFYKEY "/thing/service/ModifyKey"
...@@ -161,7 +160,8 @@ typedef struct { ...@@ -161,7 +160,8 @@ typedef struct {
#define KK_THING_SERVICE_QUERYGROUP_REPLY "/thing/service/queryGroup_reply" #define KK_THING_SERVICE_QUERYGROUP_REPLY "/thing/service/queryGroup_reply"
#define KK_THING_SERVICE_EXCUTEGROUP "/thing/service/excuteGroup" #define KK_THING_SERVICE_EXCUTEGROUP "/thing/service/excuteGroup"
#define KK_THING_SERVICE_EXCUTEGROUP_REPLY "/thing/service/excuteGroup_reply" #define KK_THING_SERVICE_EXCUTEGROUP_REPLY "/thing/service/excuteGroup_reply"
#define KK_THING_SERVICE_GETKEYLIST "/thing/service/getKeyList"
#define KK_THING_SERVICE_GETKEYLIST_REPLY "/thing/service/getKeyList_reply"
void kk_sendData2app(void *info, void *payload,int isAsync); void kk_sendData2app(void *info, void *payload,int isAsync);
......
...@@ -415,7 +415,7 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf) ...@@ -415,7 +415,7 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf)
} }
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *state = cJSON_GetObjectItem(paramStr, MSG_TOPO_CHANGE_TYPE_STR); cJSON *state = cJSON_GetObjectItem(paramStr, MSG_TOPO_CHANGE_TYPE_STR);
kk_topo_delete_report(paramStr);//主动报topo delete //kk_topo_delete_report(paramStr);//主动报topo delete
if(state != NULL && state->valueint == 1){ if(state != NULL && state->valueint == 1){
cJSON *deviceArray = cJSON_GetObjectItem(paramStr, MSG_TOPO_CHANGE_DEVICES_STR); cJSON *deviceArray = cJSON_GetObjectItem(paramStr, MSG_TOPO_CHANGE_DEVICES_STR);
if(deviceArray == NULL){ if(deviceArray == NULL){
...@@ -446,6 +446,8 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf) ...@@ -446,6 +446,8 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf)
cJSON_AddItemToObject(rootData,"payload",payload); cJSON_AddItemToObject(rootData,"payload",payload);
char *pnewout=cJSON_Print(rootData); char *pnewout=cJSON_Print(rootData);
kk_sendData2gw(pnewout, strlen(pnewout), node->fatherDeviceCode);//send to gw itself kk_sendData2gw(pnewout, strlen(pnewout), node->fatherDeviceCode);//send to gw itself
kk_scene_update_device_active(deviceCode,-1,0);
kk_scene_rebuild_device_active(deviceCode,-1);
dm_mgr_subdev_delete(deviceCode); dm_mgr_subdev_delete(deviceCode);
free(pnewout); free(pnewout);
//cJSON_Delete(rootData); //cJSON_Delete(rootData);
...@@ -780,7 +782,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params) ...@@ -780,7 +782,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
}else{ }else{
strcpy(epNumStr,epNum->valuestring); strcpy(epNumStr,epNum->valuestring);
} }
kk_room_dev_add(roomId->valuestring,room_name->valuestring,deviceCode->valuestring,epNumStr,dev_name->valuestring); res = kk_room_dev_add(roomId->valuestring,room_name->valuestring,deviceCode->valuestring,epNumStr,dev_name->valuestring);
//kk_scene_update_device_active(deviceCode->valuestring,atoi(epNumStr),1); //kk_scene_update_device_active(deviceCode->valuestring,atoi(epNumStr),1);
//kk_scene_rebuild_device_active(deviceCode->valuestring,atoi(epNumStr)); //kk_scene_rebuild_device_active(deviceCode->valuestring,atoi(epNumStr));
//内机默认添加到跟网关同个房间 //内机默认添加到跟网关同个房间
...@@ -826,7 +828,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params) ...@@ -826,7 +828,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
} }
} }
#endif #endif
return SUCCESS_RETURN; return res;
} }
/************************************************************ /************************************************************
*功能描述:删除设备从房间处理函数 *功能描述:删除设备从房间处理函数
...@@ -970,6 +972,7 @@ static int kk_service_setFloor_handle(cJSON *params) ...@@ -970,6 +972,7 @@ static int kk_service_setFloor_handle(cJSON *params)
while(itemroom != NULL){ while(itemroom != NULL){
cJSON * roomid = cJSON_GetObjectItem(itemroom,MSG_AREA_ROOM_CCUROOMID); cJSON * roomid = cJSON_GetObjectItem(itemroom,MSG_AREA_ROOM_CCUROOMID);
if(roomid == NULL){ if(roomid == NULL){
ERROR_PRINT("DATA ERROR!!!\n");
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
kk_room_set_floor_info(floorId->valuestring,"",roomid->valuestring); kk_room_set_floor_info(floorId->valuestring,"",roomid->valuestring);
...@@ -1431,6 +1434,76 @@ static int kk_service_getScreenList_handle(cJSON *param,cJSON *msgId) ...@@ -1431,6 +1434,76 @@ static int kk_service_getScreenList_handle(cJSON *param,cJSON *msgId)
cJSON_Delete(info); cJSON_Delete(info);
return res; return res;
} }
/************************************************************
*功能描述:获取智能锁用户信息
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_service_LockKeyList_handle(cJSON *inforoot,cJSON *msgId)
{
int res = 0;
int i = 0,num = 0;
LockKeyInfo_t *pList = NULL;
if(inforoot == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *deviceCode = cJSON_GetObjectItem(inforoot, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
return FAIL_RETURN;
}
cJSON *productCode = cJSON_GetObjectItem(inforoot, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
return FAIL_RETURN;
}
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, KK_THING_SERVICE_GETKEYLIST_REPLY);
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, deviceCode->valuestring);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode->valuestring);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON_AddStringToObject(payload, "msgId", msgId->valuestring);
cJSON_AddStringToObject(payload, "method", "thing.service.getKeyList_reply");
pList = (LockKeyInfo_t*)malloc(sizeof(LockKeyInfo_t)*KK_DEVICE_LOCKUSR_MAX_SUPPORT);
if(pList == NULL){
ERROR_PRINT("MALLOC ERROR!!!");
cJSON_Delete(payload);
cJSON_Delete(info);
free(infff);
return -1;
}
memset(pList,0x0, sizeof(LockKeyInfo_t)*KK_DEVICE_LOCKUSR_MAX_SUPPORT);
cJSON *paramArray = cJSON_CreateArray();
num = kk_get_LockUser_list(pList,deviceCode->valuestring);
for(i = 0; i < num; i++){
cJSON *Item = cJSON_CreateObject();
cJSON_AddStringToObject(Item, "keyRole", pList[i].keyRole);
cJSON_AddStringToObject(Item, "keyName", pList[i].keyName);
cJSON_AddStringToObject(Item, "keyID", pList[i].keyId);
cJSON_AddStringToObject(Item, "keyType", pList[i].keyType);
cJSON_AddItemToArray(paramArray, Item);
}
cJSON *data = cJSON_CreateObject();
cJSON_AddItemToObject(data, "data", paramArray);
cJSON_AddItemToObject(payload, "params", data);
char *payload11=cJSON_Print(payload);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
free(pList);
cJSON_Delete(payload);
cJSON_Delete(info);
return res;
}
/************************************************************ /************************************************************
*功能描述:获取指定屏类数据 *功能描述:获取指定屏类数据
*输入参数:params:云端下发数据,包含场景Id等 *输入参数:params:云端下发数据,包含场景Id等
...@@ -2191,58 +2264,66 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2191,58 +2264,66 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT(" delete room \n"); INFO_PRINT(" delete room \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_deleteRoom_handle(paramStr); if(kk_service_deleteRoom_handle(paramStr) == 0){
kk_service_deleteRoom_reply(info_root,msgId); kk_service_deleteRoom_reply(info_root,msgId);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDDEVICETOROOM) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDDEVICETOROOM) == 0){
INFO_PRINT(" adddevicetoroom \n"); INFO_PRINT(" adddevicetoroom \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_addDeviceToRoom_handle(paramStr); if(kk_service_addDeviceToRoom_handle(paramStr) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_ADDDEVICETOROOM_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_ADDDEVICETOROOM_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_REMOVEDEVICEFROMROOM) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_REMOVEDEVICEFROMROOM) == 0){
INFO_PRINT(" removedevicefromroom \n"); INFO_PRINT(" removedevicefromroom \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_removeDeviceFromRoom_handle(paramStr); if(kk_service_removeDeviceFromRoom_handle(paramStr) == 0){
//kk_service_addDeviceToRoom_reply(info_root,msgId,1); //kk_service_addDeviceToRoom_reply(info_root,msgId,1);
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_REMOVEDEVICEFROMROOM_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_REMOVEDEVICEFROMROOM_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDSCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDSCENC) == 0){
INFO_PRINT(" add scene \n"); INFO_PRINT(" add scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_addScene_handle(paramStr,msgId); if(kk_service_addScene_handle(paramStr,msgId) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_ADDSCENC_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_ADDSCENC_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UPDATESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UPDATESCENC) == 0){
INFO_PRINT(" update scene \n"); INFO_PRINT(" update scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_updateScene_handle(paramStr,msgId); if(kk_service_updateScene_handle(paramStr,msgId) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_UPDATESCENC_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_UPDATESCENC_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ENABLESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ENABLESCENC) == 0){
INFO_PRINT(" enable scene \n"); INFO_PRINT(" enable scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_enableScene_handle(paramStr,msgId); if(kk_service_enableScene_handle(paramStr,msgId) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_ENABLESCENC_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_ENABLESCENC_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DELETESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DELETESCENC) == 0){
INFO_PRINT("delete scene \n"); INFO_PRINT("delete scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_deleteScene_handle(paramStr,msgId); if(kk_service_deleteScene_handle(paramStr,msgId) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_DELETESCENC_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_DELETESCENC_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_EXECUTESCENE) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_EXECUTESCENE) == 0){
INFO_PRINT("execute scene \n"); INFO_PRINT("execute scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_executeScene_handle(paramStr,msgId); if(kk_service_executeScene_handle(paramStr,msgId) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_EXECUTESCENE_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_EXECUTESCENE_REPLY);
}
}else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_SYNCDEVICEINFO) == 0){ }else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_SYNCDEVICEINFO) == 0){
INFO_PRINT("SYNCDEVICEINFO service \n"); INFO_PRINT("SYNCDEVICEINFO service \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
...@@ -2287,11 +2368,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2287,11 +2368,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT("bind scene \n"); INFO_PRINT("bind scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(paramStr != NULL){ if(paramStr != NULL){
kk_service_bindScene_handle(paramStr,deviceCode->valuestring); if(kk_service_bindScene_handle(paramStr,deviceCode->valuestring) == 0){
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_common_reply(info_root,msgId,"/thing/service/bindScene_reply"); kk_service_common_reply(info_root,msgId,"/thing/service/bindScene_reply");
} }
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UNBINDSBUTTTON) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UNBINDSBUTTTON) == 0){
INFO_PRINT("unbind button \n"); INFO_PRINT("unbind button \n");
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
...@@ -2319,11 +2401,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2319,11 +2401,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
goto directReturn; goto directReturn;
} }
sprintf(btnId,"%d",buttonId->valueint); sprintf(btnId,"%d",buttonId->valueint);
kk_scene_execute_quickpanel(btnId,deviceCode->valuestring); if(kk_scene_execute_quickpanel(btnId,deviceCode->valuestring) == 0){
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_common_reply(info_root,msgId,"/thing/service/activeButton_reply"); kk_service_common_reply(info_root,msgId,"/thing/service/activeButton_reply");
} }
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_GETCCUVERSION) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_GETCCUVERSION) == 0){
INFO_PRINT("GET CCU VERISON \n"); INFO_PRINT("GET CCU VERISON \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
...@@ -2356,9 +2439,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2356,9 +2439,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT("SETFLOOR \n"); INFO_PRINT("SETFLOOR \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
kk_service_setFloor_handle(paramStr); if(kk_service_setFloor_handle(paramStr) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_SETFLOOR_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_SETFLOOR_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDFLOORS) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDFLOORS) == 0){
INFO_PRINT("ADDFLOOR \n"); INFO_PRINT("ADDFLOOR \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
...@@ -2369,9 +2453,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2369,9 +2453,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT("DELETEFLOOR \n"); INFO_PRINT("DELETEFLOOR \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
kk_service_deleteFloor_handle(paramStr); if(kk_service_deleteFloor_handle(paramStr) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_DELETEFLOORS_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_DELETEFLOORS_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_GETFLOOR) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_GETFLOOR) == 0){
INFO_PRINT("GETFLOOR \n"); INFO_PRINT("GETFLOOR \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
...@@ -2382,9 +2467,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2382,9 +2467,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT("UPDATEFLOOR \n"); INFO_PRINT("UPDATEFLOOR \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
kk_service_updateFloor_handle(paramStr); if(kk_service_updateFloor_handle(paramStr) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_UPDATEFLOORS_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_UPDATEFLOORS_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_CLIENTREPORT) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_CLIENTREPORT) == 0){
INFO_PRINT("CLIENTREPORT \n"); INFO_PRINT("CLIENTREPORT \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
...@@ -2395,9 +2481,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2395,9 +2481,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT("SPECIALDEV TO ROOM \n"); INFO_PRINT("SPECIALDEV TO ROOM \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
kk_service_addScreenToRoom_handle(paramStr); if(kk_service_addScreenToRoom_handle(paramStr) == 0){
kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_SPECIALDEVTOROOM_REPLY); kk_service_common_reply(info_root,msgId,KK_THING_SERVICE_SPECIALDEVTOROOM_REPLY);
} }
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_RMSPECIALDEVFROMROOM) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_RMSPECIALDEVFROMROOM) == 0){
INFO_PRINT("RM SPECIALDEV FROM ROOM \n"); INFO_PRINT("RM SPECIALDEV FROM ROOM \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
...@@ -2452,6 +2539,11 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -2452,6 +2539,11 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
kk_service_executeGroup_handle(info_root,paramStr,msgId); kk_service_executeGroup_handle(info_root,paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_GETKEYLIST) == 0){
INFO_PRINT("GETKEYLIST \n");
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_LockKeyList_handle(info_root,msgId);
}
else{ else{
INFO_PRINT("Error msgtype!!! \n"); INFO_PRINT("Error msgtype!!! \n");
} }
......
...@@ -114,6 +114,22 @@ static int kk_subDev_db_Init(void) ...@@ -114,6 +114,22 @@ static int kk_subDev_db_Init(void)
sqlite3_free(pcErr); sqlite3_free(pcErr);
return FAIL_RETURN; return FAIL_RETURN;
} }
const char *pUserInfoTable = "CREATE TABLE IF NOT EXISTS LockUserInfo( \
idx INTEGER PRIMARY KEY , \
keyId varchar(32), \
keyType varchar(32), \
keyRole varchar(32), \
keyName varchar(255), \
deviceCode varchar(33), \
reverse varchar(128))";
if (sqlite3_exec(ctx->pDb, pUserInfoTable, NULL, NULL, &pcErr) != SQLITE_OK)
{
ERROR_PRINT("Error creating table (%s)\n", pcErr);
sqlite3_free(pcErr);
return FAIL_RETURN;
}
//eUtils_LockUnlock(&sLock); //eUtils_LockUnlock(&sLock);
_kk_subDb_unlock(); _kk_subDb_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
...@@ -224,7 +240,7 @@ static int _kk_check_subDev_exist(const char* deviceCode) ...@@ -224,7 +240,7 @@ static int _kk_check_subDev_exist(const char* deviceCode)
pmac = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE); pmac = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE);
if(!strcmp(deviceCode,pmac)) if(!strcmp(deviceCode,pmac))
{ {
isExist = 1; isExist = 1;
break; break;
} }
...@@ -235,7 +251,137 @@ static int _kk_check_subDev_exist(const char* deviceCode) ...@@ -235,7 +251,137 @@ static int _kk_check_subDev_exist(const char* deviceCode)
return isExist; return isExist;
} }
/************************************************************
*功能描述:保存设备信息到数据库
*输入参数:devType:设备类型
productCode:产品Id
deviceCode:设备deviceCode
fatherDeviceCode:上一级网关的deviceCode
mac: mac地址
version:版本号
heartbeat:心跳时间
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static int _kk_check_LockUser_exist(const char* keyId,const char *deviceCode)
{
int isExist = 0;
sqlite3_stmt *stmt;
char *sqlCmd = NULL;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
const char *searchCmd = "select * from LockUserInfo where keyId = %s and deviceCode = %s;";
sqlCmd = sqlite3_mprintf(searchCmd,keyId,deviceCode);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while(sqlite3_step(stmt) == SQLITE_ROW){
isExist = 1;
break;
}
INFO_PRINT("\n");
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return isExist;
}
int kk_LockUser_insert_db(char *keyId,char *keyType,char *keyRole,char *keyName,char *deviceCode)
{
const char *insertCmd = "insert into LockUserInfo (keyId,keyType,keyRole,keyName,deviceCode,reverse) \
values ('%s','%s','%s','%s','%s','%s');";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
if(_kk_check_LockUser_exist((const char*)keyId,(const char*)deviceCode) == 1){
WARNING_PRINT("[%s][%d] DATA ALREADY EXIST!!!\n",__FUNCTION__,__LINE__);
return SUCCESS_RETURN;
}
_kk_subDb_lock();
sqlCmd = sqlite3_mprintf(insertCmd,keyId,keyType,keyRole,keyName,deviceCode,"");
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_subDb_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:获取屏类列表
*输入参数:deviceCode:设备deviceCode
isAuth:1,已注册;0,未注册
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_get_LockUser_list(LockKeyInfo_t *list,const char *deviceCode)
{
const char *searchCmd = "select * from LockUserInfo where deviceCode = '%s'";
char *zErrMsg = 0;
sqlite3_stmt *stmt;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
char *pkeyId = NULL;
char *pkeyType = NULL;
char *pkeyRole = NULL;
char *pkeyName = NULL;
int count = 0;
char *sqlCmd = NULL;
sqlCmd = sqlite3_mprintf(searchCmd,deviceCode);
_kk_subDb_lock();
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
pkeyId = (char*)sqlite3_column_text(stmt, DB_LOCKUSR_KEYID);
pkeyType = (char*)sqlite3_column_text(stmt, DB_LOCKUSR_KEYTYPE);
pkeyRole = (char*)sqlite3_column_text(stmt, DB_LOCKUSR_KEYROLE);
pkeyName = (char*)sqlite3_column_text(stmt, DB_LOCKUSR_KEYNAME);
//printf("currentValue:%d\n",currentValue);
memcpy(list[count].keyId,pkeyId,strlen(pkeyId));
memcpy(list[count].keyType,pkeyType,strlen(pkeyType));
memcpy(list[count].keyRole,pkeyRole,strlen(pkeyRole));
memcpy(list[count].keyName,pkeyName,strlen(pkeyName));
count++;
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
_kk_subDb_unlock();
return count;
}
/************************************************************
*功能描述:获取屏类列表
*输入参数:deviceCode:设备deviceCode
isAuth:1,已注册;0,未注册
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_delete_LockUser_info(const char *deviceCode)
{
const char *deleteCmd = "delete from LockUserInfo where deviceCode = '%s';";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
_kk_subDb_lock();
sqlCmd = sqlite3_mprintf(deleteCmd,deviceCode);
INFO_PRINT("Table delete data sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
//INFO_PRINT("Table delete data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_subDb_unlock();
return SUCCESS_RETURN;
}
/************************************************************ /************************************************************
*功能描述:保存设备信息到数据库 *功能描述:保存设备信息到数据库
*输入参数:devType:设备类型 *输入参数:devType:设备类型
......
...@@ -18,6 +18,12 @@ typedef struct { ...@@ -18,6 +18,12 @@ typedef struct {
char mac[32]; char mac[32];
int type; int type;
} ScreenDevInfo_t; } ScreenDevInfo_t;
typedef struct {
char keyId[17];
char keyType[8];
char keyRole[8];
char keyName[32];
} LockKeyInfo_t;
int kk_subDb_init(void); int kk_subDb_init(void);
int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
char deviceCode[DEVICE_CODE_MAXLEN],char fatherMac[DEVICE_MAC_MAXLEN],char mac[DEVICE_MAC_MAXLEN], char version[DEVICE_VERSION_MAXLEN],int heartbeat); char deviceCode[DEVICE_CODE_MAXLEN],char fatherMac[DEVICE_MAC_MAXLEN],char mac[DEVICE_MAC_MAXLEN], char version[DEVICE_VERSION_MAXLEN],int heartbeat);
...@@ -46,7 +52,9 @@ int kk_subDev_getDeviceCodes_byProductType(DeviceCode_t *list,char *type); ...@@ -46,7 +52,9 @@ int kk_subDev_getDeviceCodes_byProductType(DeviceCode_t *list,char *type);
int kk_indoor_air_action_add(char *propertyValue,char* deviceCode,int delay,char*gwDeviceCode,char *sceneId,char *type,int epnum); int kk_indoor_air_action_add(char *propertyValue,char* deviceCode,int delay,char*gwDeviceCode,char *sceneId,char *type,int epnum);
int kk_subDev_update_fatherDeviceCode(char *fatherDeviceCode,const char *deviceCode); int kk_subDev_update_fatherDeviceCode(char *fatherDeviceCode,const char *deviceCode);
int kk_subDev_find_fatherDeviceCode(const char *deviceCode,char *fatherDeviceCode); int kk_subDev_find_fatherDeviceCode(const char *deviceCode,char *fatherDeviceCode);
int kk_LockUser_insert_db(char *keyId,char *keyType,char*keyRole,char *keyName,char* deviceCode);
int kk_get_LockUser_list(LockKeyInfo_t *list,const char *deviceCode);
int kk_delete_LockUser_info(const char *deviceCode);
enum{ enum{
DB_SUB_IDX = 0, DB_SUB_IDX = 0,
DB_SUB_ONLINE, DB_SUB_ONLINE,
...@@ -74,4 +82,13 @@ enum{ ...@@ -74,4 +82,13 @@ enum{
DB_SCREEN_ROOMNAME, DB_SCREEN_ROOMNAME,
DB_SCREEN_EXPAND, DB_SCREEN_EXPAND,
}; };
enum{
DB_LOCKUSR_IDX = 0,
DB_LOCKUSR_KEYID,
DB_LOCKUSR_KEYTYPE,
DB_LOCKUSR_KEYROLE,
DB_LOCKUSR_KEYNAME,
DB_LOCKUSR_DEVICECODE,
DB_LOCKUSR_REVERSE,
};
#endif #endif
...@@ -1247,18 +1247,26 @@ static int kk_get_scenes_trigger_info(cJSON *triggerObj,char *sceneId) ...@@ -1247,18 +1247,26 @@ static int kk_get_scenes_trigger_info(cJSON *triggerObj,char *sceneId)
isAnd = sqlite3_column_int(stmt, DB_SCENETRIGGER_ISAND); isAnd = sqlite3_column_int(stmt, DB_SCENETRIGGER_ISAND);
if(isAnd == 0){ if(isAnd == 0){
cJSON *triggerItem = cJSON_CreateObject(); cJSON *triggerItem = cJSON_CreateObject();
type = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_TYPE);
deviceCode = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE); deviceCode = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE);
epNum = sqlite3_column_int(stmt, DB_SCENETRIGGER_EPNUM); epNum = sqlite3_column_int(stmt, DB_SCENETRIGGER_EPNUM);
propertyName = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_PROPERTYNAME); propertyName = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_PROPERTYNAME);
compareType = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPARETYPE); compareType = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPARETYPE);
compareValue = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPAREVALUE); compareValue = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPAREVALUE);
type = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_TYPE);
cJSON_AddStringToObject(triggerItem, "type", type); cJSON_AddStringToObject(triggerItem, "type", type);
cJSON_AddStringToObject(triggerItem, KK_SYNC_DEVICECODE_STR, (char*)deviceCode); cJSON_AddStringToObject(triggerItem, KK_SYNC_DEVICECODE_STR, (char*)deviceCode);
cJSON_AddNumberToObject(triggerItem, KK_SYNC_SCENE_EPNUM_STR, epNum); cJSON_AddNumberToObject(triggerItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
if(strcmp(type,"trigger/thing/event") == 0){//门锁场景同步
cJSON_AddStringToObject(triggerItem, "identifier", (char*)propertyName);
cJSON *comparesJson = cJSON_Parse(compareValue);
if(comparesJson != NULL){
cJSON_AddItemToObject(triggerItem, "compares", comparesJson);
}
}else{
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_PROPERTYNAME_STR, (char*)propertyName); cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_PROPERTYNAME_STR, (char*)propertyName);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPARETYPE_STR, (char*)compareType); cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPARETYPE_STR, (char*)compareType);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPAREValue_STR, (char*)compareValue); cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPAREValue_STR, (char*)compareValue);
}
cJSON_AddItemToArray(triggerAry, triggerItem); cJSON_AddItemToArray(triggerAry, triggerItem);
} }
} }
......
...@@ -63,6 +63,7 @@ char * g_filerToPlatTable[] = ...@@ -63,6 +63,7 @@ char * g_filerToPlatTable[] =
(char *){KK_THING_SERVICE_ACTIVEBUTTON}, (char *){KK_THING_SERVICE_ACTIVEBUTTON},
(char *){KK_THING_SERVICE_HISTORYALARM}, (char *){KK_THING_SERVICE_HISTORYALARM},
(char *){KK_THING_SERVICE_DEL_HISTORYALARM}, (char *){KK_THING_SERVICE_DEL_HISTORYALARM},
(char *){KK_THING_SERVICE_GETKEYLIST},
}; };
static char s_ccuid[DEVICE_CODE_LEN] = {0}; static char s_ccuid[DEVICE_CODE_LEN] = {0};
static char s_Version[VERSION_MAXLEN] = {0}; static char s_Version[VERSION_MAXLEN] = {0};
...@@ -1534,6 +1535,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -1534,6 +1535,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
} }
dm_mgr_update_timestamp_by_devicecode(node->deviceCode,0); dm_mgr_update_timestamp_by_devicecode(node->deviceCode,0);
dm_mgr_set_dev_onoffline(node,1); dm_mgr_set_dev_onoffline(node,1);
kk_delete_LockUser_info((const char*)node->deviceCode);
//kk_ipc_send(IPC_MID2APP,data,strlen(data)+1); //kk_ipc_send(IPC_MID2APP,data,strlen(data)+1);
//dm_mgr_subdev_delete(devCode->valuestring); //dm_mgr_subdev_delete(devCode->valuestring);
...@@ -1630,9 +1632,27 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -1630,9 +1632,27 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(pack==1){ if(pack==1){
INFO_PRINT("kk_platMsg_handle data: event pack post\n"); INFO_PRINT("kk_platMsg_handle data: event pack post\n");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL); dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL);
if(strcmp(eventItem->identifier,"KeyAddNotification") == 0){
char KeyTypeBuf[8] = {0};
char KeyRoleBuf[8] = {0};
cJSON * keyId = cJSON_GetObjectItem(jsonPay, "KeyID");
cJSON * KeyRole = cJSON_GetObjectItem(jsonPay, "KeyRole");
cJSON * KeyType = cJSON_GetObjectItem(jsonPay, "KeyType");
if(keyId != NULL && KeyRole != NULL && KeyType != NULL){
if(KeyType->type == cJSON_Number){
sprintf(KeyTypeBuf,"%d",KeyType->valueint);
}
if(KeyRole->type == cJSON_Number){
sprintf(KeyRoleBuf,"%d",KeyRole->valueint);
}
kk_LockUser_insert_db(keyId->valuestring,KeyTypeBuf,KeyRoleBuf,"",info_dcode->valuestring);
}
}
if(strcmp(eventItem->identifier,"LockOpenNotification") == 0){
kk_scene_iftt_check(info_dcode->valuestring,jsonPay); kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
} }
} }
}
else if(strcmp(eventItem->identifier,MSG_PROPERTY_STR) != 0 && else if(strcmp(eventItem->identifier,MSG_PROPERTY_STR) != 0 &&
eventItem->output_data_number == 0){ eventItem->output_data_number == 0){
itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier); itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier);
......
...@@ -776,7 +776,11 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value) ...@@ -776,7 +776,11 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value)
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
_kk_scene_lock(); _kk_scene_lock();
if(epNum == -1){
sqlCmd = sqlite3_mprintf("UPDATE SceneActionInfo SET active='%d' WHERE deviceCode = '%s'",value,deviceCode);
}else{
sqlCmd = sqlite3_mprintf("UPDATE SceneActionInfo SET active='%d' WHERE deviceCode = '%s' and epNum= '%d'",value,deviceCode,epNum); sqlCmd = sqlite3_mprintf("UPDATE SceneActionInfo SET active='%d' WHERE deviceCode = '%s' and epNum= '%d'",value,deviceCode,epNum);
}
INFO_PRINT("kk_scene_update_device_active sqlCmd:%s\n",sqlCmd); INFO_PRINT("kk_scene_update_device_active sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){ if( rc != SQLITE_OK ){
...@@ -784,8 +788,11 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value) ...@@ -784,8 +788,11 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value)
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
if(epNum == -1){
sqlCmd = sqlite3_mprintf("UPDATE SceneTriggerInfo SET active='%d' WHERE deviceCode = '%s'",value,deviceCode);
}else{
sqlCmd = sqlite3_mprintf("UPDATE SceneTriggerInfo SET active='%d' WHERE deviceCode = '%s' and epNum= '%d'",value,deviceCode,epNum); sqlCmd = sqlite3_mprintf("UPDATE SceneTriggerInfo SET active='%d' WHERE deviceCode = '%s' and epNum= '%d'",value,deviceCode,epNum);
}
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){ if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
......
...@@ -49,6 +49,7 @@ enum{ ...@@ -49,6 +49,7 @@ enum{
DB_SCENEACTION_DELAY, DB_SCENEACTION_DELAY,
DB_SCENEACTION_SCENEID, DB_SCENEACTION_SCENEID,
DB_SCENEACTION_GWDEVICECODE, DB_SCENEACTION_GWDEVICECODE,
DB_SCENEACTION_ACTIVE,
}; };
enum{ enum{
......
...@@ -583,6 +583,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac ...@@ -583,6 +583,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
if(action == NULL || gwdeviceCode == NULL || sceneId == NULL){ if(action == NULL || gwdeviceCode == NULL || sceneId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,sceneId); cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,sceneId);
cJSON_AddItemToObject(root,MSG_SCENE_ACTIONS,action); cJSON_AddItemToObject(root,MSG_SCENE_ACTIONS,action);
...@@ -982,6 +983,37 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons ...@@ -982,6 +983,37 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons
return res; return res;
} }
static int kk_scene_parse_trigger_event_type(const char *type,const cJSON *item,const char *sceneId,int isAnd)
{
int res = FAIL_RETURN;
cJSON *deviceCode,*epNum;
cJSON *propertyName;
cJSON *compares;
int ep = 0;
if(type == NULL || item == NULL || sceneId == NULL){
return INVALID_PARAMETER;
}
deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return FAIL_RETURN;
epNum = cJSON_GetObjectItem(item,MSG_SCENE_EPNUM);
if(epNum == NULL){
ep = 1;
}else{
if(epNum->type==cJSON_Number){
ep = epNum->valueint;
}else{
ep = atoi(epNum->valuestring);
}
}
propertyName = cJSON_GetObjectItem(item,"identifier");
if(propertyName == NULL) return FAIL_RETURN;
compares = cJSON_GetObjectItem(item,"compares");
if(compares == NULL) return FAIL_RETURN;
char *compareValue = cJSON_PrintUnformatted(compares);
res = kk_scene_insert_scene_trigger(type,deviceCode->valuestring,ep,
propertyName->valuestring,"",compareValue,sceneId,isAnd);
return res;
}
/************************************************************ /************************************************************
*功能描述:解析场景触发条件 *功能描述:解析场景触发条件
*输入参数:str:触发内容的CJSON字串; *输入参数:str:触发内容的CJSON字串;
...@@ -1028,6 +1060,12 @@ int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId) ...@@ -1028,6 +1060,12 @@ int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId)
time_t newStart = kk_scene_creat_timer_starttime(weekflag,atoi(timestr->valuestring),current); time_t newStart = kk_scene_creat_timer_starttime(weekflag,atoi(timestr->valuestring),current);
kk_scene_insert_scene_timer(newStart,weekflag,sceneId); kk_scene_insert_scene_timer(newStart,weekflag,sceneId);
kk_scene_push_timer_info(newStart,weekflag,(char*)sceneId); kk_scene_push_timer_info(newStart,weekflag,(char*)sceneId);
}else if(!strcmp("trigger/thing/event",type->valuestring)){
res = kk_scene_parse_trigger_event_type(type->valuestring,item,sceneId,0);
if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_scene_parse_trigger_event_type fail!!!\n");
return res;
}
} }
item = item->next; item = item->next;
} }
...@@ -1610,7 +1648,7 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId,int is ...@@ -1610,7 +1648,7 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId,int is
int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const char *msgId) int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const char *msgId)
{ {
int res = 0; int res = 0;
kk_tsl_t *pSceneShadow = NULL;
if(args == NULL||sceneId == NULL){ if(args == NULL||sceneId == NULL){
ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__); ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__);
return INVALID_PARAMETER; return INVALID_PARAMETER;
...@@ -1627,12 +1665,10 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c ...@@ -1627,12 +1665,10 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
cJSON *enable = cJSON_GetObjectItem(args,MSG_SCENE_ENABLE); cJSON *enable = cJSON_GetObjectItem(args,MSG_SCENE_ENABLE);
if(enable == NULL) return FAIL_RETURN; if(enable == NULL) return FAIL_RETURN;
if(!isUpdate){ if(!isUpdate){
kk_tsl_t *pSceneShadow = NULL;
HAL_GetTime_s(sceneId);//use time to create the sceneId HAL_GetTime_s(sceneId);//use time to create the sceneId
pSceneShadow = kk_scene_shadow(); pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){ if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId);
dm_msg_scene_event_post(MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId);
} }
} }
...@@ -1672,6 +1708,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c ...@@ -1672,6 +1708,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
return FAIL_RETURN; return FAIL_RETURN;
} }
} }
if(pSceneShadow != NULL){
dm_msg_scene_event_post(MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId);
}
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -2499,6 +2538,51 @@ static int kk_scene_invokeService_find(const char *sceneId) ...@@ -2499,6 +2538,51 @@ static int kk_scene_invokeService_find(const char *sceneId)
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
return find; return find;
} }
static int _kk_check_lock_trigger_info(char *proName,char *value,char *keyId,char *keyRole,char *keyType)
{
int cnt = 0;
cJSON *compareValue;
cJSON* propertyName;
cJSON* pSub;
if(proName == NULL ||value == NULL ||keyId == NULL){
return INVALID_PARAMETER;
}
if(!strcmp(proName,"LockOpenNotification") && strstr(value ,"[") != NULL && strstr(value ,"]") != NULL ){
cJSON* json = cJSON_Parse(value);
if(json == NULL){
return FAIL_RETURN;
}
int array_size = cJSON_GetArraySize ( json );
if(array_size == 0){
return FAIL_RETURN;
}
for(cnt = 0; cnt < array_size; cnt++){
pSub = cJSON_GetArrayItem(json, cnt);
if(NULL == pSub ){continue ; }
propertyName = cJSON_GetObjectItem(pSub,"propertyName");
if(propertyName == NULL){continue ; }
if(strcmp(propertyName->valuestring,"KeyType") == 0){
compareValue = cJSON_GetObjectItem(pSub,"compareValue");
if(strcmp(compareValue->valuestring,keyType) != 0){
return FAIL_RETURN;
}else{
continue;
}
}
if(strcmp(propertyName->valuestring,"KeyID") != 0){
compareValue = cJSON_GetObjectItem(pSub,"compareValue");
if(strcmp(compareValue->valuestring,keyId) != 0){
return FAIL_RETURN;
}
}
}
return SUCCESS_RETURN;
}else if(!strcmp(proName,"LockState") && !strcmp(value,"1")){
return SUCCESS_RETURN;
}
return FAIL_RETURN;
}
/************************************************************ /************************************************************
*功能描述:查找是否有场景触发 *功能描述:查找是否有场景触发
*输入参数:param:属性CJSON内容 *输入参数:param:属性CJSON内容
...@@ -2515,12 +2599,33 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param) ...@@ -2515,12 +2599,33 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
char *identifier = NULL; char *identifier = NULL;
char *compareType = NULL; char *compareType = NULL;
char *compareValue = NULL; char *compareValue = NULL;
char keyRoleBuf[8] = {0};
char keyTypeBuf[8] = {0};
int propertyValueType = 0; int propertyValueType = 0;
int isAnd = 0; int isAnd = 0;
int sceneType = 0,isEnable = 0; int sceneType = 0,isEnable = 0;
int LockOpenTrigger = 0;
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
if(param == NULL){
return res;
}
cJSON *KeyID = cJSON_GetObjectItem(param,"KeyID");
cJSON *KeyRole = cJSON_GetObjectItem(param,"KeyRole");
cJSON *KeyType = cJSON_GetObjectItem(param,"KeyType");
if(KeyID != NULL && KeyRole != NULL && KeyType != NULL){
LockOpenTrigger = 1;
if(KeyRole->type == cJSON_Number){
sprintf(keyRoleBuf,"%d",KeyRole->valueint);
}else{
strcpy(keyRoleBuf,KeyRole->valuestring);
}
if(KeyType->type == cJSON_Number){
sprintf(keyTypeBuf,"%d",KeyType->valueint);
}else{
strcpy(keyTypeBuf,KeyType->valuestring);
}
}
sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo WHERE deviceCode= '%s' and active = '%d'",deviceCode,1);//actice判断设备是否移入待分配 sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo WHERE deviceCode= '%s' and active = '%d'",deviceCode,1);//actice判断设备是否移入待分配
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
...@@ -2531,14 +2636,25 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param) ...@@ -2531,14 +2636,25 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
isAnd = sqlite3_column_int(stmt,DB_SCENETRIGGER_ISAND); isAnd = sqlite3_column_int(stmt,DB_SCENETRIGGER_ISAND);
res = kk_scene_get_scene_info(sceneId,&sceneType,&isEnable); res = kk_scene_get_scene_info(sceneId,&sceneType,&isEnable);
if(res == SUCCESS_RETURN && isEnable && isAnd == 0){ if(res == SUCCESS_RETURN && isEnable && isAnd == 0){
if(LockOpenTrigger == 1){
res = _kk_check_lock_trigger_info(identifier,compareValue,KeyID->valuestring,keyRoleBuf,keyTypeBuf);
if(res == SUCCESS_RETURN){
INFO_PRINT("[%d]kk_scene_check_condition enter!!!\n",__LINE__);
res = kk_scene_check_condition(sceneId);
if(res == SUCCESS_RETURN){
res = kk_scene_check_trigger_condition(sceneId);
if(res == SUCCESS_RETURN){
/*check是否时场景嵌套类型*/
res = kk_scene_execute_action(sceneId,NULL);
}
}
}
}else{
cJSON *item = cJSON_GetObjectItem(param,identifier); cJSON *item = cJSON_GetObjectItem(param,identifier);
if(item != NULL){ if(item != NULL){
propertyValueType = kk_dm_get_property_type(deviceCode,identifier); propertyValueType = kk_dm_get_property_type(deviceCode,identifier);
res = kk_scene_check_value(compareType,compareValue,item,propertyValueType); res = kk_scene_check_value(compareType,compareValue,item,propertyValueType);
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
INFO_PRINT("[%d]kk_scene_check_condition enter!!!\n",__LINE__); INFO_PRINT("[%d]kk_scene_check_condition enter!!!\n",__LINE__);
res = kk_scene_check_condition(sceneId); res = kk_scene_check_condition(sceneId);
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
...@@ -2551,6 +2667,8 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param) ...@@ -2551,6 +2667,8 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
} }
} }
} }
}
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
...@@ -2687,7 +2805,8 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2687,7 +2805,8 @@ static int _kk_rebuild_device_active(char *sceneid)
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
char *pDeviceCode = NULL; char *pDeviceCode = NULL;
char *pSceneType = NULL; char *pSceneType = NULL;
char *gwDeviceCode =NULL; const unsigned char *gwDeviceCode = NULL;
char gwDeviceCodeBuf[32] = {0};
int epNum = 0; int epNum = 0;
int isMuti = 0; int isMuti = 0;
int count = 0; int count = 0;
...@@ -2695,7 +2814,7 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2695,7 +2814,7 @@ static int _kk_rebuild_device_active(char *sceneid)
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneid = '%s' and active = '%d'",sceneid,1); sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneid = '%s' and active != '%d'",sceneid,0);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
cJSON *array = cJSON_CreateArray(); cJSON *array = cJSON_CreateArray();
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
...@@ -2706,7 +2825,7 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2706,7 +2825,7 @@ static int _kk_rebuild_device_active(char *sceneid)
} }
count++; count++;
epNum = sqlite3_column_int(stmt, DB_SCENEACTION_EPNUM); epNum = sqlite3_column_int(stmt, DB_SCENEACTION_EPNUM);
gwDeviceCode = (char *)sqlite3_column_text(stmt, DB_SCENEACTION_GWDEVICECODE); gwDeviceCode = sqlite3_column_text(stmt, DB_SCENEACTION_GWDEVICECODE);
if(strcmp(pSceneType,"action/thing/group") == 0){ if(strcmp(pSceneType,"action/thing/group") == 0){
cJSON *arrayParam = cJSON_CreateObject(); cJSON *arrayParam = cJSON_CreateObject();
cJSON_AddStringToObject(arrayParam,MSG_SCENE_TYPE,pSceneType); cJSON_AddStringToObject(arrayParam,MSG_SCENE_TYPE,pSceneType);
...@@ -2714,6 +2833,7 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2714,6 +2833,7 @@ static int _kk_rebuild_device_active(char *sceneid)
cJSON_AddNumberToObject(arrayParam,MSG_SCENE_EPNUM,epNum); cJSON_AddNumberToObject(arrayParam,MSG_SCENE_EPNUM,epNum);
isMuti = 1; isMuti = 1;
cJSON_AddItemToArray(array,arrayParam); cJSON_AddItemToArray(array,arrayParam);
memcpy(gwDeviceCodeBuf,(char*)gwDeviceCode,strlen((char*)gwDeviceCode));
}else{ }else{
kk_scene_action_detail_t info = {0}; kk_scene_action_detail_t info = {0};
char *propertyName = (char *)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYNAME); char *propertyName = (char *)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYNAME);
...@@ -2725,7 +2845,6 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2725,7 +2845,6 @@ static int _kk_rebuild_device_active(char *sceneid)
info.epNum = epNum; info.epNum = epNum;
info.delay = idelay; info.delay = idelay;
isMuti = 0; isMuti = 0;
if(strcmp(propertyName,"LightStripSpecialAction") == 0){ if(strcmp(propertyName,"LightStripSpecialAction") == 0){
if(strstr(propertyValueStr,"{")!=NULL &&strstr(propertyValueStr,"}")!=NULL){ if(strstr(propertyValueStr,"{")!=NULL &&strstr(propertyValueStr,"}")!=NULL){
cJSON* propertyValueJson = cJSON_Parse(propertyValueStr); cJSON* propertyValueJson = cJSON_Parse(propertyValueStr);
...@@ -2733,7 +2852,7 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2733,7 +2852,7 @@ static int _kk_rebuild_device_active(char *sceneid)
ERROR_PRINT("cJSON_Parse ERROR!!!"); ERROR_PRINT("cJSON_Parse ERROR!!!");
return FAIL_RETURN; return FAIL_RETURN;
} }
_kk_scene_LightStripSpecialAction_handle(propertyValueJson,pDeviceCode,epNum,idelay,(char*)sceneid,gwDeviceCode); _kk_scene_LightStripSpecialAction_handle(propertyValueJson,pDeviceCode,epNum,idelay,(char*)sceneid,(char*)gwDeviceCode);
cJSON_Delete(propertyValueJson); cJSON_Delete(propertyValueJson);
} }
}else if(strcmp(propertyName,"CustomAction") == 0){//空调内机的场景属性 }else if(strcmp(propertyName,"CustomAction") == 0){//空调内机的场景属性
...@@ -2745,12 +2864,12 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2745,12 +2864,12 @@ static int _kk_rebuild_device_active(char *sceneid)
} }
if(strcmp(node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0 || strcmp(node->productType,"airConditioning") == 0 if(strcmp(node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0 || strcmp(node->productType,"airConditioning") == 0
||strcmp(node->productType,"fanCoil") == 0){ ||strcmp(node->productType,"fanCoil") == 0){
kk_indoor_air_action_add(propertyValueStr,pDeviceCode,idelay,gwDeviceCode,sceneid,"action/thing/setProperty",epNum); kk_indoor_air_action_add(propertyValueStr,pDeviceCode,idelay,(char*)gwDeviceCode,sceneid,"action/thing/setProperty",epNum);
} }
} }
}else{ }else{
memcpy(info.propertyValue,propertyValueStr,strlen(propertyValueStr)); memcpy(info.propertyValue,propertyValueStr,strlen(propertyValueStr));
kk_scene_action_add(gwDeviceCode,sceneid,info); kk_scene_action_add((char*)gwDeviceCode,sceneid,info);
} }
} }
} }
...@@ -2758,7 +2877,9 @@ static int _kk_rebuild_device_active(char *sceneid) ...@@ -2758,7 +2877,9 @@ static int _kk_rebuild_device_active(char *sceneid)
kk_scene_delete_send_to_gw(sceneid); kk_scene_delete_send_to_gw(sceneid);
}else{ }else{
if(isMuti){ if(isMuti){
kk_scene_muticontrol_info_send(array,gwDeviceCode,sceneid,1); kk_scene_delete_send_to_gw(sceneid);
usleep(1000*500);
kk_scene_muticontrol_info_send(array,gwDeviceCodeBuf,sceneid,1);
}else{ }else{
kk_scene_action_info_send(1); kk_scene_action_info_send(1);
} }
...@@ -2774,14 +2895,35 @@ int kk_scene_rebuild_device_active(char *deviceCode,int epNum) ...@@ -2774,14 +2895,35 @@ int kk_scene_rebuild_device_active(char *deviceCode,int epNum)
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
char *zErrMsg = 0; char *zErrMsg = 0;
char *scene_id=NULL; char *scene_id=NULL;
char scene_id_bak[64][16] = {0};
int i = 0,count = 0;
int repeat = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE deviceCode = '%s' and epNum= '%d'",deviceCode,epNum); if(epNum == -1){
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE deviceCode = '%s'",deviceCode);//删除设备情况下
}else{
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE deviceCode = '%s' and epNum= '%d'",deviceCode,epNum);//移动到待分配情况下
}
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
repeat = 0;
scene_id = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_SCENEID); scene_id = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_SCENEID);
for(i = 0; i < count; i++){//检测同个设备在同个场景中设置不同的动作,只需rebuild一次
if(strcmp(scene_id_bak[i],scene_id) == 0){
repeat = 1;
break;
}
}
if(repeat){
continue;
}
_kk_rebuild_device_active(scene_id); _kk_rebuild_device_active(scene_id);
usleep(100*1000); if(count < 64){
memcpy(scene_id_bak[count],scene_id,strlen(scene_id));
count++;
}
usleep(500*1000);
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
......
...@@ -51,6 +51,17 @@ ...@@ -51,6 +51,17 @@
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"dataType": { "dataType": {
...@@ -141,6 +152,17 @@ ...@@ -141,6 +152,17 @@
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"dataType": { "dataType": {
...@@ -189,6 +211,7 @@ ...@@ -189,6 +211,7 @@
"PowerSwitch", "PowerSwitch",
"Brightness", "Brightness",
"ColorTemperature", "ColorTemperature",
"ColorTempSwitch",
"FadeTime", "FadeTime",
"LowBrightness", "LowBrightness",
"HighBrightness" "HighBrightness"
...@@ -260,6 +283,19 @@ ...@@ -260,6 +283,19 @@
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"accessMode":"rw",
"required":true,
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"accessMode": "rw", "accessMode": "rw",
...@@ -352,6 +388,17 @@ ...@@ -352,6 +388,17 @@
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"dataType": { "dataType": {
......
...@@ -44,13 +44,24 @@ ...@@ -44,13 +44,24 @@
"specs": { "specs": {
"min": "0", "min": "0",
"max": "100", "max": "100",
"unit": "K", "unit": "%",
"unitName": "百分比", "unitName": "百分比",
"step": "1" "step": "1"
} }
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"dataType": { "dataType": {
...@@ -134,13 +145,24 @@ ...@@ -134,13 +145,24 @@
"specs": { "specs": {
"min": "0", "min": "0",
"max": "100", "max": "100",
"unit": "K", "unit": "%",
"unitName": "百分比", "unitName": "百分比",
"step": "1" "step": "1"
} }
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"dataType": { "dataType": {
...@@ -189,6 +211,7 @@ ...@@ -189,6 +211,7 @@
"PowerSwitch", "PowerSwitch",
"Brightness", "Brightness",
"ColorTemperature", "ColorTemperature",
"ColorTempSwitch",
"FadeTime", "FadeTime",
"LowBrightness", "LowBrightness",
"HighBrightness" "HighBrightness"
...@@ -253,13 +276,26 @@ ...@@ -253,13 +276,26 @@
"specs": { "specs": {
"min": "0", "min": "0",
"max": "100", "max": "100",
"unit": "K", "unit": "%",
"unitName": "百分比", "unitName": "百分比",
"step": "1" "step": "1"
} }
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"accessMode":"rw",
"required":true,
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"accessMode": "rw", "accessMode": "rw",
...@@ -345,13 +381,24 @@ ...@@ -345,13 +381,24 @@
"specs": { "specs": {
"min": "0", "min": "0",
"max": "100", "max": "100",
"unit": "K", "unit": "%",
"unitName": "百分比", "unitName": "百分比",
"step": "1" "step": "1"
} }
}, },
"name": "色温" "name": "色温"
}, },
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{ {
"identifier": "FadeTime", "identifier": "FadeTime",
"dataType": { "dataType": {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment