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
f0d7f555
Commit
f0d7f555
authored
Mar 03, 2022
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】1,增加告警处理;2,增加虚拟灯的多控逻辑
【提交人】陈伟灿
parent
4c1e24be
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
850 additions
and
229 deletions
+850
-229
VERSION
VERSION
+1
-1
application/klansdk/kk_data_handle.c
application/klansdk/kk_data_handle.c
+44
-1
application/klansdk/kk_findccu_handle.h
application/klansdk/kk_findccu_handle.h
+1
-0
application/klansdk/kk_lan_main.c
application/klansdk/kk_lan_main.c
+48
-1
application/klansdk/kk_opcode.h
application/klansdk/kk_opcode.h
+3
-0
midware/midware/area/kk_area_handle.c
midware/midware/area/kk_area_handle.c
+0
-24
midware/midware/dm/kk_alarm_handle.c
midware/midware/dm/kk_alarm_handle.c
+174
-0
midware/midware/dm/kk_alarm_handle.h
midware/midware/dm/kk_alarm_handle.h
+7
-0
midware/midware/dm/kk_dm_mng.c
midware/midware/dm/kk_dm_mng.c
+24
-1
midware/midware/dm/kk_dm_mng.h
midware/midware/dm/kk_dm_mng.h
+1
-1
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+7
-1
midware/midware/dm/kk_property_db.c
midware/midware/dm/kk_property_db.c
+1
-1
midware/midware/dm/kk_sub_db.c
midware/midware/dm/kk_sub_db.c
+43
-13
midware/midware/dm/kk_sub_db.h
midware/midware/dm/kk_sub_db.h
+1
-1
midware/midware/dm/kk_sync_data.c
midware/midware/dm/kk_sync_data.c
+11
-3
midware/midware/midware.c
midware/midware/midware.c
+82
-132
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+230
-41
midware/midware/scene/kk_scene_pollution_check.c
midware/midware/scene/kk_scene_pollution_check.c
+140
-0
midware/midware/scene/kk_scene_pollution_check.h
midware/midware/scene/kk_scene_pollution_check.h
+24
-0
nx5_soc_gw/smarthome_z3gw_a133
nx5_soc_gw/smarthome_z3gw_a133
+0
-0
tsl/product_3070.json
tsl/product_3070.json
+8
-8
No files found.
VERSION
View file @
f0d7f555
1.4.4
\ No newline at end of file
1.4.5
\ No newline at end of file
application/klansdk/kk_data_handle.c
View file @
f0d7f555
...
...
@@ -209,7 +209,47 @@ static int kk_loginccu_ack(cJSON *arg,int sockfd)
}
return
0
;
}
static
int
kk_loginccu_ack_accesskey
(
cJSON
*
arg
,
int
sockfd
)
{
cJSON
*
deviceId
;
cJSON
*
accesskey
;
cJSON
*
root
;
cJSON
*
args
;
char
*
out
=
NULL
;
char
*
tmpBuf
=
NULL
;
if
(
arg
==
NULL
){
return
-
1
;
}
char
ccuid
[
32
]
=
{
0
};
char
key
[
128
]
=
{
0
};
kk_lan_get_ccuid
(
ccuid
);
kk_lan_get_key
(
key
);
deviceId
=
cJSON_GetObjectItem
(
arg
,
DEVICEID_STRING
);
accesskey
=
cJSON_GetObjectItem
(
arg
,
ACCESSKEY
);
if
(
deviceId
!=
NULL
&&
accesskey
!=
NULL
){
if
(
strstr
(
ccuid
,
deviceId
->
valuestring
)
!=
NULL
&&
strcmp
(
key
,
accesskey
->
valuestring
)
==
0
){
root
=
cJSON_CreateObject
();
if
(
root
){
args
=
cJSON_CreateObject
();
if
(
args
){
cJSON_AddItemToObject
(
root
,
"arg"
,
args
);
cJSON_AddStringToObject
(
args
,
"error_code"
,
"0"
);
cJSON_AddStringToObject
(
args
,
"seq"
,
"2"
);
//cJSON_AddStringToObject(args, "zkid", deviceId->valuestring);
}
cJSON_AddStringToObject
(
root
,
"nodeid"
,
"*"
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
LOGIN_OPCODE
);
cJSON_AddStringToObject
(
root
,
"status"
,
"success"
);
kk_send_ack
(
root
,
sockfd
);
}
cJSON_Delete
(
root
);
}
}
else
{
ERROR_PRINT
(
"data error...
\n
"
);
return
-
1
;
}
return
0
;
}
//构建hw信息
static
cJSON
*
kk_zb_dev_hw_info_build
(
const
char
*
deviceCode
,
const
char
*
productCode
,
int
online
,
const
char
*
hw_ver
,
const
char
*
sw_ver
)
{
...
...
@@ -372,6 +412,9 @@ int kk_data_handle(cJSON *json,int sockfd)
if
(
strcmp
(
opcode
->
valuestring
,
LOGIN_OPCODE
)
==
0
){
arg
=
cJSON_GetObjectItem
(
json
,
ARG_STRING
);
kk_loginccu_ack
(
arg
,
sockfd
);
}
else
if
(
strcmp
(
opcode
->
valuestring
,
LOGIN_ACCESSKEY_OPCODE
)
==
0
){
arg
=
cJSON_GetObjectItem
(
json
,
ARG_STRING
);
kk_loginccu_ack_accesskey
(
arg
,
sockfd
);
}
else
if
(
strcmp
(
opcode
->
valuestring
,
HEARTBEAT_OPCODE
)
==
0
){
kk_heartbeat_ack
(
sockfd
);
}
else
if
(
strcmp
(
opcode
->
valuestring
,
SYNC_OPCODE
)
==
0
){
...
...
application/klansdk/kk_findccu_handle.h
View file @
f0d7f555
...
...
@@ -18,4 +18,5 @@
int
kk_lan_get_ccuid
(
_OU_
char
*
device_code
);
int
kk_findccu_handle_init
(
void
);
int
kk_lan_get_pid
(
_OU_
char
*
productId
);
int
kk_lan_get_key
(
char
*
key
);
#endif
\ No newline at end of file
application/klansdk/kk_lan_main.c
View file @
f0d7f555
...
...
@@ -51,6 +51,53 @@ static int _setDevice_Code(_IN_ char *device_code,int len)
strncpy
(
s_ccuid
,
device_code
,
len
);
return
len
;
}
char
s_key
[
128
]
=
{
0
};
static
int
kk_lan_key_init
(
void
)
{
char
key
[
128
]
=
{
0
};
int
key_len
=
0
;
#ifdef CONFIG_A133_PLATFORM
char
*
pstart
=
NULL
;
char
*
pEnd
=
NULL
;
HAL_Execel_cmd
(
GET_CCUID_CMD
,(
char
*
)
key
,
sizeof
(
key
),
&
key_len
);
INFO_PRINT
(
"---productSecret:%s
\n
"
,
key
);
if
(
key_len
>
0
&&
key_len
<=
128
){
pstart
=
key
;
pEnd
=
strstr
(
key
,
"key_"
);
if
(
pEnd
!=
NULL
){
memcpy
(
s_key
,
pEnd
+
4
,
key_len
-
(
pEnd
-
pstart
+
4
));
if
(
s_key
[
key_len
-
(
pEnd
-
pstart
+
4
)
-
1
]
==
'\n'
){
s_key
[
key_len
-
(
pEnd
-
pstart
+
4
)
-
1
]
=
'\0'
;
INFO_PRINT
(
"kk_cloud_key_init remove entry
\n
"
);
}
INFO_PRINT
(
"kk_cloud_key_init s_key:%s
\n
"
,
s_key
);
}
else
{
//_setDevice_Code(KK_CCU_ID,strlen(KK_CCU_ID));
INFO_PRINT
(
"kk_cloud_key_init error
\n
"
);
return
-
1
;
}
}
else
{
//_setDevice_Code(KK_CCU_ID,strlen(KK_CCU_ID));
INFO_PRINT
(
"kk_cloud_key_init error
\n
"
);
return
-
1
;
}
#else
HAL_Execel_cmd
(
GET_KEY_CMD
,(
char
*
)
key
,
sizeof
(
key
),
&
key_len
);
if
(
key_len
>
0
&&
key_len
<=
128
){
memcpy
(
s_key
,
key
,
key_len
-
1
);
INFO_PRINT
(
"s_key:%s
\n
"
,
s_key
);
}
else
{
return
-
1
;
}
#endif
return
0
;
}
int
kk_lan_get_key
(
char
*
key
)
{
strncpy
(
key
,
s_key
,
strlen
(
s_key
));
printf
(
"kk_lan_get_key:%s
\n
"
,
s_key
);
return
strlen
(
s_key
);
}
char
s_pid
[
PRODUCT_CODE_LEN
]
=
{
0
};
static
int
kk_lan_pid_init
(
void
)
{
...
...
@@ -211,7 +258,7 @@ int main(int argc, char* argv[])
#endif
kk_lan_pid_init
();
kk_lan_ccuid_init
();
kk_lan_key_init
();
/*set the callback to get the device date to cloud*/
kk_ipc_init
(
IPC_APP2MID
,(
ipc_cb
*
)
KK_Data_FromMid
,
NULL
,
NULL
);
kk_findccu_handle_init
();
...
...
application/klansdk/kk_opcode.h
View file @
f0d7f555
...
...
@@ -19,12 +19,15 @@
#define OPCODE_STRING "opcode"
#define ARG_STRING "arg"
#define ZKID_STRING "zkid"
#define DEVICEID_STRING "device_id"
#define OPEARTETYPE_STRING "operateType"
#define NEWCCU_STRING "newccu"
#define OLDCCU_STRING "oldccu"
#define ACCESSKEY "access_key"
#define FINDCCU_OPCODE "FIND_CCU"
#define LOGIN_OPCODE "LOGIN"
#define LOGIN_ACCESSKEY_OPCODE "LOGIN_ACCESSKEY"
#define HEARTBEAT_OPCODE "CCU_HB"
#define SYNC_OPCODE "SYNC_INFO"
#define GET_ZB_DEVS_HW_INFO_OPCODE "GET_ZIGBEE_DEVS_HW_INFO"
...
...
midware/midware/area/kk_area_handle.c
View file @
f0d7f555
...
...
@@ -870,30 +870,6 @@ cJSON *kk_get_roomIds_ary(void)
_kk_area_unlock
();
return
roomIdsAry
;
}
cJSON
*
kk_get_roomIds_ary_by_floorid
(
char
*
floorid
)
{
int
isExist
=
0
;
sqlite3_stmt
*
stmt
;
char
*
proomId
=
NULL
;
int
armingstate
=
0
;
cJSON
*
roomIdsAry
=
cJSON_CreateArray
();
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
const
char
*
searchCmd
=
"select * from AreaInfo whre;"
;
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
armingstate
=
(
int
)
sqlite3_column_int
(
stmt
,
DB_ROOM_ARMING
);
if
(
armingstate
!=
0
){
proomId
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_ROOM_ID
);
cJSON_AddItemToArray
(
roomIdsAry
,
cJSON_CreateNumber
(
atoi
(
proomId
)));
}
}
sqlite3_finalize
(
stmt
);
return
roomIdsAry
;
}
kk_dev_list_t
*
kk_get_room_deviceCode
(
const
char
*
roomId
)
{
...
...
midware/midware/dm/kk_alarm_handle.c
0 → 100644
View file @
f0d7f555
#include "cJSON.h"
#include "kk_product.h"
#include "kk_tsl_common.h"
#include "kk_tsl_api.h"
#include "kk_dm_api.h"
#include "kk_dm_msg.h"
#include "kk_dm_mng.h"
#include "kk_alarm_handle.h"
#include "kk_property_db.h"
#include "kk_history_db.h"
#include "kk_area_handle.h"
enum
{
CCU_ARMING_LEAVE_STATE
=
0
,
//离家布防
CCU_ARMING_NO_STATE
,
//撤防
CCU_ARMING_HOME_STATE
,
//在家布防
CCU_ARMING_AREA_STATE
,
//区域布防
};
enum
{
SUB_ARMING_HOME_STATE
=
0
,
//在家安防
SUB_ARMING_OUTHOME_STATE
,
//室外安防
SUB_ARMING_ALL_STATE
,
//24小时警戒
SUB_ARMING_NO_STATE
,
//无警戒
};
extern
int
HAL_Get_ccuid
(
_OU_
char
*
device_code
);
char
*
CommonAlarmStateDevice
[]
=
{
(
char
*
){
"SmokeSensorState"
},
(
char
*
){
"GasSensorState"
},
(
char
*
){
"WaterSensorState"
},
(
char
*
){
"SosState"
},
(
char
*
){
"AlarmState"
},
};
int
kk_is_CommonAlarmState
(
char
*
identifier
)
{
int
cnt
=
0
;
int
num
=
sizeof
(
CommonAlarmStateDevice
)
/
sizeof
(
char
*
);
for
(
cnt
=
0
;
cnt
<
num
;
cnt
++
){
if
(
strcmp
(
identifier
,
CommonAlarmStateDevice
[
cnt
])
==
0
){
return
1
;
}
}
return
0
;
}
/************************************************************
*功能描述:告警消息处理
*输入参数:data:从gw 层发来的数据
chalMark:网关通道,一般用mac
*输出参数:无
*返 回 值: 无
*其他说明:
安防等级:
0: 在家安防
1: 室外安防
2: 24小时警戒
3: 无警戒
主机安防:
0:离家布防
1:撤防
2:在家布防
3:区域布防
*************************************************************/
int
kk_alarm_notify_handle
(
dm_mgr_dev_node_t
*
node
,
char
*
identifier
,
char
*
valueBuf
)
{
char
ccuid
[
32
]
=
{
0
};
int
currentValue
=
0
;
char
armingstate
[
16
]
=
{
0
};
int
ret
=
0
;
int
needSave
=
0
;
if
(
node
==
NULL
||
identifier
==
NULL
){
return
-
1
;
}
HAL_Get_ccuid
(
ccuid
);
kk_property_db_get_value
(
node
->
deviceCode
,
"SensorType"
,
&
currentValue
);
INFO_PRINT
(
"------------------------->currentValue:%d
\n
"
,
currentValue
);
INFO_PRINT
(
"------------------------->armingstate:%d
\n
"
,
atoi
(
armingstate
));
INFO_PRINT
(
"------------------------->valueBuf:%s
\n
"
,
valueBuf
);
INFO_PRINT
(
"------------------------->identifier:%s
\n
"
,
identifier
);
kk_property_db_get_value
(
ccuid
,
KK_TSL_CCU_ARMINGSTATE_IDENTIFIER
,
armingstate
);
cJSON
*
info
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
info
,
MSG_TYPE_STR
,
"/thing/event/alarmNotify"
);
cJSON_AddStringToObject
(
info
,
MSG_DEVICE_CODE_STR
,
node
->
deviceCode
);
cJSON_AddStringToObject
(
info
,
MSG_PRODUCT_CODE_STR
,
node
->
productCode
);
char
*
infff
=
cJSON_Print
(
info
);
cJSON
*
payload
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
payload
,
"method"
,
"thing.event.alarmNotify"
);
cJSON_AddStringToObject
(
payload
,
"version"
,
"1.0"
);
cJSON_AddStringToObject
(
payload
,
"identifier"
,
"alarmNotify"
);
char
msgId
[
64
]
=
{
0
};
iotx_report_id
(
msgId
);
cJSON_AddStringToObject
(
payload
,
"msgId"
,
msgId
);
//char timerStr[16] = {0};
//HAL_GetTime_s(timerStr);
cJSON_AddNumberToObject
(
payload
,
"time"
,
HAL_GetTime_ms
());
cJSON
*
param
=
cJSON_CreateObject
();
if
(
strcmp
(
identifier
,
"BatteryAlarm"
)
==
0
){
cJSON_AddStringToObject
(
param
,
"LowBatteryState"
,
"1"
);
//needSave = 1;
}
else
if
(
strcmp
(
identifier
,
"DismantleState"
)
==
0
){
if
(
atoi
(
valueBuf
)
==
1
){
cJSON_AddStringToObject
(
param
,
"DismantleState"
,
valueBuf
);
}
else
{
cJSON_Delete
(
param
);
cJSON_Delete
(
payload
);
cJSON_Delete
(
info
);
return
0
;
}
//needSave = 1;
}
//else if(kk_is_CommonAlarmState(identifier) == 1){
//cJSON_AddStringToObject(param, "CommonAlarmState", valueBuf);
// }
else
{
if
(
atoi
(
valueBuf
)
==
1
){
cJSON_AddStringToObject
(
param
,
"CommonAlarmState"
,
"1"
);
}
else
{
cJSON_Delete
(
param
);
cJSON_Delete
(
payload
);
cJSON_Delete
(
info
);
return
0
;
}
//needSave = 1;
}
cJSON_AddItemToObject
(
payload
,
"params"
,
param
);
char
*
payload11
=
cJSON_Print
(
payload
);
if
(
currentValue
==
SUB_ARMING_ALL_STATE
)
//24小时警戒
{
INFO_PRINT
(
"payload11: %s
\n
"
,
payload11
);
kk_sendData2app
(
infff
,
payload11
,
0
);
goto
end
;
}
else
if
(
currentValue
!=
SUB_ARMING_NO_STATE
&&
atoi
(
armingstate
)
==
CCU_ARMING_LEAVE_STATE
)
//离家布防
{
INFO_PRINT
(
"payload11: %s
\n
"
,
payload11
);
kk_sendData2app
(
infff
,
payload11
,
0
);
}
else
if
((
currentValue
==
SUB_ARMING_OUTHOME_STATE
||
currentValue
==
SUB_ARMING_ALL_STATE
)
&&
atoi
(
armingstate
)
==
CCU_ARMING_HOME_STATE
)
//在家布防
{
INFO_PRINT
(
"payload11: %s
\n
"
,
payload11
);
kk_sendData2app
(
infff
,
payload11
,
0
);
}
else
if
(
atoi
(
armingstate
)
==
CCU_ARMING_AREA_STATE
)
{
char
roomId
[
16
]
=
{
0
};
ret
=
kk_get_roomId_by_deviceCode
(
node
->
deviceCode
,
"1"
,
roomId
,
sizeof
(
roomId
));
INFO_PRINT
(
"roomId: [%s]
\n
"
,
roomId
);
if
(
ret
==
1
){
int
state
=
kk_get_room_armingstate
(
roomId
);
INFO_PRINT
(
"state: [%d]
\n
"
,
state
);
if
(
state
==
1
){
if
(
currentValue
!=
SUB_ARMING_NO_STATE
){
INFO_PRINT
(
"payload11: %s
\n
"
,
payload11
);
kk_sendData2app
(
infff
,
payload11
,
0
);
}
}
else
{
if
(
currentValue
==
SUB_ARMING_OUTHOME_STATE
||
currentValue
==
SUB_ARMING_ALL_STATE
){
INFO_PRINT
(
"payload11: %s
\n
"
,
payload11
);
kk_sendData2app
(
infff
,
payload11
,
0
);
}
}
}
}
end:
needSave
=
0
;
free
(
payload11
);
free
(
infff
);
cJSON_Delete
(
payload
);
cJSON_Delete
(
info
);
return
0
;
}
\ No newline at end of file
midware/midware/dm/kk_alarm_handle.h
0 → 100644
View file @
f0d7f555
#ifndef _KK_ALARM_NOTIFY_H_
#define _KK_ALARM_NOTIFY_H_
#include "kk_hal.h"
#include "kk_log.h"
int
kk_alarm_notify_handle
(
dm_mgr_dev_node_t
*
node
,
char
*
identifier
,
char
*
valueBuf
);
#endif
\ No newline at end of file
midware/midware/dm/kk_dm_mng.c
View file @
f0d7f555
...
...
@@ -1905,4 +1905,27 @@ cJSON *dm_mgr_get_ccu_info(void)
return
root
;
}
int
kk_is_mutiEp_device
(
const
char
*
deviceCode
)
{
int
res
=
0
;
int
idx
=
0
;
kk_tsl_data_t
*
property
=
NULL
;
dm_mgr_dev_node_t
*
node
=
NULL
;
res
=
dm_mgr_get_device_by_devicecode
((
char
*
)
deviceCode
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"ERROR [%s][%d] res:%d
\n
"
,
__FUNCTION__
,
__LINE__
,
res
);
return
FAIL_RETURN
;
}
for
(
idx
=
0
;
idx
<
node
->
dev_shadow
->
property_number
;
idx
++
){
property
=
(
kk_tsl_data_t
*
)(
node
->
dev_shadow
->
properties
+
idx
);
if
(
property
==
NULL
){
continue
;
}
if
(
strstr
(
property
->
identifier
,
"_"
)
!=
NULL
){
return
1
;
}
else
{
return
0
;
}
}
return
0
;
}
midware/midware/dm/kk_dm_mng.h
View file @
f0d7f555
...
...
@@ -129,5 +129,5 @@ void dm_mgr_resubscribe(void);
int
kk_get_pid
(
char
*
productId
);
int
dm_mgr_ccu_heartbeat_cloud
(
_IN_
int
devid
);
cJSON
*
dm_mgr_get_ccu_info
(
void
);
int
kk_is_mutiEp_device
(
const
char
*
deviceCode
);
#endif
midware/midware/dm/kk_linkkit.c
View file @
f0d7f555
...
...
@@ -2171,7 +2171,11 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON
*
pSub
=
cJSON_GetArrayItem
(
RoomIds
,
iCnt
);
if
(
NULL
==
pSub
){
continue
;
}
char
roomId
[
16
]
=
{
0
};
sprintf
(
roomId
,
"%d"
,
pSub
->
valueint
);
if
(
pSub
->
type
==
cJSON_String
){
strcpy
(
roomId
,
pSub
->
valuestring
);
}
else
{
sprintf
(
roomId
,
"%d"
,
pSub
->
valueint
);
}
INFO_PRINT
(
"id [%d] : %s
\n
"
,
iCnt
,
roomId
);
kk_room_update_armingstate
(
1
,
roomId
);
}
...
...
@@ -2665,6 +2669,7 @@ int _iotx_linkkit_slave_register(int devid)
return
SUCCESS_RETURN
;
}
#if 0
/************************************************************
*功能描述:子设备删除处理,
*输入参数:devid:设备ID
...
...
@@ -2729,6 +2734,7 @@ static int _iotx_linkkit_subdev_delete_topo(int devid)
return SUCCESS_RETURN;
}
#endif
/************************************************************
*功能描述:主模块释放处理
*输入参数:无
...
...
midware/midware/dm/kk_property_db.c
View file @
f0d7f555
...
...
@@ -1011,7 +1011,7 @@ int kk_property_db_get_value_directly(const char *deviceCode,const char *identif
//int rc = 0;
//char *zErrMsg = 0;
sqlite3_stmt
*
stmt
;
char
*
valueStr
=
NULL
;
char
*
valueStr
=
""
;
kk_property_db_ctx_t
*
ctx
=
_kk_property_db_get_ctx
();
_kk_property_db_lock
();
...
...
midware/midware/dm/kk_sub_db.c
View file @
f0d7f555
...
...
@@ -812,9 +812,10 @@ static int _kk_indoor_air_info_handle(char* deviceCode,char* propertyName,char*
}
return
res
;
}
int
kk_indoor_air_action_add
(
char
*
propertyValue
,
char
*
deviceCode
,
int
delay
,
char
*
gwDeviceCode
,
char
*
sceneId
,
char
*
type
,
int
epnum
)
int
kk_indoor_air_action_add
(
char
*
propertyValue
,
char
*
deviceCode
,
int
delay
,
char
*
gwDeviceCode
,
char
*
sceneId
,
char
*
type
,
int
epnum
,
int
mutiDev
)
{
char
data
[
32
]
=
{
0
};
cJSON
*
json
=
cJSON_Parse
(
propertyValue
);
if
(
json
==
NULL
)
{
return
-
1
;
...
...
@@ -827,8 +828,12 @@ int kk_indoor_air_action_add(char *propertyValue,char* deviceCode,int delay,char
}
else
{
sprintf
(
data
,
"%f"
,
Temperature
->
valuedouble
);
}
if
(
mutiDev
){
_kk_indoor_air_info_handle
(
deviceCode
,
"Temperature_1"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
}
else
{
_kk_indoor_air_info_handle
(
deviceCode
,
"Temperature"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
}
_kk_indoor_air_info_handle
(
deviceCode
,
"Temperature"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
cJSON
*
WindSpeed
=
cJSON_GetObjectItem
(
json
,
"WindSpeed"
);
if
(
WindSpeed
==
NULL
)
{
cJSON_Delete
(
json
);
return
-
1
;}
memset
(
data
,
0x0
,
sizeof
(
data
));
...
...
@@ -837,8 +842,13 @@ int kk_indoor_air_action_add(char *propertyValue,char* deviceCode,int delay,char
}
else
{
sprintf
(
data
,
"%d"
,
WindSpeed
->
valueint
);
}
_kk_indoor_air_info_handle
(
deviceCode
,
"WindSpeed"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
if
(
mutiDev
){
_kk_indoor_air_info_handle
(
deviceCode
,
"WindSpeed_1"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
}
else
{
_kk_indoor_air_info_handle
(
deviceCode
,
"WindSpeed"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
}
cJSON
*
WorkMode
=
cJSON_GetObjectItem
(
json
,
"WorkMode"
);
if
(
WorkMode
==
NULL
){
cJSON_Delete
(
json
);
return
-
1
;}
memset
(
data
,
0x0
,
sizeof
(
data
));
...
...
@@ -847,8 +857,12 @@ int kk_indoor_air_action_add(char *propertyValue,char* deviceCode,int delay,char
}
else
{
sprintf
(
data
,
"%d"
,
WorkMode
->
valueint
);
}
_kk_indoor_air_info_handle
(
deviceCode
,
"WorkMode"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
if
(
mutiDev
){
_kk_indoor_air_info_handle
(
deviceCode
,
"WorkMode_1"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
}
else
{
_kk_indoor_air_info_handle
(
deviceCode
,
"WorkMode"
,
data
,
epnum
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
0
);
}
cJSON_Delete
(
json
);
return
0
;
}
...
...
@@ -876,7 +890,7 @@ static int _kk_indoor_air_handle(char* deviceCode, char *sceneId, char *property
}
}
if
(
strcmp
(
propertyName
,
"CustomAction"
)
==
0
){
kk_indoor_air_action_add
(
propertyValue
,
deviceCode
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
eplist
[
i
]);
kk_indoor_air_action_add
(
propertyValue
,
deviceCode
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
eplist
[
i
]
,
0
);
kk_scene_insert_scene_action
(
type
,
deviceCode
,
eplist
[
i
],
propertyName
,
propertyValue
,
delay
,
sceneId
,
gwDeviceCode
,
2
);
}
else
{
...
...
@@ -885,9 +899,10 @@ static int _kk_indoor_air_handle(char* deviceCode, char *sceneId, char *property
}
return
0
;
}
static
int
_kk_airConditon_handle
(
char
*
deviceCode
,
char
*
sceneId
,
char
*
propertyName
,
char
*
propertyValue
,
char
*
type
,
int
delay
,
char
*
gwDeviceCode
,
char
*
roomId
)
static
int
_kk_airConditon_handle
(
char
*
deviceCode
,
char
*
sceneId
,
char
*
propertyName
,
char
*
propertyValue
,
char
*
type
,
int
delay
,
char
*
gwDeviceCode
,
char
*
roomId
,
char
*
productCode
)
{
int
res
=
0
;
int
mutiDev
=
0
;
int
allRoom
=
(
strcmp
(
roomId
,
"-1"
)
==
0
)
?
1
:
0
;
if
(
allRoom
==
1
){
if
(
kk_check_dev_exist_inRoom
(
deviceCode
,
"1"
)
==
0
){
...
...
@@ -900,15 +915,30 @@ static int _kk_airConditon_handle(char* deviceCode, char *sceneId, char *propert
return
-
1
;;
}
}
if
(
strcmp
(
productCode
,
"3095"
)
==
0
||
strcmp
(
productCode
,
"3098"
)
==
0
){
//空调多合一 或者 风机盘管多合一
mutiDev
=
1
;
}
if
(
strcmp
(
propertyName
,
"CustomAction"
)
==
0
){
kk_indoor_air_action_add
(
propertyValue
,
deviceCode
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
1
);
kk_indoor_air_action_add
(
propertyValue
,
deviceCode
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
1
,
mutiDev
);
kk_scene_insert_scene_action
(
type
,
deviceCode
,
1
,
propertyName
,
propertyValue
,
delay
,
sceneId
,
gwDeviceCode
,
2
);
}
else
{
_kk_indoor_air_info_handle
(
deviceCode
,
propertyName
,
propertyValue
,
1
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
1
);
if
(
mutiDev
){
char
propertyNameBuf
[
64
]
=
{
0
};
sprintf
(
propertyNameBuf
,
"%s_%d"
,
propertyName
,
1
);
_kk_indoor_air_info_handle
(
deviceCode
,
propertyNameBuf
,
propertyValue
,
1
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
1
);
//res = kk_scene_insert_scene_action(type,deviceCode,1,
//propertyName,propertyValue,delay,sceneId,gwDeviceCode,2);
//if(res != SUCCESS_RETURN){
//INFO_PRINT("_kk_airConditon_handle fail!!!\n");
//}
}
else
{
_kk_indoor_air_info_handle
(
deviceCode
,
propertyName
,
propertyValue
,
1
,
delay
,
gwDeviceCode
,
sceneId
,
type
,
1
);
}
}
return
0
;
return
res
;
}
static
int
_kk_air_switch_handle
(
char
*
deviceCode
,
char
*
sceneId
,
char
*
propertyName
,
char
*
propertyValue
,
char
*
type
,
int
delay
,
char
*
gwDeviceCode
)
{
...
...
@@ -943,7 +973,7 @@ static int _kk_air_switch_handle(char* deviceCode, char *sceneId, char *property
cJSON_Delete(json);
#endif
}
else
{
//
_kk_indoor_air_info_handle(deviceCode,propertyName,propertyValue,eplist[i],delay,gwDeviceCode,sceneId,type,1);
_kk_indoor_air_info_handle
(
deviceCode
,
propertyName
,
propertyValue
,
eplist
[
i
],
delay
,
gwDeviceCode
,
sceneId
,
type
,
1
);
}
}
return
0
;
...
...
@@ -1002,7 +1032,7 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *room
}
else
if
(
strcmp
(
typeArray
[
k
],
"airConditioning"
)
==
0
||
strcmp
(
typeArray
[
k
],
"fanCoil"
)
==
0
){
//空调线控器和风机盘管
devIsExsit
=
1
;
_kk_airConditon_handle
(
pDeviceCode
,(
char
*
)
sceneId
,(
char
*
)
propertyName
,(
char
*
)
propertyValue
,(
char
*
)
type
,
delay
,
node
->
fatherDeviceCode
,(
char
*
)
roomId
);
_kk_airConditon_handle
(
pDeviceCode
,(
char
*
)
sceneId
,(
char
*
)
propertyName
,(
char
*
)
propertyValue
,(
char
*
)
type
,
delay
,
node
->
fatherDeviceCode
,(
char
*
)
roomId
,
node
->
productCode
);
continue
;
}
for
(
idx
=
0
;
idx
<
node
->
dev_shadow
->
property_number
;
idx
++
){
...
...
midware/midware/dm/kk_sub_db.h
View file @
f0d7f555
...
...
@@ -49,7 +49,7 @@ int kk_screenDev_delete_by_serialId(char *serialId);
int
kk_get_screenDev_list
(
ScreenDevInfo_t
*
list
);
int
kk_get_screenDev_info
(
ScreenDevInfo_t
*
devInfo
,
char
*
serialId
);
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_indoor_air_action_add
(
char
*
propertyValue
,
char
*
deviceCode
,
int
delay
,
char
*
gwDeviceCode
,
char
*
sceneId
,
char
*
type
,
int
epnum
,
int
mutiDev
);
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
);
...
...
midware/midware/dm/kk_sync_data.c
View file @
f0d7f555
...
...
@@ -601,7 +601,7 @@ static cJSON * kk_get_properties_info_obj(char *deviceCode)
propertyStr
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_IDENTIFITER
);
valueType
=
sqlite3_column_int
(
stmt
,
DB_VALUETYPE
);
valueStr
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_VALUE
);
if
(
strstr
(
propertyStr
,
"."
)
!=
NULL
){
if
(
strstr
(
propertyStr
,
"."
)
!=
NULL
&&
strcmp
(
propertyStr
,
"PM2.5"
)
!=
0
){
//printf("[%s][%d]\n",__FUNCTION__,__LINE__);
char
*
propertiesbuf
[
DEVICE_PROPERTY_NAME_MAX
]
=
{
0
};
kk_split
(
propertyStr
,
"."
,
propertiesbuf
,
&
num
);
...
...
@@ -949,9 +949,18 @@ static int kk_get_panel_scenes_allRoom_info(cJSON *actionItem,char* id,char *roo
}
else
{
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYNAME_STR
,
propertyName
);
}
if
(
strstr
(
propertyValue
,
"{"
)
!=
NULL
&&
strstr
(
propertyValue
,
"}"
)
!=
NULL
){
cJSON
*
prtyObj
=
cJSON_Parse
(
propertyValue
);
if
(
prtyObj
!=
NULL
){
cJSON_AddItemToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
prtyObj
);
}
else
{
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
propertyValue
);
}
}
else
{
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
propertyValue
);
}
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_TYPE_STR
,
type
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
propertyValue
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_ROOMID_STR
,
roomId
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PRODUCTTYPE
,
productType
);
break
;
...
...
@@ -1098,7 +1107,6 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,char* id,char *productT
propertyName
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYNAME
);
propertyValue
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYVALUE
);
type
=
(
char
*
)
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_TYPE
);
if
(
strcmp
(
type
,
"action/thing/cluster"
)
==
0
){
actionItem
=
cJSON_Parse
(
propertyName
);
...
...
midware/midware/midware.c
View file @
f0d7f555
This diff is collapsed.
Click to expand it.
midware/midware/scene/kk_scene_handle.c
View file @
f0d7f555
This diff is collapsed.
Click to expand it.
midware/midware/scene/kk_scene_pollution_check.c
0 → 100644
View file @
f0d7f555
#include <stdio.h>
#include "sqlite3.h"
#include "kk_log.h"
#include "kk_hal.h"
#include "kk_scene_pollution_check.h"
#include "kk_property_db.h"
kk_pmGrade_t
g_pm25GradeMap
[]
=
{
{
{
{
0
,
35
,
10
},{
36
,
75
,
1
},{
76
,
150
,
2
},{
151
,
250
,
3
},{
251
,
999
,
4
}
}
},
};
kk_pollution_t
g_pollutionMap
[]
=
{
{
"CO2"
,
{
{
0
,
1500
,
1
},{
1501
,
2500
,
2
},{
2501
,
3500
,
3
},{
3501
,
9999
,
4
}
}
},
{
"PM2.5"
,
{
{
0
,
75
,
1
},{
76
,
150
,
2
},{
151
,
250
,
3
},{
251
,
999
,
4
}
}
},
{
"HCHO"
,
{
{
0
,
40
,
1
},{
41
,
80
,
2
},{
81
,
150
,
3
},{
151
,
999
,
4
}
}
},
{
"TVOC"
,
{
{
0
,
40
,
1
},{
41
,
80
,
2
},{
81
,
150
,
3
},{
151
,
999
,
4
}
}
},
};
int
kk_pollution_level_check
(
kk_pollution_level_t
levelMap
[],
int
val
,
int
num
)
{
int
i
=
0
;
for
(
i
=
0
;
i
<
num
;
i
++
){
if
(
val
>
levelMap
[
i
].
min
&&
val
<=
levelMap
[
i
].
max
){
return
levelMap
[
i
].
level
;
}
}
return
-
1
;
}
int
kk_pollution_check
(
cJSON
*
param
,
int
grade
)
{
int
i
=
0
;
int
num
=
0
;
int
ret
=
0
;
cJSON
*
item
=
NULL
;
if
(
param
==
NULL
){
return
-
1
;
}
num
=
sizeof
(
g_pollutionMap
)
/
sizeof
(
kk_pollution_t
);
for
(
i
=
0
;
i
<
num
;
i
++
){
item
=
cJSON_GetObjectItem
(
param
,
g_pollutionMap
[
i
].
identifier
);
if
(
item
==
NULL
){
continue
;
}
if
(
item
->
type
!=
cJSON_Number
){
continue
;
}
ret
=
kk_pollution_level_check
(
g_pollutionMap
[
i
].
levelMap
,
item
->
valueint
,
4
);
if
(
ret
!=
-
1
){
if
(
grade
==
1
){
if
(
ret
==
1
){
continue
;
}
else
{
return
0
;
}
}
else
{
if
(
grade
==
ret
){
return
1
;
}
}
}
}
if
(
grade
==
1
&&
ret
==
1
){
return
1
;
}
return
0
;
}
int
kk_pollution_condition_check
(
char
*
deviceCode
,
int
grade
)
{
int
num
=
0
;
int
i
=
0
;
int
ret
=
0
;
char
currentValue
[
64
]
=
{
0
};
num
=
sizeof
(
g_pollutionMap
)
/
sizeof
(
kk_pollution_t
);
for
(
i
=
0
;
i
<
num
;
i
++
){
printf
(
"------------->g_pollutionMap[i].identifier:%s
\n
"
,
g_pollutionMap
[
i
].
identifier
);
memset
(
currentValue
,
0x0
,
sizeof
(
currentValue
));
kk_property_db_get_value_directly
(
deviceCode
,
g_pollutionMap
[
i
].
identifier
,
currentValue
);
if
(
strcmp
(
currentValue
,
""
)
==
0
){
continue
;
}
printf
(
"------------->currentValue:%s
\n
"
,
currentValue
);
ret
=
kk_pollution_level_check
(
g_pollutionMap
[
i
].
levelMap
,
atoi
(
currentValue
),
4
);
printf
(
"------------->ret:%d
\n
"
,
ret
);
if
(
ret
!=
-
1
){
if
(
grade
==
1
){
if
(
ret
==
1
){
continue
;
}
else
{
return
0
;
}
}
else
{
if
(
grade
==
ret
){
return
1
;
}
}
}
}
if
(
grade
==
1
&&
ret
==
1
){
return
1
;
}
return
0
;
}
int
kk_pm25_condition_check
(
char
*
deviceCode
)
{
int
num
=
0
;
int
i
=
0
;
int
ret
=
0
;
char
currentValue
[
64
]
=
{
0
};
kk_property_db_get_value_directly
(
deviceCode
,
"PM2.5"
,
currentValue
);
if
(
strcmp
(
currentValue
,
""
)
==
0
){
return
0
;
}
return
kk_pollution_level_check
(
g_pm25GradeMap
[
i
].
levelMap
,
atoi
(
currentValue
),
5
);
}
\ No newline at end of file
midware/midware/scene/kk_scene_pollution_check.h
0 → 100644
View file @
f0d7f555
#ifndef __KK_SCENE_POLLUTION_H__
#define __KK_SCENE_POLLUTION_H__
#include "cJSON.h"
typedef
struct
{
int
min
;
int
max
;
int
level
;
}
kk_pollution_level_t
;
typedef
struct
{
char
*
identifier
;
kk_pollution_level_t
levelMap
[
4
];
}
kk_pollution_t
;
typedef
struct
{
kk_pollution_level_t
levelMap
[
5
];
}
kk_pmGrade_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
);
#endif
\ No newline at end of file
nx5_soc_gw/smarthome_z3gw_a133
View file @
f0d7f555
No preview for this file type
tsl/product_3070.json
View file @
f0d7f555
...
...
@@ -18,8 +18,8 @@
"identifier"
:
"ModuleType"
,
"dataType"
:{
"specs"
:{
"
0
"
:
"常闭"
,
"
1
"
:
"常开"
"
1
"
:
"常闭"
,
"
2
"
:
"常开"
},
"type"
:
"enum"
},
...
...
@@ -51,8 +51,8 @@
"dataType"
:
{
"type"
:
"enum"
,
"specs"
:
{
"
0
"
:
"常闭"
,
"
1
"
:
"常开"
"
1
"
:
"常闭"
,
"
2
"
:
"常开"
}
}
}
...
...
@@ -91,8 +91,8 @@
"dataType"
:
{
"type"
:
"enum"
,
"specs"
:
{
"
0
"
:
"常闭"
,
"
1
"
:
"常开"
"
1
"
:
"常闭"
,
"
2
"
:
"常开"
}
}
},
...
...
@@ -132,8 +132,8 @@
"dataType"
:
{
"type"
:
"enum"
,
"specs"
:
{
"
0
"
:
"常闭"
,
"
1
"
:
"常开"
"
1
"
:
"常闭"
,
"
2
"
:
"常开"
}
}
}
...
...
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