Commit 48b5d7ed authored by chen.weican's avatar chen.weican

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

【提交人】陈伟灿
parent 7fc8146e
......@@ -152,6 +152,7 @@ typedef enum {
#define MAX_LISTEN_NUM 10
#define MAX_IP_LEN 16
#define KK_DEVICE_SCREEN_MAX_SUPPORT 8
#define KK_DEVICE_LOCKUSR_MAX_SUPPORT 64
//#ifndef DEVICE_CODE_LEN
//#define DEVICE_CODE_LEN 33
//#endif
......
......@@ -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 res = 0;
int res = SUCCESS_RETURN;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
......@@ -547,7 +547,7 @@ int kk_room_dev_add(const char *roomId,const char *roomName,const char *deviceCo
}
sqlite3_free(sqlCmd);
_kk_area_unlock();
return SUCCESS_RETURN;
return res;
}
int kk_room_reset_armingstate(void)
{
......@@ -721,7 +721,7 @@ int kk_room_dev_remove(const char *deviceCode,const char *epNum)
}
sqlite3_free(sqlCmd);
_kk_area_unlock();
return SUCCESS_RETURN;
return res;
}
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)
dm_mgr_dev_node_t *search_node = NULL;
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); */
if (node) {
*node = search_node;
......@@ -1756,6 +1756,7 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
return FAIL_RETURN;
}
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_room_dev_remove(deviceCode,NULL);
......
......@@ -78,7 +78,6 @@ typedef struct {
#define KK_THING_SERVICE_GETLOCALTIMER "/thing/service/getLocalTimer"
#define KK_THING_SERVICE_SETCOUNTDOWN "/thing/service/setCountDown"
#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_DELETEKEY "/thing/service/DeleteKey"
#define KK_THING_SERVICE_MODIFYKEY "/thing/service/ModifyKey"
......@@ -161,7 +160,8 @@ typedef struct {
#define KK_THING_SERVICE_QUERYGROUP_REPLY "/thing/service/queryGroup_reply"
#define KK_THING_SERVICE_EXCUTEGROUP "/thing/service/excuteGroup"
#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);
......
This diff is collapsed.
......@@ -114,6 +114,22 @@ static int kk_subDev_db_Init(void)
sqlite3_free(pcErr);
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);
_kk_subDb_unlock();
return SUCCESS_RETURN;
......@@ -224,7 +240,7 @@ static int _kk_check_subDev_exist(const char* deviceCode)
pmac = (char*)sqlite3_column_text(stmt, DB_SUB_DEVICECODE);
if(!strcmp(deviceCode,pmac))
{
{
isExist = 1;
break;
}
......@@ -235,7 +251,137 @@ static int _kk_check_subDev_exist(const char* deviceCode)
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:设备类型
......
......@@ -18,6 +18,12 @@ typedef struct {
char mac[32];
int type;
} 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_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);
......@@ -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_subDev_update_fatherDeviceCode(char *fatherDeviceCode,const char *deviceCode);
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{
DB_SUB_IDX = 0,
DB_SUB_ONLINE,
......@@ -74,4 +82,13 @@ enum{
DB_SCREEN_ROOMNAME,
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
......@@ -1247,18 +1247,26 @@ static int kk_get_scenes_trigger_info(cJSON *triggerObj,char *sceneId)
isAnd = sqlite3_column_int(stmt, DB_SCENETRIGGER_ISAND);
if(isAnd == 0){
cJSON *triggerItem = cJSON_CreateObject();
type = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_TYPE);
deviceCode = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_DEVICECODE);
epNum = sqlite3_column_int(stmt, DB_SCENETRIGGER_EPNUM);
propertyName = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_PROPERTYNAME);
compareType = (char*)sqlite3_column_text(stmt, DB_SCENETRIGGER_COMPARETYPE);
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, KK_SYNC_DEVICECODE_STR, (char*)deviceCode);
cJSON_AddNumberToObject(triggerItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
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_COMPAREValue_STR, (char*)compareValue);
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_COMPARETYPE_STR, (char*)compareType);
cJSON_AddStringToObject(triggerItem, KK_SYNC_SCENE_COMPAREValue_STR, (char*)compareValue);
}
cJSON_AddItemToArray(triggerAry, triggerItem);
}
}
......
......@@ -63,6 +63,7 @@ char * g_filerToPlatTable[] =
(char *){KK_THING_SERVICE_ACTIVEBUTTON},
(char *){KK_THING_SERVICE_HISTORYALARM},
(char *){KK_THING_SERVICE_DEL_HISTORYALARM},
(char *){KK_THING_SERVICE_GETKEYLIST},
};
static char s_ccuid[DEVICE_CODE_LEN] = {0};
static char s_Version[VERSION_MAXLEN] = {0};
......@@ -1533,7 +1534,8 @@ void kk_platMsg_handle(void* data, char* chalMark){
goto error;
}
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);
//dm_mgr_subdev_delete(devCode->valuestring);
......@@ -1630,7 +1632,25 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(pack==1){
INFO_PRINT("kk_platMsg_handle data: event pack post\n");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL);
kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
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);
}
}
}
else if(strcmp(eventItem->identifier,MSG_PROPERTY_STR) != 0 &&
......
......@@ -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_lock();
sqlCmd = sqlite3_mprintf("UPDATE SceneActionInfo SET active='%d' WHERE deviceCode = '%s' and epNum= '%d'",value,deviceCode,epNum);
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);
}
INFO_PRINT("kk_scene_update_device_active sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
......@@ -784,8 +788,11 @@ int kk_scene_update_device_active(char *deviceCode,int epNum,int value)
sqlite3_free(zErrMsg);
}
sqlite3_free(sqlCmd);
sqlCmd = sqlite3_mprintf("UPDATE SceneTriggerInfo SET active='%d' WHERE deviceCode = '%s' and epNum= '%d'",value,deviceCode,epNum);
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);
}
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
......
......@@ -49,6 +49,7 @@ enum{
DB_SCENEACTION_DELAY,
DB_SCENEACTION_SCENEID,
DB_SCENEACTION_GWDEVICECODE,
DB_SCENEACTION_ACTIVE,
};
enum{
......
This diff is collapsed.
......@@ -51,6 +51,17 @@
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"dataType": {
......@@ -141,6 +152,17 @@
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"dataType": {
......@@ -189,6 +211,7 @@
"PowerSwitch",
"Brightness",
"ColorTemperature",
"ColorTempSwitch",
"FadeTime",
"LowBrightness",
"HighBrightness"
......@@ -260,6 +283,19 @@
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"accessMode":"rw",
"required":true,
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"accessMode": "rw",
......@@ -352,6 +388,17 @@
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"dataType": {
......
......@@ -44,13 +44,24 @@
"specs": {
"min": "0",
"max": "100",
"unit": "K",
"unit": "%",
"unitName": "百分比",
"step": "1"
}
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"dataType": {
......@@ -134,13 +145,24 @@
"specs": {
"min": "0",
"max": "100",
"unit": "K",
"unit": "%",
"unitName": "百分比",
"step": "1"
}
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"dataType": {
......@@ -189,6 +211,7 @@
"PowerSwitch",
"Brightness",
"ColorTemperature",
"ColorTempSwitch",
"FadeTime",
"LowBrightness",
"HighBrightness"
......@@ -253,13 +276,26 @@
"specs": {
"min": "0",
"max": "100",
"unit": "K",
"unit": "%",
"unitName": "百分比",
"step": "1"
}
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"accessMode":"rw",
"required":true,
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"accessMode": "rw",
......@@ -345,13 +381,24 @@
"specs": {
"min": "0",
"max": "100",
"unit": "K",
"unit": "%",
"unitName": "百分比",
"step": "1"
}
},
"name": "色温"
},
{
"identifier": "ColorTempSwitch",
"dataType": {
"specs": {
"0": "关闭",
"1": "打开"
},
"type": "bool"
},
"name": "色温开关使能"
},
{
"identifier": "FadeTime",
"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