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
97abaac5
Commit
97abaac5
authored
Mar 24, 2022
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】1,增加移动安防类设备到待分配后需要恢复成默认安防等级问题修改,2,创建场景,触发条件选择温度、湿度或者光照在有变化的情况下才再一次触发
【提交人】陈伟灿
parent
7643c68c
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
292 additions
and
67 deletions
+292
-67
VERSION
VERSION
+1
-1
application/kcloud/kk_topic_mng.c
application/kcloud/kk_topic_mng.c
+75
-24
application/klansdk/kk_ccu_msg.c
application/klansdk/kk_ccu_msg.c
+0
-6
application/klansdk/kk_lan_sync.c
application/klansdk/kk_lan_sync.c
+6
-7
application/klansdk/kk_oldccu_msg.c
application/klansdk/kk_oldccu_msg.c
+1
-4
common/hal/kk_product.h
common/hal/kk_product.h
+4
-0
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+35
-6
midware/midware/dm/kk_property_db.c
midware/midware/dm/kk_property_db.c
+5
-7
midware/midware/dm/kk_property_db.h
midware/midware/dm/kk_property_db.h
+2
-0
midware/midware/midware.c
midware/midware/midware.c
+2
-1
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+37
-10
midware/midware/scene/kk_scene_pollution_check.c
midware/midware/scene/kk_scene_pollution_check.c
+112
-0
midware/midware/scene/kk_scene_pollution_check.h
midware/midware/scene/kk_scene_pollution_check.h
+11
-0
tsl/gateway_2.json
tsl/gateway_2.json
+1
-1
No files found.
VERSION
View file @
97abaac5
1.4.9
\ No newline at end of file
1.4.10
\ No newline at end of file
application/kcloud/kk_topic_mng.c
View file @
97abaac5
...
...
@@ -17,7 +17,7 @@ const char KK_URI_SYS_PREFIX_EX[] = "biz/newkk/%s/%s";
const
char
KK_URI_OTA_PREFIX
[]
=
"ota/device/%s/%s/upgrade"
;
const
char
KK_URI_OTA_PROCESS
[]
=
"ota/device/%s/%s/progress"
;
const
char
KK_URI_OTA_REPLY
[]
=
"ota/device/%s/%s/upgrade_reply"
;
//#define NEW_TOPIC_RULE
static
int
s_gw_status
=
DEVICE_OFFLINE
;
int
kk_set_gw_status
(
int
status
)
{
...
...
@@ -36,7 +36,9 @@ int KK_Subdev_Subscribe(const cJSON *root)
cJSON
*
data
=
NULL
;
//cJSON *cmd = NULL;
int
url_len
=
0
;
char
ccuid
[
32
]
=
{
0
};
char
dcodeCcuid
[
64
]
=
{
0
};
KK_Get_ccuid
(
ccuid
);
data
=
cJSON_GetObjectItem
(
root
,
"data"
);
if
(
data
==
NULL
){
return
-
1
;
...
...
@@ -48,35 +50,44 @@ int KK_Subdev_Subscribe(const cJSON *root)
productCode
=
cJSON_GetObjectItem
(
data
,
MSG_PRODUCT_CODE_STR
);
if
(
productCode
==
NULL
){
return
-
1
;
}
url_len
=
strlen
(
KK_URI_SYS_PREFIX
)
+
strlen
(
productCode
->
valuestring
)
+
strlen
(
deviceCode
->
valuestring
)
+
1
;
}
if
(
strcmp
(
deviceCode
->
valuestring
,
ccuid
)
==
0
){
//主机的topic
sprintf
(
dcodeCcuid
,
"%s"
,
deviceCode
->
valuestring
);
}
else
{
#ifdef NEW_TOPIC_RULE
sprintf
(
dcodeCcuid
,
"%s_%s"
,
ccuid
,
deviceCode
->
valuestring
);
#else
sprintf
(
dcodeCcuid
,
"%s"
,
deviceCode
->
valuestring
);
#endif
}
url_len
=
strlen
(
KK_URI_SYS_PREFIX
)
+
strlen
(
productCode
->
valuestring
)
+
strlen
(
dcodeCcuid
)
+
1
;
char
*
url
=
malloc
(
url_len
);
if
(
url
==
NULL
)
{
return
-
1
;
}
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_OTA_PREFIX
,
productCode
->
valuestring
,
d
eviceCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_OTA_PREFIX
,
productCode
->
valuestring
,
d
codeCcuid
);
INFO_PRINT
(
"ota [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX_GET
,
productCode
->
valuestring
,
d
eviceCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX_GET
,
productCode
->
valuestring
,
d
codeCcuid
);
INFO_PRINT
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX
,
productCode
->
valuestring
,
d
eviceCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX
,
productCode
->
valuestring
,
d
codeCcuid
);
INFO_PRINT
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX_SERVICE
,
productCode
->
valuestring
,
d
eviceCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX_SERVICE
,
productCode
->
valuestring
,
d
codeCcuid
);
INFO_PRINT
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX_TOPO_CHANGE
,
productCode
->
valuestring
,
d
eviceCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX_TOPO_CHANGE
,
productCode
->
valuestring
,
d
codeCcuid
);
INFO_PRINT
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
free
(
url
);
...
...
@@ -136,21 +147,32 @@ int KK_CCU_TOPIC_Subscribe(void)
static
int
_kk_utils_topic
(
_IN_
const
char
*
name
,
_IN_
char
*
product_code
,
_IN_
char
*
device_code
,
_OU_
char
**
topic
)
{
char
ccuid
[
32
]
=
{
0
};
char
dcodeCcuid
[
64
]
=
{
0
};
int
service_name_len
=
0
;
if
(
name
==
NULL
||
product_code
==
NULL
||
device_code
==
NULL
||
topic
==
NULL
||
*
topic
!=
NULL
)
{
return
-
1
;
}
service_name_len
=
strlen
(
KK_URI_SYS_PREFIX_EX
)
+
strlen
(
product_code
)
+
strlen
(
device_code
)
KK_Get_ccuid
(
ccuid
);
if
(
strcmp
(
device_code
,
ccuid
)
==
0
){
//主机的topic
sprintf
(
dcodeCcuid
,
"%s"
,
device_code
);
}
else
{
#ifdef NEW_TOPIC_RULE
sprintf
(
dcodeCcuid
,
"%s_%s"
,
ccuid
,
device_code
);
#else
sprintf
(
dcodeCcuid
,
"%s"
,
device_code
);
#endif
}
service_name_len
=
strlen
(
KK_URI_SYS_PREFIX_EX
)
+
strlen
(
product_code
)
+
strlen
(
dcodeCcuid
)
+
strlen
(
name
)
+
1
;
*
topic
=
malloc
(
service_name_len
);
if
(
*
topic
==
NULL
)
{
return
-
1
;
}
memset
(
*
topic
,
0
,
service_name_len
);
snprintf
(
*
topic
,
service_name_len
,
KK_URI_SYS_PREFIX_EX
,
product_code
,
device_code
);
snprintf
(
*
topic
,
service_name_len
,
KK_URI_SYS_PREFIX_EX
,
product_code
,
dcodeCcuid
);
if
(
name
!=
NULL
)
{
memcpy
(
*
topic
+
strlen
(
*
topic
),
name
,
strlen
(
name
));
}
...
...
@@ -160,57 +182,86 @@ static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code,
static
int
_kk_utils_topic_ota_process
(
_IN_
char
*
product_code
,
_IN_
char
*
device_code
,
_OU_
char
**
topic
)
{
int
service_name_len
=
0
;
char
ccuid
[
32
]
=
{
0
};
char
dcodeCcuid
[
64
]
=
{
0
};
KK_Get_ccuid
(
ccuid
);
if
(
product_code
==
NULL
||
device_code
==
NULL
||
topic
==
NULL
||
*
topic
!=
NULL
)
{
return
-
1
;
}
service_name_len
=
strlen
(
KK_URI_OTA_PROCESS
)
+
strlen
(
product_code
)
+
strlen
(
device_code
)
+
1
;
if
(
strcmp
(
device_code
,
ccuid
)
==
0
){
//主机的topic
sprintf
(
dcodeCcuid
,
"%s"
,
device_code
);
}
else
{
#ifdef NEW_TOPIC_RULE
sprintf
(
dcodeCcuid
,
"%s_%s"
,
ccuid
,
device_code
);
#else
sprintf
(
dcodeCcuid
,
"%s"
,
device_code
);
#endif
}
service_name_len
=
strlen
(
KK_URI_OTA_PROCESS
)
+
strlen
(
product_code
)
+
strlen
(
dcodeCcuid
)
+
1
;
*
topic
=
malloc
(
service_name_len
);
if
(
*
topic
==
NULL
)
{
return
-
1
;
}
memset
(
*
topic
,
0
,
service_name_len
);
snprintf
(
*
topic
,
service_name_len
,
KK_URI_OTA_PROCESS
,
product_code
,
d
evice_code
);
snprintf
(
*
topic
,
service_name_len
,
KK_URI_OTA_PROCESS
,
product_code
,
d
codeCcuid
);
return
0
;
}
static
int
_kk_utils_topic_upgrade_reply
(
_IN_
char
*
product_code
,
_IN_
char
*
device_code
,
_OU_
char
**
topic
)
{
int
service_name_len
=
0
;
char
ccuid
[
32
]
=
{
0
};
char
dcodeCcuid
[
64
]
=
{
0
};
KK_Get_ccuid
(
ccuid
);
if
(
product_code
==
NULL
||
device_code
==
NULL
||
topic
==
NULL
||
*
topic
!=
NULL
)
{
return
-
1
;
}
service_name_len
=
strlen
(
KK_URI_OTA_REPLY
)
+
strlen
(
product_code
)
+
strlen
(
device_code
)
+
1
;
if
(
strcmp
(
device_code
,
ccuid
)
==
0
){
//主机的topic
sprintf
(
dcodeCcuid
,
"%s"
,
device_code
);
}
else
{
#ifdef NEW_TOPIC_RULE
sprintf
(
dcodeCcuid
,
"%s_%s"
,
ccuid
,
device_code
);
#else
sprintf
(
dcodeCcuid
,
"%s"
,
device_code
);
#endif
}
service_name_len
=
strlen
(
KK_URI_OTA_REPLY
)
+
strlen
(
product_code
)
+
strlen
(
dcodeCcuid
)
+
1
;
*
topic
=
malloc
(
service_name_len
);
if
(
*
topic
==
NULL
)
{
return
-
1
;
}
memset
(
*
topic
,
0
,
service_name_len
);
snprintf
(
*
topic
,
service_name_len
,
KK_URI_OTA_REPLY
,
product_code
,
d
evice_code
);
snprintf
(
*
topic
,
service_name_len
,
KK_URI_OTA_REPLY
,
product_code
,
d
codeCcuid
);
return
0
;
}
int
KK_Subdev_UnSubscribe_By_DeviceCode
(
const
char
*
deviceCode
,
const
char
*
productCode
)
{
char
*
topic
=
NULL
;
int
topic_len
=
0
;
topic_len
=
strlen
(
KK_URI_SYS_PREFIX
)
+
strlen
(
productCode
)
+
strlen
(
deviceCode
)
+
1
;
char
ccuid
[
32
]
=
{
0
};
char
dcodeCcuid
[
64
]
=
{
0
};
KK_Get_ccuid
(
ccuid
);
#ifdef NEW_TOPIC_RULE
sprintf
(
dcodeCcuid
,
"%s_%s"
,
ccuid
,
deviceCode
);
#else
sprintf
(
dcodeCcuid
,
"%s"
,
deviceCode
);
#endif
topic_len
=
strlen
(
KK_URI_SYS_PREFIX
)
+
strlen
(
productCode
)
+
strlen
(
dcodeCcuid
)
+
1
;
topic
=
malloc
(
topic_len
);
if
(
topic
==
NULL
)
{
return
-
1
;
}
memset
(
topic
,
0
,
topic_len
);
snprintf
(
topic
,
topic_len
,
KK_URI_SYS_PREFIX
,
productCode
,
d
eviceCode
);
snprintf
(
topic
,
topic_len
,
KK_URI_SYS_PREFIX
,
productCode
,
d
codeCcuid
);
INFO_PRINT
(
"[%s][%d] TOPIC:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
topic
);
KK_MQTT_UnsubTopic
(
topic
);
memset
(
topic
,
0
,
topic_len
);
snprintf
(
topic
,
topic_len
,
KK_URI_SYS_PREFIX_SERVICE
,
productCode
,
d
eviceCode
);
snprintf
(
topic
,
topic_len
,
KK_URI_SYS_PREFIX_SERVICE
,
productCode
,
d
codeCcuid
);
INFO_PRINT
(
"[%s][%d] TOPIC:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
topic
);
KK_MQTT_UnsubTopic
(
topic
);
snprintf
(
topic
,
topic_len
,
KK_URI_SYS_PREFIX_TOPO_CHANGE
,
productCode
,
d
eviceCode
);
snprintf
(
topic
,
topic_len
,
KK_URI_SYS_PREFIX_TOPO_CHANGE
,
productCode
,
d
codeCcuid
);
INFO_PRINT
(
"[%s][%d] TOPIC:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
topic
);
KK_MQTT_UnsubTopic
(
topic
);
free
(
topic
);
...
...
application/klansdk/kk_ccu_msg.c
View file @
97abaac5
...
...
@@ -414,7 +414,6 @@ cJSON *map_type_convert(cJSON *s_dataType,cJSON *s_valueRange,cJSON *value,cJSON
strcmp
(
s_dataType
->
valuestring
,
"int"
)
==
0
)
{
if
(
rlt
->
valueint
==
value
->
valueint
)
{
args
=
cJSON_GetArrayItem
(
d_valueRange
,
j
);
printf
(
"222:%s
\n
"
,
cJSON_Print
(
args
));
break
;
}
}
else
if
(
strcmp
(
s_dataType
->
valuestring
,
"double"
)
==
0
){
...
...
@@ -525,16 +524,11 @@ int kk_lan_add_val_to_obj(cJSON *obj,cJSON *val,const char *id)
int
kk_lan_replace_val_to_obj
(
cJSON
*
obj
,
cJSON
*
val
,
const
char
*
id
)
{
char
*
pVal
=
NULL
;
if
(
id
==
NULL
||
obj
==
NULL
||
obj
->
type
!=
cJSON_Object
||
val
==
NULL
){
debug_log
(
LOG_DEBUG_LEVEL
,
"[err] para.
\n
"
);
return
-
1
;
}
pVal
=
cJSON_Print
(
val
);
//debug_log(LOG_DEBUG_LEVEL,"[replace] id=%s,type=%d,val=%s.\n",id,val->type,pVal);
free
(
pVal
);
if
(
val
->
type
==
cJSON_False
){
cJSON_ReplaceItemInObject
(
obj
,
id
,
cJSON_CreateFalse
());
}
else
if
(
val
->
type
==
cJSON_True
){
...
...
application/klansdk/kk_lan_sync.c
View file @
97abaac5
...
...
@@ -515,8 +515,11 @@ cJSON *_kk_sync_devicestatus_arg_build(kk_map_dev_node_t *node,int ch)
//todo:
if
(
strcmp
(
synType
->
valuestring
,
"timing_shutdown"
)
==
0
)
{
cJSON
*
syn_obj
=
cJSON_CreateObject
();
double
t
=
cJSON_GetObjectItem
(
newccuItem
,
"value"
)
->
valuedouble
;
cJSON
*
valueStr
=
cJSON_GetObjectItem
(
newccuItem
,
"value"
);
if
(
valueStr
==
NULL
){
continue
;
}
double
t
=
valueStr
->
valuedouble
;
char
buff
[
32
]
=
{
0
};
snprintf
(
buff
,
32
,
"%f"
,
t
);
...
...
@@ -761,7 +764,6 @@ static int _kk_guard_sensors_build(cJSON *guard_sensors,int num,SYN_GUARD_SENSOR
if
(
num
<=
0
||
sensors
==
NULL
){
return
-
1
;
}
pSensor
=
sensors
;
for
(
i
=
0
;
i
<
num
;
i
++
,
pSensor
++
){
cJSON
*
item
=
cJSON_CreateObject
();
...
...
@@ -772,8 +774,6 @@ static int _kk_guard_sensors_build(cJSON *guard_sensors,int num,SYN_GUARD_SENSOR
return
0
;
}
int
kk_sync_guard_to_sdk
(
cJSON
*
root
,
cJSON
*
data
)
{
char
*
armingStr
=
NULL
;
...
...
@@ -788,7 +788,6 @@ int kk_sync_guard_to_sdk(cJSON *root,cJSON *data)
cJSON_AddStringToObject
(
guard
,
"arming_status"
,
"1"
);
cJSON_AddItemToObject
(
guard
,
"custom_guard_zone"
,
custom_guard_zone
);
cJSON_AddItemToObject
(
guard
,
"guard_sensors"
,
guard_sensors
);
cJSON_AddItemToObject
(
root
,
"guard"
,
guard
);
if
(
properties
==
NULL
||
properties
->
type
!=
cJSON_Object
){
...
...
@@ -933,7 +932,7 @@ static int kk_get_ac_indoor_info_by_deviceCode(cJSON *data,char *pdeviceCode,cha
new_dev_item
g_new_item
[
16
]
=
{
0
};
new_dev_item
g_new_item
[
64
]
=
{
0
};
CENTRAL_AC_INDOOR_ITEM
*
g_indoor_item
=
NULL
;
int
g_newgw_count
=
0
;
int
g_indoor_count
=
0
;
...
...
application/klansdk/kk_oldccu_msg.c
View file @
97abaac5
...
...
@@ -75,7 +75,7 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type)
{
cJSON
*
n_value
=
NULL
,
*
n_dataType
=
NULL
,
*
o_dataType
=
NULL
;
cJSON
*
o_valueRange
=
NULL
,
*
n_valueRange
=
NULL
;
if
(
newccuItem
==
NULL
||
newccuItem
->
type
!=
cJSON_Object
||
oldccuItem
==
NULL
||
oldccuItem
->
type
!=
cJSON_Object
){
debug_log
(
LOG_DEBUG_LEVEL
,
"[err] para.
\n
"
);
...
...
@@ -143,11 +143,9 @@ static int _kk_lan_update_device_status(int nodeId,cJSON *opcode,cJSON *arg,cons
send_msg_to_module
(
msg
);
cJSON_Delete
(
msg
);
}
return
0
;
}
static
int
_kk_lan_check_channel
(
cJSON
*
channelObj
,
cJSON
*
epNumObj
)
{
int
channel
=
-
1
;
...
...
@@ -195,7 +193,6 @@ static int _kk_lan_check_channel(cJSON *channelObj,cJSON *epNumObj)
return
channel
;
}
static
int
_kk_lan_sync_device_status
(
const
char
*
deviceCode
,
kk_map_dev_node_t
*
devNode
,
int
ch
)
{
cJSON
*
msg
=
NULL
;
...
...
common/hal/kk_product.h
View file @
97abaac5
...
...
@@ -111,16 +111,20 @@
#define GET_PRODUCTID_CMD "fw_printenv pid -n"
#endif
#define KK_DEVICESECRET_PATH_SUB "kk/kk_deviceSecret.txt"
#define KK_TOKEN_PATH_SUB "kk/kk_token.txt"
#define KK_DEVICE_MAP_FILE_PATH_SUB "kk/map/device_%s.json"
#ifdef CONFIG_NDK
#define KK_VIRTUAL_FILE_DB "kk/kk_virtual.db"
#define KK_DB_FILE_SUB "kk/kk_database.db"
#define KK_LAN_NODE_DB_FILE_SUB "kk/kk_lan_node.db"
#elif CONFIG_A133_PLATFORM
#define KK_VIRTUAL_FILE_DB "kk/db/kk_virtual.db"
#define KK_DB_FILE_SUB "kk/db/kk_database.db"
#define KK_LAN_NODE_DB_FILE_SUB "kk/db/kk_lan_node.db"
#else
#define KK_VIRTUAL_FILE_DB "kk/kk_virtual.db"
#define KK_DB_FILE_SUB "kk/kk_database.db"
#define KK_LAN_NODE_DB_FILE_SUB "kk/kk_lan_node.db"
#endif
...
...
midware/midware/dm/kk_linkkit.c
View file @
97abaac5
...
...
@@ -423,8 +423,9 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf)
}
cJSON
*
item
=
deviceArray
->
child
;
while
(
item
!=
NULL
){
char
*
deviceCode
=
cJSON_GetObjectItem
(
item
,
MSG_DEVICE_CODE_STR
)
->
valuestring
;
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
,
&
node
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
item
,
MSG_DEVICE_CODE_STR
);
if
(
deviceCode
==
NULL
){
continue
;}
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
->
valuestring
,
&
node
);
if
(
res
<
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"dm_mgr_search_device_by_pkdn failed"
);
//kk_topo_delete_report(paramStr);//补报topo delete
...
...
@@ -447,9 +448,9 @@ int kk_topo_delete_handle(cJSON *payload,cJSON *buf)
cJSON_AddItemToObject
(
rootData
,
"payload"
,
cJSON_Parse
(
payload11
));
char
*
pnewout
=
cJSON_Print
(
rootData
);
kk_sendData2gw
(
pnewout
,
strlen
(
pnewout
),
node
->
fatherDeviceCode
);
//send to gw itself
kk_scene_delete_action_by_deviceCode
(
deviceCode
);
kk_scene_rebuild_device_active
(
deviceCode
,
-
1
);
dm_mgr_subdev_delete
(
deviceCode
);
kk_scene_delete_action_by_deviceCode
(
deviceCode
->
valuestring
);
kk_scene_rebuild_device_active
(
deviceCode
->
valuestring
,
-
1
);
dm_mgr_subdev_delete
(
deviceCode
->
valuestring
);
free
(
pnewout
);
free
(
payload11
);
cJSON_Delete
(
rootData
);
...
...
@@ -794,6 +795,33 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
kk_scene_productType_handle
(
node
->
productType
);
return
NO_ERROR
;
}
static
int
_kk_reset_SensorType
(
char
*
deviceCode
)
{
int
res
=
0
;
int
level
=
0
;
char
tmpValue
[
16
]
=
{
0
};
dm_mgr_dev_node_t
*
node
=
NULL
;
if
(
deviceCode
==
NULL
){
return
INVALID_PARAMETER
;
}
res
=
dm_mgr_get_device_by_devicecode
((
char
*
)
deviceCode
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
return
FAIL_RETURN
;
}
if
(
strcmp
(
node
->
productType
,
"sensor"
)
==
0
){
if
(
kk_check_human_induction_device
(
node
->
productCode
)
==
1
||
//门磁和人体默认室外安防
kk_check_door_induction_device
(
node
->
productCode
)
==
1
){
level
=
1
;
kk_tsl_set_value
(
kk_tsl_set_property_value
,
node
->
dev_shadow
,
"SensorType"
,
&
level
,
NULL
);
}
else
{
level
=
2
;
kk_tsl_set_value
(
kk_tsl_set_property_value
,
node
->
dev_shadow
,
"SensorType"
,
&
level
,
NULL
);
//其他24小时警戒
}
sprintf
(
tmpValue
,
"%d"
,
level
);
kk_property_db_update_value
(
deviceCode
,
"SensorType"
,
tmpValue
);
}
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:删除设备从房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含设备deviceCode
...
...
@@ -804,7 +832,7 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
static
int
kk_service_removeDeviceFromRoom_handle
(
cJSON
*
params
)
{
char
epNumStr
[
10
]
=
{
0
};
if
(
params
==
NULL
){
return
DEVICE_PARAM_ERR
;
}
...
...
@@ -822,6 +850,7 @@ static int kk_service_removeDeviceFromRoom_handle(cJSON *params)
kk_room_dev_remove
(
deviceCode
->
valuestring
,
epNumStr
);
kk_scene_update_device_active
(
deviceCode
->
valuestring
,
atoi
(
epNumStr
),
0
);
kk_scene_rebuild_device_active
(
deviceCode
->
valuestring
,
atoi
(
epNumStr
));
_kk_reset_SensorType
(
deviceCode
->
valuestring
);
return
NO_ERROR
;
}
...
...
midware/midware/dm/kk_property_db.c
View file @
97abaac5
...
...
@@ -227,19 +227,18 @@ char *door_induction_device[] = {
(
char
*
){
"3051"
},
(
char
*
){
"3070"
},
};
static
int
_
kk_check_human_induction_device
(
char
*
productCode
){
int
kk_check_human_induction_device
(
char
*
productCode
){
int
i
=
0
;
int
num
=
sizeof
(
human_induction_device
)
/
sizeof
(
char
*
);
for
(
i
=
0
;
i
<
num
;
i
++
){
if
(
strcmp
(
productCode
,
human_induction_device
[
i
])
==
0
)
{
if
(
strcmp
(
productCode
,
human_induction_device
[
i
])
==
0
){
return
1
;
}
}
return
0
;
}
static
int
_
kk_check_door_induction_device
(
char
*
productCode
){
int
kk_check_door_induction_device
(
char
*
productCode
){
int
i
=
0
;
int
num
=
sizeof
(
door_induction_device
)
/
sizeof
(
char
*
);
...
...
@@ -283,8 +282,8 @@ int kk_property_db_insert(const char *deviceCode,const char *identifier,kk_tsl_d
if
(
res
!=
SUCCESS_RETURN
)
{
return
FAIL_RETURN
;
}
if
(
_
kk_check_human_induction_device
(
node
->
productCode
)
==
1
||
//门磁和人体默认室外安防
_
kk_check_door_induction_device
(
node
->
productCode
)
==
1
){
if
(
kk_check_human_induction_device
(
node
->
productCode
)
==
1
||
//门磁和人体默认室外安防
kk_check_door_induction_device
(
node
->
productCode
)
==
1
){
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
deviceCode
,
identifier
,
"1"
,
valuetype
,
devtype
);
}
else
{
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
deviceCode
,
identifier
,
"2"
,
valuetype
,
devtype
);
//其他24小时警戒
...
...
@@ -897,7 +896,6 @@ int kk_indoorAir_query_epnums(const char *deviceCode,int epList[])
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
if
(
count
>
64
){
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
_kk_property_db_unlock
();
return
count
;
...
...
midware/midware/dm/kk_property_db.h
View file @
97abaac5
...
...
@@ -91,5 +91,7 @@ int kk_indoorAir_db_update_online(const char *deviceCode,int online,int epNum);
int
kk_subFreshAir_db_update_online
(
const
char
*
deviceCode
,
int
online
,
int
epNum
);
int
kk_subAirSwitch_db_update_online
(
const
char
*
deviceCode
,
int
online
,
int
epNum
);
int
kk_indoorair_property_db_get_value_directly
(
const
char
*
deviceCode
,
const
char
*
identifier
,
char
*
value
,
int
ep
);
int
kk_check_human_induction_device
(
char
*
productCode
);
int
kk_check_door_induction_device
(
char
*
productCode
);
#endif
midware/midware/midware.c
View file @
97abaac5
...
...
@@ -1505,12 +1505,13 @@ void kk_platMsg_handle(void* data, char* chalMark){
char
*
outstr
=
cJSON_Print
(
payload
);
kk_tsl_property_set_by_shadow
(
search_node
->
dev_shadow
,
outstr
,
strlen
(
outstr
)
+
1
);
proCode
=
cJSON_GetObjectItem
(
info
,
MSG_PRODUCT_CODE_STR
);
dm_msg_thing_property_post_by_identify
(
proCode
->
valuestring
,
info_dcode
->
valuestring
,
jsonPay
);
//如果带version,代表的是快照信息,快照信息不需要触发iftt
cJSON
*
version
=
cJSON_GetObjectItem
(
jsonPay
,
"version"
);
if
(
version
==
NULL
&&
is_BodySensor_dev
(
proCode
->
valuestring
)
==
0
){
kk_scene_iftt_check
(
info_dcode
->
valuestring
,
jsonPay
);
}
dm_msg_thing_property_post_by_identify
(
proCode
->
valuestring
,
info_dcode
->
valuestring
,
jsonPay
);
free
(
outstr
);
}
}
else
if
(
strstr
(
msgType
->
valuestring
,
KK_THING_TOPO_DELETE_MSG
)
!=
NULL
){
...
...
midware/midware/scene/kk_scene_handle.c
View file @
97abaac5
...
...
@@ -454,6 +454,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
kk_scene_delete_scene_protype
(
sceneId
);
kk_scene_delete_scene_action
(
sceneId
,
isforword
);
kk_scene_delete_scene_invokeservice
(
sceneId
);
kk_scene_rm_TNBSceneId_list
((
const
char
*
)
sceneId
);
}
/************************************************************
...
...
@@ -1993,6 +1994,7 @@ int kk_scene_check_trigger_condition(const char *sceneId)
int
sceneType
=
0
,
isEnable
=
0
;
int
active
=
0
;
sqlite3_stmt
*
stmt
;
dm_mgr_dev_node_t
*
node
=
NULL
;
char
currentValue
[
64
]
=
{
0
};
kk_scene_ctx_t
*
ctx
=
_kk_scene_get_ctx
();
res
=
kk_scene_get_scene_info
(
sceneId
,
&
sceneType
,
&
isEnable
);
...
...
@@ -2028,7 +2030,12 @@ int kk_scene_check_trigger_condition(const char *sceneId)
break
;
}
}
else
{
kk_property_db_get_value_directly
(
pdeviceCode
,
identifier
,
currentValue
);
res
=
dm_mgr_get_device_by_devicecode
(
pdeviceCode
,
&
node
);
if
(
res
!=
0
){
break
;
}
kk_tsl_get_value
(
kk_tsl_get_property_value
,
node
->
dev_shadow
,
identifier
,
currentValue
,
NULL
);
//kk_property_db_get_value_directly(pdeviceCode,identifier,currentValue);
INFO_PRINT
(
"currentValue:%s
\n
"
,
currentValue
);
res
=
kk_scene_check_value_ex
(
compareType
,
currentValue
,
compareValue
);
INFO_PRINT
(
"kk_scene_check_value_ex:res:%d
\n
"
,
res
);
...
...
@@ -2457,7 +2464,6 @@ next:
free
(
out
);
}
else
{
propertyName
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYNAME
);
propertyValue
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYVALUE
);
delay
=
sqlite3_column_int
(
stmt
,
DB_SCENEACTION_DELAY
);
...
...
@@ -2745,10 +2751,34 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
}
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
){
res
=
kk_trigger_execute
(
sceneId
);
if
(
kk_TNB_identifier_check
(
identifier
)
==
1
){
//环境检测需要判断是否有变化
if
(
kk_find_TNBScene_execute
(
sceneId
)
==
0
){
//如果此场景没有执行过,无需判断温度变化
propertyValueType
=
kk_dm_get_property_type
(
deviceCode
,
identifier
);
res
=
kk_scene_check_value
(
compareType
,
compareValue
,
item
,
propertyValueType
);
if
(
res
==
SUCCESS_RETURN
){
res
=
kk_trigger_execute
(
sceneId
);
if
(
res
==
SUCCESS_RETURN
){
//执行成功需要记录下此场景ID
kk_scene_push_TNBSceneId_list
(
sceneId
);
}
}
}
else
{
if
(
kk_TNB_value_check
(
identifier
,(
char
*
)
deviceCode
,
compareType
,
compareValue
)
==
1
){
propertyValueType
=
kk_dm_get_property_type
(
deviceCode
,
identifier
);
res
=
kk_scene_check_value
(
compareType
,
compareValue
,
item
,
propertyValueType
);
if
(
res
==
SUCCESS_RETURN
){
res
=
kk_trigger_execute
(
sceneId
);
if
(
res
==
SUCCESS_RETURN
){
//执行成功需要记录下此场景ID
kk_scene_push_TNBSceneId_list
(
sceneId
);
}
}
}
}
}
else
{
propertyValueType
=
kk_dm_get_property_type
(
deviceCode
,
identifier
);
res
=
kk_scene_check_value
(
compareType
,
compareValue
,
item
,
propertyValueType
);
if
(
res
==
SUCCESS_RETURN
){
res
=
kk_trigger_execute
(
sceneId
);
}
}
}
}
...
...
@@ -2836,7 +2866,6 @@ static int kk_quickpanel_pro_get(const char* sceneId,char *propertyValue)
char
*
pPropertyValue
=
NULL
;
sqlite3_stmt
*
stmt
;
kk_scene_ctx_t
*
ctx
=
_kk_scene_get_ctx
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE sceneId = '%s'"
,
sceneId
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
...
...
@@ -3034,7 +3063,7 @@ int kk_scene_rebuild_device_active(char *deviceCode,int epNum)
memcpy
(
scene_id_bak
[
count
],
scene_id
,
strlen
(
scene_id
));
count
++
;
}
usleep
(
5
00
*
1000
);
usleep
(
1
00
*
1000
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
...
...
@@ -3059,7 +3088,6 @@ int kk_scene_productType_handle(char *productType)
if
(
productType
==
NULL
){
return
-
1
;
}
size
=
kk_get_product_type_table_size
();
for
(
k
=
0
;
k
<
size
;
k
++
){
if
(
!
strcmp
(
productType
,
producTypeMap
[
k
].
maptype
)){
...
...
@@ -3068,7 +3096,6 @@ int kk_scene_productType_handle(char *productType)
break
;
}
}
if
(
exist
==
0
){
//无对应的type
return
-
1
;
}
...
...
midware/midware/scene/kk_scene_pollution_check.c
View file @
97abaac5
...
...
@@ -2,6 +2,7 @@
#include "sqlite3.h"
#include "kk_log.h"
#include "kk_hal.h"
#include "kk_dm_mng.h"
#include "kk_scene_pollution_check.h"
#include "kk_property_db.h"
kk_pmGrade_t
g_pm25GradeMap
[]
=
...
...
@@ -133,4 +134,115 @@ int kk_pm25_condition_check(char *deviceCode)
return
0
;
}
return
kk_pollution_level_check
(
g_pm25GradeMap
[
i
].
levelMap
,
atoi
(
currentValue
),
5
);
}
static
kk_TNBSceneId_list_t
*
p_TNBSceneId_list
=
NULL
;
char
*
identifierSceneSpl
[]
=
{
(
char
*
){
"Temperature"
},
(
char
*
){
"Humidity"
},
(
char
*
){
"IlluminanceLevel"
},
};
int
kk_TNB_identifier_check
(
char
*
identifier
)
{
int
num
=
0
;
int
i
=
0
;
num
=
sizeof
(
identifierSceneSpl
)
/
sizeof
(
char
*
);
for
(
i
=
0
;
i
<
num
;
i
++
){
if
(
strcmp
(
identifierSceneSpl
[
i
],
identifier
)
==
0
){
INFO_PRINT
(
"[%s]kk_TNB_identifier_check enter!!!
\n
"
,
identifier
);
return
1
;
}
}
return
0
;
}
int
kk_TNB_value_check
(
char
*
identifier
,
char
*
deviceCode
,
char
*
compareType
,
char
*
compareValue
)
{
int
res
=
0
;
dm_mgr_dev_node_t
*
node
=
NULL
;
char
currentValue
[
64
]
=
{
0
};
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
,
&
node
);
if
(
res
!=
0
){
return
res
;
}
kk_property_db_get_value_directly
(
deviceCode
,
identifier
,
currentValue
);
if
(
!
strcmp
(
compareType
,
"="
)
&&
strcmp
(
compareValue
,
currentValue
)
!=
0
){
INFO_PRINT
(
"currentValue[%s]compareValue[%s],kk_TNB_value_check enter!!!
\n
"
,
currentValue
,
compareValue
);
res
=
1
;
}
else
if
(
!
strcmp
(
compareType
,
">"
)
&&
strcmp
(
currentValue
,
compareValue
)
<
0
){
INFO_PRINT
(
"currentValue[%s]compareValue[%s],kk_TNB_value_check enter!!!
\n
"
,
currentValue
,
compareValue
);
res
=
1
;
}
else
if
(
!
strcmp
(
compareType
,
"<"
)
&&
strcmp
(
currentValue
,
compareValue
)
>
0
){
INFO_PRINT
(
"currentValue[%s]compareValue[%s],kk_TNB_value_check enter!!!
\n
"
,
currentValue
,
compareValue
);
res
=
1
;
}
else
{
INFO_PRINT
(
"currentValue[%s]compareValue[%s],compareType[%s]!!
\n
"
,
currentValue
,
compareValue
,
compareType
);
res
=
-
1
;
}
return
res
;
}
int
kk_find_TNBScene_execute
(
const
char
*
sceneId
)
{
kk_TNBSceneId_list_t
*
ptr
=
p_TNBSceneId_list
;
while
(
ptr
){
if
(
strcmp
(
ptr
->
sceneId
,
sceneId
)
==
0
){
INFO_PRINT
(
"[%s]kk_find_TNBScene_execute enter!!!
\n
"
,
sceneId
);
return
1
;
}
ptr
=
ptr
->
next
;
}
return
0
;
}
int
kk_scene_push_TNBSceneId_list
(
const
char
*
sceneId
)
{
if
(
sceneId
==
NULL
){
return
INVALID_PARAMETER
;
}
kk_TNBSceneId_list_t
*
ptr
=
NULL
,
*
ptemp
=
NULL
;
ptemp
=
ptr
=
p_TNBSceneId_list
;
while
(
ptr
){
ptemp
=
ptr
;
ptr
=
ptr
->
next
;
}
ptr
=
malloc
(
sizeof
(
kk_TNBSceneId_list_t
));
if
(
ptr
==
NULL
)
{
return
MEMORY_NOT_ENOUGH
;
}
memset
(
ptr
,
0x0
,
sizeof
(
kk_TNBSceneId_list_t
));
memcpy
(
ptr
->
sceneId
,
sceneId
,
strlen
(
sceneId
));
if
(
p_TNBSceneId_list
==
NULL
){
p_TNBSceneId_list
=
ptr
;
}
else
{
ptemp
->
next
=
ptr
;
}
return
SUCCESS_RETURN
;
}
void
kk_scene_rm_TNBSceneId_list
(
const
char
*
sceneId
)
{
kk_TNBSceneId_list_t
*
ptr
=
p_TNBSceneId_list
;
kk_TNBSceneId_list_t
*
pTemp
=
NULL
;
while
(
ptr
){
if
(
strcmp
(
ptr
->
sceneId
,
sceneId
)
==
0
){
if
(
ptr
==
p_TNBSceneId_list
){
p_TNBSceneId_list
=
p_TNBSceneId_list
->
next
;
free
(
ptr
);
return
;
}
else
{
pTemp
->
next
=
ptr
->
next
;
free
(
ptr
);
return
;
}
}
pTemp
=
ptr
;
ptr
=
ptr
->
next
;
}
return
;
}
void
kk_scene_print_TNBSceneId_list
()
{
kk_TNBSceneId_list_t
*
ptr
=
p_TNBSceneId_list
;
while
(
ptr
){
printf
(
"kk_scene_print_TNBSceneId_list [%s]
\n
"
,
ptr
->
sceneId
);
ptr
=
ptr
->
next
;
}
}
\ No newline at end of file
midware/midware/scene/kk_scene_pollution_check.h
View file @
97abaac5
...
...
@@ -17,8 +17,19 @@ typedef struct
{
kk_pollution_level_t
levelMap
[
5
];
}
kk_pmGrade_t
;
typedef
struct
kk_TNBSceneId_list
{
char
sceneId
[
16
];
struct
kk_TNBSceneId_list
*
next
;
}
kk_TNBSceneId_list_t
;
int
kk_pollution_level_check
(
kk_pollution_level_t
levelMap
[],
int
val
,
int
num
);
int
kk_pollution_check
(
cJSON
*
param
,
int
grade
);
int
kk_pollution_condition_check
(
char
*
deviceCode
,
int
grade
);
int
kk_pm25_condition_check
(
char
*
deviceCode
);
int
kk_TNB_identifier_check
(
char
*
identifier
);
int
kk_TNB_value_check
(
char
*
identifier
,
char
*
deviceCode
,
char
*
compareType
,
char
*
compareValue
);
int
kk_find_TNBScene_execute
(
const
char
*
sceneId
);
void
kk_scene_rm_TNBSceneId_list
(
const
char
*
sceneId
);
int
kk_scene_push_TNBSceneId_list
(
const
char
*
sceneId
);
void
kk_scene_print_TNBSceneId_list
();
#endif
\ No newline at end of file
tsl/gateway_2.json
View file @
97abaac5
...
...
@@ -3,7 +3,7 @@
"productType"
:
"gw"
,
"profile"
:
{
"heartbeat"
:
"300
0
"
,
"heartbeat"
:
"300"
,
"productCode"
:
"2"
,
"productName"
:
"网关"
},
...
...
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