Commit 21b41429 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

Cwc

See merge request chenweican/k-sdk!70
parents aa50f0d6 4f70a671
...@@ -334,6 +334,7 @@ static int _kk_topo_change_handle(cJSON *payload) ...@@ -334,6 +334,7 @@ static int _kk_topo_change_handle(cJSON *payload)
return RETURN_SUCCESS; return RETURN_SUCCESS;
} }
static char * _kk_data_create(const char *topic,const char *data) static char * _kk_data_create(const char *topic,const char *data)
{ {
cJSON *root; cJSON *root;
...@@ -365,7 +366,9 @@ static char * _kk_data_create(const char *topic,const char *data) ...@@ -365,7 +366,9 @@ static char * _kk_data_create(const char *topic,const char *data)
if(strstr(topic,KK_TOPO_CHANGE_MSG_STR)){ if(strstr(topic,KK_TOPO_CHANGE_MSG_STR)){
_kk_topo_change_handle(payloadObj); _kk_topo_change_handle(payloadObj);
} }
out=cJSON_Print(root); out=cJSON_Print(root);
cJSON_Minify(out);
cJSON_Delete(root); cJSON_Delete(root);
free(msgStr); free(msgStr);
free(infoStr); free(infoStr);
......
...@@ -111,7 +111,7 @@ uint64_t HAL_UptimeMs(void) ...@@ -111,7 +111,7 @@ uint64_t HAL_UptimeMs(void)
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
time_ms = ((uint64_t)ts.tv_sec * (uint64_t)1000) + (ts.tv_nsec / 1000 / 1000); time_ms = ((uint64_t)ts.tv_sec * (uint64_t)1000) + (ts.tv_nsec / 1000 / 1000);
//printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HAL_UptimeMs:%llu\n",time_ms);
return time_ms; return time_ms;
} }
time_t HAL_Uptimes(void) time_t HAL_Uptimes(void)
...@@ -125,7 +125,7 @@ time_t HAL_Uptimes(void) ...@@ -125,7 +125,7 @@ time_t HAL_Uptimes(void)
return time_m; return time_m;
} }
uint64_t HAL_GetTime(void) time_t HAL_GetTime(void)
{ {
time_t t; time_t t;
t = time(NULL); t = time(NULL);
......
...@@ -108,7 +108,7 @@ int kk_heartbeat_init(void) ...@@ -108,7 +108,7 @@ int kk_heartbeat_init(void)
/* Init Device Id*/ /* Init Device Id*/
INIT_LIST_HEAD(&ctx->gw_status_list); INIT_LIST_HEAD(&ctx->gw_status_list);
ctx->hearbeat_thread_running = 1; ctx->hearbeat_thread_running = 1;
s_start_time = HAL_UptimeMs(); s_start_time = HAL_Uptimes();
res = pthread_create(&ctx->hearbeat_thread, NULL, kk_heartbeat_yield, NULL); res = pthread_create(&ctx->hearbeat_thread, NULL, kk_heartbeat_yield, NULL);
if (res < 0) { if (res < 0) {
......
...@@ -782,24 +782,15 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier) ...@@ -782,24 +782,15 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
} }
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_tsl_t *dev_shadow,const char *msgId) int dm_msg_scene_event_post(const char *identifier,kk_tsl_t *dev_shadow,const char *msgId)
{ {
int res = 0; int res = 0;
int nums = 0; int nums = 0;
int idx = 0; int idx = 0;
char *payload = NULL; char *payload = NULL;
dm_mgr_dev_node_t *node = NULL;
void *event = NULL; void *event = NULL;
char *method = NULL; char *method = NULL;
printf("msgId:%s\n",msgId);
if(deviceCode == NULL){
return FAIL_RETURN;
}
res = dm_mgr_get_device_by_devicecode(deviceCode, &node);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
}
payload = kk_tsl_get_post_event_str(dev_shadow,identifier,strlen(identifier)); payload = kk_tsl_get_post_event_str(dev_shadow,identifier,strlen(identifier));
if(payload != NULL){ if(payload != NULL){
res = kk_tsl_get_event_by_identifier(dev_shadow, identifier, &event); res = kk_tsl_get_event_by_identifier(dev_shadow, identifier, &event);
...@@ -813,7 +804,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts ...@@ -813,7 +804,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts
free(payload); free(payload);
return FAIL_RETURN; return FAIL_RETURN;
} }
dm_mgr_upstream_thing_event_post_ex(node->devid, identifier, strlen(identifier), method, payload, strlen(payload),msgId); dm_mgr_upstream_thing_event_post_ex(KK_DM_DEVICE_CCU_DEVICEID, identifier, strlen(identifier), method, payload, strlen(payload),msgId);
free(method); free(method);
method = NULL; method = NULL;
free(payload); free(payload);
......
...@@ -224,7 +224,6 @@ int dm_queue_msg_insert(void *data) ...@@ -224,7 +224,6 @@ int dm_queue_msg_insert(void *data)
} }
_dm_queue_lock(); _dm_queue_lock();
printf("dm msg list size: %d, max size: %d", ctx->msg_list.size, ctx->msg_list.max_size);
if (ctx->msg_list.size >= ctx->msg_list.max_size) { if (ctx->msg_list.size >= ctx->msg_list.max_size) {
printf("dm queue list full"); printf("dm queue list full");
_dm_queue_unlock(); _dm_queue_unlock();
...@@ -284,7 +283,6 @@ int dm_queue_msg_insert2(void *data) ...@@ -284,7 +283,6 @@ int dm_queue_msg_insert2(void *data)
} }
_dm_queue_lock2(); _dm_queue_lock2();
printf("dm msg list size: %d, max size: %d", ctx->msg_list2.size, ctx->msg_list2.max_size);
if (ctx->msg_list2.size >= ctx->msg_list2.max_size) { if (ctx->msg_list2.size >= ctx->msg_list2.max_size) {
printf("dm queue list full"); printf("dm queue list full");
_dm_queue_unlock2(); _dm_queue_unlock2();
...@@ -345,9 +343,7 @@ int dm_queue_msg_insert3(void *data) ...@@ -345,9 +343,7 @@ int dm_queue_msg_insert3(void *data)
} }
_dm_queue_lock3(); _dm_queue_lock3();
printf("dm msg list size: %d, max size: %d", ctx->msg_list3.size, ctx->msg_list3.max_size);
if (ctx->msg_list3.size >= ctx->msg_list3.max_size) { if (ctx->msg_list3.size >= ctx->msg_list3.max_size) {
printf("dm queue list full");
_dm_queue_unlock3(); _dm_queue_unlock3();
return FAIL_RETURN; return FAIL_RETURN;
} }
......
...@@ -625,12 +625,12 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param) ...@@ -625,12 +625,12 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_service_addScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId) static int kk_service_addScene_handle(cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
char sceneId[32] = {0}; char sceneId[32] = {0};
kk_tsl_t *pSceneShadow = NULL; kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL || msgId == NULL){ if(param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
...@@ -639,16 +639,16 @@ static int kk_service_addScene_handle(const char *deviceCode,cJSON *param,cJSON ...@@ -639,16 +639,16 @@ static int kk_service_addScene_handle(const char *deviceCode,cJSON *param,cJSON
pSceneShadow = kk_scene_shadow(); pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){ if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId);
dm_msg_scene_event_post(deviceCode,MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId->valuestring); dm_msg_scene_event_post(MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId->valuestring);
} }
} }
return res; return res;
} }
static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId) static int kk_service_updateScene_handle(cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
kk_tsl_t *pSceneShadow = NULL; kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL || msgId == NULL){ if(param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID); cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
...@@ -658,19 +658,19 @@ static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param,cJS ...@@ -658,19 +658,19 @@ static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param,cJS
pSceneShadow = kk_scene_shadow(); pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){ if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_UPDATENOTIFICATION_SCENEID,NULL,sceneId->valuestring); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_UPDATENOTIFICATION_SCENEID,NULL,sceneId->valuestring);
dm_msg_scene_event_post(deviceCode,MSG_SCENE_UPDATENOTIFICATION,pSceneShadow,msgId->valuestring); dm_msg_scene_event_post(MSG_SCENE_UPDATENOTIFICATION,pSceneShadow,msgId->valuestring);
} }
} }
return res; return res;
} }
static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId) static int kk_service_deleteScene_handle(cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
kk_tsl_t *pSceneShadow = NULL; kk_tsl_t *pSceneShadow = NULL;
char sceneIdBuf[16] = {0}; char sceneIdBuf[16] = {0};
if(deviceCode == NULL || param == NULL || msgId == NULL){ if(param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID); cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
...@@ -691,29 +691,23 @@ static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param,cJS ...@@ -691,29 +691,23 @@ static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param,cJS
else{ else{
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_DELETENOTIFICATION_SCENEID,NULL,sceneId->valuestring); kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_DELETENOTIFICATION_SCENEID,NULL,sceneId->valuestring);
} }
dm_msg_scene_event_post(deviceCode,MSG_SCENE_DELETENOTIFICATION,pSceneShadow,msgId->valuestring); dm_msg_scene_event_post(MSG_SCENE_DELETENOTIFICATION,pSceneShadow,msgId->valuestring);
} }
} }
return res; return res;
} }
static int kk_service_executeScene_handle(const char *deviceCode,cJSON *param,cJSON *msgId) static int kk_service_executeScene_handle(cJSON *param,cJSON *msgId)
{ {
int res = 0; int res = 0;
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL || msgId == NULL){ if(param == NULL || msgId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID); cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
if(sceneId == NULL) return FAIL_RETURN; if(sceneId == NULL) return FAIL_RETURN;
res = kk_scene_execute_scene(sceneId->valuestring); res = kk_scene_execute_scene(sceneId->valuestring,msgId->valuestring);
if(res == SUCCESS_RETURN){
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_EXECUTENOTIFICATION_SCENEID,NULL,sceneId->valuestring);
dm_msg_scene_event_post(deviceCode,MSG_SCENE_EXECUTENOTIFICATION,pSceneShadow,msgId->valuestring);
}
}
return res; return res;
} }
...@@ -895,25 +889,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -895,25 +889,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT(" add scene \n"); INFO_PRINT(" add scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_addScene_handle(deviceCode->valuestring,paramStr,msgId); kk_service_addScene_handle(paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UPDATESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UPDATESCENC) == 0){
INFO_PRINT(" update scene \n"); INFO_PRINT(" update scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_updateScene_handle(deviceCode->valuestring,paramStr,msgId); kk_service_updateScene_handle(paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DELETESCENC) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DELETESCENC) == 0){
INFO_PRINT("delete scene \n"); INFO_PRINT("delete scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_deleteScene_handle(deviceCode->valuestring,paramStr,msgId); kk_service_deleteScene_handle(paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_EXECUTESCENE) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_EXECUTESCENE) == 0){
INFO_PRINT("execute scene \n"); INFO_PRINT("execute scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_SCENE_MSGID);
kk_service_executeScene_handle(deviceCode->valuestring,paramStr,msgId); kk_service_executeScene_handle(paramStr,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_NEGATIVE) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_NEGATIVE) == 0){
INFO_PRINT("negative service \n"); INFO_PRINT("negative service \n");
......
/************************************************************
*版权所有 (C)2020,公司(或个人)名称
*
*文件名称: kk_sub_db.c
*内容摘要: 网关设备和子设备设备表处理模块
*其他说明:
*当前版本:
*************************************************************/
#include <stdio.h> #include <stdio.h>
#include "kk_tsl_api.h" #include "kk_tsl_api.h"
...@@ -50,6 +58,14 @@ static void _kk_subDb_unlock(void) ...@@ -50,6 +58,14 @@ static void _kk_subDb_unlock(void)
} }
} }
/************************************************************
*功能描述:设备表的初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_subDev_db_Init(void) static int kk_subDev_db_Init(void)
{ {
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx(); kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
...@@ -65,7 +81,7 @@ static int kk_subDev_db_Init(void) ...@@ -65,7 +81,7 @@ static int kk_subDev_db_Init(void)
idx INTEGER, \ idx INTEGER, \
isOffline INTEGER, \ isOffline INTEGER, \
productCode varchar(33), \ productCode varchar(33), \
deviceCode varchar(33), \ deviceCode varchar(33) UNIQUE, \
mac varchar(17), \ mac varchar(17), \
fatherDeviceCode varchar(33), \ fatherDeviceCode varchar(33), \
version varchar(33), \ version varchar(33), \
...@@ -94,6 +110,13 @@ static int kk_subDev_db_Init(void) ...@@ -94,6 +110,13 @@ static int kk_subDev_db_Init(void)
_kk_subDb_unlock(); _kk_subDb_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:开机从设备数据库导出数据到内存
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static int _kk_load_subDevice(void) static int _kk_load_subDevice(void)
{ {
const char *searchCmd = "select * from SubDeviceInfo;"; const char *searchCmd = "select * from SubDeviceInfo;";
...@@ -140,6 +163,14 @@ static int _kk_load_subDevice(void) ...@@ -140,6 +163,14 @@ static int _kk_load_subDevice(void)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:设备数据模块初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDb_init(void) int kk_subDb_init(void)
{ {
int res = 0; int res = 0;
...@@ -159,6 +190,14 @@ int kk_subDb_init(void) ...@@ -159,6 +190,14 @@ int kk_subDb_init(void)
_kk_load_subDevice(); _kk_load_subDevice();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:检查设备是否有重复
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:1:存在;0:不存在
*其他说明:
*************************************************************/
static int _kk_check_subDev_exist(const char* deviceCode) static int _kk_check_subDev_exist(const char* deviceCode)
{ {
int isExist = 0; int isExist = 0;
...@@ -182,10 +221,23 @@ static int _kk_check_subDev_exist(const char* deviceCode) ...@@ -182,10 +221,23 @@ static int _kk_check_subDev_exist(const char* deviceCode)
_kk_subDb_unlock(); _kk_subDb_unlock();
return isExist; return isExist;
} }
/************************************************************
*功能描述:保存设备信息到数据库
*输入参数:devType:设备类型
productCode:产品Id
deviceCode:设备deviceCode
fatherDeviceCode:上一级网关的deviceCode
mac: mac地址
version:版本号
heartbeat:心跳时间
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
char deviceCode[DEVICE_CODE_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char version[DEVICE_VERSION_MAXLEN],int heartbeat) char deviceCode[DEVICE_CODE_MAXLEN],char fatherDeviceCode[DEVICE_CODE_MAXLEN],char mac[DEVICE_MAC_MAXLEN],char version[DEVICE_VERSION_MAXLEN],int heartbeat)
{ {
...@@ -217,6 +269,14 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \ ...@@ -217,6 +269,14 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
_kk_subDb_unlock(); _kk_subDb_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:删除设备信息
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]) int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
{ {
const char *deleteCmd = "delete from SubDeviceInfo where deviceCode = '%s';"; const char *deleteCmd = "delete from SubDeviceInfo where deviceCode = '%s';";
...@@ -241,6 +301,15 @@ int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]) ...@@ -241,6 +301,15 @@ int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:更新是否在线信息
*输入参数:deviceCode:设备deviceCode
isOffline:1,离线;0,在线
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_offline(int isOffline,const char *deviceCode) int kk_subDev_update_offline(int isOffline,const char *deviceCode)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
...@@ -263,6 +332,16 @@ int kk_subDev_update_offline(int isOffline,const char *deviceCode) ...@@ -263,6 +332,16 @@ int kk_subDev_update_offline(int isOffline,const char *deviceCode)
//_kk_subDb_unlock(); //_kk_subDb_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:更新设备类型
*输入参数:deviceCode:设备deviceCode
productType:设备类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_productType(char *productType,const char *deviceCode) int kk_subDev_update_productType(char *productType,const char *deviceCode)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
...@@ -286,6 +365,14 @@ int kk_subDev_update_productType(char *productType,const char *deviceCode) ...@@ -286,6 +365,14 @@ int kk_subDev_update_productType(char *productType,const char *deviceCode)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:更新设备注册标记
*输入参数:deviceCode:设备deviceCode
isAuth:1,已注册;0,未注册
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_auth(int isAuth,const char *deviceCode) int kk_subDev_update_auth(int isAuth,const char *deviceCode)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
...@@ -309,6 +396,14 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode) ...@@ -309,6 +396,14 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:更新内场景支持,此接口只针对网关设备有效
*输入参数:deviceCode:设备deviceCode
sceneSupport:1,支持内场景;0,不支持
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode) int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
...@@ -332,6 +427,15 @@ int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode) ...@@ -332,6 +427,15 @@ int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************
*功能描述:主机重新上线后向云端上报属性
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_send_property_get_from_db(void) int kk_subDev_send_property_get_from_db(void)
{ {
const char *searchCmd = "select * from SubDeviceInfo;"; const char *searchCmd = "select * from SubDeviceInfo;";
...@@ -360,6 +464,13 @@ int kk_subDev_send_property_get_from_db(void) ...@@ -360,6 +464,13 @@ int kk_subDev_send_property_get_from_db(void)
} }
/************************************************************
*功能描述:主机断电重启后向网关获取所有子设备属性
*输入参数:fatherDeviceCode:网关deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_send_property_get(const char *fatherDeviceCode) int kk_subDev_send_property_get(const char *fatherDeviceCode)
{ {
...@@ -402,6 +513,14 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode) ...@@ -402,6 +513,14 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode)
} }
/************************************************************
*功能描述:检查网关是否支持内场景
*输入参数:deviceCode:网关deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_check_scene_support(const char *deviceCode) int kk_subDev_check_scene_support(const char *deviceCode)
{ {
int res = 0; int res = 0;
...@@ -431,6 +550,17 @@ int kk_subDev_check_scene_support(const char *deviceCode) ...@@ -431,6 +550,17 @@ int kk_subDev_check_scene_support(const char *deviceCode)
return res; return res;
} }
/************************************************************
*功能描述:向所有同类设备执行动作,场景设置中用到
*输入参数:productType:设备类型
sceneId:场景Id
propertyName:属性名
propertyValue:属性值
type:执行类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_set_action_by_productType(const char *productType,const char *sceneId,const char *propertyName,const char *propertyValue,const char *type) int kk_subDev_set_action_by_productType(const char *productType,const char *sceneId,const char *propertyName,const char *propertyValue,const char *type)
{ {
int res = 0; int res = 0;
...@@ -440,13 +570,11 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen ...@@ -440,13 +570,11 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx(); kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
const char *searchCmd = "select * from SubDeviceInfo WHERE productType= '%s'"; const char *searchCmd = "select * from SubDeviceInfo WHERE productType= '%s'";
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(productType == NULL){ if(productType == NULL){
ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__); ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__);
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
sqlCmd = sqlite3_mprintf(searchCmd,productType); sqlCmd = sqlite3_mprintf(searchCmd,productType);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL); sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
...@@ -457,7 +585,6 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen ...@@ -457,7 +585,6 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
continue; continue;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(kk_subDev_check_scene_support(node->fatherDeviceCode) == 1){ if(kk_subDev_check_scene_support(node->fatherDeviceCode) == 1){
kk_scene_action_detail_t info = {0}; kk_scene_action_detail_t info = {0};
memcpy(info.deviceCode,node->deviceCode,strlen(node->deviceCode)); memcpy(info.deviceCode,node->deviceCode,strlen(node->deviceCode));
......
...@@ -193,8 +193,9 @@ void *kk_scene_yield(void *args) ...@@ -193,8 +193,9 @@ void *kk_scene_yield(void *args)
while (1) { while (1) {
current_time = HAL_GetTime(); current_time = HAL_GetTime();
/****系统起来15s后开始定时处理****/ /****系统起来15s后开始定时处理****/
if((HAL_UptimeMs() - s_start_time) <= 15000){ if((HAL_Uptimes() - s_start_time) <= 15){
sleep(1); sleep(1);
INFO_PRINT("[%s][%d] HAL_Uptimes:%ld\n",__FUNCTION__,__LINE__,HAL_Uptimes());
continue; continue;
} }
...@@ -234,7 +235,7 @@ void *kk_scene_yield(void *args) ...@@ -234,7 +235,7 @@ void *kk_scene_yield(void *args)
INFO_PRINT("[%s][%d] current_time:%d\n",__FUNCTION__,__LINE__,current_time); INFO_PRINT("[%s][%d] current_time:%d\n",__FUNCTION__,__LINE__,current_time);
INFO_PRINT("[%s][%d] embedDelayInfo->starttime:%d\n",__FUNCTION__,__LINE__,embedDelayInfo->starttime); INFO_PRINT("[%s][%d] embedDelayInfo->starttime:%d\n",__FUNCTION__,__LINE__,embedDelayInfo->starttime);
if(current_time >= embedDelayInfo->starttime){ if(current_time >= embedDelayInfo->starttime){
kk_scene_execute_action(embedDelayInfo->executeSceneId); kk_scene_execute_action(embedDelayInfo->executeSceneId,NULL);
if(embedDelayInfo == p_delay_embed_list){ if(embedDelayInfo == p_delay_embed_list){
pTempEmbed = p_delay_embed_list; pTempEmbed = p_delay_embed_list;
p_delay_embed_list = p_delay_embed_list->next; p_delay_embed_list = p_delay_embed_list->next;
...@@ -264,11 +265,14 @@ void *kk_scene_yield(void *args) ...@@ -264,11 +265,14 @@ void *kk_scene_yield(void *args)
if(scene_timer_list->starttime != 0 && current_time >= scene_timer_list->starttime){ if(scene_timer_list->starttime != 0 && current_time >= scene_timer_list->starttime){
if(kk_scene_check_trigger_condition(scene_timer_list->sceneId) == 0){ if(kk_scene_check_trigger_condition(scene_timer_list->sceneId) == 0){
if(kk_scene_embed_find(scene_timer_list->sceneId) == 0){ if(kk_scene_embed_find(scene_timer_list->sceneId) == 0){
kk_scene_execute_action(scene_timer_list->sceneId); kk_scene_execute_action(scene_timer_list->sceneId,NULL);
} }
} }
kk_scene_update_starttime(scene_timer_list,current_time); kk_scene_update_starttime(scene_timer_list,current_time);
} }
if(scene_timer_list->starttime == 0){
kk_scene_remove_timer_info(scene_timer_list->sceneId,0);
}
scene_timer_list = scene_timer_list->next; scene_timer_list = scene_timer_list->next;
} }
_kk_scene_unlock(); _kk_scene_unlock();
...@@ -435,7 +439,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac ...@@ -435,7 +439,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
*************************************************************/ *************************************************************/
static void kk_scene_delete(char* sceneId,int isforword) static void kk_scene_delete(char* sceneId,int isforword)
{ {
kk_scene_remove_timer_info(sceneId); kk_scene_remove_timer_info(sceneId,1);
kk_scene_delete_scene_timing(sceneId); kk_scene_delete_scene_timing(sceneId);
kk_scene_delete_scene_embed(sceneId); kk_scene_delete_scene_embed(sceneId);
kk_scene_delete_scene_info(sceneId); kk_scene_delete_scene_info(sceneId);
...@@ -545,18 +549,17 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac ...@@ -545,18 +549,17 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
int kk_scene_muticontrol_info_send(cJSON* action,const char *gwdeviceCode,const char *sceneId) int kk_scene_muticontrol_info_send(cJSON* action,const char *gwdeviceCode,const char *sceneId,int isUpdate)
{ {
if(action == NULL || gwdeviceCode == NULL || sceneId == NULL){ if(action == NULL || gwdeviceCode == NULL || sceneId == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,sceneId); cJSON_AddStringToObject(root,MSG_SCENE_SCENEID,sceneId);
cJSON_AddStringToObject(root,MSG_SCENE_ACTIONS,action->valuestring); cJSON_AddItemToObject(root,MSG_SCENE_ACTIONS,action);
char *out=cJSON_Print(root); char *out=cJSON_Print(root);
printf("kk_scene_muticontrol_info_send:%s\n",out); printf("kk_scene_muticontrol_info_send:%s\n",out);
kk_msg_execute_scene_set(out,gwdeviceCode); kk_msg_execute_scene_set(out,gwdeviceCode,isUpdate);
cJSON_Delete(root);
free(out); free(out);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -678,15 +681,18 @@ static int kk_scene_parse_repeatday(cJSON *repeatday) ...@@ -678,15 +681,18 @@ static int kk_scene_parse_repeatday(cJSON *repeatday)
/************************************************************ /************************************************************
*功能描述:移除定时信息 *功能描述:移除定时信息
*输入参数:sceneId:对应场景Id; *输入参数:sceneId:对应场景Id;
lockflag: 1,需要加锁;0,不需要
*输出参数:无 *输出参数:无
*返 回 值: 无 *返 回 值: 无
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
void kk_scene_remove_timer_info(char *sceneId) void kk_scene_remove_timer_info(char *sceneId,int lockflag)
{ {
kk_scene_timer_list_t *ptr = NULL,*ptemp = NULL; kk_scene_timer_list_t *ptr = NULL,*ptemp = NULL;
if(lockflag){
_kk_scene_lock(); _kk_scene_lock();
}
ptemp = ptr = p_scene_timer_list; ptemp = ptr = p_scene_timer_list;
while(ptr){ while(ptr){
if(!strcmp(ptr->sceneId,sceneId)){ if(!strcmp(ptr->sceneId,sceneId)){
...@@ -707,7 +713,9 @@ void kk_scene_remove_timer_info(char *sceneId) ...@@ -707,7 +713,9 @@ void kk_scene_remove_timer_info(char *sceneId)
ptr = ptr->next; ptr = ptr->next;
} }
} }
if(lockflag){
_kk_scene_unlock(); _kk_scene_unlock();
}
} }
/************************************************************ /************************************************************
...@@ -897,15 +905,17 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat ...@@ -897,15 +905,17 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
*功能描述:解析多控 *功能描述:解析多控
*输入参数:sceneId:对应场景Id; *输入参数:sceneId:对应场景Id;
str:多控的CJSON字串 str:多控的CJSON字串
isUpdate:是否是编辑多控
*输出参数:无 *输出参数:无
*返 回 值: 0:成功;其他:失败 *返 回 值: 0:成功;其他:失败
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId) int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId,int isUpdate){
{
int res = 0; int res = 0;
cJSON *type = NULL;
cJSON *deviceCode = NULL;
dm_mgr_dev_node_t *node = NULL; dm_mgr_dev_node_t *node = NULL;
if(str == NULL){ if(str == NULL){
ERROR_PRINT("kk_scene_parse_scene_muticontrol failed\n"); ERROR_PRINT("kk_scene_parse_scene_muticontrol failed\n");
...@@ -916,10 +926,10 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId) ...@@ -916,10 +926,10 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId)
if(action == NULL) return FAIL_RETURN; if(action == NULL) return FAIL_RETURN;
cJSON * item = action->child; cJSON * item = action->child;
while(item != NULL){ while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE); type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
if(type == NULL) return FAIL_RETURN; if(type == NULL) return FAIL_RETURN;
if(!strcmp(type->valuestring,"action/thing/group")){ if(!strcmp(type->valuestring,"action/thing/group")){
cJSON *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR); deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return FAIL_RETURN; if(deviceCode == NULL) return FAIL_RETURN;
res = dm_mgr_get_device_by_devicecode(deviceCode->valuestring,&node); res = dm_mgr_get_device_by_devicecode(deviceCode->valuestring,&node);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
...@@ -931,7 +941,10 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId) ...@@ -931,7 +941,10 @@ int kk_scene_parse_scene_muticontrol(const cJSON* str,const char *sceneId)
item = item->next; item = item->next;
} }
kk_scene_muticontrol_info_send(action,node->fatherDeviceCode,sceneId); res = kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,0,
"","",0,sceneId,node->fatherDeviceCode);
kk_scene_muticontrol_info_send(action,node->fatherDeviceCode,sceneId,isUpdate);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -953,7 +966,6 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate) ...@@ -953,7 +966,6 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate)
ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__); ERROR_PRINT("[%d]kk_scene_parse_addscene fail!!!\n",__LINE__);
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
cJSON *name = cJSON_GetObjectItem(args,MSG_SCENE_NAME); cJSON *name = cJSON_GetObjectItem(args,MSG_SCENE_NAME);
if(name == NULL) return FAIL_RETURN; if(name == NULL) return FAIL_RETURN;
cJSON *sceneType = cJSON_GetObjectItem(args,MSG_SCENE_SCENCTYPE); cJSON *sceneType = cJSON_GetObjectItem(args,MSG_SCENE_SCENCTYPE);
...@@ -965,7 +977,7 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate) ...@@ -965,7 +977,7 @@ int kk_scene_parse_addscene(const cJSON* args,char *sceneId,int isUpdate)
} }
/*多控直接下发给网关处理*/ /*多控直接下发给网关处理*/
if(enable->valueint == 1 && sceneType->valueint == DB_SCENETYPE_MUTICONTROL){ if(enable->valueint == 1 && sceneType->valueint == DB_SCENETYPE_MUTICONTROL){
kk_scene_parse_scene_muticontrol(args,sceneId); kk_scene_parse_scene_muticontrol(args,sceneId,isUpdate);
} }
else{ else{
res = kk_scene_insert_scene_info(name->valuestring,sceneType->valueint,enable->valueint,sceneId); res = kk_scene_insert_scene_info(name->valuestring,sceneType->valueint,enable->valueint,sceneId);
...@@ -1161,7 +1173,7 @@ static time_t kk_scene_creat_timer_starttime(int week,int starttime,time_t curre ...@@ -1161,7 +1173,7 @@ static time_t kk_scene_creat_timer_starttime(int week,int starttime,time_t curre
curWeek = kk_scene_date_to_week(current); curWeek = kk_scene_date_to_week(current);
startNew = starttime + g_timezone*3600; startNew = starttime + g_timezone*3600;
startNew = (startNew - 86400) >= 0?(startNew - 86400) : startNew; startNew = (startNew - 86400) >= 0?(startNew - 86400) : startNew;
INFO_PRINT("kk_scene_creat_timer_starttime:%d\n",startNew); INFO_PRINT("kk_scene_creat_timer_starttime:%ld\n",startNew);
/*today is not repeat day*/ /*today is not repeat day*/
if((week > 0)&&(!(week &(1<<(curWeek-1))))) if((week > 0)&&(!(week &(1<<(curWeek-1)))))
...@@ -1588,7 +1600,7 @@ static int kk_scene_start_action(const char *deviceCode,const char *propertyName ...@@ -1588,7 +1600,7 @@ static int kk_scene_start_action(const char *deviceCode,const char *propertyName
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
int kk_scene_execute_action(const char* sceneId) int kk_scene_execute_action(const char* sceneId,char *msgId)
{ {
int res = FAIL_RETURN; int res = FAIL_RETURN;
char *deviceCode = NULL; char *deviceCode = NULL;
...@@ -1630,6 +1642,8 @@ next: ...@@ -1630,6 +1642,8 @@ next:
res = kk_scene_start_action(deviceCode,propertyName,propertyValue,delay); res = kk_scene_start_action(deviceCode,propertyName,propertyValue,delay);
} }
} }
kk_scene_execute_event_post(sceneId,msgId);
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
sqlite3_free(sqlCmd); sqlite3_free(sqlCmd);
return res; return res;
...@@ -1701,7 +1715,7 @@ static int kk_scene_embed_find(const char *sceneId) ...@@ -1701,7 +1715,7 @@ static int kk_scene_embed_find(const char *sceneId)
kk_scene_push_embed_list(delay,executeSceneId); kk_scene_push_embed_list(delay,executeSceneId);
} }
else{ else{
kk_scene_execute_action(executeSceneId); kk_scene_execute_action(executeSceneId,NULL);
} }
} }
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
...@@ -1755,7 +1769,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param) ...@@ -1755,7 +1769,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
/*check是否时场景嵌套类型*/ /*check是否时场景嵌套类型*/
if(kk_scene_embed_find(sceneId) == 0){ if(kk_scene_embed_find(sceneId) == 0){
res = kk_scene_execute_action(sceneId); res = kk_scene_execute_action(sceneId,NULL);
} }
} }
} }
...@@ -1790,7 +1804,7 @@ int kk_scene_iftt_check(const char*deviceCode,cJSON *param) ...@@ -1790,7 +1804,7 @@ int kk_scene_iftt_check(const char*deviceCode,cJSON *param)
*返 回 值:0:成功;其他:失败 *返 回 值:0:成功;其他:失败
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
int kk_scene_execute_scene(const char *sceneId) int kk_scene_execute_scene(const char *sceneId,const char *msgId)
{ {
int res = 0; int res = 0;
int sceneType = 0; int sceneType = 0;
...@@ -1803,12 +1817,34 @@ int kk_scene_execute_scene(const char *sceneId) ...@@ -1803,12 +1817,34 @@ int kk_scene_execute_scene(const char *sceneId)
res = kk_scene_check_condition(sceneId); res = kk_scene_check_condition(sceneId);
if(res == SUCCESS_RETURN){ if(res == SUCCESS_RETURN){
_kk_scene_lock(); _kk_scene_lock();
res = kk_scene_execute_action(sceneId); res = kk_scene_execute_action(sceneId,msgId);
_kk_scene_unlock(); _kk_scene_unlock();
} }
} }
INFO_PRINT("[%d]kk_scene_execute_scene called!!!\n",__LINE__); INFO_PRINT("[%d]kk_scene_execute_scene called!!!\n",__LINE__);
return res; return res;
} }
void kk_scene_execute_event_post(const char* sceneId,const char *msgId)
{
kk_tsl_t *pSceneShadow = NULL;
char msgIdbuf[64] = {0};
if(sceneId == NULL){
INFO_PRINT("kk_scene_execute_event_post:error\n");
return;
}
if(msgId == NULL){
sprintf(msgIdbuf,"%d",iotx_report_id());
}
else
{
memcpy(msgIdbuf,msgId,strlen(msgId));
}
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_EXECUTENOTIFICATION_SCENEID,NULL,sceneId);
dm_msg_scene_event_post(MSG_SCENE_EXECUTENOTIFICATION,pSceneShadow,msgIdbuf);
}
}
...@@ -45,289 +45,7 @@ ...@@ -45,289 +45,7 @@
"callType": "async", "callType": "async",
"desc": "属性获取", "desc": "属性获取",
"method": "thing.service.property.get", "method": "thing.service.property.get",
"inputData": ["LockState", "BackLockState", "Battery", "Volume", "Language"], "inputData": [],
"outputData": [{
"identifier": "LockState",
"name": "门锁状态",
"dataType": {
"type": "enum",
"specs": {
"0": "关闭",
"1": "打开"
}
}
}, {
"identifier": "BackLockState",
"name": "门锁状态",
"dataType": {
"type": "enum",
"specs": {
"0": "关闭",
"1": "打开"
}
}
}, {
"identifier": "Battery",
"name": "电池电量",
"dataType": {
"type": "int",
"specs": {
"min": "0",
"max": "100",
"unit": "%",
"unitName": "百分比",
"step": "1"
}
}
}, {
"identifier": "Volume",
"name": "门锁音量",
"dataType": {
"type": "enum",
"specs": {
"0": "静音",
"1": "低音",
"2": "中音",
"3": "高音"
}
}
}, {
"identifier": "Language",
"name": "门锁语言",
"dataType": {
"type": "enum",
"specs": {
"0": "中文",
"1": "英文"
}
}
}]
}, {
"identifier": "OpenLock",
"name": "远程开锁",
"required": false,
"callType": "async",
"method": "thing.service.OpenLock",
"inputData": [{
"identifier": "Password",
"name": "密码",
"dataType": {
"type": "text",
"specs": {
"length": "126"
}
}
}],
"outputData": []
}, {
"identifier": "GetKeyList",
"name": "获取钥匙列表",
"required": true,
"callType": "async",
"method": "thing.service.GetKeyList",
"inputData": [{
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"0": "全部",
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}],
"outputData": []
}, {
"identifier": "AddKey",
"name": "添加钥匙",
"required": true,
"callType": "async",
"method": "thing.service.AddKey",
"inputData": [{
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}, {
"identifier": "KeyRole",
"name": "用户权限",
"dataType": {
"type": "enum",
"specs": {
"1": "普通用户",
"2": "管理员",
"3": "劫持用户"
}
}
}, {
"identifier": "IsValid",
"name": "是否有效",
"dataType": {
"type": "bool",
"specs": {
"0": "无效",
"1": "有效"
}
}
}, {
"identifier": "KeyName",
"name": "钥匙昵称",
"dataType": {
"type": "text",
"specs": {
"length": "255"
}
}
}, {
"identifier": "KeyEffectiveTime",
"name": "生效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}, {
"identifier": "KeyExpiryTime",
"name": "失效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}],
"outputData": []
}, {
"identifier": "ModifyKey",
"name": "配置钥匙权限",
"required": false,
"callType": "async",
"method": "thing.service.ModifyKey",
"inputData": [{
"identifier": "KeyID",
"name": "钥匙ID",
"dataType": {
"type": "text",
"specs": {
"length": "10"
}
}
}, {
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}, {
"identifier": "KeyRole",
"name": "用户权限",
"dataType": {
"type": "enum",
"specs": {
"1": "普通用户",
"2": "管理员",
"3": "劫持用户"
}
}
}, {
"identifier": "IsValid",
"name": "是否有效",
"dataType": {
"type": "bool",
"specs": {
"0": "无效",
"1": "有效"
}
}
}, {
"identifier": "KeyName",
"name": "钥匙昵称",
"dataType": {
"type": "text",
"specs": {
"length": "255"
}
}
}, {
"identifier": "KeyEffectiveTime",
"name": "生效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}, {
"identifier": "KeyExpiryTime",
"name": "失效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}],
"outputData": []
}, {
"identifier": "DeleteKey",
"name": "删除钥匙",
"required": true,
"callType": "async",
"method": "thing.service.DeleteKey",
"inputData": [{
"identifier": "KeyID",
"name": "钥匙ID",
"dataType": {
"type": "text",
"specs": {
"length": "10"
}
}
}, {
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}, {
"identifier": "KeyRole",
"name": "用户权限",
"dataType": {
"type": "enum",
"specs": {
"1": "普通用户",
"2": "管理员",
"3": "劫持用户"
}
}
}],
"outputData": [] "outputData": []
}], }],
"properties": [{ "properties": [{
......
...@@ -45,289 +45,7 @@ ...@@ -45,289 +45,7 @@
"callType": "async", "callType": "async",
"desc": "属性获取", "desc": "属性获取",
"method": "thing.service.property.get", "method": "thing.service.property.get",
"inputData": ["LockState", "BackLockState", "Battery", "Volume", "Language"], "inputData": [],
"outputData": [{
"identifier": "LockState",
"name": "门锁状态",
"dataType": {
"type": "enum",
"specs": {
"0": "关闭",
"1": "打开"
}
}
}, {
"identifier": "BackLockState",
"name": "门锁状态",
"dataType": {
"type": "enum",
"specs": {
"0": "关闭",
"1": "打开"
}
}
}, {
"identifier": "Battery",
"name": "电池电量",
"dataType": {
"type": "int",
"specs": {
"min": "0",
"max": "100",
"unit": "%",
"unitName": "百分比",
"step": "1"
}
}
}, {
"identifier": "Volume",
"name": "门锁音量",
"dataType": {
"type": "enum",
"specs": {
"0": "静音",
"1": "低音",
"2": "中音",
"3": "高音"
}
}
}, {
"identifier": "Language",
"name": "门锁语言",
"dataType": {
"type": "enum",
"specs": {
"0": "中文",
"1": "英文"
}
}
}]
}, {
"identifier": "OpenLock",
"name": "远程开锁",
"required": false,
"callType": "async",
"method": "thing.service.OpenLock",
"inputData": [{
"identifier": "Password",
"name": "密码",
"dataType": {
"type": "text",
"specs": {
"length": "126"
}
}
}],
"outputData": []
}, {
"identifier": "GetKeyList",
"name": "获取钥匙列表",
"required": true,
"callType": "async",
"method": "thing.service.GetKeyList",
"inputData": [{
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"0": "全部",
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}],
"outputData": []
}, {
"identifier": "AddKey",
"name": "添加钥匙",
"required": true,
"callType": "async",
"method": "thing.service.AddKey",
"inputData": [{
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}, {
"identifier": "KeyRole",
"name": "用户权限",
"dataType": {
"type": "enum",
"specs": {
"1": "普通用户",
"2": "管理员",
"3": "劫持用户"
}
}
}, {
"identifier": "IsValid",
"name": "是否有效",
"dataType": {
"type": "bool",
"specs": {
"0": "无效",
"1": "有效"
}
}
}, {
"identifier": "KeyName",
"name": "钥匙昵称",
"dataType": {
"type": "text",
"specs": {
"length": "255"
}
}
}, {
"identifier": "KeyEffectiveTime",
"name": "生效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}, {
"identifier": "KeyExpiryTime",
"name": "失效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}],
"outputData": []
}, {
"identifier": "ModifyKey",
"name": "配置钥匙权限",
"required": false,
"callType": "async",
"method": "thing.service.ModifyKey",
"inputData": [{
"identifier": "KeyID",
"name": "钥匙ID",
"dataType": {
"type": "text",
"specs": {
"length": "10"
}
}
}, {
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}, {
"identifier": "KeyRole",
"name": "用户权限",
"dataType": {
"type": "enum",
"specs": {
"1": "普通用户",
"2": "管理员",
"3": "劫持用户"
}
}
}, {
"identifier": "IsValid",
"name": "是否有效",
"dataType": {
"type": "bool",
"specs": {
"0": "无效",
"1": "有效"
}
}
}, {
"identifier": "KeyName",
"name": "钥匙昵称",
"dataType": {
"type": "text",
"specs": {
"length": "255"
}
}
}, {
"identifier": "KeyEffectiveTime",
"name": "生效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}, {
"identifier": "KeyExpiryTime",
"name": "失效时间",
"dataType": {
"type": "int",
"specs": {
"min": "1577808001",
"max": "32472115201"
}
}
}],
"outputData": []
}, {
"identifier": "DeleteKey",
"name": "删除钥匙",
"required": true,
"callType": "async",
"method": "thing.service.DeleteKey",
"inputData": [{
"identifier": "KeyID",
"name": "钥匙ID",
"dataType": {
"type": "text",
"specs": {
"length": "10"
}
}
}, {
"identifier": "KeyType",
"name": "开锁方式",
"dataType": {
"type": "enum",
"specs": {
"1": "指纹",
"2": "密码",
"3": "卡",
"4": "机械钥匙"
}
}
}, {
"identifier": "KeyRole",
"name": "用户权限",
"dataType": {
"type": "enum",
"specs": {
"1": "普通用户",
"2": "管理员",
"3": "劫持用户"
}
}
}],
"outputData": [] "outputData": []
}], }],
"properties": [{ "properties": [{
......
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
} }
}], }],
"identifier": "gasAlarm", "identifier": "gasAlarm",
"method": "thing.event.alarm.post", "method": "thing.event.gasAlarm.post",
"name": "gasAlarm", "name": "gasAlarm",
"type": "alarm", "type": "alarm",
"required": true, "required": true,
...@@ -164,8 +164,8 @@ ...@@ -164,8 +164,8 @@
} }
}], }],
"identifier": "BatteryAlarm", "identifier": "BatteryAlarm",
"method": "thing.event.alarm.post", "method": "thing.event.BatteryAlarm.post",
"name": "batteryAlarm", "name": "BatteryAlarm",
"type": "alarm", "type": "alarm",
"required": true, "required": true,
"desc": "低电量告警" "desc": "低电量告警"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment