Commit 74c4facd authored by chen.weican's avatar chen.weican

【修改内容】1,增加mqtt遗嘱消息;2,增加房间图标的同步

【提交人】陈伟灿
parent cfa43aa9
...@@ -5,12 +5,30 @@ ...@@ -5,12 +5,30 @@
#include "com_api.h" #include "com_api.h"
#include "kk_product.h" #include "kk_product.h"
#include "kk_hal.h" #include "kk_hal.h"
#include "cJSON.h"
static const char* OPT_SEND = "MQTTAsync_sendMessage"; static const char* OPT_SEND = "MQTTAsync_sendMessage";
static const char* OPT_SUB = "MQTTAsync_subscribe"; static const char* OPT_SUB = "MQTTAsync_subscribe";
static const char* OPT_UNSUB = "MQTTAsync_unsubscribe"; static const char* OPT_UNSUB = "MQTTAsync_unsubscribe";
static MQTTAsync s_Client; static MQTTAsync s_Client;
static int s_mqttStop = 0; static int s_mqttStop = 0;
static int s_cloudStatus = DEVICE_OFFLINE; static int s_cloudStatus = DEVICE_OFFLINE;
static char *kk_will_message_create(char *ccuid,cJSON*payload)
{
char msgId[64] = {0};
char timestamp[16] = {0};
sprintf(msgId,"6c0645c4-f6d6-b11e-%lld",HAL_GetTime_ms());
sprintf(timestamp,"%lld",HAL_GetTime_ms());
cJSON_AddStringToObject(payload, "msgId", msgId);
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "time", timestamp);
cJSON_AddStringToObject(payload, "method", "thing.status.offline");
cJSON* param = cJSON_CreateObject();
cJSON_AddStringToObject(param, "deviceCode", ccuid);
cJSON_AddStringToObject(param, "ccuCode", ccuid);
cJSON_AddItemToObject(payload, "params", param);
return cJSON_Print(payload);
}
int KK_Send_CloudState(int state); int KK_Send_CloudState(int state);
int kk_get_cloud_status(void){ int kk_get_cloud_status(void){
return s_cloudStatus; return s_cloudStatus;
...@@ -38,22 +56,37 @@ static void connlost(void *context, char *cause) ...@@ -38,22 +56,37 @@ static void connlost(void *context, char *cause)
KK_Send_CloudState(s_cloudStatus); KK_Send_CloudState(s_cloudStatus);
return; return;
} }
char topicBuf[256] = {0};
char *message = NULL;
MQTTAsync client = (MQTTAsync)context; MQTTAsync client = (MQTTAsync)context;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer; MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_willOptions will_opts = MQTTAsync_willOptions_initializer;
int rc; int rc;
char ccuid[32] = {0};
char pid[32] = {0};
KK_Get_ccuid(ccuid);
kk_cloud_get_pid(pid);
sprintf(topicBuf, "biz/newkk/%s/%s/thing/status/offline",pid, ccuid);
INFO_PRINT("\nConnection lost\n"); INFO_PRINT("\nConnection lost\n");
INFO_PRINT("cause: %s\n", cause); INFO_PRINT("cause: %s\n", cause);
s_cloudStatus = DEVICE_OFFLINE; s_cloudStatus = DEVICE_OFFLINE;
kk_write_disconnect_flag(); kk_write_disconnect_flag();
KK_Send_CloudState(s_cloudStatus); KK_Send_CloudState(s_cloudStatus);
cJSON* willPayload = cJSON_CreateObject();
message = kk_will_message_create(ccuid,willPayload);
conn_opts.keepAliveInterval = 20; conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1; conn_opts.cleansession = 1;
will_opts.retained = 0; //retained = 1 时, broker会一直保留消息,这里不需要,使用默认的0就行
will_opts.topicName = topicBuf;
will_opts.message = message;
conn_opts.will = &will_opts;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start connect, return code %d\n", rc); ERROR_PRINT("Failed to start connect, return code %d\n", rc);
s_mqttStop = 1; s_mqttStop = 1;
} }
free(message);
cJSON_Delete(willPayload);
} }
void onDisconnectFailure(void* context, MQTTAsync_failureData* response) void onDisconnectFailure(void* context, MQTTAsync_failureData* response)
...@@ -213,13 +246,18 @@ void KK_Get_MqttClient(MQTTAsync *pClient) ...@@ -213,13 +246,18 @@ void KK_Get_MqttClient(MQTTAsync *pClient)
} }
extern char g_clientId[64]; extern char g_clientId[64];
extern char s_ServerIp[16]; extern char s_ServerIp[16];
MQTTAsync KK_MQTT_Connect(void) MQTTAsync KK_MQTT_Connect(void)
{ {
int rc = 0; int rc = 0;
char temp_address[128] = {0}; char temp_address[128] = {0};
FILE *fp; FILE *fp;
char topicBuf[256] = {0};
char *message = NULL;
MQTTAsync_createOptions opts = MQTTAsync_createOptions_initializer; MQTTAsync_createOptions opts = MQTTAsync_createOptions_initializer;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer; MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_willOptions will_opts = MQTTAsync_willOptions_initializer;
MQTTAsync_setTraceCallback(mqttTraceCallback); MQTTAsync_setTraceCallback(mqttTraceCallback);
opts.MQTTVersion = MQTTVERSION_3_1_1; opts.MQTTVersion = MQTTVERSION_3_1_1;
char mac[16]={0}; char mac[16]={0};
...@@ -236,6 +274,9 @@ MQTTAsync KK_MQTT_Connect(void) ...@@ -236,6 +274,9 @@ MQTTAsync KK_MQTT_Connect(void)
KK_Get_ccuid(ccuid); KK_Get_ccuid(ccuid);
kk_cloud_get_pid(pid); kk_cloud_get_pid(pid);
sprintf(usrname, "%s.%s", ccuid,pid); sprintf(usrname, "%s.%s", ccuid,pid);
sprintf(topicBuf, "biz/newkk/%s/%s/thing/status/offline",pid, ccuid);
INFO_PRINT("topicBuf:%s\n",topicBuf);
INFO_PRINT("cliendid:%s,usrname:%s\n",g_clientId,usrname); INFO_PRINT("cliendid:%s,usrname:%s\n",g_clientId,usrname);
INFO_PRINT("------------>token:%s\n",token); INFO_PRINT("------------>token:%s\n",token);
sprintf(temp_address,"tcp://%s:1983",s_ServerIp); sprintf(temp_address,"tcp://%s:1983",s_ServerIp);
...@@ -247,7 +288,8 @@ MQTTAsync KK_MQTT_Connect(void) ...@@ -247,7 +288,8 @@ MQTTAsync KK_MQTT_Connect(void)
} }
/*Set the mqtt callback*/ /*Set the mqtt callback*/
mqtt_set_callbacks(); mqtt_set_callbacks();
cJSON* willPayload = cJSON_CreateObject();
message = kk_will_message_create(ccuid,willPayload);
conn_opts.keepAliveInterval = 30; conn_opts.keepAliveInterval = 30;
conn_opts.connectTimeout = CONNECT_TIMEOUT; conn_opts.connectTimeout = CONNECT_TIMEOUT;
conn_opts.automaticReconnect = AUTO_CONN; conn_opts.automaticReconnect = AUTO_CONN;
...@@ -261,11 +303,19 @@ MQTTAsync KK_MQTT_Connect(void) ...@@ -261,11 +303,19 @@ MQTTAsync KK_MQTT_Connect(void)
conn_opts.onSuccess = onConnect; conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure; conn_opts.onFailure = onConnectFailure;
conn_opts.context = s_Client; conn_opts.context = s_Client;
will_opts.retained = 0; //retained = 1 时, broker会一直保留消息,这里不需要,使用默认的0就行
will_opts.topicName = topicBuf;
will_opts.message = message;
conn_opts.will = &will_opts;
if ((rc = MQTTAsync_connect(s_Client, &conn_opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_connect(s_Client, &conn_opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start connect, return code %d\n", rc); ERROR_PRINT("Failed to start connect, return code %d\n", rc);
free(message);
cJSON_Delete(willPayload);
return NULL; return NULL;
} }
cJSON_Delete(willPayload);
free(message);
return s_Client; return s_Client;
} }
MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char*port) MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char*port)
...@@ -273,8 +323,17 @@ MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char ...@@ -273,8 +323,17 @@ MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char
int rc = 0; int rc = 0;
char temp_address[256] = {0}; char temp_address[256] = {0};
FILE *fp; FILE *fp;
char topicBuf[256] = {0};
char *message = NULL;
char ccuid[32] = {0};
char pid[32] = {0};
KK_Get_ccuid(ccuid);
kk_cloud_get_pid(pid);
sprintf(topicBuf, "biz/newkk/%s/%s/thing/status/offline",pid, ccuid);
INFO_PRINT("topicBuf:%s\n",topicBuf);
MQTTAsync_createOptions opts = MQTTAsync_createOptions_initializer; MQTTAsync_createOptions opts = MQTTAsync_createOptions_initializer;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer; MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_willOptions will_opts = MQTTAsync_willOptions_initializer;
MQTTAsync_setTraceCallback(mqttTraceCallback); MQTTAsync_setTraceCallback(mqttTraceCallback);
opts.MQTTVersion = MQTTVERSION_3_1_1; opts.MQTTVersion = MQTTVERSION_3_1_1;
sprintf(temp_address,"tcp://%s:%s",host,port); sprintf(temp_address,"tcp://%s:%s",host,port);
...@@ -286,7 +345,9 @@ MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char ...@@ -286,7 +345,9 @@ MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char
} }
/*Set the mqtt callback*/ /*Set the mqtt callback*/
mqtt_set_callbacks(); mqtt_set_callbacks();
cJSON* willPayload = cJSON_CreateObject();
message = kk_will_message_create(ccuid,willPayload);
INFO_PRINT("will message:%s\n",message);
conn_opts.keepAliveInterval = 30; conn_opts.keepAliveInterval = 30;
conn_opts.connectTimeout = CONNECT_TIMEOUT; conn_opts.connectTimeout = CONNECT_TIMEOUT;
conn_opts.automaticReconnect = AUTO_CONN; conn_opts.automaticReconnect = AUTO_CONN;
...@@ -300,11 +361,19 @@ MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char ...@@ -300,11 +361,19 @@ MQTTAsync KK_MQTT_Connect_ex(char *usrname,char*pwd,char*cliendId,char*host,char
conn_opts.onSuccess = onConnect; conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure; conn_opts.onFailure = onConnectFailure;
conn_opts.context = s_Client; conn_opts.context = s_Client;
will_opts.retained = 0; //retained = 1 时, broker会一直保留消息,这里不需要,使用默认的0就行
will_opts.topicName = topicBuf;
will_opts.message = message;
conn_opts.will = &will_opts;
if ((rc = MQTTAsync_connect(s_Client, &conn_opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_connect(s_Client, &conn_opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to start connect, return code %d\n", rc); ERROR_PRINT("Failed to start connect, return code %d\n", rc);
free(message);
cJSON_Delete(willPayload);
return NULL; return NULL;
} }
free(message);
cJSON_Delete(willPayload);
return s_Client; return s_Client;
} }
int KK_MQTT_SubTopic(char *topicName) int KK_MQTT_SubTopic(char *topicName)
......
...@@ -77,6 +77,7 @@ typedef enum { ...@@ -77,6 +77,7 @@ typedef enum {
#define MSG_ONLINE_STATUS_STR "onlineStatus" #define MSG_ONLINE_STATUS_STR "onlineStatus"
#define MSG_AREA_ROOM_FLOORS "floors" #define MSG_AREA_ROOM_FLOORS "floors"
#define MSG_AREA_ROOM_FLOOR_ID "floorId" #define MSG_AREA_ROOM_FLOOR_ID "floorId"
#define MSG_AREA_ROOM_ICON "roomIcon"
#define MSG_AREA_ROOM_FLOOR_ROOMS "rooms" #define MSG_AREA_ROOM_FLOOR_ROOMS "rooms"
/************************LOCK KEY*************************/ /************************LOCK KEY*************************/
#define MSG_KEYDELETE_NOTIFICATION_KEYID "KeyDeletedNotification.KeyID" #define MSG_KEYDELETE_NOTIFICATION_KEYID "KeyDeletedNotification.KeyID"
......
...@@ -57,7 +57,8 @@ static int _kk_area_db_init(void) ...@@ -57,7 +57,8 @@ static int _kk_area_db_init(void)
roomId varchar(256), \ roomId varchar(256), \
armingstate INTEGER, \ armingstate INTEGER, \
floorId varchar(256), \ floorId varchar(256), \
floorName varchar(256))"; floorName varchar(256), \
roomIcon varchar(256))";
if (sqlite3_exec(ctx->pDb, pAreaTable, NULL, NULL, &pcErr) != SQLITE_OK) if (sqlite3_exec(ctx->pDb, pAreaTable, NULL, NULL, &pcErr) != SQLITE_OK)
{ {
...@@ -144,19 +145,19 @@ static int kk_check_room_exist(const char *roomId) ...@@ -144,19 +145,19 @@ static int kk_check_room_exist(const char *roomId)
return isExist; return isExist;
} }
static int _kk_room_add(const char *name,const char *roomId) static int _kk_room_add(const char *name,const char *roomId,const char *icon)
{ {
int res = 0; int res = 0;
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;
const char *insertCmd = "insert into AreaInfo (name, roomId,armingstate,floorId,floorName) \ const char *insertCmd = "insert into AreaInfo (name, roomId,armingstate,floorId,floorName,roomIcon) \
values ('%s','%s','%d','%s','%s');"; values ('%s','%s','%d','%s','%s','%s');";
_kk_area_lock(); _kk_area_lock();
ctx->roomNum++; ctx->roomNum++;
sqlCmd = sqlite3_mprintf(insertCmd,name,roomId,-1,"0","默认"); sqlCmd = sqlite3_mprintf(insertCmd,name,roomId,-1,"0","默认",icon);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){ if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
...@@ -191,6 +192,30 @@ static int _kk_room_update(const char *name,const char *roomId) ...@@ -191,6 +192,30 @@ static int _kk_room_update(const char *name,const char *roomId)
_kk_area_unlock(); _kk_area_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int _kk_roomIcon_update(const char *roomIcon,const char *roomId)
{
int res = 0;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
if(roomIcon == NULL){
return FAIL_RETURN;
}
sqlCmd = sqlite3_mprintf("UPDATE AreaInfo SET roomIcon='%s' WHERE roomId= '%s'",roomIcon,roomId);
_kk_area_lock();
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != 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_area_unlock();
return SUCCESS_RETURN;
}
static int _kk_room_dev_update(const char *name,const char *roomId) static int _kk_room_dev_update(const char *name,const char *roomId)
{ {
int res = 0; int res = 0;
...@@ -213,15 +238,16 @@ static int _kk_room_dev_update(const char *name,const char *roomId) ...@@ -213,15 +238,16 @@ static int _kk_room_dev_update(const char *name,const char *roomId)
_kk_area_unlock(); _kk_area_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_room_add(const char *name,const char *roomId) int kk_room_add(const char *name,const char *roomId,const char *icon)
{ {
if(kk_check_room_exist(roomId)){ if(kk_check_room_exist(roomId)){
printf("name=%s,room id=%s\n",name,roomId); printf("name=%s,room id=%s\n",name,roomId);
_kk_room_dev_update(name,roomId); _kk_room_dev_update(name,roomId);
_kk_room_update(name,roomId); _kk_room_update(name,roomId);
_kk_roomIcon_update(icon,roomId);
return 0; return 0;
}else{ }else{
return _kk_room_add(name,roomId); return _kk_room_add(name,roomId,icon);
} }
} }
......
...@@ -19,6 +19,7 @@ enum{ ...@@ -19,6 +19,7 @@ enum{
DB_ROOM_ARMING, DB_ROOM_ARMING,
DB_ROOM_FLOORID, DB_ROOM_FLOORID,
DB_ROOM_FLOORNAME, DB_ROOM_FLOORNAME,
DB_ROOM_ROOMICON,
}; };
enum{ enum{
...@@ -35,7 +36,7 @@ enum{ ...@@ -35,7 +36,7 @@ enum{
DB_FLOOR_ID, DB_FLOOR_ID,
}; };
int kk_room_delete(const char *roomId); int kk_room_delete(const char *roomId);
int kk_room_add(const char *name,const char *roomId); int kk_room_add(const char *name,const char *roomId,const char *icon);
int kk_area_init(void); int kk_area_init(void);
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 kk_room_dev_remove(const char *deviceCode,const char *epNum); int kk_room_dev_remove(const char *deviceCode,const char *epNum);
......
...@@ -534,9 +534,13 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params,cJSON ...@@ -534,9 +534,13 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params,cJSON
if(floorId == NULL){ if(floorId == NULL){
//return FAIL_RETURN; //return FAIL_RETURN;
} }
cJSON *icon = cJSON_GetObjectItem(params, MSG_AREA_ROOM_ICON);
if(icon == NULL){
return FAIL_RETURN;
}
//memcpy(roomId,roomIdStr->valuestring,strlen(roomIdStr->valuestring)); //memcpy(roomId,roomIdStr->valuestring,strlen(roomIdStr->valuestring));
HAL_GetTime_s((char*)roomId); HAL_GetTime_s((char*)roomId);
kk_room_add(roomInfoStr->valuestring,roomId); kk_room_add(roomInfoStr->valuestring,roomId,icon->valuestring);
kk_service_addRoom_reply(inforoot,msgid,roomId,0); kk_service_addRoom_reply(inforoot,msgid,roomId,0);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_AREA_ADDROOM_NOTIFICATION_ROOMID,NULL,roomId); kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_AREA_ADDROOM_NOTIFICATION_ROOMID,NULL,roomId);
if(floorId != NULL){ if(floorId != NULL){
...@@ -646,9 +650,13 @@ static int kk_service_updateRoom_handle(const char *deviceCode, cJSON *params,cJ ...@@ -646,9 +650,13 @@ static int kk_service_updateRoom_handle(const char *deviceCode, cJSON *params,cJ
if(roomInfoStr == NULL || roomIdStr == NULL){ if(roomInfoStr == NULL || roomIdStr == NULL){
return FAIL_RETURN; return FAIL_RETURN;
} }
cJSON *icon = cJSON_GetObjectItem(params, MSG_AREA_ROOM_ICON);
if(icon == NULL){
return FAIL_RETURN;
}
//memcpy(roomId,roomIdStr->valuestring,strlen(roomIdStr->valuestring)); //memcpy(roomId,roomIdStr->valuestring,strlen(roomIdStr->valuestring));
//INFO_PRINT(" update room 111!!! %s.%s\n",roomInfoStr->valuestring,roomIdStr->valuestring); //INFO_PRINT(" update room 111!!! %s.%s\n",roomInfoStr->valuestring,roomIdStr->valuestring);
kk_room_add(roomInfoStr->valuestring,roomIdStr->valuestring); kk_room_add(roomInfoStr->valuestring,roomIdStr->valuestring,icon->valuestring);
cJSON *floorId = cJSON_GetObjectItem(params, MSG_AREA_ROOM_FLOOR_ID); cJSON *floorId = cJSON_GetObjectItem(params, MSG_AREA_ROOM_FLOOR_ID);
if(floorId == NULL){ if(floorId == NULL){
kk_service_addRoom_reply(inforoot,msgid,roomIdStr->valuestring,1); kk_service_addRoom_reply(inforoot,msgid,roomIdStr->valuestring,1);
...@@ -1964,7 +1972,7 @@ static int kk_service_bindScene_handle(cJSON *params,char *deviceCodeStr) ...@@ -1964,7 +1972,7 @@ static int kk_service_bindScene_handle(cJSON *params,char *deviceCodeStr)
if(deviceCode == NULL) return FAIL_RETURN; if(deviceCode == NULL) return FAIL_RETURN;
res = kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,1, res = kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,1,
propertyName->valuestring,propertyValue->valuestring,0,sceneId,deviceCode->valuestring); propertyName->valuestring,propertyValue->valuestring,0,sceneId,deviceCode->valuestring,1);
kk_scene_insert_panel_scene_info(bindType->valueint,btnId,deviceCodeStr,sceneId,"-1",""); kk_scene_insert_panel_scene_info(bindType->valueint,btnId,deviceCodeStr,sceneId,"-1","");
item = item->next; item = item->next;
} }
......
...@@ -659,7 +659,7 @@ static int _kk_indoor_air_info_handle(char* deviceCode,char* propertyName,char* ...@@ -659,7 +659,7 @@ static int _kk_indoor_air_info_handle(char* deviceCode,char* propertyName,char*
kk_scene_action_add(gwDeviceCode,sceneId,info); kk_scene_action_add(gwDeviceCode,sceneId,info);
if(insert){ if(insert){
res = kk_scene_insert_scene_action(type,deviceCode,info.epNum, res = kk_scene_insert_scene_action(type,deviceCode,info.epNum,
propertyName,propertyValue,info.delay,sceneId,gwDeviceCode); propertyName,propertyValue,info.delay,sceneId,gwDeviceCode,2);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n"); INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n");
} }
...@@ -732,7 +732,7 @@ static int _kk_indoor_air_handle(char* deviceCode, char *sceneId, char *property ...@@ -732,7 +732,7 @@ static int _kk_indoor_air_handle(char* deviceCode, char *sceneId, char *property
if(strcmp(propertyName,"CustomAction") == 0){ if(strcmp(propertyName,"CustomAction") == 0){
kk_indoor_air_action_add(propertyValue,deviceCode,delay,gwDeviceCode,sceneId,type,eplist[i]); kk_indoor_air_action_add(propertyValue,deviceCode,delay,gwDeviceCode,sceneId,type,eplist[i]);
kk_scene_insert_scene_action(type,deviceCode,eplist[i], kk_scene_insert_scene_action(type,deviceCode,eplist[i],
propertyName,propertyValue,delay,sceneId,gwDeviceCode); propertyName,propertyValue,delay,sceneId,gwDeviceCode,2);
}else{ }else{
_kk_indoor_air_info_handle(deviceCode,propertyName,propertyValue,eplist[i],delay,gwDeviceCode,sceneId,type,1); _kk_indoor_air_info_handle(deviceCode,propertyName,propertyValue,eplist[i],delay,gwDeviceCode,sceneId,type,1);
} }
...@@ -757,7 +757,7 @@ static int _kk_airConditon_handle(char* deviceCode, char *sceneId, char *propert ...@@ -757,7 +757,7 @@ static int _kk_airConditon_handle(char* deviceCode, char *sceneId, char *propert
if(strcmp(propertyName,"CustomAction") == 0){ if(strcmp(propertyName,"CustomAction") == 0){
kk_indoor_air_action_add(propertyValue,deviceCode,delay,gwDeviceCode,sceneId,type,1); kk_indoor_air_action_add(propertyValue,deviceCode,delay,gwDeviceCode,sceneId,type,1);
kk_scene_insert_scene_action(type,deviceCode,1, kk_scene_insert_scene_action(type,deviceCode,1,
propertyName,propertyValue,delay,sceneId,gwDeviceCode); propertyName,propertyValue,delay,sceneId,gwDeviceCode,2);
}else{ }else{
_kk_indoor_air_info_handle(deviceCode,propertyName,propertyValue,1,delay,gwDeviceCode,sceneId,type,1); _kk_indoor_air_info_handle(deviceCode,propertyName,propertyValue,1,delay,gwDeviceCode,sceneId,type,1);
} }
...@@ -905,7 +905,7 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *room ...@@ -905,7 +905,7 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *room
devIsExsit = 1; devIsExsit = 1;
kk_scene_action_add(node->fatherDeviceCode,sceneId,info); kk_scene_action_add(node->fatherDeviceCode,sceneId,info);
res = kk_scene_insert_scene_action(type,node->deviceCode,info.epNum, res = kk_scene_insert_scene_action(type,node->deviceCode,info.epNum,
property->identifier,propertyValue,info.delay,sceneId,node->fatherDeviceCode); property->identifier,propertyValue,info.delay,sceneId,node->fatherDeviceCode,2);
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n"); INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n");
//return res; //return res;
...@@ -915,13 +915,13 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *room ...@@ -915,13 +915,13 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *room
} }
} }
if(devIsExsit == 0){//设置场景,但是又没有对应的设备需要插入一条无效action用于记录propertyName,同步需要 if(devIsExsit == 0){//设置场景,但是又没有对应的设备需要插入一条无效action用于记录propertyName,同步需要
res = kk_scene_insert_scene_action(type,"",1, //res = kk_scene_insert_scene_action(type,"",1,
propertyName,propertyValue,delay,sceneId,""); //propertyName,propertyValue,delay,sceneId,"");
if(res != SUCCESS_RETURN){ //if(res != SUCCESS_RETURN){
INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n"); //INFO_PRINT("kk_subDev_set_action_by_productType fail!!!\n");
//return res; //return res;
continue; //continue;
} //}
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
extern sqlite3 *g_kk_pDb; extern sqlite3 *g_kk_pDb;
static int kk_check_multi_ep_num(char *deviceCode); static int kk_check_multi_ep_num(char *deviceCode);
static int kk_get_scenes_actions_info(cJSON *actionArray,char *id,char *productType,char *actionRoomId); static int kk_get_scenes_actions_info(cJSON *actionArray,char *id,char *productType);
static int kk_get_panel_scenes_actions_info(cJSON *actionArray,char *id); static int kk_get_panel_scenes_actions_info(cJSON *actionArray,char *id);
static int kk_get_panel_scenes_info(cJSON *actionItem,char *id); static int kk_get_panel_scenes_info(cJSON *actionItem,char *id);
...@@ -168,6 +168,7 @@ static int kk_get_rooms_info(cJSON *data) ...@@ -168,6 +168,7 @@ static int kk_get_rooms_info(cJSON *data)
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
char *roomId = NULL; char *roomId = NULL;
char *roomName = NULL; char *roomName = NULL;
char *roomIcon = NULL;
//int valueType = 0; //int valueType = 0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx(); kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(data == NULL){ if(data == NULL){
...@@ -185,8 +186,10 @@ static int kk_get_rooms_info(cJSON *data) ...@@ -185,8 +186,10 @@ static int kk_get_rooms_info(cJSON *data)
roomItem = cJSON_CreateObject(); roomItem = cJSON_CreateObject();
roomId = (char*)sqlite3_column_text(stmt, DB_ROOM_ID); roomId = (char*)sqlite3_column_text(stmt, DB_ROOM_ID);
roomName = (char*)sqlite3_column_text(stmt, DB_ROOM_NAME); roomName = (char*)sqlite3_column_text(stmt, DB_ROOM_NAME);
roomIcon = (char*)sqlite3_column_text(stmt, DB_ROOM_ROOMICON);
cJSON_AddStringToObject(roomItem, KK_SYNC_ROOMID_STR, roomId); cJSON_AddStringToObject(roomItem, KK_SYNC_ROOMID_STR, roomId);
cJSON_AddStringToObject(roomItem, KK_SYNC_NANE_STR, roomName); cJSON_AddStringToObject(roomItem, KK_SYNC_NANE_STR, roomName);
cJSON_AddStringToObject(roomItem, KK_SYNC_ROOMICON, roomIcon);
roomDevicesArray = kk_get_room_devices(roomId); roomDevicesArray = kk_get_room_devices(roomId);
cJSON_AddItemToObject(roomItem, KK_SYNC_DEVICES_STR, roomDevicesArray); cJSON_AddItemToObject(roomItem, KK_SYNC_DEVICES_STR, roomDevicesArray);
...@@ -1017,8 +1020,55 @@ static int kk_get_panel_scenes_actions_info(cJSON *actionItem,char * id) ...@@ -1017,8 +1020,55 @@ static int kk_get_panel_scenes_actions_info(cJSON *actionItem,char * id)
} }
static int kk_get_scenes_actions_productTypeinfo(cJSON *actionArray,char* id,char *deviceCode)
static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productType,char *actionRoomId) {
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
char *propertyName = NULL;
char *propertyValue = NULL;
char *productType = NULL;
char *roomId = NULL;
int delay = 0;
sqlCmd = sqlite3_mprintf("select * from SceneProTypeInfo where sceneId = '%s'",id);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *actionItem;
actionItem = cJSON_CreateObject();
delay = sqlite3_column_int(stmt, DB_SCENEPROTYPE_DELAY);
propertyName = (char*)sqlite3_column_text(stmt, DB_SCENEPROTYPE_PROPERTYNAME);
propertyValue = (char*)sqlite3_column_text(stmt, DB_SCENEPROTYPE_PROPERTYVALUE);
productType = (char*)sqlite3_column_text(stmt, DB_SCENEPROTYPE_PROTYPE);
roomId = (char*)sqlite3_column_text(stmt, DB_SCENEPROTYPE_ROOMID);
if(strstr(propertyValue,"{")!=NULL && strstr(propertyValue,"}")!=NULL){
cJSON * prtyObj = cJSON_Parse(propertyValue);
if(prtyObj != NULL){
cJSON_AddItemToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, prtyObj);
}else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
}
}else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
}
char *propertiesbuf[64] = {0};
int num = 0;
kk_split(propertyName,"_",propertiesbuf,&num);
if(num==2){
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertiesbuf[0]);
}else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYNAME_STR, propertyName);
}
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_TYPE_STR, "action/thing/setProperty");
cJSON_AddStringToObject(actionItem, KK_SYNC_DEVICECODE_STR, deviceCode);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_DELAY_STR, delay);
cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, 1);
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PRODUCTTYPE, productType);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, roomId);
cJSON_AddItemToArray(actionArray, actionItem);
}
return 0;
}
static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productType)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
//char *zErrMsg = 0; //char *zErrMsg = 0;
...@@ -1032,9 +1082,12 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productT ...@@ -1032,9 +1082,12 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productT
char *type = NULL; char *type = NULL;
int delay = 0,epNum = 0,scene_id=0; int delay = 0,epNum = 0,scene_id=0;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx(); kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(actionArray == NULL || productType == NULL || actionRoomId == NULL){ if(actionArray == NULL || productType == NULL){
return FAIL_RETURN; return FAIL_RETURN;
} }
if(strcmp(productType,"") != 0){
kk_get_scenes_actions_productTypeinfo(actionArray,id,"");
}
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo where sceneId = '%s' and active = '%d'",id,1); sqlCmd = sqlite3_mprintf("select * from SceneActionInfo where sceneId = '%s' and active = '%d'",id,1);
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){
...@@ -1082,20 +1135,11 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productT ...@@ -1082,20 +1135,11 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productT
}else{ }else{
cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue); cJSON_AddStringToObject(actionItem, KK_SYNC_SCENE_PROPERTYVALUE_STR, propertyValue);
} }
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); kk_get_roomId_by_scene_id(scene_id,room_id);
cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_id); cJSON_AddStringToObject(actionItem, KK_SYNC_ROOMID_STR, room_id);
cJSON_AddItemToArray(actionArray, actionItem); cJSON_AddItemToArray(actionArray, actionItem);
} }
} }
}
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return SUCCESS_RETURN; return SUCCESS_RETURN;
...@@ -1196,7 +1240,7 @@ static int kk_get_scenes_trigger_info(cJSON *triggerObj,char *sceneId) ...@@ -1196,7 +1240,7 @@ static int kk_get_scenes_trigger_info(cJSON *triggerObj,char *sceneId)
cJSON_AddItemToArray(triggerAry, conditionItem); cJSON_AddItemToArray(triggerAry, conditionItem);
} }
sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo where sceneId = %s",sceneId); sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo where sceneId = %s and active = %d",sceneId,1);
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){
...@@ -1291,7 +1335,7 @@ static int kk_get_scenes_condition_info(cJSON *conditionObj,char *sceneId) ...@@ -1291,7 +1335,7 @@ static int kk_get_scenes_condition_info(cJSON *conditionObj,char *sceneId)
int epNum = 0; int epNum = 0;
int isAnd; int isAnd;
sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo where sceneId = %s",sceneId); sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo where sceneId = %s and active = %d",sceneId,1);
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){
...@@ -1334,7 +1378,6 @@ static int kk_get_scenes_info(cJSON *data) ...@@ -1334,7 +1378,6 @@ static int kk_get_scenes_info(cJSON *data)
char *roomId = NULL; char *roomId = NULL;
char *sceneId = NULL; char *sceneId = NULL;
char *productType = NULL; char *productType = NULL;
char *actionRoomId = NULL;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx(); kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(data == NULL){ if(data == NULL){
return FAIL_RETURN; return FAIL_RETURN;
...@@ -1357,11 +1400,10 @@ static int kk_get_scenes_info(cJSON *data) ...@@ -1357,11 +1400,10 @@ static int kk_get_scenes_info(cJSON *data)
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID); sceneId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_SCENEID);
roomId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ROOMID); roomId = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_ROOMID);
productType = (char*)sqlite3_column_text(stmt, DB_SCENEINFO_PRODUCTTYPE); 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_ROOMID_STR, roomId);
cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENEID_STR, sceneId); cJSON_AddStringToObject(sceneArrayItem, KK_SYNC_SCENEID_STR, sceneId);
cJSON *actionArray = cJSON_CreateArray(); cJSON *actionArray = cJSON_CreateArray();
kk_get_scenes_actions_info(actionArray,sceneId,productType,actionRoomId); kk_get_scenes_actions_info(actionArray,sceneId,productType);
cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_ACTIONS_STR, actionArray); cJSON_AddItemToObject(sceneArrayItem, KK_SYNC_SCENE_ACTIONS_STR, actionArray);
cJSON *triggerObj = cJSON_CreateObject(); cJSON *triggerObj = cJSON_CreateObject();
kk_get_scenes_trigger_info(triggerObj,sceneId); kk_get_scenes_trigger_info(triggerObj,sceneId);
...@@ -1379,7 +1421,6 @@ static int kk_get_scenes_info(cJSON *data) ...@@ -1379,7 +1421,6 @@ static int kk_get_scenes_info(cJSON *data)
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_get_group_info(cJSON *data) static int kk_get_group_info(cJSON *data)
{ {
cJSON *group = kk_group_db_query(1); cJSON *group = kk_group_db_query(1);
...@@ -1387,7 +1428,6 @@ static int kk_get_group_info(cJSON *data) ...@@ -1387,7 +1428,6 @@ static int kk_get_group_info(cJSON *data)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/* /*
static int kk_get_ccu_properties(cJSON *property) static int kk_get_ccu_properties(cJSON *property)
{ {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#define KK_SYNC_DEVICES_STR "devices" #define KK_SYNC_DEVICES_STR "devices"
#define KK_SYNC_DEVICECODE_STR "deviceCode" #define KK_SYNC_DEVICECODE_STR "deviceCode"
#define KK_SYNC_NANE_STR "name" #define KK_SYNC_NANE_STR "name"
#define KK_SYNC_ROOMICON "roomIcon"
#define KK_SYNC_SCENEID_STR "sceneId" #define KK_SYNC_SCENEID_STR "sceneId"
#define KK_SYNC_SCENE_STR "scenes" #define KK_SYNC_SCENE_STR "scenes"
#define KK_SYNC_VERSION_STR "firmwareVersion" #define KK_SYNC_VERSION_STR "firmwareVersion"
......
...@@ -112,6 +112,7 @@ int kk_group_db_init(void) ...@@ -112,6 +112,7 @@ int kk_group_db_init(void)
INFO_PRINT("kk_group_db_init db Database opened\n"); INFO_PRINT("kk_group_db_init db Database opened\n");
kk_group_info_db_init(); kk_group_info_db_init();
kk_group_device_db_init(); kk_group_device_db_init();
return 0;
} }
static int kk_group_info_db_check(const char* groupId) static int kk_group_info_db_check(const char* groupId)
...@@ -330,12 +331,12 @@ static cJSON *kk_group_device_db_query(const char *groupId,int isSync) ...@@ -330,12 +331,12 @@ static cJSON *kk_group_device_db_query(const char *groupId,int isSync)
didListItem = cJSON_CreateObject(); didListItem = cJSON_CreateObject();
if(isSync!=0){ if(isSync!=0){
cJSON_AddNumberToObject(didListItem,"epNum",atoi(epnum)); cJSON_AddNumberToObject(didListItem,"epNum",atoi((char*)epnum));
}else{ }else{
cJSON_AddStringToObject(didListItem,"epNum",epnum); cJSON_AddStringToObject(didListItem,"epNum",(char*)epnum);
} }
cJSON_AddStringToObject(didListItem,"deviceCode",deviceCode); cJSON_AddStringToObject(didListItem,"deviceCode",(char*)deviceCode);
cJSON_AddItemToArray(didListAry, didListItem); cJSON_AddItemToArray(didListAry, didListItem);
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
...@@ -369,15 +370,15 @@ cJSON *kk_group_db_query(int isSync) ...@@ -369,15 +370,15 @@ cJSON *kk_group_db_query(int isSync)
groupName = sqlite3_column_text(stmt, GROUP_INFO_DB_NAME); groupName = sqlite3_column_text(stmt, GROUP_INFO_DB_NAME);
ccuRoomId = sqlite3_column_text(stmt, GROUP_INFO_DB_CCUROOMID); ccuRoomId = sqlite3_column_text(stmt, GROUP_INFO_DB_CCUROOMID);
INFO_PRINT("groupId=%s,groupName=%s,ccuRoomId=%s\n",groupId,groupName,ccuRoomId); INFO_PRINT("groupId=%s,groupName=%s,ccuRoomId=%s\n",groupId,groupName,ccuRoomId);
didListAry = kk_group_device_db_query(groupId,isSync); didListAry = kk_group_device_db_query((const char*)groupId,isSync);
groupListItem = cJSON_CreateObject(); groupListItem = cJSON_CreateObject();
cJSON_AddStringToObject(groupListItem,"groupId",groupId); cJSON_AddStringToObject(groupListItem,"groupId",(char*)groupId);
cJSON_AddStringToObject(groupListItem,"groupName",groupName); cJSON_AddStringToObject(groupListItem,"groupName",(char*)groupName);
if(isSync!=0){ if(isSync!=0){
cJSON_AddStringToObject(groupListItem,"roomId",ccuRoomId); cJSON_AddStringToObject(groupListItem,"roomId",(char*)ccuRoomId);
}else{ }else{
cJSON_AddStringToObject(groupListItem,"ccuRoomId",ccuRoomId); cJSON_AddStringToObject(groupListItem,"ccuRoomId",(char*)ccuRoomId);
} }
cJSON_AddItemToObject(groupListItem,"didList",didListAry); cJSON_AddItemToObject(groupListItem,"didList",didListAry);
...@@ -396,6 +397,7 @@ cJSON *kk_group_device_db_exe_act(const char *groupId,int controlType,int proper ...@@ -396,6 +397,7 @@ cJSON *kk_group_device_db_exe_act(const char *groupId,int controlType,int proper
char *sqlCmd = NULL; char *sqlCmd = NULL;
const unsigned char *epnum = NULL; const unsigned char *epnum = NULL;
const unsigned char *deviceCode = NULL; const unsigned char *deviceCode = NULL;
const unsigned char *fatherDeviceCode = NULL;
kk_group_ctx_t *ctx = _kk_group_get_ctx(); kk_group_ctx_t *ctx = _kk_group_get_ctx();
cJSON *actionsAry = cJSON_CreateArray(); cJSON *actionsAry = cJSON_CreateArray();
...@@ -411,14 +413,14 @@ cJSON *kk_group_device_db_exe_act(const char *groupId,int controlType,int proper ...@@ -411,14 +413,14 @@ cJSON *kk_group_device_db_exe_act(const char *groupId,int controlType,int proper
INFO_PRINT("groupId=%s,epnum=%s,deviceCode=%s\n",groupId,epnum,deviceCode); INFO_PRINT("groupId=%s,epnum=%s,deviceCode=%s\n",groupId,epnum,deviceCode);
if(strlen(parent)==0){ if(strlen(parent)==0){
const char *fatherDeviceCode = sqlite3_column_text(stmt, GROUP_DEVICE_DB_PARENT_DEVICECODE); fatherDeviceCode = sqlite3_column_text(stmt, GROUP_DEVICE_DB_PARENT_DEVICECODE);
sprintf(parent,"%s",fatherDeviceCode); sprintf(parent,"%s",fatherDeviceCode);
} }
actionItem = cJSON_CreateObject(); actionItem = cJSON_CreateObject();
cJSON_AddStringToObject(actionItem,"type","action/thing/cluster"); cJSON_AddStringToObject(actionItem,"type","action/thing/cluster");
cJSON_AddStringToObject(actionItem,"epNum",epnum); cJSON_AddStringToObject(actionItem,"epNum",(char*)epnum);
cJSON_AddStringToObject(actionItem,"deviceCode",deviceCode); cJSON_AddStringToObject(actionItem,"deviceCode",(char*)deviceCode);
char buf[64]; char buf[64];
memset(buf,0,sizeof(buf)); memset(buf,0,sizeof(buf));
...@@ -446,7 +448,7 @@ int kk_group_device_db_find_parent(const char *groupId,char *parent) ...@@ -446,7 +448,7 @@ int kk_group_device_db_find_parent(const char *groupId,char *parent)
{ {
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
char *sqlCmd = NULL; char *sqlCmd = NULL;
const unsigned char *fatherDeviceCode = NULL;
kk_group_ctx_t *ctx = _kk_group_get_ctx(); kk_group_ctx_t *ctx = _kk_group_get_ctx();
...@@ -455,7 +457,7 @@ int kk_group_device_db_find_parent(const char *groupId,char *parent) ...@@ -455,7 +457,7 @@ int kk_group_device_db_find_parent(const char *groupId,char *parent)
INFO_PRINT("Table searchCmd:%s\n",sqlCmd); INFO_PRINT("Table searchCmd:%s\n",sqlCmd);
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){
const char *fatherDeviceCode = sqlite3_column_text(stmt, GROUP_DEVICE_DB_PARENT_DEVICECODE); fatherDeviceCode = sqlite3_column_text(stmt, GROUP_DEVICE_DB_PARENT_DEVICECODE);
sprintf(parent,"%s",fatherDeviceCode); sprintf(parent,"%s",fatherDeviceCode);
break; break;
} }
......
...@@ -38,7 +38,7 @@ static int kk_service_group_msg_send_to_gw(const char *type,cJSON *params,const ...@@ -38,7 +38,7 @@ static int kk_service_group_msg_send_to_gw(const char *type,cJSON *params,const
cJSON_AddStringToObject(payload,"version","1.0"); cJSON_AddStringToObject(payload,"version","1.0");
char tm[33] = {0}; char tm[33] = {0};
snprintf(tm,sizeof(tm),"%d",time(NULL)); snprintf(tm,sizeof(tm),"%ld",time(NULL));
cJSON_AddStringToObject(payload,"time",tm); cJSON_AddStringToObject(payload,"time",tm);
memset(buff,0,sizeof(buff)); memset(buff,0,sizeof(buff));
......
...@@ -800,6 +800,10 @@ int kk_dm_device_subdev_filter(char *data) ...@@ -800,6 +800,10 @@ int kk_dm_device_subdev_filter(char *data)
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
struct kk_motor_bind_info *info = (struct kk_motor_bind_info *)malloc(sizeof(struct kk_motor_bind_info)*KK_MOTOR_BIND_INFO_MAX); struct kk_motor_bind_info *info = (struct kk_motor_bind_info *)malloc(sizeof(struct kk_motor_bind_info)*KK_MOTOR_BIND_INFO_MAX);
if(info == NULL){
return -1;
}
memset(info,0x0,sizeof(struct kk_motor_bind_info)*KK_MOTOR_BIND_INFO_MAX);
int info_size = kk_service_query_bind_motor(deviceCode,paramStr,info,KK_MOTOR_BIND_INFO_MAX); int info_size = kk_service_query_bind_motor(deviceCode,paramStr,info,KK_MOTOR_BIND_INFO_MAX);
cJSON *ary = cJSON_CreateArray(); cJSON *ary = cJSON_CreateArray();
......
...@@ -72,7 +72,8 @@ int kk_scene_db_init(void) ...@@ -72,7 +72,8 @@ int kk_scene_db_init(void)
compareType varchar(255), \ compareType varchar(255), \
compareValue varchar(255), \ compareValue varchar(255), \
sceneId varchar(255), \ sceneId varchar(255), \
isAnd INTEGER)"; isAnd INTEGER, \
active INTEGER)";
if (sqlite3_exec(ctx->pDb, pSceneTriggerTable, NULL, NULL, &pcErr) != SQLITE_OK) if (sqlite3_exec(ctx->pDb, pSceneTriggerTable, NULL, NULL, &pcErr) != SQLITE_OK)
...@@ -182,6 +183,23 @@ int kk_scene_db_init(void) ...@@ -182,6 +183,23 @@ int kk_scene_db_init(void)
_kk_scene_unlock(); _kk_scene_unlock();
return FAIL_RETURN; return FAIL_RETURN;
} }
const char *pSceneProTypeInfo = "CREATE TABLE IF NOT EXISTS SceneProTypeInfo( \
sceneId varchar(255), \
roomId varchar(255), \
propertyName varchar(255), \
propertyValue varchar(255), \
productType varchar(255), \
delay INTEGER)";
if (sqlite3_exec(ctx->pDb, pSceneProTypeInfo, NULL, NULL, &pcErr) != SQLITE_OK)
{
ERROR_PRINT("Error creating table (%s)\n", pcErr);
sqlite3_free(pcErr);
//eUtils_LockUnlock(&sLock);
_kk_scene_unlock();
return FAIL_RETURN;
}
#if 0 #if 0
printf("-------------------------------eee-----------------------akdkkkkkkkkkkkkkkkkkkkk---\n"); printf("-------------------------------eee-----------------------akdkkkkkkkkkkkkkkkkkkkk---\n");
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
...@@ -535,11 +553,11 @@ int kk_scene_insert_scene_trigger(const char* type,const char* deviceCode,int ep ...@@ -535,11 +553,11 @@ int kk_scene_insert_scene_trigger(const char* type,const char* deviceCode,int ep
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
const char *insertCmd = "insert into SceneTriggerInfo (type, deviceCode,epNum,propertyName,compareType,compareValue,sceneId,isAnd) \ const char *insertCmd = "insert into SceneTriggerInfo (type, deviceCode,epNum,propertyName,compareType,compareValue,sceneId,isAnd,active) \
values ('%s','%s','%d','%s','%s','%s','%s','%d');"; values ('%s','%s','%d','%s','%s','%s','%s','%d','%d');";
_kk_scene_lock(); _kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,type,deviceCode,epNum,propertyName,compareType,compareValue,sceneId,isAnd); sqlCmd = sqlite3_mprintf(insertCmd,type,deviceCode,epNum,propertyName,compareType,compareValue,sceneId,isAnd,1);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){ if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
...@@ -717,7 +735,7 @@ int kk_scene_insert_scene_invokeService(const char* type,const char* identifier, ...@@ -717,7 +735,7 @@ int kk_scene_insert_scene_invokeService(const char* type,const char* identifier,
*************************************************************/ *************************************************************/
int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epNum,const char* propertyName, int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epNum,const char* propertyName,
const char* propertyValue,int delay,const char* sceneId,const char *gwdeviceCode) const char* propertyValue,int delay,const char* sceneId,const char *gwdeviceCode,int act)
{ {
int res = 0; int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
...@@ -728,7 +746,7 @@ int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epN ...@@ -728,7 +746,7 @@ int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epN
values ('%s','%s','%d','%s','%s','%d','%s','%s','%d');"; values ('%s','%s','%d','%s','%s','%d','%s','%s','%d');";
_kk_scene_lock(); _kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,type,deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode,1); sqlCmd = sqlite3_mprintf(insertCmd,type,deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode,act);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){ if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
...@@ -764,8 +782,14 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value) ...@@ -764,8 +782,14 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value)
if( rc != SQLITE_OK ){ if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg); ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
}else{ }
INFO_PRINT("Table updata data successfully\n"); sqlite3_free(sqlCmd);
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);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} }
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
_kk_scene_unlock(); _kk_scene_unlock();
...@@ -890,6 +914,36 @@ int kk_scene_delete_scene_condition(const char *sceneId) ...@@ -890,6 +914,36 @@ int kk_scene_delete_scene_condition(const char *sceneId)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************ /************************************************************
*功能描述: 从数据库删除场景触发的基本数据
*输入参数: sceneId:场景Id
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_delete_scene_protype(const char *sceneId)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *deleteCmd = "delete from SceneProTypeInfo where sceneId = '%s';";
_kk_scene_lock();
sqlCmd = sqlite3_mprintf(deleteCmd,sceneId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return FAIL_RETURN;
}
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 从数据库删除定时场景的基本数据 *功能描述: 从数据库删除定时场景的基本数据
*输入参数: sceneId:场景Id *输入参数: sceneId:场景Id
*输出参数: 无 *输出参数: 无
...@@ -1011,5 +1065,40 @@ int kk_scene_delete_scene_action(const char *sceneId,int isforword) ...@@ -1011,5 +1065,40 @@ int kk_scene_delete_scene_action(const char *sceneId,int isforword)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述: 添加场景信息到数据库
*输入参数: name:场景名称
enable: 1,使能;0,不使能
sceneType:场景类型
sceneId:场景Id
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_insert_sceneProType_info(const char* roomId,char *propertyName,char *propertyValue,const char* sceneId,char *productType,int delay)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *insertCmd = "insert into SceneProTypeInfo (sceneId,roomId,propertyName,propertyValue,productType,delay) \
values ('%s','%s','%s','%s','%s','%d');";
_kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,sceneId,roomId,propertyName,propertyValue,productType,delay);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return FAIL_RETURN;
}
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return SUCCESS_RETURN;
}
...@@ -28,6 +28,7 @@ enum{ ...@@ -28,6 +28,7 @@ enum{
DB_SCENETRIGGER_COMPAREVALUE, DB_SCENETRIGGER_COMPAREVALUE,
DB_SCENETRIGGER_SCENEID, DB_SCENETRIGGER_SCENEID,
DB_SCENETRIGGER_ISAND, DB_SCENETRIGGER_ISAND,
DB_SCENETRIGGER_ACTIVE,
}; };
enum{ enum{
...@@ -79,6 +80,15 @@ enum{ ...@@ -79,6 +80,15 @@ enum{
DB_QUICKPANEL_ROOMID, DB_QUICKPANEL_ROOMID,
DB_QUICKPANEL_PRODUCTTYPE, DB_QUICKPANEL_PRODUCTTYPE,
}; };
enum{
DB_SCENEPROTYPE_SCENEID = 0,
DB_SCENEPROTYPE_ROOMID ,
DB_SCENEPROTYPE_PROPERTYNAME ,
DB_SCENEPROTYPE_PROPERTYVALUE ,
DB_SCENEPROTYPE_PROTYPE ,
DB_SCENEPROTYPE_DELAY ,
};
int kk_scene_delete_scene_timing(const char *sceneId); int kk_scene_delete_scene_timing(const char *sceneId);
int kk_scene_delete_scene_condition(const char *sceneId); int kk_scene_delete_scene_condition(const char *sceneId);
int kk_scene_delete_scene_trigger(const char *sceneId); int kk_scene_delete_scene_trigger(const char *sceneId);
...@@ -87,13 +97,13 @@ int kk_scene_delete_scene_info(const char *sceneId); ...@@ -87,13 +97,13 @@ int kk_scene_delete_scene_info(const char *sceneId);
int kk_scene_delete_scene_invokeservice(const char *sceneId); int kk_scene_delete_scene_invokeservice(const char *sceneId);
int kk_scene_delete_scene_action(const char *sceneId,int isforword); int kk_scene_delete_scene_action(const char *sceneId,int isforword);
int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epNum,const char* propertyName, int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epNum,const char* propertyName,
const char* propertyValue,int delay,const char* sceneId,const char *gwdeviceCode); const char* propertyValue,int delay,const char* sceneId,const char *gwdeviceCode,int act);
int kk_scene_insert_scene_invokeService(const char* type,const char* identifier,const char* args,const char* sceneId); int kk_scene_insert_scene_invokeService(const char* type,const char* identifier,const char* args,const char* sceneId);
int kk_scene_insert_scene_embed(int delay,const char* executeSceneId,const char* sceneId); int kk_scene_insert_scene_embed(int delay,const char* executeSceneId,const char* sceneId);
int kk_scene_insert_scene_timer(time_t startTime,char weekflag,const char* sceneId); int kk_scene_insert_scene_timer(time_t startTime,char weekflag,const char* sceneId);
int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,int crossDay, int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,int crossDay,
char repeat_days,const char* sceneId); char repeat_days,const char* sceneId);
int kk_scene_insert_scene_trigger(const char* type,const char* deviceCode,int epNum,const char* propertyName, 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); const char* compareType,const char* compareValue,const char* sceneId,int isAnd);
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_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_update_scene_enable(int enable,const char *sceneId);
...@@ -106,4 +116,6 @@ int kk_scene_update_productType(const char *sceneId,char *productType); ...@@ -106,4 +116,6 @@ int kk_scene_update_productType(const char *sceneId,char *productType);
int kk_scene_update_actionRoomId(const char *sceneId,char *roomId); int kk_scene_update_actionRoomId(const char *sceneId,char *roomId);
int kk_scene_update_device_active(char *deviceCode,int epNum,int value); int kk_scene_update_device_active(char *deviceCode,int epNum,int value);
int kk_scene_rebuild_device_active(char *deviceCode,int epNum); int kk_scene_rebuild_device_active(char *deviceCode,int epNum);
int kk_scene_delete_scene_protype(const char *sceneId);
int kk_scene_insert_sceneProType_info(const char* roomId,char *propertyName,char *propertyValue,const char* sceneId,char *productType,int delay);
#endif #endif
...@@ -449,6 +449,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac ...@@ -449,6 +449,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
kk_scene_delete_scene_info(sceneId); kk_scene_delete_scene_info(sceneId);
kk_scene_delete_scene_trigger(sceneId); kk_scene_delete_scene_trigger(sceneId);
kk_scene_delete_scene_condition(sceneId); kk_scene_delete_scene_condition(sceneId);
kk_scene_delete_scene_protype(sceneId);
kk_scene_delete_scene_action(sceneId,isforword); kk_scene_delete_scene_action(sceneId,isforword);
kk_scene_delete_scene_invokeservice(sceneId); kk_scene_delete_scene_invokeservice(sceneId);
} }
...@@ -1412,7 +1413,7 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -1412,7 +1413,7 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
char *propertyNameStr = cJSON_PrintUnformatted(temp); char *propertyNameStr = cJSON_PrintUnformatted(temp);
res = kk_scene_insert_scene_action(typeStr,"",0, res = kk_scene_insert_scene_action(typeStr,"",0,
propertyNameStr,propertyValueStr,delay->valueint,sceneId,""); propertyNameStr,propertyValueStr,delay->valueint,sceneId,"",1);
free(propertyNameStr); free(propertyNameStr);
} }
else else
...@@ -1429,15 +1430,23 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -1429,15 +1430,23 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
roomId = cJSON_GetObjectItem(item,MSG_AREA_ROOM_ROOMID); roomId = cJSON_GetObjectItem(item,MSG_AREA_ROOM_ROOMID);
} }
delay = cJSON_GetObjectItem(item,MSG_SCENE_DELAY); 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; if(delay == NULL) return FAIL_RETURN;
int idelay = delay->valueint; int idelay = delay->valueint;
kk_scene_update_productType(sceneId,productType->valuestring);
if(propertyValue->type==cJSON_String){ if(propertyValue->type==cJSON_String){
kk_scene_insert_sceneProType_info((char*)roomId->valuestring,propertyName->valuestring,propertyValue->valuestring,(char*)sceneId,productType->valuestring,idelay);
kk_subDev_set_action_by_productType(productType->valuestring,roomId->valuestring,sceneId,propertyName->valuestring, kk_subDev_set_action_by_productType(productType->valuestring,roomId->valuestring,sceneId,propertyName->valuestring,
propertyValue->valuestring,typeStr,idelay); propertyValue->valuestring,typeStr,idelay);
}else{ }else if(propertyValue->type==cJSON_Number){
char buf2char[16] = {0};
sprintf(buf2char,"%d",propertyValue->valueint);
kk_scene_insert_sceneProType_info((char*)roomId->valuestring,propertyName->valuestring,buf2char,(char*)sceneId,productType->valuestring,idelay);
kk_subDev_set_action_by_productType(productType->valuestring,roomId->valuestring,sceneId,propertyName->valuestring,
buf2char,typeStr,idelay);
}else if(propertyValue->type==cJSON_Object){
char *str = cJSON_PrintUnformatted(propertyValue); char *str = cJSON_PrintUnformatted(propertyValue);
kk_scene_insert_sceneProType_info((char*)roomId->valuestring,propertyName->valuestring,str,(char*)sceneId,productType->valuestring,idelay);
kk_subDev_set_action_by_productType(productType->valuestring,roomId->valuestring,sceneId,propertyName->valuestring, kk_subDev_set_action_by_productType(productType->valuestring,roomId->valuestring,sceneId,propertyName->valuestring,
str,typeStr,idelay); str,typeStr,idelay);
free(str); free(str);
...@@ -1510,11 +1519,11 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -1510,11 +1519,11 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
} }
//printf("---------------------------------DEBUG CWC[%s][%d]\n",__FUNCTION__,__LINE__); //printf("---------------------------------DEBUG CWC[%s][%d]\n",__FUNCTION__,__LINE__);
res = kk_scene_insert_scene_action(typeStr,node->deviceCode,iepnum, res = kk_scene_insert_scene_action(typeStr,node->deviceCode,iepnum,
info.propertyName,propertyValueStr,idelay,sceneId,node->fatherDeviceCode); info.propertyName,propertyValueStr,idelay,sceneId,node->fatherDeviceCode,1);
}else{ }else{
res = kk_scene_insert_scene_action(typeStr,node->deviceCode,iepnum, res = kk_scene_insert_scene_action(typeStr,node->deviceCode,iepnum,
propertyName->valuestring,propertyValueStr,idelay,sceneId,node->fatherDeviceCode); propertyName->valuestring,propertyValueStr,idelay,sceneId,node->fatherDeviceCode,1);
} }
if(res != SUCCESS_RETURN){ if(res != SUCCESS_RETURN){
...@@ -1576,7 +1585,7 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId,int is ...@@ -1576,7 +1585,7 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId,int is
cJSON_AddItemToArray(array,arrayParam); cJSON_AddItemToArray(array,arrayParam);
//break; //break;
kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,atoi(epNum->valuestring), kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,atoi(epNum->valuestring),
"","",0,sceneId,node->fatherDeviceCode); "","",0,sceneId,node->fatherDeviceCode,1);
} }
item = item->next; item = item->next;
...@@ -1905,6 +1914,7 @@ int kk_scene_check_trigger_condition(const char *sceneId) ...@@ -1905,6 +1914,7 @@ int kk_scene_check_trigger_condition(const char *sceneId)
char *compareValue = NULL; char *compareValue = NULL;
int conditionFlag = 0; int conditionFlag = 0;
int sceneType = 0,isEnable = 0; int sceneType = 0,isEnable = 0;
int active = 0;
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
char currentValue[64] = {0}; char currentValue[64] = {0};
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
...@@ -1917,11 +1927,15 @@ int kk_scene_check_trigger_condition(const char *sceneId) ...@@ -1917,11 +1927,15 @@ int kk_scene_check_trigger_condition(const char *sceneId)
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){
conditionFlag = 1; conditionFlag = 1;
pdeviceCode = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE); pdeviceCode = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE);
identifier = (char*)sqlite3_column_text(stmt,DB_SCENETRIGGER_PROPERTYNAME); identifier = (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);
active = sqlite3_column_int(stmt,DB_SCENETRIGGER_ACTIVE);
if(active == 0){//限制条件的设备被移除的情况下,相当于没有此条限制条件
res = SUCCESS_RETURN;
continue;
}
kk_property_db_get_value_directly(pdeviceCode,identifier,currentValue); kk_property_db_get_value_directly(pdeviceCode,identifier,currentValue);
INFO_PRINT("currentValue:%s\n",currentValue); INFO_PRINT("currentValue:%s\n",currentValue);
...@@ -2507,7 +2521,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param) ...@@ -2507,7 +2521,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx(); kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneTriggerInfo WHERE deviceCode= '%s'",deviceCode); 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){
sceneId = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_SCENEID); sceneId = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_SCENEID);
...@@ -2773,4 +2787,3 @@ int kk_scene_rebuild_device_active(char *deviceCode,int epNum) ...@@ -2773,4 +2787,3 @@ int kk_scene_rebuild_device_active(char *deviceCode,int epNum)
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
\ No newline at end of file
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