Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
k-sdk
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈伟灿
k-sdk
Commits
48b5d7ed
Commit
48b5d7ed
authored
Feb 25, 2022
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】增加门锁的场景设置和同步
【提交人】陈伟灿
parent
7fc8146e
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
608 additions
and
79 deletions
+608
-79
common/api/com_api.h
common/api/com_api.h
+1
-0
midware/midware/area/kk_area_handle.c
midware/midware/area/kk_area_handle.c
+3
-3
midware/midware/dm/kk_dm_mng.c
midware/midware/dm/kk_dm_mng.c
+2
-1
midware/midware/dm/kk_dm_msg.h
midware/midware/dm/kk_dm_msg.h
+2
-2
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+127
-35
midware/midware/dm/kk_sub_db.c
midware/midware/dm/kk_sub_db.c
+147
-1
midware/midware/dm/kk_sub_db.h
midware/midware/dm/kk_sub_db.h
+18
-1
midware/midware/dm/kk_sync_data.c
midware/midware/dm/kk_sync_data.c
+13
-5
midware/midware/midware.c
midware/midware/midware.c
+22
-2
midware/midware/scene/kk_scene_db.c
midware/midware/scene/kk_scene_db.c
+10
-3
midware/midware/scene/kk_scene_db.h
midware/midware/scene/kk_scene_db.h
+1
-0
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+164
-22
tsl/product_3094.json
tsl/product_3094.json
+47
-0
tsl/product_3137.json
tsl/product_3137.json
+51
-4
No files found.
common/api/com_api.h
View file @
48b5d7ed
...
...
@@ -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
...
...
midware/midware/area/kk_area_handle.c
View file @
48b5d7ed
...
...
@@ -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
)
...
...
midware/midware/dm/kk_dm_mng.c
View file @
48b5d7ed
...
...
@@ -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
);
...
...
midware/midware/dm/kk_dm_msg.h
View file @
48b5d7ed
...
...
@@ -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
);
...
...
midware/midware/dm/kk_linkkit.c
View file @
48b5d7ed
...
...
@@ -415,7 +415,7 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf)
}
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
state
=
cJSON_GetObjectItem
(
paramStr
,
MSG_TOPO_CHANGE_TYPE_STR
);
kk_topo_delete_report
(
paramStr
);
//主动报topo delete
//
kk_topo_delete_report(paramStr);//主动报topo delete
if
(
state
!=
NULL
&&
state
->
valueint
==
1
){
cJSON
*
deviceArray
=
cJSON_GetObjectItem
(
paramStr
,
MSG_TOPO_CHANGE_DEVICES_STR
);
if
(
deviceArray
==
NULL
){
...
...
@@ -446,6 +446,8 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf)
cJSON_AddItemToObject
(
rootData
,
"payload"
,
payload
);
char
*
pnewout
=
cJSON_Print
(
rootData
);
kk_sendData2gw
(
pnewout
,
strlen
(
pnewout
),
node
->
fatherDeviceCode
);
//send to gw itself
kk_scene_update_device_active
(
deviceCode
,
-
1
,
0
);
kk_scene_rebuild_device_active
(
deviceCode
,
-
1
);
dm_mgr_subdev_delete
(
deviceCode
);
free
(
pnewout
);
//cJSON_Delete(rootData);
...
...
@@ -780,7 +782,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
}
else
{
strcpy
(
epNumStr
,
epNum
->
valuestring
);
}
kk_room_dev_add
(
roomId
->
valuestring
,
room_name
->
valuestring
,
deviceCode
->
valuestring
,
epNumStr
,
dev_name
->
valuestring
);
res
=
kk_room_dev_add
(
roomId
->
valuestring
,
room_name
->
valuestring
,
deviceCode
->
valuestring
,
epNumStr
,
dev_name
->
valuestring
);
//kk_scene_update_device_active(deviceCode->valuestring,atoi(epNumStr),1);
//kk_scene_rebuild_device_active(deviceCode->valuestring,atoi(epNumStr));
//内机默认添加到跟网关同个房间
...
...
@@ -826,7 +828,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
}
}
#endif
return
SUCCESS_RETURN
;
return
res
;
}
/************************************************************
*功能描述:删除设备从房间处理函数
...
...
@@ -970,6 +972,7 @@ static int kk_service_setFloor_handle(cJSON *params)
while
(
itemroom
!=
NULL
){
cJSON
*
roomid
=
cJSON_GetObjectItem
(
itemroom
,
MSG_AREA_ROOM_CCUROOMID
);
if
(
roomid
==
NULL
){
ERROR_PRINT
(
"DATA ERROR!!!
\n
"
);
return
INVALID_PARAMETER
;
}
kk_room_set_floor_info
(
floorId
->
valuestring
,
""
,
roomid
->
valuestring
);
...
...
@@ -1431,6 +1434,76 @@ static int kk_service_getScreenList_handle(cJSON *param,cJSON *msgId)
cJSON_Delete
(
info
);
return
res
;
}
/************************************************************
*功能描述:获取智能锁用户信息
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_LockKeyList_handle
(
cJSON
*
inforoot
,
cJSON
*
msgId
)
{
int
res
=
0
;
int
i
=
0
,
num
=
0
;
LockKeyInfo_t
*
pList
=
NULL
;
if
(
inforoot
==
NULL
||
msgId
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
inforoot
,
MSG_DEVICE_CODE_STR
);
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
productCode
=
cJSON_GetObjectItem
(
inforoot
,
MSG_PRODUCT_CODE_STR
);
if
(
productCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
info
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
info
,
MSG_TYPE_STR
,
KK_THING_SERVICE_GETKEYLIST_REPLY
);
cJSON_AddStringToObject
(
info
,
MSG_DEVICE_CODE_STR
,
deviceCode
->
valuestring
);
cJSON_AddStringToObject
(
info
,
MSG_PRODUCT_CODE_STR
,
productCode
->
valuestring
);
char
*
infff
=
cJSON_Print
(
info
);
cJSON
*
payload
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
payload
,
"desc"
,
"success"
);
cJSON_AddStringToObject
(
payload
,
"version"
,
"1.0"
);
cJSON_AddStringToObject
(
payload
,
"code"
,
"0"
);
cJSON_AddStringToObject
(
payload
,
"msgId"
,
msgId
->
valuestring
);
cJSON_AddStringToObject
(
payload
,
"method"
,
"thing.service.getKeyList_reply"
);
pList
=
(
LockKeyInfo_t
*
)
malloc
(
sizeof
(
LockKeyInfo_t
)
*
KK_DEVICE_LOCKUSR_MAX_SUPPORT
);
if
(
pList
==
NULL
){
ERROR_PRINT
(
"MALLOC ERROR!!!"
);
cJSON_Delete
(
payload
);
cJSON_Delete
(
info
);
free
(
infff
);
return
-
1
;
}
memset
(
pList
,
0x0
,
sizeof
(
LockKeyInfo_t
)
*
KK_DEVICE_LOCKUSR_MAX_SUPPORT
);
cJSON
*
paramArray
=
cJSON_CreateArray
();
num
=
kk_get_LockUser_list
(
pList
,
deviceCode
->
valuestring
);
for
(
i
=
0
;
i
<
num
;
i
++
){
cJSON
*
Item
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
Item
,
"keyRole"
,
pList
[
i
].
keyRole
);
cJSON_AddStringToObject
(
Item
,
"keyName"
,
pList
[
i
].
keyName
);
cJSON_AddStringToObject
(
Item
,
"keyID"
,
pList
[
i
].
keyId
);
cJSON_AddStringToObject
(
Item
,
"keyType"
,
pList
[
i
].
keyType
);
cJSON_AddItemToArray
(
paramArray
,
Item
);
}
cJSON
*
data
=
cJSON_CreateObject
();
cJSON_AddItemToObject
(
data
,
"data"
,
paramArray
);
cJSON_AddItemToObject
(
payload
,
"params"
,
data
);
char
*
payload11
=
cJSON_Print
(
payload
);
kk_sendData2app
(
infff
,
payload11
,
0
);
free
(
payload11
);
free
(
infff
);
free
(
pList
);
cJSON_Delete
(
payload
);
cJSON_Delete
(
info
);
return
res
;
}
/************************************************************
*功能描述:获取指定屏类数据
*输入参数:params:云端下发数据,包含场景Id等
...
...
@@ -2191,58 +2264,66 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
" delete room
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_deleteRoom_handle
(
paramStr
);
if
(
kk_service_deleteRoom_handle
(
paramStr
)
==
0
){
kk_service_deleteRoom_reply
(
info_root
,
msgId
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDDEVICETOROOM
)
==
0
){
INFO_PRINT
(
" adddevicetoroom
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_addDeviceToRoom_handle
(
paramStr
);
if
(
kk_service_addDeviceToRoom_handle
(
paramStr
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_ADDDEVICETOROOM_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REMOVEDEVICEFROMROOM
)
==
0
){
INFO_PRINT
(
" removedevicefromroom
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_removeDeviceFromRoom_handle
(
paramStr
);
if
(
kk_service_removeDeviceFromRoom_handle
(
paramStr
)
==
0
){
//kk_service_addDeviceToRoom_reply(info_root,msgId,1);
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_REMOVEDEVICEFROMROOM_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDSCENC
)
==
0
){
INFO_PRINT
(
" add scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_addScene_handle
(
paramStr
,
msgId
);
if
(
kk_service_addScene_handle
(
paramStr
,
msgId
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_ADDSCENC_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_UPDATESCENC
)
==
0
){
INFO_PRINT
(
" update scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_updateScene_handle
(
paramStr
,
msgId
);
if
(
kk_service_updateScene_handle
(
paramStr
,
msgId
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_UPDATESCENC_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ENABLESCENC
)
==
0
){
INFO_PRINT
(
" enable scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_enableScene_handle
(
paramStr
,
msgId
);
if
(
kk_service_enableScene_handle
(
paramStr
,
msgId
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_ENABLESCENC_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETESCENC
)
==
0
){
INFO_PRINT
(
"delete scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_deleteScene_handle
(
paramStr
,
msgId
);
if
(
kk_service_deleteScene_handle
(
paramStr
,
msgId
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_DELETESCENC_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTESCENE
)
==
0
){
INFO_PRINT
(
"execute scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_executeScene_handle
(
paramStr
,
msgId
);
if
(
kk_service_executeScene_handle
(
paramStr
,
msgId
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_EXECUTESCENE_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_SYNCDEVICEINFO
)
==
0
){
INFO_PRINT
(
"SYNCDEVICEINFO service
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
...
...
@@ -2287,11 +2368,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
"bind scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
if
(
paramStr
!=
NULL
){
kk_service_bindScene_handle
(
paramStr
,
deviceCode
->
valuestring
);
if
(
kk_service_bindScene_handle
(
paramStr
,
deviceCode
->
valuestring
)
==
0
){
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_common_reply
(
info_root
,
msgId
,
"/thing/service/bindScene_reply"
);
}
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_UNBINDSBUTTTON
)
==
0
){
INFO_PRINT
(
"unbind button
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
...
...
@@ -2319,11 +2401,12 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
goto
directReturn
;
}
sprintf
(
btnId
,
"%d"
,
buttonId
->
valueint
);
kk_scene_execute_quickpanel
(
btnId
,
deviceCode
->
valuestring
);
if
(
kk_scene_execute_quickpanel
(
btnId
,
deviceCode
->
valuestring
)
==
0
){
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_common_reply
(
info_root
,
msgId
,
"/thing/service/activeButton_reply"
);
}
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_GETCCUVERSION
)
==
0
){
INFO_PRINT
(
"GET CCU VERISON
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
...
...
@@ -2356,9 +2439,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
"SETFLOOR
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_setFloor_handle
(
paramStr
);
if
(
kk_service_setFloor_handle
(
paramStr
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_SETFLOOR_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDFLOORS
)
==
0
){
INFO_PRINT
(
"ADDFLOOR
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
...
...
@@ -2369,9 +2453,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
"DELETEFLOOR
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_deleteFloor_handle
(
paramStr
);
if
(
kk_service_deleteFloor_handle
(
paramStr
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_DELETEFLOORS_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_GETFLOOR
)
==
0
){
INFO_PRINT
(
"GETFLOOR
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
...
...
@@ -2382,9 +2467,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
"UPDATEFLOOR
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_updateFloor_handle
(
paramStr
);
if
(
kk_service_updateFloor_handle
(
paramStr
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_UPDATEFLOORS_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_CLIENTREPORT
)
==
0
){
INFO_PRINT
(
"CLIENTREPORT
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
...
...
@@ -2395,9 +2481,10 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
"SPECIALDEV TO ROOM
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_addScreenToRoom_handle
(
paramStr
);
if
(
kk_service_addScreenToRoom_handle
(
paramStr
)
==
0
){
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_SPECIALDEVTOROOM_REPLY
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_RMSPECIALDEVFROMROOM
)
==
0
){
INFO_PRINT
(
"RM SPECIALDEV FROM ROOM
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
...
...
@@ -2452,6 +2539,11 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_executeGroup_handle
(
info_root
,
paramStr
,
msgId
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_GETKEYLIST
)
==
0
){
INFO_PRINT
(
"GETKEYLIST
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
kk_service_LockKeyList_handle
(
info_root
,
msgId
);
}
else
{
INFO_PRINT
(
"Error msgtype!!!
\n
"
);
}
...
...
midware/midware/dm/kk_sub_db.c
View file @
48b5d7ed
...
...
@@ -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:设备类型
...
...
midware/midware/dm/kk_sub_db.h
View file @
48b5d7ed
...
...
@@ -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
midware/midware/dm/kk_sync_data.c
View file @
48b5d7ed
...
...
@@ -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
);
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
);
}
}
...
...
midware/midware/midware.c
View file @
48b5d7ed
...
...
@@ -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
};
...
...
@@ -1534,6 +1535,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
}
dm_mgr_update_timestamp_by_devicecode
(
node
->
deviceCode
,
0
);
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,9 +1632,27 @@ 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
);
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
&&
eventItem
->
output_data_number
==
0
){
itemStr
=
cJSON_GetObjectItem
(
jsonPay
,
eventItem
->
identifier
);
...
...
midware/midware/scene/kk_scene_db.c
View file @
48b5d7ed
...
...
@@ -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
();
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
);
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
);
...
...
midware/midware/scene/kk_scene_db.h
View file @
48b5d7ed
...
...
@@ -49,6 +49,7 @@ enum{
DB_SCENEACTION_DELAY
,
DB_SCENEACTION_SCENEID
,
DB_SCENEACTION_GWDEVICECODE
,
DB_SCENEACTION_ACTIVE
,
};
enum
{
...
...
midware/midware/scene/kk_scene_handle.c
View file @
48b5d7ed
...
...
@@ -583,6 +583,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
if
(
action
==
NULL
||
gwdeviceCode
==
NULL
||
sceneId
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
root
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
root
,
MSG_SCENE_SCENEID
,
sceneId
);
cJSON_AddItemToObject
(
root
,
MSG_SCENE_ACTIONS
,
action
);
...
...
@@ -982,6 +983,37 @@ static int kk_scene_parse_trigger_detail(const char *type,const cJSON *item,cons
return
res
;
}
static
int
kk_scene_parse_trigger_event_type
(
const
char
*
type
,
const
cJSON
*
item
,
const
char
*
sceneId
,
int
isAnd
)
{
int
res
=
FAIL_RETURN
;
cJSON
*
deviceCode
,
*
epNum
;
cJSON
*
propertyName
;
cJSON
*
compares
;
int
ep
=
0
;
if
(
type
==
NULL
||
item
==
NULL
||
sceneId
==
NULL
){
return
INVALID_PARAMETER
;
}
deviceCode
=
cJSON_GetObjectItem
(
item
,
MSG_DEVICE_CODE_STR
);
if
(
deviceCode
==
NULL
)
return
FAIL_RETURN
;
epNum
=
cJSON_GetObjectItem
(
item
,
MSG_SCENE_EPNUM
);
if
(
epNum
==
NULL
){
ep
=
1
;
}
else
{
if
(
epNum
->
type
==
cJSON_Number
){
ep
=
epNum
->
valueint
;
}
else
{
ep
=
atoi
(
epNum
->
valuestring
);
}
}
propertyName
=
cJSON_GetObjectItem
(
item
,
"identifier"
);
if
(
propertyName
==
NULL
)
return
FAIL_RETURN
;
compares
=
cJSON_GetObjectItem
(
item
,
"compares"
);
if
(
compares
==
NULL
)
return
FAIL_RETURN
;
char
*
compareValue
=
cJSON_PrintUnformatted
(
compares
);
res
=
kk_scene_insert_scene_trigger
(
type
,
deviceCode
->
valuestring
,
ep
,
propertyName
->
valuestring
,
""
,
compareValue
,
sceneId
,
isAnd
);
return
res
;
}
/************************************************************
*功能描述:解析场景触发条件
*输入参数:str:触发内容的CJSON字串;
...
...
@@ -1028,6 +1060,12 @@ int kk_scene_parse_scene_trigger(const cJSON* str,const char *sceneId)
time_t
newStart
=
kk_scene_creat_timer_starttime
(
weekflag
,
atoi
(
timestr
->
valuestring
),
current
);
kk_scene_insert_scene_timer
(
newStart
,
weekflag
,
sceneId
);
kk_scene_push_timer_info
(
newStart
,
weekflag
,(
char
*
)
sceneId
);
}
else
if
(
!
strcmp
(
"trigger/thing/event"
,
type
->
valuestring
)){
res
=
kk_scene_parse_trigger_event_type
(
type
->
valuestring
,
item
,
sceneId
,
0
);
if
(
res
!=
SUCCESS_RETURN
){
ERROR_PRINT
(
"kk_scene_parse_trigger_event_type fail!!!
\n
"
);
return
res
;
}
}
item
=
item
->
next
;
}
...
...
@@ -1610,7 +1648,7 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId,int is
int
kk_scene_parse_addscene
(
const
cJSON
*
args
,
char
*
sceneId
,
int
isUpdate
,
const
char
*
msgId
)
{
int
res
=
0
;
kk_tsl_t
*
pSceneShadow
=
NULL
;
if
(
args
==
NULL
||
sceneId
==
NULL
){
ERROR_PRINT
(
"[%d]kk_scene_parse_addscene fail!!!
\n
"
,
__LINE__
);
return
INVALID_PARAMETER
;
...
...
@@ -1627,12 +1665,10 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
cJSON
*
enable
=
cJSON_GetObjectItem
(
args
,
MSG_SCENE_ENABLE
);
if
(
enable
==
NULL
)
return
FAIL_RETURN
;
if
(
!
isUpdate
){
kk_tsl_t
*
pSceneShadow
=
NULL
;
HAL_GetTime_s
(
sceneId
);
//use time to create the sceneId
pSceneShadow
=
kk_scene_shadow
();
if
(
pSceneShadow
!=
NULL
){
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
pSceneShadow
,
MSG_SCENE_ADDNOTIFICATION_SCENEID
,
NULL
,
sceneId
);
dm_msg_scene_event_post
(
MSG_SCENE_ADDNOTIFICATION
,
pSceneShadow
,
msgId
);
}
}
...
...
@@ -1672,6 +1708,9 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate,const c
return
FAIL_RETURN
;
}
}
if
(
pSceneShadow
!=
NULL
){
dm_msg_scene_event_post
(
MSG_SCENE_ADDNOTIFICATION
,
pSceneShadow
,
msgId
);
}
return
SUCCESS_RETURN
;
}
...
...
@@ -2499,6 +2538,51 @@ static int kk_scene_invokeService_find(const char *sceneId)
sqlite3_free
(
sqlCmd
);
return
find
;
}
static
int
_kk_check_lock_trigger_info
(
char
*
proName
,
char
*
value
,
char
*
keyId
,
char
*
keyRole
,
char
*
keyType
)
{
int
cnt
=
0
;
cJSON
*
compareValue
;
cJSON
*
propertyName
;
cJSON
*
pSub
;
if
(
proName
==
NULL
||
value
==
NULL
||
keyId
==
NULL
){
return
INVALID_PARAMETER
;
}
if
(
!
strcmp
(
proName
,
"LockOpenNotification"
)
&&
strstr
(
value
,
"["
)
!=
NULL
&&
strstr
(
value
,
"]"
)
!=
NULL
){
cJSON
*
json
=
cJSON_Parse
(
value
);
if
(
json
==
NULL
){
return
FAIL_RETURN
;
}
int
array_size
=
cJSON_GetArraySize
(
json
);
if
(
array_size
==
0
){
return
FAIL_RETURN
;
}
for
(
cnt
=
0
;
cnt
<
array_size
;
cnt
++
){
pSub
=
cJSON_GetArrayItem
(
json
,
cnt
);
if
(
NULL
==
pSub
){
continue
;
}
propertyName
=
cJSON_GetObjectItem
(
pSub
,
"propertyName"
);
if
(
propertyName
==
NULL
){
continue
;
}
if
(
strcmp
(
propertyName
->
valuestring
,
"KeyType"
)
==
0
){
compareValue
=
cJSON_GetObjectItem
(
pSub
,
"compareValue"
);
if
(
strcmp
(
compareValue
->
valuestring
,
keyType
)
!=
0
){
return
FAIL_RETURN
;
}
else
{
continue
;
}
}
if
(
strcmp
(
propertyName
->
valuestring
,
"KeyID"
)
!=
0
){
compareValue
=
cJSON_GetObjectItem
(
pSub
,
"compareValue"
);
if
(
strcmp
(
compareValue
->
valuestring
,
keyId
)
!=
0
){
return
FAIL_RETURN
;
}
}
}
return
SUCCESS_RETURN
;
}
else
if
(
!
strcmp
(
proName
,
"LockState"
)
&&
!
strcmp
(
value
,
"1"
)){
return
SUCCESS_RETURN
;
}
return
FAIL_RETURN
;
}
/************************************************************
*功能描述:查找是否有场景触发
*输入参数:param:属性CJSON内容
...
...
@@ -2515,12 +2599,33 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
char
*
identifier
=
NULL
;
char
*
compareType
=
NULL
;
char
*
compareValue
=
NULL
;
char
keyRoleBuf
[
8
]
=
{
0
};
char
keyTypeBuf
[
8
]
=
{
0
};
int
propertyValueType
=
0
;
int
isAnd
=
0
;
int
sceneType
=
0
,
isEnable
=
0
;
int
LockOpenTrigger
=
0
;
sqlite3_stmt
*
stmt
;
kk_scene_ctx_t
*
ctx
=
_kk_scene_get_ctx
();
if
(
param
==
NULL
){
return
res
;
}
cJSON
*
KeyID
=
cJSON_GetObjectItem
(
param
,
"KeyID"
);
cJSON
*
KeyRole
=
cJSON_GetObjectItem
(
param
,
"KeyRole"
);
cJSON
*
KeyType
=
cJSON_GetObjectItem
(
param
,
"KeyType"
);
if
(
KeyID
!=
NULL
&&
KeyRole
!=
NULL
&&
KeyType
!=
NULL
){
LockOpenTrigger
=
1
;
if
(
KeyRole
->
type
==
cJSON_Number
){
sprintf
(
keyRoleBuf
,
"%d"
,
KeyRole
->
valueint
);
}
else
{
strcpy
(
keyRoleBuf
,
KeyRole
->
valuestring
);
}
if
(
KeyType
->
type
==
cJSON_Number
){
sprintf
(
keyTypeBuf
,
"%d"
,
KeyType
->
valueint
);
}
else
{
strcpy
(
keyTypeBuf
,
KeyType
->
valuestring
);
}
}
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneTriggerInfo WHERE deviceCode= '%s' and active = '%d'"
,
deviceCode
,
1
);
//actice判断设备是否移入待分配
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
...
...
@@ -2531,14 +2636,25 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
isAnd
=
sqlite3_column_int
(
stmt
,
DB_SCENETRIGGER_ISAND
);
res
=
kk_scene_get_scene_info
(
sceneId
,
&
sceneType
,
&
isEnable
);
if
(
res
==
SUCCESS_RETURN
&&
isEnable
&&
isAnd
==
0
){
if
(
LockOpenTrigger
==
1
){
res
=
_kk_check_lock_trigger_info
(
identifier
,
compareValue
,
KeyID
->
valuestring
,
keyRoleBuf
,
keyTypeBuf
);
if
(
res
==
SUCCESS_RETURN
){
INFO_PRINT
(
"[%d]kk_scene_check_condition enter!!!
\n
"
,
__LINE__
);
res
=
kk_scene_check_condition
(
sceneId
);
if
(
res
==
SUCCESS_RETURN
){
res
=
kk_scene_check_trigger_condition
(
sceneId
);
if
(
res
==
SUCCESS_RETURN
){
/*check是否时场景嵌套类型*/
res
=
kk_scene_execute_action
(
sceneId
,
NULL
);
}
}
}
}
else
{
cJSON
*
item
=
cJSON_GetObjectItem
(
param
,
identifier
);
if
(
item
!=
NULL
){
propertyValueType
=
kk_dm_get_property_type
(
deviceCode
,
identifier
);
res
=
kk_scene_check_value
(
compareType
,
compareValue
,
item
,
propertyValueType
);
if
(
res
==
SUCCESS_RETURN
){
INFO_PRINT
(
"[%d]kk_scene_check_condition enter!!!
\n
"
,
__LINE__
);
res
=
kk_scene_check_condition
(
sceneId
);
if
(
res
==
SUCCESS_RETURN
){
...
...
@@ -2551,6 +2667,8 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
}
}
}
}
}
sqlite3_finalize
(
stmt
);
sqlite3_free
(
sqlCmd
);
...
...
@@ -2687,7 +2805,8 @@ static int _kk_rebuild_device_active(char *sceneid)
sqlite3_stmt
*
stmt
;
char
*
pDeviceCode
=
NULL
;
char
*
pSceneType
=
NULL
;
char
*
gwDeviceCode
=
NULL
;
const
unsigned
char
*
gwDeviceCode
=
NULL
;
char
gwDeviceCodeBuf
[
32
]
=
{
0
};
int
epNum
=
0
;
int
isMuti
=
0
;
int
count
=
0
;
...
...
@@ -2695,7 +2814,7 @@ static int _kk_rebuild_device_active(char *sceneid)
dm_mgr_dev_node_t
*
node
=
NULL
;
kk_scene_ctx_t
*
ctx
=
_kk_scene_get_ctx
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE sceneid = '%s' and active
= '%d'"
,
sceneid
,
1
);
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE sceneid = '%s' and active
!= '%d'"
,
sceneid
,
0
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
cJSON
*
array
=
cJSON_CreateArray
();
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
...
...
@@ -2706,7 +2825,7 @@ static int _kk_rebuild_device_active(char *sceneid)
}
count
++
;
epNum
=
sqlite3_column_int
(
stmt
,
DB_SCENEACTION_EPNUM
);
gwDeviceCode
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_GWDEVICECODE
);
gwDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_GWDEVICECODE
);
if
(
strcmp
(
pSceneType
,
"action/thing/group"
)
==
0
){
cJSON
*
arrayParam
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
arrayParam
,
MSG_SCENE_TYPE
,
pSceneType
);
...
...
@@ -2714,6 +2833,7 @@ static int _kk_rebuild_device_active(char *sceneid)
cJSON_AddNumberToObject
(
arrayParam
,
MSG_SCENE_EPNUM
,
epNum
);
isMuti
=
1
;
cJSON_AddItemToArray
(
array
,
arrayParam
);
memcpy
(
gwDeviceCodeBuf
,(
char
*
)
gwDeviceCode
,
strlen
((
char
*
)
gwDeviceCode
));
}
else
{
kk_scene_action_detail_t
info
=
{
0
};
char
*
propertyName
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYNAME
);
...
...
@@ -2725,7 +2845,6 @@ static int _kk_rebuild_device_active(char *sceneid)
info
.
epNum
=
epNum
;
info
.
delay
=
idelay
;
isMuti
=
0
;
if
(
strcmp
(
propertyName
,
"LightStripSpecialAction"
)
==
0
){
if
(
strstr
(
propertyValueStr
,
"{"
)
!=
NULL
&&
strstr
(
propertyValueStr
,
"}"
)
!=
NULL
){
cJSON
*
propertyValueJson
=
cJSON_Parse
(
propertyValueStr
);
...
...
@@ -2733,7 +2852,7 @@ static int _kk_rebuild_device_active(char *sceneid)
ERROR_PRINT
(
"cJSON_Parse ERROR!!!"
);
return
FAIL_RETURN
;
}
_kk_scene_LightStripSpecialAction_handle
(
propertyValueJson
,
pDeviceCode
,
epNum
,
idelay
,(
char
*
)
sceneid
,
gwDeviceCode
);
_kk_scene_LightStripSpecialAction_handle
(
propertyValueJson
,
pDeviceCode
,
epNum
,
idelay
,(
char
*
)
sceneid
,
(
char
*
)
gwDeviceCode
);
cJSON_Delete
(
propertyValueJson
);
}
}
else
if
(
strcmp
(
propertyName
,
"CustomAction"
)
==
0
){
//空调内机的场景属性
...
...
@@ -2745,12 +2864,12 @@ static int _kk_rebuild_device_active(char *sceneid)
}
if
(
strcmp
(
node
->
productType
,
KK_DM_AIR_GATEWAY_TYPE
)
==
0
||
strcmp
(
node
->
productType
,
"airConditioning"
)
==
0
||
strcmp
(
node
->
productType
,
"fanCoil"
)
==
0
){
kk_indoor_air_action_add
(
propertyValueStr
,
pDeviceCode
,
idelay
,
gwDeviceCode
,
sceneid
,
"action/thing/setProperty"
,
epNum
);
kk_indoor_air_action_add
(
propertyValueStr
,
pDeviceCode
,
idelay
,
(
char
*
)
gwDeviceCode
,
sceneid
,
"action/thing/setProperty"
,
epNum
);
}
}
}
else
{
memcpy
(
info
.
propertyValue
,
propertyValueStr
,
strlen
(
propertyValueStr
));
kk_scene_action_add
(
gwDeviceCode
,
sceneid
,
info
);
kk_scene_action_add
(
(
char
*
)
gwDeviceCode
,
sceneid
,
info
);
}
}
}
...
...
@@ -2758,7 +2877,9 @@ static int _kk_rebuild_device_active(char *sceneid)
kk_scene_delete_send_to_gw
(
sceneid
);
}
else
{
if
(
isMuti
){
kk_scene_muticontrol_info_send
(
array
,
gwDeviceCode
,
sceneid
,
1
);
kk_scene_delete_send_to_gw
(
sceneid
);
usleep
(
1000
*
500
);
kk_scene_muticontrol_info_send
(
array
,
gwDeviceCodeBuf
,
sceneid
,
1
);
}
else
{
kk_scene_action_info_send
(
1
);
}
...
...
@@ -2774,14 +2895,35 @@ int kk_scene_rebuild_device_active(char *deviceCode,int epNum)
sqlite3_stmt
*
stmt
;
char
*
zErrMsg
=
0
;
char
*
scene_id
=
NULL
;
char
scene_id_bak
[
64
][
16
]
=
{
0
};
int
i
=
0
,
count
=
0
;
int
repeat
=
0
;
kk_scene_ctx_t
*
ctx
=
_kk_scene_get_ctx
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE deviceCode = '%s' and epNum= '%d'"
,
deviceCode
,
epNum
);
if
(
epNum
==
-
1
){
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE deviceCode = '%s'"
,
deviceCode
);
//删除设备情况下
}
else
{
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE deviceCode = '%s' and epNum= '%d'"
,
deviceCode
,
epNum
);
//移动到待分配情况下
}
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
repeat
=
0
;
scene_id
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_SCENEID
);
for
(
i
=
0
;
i
<
count
;
i
++
){
//检测同个设备在同个场景中设置不同的动作,只需rebuild一次
if
(
strcmp
(
scene_id_bak
[
i
],
scene_id
)
==
0
){
repeat
=
1
;
break
;
}
}
if
(
repeat
){
continue
;
}
_kk_rebuild_device_active
(
scene_id
);
usleep
(
100
*
1000
);
if
(
count
<
64
){
memcpy
(
scene_id_bak
[
count
],
scene_id
,
strlen
(
scene_id
));
count
++
;
}
usleep
(
500
*
1000
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
...
...
tsl/product_3094.json
View file @
48b5d7ed
...
...
@@ -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"
:
{
...
...
tsl/product_3137.json
View file @
48b5d7ed
...
...
@@ -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"
:
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment