Commit b726b75b authored by chen.weican's avatar chen.weican

【修改内容】修改9531上定时场景不起作用的BUG

【提交人】陈伟灿
parent aa50f0d6
......@@ -334,6 +334,7 @@ static int _kk_topo_change_handle(cJSON *payload)
return RETURN_SUCCESS;
}
static char * _kk_data_create(const char *topic,const char *data)
{
cJSON *root;
......@@ -365,7 +366,9 @@ static char * _kk_data_create(const char *topic,const char *data)
if(strstr(topic,KK_TOPO_CHANGE_MSG_STR)){
_kk_topo_change_handle(payloadObj);
}
out=cJSON_Print(root);
out=cJSON_Print(root);
cJSON_Minify(out);
cJSON_Delete(root);
free(msgStr);
free(infoStr);
......
......@@ -111,7 +111,7 @@ uint64_t HAL_UptimeMs(void)
clock_gettime(CLOCK_MONOTONIC, &ts);
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;
}
time_t HAL_Uptimes(void)
......@@ -125,7 +125,7 @@ time_t HAL_Uptimes(void)
return time_m;
}
uint64_t HAL_GetTime(void)
time_t HAL_GetTime(void)
{
time_t t;
t = time(NULL);
......
......@@ -108,7 +108,7 @@ int kk_heartbeat_init(void)
/* Init Device Id*/
INIT_LIST_HEAD(&ctx->gw_status_list);
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);
if (res < 0) {
......
......@@ -782,24 +782,15 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
}
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 nums = 0;
int idx = 0;
char *payload = NULL;
dm_mgr_dev_node_t *node = NULL;
void *event = 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));
if(payload != NULL){
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
free(payload);
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);
method = NULL;
free(payload);
......
......@@ -224,7 +224,6 @@ int dm_queue_msg_insert(void *data)
}
_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) {
printf("dm queue list full");
_dm_queue_unlock();
......@@ -284,7 +283,6 @@ int dm_queue_msg_insert2(void *data)
}
_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) {
printf("dm queue list full");
_dm_queue_unlock2();
......@@ -345,9 +343,7 @@ int dm_queue_msg_insert3(void *data)
}
_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) {
printf("dm queue list full");
_dm_queue_unlock3();
return FAIL_RETURN;
}
......
......@@ -625,12 +625,12 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
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;
char sceneId[32] = {0};
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL || msgId == NULL){
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
......@@ -639,16 +639,16 @@ static int kk_service_addScene_handle(const char *deviceCode,cJSON *param,cJSON
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
kk_tsl_set_value(kk_tsl_set_event_output_value,pSceneShadow,MSG_SCENE_ADDNOTIFICATION_SCENEID,NULL,sceneId);
dm_msg_scene_event_post(deviceCode,MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId->valuestring);
dm_msg_scene_event_post(MSG_SCENE_ADDNOTIFICATION,pSceneShadow,msgId->valuestring);
}
}
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;
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL || msgId == NULL){
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
......@@ -658,19 +658,19 @@ static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param,cJS
pSceneShadow = kk_scene_shadow();
if(pSceneShadow != NULL){
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;
}
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;
kk_tsl_t *pSceneShadow = NULL;
char sceneIdBuf[16] = {0};
if(deviceCode == NULL || param == NULL || msgId == NULL){
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
......@@ -691,29 +691,23 @@ static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param,cJS
else{
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;
}
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;
kk_tsl_t *pSceneShadow = NULL;
if(deviceCode == NULL || param == NULL || msgId == NULL){
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
cJSON *sceneId = cJSON_GetObjectItem(param,MSG_SCENE_SCENEID);
if(sceneId == NULL) return FAIL_RETURN;
res = kk_scene_execute_scene(sceneId->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);
}
}
res = kk_scene_execute_scene(sceneId->valuestring,msgId->valuestring);
return res;
}
......@@ -895,25 +889,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT(" add scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
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){
INFO_PRINT(" update scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
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){
INFO_PRINT("delete scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
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){
INFO_PRINT("execute scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
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){
INFO_PRINT("negative service \n");
......
/************************************************************
*版权所有 (C)2020,公司(或个人)名称
*
*文件名称: kk_sub_db.c
*内容摘要: 网关设备和子设备设备表处理模块
*其他说明:
*当前版本:
*************************************************************/
#include <stdio.h>
#include "kk_tsl_api.h"
......@@ -50,6 +58,14 @@ static void _kk_subDb_unlock(void)
}
}
/************************************************************
*功能描述:设备表的初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_subDev_db_Init(void)
{
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
......@@ -65,7 +81,7 @@ static int kk_subDev_db_Init(void)
idx INTEGER, \
isOffline INTEGER, \
productCode varchar(33), \
deviceCode varchar(33), \
deviceCode varchar(33) UNIQUE, \
mac varchar(17), \
fatherDeviceCode varchar(33), \
version varchar(33), \
......@@ -94,6 +110,13 @@ static int kk_subDev_db_Init(void)
_kk_subDb_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:开机从设备数据库导出数据到内存
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static int _kk_load_subDevice(void)
{
const char *searchCmd = "select * from SubDeviceInfo;";
......@@ -140,6 +163,14 @@ static int _kk_load_subDevice(void)
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:设备数据模块初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDb_init(void)
{
int res = 0;
......@@ -159,6 +190,14 @@ int kk_subDb_init(void)
_kk_load_subDevice();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:检查设备是否有重复
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:1:存在;0:不存在
*其他说明:
*************************************************************/
static int _kk_check_subDev_exist(const char* deviceCode)
{
int isExist = 0;
......@@ -182,10 +221,23 @@ static int _kk_check_subDev_exist(const char* deviceCode)
_kk_subDb_unlock();
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], \
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], \
_kk_subDb_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:删除设备信息
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
{
const char *deleteCmd = "delete from SubDeviceInfo where deviceCode = '%s';";
......@@ -241,6 +301,15 @@ int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:更新是否在线信息
*输入参数:deviceCode:设备deviceCode
isOffline:1,离线;0,在线
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_offline(int isOffline,const char *deviceCode)
{
char *sqlCmd = NULL;
......@@ -263,6 +332,16 @@ int kk_subDev_update_offline(int isOffline,const char *deviceCode)
//_kk_subDb_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:更新设备类型
*输入参数:deviceCode:设备deviceCode
productType:设备类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_productType(char *productType,const char *deviceCode)
{
char *sqlCmd = NULL;
......@@ -286,6 +365,14 @@ int kk_subDev_update_productType(char *productType,const char *deviceCode)
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:更新设备注册标记
*输入参数:deviceCode:设备deviceCode
isAuth:1,已注册;0,未注册
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_auth(int isAuth,const char *deviceCode)
{
char *sqlCmd = NULL;
......@@ -309,6 +396,14 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:更新内场景支持,此接口只针对网关设备有效
*输入参数:deviceCode:设备deviceCode
sceneSupport:1,支持内场景;0,不支持
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode)
{
char *sqlCmd = NULL;
......@@ -332,6 +427,15 @@ int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode)
return SUCCESS_RETURN;
}
/************************************************************
*功能描述:主机重新上线后向云端上报属性
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_subDev_send_property_get_from_db(void)
{
const char *searchCmd = "select * from SubDeviceInfo;";
......@@ -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)
{
......@@ -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 res = 0;
......@@ -431,6 +550,17 @@ int kk_subDev_check_scene_support(const char *deviceCode)
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 res = 0;
......@@ -440,13 +570,11 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
dm_mgr_dev_node_t *node = NULL;
kk_subDb_ctx_t *ctx = _kk_subDb_get_ctx();
const char *searchCmd = "select * from SubDeviceInfo WHERE productType= '%s'";
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(productType == NULL){
ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__);
return INVALID_PARAMETER;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
sqlCmd = sqlite3_mprintf(searchCmd,productType);
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
if (res != SUCCESS_RETURN) {
continue;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(kk_subDev_check_scene_support(node->fatherDeviceCode) == 1){
kk_scene_action_detail_t info = {0};
memcpy(info.deviceCode,node->deviceCode,strlen(node->deviceCode));
......
......@@ -193,8 +193,9 @@ void *kk_scene_yield(void *args)
while (1) {
current_time = HAL_GetTime();
/****系统起来15s后开始定时处理****/
if((HAL_UptimeMs() - s_start_time) <= 15000){
if((HAL_Uptimes() - s_start_time) <= 15){
sleep(1);
INFO_PRINT("[%s][%d] HAL_Uptimes:%ld\n",__FUNCTION__,__LINE__,HAL_Uptimes());
continue;
}
......@@ -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] embedDelayInfo->starttime:%d\n",__FUNCTION__,__LINE__,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){
pTempEmbed = p_delay_embed_list;
p_delay_embed_list = p_delay_embed_list->next;
......@@ -264,11 +265,14 @@ void *kk_scene_yield(void *args)
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_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);
}
if(scene_timer_list->starttime == 0){
kk_scene_remove_timer_info(scene_timer_list->sceneId,0);
}
scene_timer_list = scene_timer_list->next;
}
_kk_scene_unlock();
......@@ -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)
{
kk_scene_remove_timer_info(sceneId);
kk_scene_remove_timer_info(sceneId,1);
kk_scene_delete_scene_timing(sceneId);
kk_scene_delete_scene_embed(sceneId);
kk_scene_delete_scene_info(sceneId);
......@@ -678,15 +682,18 @@ static int kk_scene_parse_repeatday(cJSON *repeatday)
/************************************************************
*功能描述:移除定时信息
*输入参数: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;
if(lockflag){
_kk_scene_lock();
}
ptemp = ptr = p_scene_timer_list;
while(ptr){
if(!strcmp(ptr->sceneId,sceneId)){
......@@ -707,7 +714,9 @@ void kk_scene_remove_timer_info(char *sceneId)
ptr = ptr->next;
}
}
if(lockflag){
_kk_scene_unlock();
}
}
/************************************************************
......@@ -1161,7 +1170,7 @@ static time_t kk_scene_creat_timer_starttime(int week,int starttime,time_t curre
curWeek = kk_scene_date_to_week(current);
startNew = starttime + g_timezone*3600;
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*/
if((week > 0)&&(!(week &(1<<(curWeek-1)))))
......@@ -1588,7 +1597,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;
char *deviceCode = NULL;
......@@ -1630,6 +1639,8 @@ next:
res = kk_scene_start_action(deviceCode,propertyName,propertyValue,delay);
}
}
kk_scene_execute_event_post(sceneId,msgId);
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return res;
......@@ -1701,7 +1712,7 @@ static int kk_scene_embed_find(const char *sceneId)
kk_scene_push_embed_list(delay,executeSceneId);
}
else{
kk_scene_execute_action(executeSceneId);
kk_scene_execute_action(executeSceneId,NULL);
}
}
sqlite3_finalize(stmt);
......@@ -1755,7 +1766,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
if(res == SUCCESS_RETURN){
/*check是否时场景嵌套类型*/
if(kk_scene_embed_find(sceneId) == 0){
res = kk_scene_execute_action(sceneId);
res = kk_scene_execute_action(sceneId,NULL);
}
}
}
......@@ -1790,7 +1801,7 @@ int kk_scene_iftt_check(const char*deviceCode,cJSON *param)
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_execute_scene(const char *sceneId)
int kk_scene_execute_scene(const char *sceneId,const char *msgId)
{
int res = 0;
int sceneType = 0;
......@@ -1803,12 +1814,34 @@ int kk_scene_execute_scene(const char *sceneId)
res = kk_scene_check_condition(sceneId);
if(res == SUCCESS_RETURN){
_kk_scene_lock();
res = kk_scene_execute_action(sceneId);
res = kk_scene_execute_action(sceneId,msgId);
_kk_scene_unlock();
}
}
INFO_PRINT("[%d]kk_scene_execute_scene called!!!\n",__LINE__);
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);
}
}
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