Commit d2e01e55 authored by chen.weican's avatar chen.weican

【修改内容】设备强制退网后中控端保留数据修改

【提交人】陈伟灿
parent 00eeb130
......@@ -461,7 +461,7 @@ int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLE
(memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) {
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
search_node->timestamp = timestamp;
if(search_node->dev_type == KK_DM_DEVICE_SUBDEV){
if(search_node->dev_type == KK_DM_DEVICE_SUBDEV && timestamp != 0){
dm_mgr_update_gw_timestamp_by_devicecode(search_node->fatherDeviceCode,timestamp);
}
_dm_mgr_mutex_unlock();
......@@ -502,7 +502,6 @@ int dm_mgr_set_dev_onoffline(dm_mgr_dev_node_t *node,int isOffline)
if(node == NULL){
return INVALID_PARAMETER;
}
if(isOffline){
INFO_PRINT("[%s]dev timeout,send offline\n",__FUNCTION__);
node->isOffline = KK_DEV_OFFLINE;
......@@ -561,12 +560,14 @@ int dm_mgr_check_heartbeat_timeout(time_t timestamp)
}
if((timestamp - search_node->timestamp) >= search_node->hb_timeout){
if(search_node->isOffline != KK_DEV_OFFLINE){
INFO_PRINT("[%s]send offline\n",__FUNCTION__);
dm_mgr_set_dev_onoffline(search_node,1);
}
}
else{
if(search_node->isOffline == KK_DEV_OFFLINE){
/*如果是离线状态,上报在线给云端*/
INFO_PRINT("[%s]send online\n",__FUNCTION__);
dm_mgr_set_dev_onoffline(search_node,0);
}
}
......
......@@ -85,5 +85,10 @@ int kk_subFreshAir_query_epnums(const char *deviceCode,int epList[]);
int kk_subFreshAir_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]);
int kk_subFreshAir_db_update_value(const char *deviceCode,const char *identifier,const char* value,int epNum);
int kk_indoor_air_get_online(const char *deviceCode,int ep);
int kk_subAirSwitch_get_online(const char *deviceCode,int ep);
int kk_subFreshAir_get_online(const char *deviceCode,int ep);
int kk_indoorAir_db_update_online(const char *deviceCode,int online,int epNum);
int kk_subFreshAir_db_update_online(const char *deviceCode,int online,int epNum);
int kk_subAirSwitch_db_update_online(const char *deviceCode,int online,int epNum);
#endif
......@@ -421,11 +421,9 @@ int kk_subDev_check_auth(int devType)
char *zErrMsg = 0;
const char *searchCmd = "select * from SubDeviceInfo WHERE devType = '%d';";
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
printf("------------------------------------------------------->111\n");
sqlCmd = sqlite3_mprintf(searchCmd,devType);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
printf("------------------------------------------------------->222\n");
char *pDeviceCode = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE);
char *pProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE);
kk_msg_cloud_status_notify(pDeviceCode,pProductCode);
......
......@@ -28,7 +28,7 @@
extern sqlite3 *g_kk_pDb;
static int kk_check_multi_ep_num(char *deviceCode);
static int kk_get_scenes_actions_info(cJSON *actionArray,int id);
static int kk_get_scenes_actions_info(cJSON *actionArray,int id,char *productType,char *actionRoomId);
static int kk_get_panel_scenes_actions_info(cJSON *actionArray,int id);
static int kk_get_panel_scenes_info(cJSON *actionItem,int id);
......@@ -851,14 +851,14 @@ static int kk_get_devices_info(cJSON *data)
return SUCCESS_RETURN;
}
int kk_get_room_name_by_scene_id(int scene_id,char *room_name)
int kk_get_roomId_by_scene_id(int scene_id,char *roomId)
{
int res = -1;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
int dbepNum = 0;
char *roomNameStr =NULL;
char *roomIdStr =NULL;
const char *selectCmd = "select * from SceneInfo WHERE sceneId = '%d';";
......@@ -866,8 +866,8 @@ int kk_get_room_name_by_scene_id(int scene_id,char *room_name)
sqlCmd = sqlite3_mprintf(selectCmd,scene_id);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
roomNameStr = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ROOMID);
memcpy(room_name,roomNameStr,strlen(roomNameStr));
roomIdStr = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ROOMID);
memcpy(roomId,roomIdStr,strlen(roomIdStr));
res = 0;
break;
}
......@@ -1033,7 +1033,7 @@ static int kk_get_panel_scenes_actions_info(cJSON *actionItem,int id)
static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
static int kk_get_scenes_actions_info(cJSON *actionArray,int id,char *productType,char *actionRoomId)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
......@@ -1041,7 +1041,7 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
char *deviceCode = NULL;
char *propertyName = NULL;
char *propertyValue = NULL;
char room_name[64] = {0};
char room_id[64] = {0};
cJSON *prtyObj = NULL;
char *type = NULL;
......@@ -1067,7 +1067,7 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
propertyValue = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_PROPERTYVALUE);
type = (char*)sqlite3_column_text(stmt, DB_SCENEACTION_TYPE);
kk_get_room_name_by_scene_id(scene_id,room_name);
actionItem = cJSON_CreateObject();
......@@ -1087,9 +1087,7 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
}
//cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_TYPE_STR, type);
if(strstr(propertyValue,"{")!=NULL && strstr(propertyValue,"}")!=NULL){
prtyObj = cJSON_Parse(propertyValue);
if(prtyObj != NULL){
......@@ -1097,14 +1095,20 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
}else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
}
}else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
}
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_name);
if(strcmp(productType,"") != 0){
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PRODUCTTYPE, productType);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, actionRoomId);
cJSON_AddItemToArray(actionArray, actionItem);
break;
}else{
kk_get_roomId_by_scene_id(scene_id,room_id);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_id);
cJSON_AddItemToArray(actionArray, actionItem);
}
}
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return SUCCESS_RETURN;
......@@ -1342,6 +1346,8 @@ static int kk_get_scenes_info(cJSON *data)
char *name = NULL;
char *roomId = NULL;
char *sceneId = NULL;
char *productType = NULL;
char *actionRoomId = NULL;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(data == NULL){
return FAIL_RETURN;
......@@ -1363,10 +1369,12 @@ static int kk_get_scenes_info(cJSON *data)
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_NANE_STR, name);
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID);
roomId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ROOMID);
productType = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_PRODUCTTYPE);
actionRoomId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ACTIONROOMID);
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_ROOMID_STR, roomId);
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENEID_STR, sceneId);
cJSON *actionArray = cJSON_CreateArray();
kk_get_scenes_actions_info(actionArray,atoi(sceneId));
kk_get_scenes_actions_info(actionArray,atoi(sceneId),productType,actionRoomId);
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_ACTIONS_STR, actionArray);
cJSON *triggerObj = cJSON_CreateObject();
kk_get_scenes_trigger_info(triggerObj,sceneId);
......
......@@ -1412,17 +1412,17 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(strcmp(search_node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0){
cJSON *epNumJson = cJSON_GetObjectItem(jsonPay, "epNum");
if(epNumJson == NULL) goto error;
kk_indoorAir_db_update_online(search_node,0,epNumJson->valueint);
kk_indoorAir_db_update_online((char*)search_node->deviceCode,0,epNumJson->valueint);
_kk_subDevice_online_to_app(info,payload);
}else if(strcmp(search_node->productType,KK_DM_AIR_SWITCH_GATEWAY_TYPE) == 0){
cJSON *epNumJson = cJSON_GetObjectItem(jsonPay, "epNum");
if(epNumJson == NULL) goto error;
kk_subAirSwitch_db_update_online(search_node,0,epNumJson->valueint);
kk_subAirSwitch_db_update_online((char*)search_node->deviceCode,0,epNumJson->valueint);
_kk_subDevice_online_to_app(info,payload);
}else if(strcmp(search_node->productType,KK_DM_FRESHAIR_GATEWAY_TYPE) == 0){
cJSON *epNumJson = cJSON_GetObjectItem(jsonPay, "epNum");
if(epNumJson == NULL) goto error;
kk_subFreshAir_db_update_online(search_node,0,epNumJson->valueint);
kk_subFreshAir_db_update_online((char*)search_node->deviceCode,0,epNumJson->valueint);
_kk_subDevice_online_to_app(info,payload);
}
}
......@@ -1489,12 +1489,20 @@ void kk_platMsg_handle(void* data, char* chalMark){
free(outstr);
}
}else if(strstr(msgType->valuestring, KK_THING_TOPO_DELETE_MSG) != NULL){
dm_mgr_dev_node_t *node = NULL;
INFO_PRINT("kk_platMsg_handle data: handle delete\n");
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
kk_ipc_send(IPC_MID2APP,data,strlen(data)+1);
dm_mgr_subdev_delete(devCode->valuestring);
res = dm_mgr_get_device_by_devicecode(devCode->valuestring,&node);
if (res < SUCCESS_RETURN) {
goto error;
}
printf("--------------------------------------->11111111111111111111113333\n");
dm_mgr_update_timestamp_by_devicecode(node->deviceCode,0);
dm_mgr_set_dev_onoffline(node,1);
//kk_ipc_send(IPC_MID2APP,data,strlen(data)+1);
//dm_mgr_subdev_delete(devCode->valuestring);
}else if(strstr(msgType->valuestring, KK_THING_EVENT_MESSAGE) != NULL && \
strstr(msgType->valuestring, KK_THING_EVENT_POST) != NULL){
......
......@@ -51,7 +51,9 @@ int kk_scene_db_init(void)
sceneName varchar(255), \
sceneType INTEGER, \
enable INTEGER, \
sceneId varchar(255) UNIQUE)";
sceneId varchar(255) UNIQUE, \
productType varchar(255),\
actionRoomId varchar(255))";
if (sqlite3_exec(ctx->pDb, pSceneTable, NULL, NULL, &pcErr) != SQLITE_OK)
{
......@@ -247,18 +249,18 @@ int kk_scene_update_scene_enable(int enable,const char *sceneId)
*其他说明:
*************************************************************/
int kk_scene_insert_scene_info(const char* roomId,const char* sceneName,int sceneType,int enable,const char* sceneId)
int kk_scene_insert_scene_info(const char* roomId,const char* sceneName,int sceneType,int enable,const char* sceneId,char *productType,char *actionRoomId)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *insertCmd = "insert into SceneInfo (roomId,sceneName, sceneType,enable,sceneId) \
values ('%s','%s','%d','%d','%s');";
const char *insertCmd = "insert into SceneInfo (roomId,sceneName, sceneType,enable,sceneId,productType,actionRoomId) \
values ('%s','%s','%d','%d','%s','%s','%s');";
_kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,roomId,sceneName,sceneType,enable,sceneId);
sqlCmd = sqlite3_mprintf(insertCmd,roomId,sceneName,sceneType,enable,sceneId,productType,actionRoomId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
......@@ -273,6 +275,64 @@ int kk_scene_insert_scene_info(const char* roomId,const char* sceneName,int scen
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:更新场景设备类型
*输入参数:sceneId:场景Id
productType:类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_update_productType(const char *sceneId,char *productType)
{
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
_kk_scene_lock();
sqlCmd = sqlite3_mprintf("UPDATE SceneInfo SET productType='%s' WHERE sceneId= '%s'",productType,sceneId);
INFO_PRINT("kk_scene_update_productType 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 updata data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:更新场景设备类型
*输入参数:sceneId:场景Id
productType:类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_update_actionRoomId(const char *sceneId,char *roomId)
{
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
_kk_scene_lock();
sqlCmd = sqlite3_mprintf("UPDATE SceneInfo SET actionRoomId='%s' WHERE sceneId= '%s'",roomId,sceneId);
INFO_PRINT("kk_scene_update_actionRoomId 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 updata data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 添加情景面板信息到数据库
*输入参数: name:场景名称
enable: 1,使能;0,不使能
......
......@@ -15,6 +15,8 @@ enum{
DB_SCENEINFO_SCENETYPE,
DB_SCENEINFO_ENABLE,
DB_SCENEINFO_SCENEID,
DB_SCENEINFO_PRODUCTTYPE,
DB_SCENEINFO_ACTIONROOMID,
};
enum{
......@@ -93,12 +95,13 @@ int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,i
char repeat_days,const char* sceneId);
int kk_scene_insert_scene_trigger(const char* type,const char* deviceCode,int epNum,const char* propertyName,
const char* compareType,const char* compareValue,const char* sceneId,int isAnd);
int kk_scene_insert_scene_info(const char* roomName,const char* name,int sceneType,int enable,const char* sceneId);
int kk_scene_insert_scene_info(const char* roomId,const char* sceneName,int sceneType,int enable,const char* sceneId,char *productType,char *actionRoomId);
int kk_scene_update_scene_enable(int enable,const char *sceneId);
int kk_scene_db_init(void);
int kk_scene_insert_panel_scene_info(int bindType,char *buttonId,char *deviceCode,const char* sceneId,const char* roomId,const char* productType);
int kk_scene_delete_quickpanel_info(char *buttonId,char* deviceCode);
int kk_scene_delete_panel_scene_info(char *buttonId,char *deviceCode);
int kk_scene_deleteall_panel_scene_info(char *deviceCode);
int kk_scene_update_productType(const char *sceneId,char *productType);
int kk_scene_update_actionRoomId(const char *sceneId,char *roomId);
#endif
......@@ -295,7 +295,6 @@ void *kk_scene_yield(void *args)
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_init(void)
{
int res = 0;
......@@ -829,7 +828,6 @@ void BodySensorNoActive_report(char *deviceCode,int noAct)
}
int BodySensorTrigger_check(void)
{
BodySensorNoActive *ptr = NULL;
......@@ -1409,6 +1407,8 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
roomId = cJSON_GetObjectItem(item,MSG_AREA_ROOM_ROOMID);
}
delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY);
kk_scene_update_productType((char*)sceneId,productType->valuestring);
kk_scene_update_actionRoomId((char*)sceneId,roomId->valuestring);
if(delay == NULL) return FAIL_RETURN;
int idelay = delay->valueint;
if(propertyValue->type==cJSON_String){
......@@ -1605,9 +1605,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
if(room_id != NULL){
//char roomIdStr[32] = {0};
//snprintf(roomIdStr,32,"%d",room_id->valuestring);
res = kk_scene_insert_scene_info(room_id->valuestring,name->valuestring,sceneType->valueint,enable->valueint,sceneId);
res = kk_scene_insert_scene_info(room_id->valuestring,name->valuestring,sceneType->valueint,enable->valueint,sceneId,"","");
}else{
res = kk_scene_insert_scene_info("-1",name->valuestring,sceneType->valueint,enable->valueint,sceneId);
res = kk_scene_insert_scene_info("-1",name->valuestring,sceneType->valueint,enable->valueint,sceneId,"","");
}
/*多控直接下发给网关处理*/
if(enable->valueint == 1 && sceneType->valueint == DB_SCENETYPE_MUTICONTROL){
......
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