Commit 6e9cbe48 authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

Cwc

See merge request chenweican/k-sdk!110
parents ef9e834f 45fce4b7
...@@ -116,6 +116,17 @@ void kk_handle_sync_info(void) ...@@ -116,6 +116,17 @@ void kk_handle_sync_info(void)
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1); kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
free(send_data); free(send_data);
} }
void kk_handle_get_history_info(void)
{
char *send_data = NULL;
send_data = _kk_data_create(GET_HISTORY_MSG_TYPE,"*","*","*");
if(send_data == NULL){
return;
}
printf("kk_ipc_send........%s \n",send_data);
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
free(send_data);
}
static int kk_send_ack(cJSON *root,int sockfd) static int kk_send_ack(cJSON *root,int sockfd)
{ {
char *out = NULL; char *out = NULL;
...@@ -190,7 +201,7 @@ static int kk_loginccu_ack(cJSON *arg,int sockfd) ...@@ -190,7 +201,7 @@ static int kk_loginccu_ack(cJSON *arg,int sockfd)
} }
//构建hw信息 //构建hw信息
static cJSON *kk_zb_dev_hw_info_build(const char *deviceCode,cJSON * productCode,cJSON * online,const char *hw_ver,const char *sw_ver) static cJSON *kk_zb_dev_hw_info_build(const char *deviceCode,cJSON * productCode,int online,const char *hw_ver,const char *sw_ver)
{ {
cJSON *item; cJSON *item;
char mac[32] = {0}; char mac[32] = {0};
...@@ -264,7 +275,7 @@ int kk_zb_devs_hw_ack_all(int sockfd) ...@@ -264,7 +275,7 @@ int kk_zb_devs_hw_ack_all(int sockfd)
return -1; return -1;
} }
int kk_zb_dev_hw_info_build_by_deviceCode(int sockfd,const char *deviceCode) cJSON * kk_zb_dev_hw_info_build_by_deviceCode(int sockfd,const char *deviceCode,int online)//
{ {
kk_map_dev_ctx *ctx = _kk_map_dev_ctx(); kk_map_dev_ctx *ctx = _kk_map_dev_ctx();
kk_map_dev_node_t *search_node = NULL; kk_map_dev_node_t *search_node = NULL;
...@@ -276,9 +287,12 @@ int kk_zb_dev_hw_info_build_by_deviceCode(int sockfd,const char *deviceCode) ...@@ -276,9 +287,12 @@ int kk_zb_dev_hw_info_build_by_deviceCode(int sockfd,const char *deviceCode)
list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_map_dev_node_t) { list_for_each_entry(search_node, &ctx->dev_list, linked_list, kk_map_dev_node_t) {
if ( (strlen(search_node->deviceCode) == strlen(deviceCode)) && if ( (strlen(search_node->deviceCode) == strlen(deviceCode)) &&
(memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) { (memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) {
if(online == -1){
item = kk_zb_dev_hw_info_build(search_node->deviceCode,search_node->productCode,search_node->online_status,NULL,NULL); item = kk_zb_dev_hw_info_build(search_node->deviceCode,search_node->productCode,search_node->online_status,NULL,NULL);
}else{
item = kk_zb_dev_hw_info_build(search_node->deviceCode,search_node->productCode,online,NULL,NULL);
}
_kk_map_dev_mutex_unlock();
return item; return item;
} }
} }
...@@ -297,43 +311,40 @@ static void kk_zb_devs_hw_ack(int sockfd,cJSON *conditions) ...@@ -297,43 +311,40 @@ static void kk_zb_devs_hw_ack(int sockfd,cJSON *conditions)
type = cJSON_GetObjectItem(conditions,"condition_type"); type = cJSON_GetObjectItem(conditions,"condition_type");
if(type==NULL){ if(type==NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_zb_devs_hw_ack_all(sockfd); kk_zb_devs_hw_ack_all(sockfd);
}else{ }else{
if(strcmp(type->valuestring,"dev_list")){ if(strcmp(type->valuestring,"dev_list")){
WARNING_PRINT("[type err]%s,%s\n",type->valuestring,"dev_list"); WARNING_PRINT("[type err]%s,%s\n",type->valuestring,"dev_list");
return ; return ;
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
arg = cJSON_GetObjectItem(conditions,"condition_arg"); arg = cJSON_GetObjectItem(conditions,"condition_arg");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
size = cJSON_GetArraySize(arg); size = cJSON_GetArraySize(arg);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON *qMac; cJSON *qMac;
cJSON *item; cJSON *item;
cJSON *array = cJSON_CreateArray(); cJSON *array = cJSON_CreateArray();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
for(i=0;i<size;i++){ for(i=0;i<size;i++){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
qMac=cJSON_GetArrayItem(arg,1); qMac=cJSON_GetArrayItem(arg,1);
if(mac_switchto_deviceCode(qMac->valuestring,devCode)==0){ if(mac_switchto_deviceCode(qMac->valuestring,devCode)==0){
if((item=kk_zb_dev_hw_info_build_by_deviceCode(sockfd,devCode))!=NULL){ if((item=kk_zb_dev_hw_info_build_by_deviceCode(sockfd,devCode,-1))!=NULL){
cJSON_AddItemToArray(array,item); cJSON_AddItemToArray(array,item);
} }
} }
} }
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
_kk_zb_devs_hw_ack(sockfd,array); _kk_zb_devs_hw_ack(sockfd,array);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
} }
return ;
return 0;
} }
static void kk_handle_del_history_info(char *key)
{
char *send_data = NULL;
send_data = _kk_data_create(DEL_HISTORY_MSG_TYPE,"*","*",key);
if(send_data == NULL){
return;
}
kk_ipc_send(IPC_APP2MID, send_data, strlen(send_data)+1);
free(send_data);
}
int kk_data_handle(cJSON *json,int sockfd) int kk_data_handle(cJSON *json,int sockfd)
{ {
...@@ -350,8 +361,14 @@ int kk_data_handle(cJSON *json,int sockfd) ...@@ -350,8 +361,14 @@ int kk_data_handle(cJSON *json,int sockfd)
kk_handle_sync_info(); kk_handle_sync_info();
}else if(strcmp(opcode->valuestring,GET_ZB_DEVS_HW_INFO_OPCODE) == 0){ }else if(strcmp(opcode->valuestring,GET_ZB_DEVS_HW_INFO_OPCODE) == 0){
cJSON *conditions = cJSON_GetObjectItem(json, OPCODE_STRING); cJSON *conditions = cJSON_GetObjectItem(json, OPCODE_STRING);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_zb_devs_hw_ack(sockfd,conditions); kk_zb_devs_hw_ack(sockfd,conditions);
}else if(strcmp(opcode->valuestring,GET_HISTORY_ALARM_LOG) == 0){
kk_handle_get_history_info();
}else if(strcmp(opcode->valuestring,DEL_HISTORY_ALARM_LOG) == 0){
cJSON *key = cJSON_GetObjectItem(json, "arg");
if(key != NULL){
kk_handle_del_history_info(key->valuestring);
}
}else{ }else{
kk_ccu_opcode_handle(json); kk_ccu_opcode_handle(json);
...@@ -428,10 +445,12 @@ static int kk_parse_syncinfo(cJSON *payload) ...@@ -428,10 +445,12 @@ static int kk_parse_syncinfo(cJSON *payload)
int is_ccu_msg(cJSON *productCode,cJSON *deviceCode) int is_ccu_msg(cJSON *productCode,cJSON *deviceCode)
{ {
char ccuid[33] = {0};
kk_lan_get_ccuid(ccuid);
if((strlen(productCode->valuestring)==strlen(KK_CCU_PRODUCTID) && if((strlen(productCode->valuestring)==strlen(KK_CCU_PRODUCTID) &&
!strcmp(productCode->valuestring,KK_CCU_PRODUCTID)) && !strcmp(productCode->valuestring,KK_CCU_PRODUCTID)) &&
(strlen(deviceCode->valuestring)==strlen(KK_CCU_ID) && (strlen(deviceCode->valuestring)==strlen(ccuid) &&
!strcmp(deviceCode->valuestring,KK_CCU_ID))){ !strcmp(deviceCode->valuestring,ccuid))){
return 1; return 1;
} }
return 0; return 0;
...@@ -453,8 +472,215 @@ int is_arming_status_notify(cJSON *payload) ...@@ -453,8 +472,215 @@ int is_arming_status_notify(cJSON *payload)
return -1; return -1;
} }
extern int vp_syncinfo(cJSON *payload); static int kk_device_onoffline_handle(cJSON *payload,int online)
{
if(payload == NULL){
return -1;
}
cJSON *params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params == NULL) return -1;
cJSON *deviceCode = cJSON_GetObjectItem(params, "deviceCode");
if(deviceCode == NULL) return -1;
cJSON *hw_info = kk_zb_dev_hw_info_build_by_deviceCode(0,deviceCode->valuestring,online);
cJSON *root;
cJSON *array = cJSON_CreateArray();
cJSON_AddItemToArray(array,hw_info);
root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "nodeid", "*");
cJSON_AddStringToObject(root, "opcode", ZIGBEE_DEV_HW_INFO_PUSH);
cJSON_AddStringToObject(root, "status", "success");
cJSON_AddItemToObject(root, "arg", array);
send_msg_to_module(root);
cJSON_Delete(root);
return 0;
}
static int kk_del_historyalarm_handle(cJSON *payload)
{
if(payload == NULL){
return -1;
}
cJSON *key = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(key == NULL) return -1;
cJSON *root;
root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "nodeid", "*");
cJSON_AddStringToObject(root, "opcode", DEL_HISTORY_ALARM_LOG);
cJSON_AddStringToObject(root, "status", "success");
cJSON_AddStringToObject(root, "arg", key->valuestring);
send_msg_to_module(root);
cJSON_Delete(root);
return 0;
}
typedef struct{
char *productId;
char *msg;
}alarmcontext_map_s;
static alarmcontext_map_s alarmContext[] = {
{"3049","检测到有人 告警时间戳"},
{"WINDOW","actuator"},
{"LIGHT","switch"},
{"LIGHT_STRIP","colorDimmableLight"},
{"LIGHT_DIMMER","lightPanel"},
{"SOCKET","outlet"},
{"AC_IndoorUnit","air"},
{"FLOOR_HEATING","floorHeating"},
{"FRESH_AIR","airConditioning"},
{"AIR_SWITCH","airSwitch"},
};
static alarmcontext_map_s lowbatteryContext[] = {
{"3049","人体感应设备电量低 告警时间戳"},
{"WINDOW","actuator"},
{"LIGHT","switch"},
{"LIGHT_STRIP","colorDimmableLight"},
{"LIGHT_DIMMER","lightPanel"},
{"SOCKET","outlet"},
{"AC_IndoorUnit","air"},
{"FLOOR_HEATING","floorHeating"},
{"FRESH_AIR","airConditioning"},
{"AIR_SWITCH","airSwitch"},
};
int kk_get_alarmcontext_type_table_size(void)
{
return sizeof(alarmContext)/sizeof(alarmcontext_map_s);
}
int kk_get_lowbattery_table_size(void)
{
return sizeof(lowbatteryContext)/sizeof(alarmcontext_map_s);
}
static cJSON * kk_device_alarm_build(char *key,char *context,char *deviceCode)
{
int nodeId = 0;
cJSON *arg = cJSON_CreateObject();
cJSON_AddStringToObject(arg, "alarm_key", key);
cJSON_AddStringToObject(arg, "alarm_msg", context);
cJSON_AddStringToObject(arg, "alarm_nodeid", "");
nodeId = kk_lan_db_node_get(deviceCode,1);
cJSON *root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "nodeid", "*");
cJSON_AddStringToObject(root, "opcode", "ALARM_NOTIFY");
cJSON_AddStringToObject(root, "status", "success");
cJSON_AddItemToObject(root, "arg", arg);
return root;
}
static int kk_device_alarm_handle(cJSON *payload,char * productid,char *deviceCode,char *key)
{
int size = 0,k = 0;
cJSON *root = NULL;
cJSON *params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params == NULL) return -1;
cJSON *CommonAlarmState = cJSON_GetObjectItem(params, "CommonAlarmState");
if(CommonAlarmState != NULL){
size = kk_get_alarmcontext_type_table_size();
for(k = 0; k < size; k++){
//printf("---------------------------->producTypeMap[k].type:%s\n",producTypeMap[k].type);
if(!strcmp(productid,alarmContext[k].productId)){
printf("------------------------------>/thing/event/alarmNotify 111\n");
root = kk_device_alarm_build(key,alarmContext[k].msg,deviceCode);
send_msg_to_module(root);
cJSON_Delete(root);
return 0;
}
}
}else{
cJSON *LowBatteryState = cJSON_GetObjectItem(params, "LowBatteryState");
if(LowBatteryState != NULL){
size = kk_get_lowbattery_table_size();
for(k = 0; k < size; k++){
//printf("---------------------------->producTypeMap[k].type:%s\n",producTypeMap[k].type);
if(!strcmp(productid,lowbatteryContext[k].productId)){
root = kk_device_alarm_build(key,lowbatteryContext[k].msg,deviceCode);
send_msg_to_module(root);
cJSON_Delete(root);
return 0;
}
}
}
}
return -1;
}
static int _timer_conver(char *buffer,time_t itime)
{
struct tm *info;
info = localtime(&itime );
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
printf("格式化的日期 & 时间 : |%s|\n", buffer );
return(0);
}
static int kk_device_historyalarm_handle(cJSON *payload)
{
int size = 0,k = 0;
cJSON *root = NULL;
char timerStr[16] = {0};
char timerBuf[80] = {0};
cJSON *params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params == NULL || params->type != cJSON_Array){
ERROR_PRINT("DATA ERROR!!!");
return -1;
}
cJSON * contentObj = cJSON_CreateArray();
cJSON *client_list = params->child;
while( client_list != NULL ){
memset(timerStr,0x0,sizeof(timerStr));
memset(timerBuf,0x0,sizeof(timerBuf));;
cJSON *infoItem = cJSON_CreateObject();
cJSON *identifier = cJSON_GetObjectItem(client_list ,"identifier");
if(identifier == NULL){
return -1;
}
cJSON *productCodeJ = cJSON_GetObjectItem(client_list ,"productCode");
if(productCodeJ == NULL){
printf("----------------->6\n");
return -1;
}
cJSON * itime = cJSON_GetObjectItem(client_list ,"alarm_time");
if(itime == NULL){
printf("----------------->1212\n");
return -1;
}
sprintf(timerStr,"%d",itime->valueint);
_timer_conver(timerBuf,itime->valuedouble);
cJSON_AddStringToObject(infoItem, "alarm_key", timerStr);
cJSON_AddStringToObject(infoItem, "alarm_read", "0");
cJSON_AddStringToObject(infoItem, "alarm_active_time", timerBuf);
if(strcmp(identifier->valuestring,"BatteryAlarm") == 0){
size = kk_get_lowbattery_table_size();
for(k = 0; k < size; k++){
//printf("---------------------------->producTypeMap[k].type:%s\n",producTypeMap[k].type);
if(!strcmp(productCodeJ->valuestring,lowbatteryContext[k].productId)){
cJSON_AddStringToObject(infoItem, "alarm_msg", lowbatteryContext[k].msg);
break;
}
}
}else{
size = kk_get_alarmcontext_type_table_size();
for(k = 0; k < size; k++){
//printf("---------------------------->producTypeMap[k].type:%s\n",producTypeMap[k].type);
if(!strcmp(productCodeJ->valuestring,alarmContext[k].productId)){
cJSON_AddStringToObject(infoItem, "alarm_msg", alarmContext[k].msg);
break;
}
}
}
cJSON_AddItemToArray(contentObj, infoItem);
client_list = client_list->next ;
}
cJSON *arg = cJSON_CreateObject();
cJSON_AddItemToObject(arg, "content", contentObj);
cJSON_AddStringToObject(arg, "total_pages", "1");
cJSON_AddStringToObject(arg, "total_elements", "3");
cJSON_AddStringToObject(arg, "current_page", "1");
cJSON_AddNumberToObject(arg, "page_size", 10);
root = cJSON_CreateObject();
cJSON_AddItemToObject(root, "arg", arg);
cJSON_AddStringToObject(root, "status", "success");
cJSON_AddStringToObject(root, "nodeid", "*");
cJSON_AddStringToObject(root, "opcode", "GET_HISTORY_ALARM_LOG");
send_msg_to_module(root);
cJSON_Delete(root);
return 0;
}
void KK_Data_FromMid(void* str,int len) void KK_Data_FromMid(void* str,int len)
{ {
cJSON *json; cJSON *json;
...@@ -506,7 +732,20 @@ void KK_Data_FromMid(void* str,int len) ...@@ -506,7 +732,20 @@ void KK_Data_FromMid(void* str,int len)
}else if(strstr(msgtype->valuestring,"/thing/topo/delete")!= NULL){ }else if(strstr(msgtype->valuestring,"/thing/topo/delete")!= NULL){
device_delete_sync(payload); device_delete_sync(payload);
}else if(strstr(msgtype->valuestring,"/thing/status/online")!= NULL){ }else if(strstr(msgtype->valuestring,"/thing/status/online")!= NULL){
kk_device_onoffline_handle(payload,1);
}else if(strstr(msgtype->valuestring,"/thing/status/offline")!= NULL){
kk_device_onoffline_handle(payload,0);
}else if(strstr(msgtype->valuestring,"/thing/service/addDeviceToRoom_reply")!= NULL){
sleep(3);
device_add_sync(payload); device_add_sync(payload);
}else if(strstr(msgtype->valuestring,"/thing/event/alarmNotify")!= NULL){
cJSON * msgId = cJSON_GetObjectItem(payload, "msgId");
kk_device_alarm_handle(payload,productCode->valuestring,deviceCode->valuestring,msgId->valuestring);
}else if(strstr(msgtype->valuestring,"/thing/service/historyAlarm_reply")!= NULL){
printf("----------------->1\n");
kk_device_historyalarm_handle(payload);
}else if(strstr(msgtype->valuestring,"/thing/service/delAlarm_reply")!= NULL){
kk_del_historyalarm_handle(payload);
} }
cJSON_Delete(json); cJSON_Delete(json);
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "sqlite3.h" #include "sqlite3.h"
#define KK_LAN_NODE_DB_FILE "./kk_lan_node.db" #define KK_LAN_NODE_DB_FILE "/data/kk/kk_lan_node.db"
typedef struct { typedef struct {
void *mutex; void *mutex;
......
...@@ -64,12 +64,9 @@ static int _kk_handle_data(char *buf,int sockfd){ ...@@ -64,12 +64,9 @@ static int _kk_handle_data(char *buf,int sockfd){
if (!json) { if (!json) {
WARNING_PRINT("Error before: [%s]\n","cJSON_Parse"); WARNING_PRINT("Error before: [%s]\n","cJSON_Parse");
}else{ }else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_data_handle(json,sockfd); kk_data_handle(json,sockfd);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_Delete(json); cJSON_Delete(json);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
} }
} }
...@@ -78,54 +75,6 @@ static void PrintMesg(int i , char buf[]) ...@@ -78,54 +75,6 @@ static void PrintMesg(int i , char buf[])
printf("fd : %d, msg: %s\n", i , buf); printf("fd : %d, msg: %s\n", i , buf);
} }
void *TCP_Analyzer(void *pPara)
{
char Buf[BUF_SIZE] = {0};
ssize_t Size = 0;
int index = 0;
unsigned char *pReceiveData = NULL;
int ReceiveLen = 0;
if (NULL == pPara)
{
ERROR_PRINT("TCP_Analyzer: TCP_Analyzer Failed!\n");
return NULL;
}
index = *(int *)pPara;
printf("index:%d\n",*(int *)pPara);
if(index < 0 || index >= LISTEN_MAX)
{
ERROR_PRINT("TCP_Analyzer:Get pConnfd Failed \n" );
return NULL;
}
while(1)
{
memset(Buf, '\0', sizeof(Buf));
Size = read(s_ConnInfo[index].socketfd, Buf,sizeof(Buf) );
if (Size <= 0) //没有接收到数据,关闭描述符,释放在TCPServer申请的空间
{
printf("Size=%d,errno=%d",Size,errno);
ERROR_PRINT("TCP_Analyzer:remote client close:%d\n",s_ConnInfo[index].socketfd );
pthread_mutex_lock(&data_mutex);
close(s_ConnInfo[index].socketfd);
s_ConnInfo[index].socketfd = -1;
memset(s_ConnInfo[index].ip,0x0,sizeof(s_ConnInfo[index].ip));
pthread_mutex_unlock(&data_mutex);
return NULL;
}
else
{
DEBUG_PRINT("TCP_Analyzer:%s,%d\n",Buf,(int)Size);
_kk_handle_data(Buf,s_ConnInfo[index].socketfd);
printf("[%s][%d] TCP_Analyzer end.\n",__FUNCTION__,__LINE__);
}
}
return NULL;
}
static int kk_check_is_connect(char *ip){ static int kk_check_is_connect(char *ip){
int i = 0; int i = 0;
if(ip == NULL){ if(ip == NULL){
...@@ -133,6 +82,9 @@ static int kk_check_is_connect(char *ip){ ...@@ -133,6 +82,9 @@ static int kk_check_is_connect(char *ip){
} }
for(i = 0; i < LISTEN_MAX; i ++){ for(i = 0; i < LISTEN_MAX; i ++){
if(s_ConnInfo[i].socketfd != -1 && strcmp(s_ConnInfo[i].ip,ip) == 0){ if(s_ConnInfo[i].socketfd != -1 && strcmp(s_ConnInfo[i].ip,ip) == 0){
close(s_ConnInfo[i].socketfd);
s_ConnInfo[i].socketfd = -1;
memset(s_ConnInfo[i].ip,0x0,sizeof(s_ConnInfo[i].ip));
return 1; return 1;
} }
} }
...@@ -140,29 +92,26 @@ static int kk_check_is_connect(char *ip){ ...@@ -140,29 +92,26 @@ static int kk_check_is_connect(char *ip){
} }
void *TCPServer() void *TCPServer()
{ {
pthread_t threadID = 0;
struct sockaddr_in Server; struct sockaddr_in Server;
struct sockaddr_in Client; struct sockaddr_in Client;
int Listenfd = 0; int Listenfd = -1;
int client_fd = -1;
int i = 0; int i = 0;
int j = 0; int j = 0;
int yes = 1; int yes = 1;
int index = 0; int index = 0;
int Connfd = 0;
int ret = 0; int ret = 0;
char clientIp[18] = {0}; char clientIp[18] = {0};
int max_fd = 0;
socklen_t len = 0; socklen_t len = 0;
fd_set server_fd_set;
//char logMessage[128] = {0}; struct timeval time_out;
pthread_attr_t attr; char Buf[BUF_SIZE] = {0};
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
Listenfd = socket(AF_INET, SOCK_STREAM, 0); Listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (Listenfd < 0) if (Listenfd < 0)
{ {
perror("socket"); perror("socket");
pthread_attr_destroy(&attr);//线程属性销毁
return NULL; return NULL;
} }
DEBUG_PRINT("TCPServer:create socket success\n"); DEBUG_PRINT("TCPServer:create socket success\n");
...@@ -176,7 +125,6 @@ void *TCPServer() ...@@ -176,7 +125,6 @@ void *TCPServer()
{ {
perror("bind"); perror("bind");
close(Listenfd); close(Listenfd);
pthread_attr_destroy(&attr);//线程属性销毁
return NULL; return NULL;
} }
DEBUG_PRINT("TCPServer:bind socket success\n"); DEBUG_PRINT("TCPServer:bind socket success\n");
...@@ -185,39 +133,44 @@ void *TCPServer() ...@@ -185,39 +133,44 @@ void *TCPServer()
{ {
perror("listen"); perror("listen");
close(Listenfd); close(Listenfd);
pthread_attr_destroy(&attr);//线程属性销毁
return NULL; return NULL;
} }
DEBUG_PRINT("TCPServer:listen socket success\n"); DEBUG_PRINT("TCPServer:listen socket success\n");
while (1) while (1)
{ {
//index = -1; //index = -1;
FD_ZERO(&fds);//描述符集合初始化 max_fd = client_fd > Listenfd?client_fd:Listenfd;
time_out.tv_sec = 1;//select会更改timeout的值,所以需要重新初始化超时时间
FD_SET(Listenfd,&fds); time_out.tv_usec = 0;
struct timeval timeout = {1, 0}; FD_ZERO(&server_fd_set);
ret = select(Listenfd + 1, &fds,NULL, NULL, &timeout ); FD_SET(Listenfd,&server_fd_set);
for(i=0;i<LISTEN_MAX;i++)
{
if(s_ConnInfo[i].socketfd>0)
{
FD_SET(s_ConnInfo[i].socketfd,&server_fd_set);
}
}
ret = select(max_fd + 1, &server_fd_set,NULL, NULL, &time_out );
if(ret <= 0){ if(ret <= 0){
//DEBUG_PRINT("TCPServer:TCP receiving nothing......\n"); //DEBUG_PRINT("TCPServer:TCP receiving nothing......\n");
//break; //break;
}else{ }else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__); if (FD_ISSET(Listenfd, &server_fd_set))
if (FD_ISSET(Listenfd, &fds))
{ {
len = sizeof(Client); len = sizeof(Client);
bzero(&Client, len); bzero(&Client, len);
Connfd = accept(Listenfd, (struct sockaddr*)&Client,&len ); client_fd = accept(Listenfd, (struct sockaddr*)&Client,&len );
printf("addr:%s\n",inet_ntoa(Client.sin_addr)); printf("addr:%s\n",inet_ntoa(Client.sin_addr));
printf("[%s][%d]Connfd:%d\n",__FUNCTION__,__LINE__,Connfd); printf("[%s][%d]Connfd:%d\n",__FUNCTION__,__LINE__,client_fd);
//若有新的连接 //若有新的连接
if (Connfd != -1) if (client_fd != -1)
{ {
memset(clientIp,0x0,sizeof(clientIp)); memset(clientIp,0x0,sizeof(clientIp));
strcpy(clientIp,inet_ntoa(Client.sin_addr)); strcpy(clientIp,inet_ntoa(Client.sin_addr));
if(kk_check_is_connect(clientIp) == 1){ if(kk_check_is_connect(clientIp) == 1){
DEBUG_PRINT("already connect!!!\n"); DEBUG_PRINT("already connect!!!\n");
continue; //continue;
} }
for(i = 0; i < LISTEN_MAX; i ++){ for(i = 0; i < LISTEN_MAX; i ++){
if(s_ConnInfo[i].socketfd != -1){ if(s_ConnInfo[i].socketfd != -1){
...@@ -227,7 +180,7 @@ void *TCPServer() ...@@ -227,7 +180,7 @@ void *TCPServer()
continue; continue;
}else{ }else{
pthread_mutex_lock(&data_mutex); pthread_mutex_lock(&data_mutex);
s_ConnInfo[i].socketfd = Connfd; s_ConnInfo[i].socketfd = client_fd;
memcpy(s_ConnInfo[i].ip,clientIp,strlen(clientIp)); memcpy(s_ConnInfo[i].ip,clientIp,strlen(clientIp));
index = i; index = i;
printf("index:%d\n",index); printf("index:%d\n",index);
...@@ -235,24 +188,35 @@ void *TCPServer() ...@@ -235,24 +188,35 @@ void *TCPServer()
break; break;
} }
} }
ret = pthread_create(&threadID, &attr, TCP_Analyzer, &index);
if(0 != ret) }
}else{
for(i=0;i<LISTEN_MAX;i++)
{ {
DEBUG_PRINT("TCPServer: TCP_Analyzer build Fail!\n"); if(FD_ISSET(s_ConnInfo[i].socketfd,&server_fd_set))
FD_CLR(Listenfd, &fds);// 清除 fds中相应的文件描述符 {
close(Listenfd); memset(Buf,0,sizeof(Buf));
pthread_attr_destroy(&attr);//线程属性销毁 ret = recv(s_ConnInfo[index].socketfd,Buf,sizeof(Buf), 0);//最后一个参数为0,表示默认阻塞接收,前面select解除了阻塞说明有数据可读
return NULL; if(ret > 0)
{
_kk_handle_data(Buf,s_ConnInfo[index].socketfd);
}
else
{
printf("client disconnected\r\n");
pthread_mutex_lock(&data_mutex);
close(s_ConnInfo[index].socketfd);
s_ConnInfo[index].socketfd = -1;
memset(s_ConnInfo[index].ip,0x0,sizeof(s_ConnInfo[index].ip));
pthread_mutex_unlock(&data_mutex);
}
} }
} }
} }
} }
} }
FD_CLR(Listenfd, &fds);// 清除 fds中相应的文件描述符 FD_CLR(Listenfd, &fds);// 清除 fds中相应的文件描述符
close(Listenfd); close(Listenfd);
pthread_attr_destroy(&attr);//线程属性销毁
return NULL; return NULL;
} }
...@@ -271,11 +235,15 @@ int kk_login_init() ...@@ -271,11 +235,15 @@ int kk_login_init()
ERROR_PRINT("pthread_mutex_init kk_login_init err\n"); ERROR_PRINT("pthread_mutex_init kk_login_init err\n");
return -1; return -1;
} }
ret = pthread_create(&threadID, NULL, TCPServer, NULL); pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&threadID, &attr, TCPServer, NULL);
if(0 != ret) if(0 != ret)
{ {
ERROR_PRINT("TCPServer: TCPServer build Fail!\n"); ERROR_PRINT("TCPServer: TCPServer build Fail!\n");
return -1; return -1;
} }
pthread_attr_destroy(&attr);//线程属性销毁
return 0; return 0;
} }
...@@ -6,5 +6,5 @@ ...@@ -6,5 +6,5 @@
#define SERVER_LISTEN_PORT 5000 #define SERVER_LISTEN_PORT 5000
int kk_login_init(); int kk_login_init();
int kk_send_data_to_sdk(char *buf);
#endif #endif
\ No newline at end of file
...@@ -85,10 +85,12 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha ...@@ -85,10 +85,12 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha
cJSON *scene_payload_build(const char*method,const char *msgId,cJSON *params) cJSON *scene_payload_build(const char*method,const char *msgId,cJSON *params)
{ {
char ccuid[33] = {0};
cJSON *payload=cJSON_CreateObject(); cJSON *payload=cJSON_CreateObject();
kk_lan_get_ccuid(ccuid);
cJSON_AddStringToObject(payload, "productCode",KK_CCU_PRODUCTID); cJSON_AddStringToObject(payload, "productCode",KK_CCU_PRODUCTID);
cJSON_AddStringToObject(payload, "deviceCode",KK_CCU_ID); cJSON_AddStringToObject(payload, "deviceCode",ccuid);
cJSON_AddStringToObject(payload, "identity","executeScene"); cJSON_AddStringToObject(payload, "identity","executeScene");
cJSON_AddStringToObject(payload, "msgId",msgId); cJSON_AddStringToObject(payload, "msgId",msgId);
...@@ -105,16 +107,17 @@ cJSON *scene_payload_build(const char*method,const char *msgId,cJSON *params) ...@@ -105,16 +107,17 @@ cJSON *scene_payload_build(const char*method,const char *msgId,cJSON *params)
cJSON * scene_execute(const char *sceneId) cJSON * scene_execute(const char *sceneId)
{ {
char msgId[32] = {0}; char msgId[32] = {0};
char ccuid[33] = {0};
cJSON *root=cJSON_CreateObject(); cJSON *root=cJSON_CreateObject();
cJSON *params=cJSON_CreateObject(); cJSON *params=cJSON_CreateObject();
cJSON *info,*payload; cJSON *info,*payload;
kk_lan_get_ccuid(ccuid);
printf("[execute scene]sceneId=%s\n",sceneId); printf("[execute scene]sceneId=%s\n",sceneId);
kk_lan_get_msg_id_str(msgId,sizeof(msgId)); kk_lan_get_msg_id_str(msgId,sizeof(msgId));
cJSON_AddStringToObject(params,"sceneId",sceneId); cJSON_AddStringToObject(params,"sceneId",sceneId);
info = property_info_build("/thing/service/executeScene",KK_CCU_PRODUCTID,KK_CCU_ID); info = property_info_build("/thing/service/executeScene",KK_CCU_PRODUCTID,ccuid);
payload = scene_payload_build("thing.service.executeScene",msgId,params); payload = scene_payload_build("thing.service.executeScene",msgId,params);
cJSON_AddItemToObject(root,INFO_STRING,info); cJSON_AddItemToObject(root,INFO_STRING,info);
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "kk_data_mng.h" #include "kk_data_mng.h"
#include "kk_login_handle.h"
#include "kk_lan_node_db.h" #include "kk_lan_node_db.h"
#include "kk_log.h" #include "kk_log.h"
...@@ -21,7 +22,7 @@ cJSON *old_ccu_msg_build_json_node_int(int nodeid,const char* opcode,const char ...@@ -21,7 +22,7 @@ cJSON *old_ccu_msg_build_json_node_int(int nodeid,const char* opcode,const char
{ {
cJSON *root; cJSON *root;
if(nodeid==NULL||opcode==NULL||arg==NULL) { if(opcode==NULL||arg==NULL) {
return NULL; return NULL;
} }
...@@ -278,17 +279,11 @@ cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJS ...@@ -278,17 +279,11 @@ cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJS
newccu = devNode->newccu; newccu = devNode->newccu;
item_size = cJSON_GetArraySize(oldccu); item_size = cJSON_GetArraySize(oldccu);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
for(i=0;i<item_size;i++){ for(i=0;i<item_size;i++){
o_item = cJSON_GetArrayItem(oldccu,i); o_item = cJSON_GetArrayItem(oldccu,i);
n_item = cJSON_GetArrayItem(newccu,i); n_item = cJSON_GetArrayItem(newccu,i);
o_id_map = cJSON_GetObjectItem(o_item,"identifiermap"); o_id_map = cJSON_GetObjectItem(o_item,"identifiermap");
n_id = cJSON_GetObjectItem(params,o_id_map->valuestring); n_id = cJSON_GetObjectItem(params,o_id_map->valuestring);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(n_id!=NULL){ if(n_id!=NULL){
n_dataType = cJSON_GetObjectItem(n_item,"dataType"); n_dataType = cJSON_GetObjectItem(n_item,"dataType");
...@@ -301,20 +296,16 @@ cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJS ...@@ -301,20 +296,16 @@ cJSON * attr_report_conver(const char *deviceCode,kk_map_dev_node_t *devNode,cJS
channel = cJSON_GetObjectItem(o_item,"channel"); channel = cJSON_GetObjectItem(o_item,"channel");
epNum = cJSON_GetObjectItem(params,"epNum"); epNum = cJSON_GetObjectItem(params,"epNum");
if(channel==NULL||epNum==NULL){ if(channel==NULL||epNum==NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
continue; continue;
} }
if(strlen(channel->valuestring)!=strlen(epNum->valuestring) || if(strlen(channel->valuestring)!=strlen(epNum->valuestring) ||
strcmp(channel->valuestring,epNum->valuestring)!=0){ strcmp(channel->valuestring,epNum->valuestring)!=0){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
continue; continue;
} }
ch = atoi(channel->valuestring); ch = atoi(channel->valuestring);
nodeId = kk_lan_db_node_get(deviceCode,ch); nodeId = kk_lan_db_node_get(deviceCode,ch);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
opcode =cJSON_GetObjectItem(o_item,"opcode"); opcode =cJSON_GetObjectItem(o_item,"opcode");
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf("[%s][%d]n_dataType->valuestring=%s,opcode->valuestring=%s\n",__FUNCTION__,__LINE__,n_dataType->valuestring,opcode->valuestring); printf("[%s][%d]n_dataType->valuestring=%s,opcode->valuestring=%s\n",__FUNCTION__,__LINE__,n_dataType->valuestring,opcode->valuestring);
...@@ -377,15 +368,15 @@ int del_device(const char *deviceCode,const char *nodeid) ...@@ -377,15 +368,15 @@ int del_device(const char *deviceCode,const char *nodeid)
{ {
cJSON *msg; cJSON *msg;
cJSON *arg; cJSON *arg;
char mac[32] = {0};
kk_map_dev_node_t *dev; kk_map_dev_node_t *dev;
if(deviceCode==NULL||nodeid==NULL){ if(deviceCode==NULL||nodeid==NULL){
return -1; return -1;
} }
arg = cJSON_CreateObject(); arg = cJSON_CreateObject();
cJSON_AddStringToObject(arg,"mac",deviceCode); _deviceCode_switchto_mac(deviceCode,mac);
cJSON_AddStringToObject(arg,"mac",mac);
msg = old_ccu_msg_build_json(nodeid,"DEL_DEVICE",NULL,arg); msg = old_ccu_msg_build_json(nodeid,"DEL_DEVICE",NULL,arg);
send_msg_to_module(msg); send_msg_to_module(msg);
cJSON_Delete(msg); cJSON_Delete(msg);
...@@ -400,31 +391,27 @@ int del_device_all_node(const char *deviceCode) ...@@ -400,31 +391,27 @@ int del_device_all_node(const char *deviceCode)
int i,num = 0; int i,num = 0;
char *nodeid; char *nodeid;
//删除数据库
kk_lan_db_node_delete(deviceCode);
num = kk_lan_db_node_get_all(deviceCode,list); num = kk_lan_db_node_get_all(deviceCode,list);
for(i=0;i<num;i++){ for(i=0;i<num;i++){
nodeid = node_string(list[i]); nodeid = node_string(list[i]);
del_device(deviceCode,nodeid); del_device(deviceCode,nodeid);
free(nodeid); free(nodeid);
} }
//删除数据库
kk_lan_db_node_delete(deviceCode);
if(num){ if(num){
kk_handle_sync_info(); kk_handle_sync_info();
} }
return 0;
} }
void device_delete_sync(cJSON *payload) void device_delete_sync(cJSON *payload)
{ {
cJSON *params; cJSON *params;
cJSON *deviceCode; cJSON *deviceCode;
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
params = cJSON_GetObjectItem(payload,"params"); params = cJSON_GetObjectItem(payload,"params");
deviceCode = cJSON_GetObjectItem(params, "deviceCode"); deviceCode = cJSON_GetObjectItem(params, "deviceCode");
del_device_all_node(deviceCode->valuestring); del_device_all_node(deviceCode->valuestring);
...@@ -460,8 +447,6 @@ void property_post_deal(const char *deviceCode,cJSON *payload) ...@@ -460,8 +447,6 @@ void property_post_deal(const char *deviceCode,cJSON *payload)
cJSON *params; cJSON *params;
kk_map_dev_node_t *dev; kk_map_dev_node_t *dev;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(kk_map_dev_search_by_deviceCode(deviceCode, &dev)==0){ if(kk_map_dev_search_by_deviceCode(deviceCode, &dev)==0){
params = cJSON_GetObjectItem(payload,"params"); params = cJSON_GetObjectItem(payload,"params");
...@@ -476,7 +461,6 @@ void property_syn_deal(const char *deviceCode,cJSON *properties) ...@@ -476,7 +461,6 @@ void property_syn_deal(const char *deviceCode,cJSON *properties)
kk_map_dev_node_t *dev; kk_map_dev_node_t *dev;
if(kk_map_dev_search_by_deviceCode(deviceCode, &dev)==0){ if(kk_map_dev_search_by_deviceCode(deviceCode, &dev)==0){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
attr_report_conver(deviceCode,dev,properties); attr_report_conver(deviceCode,dev,properties);
} }
} }
......
...@@ -9,7 +9,7 @@ cJSON *old_ccu_msg_build_json(const char* nodeid,const char* opcode,const char* ...@@ -9,7 +9,7 @@ cJSON *old_ccu_msg_build_json(const char* nodeid,const char* opcode,const char*
cJSON *old_ccu_msg_build(const char* nodeid,const char* opcode,const char* status,const char* arg); cJSON *old_ccu_msg_build(const char* nodeid,const char* opcode,const char* status,const char* arg);
int send_msg_to_module(cJSON *root); int send_msg_to_module(cJSON *root);
cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type);
int arming_status_notify(int type); int arming_status_notify(int type);
......
...@@ -22,10 +22,12 @@ ...@@ -22,10 +22,12 @@
#define HEARTBEAT_OPCODE "CCU_HB" #define HEARTBEAT_OPCODE "CCU_HB"
#define SYNC_OPCODE "SYNC_INFO" #define SYNC_OPCODE "SYNC_INFO"
#define GET_ZB_DEVS_HW_INFO_OPCODE "GET_ZIGBEE_DEVS_HW_INFO" #define GET_ZB_DEVS_HW_INFO_OPCODE "GET_ZIGBEE_DEVS_HW_INFO"
#define ZIGBEE_DEV_HW_INFO_PUSH "ZIGBEE_DEV_HW_INFO_PUSH"
#define GET_HISTORY_ALARM_LOG "GET_HISTORY_ALARM_LOG"
#define DEL_HISTORY_ALARM_LOG "DEL_HISTORY_ALARM_LOG"
#define SWITCH_OPCODE "SWITCH" #define SWITCH_OPCODE "SWITCH"
#define GET_HISTORY_MSG_TYPE "/thing/service/historyAlarm"
#define DEL_HISTORY_MSG_TYPE "/thing/service/delAlarm"
......
...@@ -410,6 +410,36 @@ int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,in ...@@ -410,6 +410,36 @@ int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,in
_kk_area_unlock(); _kk_area_unlock();
return isGet; return isGet;
} }
int kk_get_device_roomInfo(const char* deviceCode,int epNum,char *roomName,char *roomId)
{
int isGet = 0;
char *sqlCmd = NULL;
char *proomName = NULL;
char *proomId = NULL;
sqlite3_stmt *stmt;
kk_area_ctx_t *ctx = _kk_area_get_ctx();
const char *searchCmd = "select * from AreaDevInfo where deviceCode = '%s' and epNum = '%d';";
_kk_area_lock();
sqlCmd = sqlite3_mprintf(searchCmd,deviceCode,epNum);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
proomName = (char*)sqlite3_column_text(stmt, DB_DEV_ROOM_NAME);
proomId = (char*)sqlite3_column_text(stmt, DB_DEV_ROOM_ID);
if(strlen(proomName) < 256){
memcpy(roomName,proomName,strlen(proomName));
}else{
memcpy(roomName,proomName,255);
}
memcpy(roomId,proomId,strlen(proomId));
isGet = 1;
}
//INFO_PRINT("\n");
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
_kk_area_unlock();
return isGet;
}
int kk_room_dev_remove(const char *deviceCode,const char *epNum) int kk_room_dev_remove(const char *deviceCode,const char *epNum)
{ {
int res = 0; int res = 0;
......
...@@ -34,7 +34,7 @@ int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,in ...@@ -34,7 +34,7 @@ int kk_get_device_name(const char* deviceCode,const char *epNum,char *devName,in
int kk_room_update_armingstate(int state,const char *roomid); int kk_room_update_armingstate(int state,const char *roomid);
int kk_get_room_armingstate(const char* roomId); int kk_get_room_armingstate(const char* roomId);
int kk_get_roomId_by_deviceCode(const char* deviceCode,const char *epNum,char *roomId,int size); int kk_get_roomId_by_deviceCode(const char* deviceCode,const char *epNum,char *roomId,int size);
int kk_get_device_roomInfo(const char* deviceCode,int epNum,char *roomName,char *roomId);
#endif #endif
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "cJSON.h" #include "cJSON.h"
#include "kk_dm_api.h" #include "kk_dm_api.h"
#include "kk_dm_msg.h" #include "kk_dm_msg.h"
//#include <curl.h> #include <curl/curl.h>
#include "com_api.h" #include "com_api.h"
#include "kk_log.h" #include "kk_log.h"
...@@ -237,7 +237,6 @@ int progress_callback(void *clientp, double dltotal, double dlnow, double ultota ...@@ -237,7 +237,6 @@ int progress_callback(void *clientp, double dltotal, double dlnow, double ultota
} }
void dm_ota_start(char *url) void dm_ota_start(char *url)
{ {
#if 0
int res = 0; int res = 0;
char *progress_data = "* "; char *progress_data = "* ";
CURL* curl = curl_easy_init(); CURL* curl = curl_easy_init();
...@@ -266,11 +265,9 @@ void dm_ota_start(char *url) ...@@ -266,11 +265,9 @@ void dm_ota_start(char *url)
} }
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
fclose(file); fclose(file);
#endif
} }
void dm_ota_start_MD5(char *url) void dm_ota_start_MD5(char *url)
{ {
#if 0
int res = 0; int res = 0;
char *md5_url = malloc(strlen(url)+10); char *md5_url = malloc(strlen(url)+10);
if(md5_url == NULL){ if(md5_url == NULL){
...@@ -307,7 +304,6 @@ void dm_ota_start_MD5(char *url) ...@@ -307,7 +304,6 @@ void dm_ota_start_MD5(char *url)
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
fclose(file); fclose(file);
free(md5_url); free(md5_url);
#endif
} }
void dm_ota_handle(void *data){ void dm_ota_handle(void *data){
printf("dm_ota_handle ================== [%s]\n",(char*)data); printf("dm_ota_handle ================== [%s]\n",(char*)data);
......
...@@ -292,9 +292,10 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA ...@@ -292,9 +292,10 @@ int dm_mgr_device_create(_IN_ int dev_type,_IN_ char productCode[PRODUCT_CODE_MA
else{ else{
return FAIL_RETURN; return FAIL_RETURN;
} }
dm_mgr_properities_db_create(node->dev_shadow,deviceCode,dev_type);
INIT_LIST_HEAD(&node->linked_list); INIT_LIST_HEAD(&node->linked_list);
list_add_tail(&node->linked_list, &ctx->dev_list); list_add_tail(&node->linked_list, &ctx->dev_list);
dm_mgr_properities_db_create(node->dev_shadow,deviceCode,dev_type);
if(dev_type == KK_DM_DEVICE_CCU){ if(dev_type == KK_DM_DEVICE_CCU){
_dm_init_tsl_params(node->dev_shadow,node->deviceCode); _dm_init_tsl_params(node->dev_shadow,node->deviceCode);
...@@ -406,7 +407,25 @@ int dm_mgr_get_deviceNum_by_productType(_IN_ char *productType) ...@@ -406,7 +407,25 @@ int dm_mgr_get_deviceNum_by_productType(_IN_ char *productType)
} }
return num; return num;
} }
static int dm_mgr_update_gw_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN],time_t timestamp)
{
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
dm_mgr_dev_node_t *search_node = NULL;
//_dm_mgr_mutex_lock();
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
if ((strlen(search_node->deviceCode) == strlen(deviceCode)) &&
(memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) {
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
search_node->timestamp = timestamp;
//_dm_mgr_mutex_unlock();
return SUCCESS_RETURN;
}
}
//_dm_mgr_mutex_unlock();
ERROR_PRINT("Device Not Found, deviceCode: %s\n", deviceCode);
return FAIL_RETURN;
}
int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN],time_t timestamp) int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN],time_t timestamp)
{ {
dm_mgr_ctx *ctx = _dm_mgr_get_ctx(); dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
...@@ -418,6 +437,9 @@ int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLE ...@@ -418,6 +437,9 @@ int dm_mgr_update_timestamp_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLE
(memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) { (memcmp(search_node->deviceCode, deviceCode, strlen(deviceCode)) == 0)) {
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */ /* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
search_node->timestamp = timestamp; search_node->timestamp = timestamp;
if(search_node->dev_type == KK_DM_DEVICE_SUBDEV){
dm_mgr_update_gw_timestamp_by_devicecode(search_node->fatherDeviceCode,timestamp);
}
_dm_mgr_mutex_unlock(); _dm_mgr_mutex_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -472,11 +494,13 @@ int dm_mgr_check_heartbeat_timeout(time_t timestamp) ...@@ -472,11 +494,13 @@ int dm_mgr_check_heartbeat_timeout(time_t timestamp)
if(search_node->devid == KK_DM_DEVICE_CCU_DEVICEID){ if(search_node->devid == KK_DM_DEVICE_CCU_DEVICEID){
continue; continue;
} }
//printf("[%s][%d]search_node->productCode:%s\n",__FUNCTION__,__LINE__,search_node->productCode); #if 0
//printf("[%s][%d]search_node->hb_timeout:%d\n",__FUNCTION__,__LINE__,search_node->hb_timeout); printf("[%s][%d]search_node->productCode:%s\n",__FUNCTION__,__LINE__,search_node->productCode);
//printf("[%s][%d]search_node->isOffline:%d\n",__FUNCTION__,__LINE__,search_node->isOffline); printf("[%s][%d]search_node->hb_timeout:%d\n",__FUNCTION__,__LINE__,search_node->hb_timeout);
//printf("[%s][%d]search_node->timestamp:%d\n",__FUNCTION__,__LINE__,search_node->timestamp); printf("[%s][%d]search_node->isOffline:%d\n",__FUNCTION__,__LINE__,search_node->isOffline);
//printf("[%s][%d]timestamp:%d\n",__FUNCTION__,__LINE__,timestamp); printf("[%s][%d]search_node->timestamp:%d\n",__FUNCTION__,__LINE__,search_node->timestamp);
printf("[%s][%d]timestamp:%d\n",__FUNCTION__,__LINE__,timestamp);
#endif
if((timestamp - search_node->timestamp) >= search_node->hb_timeout){ if((timestamp - search_node->timestamp) >= search_node->hb_timeout){
if(search_node->isOffline != KK_DEV_OFFLINE){ if(search_node->isOffline != KK_DEV_OFFLINE){
dm_mgr_set_dev_onoffline(search_node,1); dm_mgr_set_dev_onoffline(search_node,1);
...@@ -685,7 +709,7 @@ int iotx_report_id(char *msgId) ...@@ -685,7 +709,7 @@ int iotx_report_id(char *msgId)
} }
//char timerStr[16] = {0}; //char timerStr[16] = {0};
//HAL_GetTime_ms(); //HAL_GetTime_ms();
sprintf(msgId,"6c0645c4-f6d6-46b2-b11e-%lld",HAL_GetTime_ms()); sprintf(msgId,"6c0645c4-f6d6-b11e-%lld",HAL_GetTime_ms());
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
...@@ -1611,7 +1635,9 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN]) ...@@ -1611,7 +1635,9 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res); ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN; return FAIL_RETURN;
} }
if(strcmp(node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0){
kk_indoorAir_delete_by_dcode(deviceCode);
}
if(node->dev_type == KK_DM_DEVICE_CCU){ if(node->dev_type == KK_DM_DEVICE_CCU){
ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__); ERROR_PRINT("ERROR [%s][%d]\n",__FUNCTION__,__LINE__);
return FAIL_RETURN; return FAIL_RETURN;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#define KK_DM_CCU_DEVICE_PRODUCT_CODE KK_CCU_PRODUCTID #define KK_DM_CCU_DEVICE_PRODUCT_CODE KK_CCU_PRODUCTID
#define KK_DM_GW_DEVICE_PRODUCT_TYPE "gw" #define KK_DM_GW_DEVICE_PRODUCT_TYPE "gw"
#define KK_DM_GW_DEVICE_PRODUCT_CODE "2" #define KK_DM_GW_DEVICE_PRODUCT_CODE "2"
#define KK_DM_AIR_GATEWAY_TYPE "air conditioning gateway"
#define KK_DM_DEVICE_CCU_DEVICEID (0x00) #define KK_DM_DEVICE_CCU_DEVICEID (0x00)
#define MSG_MAX_LEN (64) #define MSG_MAX_LEN (64)
......
...@@ -45,6 +45,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY; ...@@ -45,6 +45,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_REGISTER_TOPIC_REPLY "/thing/sub/register_reply" #define KK_REGISTER_TOPIC_REPLY "/thing/sub/register_reply"
#define KK_ADD_TOPIC_REPLY "/thing/topo/add_reply" #define KK_ADD_TOPIC_REPLY "/thing/topo/add_reply"
#define KK_LOGIN_TOPIC_REPLY "/thing/combine/login_reply" #define KK_LOGIN_TOPIC_REPLY "/thing/combine/login_reply"
#define KK_THING_STATUS_ONLINE "/thing/status/online"
#define KK_ONLINE_TOPIC_REPLY "/thing/status/online_reply" #define KK_ONLINE_TOPIC_REPLY "/thing/status/online_reply"
#define KK_THING_SERVICE_PROPERTY_SET "/thing/service/property/set" #define KK_THING_SERVICE_PROPERTY_SET "/thing/service/property/set"
#define KK_THING_SERVICE_PROPERTY_GET "/thing/service/property/get" #define KK_THING_SERVICE_PROPERTY_GET "/thing/service/property/get"
...@@ -60,6 +61,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY; ...@@ -60,6 +61,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_THING_SERVICE_ADDROOM "/thing/service/addRoom" #define KK_THING_SERVICE_ADDROOM "/thing/service/addRoom"
#define KK_THING_SERVICE_DELETEROOM "/thing/service/deleteRoom" #define KK_THING_SERVICE_DELETEROOM "/thing/service/deleteRoom"
#define KK_THING_SERVICE_ADDDEVICETOROOM "/thing/service/addDeviceToRoom" #define KK_THING_SERVICE_ADDDEVICETOROOM "/thing/service/addDeviceToRoom"
#define KK_THING_SERVICE_ADDDEVICETOROOM_REPLY "/thing/service/addDeviceToRoom_reply"
#define KK_THING_SERVICE_REMOVEDEVICEFROMROOM "/thing/service/removeDeviceFromRoom" #define KK_THING_SERVICE_REMOVEDEVICEFROMROOM "/thing/service/removeDeviceFromRoom"
#define KK_THING_SERVICE_EXECUTEROOM "/thing/service/executeRoom" #define KK_THING_SERVICE_EXECUTEROOM "/thing/service/executeRoom"
#define KK_THING_SERVICE_SETLOCALTIMER "/thing/service/setLocalTimer" #define KK_THING_SERVICE_SETLOCALTIMER "/thing/service/setLocalTimer"
...@@ -95,6 +97,10 @@ const char DM_MSG_INFO[] DM_READ_ONLY; ...@@ -95,6 +97,10 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_THING_SERVICE_UNBINDSBUTTTON "/thing/service/unbindButton" #define KK_THING_SERVICE_UNBINDSBUTTTON "/thing/service/unbindButton"
#define KK_THING_SERVICE_ACTIVEBUTTON "/thing/service/activeButton" #define KK_THING_SERVICE_ACTIVEBUTTON "/thing/service/activeButton"
#define KK_THING_SERVICE_GETCCUVERSION "/thing/service/getCCUVersion" #define KK_THING_SERVICE_GETCCUVERSION "/thing/service/getCCUVersion"
#define KK_THING_SERVICE_HISTORYALARM "/thing/service/historyAlarm"
#define KK_THING_SERVICE_HISTORYALARM_REPLY "/thing/service/historyAlarm_reply"
#define KK_THING_SERVICE_DEL_HISTORYALARM "/thing/service/delAlarm"
#define KK_THING_SERVICE_DEL_HISTORYALARM_REPLY "/thing/service/delAlarm_reply"
void kk_sendData2app(void *info, void *payload,int isAsync); void kk_sendData2app(void *info, void *payload,int isAsync);
int dm_msg_thing_sub_register(_IN_ char productCode[DEVICE_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN], int dm_msg_thing_sub_register(_IN_ char productCode[DEVICE_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN],
......
...@@ -394,6 +394,48 @@ static int kk_service_deleteRoom_handle(cJSON *params) ...@@ -394,6 +394,48 @@ static int kk_service_deleteRoom_handle(cJSON *params)
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int kk_service_addDeviceToRoom_reply(cJSON *param,cJSON *msgId)
{
int res = 0;
int i = 0,num = 0;
if(param == NULL || msgId == NULL){
return INVALID_PARAMETER;
}
INFO_PRINT(" adddevicetoroom reply \n");
cJSON *deviceCode = cJSON_GetObjectItem(param, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
return FAIL_RETURN;
}
cJSON *productCode = cJSON_GetObjectItem(param, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
return FAIL_RETURN;
}
INFO_PRINT(" adddevicetoroom reply \n");
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, KK_THING_SERVICE_ADDDEVICETOROOM_REPLY);
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, deviceCode->valuestring);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode->valuestring);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON_AddStringToObject(payload, "msgId", msgId->valuestring);
INFO_PRINT(" adddevicetoroom reply \n");
cJSON *Item = cJSON_CreateObject();
cJSON_AddItemToObject(payload, "params", Item);
char *payload11=cJSON_Print(payload);
INFO_PRINT(" adddevicetoroom reply \n");
kk_sendData2app(infff,payload11,0);
INFO_PRINT(" adddevicetoroom reply \n");
free(payload11);
free(infff);
cJSON_Delete(payload);
cJSON_Delete(info);
return res;
}
/************************************************************ /************************************************************
*功能描述:添加设备到房间处理函数 *功能描述:添加设备到房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含房间ID和设备deviceCode *输入参数:params:云端传下来JSON数据,主要包含房间ID和设备deviceCode
...@@ -404,6 +446,9 @@ static int kk_service_deleteRoom_handle(cJSON *params) ...@@ -404,6 +446,9 @@ static int kk_service_deleteRoom_handle(cJSON *params)
static int kk_service_addDeviceToRoom_handle(cJSON *params) static int kk_service_addDeviceToRoom_handle(cJSON *params)
{ {
char epNumStr[10] = {0}; char epNumStr[10] = {0};
int isAirGwFlag = 0;
int res = 0;
dm_mgr_dev_node_t *node = NULL;
if(params == NULL){ if(params == NULL){
return INVALID_PARAMETER; return INVALID_PARAMETER;
} }
...@@ -424,13 +469,36 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params) ...@@ -424,13 +469,36 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
if(deviceCode == NULL){ if(deviceCode == NULL){
return FAIL_RETURN; return FAIL_RETURN;
} }
res = dm_mgr_get_device_by_devicecode((char*)deviceCode->valuestring,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
cJSON *epNum = cJSON_GetObjectItem(params, MSG_AREA_ROOM_EPNUM); cJSON *epNum = cJSON_GetObjectItem(params, MSG_AREA_ROOM_EPNUM);
if(epNum == NULL){ if(epNum == NULL){
if(strcmp(node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0){
isAirGwFlag = 1;
}
strcpy(epNumStr,"1"); strcpy(epNumStr,"1");
}else{ }else{
strcpy(epNumStr,epNum->valuestring); strcpy(epNumStr,epNum->valuestring);
} }
kk_room_dev_add(roomId->valuestring,room_name->valuestring,deviceCode->valuestring,epNumStr,dev_name->valuestring); kk_room_dev_add(roomId->valuestring,room_name->valuestring,deviceCode->valuestring,epNumStr,dev_name->valuestring);
//内机默认添加到跟网关同个房间
if(strcmp(node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0 && isAirGwFlag){
int eplist[64] = {0};
char name[128] = {0};
int i = 0;
int count = kk_indoorAir_query_epnums(deviceCode->valuestring,eplist);
for(i = 0; i < count; i++){
memset(epNumStr,0x0,sizeof(epNumStr));
memset(name,0x0,sizeof(name));
sprintf(epNumStr,"%d",eplist[i]);
sprintf(name,"空调%d",eplist[i]);
kk_room_dev_add(roomId->valuestring,room_name->valuestring,deviceCode->valuestring,epNumStr,name);
}
}
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
/************************************************************ /************************************************************
...@@ -543,220 +611,7 @@ static int kk_service_executeRoom_handle(cJSON *params) ...@@ -543,220 +611,7 @@ static int kk_service_executeRoom_handle(cJSON *params)
kk_free_room_dev_list(); kk_free_room_dev_list();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
#if 0
static int kk_service_setLocalTimer_handle(cJSON *params,const char *deviceCode)
{
int res = 0;
kk_dev_list_t *pList = NULL;
dm_mgr_dev_node_t *search_node = NULL;
char *timer = NULL,*targets = NULL;
int isEnable = 0, isValid = 0, zoneOffset = 0;
int size = 0 ;
if(params == NULL || deviceCode == NULL){
return INVALID_PARAMETER;
}
res = dm_mgr_get_device_by_devicecode(deviceCode,&search_node);
if (res < SUCCESS_RETURN) {
ERROR_PRINT("dm_mgr_get_device_by_devicecode failed\n");
return res;
}
size = kk_service_get_array_size(search_node->dev_shadow);
cJSON *LocalTimerArray = cJSON_GetObjectItem(params, MSG_TIMER_SETLOCALTIMER_LOCALTIMER);
if(LocalTimerArray == NULL){
return FAIL_RETURN;
}
cJSON * item = LocalTimerArray->child;
while(item != NULL){
timer = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_TIMER)->valuestring;
isEnable = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_ENABLE)->valueint;
isValid = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_ISVALID)->valueint;
zoneOffset = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_ZONEOFFSET)->valueint;
targets = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_TARGETS)->valuestring;
kk_service_localtimer_set(search_node->dev_shadow,timer,isEnable,isValid,zoneOffset,targets,size);
item = item->next;
}
return SUCCESS_RETURN;
}
static int kk_service_getLocalTimer_handle(const char *deviceCode)
{
if(deviceCode == NULL){
return INVALID_PARAMETER;
}
dm_msg_thing_service_post(deviceCode,MSG_TIMER_GETLOCALTIMER_GETLOCALTIMER);
return SUCCESS_RETURN;
}
static int kk_service_setCountDown_handle(cJSON *params,const char *deviceCode)
{
int res = 0;
kk_dev_list_t *pList = NULL;
dm_mgr_dev_node_t *search_node = NULL;
char *targets = NULL;
int isEnable = 0, isValid = 0, delaytimer = 0,current = 0;
int size = 0 ;
if(params == NULL || deviceCode == NULL){
return INVALID_PARAMETER;
}
res = dm_mgr_get_device_by_devicecode(deviceCode,&search_node);
if (res < SUCCESS_RETURN) {
ERROR_PRINT("dm_mgr_get_device_by_devicecode failed\n");
return res;
}
size = kk_service_get_array_size(search_node->dev_shadow);
cJSON *LocalTimerArray = cJSON_GetObjectItem(params, MSG_TIMER_SETCOUNTDOWN_COUNTDOWN);
if(LocalTimerArray == NULL){
return FAIL_RETURN;
}
cJSON * item = LocalTimerArray->child;
while(item != NULL){
delaytimer = cJSON_GetObjectItem(item,MSG_TIMER_SETCOUNTDOWN_DELAYTIME)->valueint;
current = cJSON_GetObjectItem(item,MSG_TIMER_SETCOUNTDOWN_CURRENTTIME)->valueint;
isValid = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_ISVALID)->valueint;
isEnable = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_ENABLE)->valueint;
targets = cJSON_GetObjectItem(item,MSG_TIMER_SETLOCALTIMER_TARGETS)->valuestring;
kk_service_setCountDown_set(search_node->dev_shadow,delaytimer,current,isEnable,isValid,targets,size);
item = item->next;
}
return SUCCESS_RETURN;
}
static int kk_service_getCountDown_handle(const char *deviceCode)
{
if(deviceCode == NULL){
return INVALID_PARAMETER;
}
dm_msg_thing_service_post(deviceCode,MSG_TIMER_SETCOUNTDOWN_GETCOUNTDOWN);
return SUCCESS_RETURN;
}
static int kk_service_getLockKeylist_handle(const char *deviceCode)
{
if(deviceCode == NULL){
return INVALID_PARAMETER;
}
return SUCCESS_RETURN;
}
static int kk_service_addKey_handle(const char *deviceCode,cJSON *param)
{
char keyId[32] = {0};
int res = 0;
dm_mgr_dev_node_t *node = NULL;
if(deviceCode == NULL || param == NULL){
return INVALID_PARAMETER;
}
res = dm_mgr_get_device_by_devicecode(deviceCode, &node);
if (res < SUCCESS_RETURN) {
ERROR_PRINT("dm_mgr_get_device_by_devicecode failed\n");
return res;
}
cJSON *KeyType = cJSON_GetObjectItem(param,MSG_KEYADD_KEYTYPE);
if(KeyType == NULL) return FAIL_RETURN;
cJSON *KeyRole = cJSON_GetObjectItem(param,MSG_KEYADD_KEYROLE);
if(KeyRole == NULL) return FAIL_RETURN;
cJSON *IsValid = cJSON_GetObjectItem(param,MSG_KEYADD_KEYISVALID);
if(IsValid == NULL) return FAIL_RETURN;
cJSON *KeyName = cJSON_GetObjectItem(param,MSG_KEYADD_KEYNAME);
if(KeyName == NULL) return FAIL_RETURN;;
cJSON *KeyEffectiveTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEFFECTIVE);
if(KeyEffectiveTime == NULL) return FAIL_RETURN;;
cJSON *KeyExpiryTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEXPIRE);
if(KeyExpiryTime == NULL) return FAIL_RETURN;;
HAL_GetTime_s(keyId);
kk_property_update_lockkeys(deviceCode,keyId,KeyType->valueint,KeyRole->valueint,IsValid->valueint,
KeyName->valuestring,KeyEffectiveTime->valueint,KeyExpiryTime->valueint);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYID,NULL,keyId);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYTYPE,&KeyType->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYROLE,&KeyRole->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYISVALID,&IsValid->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYNAME,NULL,KeyName->valuestring);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYEFFECTIVE,&IsValid->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYADD_NOTIFICATION_KEYEXPIRE,&IsValid->valueint,NULL);
dm_msg_thing_event_post(deviceCode,MSG_KEYADD_NOTIFICATION);
return SUCCESS_RETURN;
}
static int kk_service_modifyKey_handle(const char *deviceCode,cJSON *param)
{
int res = 0;
dm_mgr_dev_node_t *node = NULL;
if(deviceCode == NULL || param == NULL){
return INVALID_PARAMETER;
}
res = dm_mgr_get_device_by_devicecode(deviceCode, &node);
if (res < SUCCESS_RETURN) {
ERROR_PRINT("dm_mgr_get_device_by_devicecode failed\n");
return res;
}
cJSON *keyId = cJSON_GetObjectItem(param,MSG_KEYADD_KEYID);
if(keyId == NULL) return FAIL_RETURN;
cJSON *KeyType = cJSON_GetObjectItem(param,MSG_KEYADD_KEYTYPE);
if(KeyType == NULL) return FAIL_RETURN;
cJSON *KeyRole = cJSON_GetObjectItem(param,MSG_KEYADD_KEYROLE);
if(KeyRole == NULL) return FAIL_RETURN;
cJSON *IsValid = cJSON_GetObjectItem(param,MSG_KEYADD_KEYISVALID);
if(IsValid == NULL) return FAIL_RETURN;
cJSON *KeyName = cJSON_GetObjectItem(param,MSG_KEYADD_KEYNAME);
if(KeyName == NULL) return FAIL_RETURN;;
cJSON *KeyEffectiveTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEFFECTIVE);
if(KeyEffectiveTime == NULL) return FAIL_RETURN;;
cJSON *KeyExpiryTime = cJSON_GetObjectItem(param,MSG_KEYADD_KEYEXPIRE);
if(KeyExpiryTime == NULL) return FAIL_RETURN;;
kk_property_update_lockkeys(deviceCode,keyId->valuestring,KeyType->valueint,KeyRole->valueint,IsValid->valueint,
KeyName->valuestring,KeyEffectiveTime->valueint,KeyExpiryTime->valueint);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYID,NULL,keyId->valuestring);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYTYPE,&KeyType->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYROLE,&KeyRole->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYISVALID,&IsValid->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYNAME,NULL,KeyName->valuestring);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYEFFECTIVE,&IsValid->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYMODIFY_NOTIFICATION_KEYEXPIRE,&IsValid->valueint,NULL);
dm_msg_thing_event_post(deviceCode,MSG_KEYMODIFY_NOTIFICATION);
return SUCCESS_RETURN;
}
static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
{
int res = 0;
dm_mgr_dev_node_t *node = NULL;
if(deviceCode == NULL || param == NULL){
return INVALID_PARAMETER;
}
res = dm_mgr_get_device_by_devicecode(deviceCode, &node);
if (res < SUCCESS_RETURN) {
ERROR_PRINT("dm_mgr_get_device_by_devicecode failed\n");
return res;
}
cJSON *KeyType = cJSON_GetObjectItem(param,MSG_KEYADD_KEYTYPE);
if(KeyType == NULL) return FAIL_RETURN;
cJSON *KeyRole = cJSON_GetObjectItem(param,MSG_KEYADD_KEYROLE);
if(KeyRole == NULL) return FAIL_RETURN;
cJSON *keyId = cJSON_GetObjectItem(param,MSG_KEYADD_KEYID);
if(keyId == NULL) return FAIL_RETURN;
kk_property_delete_lockkeys(deviceCode,keyId->valuestring);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYDELETE_NOTIFICATION_KEYID,NULL,keyId->valuestring);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYDELETE_NOTIFICATION_KEYTYPE,&KeyType->valueint,NULL);
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,MSG_KEYDELETE_NOTIFICATION_KEYROLE,&KeyRole->valueint,NULL);
dm_msg_thing_event_post(deviceCode,MSG_KEYDELETE_NOTIFICATION);
return SUCCESS_RETURN;
}
#endif
/************************************************************ /************************************************************
*功能描述:添加场景处理 *功能描述:添加场景处理
*输入参数:params:云端下发数据,包含场景名称,场景类型,场景使能等 *输入参数:params:云端下发数据,包含场景名称,场景类型,场景使能等
...@@ -1024,6 +879,91 @@ static int kk_service_upgrade_reply(cJSON *param,cJSON *msgId) ...@@ -1024,6 +879,91 @@ static int kk_service_upgrade_reply(cJSON *param,cJSON *msgId)
return res; return res;
} }
/************************************************************ /************************************************************
*功能描述:告警信息查询返回
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_service_historyalarm_reply(cJSON *param)
{
int res = 0;
int i = 0,num = 0;
if(param == NULL){
return INVALID_PARAMETER;
}
cJSON *deviceCode = cJSON_GetObjectItem(param, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
return FAIL_RETURN;
}
cJSON *productCode = cJSON_GetObjectItem(param, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
return FAIL_RETURN;
}
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, KK_THING_SERVICE_HISTORYALARM_REPLY);
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, deviceCode->valuestring);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode->valuestring);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON *alarminfo = kk_history_get_sensor_info();
cJSON_AddItemToObject(payload, "params", alarminfo);
char *payload11=cJSON_Print(payload);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
cJSON_Delete(payload);
cJSON_Delete(info);
return res;
}
/************************************************************
*功能描述:删除告警信息返回
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_service_del_historyalarm_reply(cJSON *param,char *key)
{
int res = 0;
int i = 0,num = 0;
if(param == NULL){
return INVALID_PARAMETER;
}
cJSON *deviceCode = cJSON_GetObjectItem(param, MSG_DEVICE_CODE_STR);
if(deviceCode == NULL){
return FAIL_RETURN;
}
cJSON *productCode = cJSON_GetObjectItem(param, MSG_PRODUCT_CODE_STR);
if(productCode == NULL){
return FAIL_RETURN;
}
cJSON *info = cJSON_CreateObject();
cJSON_AddStringToObject(info, MSG_TYPE_STR, KK_THING_SERVICE_DEL_HISTORYALARM_REPLY);
cJSON_AddStringToObject(info, MSG_DEVICE_CODE_STR, deviceCode->valuestring);
cJSON_AddStringToObject(info, MSG_PRODUCT_CODE_STR, productCode->valuestring);
char *infff=cJSON_Print(info);
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "desc", "success");
cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "code", "0");
cJSON_AddStringToObject(payload, "params", key);
char *payload11=cJSON_Print(payload);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
cJSON_Delete(payload);
cJSON_Delete(info);
return res;
}
/************************************************************
*功能描述:情景面板绑定处理 *功能描述:情景面板绑定处理
*输入参数:params:云端下发数据 *输入参数:params:云端下发数据
msgId:消息Id msgId:消息Id
...@@ -1273,7 +1213,9 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -1273,7 +1213,9 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDDEVICETOROOM) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ADDDEVICETOROOM) == 0){
INFO_PRINT(" adddevicetoroom \n"); INFO_PRINT(" adddevicetoroom \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_addDeviceToRoom_handle(paramStr); kk_service_addDeviceToRoom_handle(paramStr);
kk_service_addDeviceToRoom_reply(info_root,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_REMOVEDEVICEFROMROOM) == 0){ else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_REMOVEDEVICEFROMROOM) == 0){
INFO_PRINT(" removedevicefromroom \n"); INFO_PRINT(" removedevicefromroom \n");
...@@ -1385,6 +1327,17 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data) ...@@ -1385,6 +1327,17 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID); cJSON *msgId = cJSON_GetObjectItem(payload, MSG_COMMON_MSGID);
kk_service_getCCUVersion_handle(info_root,msgId); kk_service_getCCUVersion_handle(info_root,msgId);
} }
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_HISTORYALARM) == 0){
kk_service_historyalarm_reply(info_root);
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_DEL_HISTORYALARM) == 0){
cJSON *key = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(key != NULL){
kk_history_delete_by_recordtime("SensorHistoryInfo",atoi(key->valuestring));
kk_service_del_historyalarm_reply(info_root,key->valuestring);
}
}
else{ else{
INFO_PRINT("Error msgtype!!! \n"); INFO_PRINT("Error msgtype!!! \n");
} }
......
...@@ -99,7 +99,22 @@ static int _kk_property_db_Init(void) ...@@ -99,7 +99,22 @@ static int _kk_property_db_Init(void)
_kk_property_db_unlock(); _kk_property_db_unlock();
return FAIL_RETURN; return FAIL_RETURN;
} }
const char *pIndoorAirtable = "CREATE TABLE IF NOT EXISTS indoorAirProperties( \
idx INTEGER PRIMARY KEY, \
deviceCode varchar(33), \
identifier varchar(33), \
value varchar(33), \
valueType INTEGER, \
epNum INTEGER)";
if (sqlite3_exec(ctx->pDb, pIndoorAirtable, NULL, NULL, &pcErr) != SQLITE_OK)
{
ERROR_PRINT("Error creating table (%s)\n", pcErr);
sqlite3_free(pcErr);
//eUtils_LockUnlock(&sLock);
_kk_property_db_unlock();
return FAIL_RETURN;
}
//eUtils_LockUnlock(&sLock); //eUtils_LockUnlock(&sLock);
_kk_property_db_unlock(); _kk_property_db_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
...@@ -164,6 +179,42 @@ static int _kk_check_property_exist(const char* deviceCode,const char* identifie ...@@ -164,6 +179,42 @@ static int _kk_check_property_exist(const char* deviceCode,const char* identifie
_kk_property_db_unlock(); _kk_property_db_unlock();
return isExist; return isExist;
} }
char *human_induction_device[] = {
(char*){"3049"},
(char*){"3042"},
(char*){"3053"},
(char*){"3043"},
};
char *door_induction_device[] = {
(char*){"3045"},
(char*){"3050"},
(char*){"3051"},
(char*){"3070"},
};
static int _kk_check_human_induction_device(char *productCode){
int i = 0;
int num = sizeof(human_induction_device)/sizeof(char *);
for(i =0; i < num; i++){
if(strcmp(productCode,human_induction_device[i]) == 0)
{
return 1;
}
}
return 0;
}
static int _kk_check_door_induction_device(char *productCode){
int i = 0;
int num = sizeof(door_induction_device)/sizeof(char *);
for(i =0; i < num; i++){
if(strcmp(productCode,door_induction_device[i]) == 0)
{
return 1;
}
}
return 0;
}
/************************************************************ /************************************************************
*功能描述: 插入属性到数据库 *功能描述: 插入属性到数据库
*输入参数: deviceCode:设备deviceCode *输入参数: deviceCode:设备deviceCode
...@@ -177,21 +228,37 @@ static int _kk_check_property_exist(const char* deviceCode,const char* identifie ...@@ -177,21 +228,37 @@ static int _kk_check_property_exist(const char* deviceCode,const char* identifie
int kk_property_db_insert(const char *deviceCode,const char *identifier,kk_tsl_data_type_e valuetype,int devtype) int kk_property_db_insert(const char *deviceCode,const char *identifier,kk_tsl_data_type_e valuetype,int devtype)
{ {
printf("---------------------------------------->identifier:%s\n",identifier);
dm_mgr_dev_node_t *node = NULL;
int res = 0 ;
const char *insertCmd = "insert into PropertiesInfo (deviceCode,identifier,value,valueType,devType) \ const char *insertCmd = "insert into PropertiesInfo (deviceCode,identifier,value,valueType,devType) \
values ('%s','%s','%s','%d','%d');"; values ('%s','%s','%s','%d','%d');";
char *sqlCmd = NULL; char *sqlCmd = NULL;
int rc = 0; int rc = 0;
char *zErrMsg = 0; char *zErrMsg = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx(); kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
printf("---------------------------------------->1\n");
if(_kk_check_property_exist(deviceCode,identifier) == 1) if(_kk_check_property_exist(deviceCode,identifier) == 1)
{ {
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
printf("---------------------------------------->2\n");
_kk_property_db_lock(); _kk_property_db_lock();
//传感器类默认安防等级为离家安防 //传感器类默认安防等级为离家安防
if(strcmp(identifier,"SensorType") == 0 && devtype == KK_DM_DEVICE_SUBDEV){ if(strcmp(identifier,"SensorType") == 0 && devtype == KK_DM_DEVICE_SUBDEV){
res = dm_mgr_get_device_by_devicecode(deviceCode, &node);
if (res != SUCCESS_RETURN) {
return FAIL_RETURN;
}
printf("---------------------------------------->3\n");
if(_kk_check_human_induction_device(node->productCode) == 1 || //门磁和人体默认室外安防
_kk_check_door_induction_device(node->productCode) == 1){
sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,identifier,"1",valuetype,devtype); sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,identifier,"1",valuetype,devtype);
}else{
printf("---------------------------------------->\n");
sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,identifier,"2",valuetype,devtype);//其他24小时警戒
}
}else{ }else{
sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,identifier,"",valuetype,devtype); sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,identifier,"",valuetype,devtype);
} }
...@@ -240,7 +307,166 @@ int kk_property_db_update_value(const char *deviceCode,const char *identifier,co ...@@ -240,7 +307,166 @@ int kk_property_db_update_value(const char *deviceCode,const char *identifier,co
_kk_property_db_unlock(); _kk_property_db_unlock();
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int _kk_check_indoorAir_exist(const char* deviceCode,const char *identifier,int epNum)
{
int isExist = 0;
sqlite3_stmt *stmt;
char *pDeviceCode = NULL;
char *pIdentifier = NULL;
int epNumDb = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
const char *searchCmd = "select * from indoorAirProperties;";
_kk_property_db_lock();
sqlite3_prepare_v2(ctx->pDb, searchCmd, strlen(searchCmd), &stmt, NULL);
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while(sqlite3_step(stmt) == SQLITE_ROW){
pDeviceCode = (char*)sqlite3_column_text(stmt, DB_INDOORAIR_DEVICECODE);
pIdentifier = (char*)sqlite3_column_text(stmt, DB_INDOORAIR_IDENTIFITER);
epNumDb = sqlite3_column_int(stmt, DB_INDOORAIR_EPNUM);
if((strcmp(deviceCode,pDeviceCode) == 0) && (strcmp(identifier,pIdentifier) == 0)&& (epNumDb == epNum))
{
isExist = 1;
break;
}
}
//INFO_PRINT("\n");
sqlite3_finalize(stmt);
_kk_property_db_unlock();
return isExist;
}
/************************************************************
*功能描述: 插入空调内机属性到数据库
*输入参数: deviceCode:设备deviceCode
epNum:内机端点
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:属性的值插入的时候先置空,后续再update
*************************************************************/
int kk_indoorAir_db_insert(const char *deviceCode,const char *identifier,kk_tsl_data_type_e valuetype,int epNum)
{
const char *insertCmd = "insert into indoorAirProperties (deviceCode,identifier,value,valueType,epNum) \
values ('%s','%s','%s','%d','%d');";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
if(_kk_check_indoorAir_exist(deviceCode,identifier,epNum) == 1){
return SUCCESS_RETURN;
}
_kk_property_db_lock();
sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,identifier,"",valuetype,epNum);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_property_db_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 查询空调内机数量
*输入参数: deviceCode:设备deviceCode
epNum:内机端点
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:属性的值插入的时候先置空,后续再update
*************************************************************/
int kk_indoorAir_query_epnums(const char *deviceCode,int epList[])
{
char *sqlCmd = NULL;
//int rc = 0;
//char *zErrMsg = 0;
sqlite3_stmt *stmt;
char *valueStr = NULL;
int count = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
_kk_property_db_lock();
sqlCmd = sqlite3_mprintf("select * from indoorAirProperties WHERE deviceCode= '%s' and identifier = '%s'",deviceCode,"PowerSwitch");
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
if(count > 64){
return count;
}
printf("-----------------------------------------------kk_indoorAir_query_epnums\n");
epList[count] = sqlite3_column_int(stmt, DB_INDOORAIR_EPNUM);
printf("epList[count] :%d\n",epList[count]);
count++;
}
sqlite3_free(sqlCmd);
_kk_property_db_unlock();
sqlite3_finalize(stmt);
return count;
}
/************************************************************
*功能描述:通过deviceCode删除空调内机
*输入参数: deviceCode:设备deviceCode
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_indoorAir_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
{
const char *deleteCmd = "delete from indoorAirProperties where deviceCode = '%s';";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
_kk_property_db_lock();
sqlCmd = sqlite3_mprintf(deleteCmd,deviceCode);
INFO_PRINT("Table delete data sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
INFO_PRINT("Table delete data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_property_db_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 更新属性值
*输入参数: deviceCode:设备deviceCode
identifier:属性名称
value:属性值
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_indoorAir_db_update_value(const char *deviceCode,const char *identifier,const char* value,int epNum)
{
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
_kk_property_db_lock();
//if()
sqlCmd = sqlite3_mprintf("UPDATE indoorAirProperties SET value='%s' WHERE (deviceCode= '%s' and epNum = '%d') and (identifier = '%s') ",value,deviceCode,epNum,identifier);
//DEBUG_PRINT("kk_property_db_update_value sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
//DEBUG_PRINT("kk_property_db_update_value successfully\n");
}
sqlite3_free(sqlCmd);
_kk_property_db_unlock();
return SUCCESS_RETURN;
}
/************************************************************ /************************************************************
*功能描述: 获取属性值 *功能描述: 获取属性值
*输入参数: deviceCode:设备deviceCode *输入参数: deviceCode:设备deviceCode
......
...@@ -32,7 +32,14 @@ enum{ ...@@ -32,7 +32,14 @@ enum{
DB_VALUETYPE, DB_VALUETYPE,
DB_DEVTYPE DB_DEVTYPE
}; };
enum{
DB_INDOORAIR_IDX = 0,
DB_INDOORAIR_DEVICECODE,
DB_INDOORAIR_IDENTIFITER,
DB_INDOORAIR_VALUE,
DB_INDOORAIR_VALUETYPE,
DB_INDOORAIR_EPNUM
};
int kk_property_db_init(void); int kk_property_db_init(void);
int kk_property_db_get_rawdata(const char *identifier,const int dev_type, kk_prop_raw_struct_t* raw, int count); int kk_property_db_get_rawdata(const char *identifier,const int dev_type, kk_prop_raw_struct_t* raw, int count);
int kk_property_db_update_value(const char *deviceCode,const char *identifier,const char* value); int kk_property_db_update_value(const char *deviceCode,const char *identifier,const char* value);
...@@ -46,5 +53,8 @@ int kk_property_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]); ...@@ -46,5 +53,8 @@ int kk_property_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]);
int kk_property_update_lockkeys(char deviceCode[DEVICE_CODE_MAXLEN],char *keyId,int KeyType, int KeyRole, \ int kk_property_update_lockkeys(char deviceCode[DEVICE_CODE_MAXLEN],char *keyId,int KeyType, int KeyRole, \
int IsValid,char *KeyName,int KeyEffectiveTime,int KeyExpiryTime); int IsValid,char *KeyName,int KeyEffectiveTime,int KeyExpiryTime);
int kk_property_delete_lockkeys(char deviceCode[DEVICE_CODE_MAXLEN],char *keyId); int kk_property_delete_lockkeys(char deviceCode[DEVICE_CODE_MAXLEN],char *keyId);
int kk_indoorAir_db_insert(const char *deviceCode,const char *identifier,kk_tsl_data_type_e valuetype,int epNum);
int kk_indoorAir_db_update_value(const char *deviceCode,const char *identifier,const char* value,int epNum);
int kk_indoorAir_query_epnums(const char *deviceCode,int epList[]);
#endif #endif
...@@ -79,8 +79,9 @@ int kk_sync_init(void) ...@@ -79,8 +79,9 @@ int kk_sync_init(void)
static cJSON * kk_get_room_devices(const char *roomId) static cJSON * kk_get_room_devices(const char *roomId)
{ {
dm_mgr_dev_node_t *node = NULL;
const char *selectCmd = "select * from AreaDevInfo WHERE roomId = '%s';"; const char *selectCmd = "select * from AreaDevInfo WHERE roomId = '%s';";
int res = 0;
char *sqlCmd = NULL; char *sqlCmd = NULL;
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
char *deviceCode = NULL; char *deviceCode = NULL;
...@@ -96,12 +97,20 @@ static cJSON * kk_get_room_devices(const char *roomId) ...@@ -96,12 +97,20 @@ static cJSON * kk_get_room_devices(const char *roomId)
deviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE); deviceCode = (char*)sqlite3_column_text(stmt, DB_DEV_DEVICECODE);
epNum = (char*)sqlite3_column_text(stmt, DB_DEV_EPNUM); epNum = (char*)sqlite3_column_text(stmt, DB_DEV_EPNUM);
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;
}
if(kk_check_multi_ep_num(deviceCode)){ if(kk_check_multi_ep_num(deviceCode)){
cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum); cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum);
}else if(strcmp(node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0){
if(atoi(epNum) == 1){//epNum为1的是空调网关
continue;
}else{
cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum);
}
} }
cJSON_AddStringToObject(dev,KK_SYNC_DEVICECODE_STR,deviceCode); cJSON_AddStringToObject(dev,KK_SYNC_DEVICECODE_STR,deviceCode);
//cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum); //cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum);
kk_get_device_name(deviceCode,epNum,devName,sizeof(devName)); kk_get_device_name(deviceCode,epNum,devName,sizeof(devName));
...@@ -367,6 +376,61 @@ static cJSON *kk_get_properties_info(char *deviceCode,int devType) ...@@ -367,6 +376,61 @@ static cJSON *kk_get_properties_info(char *deviceCode,int devType)
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return obj; return obj;
} }
static cJSON *kk_get_indoor_properties_info(char *deviceCode)
{
char *sqlCmd = NULL;
//char *zErrMsg = 0;
sqlite3_stmt *stmt;
char *propertyStr = NULL;
char *valueStr = NULL;
int valueType = 0;
int eplist[65] = {0};
int count = 0,i = 0;
char *ptr = NULL;
kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
if(deviceCode == NULL){
return NULL;
}
cJSON *obj = cJSON_CreateObject();
cJSON *eps = cJSON_CreateArray();
count = kk_indoorAir_query_epnums(deviceCode,eplist);
printf("-------------->count:%d\n",count);
for(i = 0; i < count; i++){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
sqlCmd = sqlite3_mprintf("select * from indoorAirProperties WHERE deviceCode = '%s' and epNum=%d;",deviceCode,eplist[i]);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
cJSON *propertyItem = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddNumberToObject(propertyItem, "epNum",eplist[i]);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
while(sqlite3_step(stmt) == SQLITE_ROW){
propertyStr = (char*)sqlite3_column_text(stmt, DB_INDOORAIR_IDENTIFITER);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
valueType = sqlite3_column_int(stmt, DB_INDOORAIR_VALUETYPE);
valueStr = (char*)sqlite3_column_text(stmt, DB_INDOORAIR_VALUE);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if(valueType == KK_TSL_DATA_TYPE_TEXT){
cJSON_AddStringToObject(propertyItem, propertyStr, valueStr);
}else if(valueType == KK_TSL_DATA_TYPE_INT||
valueType == KK_TSL_DATA_TYPE_ENUM||
valueType == KK_TSL_DATA_TYPE_BOOL){
cJSON_AddNumberToObject(propertyItem, propertyStr, atoi(valueStr));
}else if(valueType == KK_TSL_DATA_TYPE_DOUBLE){
cJSON_AddNumberToObject(propertyItem, propertyStr, atof(valueStr));
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
}
cJSON_AddItemToArray(eps,propertyItem);
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddItemToObject(obj, "eps", eps);
cJSON_AddNumberToObject(obj, "EpTotal", count);
cJSON_AddNumberToObject(obj, "CombineDeviceFlag", 1);
sqlite3_free(sqlCmd);
sqlite3_finalize(stmt);
return obj;
}
static int kk_get_properties_info_obj(char *deviceCode) static int kk_get_properties_info_obj(char *deviceCode)
{ {
char *sqlCmd = NULL; char *sqlCmd = NULL;
...@@ -471,6 +535,7 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode) ...@@ -471,6 +535,7 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
kk_sync_ctx_t *ctx = _kk_sync_get_ctx(); kk_sync_ctx_t *ctx = _kk_sync_get_ctx();
char *subDeviceCode = NULL; char *subDeviceCode = NULL;
char *subProductCode = NULL; char *subProductCode = NULL;
char *subproductType = NULL;
char *subVersion = NULL; char *subVersion = NULL;
char *subIsline = NULL; char *subIsline = NULL;
if(gwdevicesItem == NULL || deviceCode == NULL){ if(gwdevicesItem == NULL || deviceCode == NULL){
...@@ -489,6 +554,7 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode) ...@@ -489,6 +554,7 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
subProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE); subProductCode = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTCODE);
subVersion = (char*)sqlite3_column_text(stmt, DB_SUB_VERSION); subVersion = (char*)sqlite3_column_text(stmt, DB_SUB_VERSION);
subIsline = (char*)sqlite3_column_text(stmt, DB_SUB_ONLINE); subIsline = (char*)sqlite3_column_text(stmt, DB_SUB_ONLINE);
subproductType = (char*)sqlite3_column_text(stmt, DB_SUB_PRODUCTTYPE);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_DEVICECODE_STR, subDeviceCode); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_DEVICECODE_STR, subDeviceCode);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_VERSION_STR, subVersion); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_VERSION_STR, subVersion);
cJSON_AddStringToObject(subdevicesItem, KK_SYNC_MAC_STR, subDeviceCode); cJSON_AddStringToObject(subdevicesItem, KK_SYNC_MAC_STR, subDeviceCode);
...@@ -503,7 +569,10 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode) ...@@ -503,7 +569,10 @@ static int kk_get_sub_devices_info(cJSON *gwdevicesItem,char *deviceCode)
if(kk_check_multi_ep_num(subDeviceCode)){ if(kk_check_multi_ep_num(subDeviceCode)){
properties=kk_get_properties_info(subDeviceCode,KK_DM_DEVICE_SUBDEV); properties=kk_get_properties_info(subDeviceCode,KK_DM_DEVICE_SUBDEV);
}else{ }else if(strcmp(subproductType,KK_DM_AIR_GATEWAY_TYPE) == 0){
properties=kk_get_indoor_properties_info(subDeviceCode);
}
else{
properties=kk_get_properties_info_obj(subDeviceCode); properties=kk_get_properties_info_obj(subDeviceCode);
} }
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include "kk_log.h" #include "kk_log.h"
#include "kk_hal.h" #include "kk_hal.h"
#include "kk_history_db.h" #include "kk_history_db.h"
#include "kk_dm_mng.h"
/************************************************************* /*************************************************************
全局变量定义 全局变量定义
...@@ -168,6 +168,38 @@ err1: ...@@ -168,6 +168,38 @@ err1:
return -1; return -1;
} }
cJSON * kk_history_get_sensor_info(void)
{
char *pDeviceCode = NULL;
char *pident = NULL;
char *pValue = NULL;
int res = 0;
time_t rtime = 0;
kk_history_ctx_t *ctx = _kk_history_get_ctx();
char *selectCmd = "select * from SensorHistoryInfo";
sqlite3_stmt *stmt = NULL;
sqlite3_prepare_v2(ctx->pDb, selectCmd, strlen(selectCmd), &stmt, NULL);
cJSON * arrayObj = cJSON_CreateArray();
while(sqlite3_step(stmt) == SQLITE_ROW){
cJSON *infoItem = cJSON_CreateObject();
pDeviceCode = (const char*)sqlite3_column_text(stmt, DB_SENSOR_DEVICECODE);
dm_mgr_dev_node_t *search_node = NULL;
res = dm_mgr_get_device_by_devicecode(pDeviceCode,&search_node);
if (res < 0) {
continue;
}
cJSON_AddStringToObject(infoItem, "productCode", search_node->productCode);
pident = (const char*)sqlite3_column_text(stmt, DB_SENSOR_IDENTIFIER);
cJSON_AddStringToObject(infoItem, "identifier", pident);
pValue = (const char*)sqlite3_column_text(stmt, DB_SENSOR_VALUE);
cJSON_AddStringToObject(infoItem, "value", pValue);
rtime = sqlite3_column_int(stmt, DB_SENSOR_RECORDTIME);
cJSON_AddNumberToObject(infoItem, "alarm_time", rtime);
cJSON_AddItemToArray(arrayObj, infoItem);
}
sqlite3_finalize(stmt);
return arrayObj;
}
/************************************************************ /************************************************************
*功能描述: 插入传感器警告类信息到数据库 *功能描述: 插入传感器警告类信息到数据库
......
#ifndef __KK_HISTORY_DB_H__ #ifndef __KK_HISTORY_DB_H__
#define __KK_HISTORY_DB_H__ #define __KK_HISTORY_DB_H__
#include "cJSON.h"
enum{ enum{
DB_SENSOR_DEVICECODE = 0, DB_SENSOR_DEVICECODE = 0,
DB_SENSOR_IDENTIFIER, DB_SENSOR_IDENTIFIER,
...@@ -18,5 +18,5 @@ int kk_history_db_init(void); ...@@ -18,5 +18,5 @@ int kk_history_db_init(void);
int kk_history_delete_by_recordtime(const char *table,time_t itime); int kk_history_delete_by_recordtime(const char *table,time_t itime);
int kk_history_insert_sensor_info(const char* deviceCode,const char* identifier,const char* valueStr,time_t itime); int kk_history_insert_sensor_info(const char* deviceCode,const char* identifier,const char* valueStr,time_t itime);
int kk_history_insert_Outlet_info(const char* deviceCode,const char* power,const char* metering,time_t itime); int kk_history_insert_Outlet_info(const char* deviceCode,const char* power,const char* metering,time_t itime);
cJSON * kk_history_get_sensor_info(void);
#endif #endif
...@@ -11,7 +11,7 @@ CFLAGS += -I$(TOP_DIR)/common/sqlite ...@@ -11,7 +11,7 @@ CFLAGS += -I$(TOP_DIR)/common/sqlite
CFLAGS += -I$(TOP_DIR)/src/tsl/tsl_handle CFLAGS += -I$(TOP_DIR)/src/tsl/tsl_handle
LDFLAGS += -lapi_com -liot_cjson -lkk_tsl LDFLAGS += -lapi_com -liot_cjson -lkk_tsl
LDFLAGS += -lm -lkk_hal LDFLAGS += -lm -lkk_hal
LDFLAGS += -lsqlite -ldl LDFLAGS += -lsqlite -ldl -lcurl
ifeq ($(CONFIG_MODEL),x86) ifeq ($(CONFIG_MODEL),x86)
LDFLAGS += -L$(TOP_DIR)/common/nanomsg -lnanomsg_ubuntu -lanl LDFLAGS += -L$(TOP_DIR)/common/nanomsg -lnanomsg_ubuntu -lanl
......
...@@ -39,6 +39,8 @@ ...@@ -39,6 +39,8 @@
#include "kk_scene_handle.h" #include "kk_scene_handle.h"
#include "dm_ota.h" #include "dm_ota.h"
#include "ccu_ver.h" #include "ccu_ver.h"
#include "kk_area_handle.h"
int g_timezone = 8; int g_timezone = 8;
char * g_filerToPlatTable[] = char * g_filerToPlatTable[] =
{ {
...@@ -47,15 +49,6 @@ char * g_filerToPlatTable[] = ...@@ -47,15 +49,6 @@ char * g_filerToPlatTable[] =
(char *){KK_LOGIN_TOPIC_REPLY}, (char *){KK_LOGIN_TOPIC_REPLY},
(char *){KK_THING_SERVICE_PROPERTY_GET}, (char *){KK_THING_SERVICE_PROPERTY_GET},
(char *){KK_THING_CLOUDSTATE_MSG}, (char *){KK_THING_CLOUDSTATE_MSG},
#if 0
{KK_THING_SERVICE_SETLOCALTIMER},
{KK_THING_SERVICE_GETLOCALTIMER},
{KK_THING_SERVICE_SETCOUNTDOWN},
{KK_THING_SERVICE_GETCOUNTDOWN},
{KK_THING_SERVICE_ADDKEY},
{KK_THING_SERVICE_DELETEKEY},
{KK_THING_SERVICE_MODIFYKEY},
#endif
(char *){KK_THING_SERVICE_ADDSCENC}, (char *){KK_THING_SERVICE_ADDSCENC},
(char *){KK_THING_SERVICE_UPDATESCENC}, (char *){KK_THING_SERVICE_UPDATESCENC},
(char *){KK_THING_SERVICE_DELETESCENC}, (char *){KK_THING_SERVICE_DELETESCENC},
...@@ -64,6 +57,8 @@ char * g_filerToPlatTable[] = ...@@ -64,6 +57,8 @@ char * g_filerToPlatTable[] =
(char *){KK_THING_SERVICE_BINDSCENE}, (char *){KK_THING_SERVICE_BINDSCENE},
(char *){KK_THING_SERVICE_UNBINDSBUTTTON}, (char *){KK_THING_SERVICE_UNBINDSBUTTTON},
(char *){KK_THING_SERVICE_ACTIVEBUTTON}, (char *){KK_THING_SERVICE_ACTIVEBUTTON},
(char *){KK_THING_SERVICE_HISTORYALARM},
(char *){KK_THING_SERVICE_DEL_HISTORYALARM},
}; };
static char s_ccuid[DEVICE_CODE_LEN] = {0}; static char s_ccuid[DEVICE_CODE_LEN] = {0};
static char s_Version[VERSION_MAXLEN] = {0}; static char s_Version[VERSION_MAXLEN] = {0};
...@@ -544,7 +539,7 @@ void gw2mid_cb(void* data, int len, char* chalMark){ ...@@ -544,7 +539,7 @@ void gw2mid_cb(void* data, int len, char* chalMark){
*返 回 值: 无 *返 回 值: 无
*其他说明: *其他说明:
*************************************************************/ *************************************************************/
static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier) static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier,char *valueBuf)
{ {
int currentValue = 0; int currentValue = 0;
char armingstate[16] = {0}; char armingstate[16] = {0};
...@@ -565,15 +560,22 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier) ...@@ -565,15 +560,22 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier)
cJSON_AddStringToObject(payload, "method", "thing.event.alarmNotify"); cJSON_AddStringToObject(payload, "method", "thing.event.alarmNotify");
cJSON_AddStringToObject(payload, "version", "1.0"); cJSON_AddStringToObject(payload, "version", "1.0");
cJSON_AddStringToObject(payload, "identifier", "alarmNotify"); cJSON_AddStringToObject(payload, "identifier", "alarmNotify");
cJSON_AddStringToObject(payload, "msgId", "1"); char msgId[64] = {0};
iotx_report_id(msgId);
cJSON_AddStringToObject(payload, "msgId", msgId);
//char timerStr[16] = {0}; //char timerStr[16] = {0};
//HAL_GetTime_s(timerStr); //HAL_GetTime_s(timerStr);
cJSON_AddNumberToObject(payload, "time", time(NULL)); cJSON_AddNumberToObject(payload, "time", HAL_GetTime_ms());
cJSON *param = cJSON_CreateObject(); cJSON *param = cJSON_CreateObject();
if(strcmp(identifier,"BatteryAlarm") == 0){ if(strcmp(identifier,"BatteryAlarm") == 0){
cJSON_AddStringToObject(param, "LowBatteryState", "1"); cJSON_AddStringToObject(param, "LowBatteryState", "1");
}else{ }else if(strcmp(identifier,"DismantleState") == 0 && atoi(valueBuf) == 1){
cJSON_AddStringToObject(param, "DismantleState", "1");
}else if(strcmp(identifier,"SmokeSensorState") == 0 && atoi(valueBuf) == 1){
cJSON_AddStringToObject(param, "CommonAlarmState", "1");
}
else{
cJSON_AddStringToObject(param, "CommonAlarmState", "1"); cJSON_AddStringToObject(param, "CommonAlarmState", "1");
} }
cJSON_AddItemToObject(payload, "params", param); cJSON_AddItemToObject(payload, "params", param);
...@@ -582,14 +584,17 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier) ...@@ -582,14 +584,17 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier)
if(currentValue == 2)//24小时警戒 if(currentValue == 2)//24小时警戒
{ {
kk_sendData2app(infff,payload11,0); kk_sendData2app(infff,payload11,0);
kk_history_insert_sensor_info(node->deviceCode,identifier,valueBuf,HAL_GetTime());
} }
else if(currentValue == 1 && atoi(armingstate) == 0) //离家布防 else if(currentValue == 1 && atoi(armingstate) == 0) //离家布防
{ {
kk_sendData2app(infff,payload11,0); kk_sendData2app(infff,payload11,0);
kk_history_insert_sensor_info(node->deviceCode,identifier,valueBuf,HAL_GetTime());
} }
else if(currentValue == 0 && atoi(armingstate) == 2) //在家布防 else if(currentValue == 0 && atoi(armingstate) == 2) //在家布防
{ {
kk_sendData2app(infff,payload11,0); kk_sendData2app(infff,payload11,0);
kk_history_insert_sensor_info(node->deviceCode,identifier,valueBuf,HAL_GetTime());
} }
else if(atoi(armingstate) == 3 && currentValue == 0 ) else if(atoi(armingstate) == 3 && currentValue == 0 )
{ {
...@@ -601,6 +606,7 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier) ...@@ -601,6 +606,7 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier)
INFO_PRINT("state: [%d] \n",state); INFO_PRINT("state: [%d] \n",state);
if(state){ if(state){
kk_sendData2app(infff,payload11,0); kk_sendData2app(infff,payload11,0);
kk_history_insert_sensor_info(node->deviceCode,identifier,valueBuf,HAL_GetTime());
} }
} }
} }
...@@ -610,7 +616,101 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier) ...@@ -610,7 +616,101 @@ static int kk_alarm_notify_handle(dm_mgr_dev_node_t *node,char *identifier)
cJSON_Delete(info); cJSON_Delete(info);
return 0; return 0;
} }
static int kk_indoorAir_property_save(cJSON *payload,char *deviceCode)
{
dm_mgr_dev_node_t *node = NULL;
kk_tsl_data_t *property = NULL;
cJSON *propertyItem = NULL;
int res = 0;
int idx = 0;
int epNumInt = 0;
cJSON *params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params == NULL) return FAIL_RETURN;
cJSON *eps = cJSON_GetObjectItem(params, "eps");
if(eps == NULL || eps->type != cJSON_Array){
return FAIL_RETURN;
}
res = dm_mgr_get_device_by_devicecode(deviceCode,&node);
if (res < SUCCESS_RETURN) {
return FAIL_RETURN;
}
cJSON *client_list = eps->child;
while(client_list != NULL){
cJSON *epNum = cJSON_GetObjectItem(client_list, "epNum");
if(epNum == NULL){
continue;
}
if(epNum->type == cJSON_Number){
epNumInt = epNum->valueint;
}else if(epNum->type == cJSON_String){
epNumInt = atoi(epNum->valuestring);
}
for(idx = 0; idx < node->dev_shadow->property_number; idx++){
property = (kk_tsl_data_t *)(node->dev_shadow->properties + idx);
if(property == NULL){
continue;
}
propertyItem = cJSON_GetObjectItem(client_list, property->identifier);
if(propertyItem != NULL){
if(property->data_value.type == KK_TSL_DATA_TYPE_INT ||property->data_value.type == KK_TSL_DATA_TYPE_ENUM
||property->data_value.type == KK_TSL_DATA_TYPE_BOOL){
char valBuf[16] = {0};
int value = propertyItem->valueint;
sprintf(valBuf,"%d",value);
kk_indoorAir_db_update_value(deviceCode,property->identifier,valBuf,epNumInt);
}else if(property->data_value.type == KK_TSL_DATA_TYPE_FLOAT || property->data_value.type == KK_TSL_DATA_TYPE_DOUBLE){
char valBuf[16] = {0};
sprintf(valBuf,"%f",propertyItem->valuedouble);
kk_indoorAir_db_update_value(deviceCode,property->identifier,valBuf,epNumInt);
}else if(property->data_value.type == KK_TSL_DATA_TYPE_TEXT ){
kk_indoorAir_db_update_value(deviceCode,property->identifier,propertyItem->valuestring,epNumInt);
}
}
}
client_list = client_list->next;
}
return 0;
}
static int kk_indoorAir_property_handle(cJSON *info,cJSON *payload,char *deviceCode)
{
kk_indoorAir_property_save(payload,deviceCode);
cJSON_AddStringToObject(payload, MSG_DEVICE_CODE_STR, deviceCode);
char *payload11=cJSON_Print(payload);
char *infff=cJSON_Print(info);
kk_sendData2app(infff,payload11,0);
free(payload11);
free(infff);
return 0;
}
static int kk_indoorAir_online_handle(dm_mgr_dev_node_t *node ,char *deviceCode,int epNum)
{
int idx = 0;
int gwExist = 0;
char roomId[32] = {0};
char roomName[256] = {0};
char epNumStr[10] = {0};
kk_tsl_data_t *property = NULL;
if(node == NULL){
return -1;
}
for(idx = 0; idx < node->dev_shadow->property_number; idx++){
property = (kk_tsl_data_t *)(node->dev_shadow->properties + idx);
if(property == NULL){
continue;
}
kk_indoorAir_db_insert(deviceCode,property->identifier,property->data_value.type,epNum);
}
gwExist = kk_get_device_roomInfo(deviceCode,1,roomName,roomId);//获取网关房间信息
if(gwExist){
char name[128] = {0};
sprintf(name,"空调%d",epNum);
sprintf(epNumStr,"%d",epNum);
kk_room_dev_add(roomId,roomName,deviceCode,epNumStr,name);
}
return 0;
}
void kk_platMsg_handle(void* data, char* chalMark){ void kk_platMsg_handle(void* data, char* chalMark){
int res = 0; int res = 0;
cJSON *json; cJSON *json;
...@@ -673,6 +773,21 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -673,6 +773,21 @@ void kk_platMsg_handle(void* data, char* chalMark){
} }
dm_mgr_update_timestamp_by_devicecode(devCode->valuestring,HAL_Uptimes()); dm_mgr_update_timestamp_by_devicecode(devCode->valuestring,HAL_Uptimes());
} }
else if (strstr(msgType->valuestring, KK_THING_STATUS_ONLINE) != NULL){//空调内机上报处理
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(jsonPay == NULL) goto error;
devCode = cJSON_GetObjectItem(jsonPay, MSG_DEVICE_CODE_STR);
dm_mgr_dev_node_t *search_node = NULL;
res = dm_mgr_get_device_by_devicecode(devCode->valuestring,&search_node);
if (res < SUCCESS_RETURN) {
goto error;
}
if(strcmp(search_node->productType,KK_DM_AIR_GATEWAY_TYPE) == 0){
cJSON *epNumJson = cJSON_GetObjectItem(jsonPay, "epNum");
if(epNumJson == NULL) goto error;
kk_indoorAir_online_handle(search_node,devCode->valuestring,epNumJson->valueint);
}
}
else if (strstr(msgType->valuestring, KK_THING_TOPO_BATCH_ADD_MSG) != NULL){ else if (strstr(msgType->valuestring, KK_THING_TOPO_BATCH_ADD_MSG) != NULL){
kk_ipc_send(IPC_MID2APP,data,strlen(data)); kk_ipc_send(IPC_MID2APP,data,strlen(data));
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
...@@ -702,6 +817,10 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -702,6 +817,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
/*如果是离线状态,上报在线给云端*/ /*如果是离线状态,上报在线给云端*/
dm_mgr_set_dev_onoffline(search_node,0); dm_mgr_set_dev_onoffline(search_node,0);
} }
if(strcmp(search_node->productType ,KK_DM_AIR_GATEWAY_TYPE) == 0){
kk_indoorAir_property_handle(info,payload,info_dcode->valuestring);
}
else{
/*插座类设备保存功率历史记录*/ /*插座类设备保存功率历史记录*/
if(strcmp(search_node->productType ,"outlet") == 0){ if(strcmp(search_node->productType ,"outlet") == 0){
cJSON *power = cJSON_GetObjectItem(jsonPay,"Power"); cJSON *power = cJSON_GetObjectItem(jsonPay,"Power");
...@@ -715,6 +834,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -715,6 +834,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
dm_msg_thing_property_post_by_identify(info_dcode->valuestring,jsonPay); dm_msg_thing_property_post_by_identify(info_dcode->valuestring,jsonPay);
kk_scene_iftt_check(info_dcode->valuestring,jsonPay); kk_scene_iftt_check(info_dcode->valuestring,jsonPay);
free(outstr); free(outstr);
}
}else if(strstr(msgType->valuestring, KK_THING_TOPO_DELETE_MSG) != NULL){ }else if(strstr(msgType->valuestring, KK_THING_TOPO_DELETE_MSG) != NULL){
INFO_PRINT("kk_platMsg_handle data: handle delete\n"); INFO_PRINT("kk_platMsg_handle data: handle delete\n");
jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR); jsonPay = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
...@@ -756,7 +876,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -756,7 +876,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
sprintf(btnId,"%d",buttonId->valueint); sprintf(btnId,"%d",buttonId->valueint);
kk_scene_execute_quickpanel(btnId,info_dcode->valuestring); kk_scene_execute_quickpanel(btnId,info_dcode->valuestring);
} }
INFO_PRINT("kk_platMsg_handle event post enters \n"); INFO_PRINT("-------------------kk_platMsg_handle event post enters \n");
for(idx = 0; idx < node->dev_shadow->event_number; idx++){ for(idx = 0; idx < node->dev_shadow->event_number; idx++){
eventItem = node->dev_shadow->events + idx; eventItem = node->dev_shadow->events + idx;
if(eventItem != NULL){ if(eventItem != NULL){
...@@ -767,6 +887,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -767,6 +887,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
for(index = 0; index < eventItem->output_data_number;index++){ for(index = 0; index < eventItem->output_data_number;index++){
itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier); itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier);
itemData = eventItem->output_datas + index; itemData = eventItem->output_datas + index;
printf("------------111--------->itemData->identifier:%s\n",itemData->identifier);
cJSON * itemDataIdentifier = cJSON_GetObjectItem(jsonPay, itemData->identifier); cJSON * itemDataIdentifier = cJSON_GetObjectItem(jsonPay, itemData->identifier);
if(itemDataIdentifier != NULL){ if(itemDataIdentifier != NULL){
memset(tmpStr,0x0,sizeof(tmpStr)); memset(tmpStr,0x0,sizeof(tmpStr));
...@@ -789,8 +910,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -789,8 +910,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,NULL,itemDataIdentifier->valuestring); kk_tsl_set_value(kk_tsl_set_event_output_value,node->dev_shadow,tmpStr,NULL,itemDataIdentifier->valuestring);
} }
if(sensorDev){ if(sensorDev){
kk_history_insert_sensor_info(info_dcode->valuestring,eventItem->identifier,valueBuf,HAL_GetTime()); kk_alarm_notify_handle(node,itemData->identifier,valueBuf);//告警信息处理
kk_alarm_notify_handle(node,eventItem->identifier);//告警信息处理
} }
INFO_PRINT("kk_platMsg_handle data: event post\n"); INFO_PRINT("kk_platMsg_handle data: event post\n");
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL); dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL);
...@@ -804,7 +924,7 @@ void kk_platMsg_handle(void* data, char* chalMark){ ...@@ -804,7 +924,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier); itemStr = cJSON_GetObjectItem(jsonPay, eventItem->identifier);
if(itemStr != NULL){ if(itemStr != NULL){
if(sensorDev){ if(sensorDev){
kk_history_insert_sensor_info(info_dcode->valuestring,eventItem->identifier,"",HAL_GetTime()); //kk_history_insert_sensor_info(info_dcode->valuestring,eventItem->identifier,"",HAL_GetTime());
} }
//kk_tsl_set_value(kk_tsl_set_event_output_value,dev_shadow,eventItem->identifier,&itemStr->valueint,NULL); //kk_tsl_set_value(kk_tsl_set_event_output_value,dev_shadow,eventItem->identifier,&itemStr->valueint,NULL);
dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL); dm_msg_thing_event_post(info_dcode->valuestring,eventItem->identifier,NULL);
......
{ {
"version": "1.2", "version": "1.3",
"update": "2020-11-25 17:12", "update": "2021-08-16",
"devices": [ "devices": [
{ {
...@@ -603,7 +603,7 @@ ...@@ -603,7 +603,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -624,7 +624,7 @@ ...@@ -624,7 +624,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -645,7 +645,7 @@ ...@@ -645,7 +645,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -666,7 +666,7 @@ ...@@ -666,7 +666,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -679,7 +679,7 @@ ...@@ -679,7 +679,7 @@
}, },
{ {
"pid": "00803033", "pid": "00803033",
"name": "XB Midea Air Condition Panel", "name": "XB Midea Air Condition Panel Z3KA",
"type": "ZR", "type": "ZR",
"ota": true, "ota": true,
"b_pid": 3033, "b_pid": 3033,
...@@ -687,7 +687,7 @@ ...@@ -687,7 +687,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -700,7 +700,7 @@ ...@@ -700,7 +700,7 @@
}, },
{ {
"pid": "00803034", "pid": "00803034",
"name": "XB Midea Air Condition Panel", "name": "XB Midea Air Condition Panel Z3ZA",
"type": "ZR", "type": "ZR",
"ota": true, "ota": true,
"b_pid": 3034, "b_pid": 3034,
...@@ -708,7 +708,7 @@ ...@@ -708,7 +708,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -721,7 +721,7 @@ ...@@ -721,7 +721,7 @@
}, },
{ {
"pid": "00803035", "pid": "00803035",
"name": "XB Daikin Air Condition Panel", "name": "XB Daikin Air Condition Panel Z3KA",
"type": "ZR", "type": "ZR",
"ota": true, "ota": true,
"b_pid": 3035, "b_pid": 3035,
...@@ -729,7 +729,7 @@ ...@@ -729,7 +729,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -750,7 +750,7 @@ ...@@ -750,7 +750,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -828,7 +828,7 @@ ...@@ -828,7 +828,7 @@
{ {
"pid": "0402002B", "pid": "0402002B",
"name": "iHORN gas detector", "name": "iHORN gas detector",
"type": "ZED", "type": "ZSED",
"ota": false, "ota": false,
"b_pid": 3040, "b_pid": 3040,
...@@ -869,6 +869,28 @@ ...@@ -869,6 +869,28 @@
} }
] ]
}, },
{
"pid": "0402000D",
"name": "KPL Body Sensor",
"type": "ZSED",
"ota": false,
"b_pid": 3042,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"000D",
"b_oid": 0,
"cluster": {
"client": "0003",
"server": "0000:0003:0500"
}
}
]
},
{ {
"pid": "0402010D", "pid": "0402010D",
"name": "Infrared Curtain Detector", "name": "Infrared Curtain Detector",
...@@ -891,6 +913,50 @@ ...@@ -891,6 +913,50 @@
} }
] ]
}, },
{
"pid": "04032225",
"name": "KPL Indoor Siren",
"type": "ZR",
"ota": true,
"b_pid": 3044,
"eps": [
{
"ep": "1",
"zid": "0403",
"zname": "IAS Warnning Device",
"zone_type":"0225",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "04022015",
"name": "KPL Door Seneor",
"type": "ZSED",
"ota": false,
"b_pid": 3045,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"0015",
"b_oid": 0,
"cluster": {
"client": "0003",
"server": "0000:0003:0500"
}
}
]
},
{ {
"pid": "00510001", "pid": "00510001",
"name": "KIT Quick Panel", "name": "KIT Quick Panel",
...@@ -1014,8 +1080,8 @@ ...@@ -1014,8 +1080,8 @@
"b_oid": 0, "b_oid": 0,
"cluster": { "cluster": {
"client": "0003:0019", "client": "0019",
"server": "0000:0003:0402:0405" "server": "0000:0001:0003:0400:0402:0405"
} }
} }
] ]
...@@ -1109,7 +1175,7 @@ ...@@ -1109,7 +1175,7 @@
}, },
{ {
"pid": "04031225", "pid": "04031225",
"name": "BD indoor siren", "name": "BD Indoor Siren",
"type": "ZR", "type": "ZR",
"ota": true, "ota": true,
"b_pid": 3057, "b_pid": 3057,
...@@ -1131,7 +1197,7 @@ ...@@ -1131,7 +1197,7 @@
}, },
{ {
"pid": "00803062", "pid": "00803062",
"name": "Center Air Conditioning PRO", "name": "Center Air Conditioning Gateway PRO",
"type": "ZR", "type": "ZR",
"ota": true, "ota": true,
"b_pid": 3062, "b_pid": 3062,
...@@ -1139,7 +1205,7 @@ ...@@ -1139,7 +1205,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1",
"zid": "0080", "zid": "0300",
"zname": "Heating Cooling Unit", "zname": "Heating Cooling Unit",
"b_oid": 0, "b_oid": 0,
...@@ -1150,6 +1216,27 @@ ...@@ -1150,6 +1216,27 @@
} }
] ]
}, },
{
"pid": "000A0001",
"name": "YM Doorlock",
"type": "ZSED",
"ota": false,
"b_pid": 3064,
"eps": [
{
"ep": "1",
"zid": "000A",
"zname": "Door Lock",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0001:0003:0101:0B05"
}
}
]
},
{ {
"pid": "02020000", "pid": "02020000",
"name": "DY Window Covering", "name": "DY Window Covering",
...@@ -1201,7 +1288,7 @@ ...@@ -1201,7 +1288,7 @@
"eps": [ "eps": [
{ {
"ep": "1", "ep": "1:2",
"zid": "0100", "zid": "0100",
"zname": "On/Off Light", "zname": "On/Off Light",
"b_oid": 0, "b_oid": 0,
...@@ -1325,7 +1412,7 @@ ...@@ -1325,7 +1412,7 @@
"cluster": { "cluster": {
"client": "0003:0019", "client": "0003:0019",
"server": "0000:0003:0402:0405" "server": "0000:0003:0402:0405:0400"
} }
} }
] ]
...@@ -1372,6 +1459,115 @@ ...@@ -1372,6 +1459,115 @@
} }
] ]
}, },
{
"pid": "3050",
"name": "iHORN Gas Sensor",
"type": "ZR",
"ota": true,
"b_pid": 3080,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"002B",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "3041",
"name": "iHORN Smoke Sensor",
"type": "ZSED",
"ota": true,
"b_pid": 3081,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"0028",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "0402102B",
"name": "BD Gas Sensor",
"type": "ZR",
"ota": true,
"b_pid": 3082,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"002B",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "04021028",
"name": "BD Smoke Sensor",
"type": "ZSED",
"ota": true,
"b_pid": 3083,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"0028",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "03020002",
"name": "Environment Detection Panel",
"type": "ZR",
"ota": true,
"b_pid": 3084,
"eps": [
{
"ep": "1",
"zid": "0302",
"zname": "Temperature Sensor",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0400:0402:0405:040D:042A:042B"
}
}
]
},
{ {
"pid": "00068631", "pid": "00068631",
"name": "HD Wall switch 1G", "name": "HD Wall switch 1G",
...@@ -1498,6 +1694,157 @@ ...@@ -1498,6 +1694,157 @@
} }
] ]
}, },
{
"pid": "03008603",
"name": "HD HVAC Floor Heating All in one",
"type": "ZR",
"ota": true,
"b_pid": 3090,
"eps": [
{
"ep": "1",
"zid": "0300",
"zname": "Heating Cooling Unit",
"b_oid": 0,
"cluster": {
"client": "0003:0006",
"server": "0000:0003:0004:0005:0006:0201:0202"
}
},
{
"ep": "2",
"zid": "0300",
"zname": "Heating Cooling Unit",
"b_oid": 0,
"cluster": {
"client": "0003:0006",
"server": "0000:0003:0004:0005:0006:0201"
}
},
{
"ep": "3",
"zid": "0300",
"zname": "Heating Cooling Unit",
"b_oid": 0,
"cluster": {
"client": "0003:0006",
"server": "0000:0003:0004:0005:0006:0201:0202"
}
}
]
},
{
"pid": "00060002",
"name": "Offline Voice Panel",
"type": "ZR",
"ota": true,
"b_pid": 3104,
"eps": [
{
"ep": "1:2:3:4",
"zid": "0103",
"zname": "On/Off Light Switch",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0004:0005:0006"
}
},
{
"ep": "5:6:7:8",
"zid": "0004",
"zname": "Scene Selector",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0004:0005:0006"
}
},
{
"ep": "9",
"zid": "0007",
"zname": "Combined Interface",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0008"
}
}
]
},
{
"pid": "04022028",
"name": "KPL Smoke Sensor",
"type": "ZSED",
"ota": true,
"b_pid": 3105,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"0028",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "0402202B",
"name": "KPL Gas Sensor",
"type": "ZR",
"ota": true,
"b_pid": 3106,
"eps": [
{
"ep": "1",
"zid": "0402",
"zname": "IAS Zone",
"zone_type":"002B",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0500"
}
}
]
},
{
"pid": "00020003",
"name": "BJ Water cut-off panel",
"type": "ZR",
"ota": true,
"b_pid": 3108,
"eps": [
{
"ep": "1",
"zid": "0002",
"zname": "On/Off Output",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0003:0004:0005:0006"
}
}
]
},
{ {
"pid": "00048612", "pid": "00048612",
"name": "XC Scene Panel 6G", "name": "XC Scene Panel 6G",
...@@ -1518,6 +1865,27 @@ ...@@ -1518,6 +1865,27 @@
} }
} }
] ]
},
{
"pid": "000A0002",
"name": "YC Doorlock",
"type": "ZSED",
"ota": false,
"b_pid": 4508,
"eps": [
{
"ep": "1",
"zid": "000A",
"zname": "Door Lock",
"b_oid": 0,
"cluster": {
"client": "0003:0019",
"server": "0000:0001:0003:0101:0B05"
}
}
]
} }
] ]
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ sqlite_File="/app/ccuApps/lib/libsqlite3.so.0" ...@@ -5,6 +5,7 @@ sqlite_File="/app/ccuApps/lib/libsqlite3.so.0"
run_Dir="/data/kk" run_Dir="/data/kk"
tsl_Dir="${run_Dir}/tsl" tsl_Dir="${run_Dir}/tsl"
map_Dir="${run_Dir}/map"
#dev_cfg_Dir="${run_Dir}/dev_config_table" #dev_cfg_Dir="${run_Dir}/dev_config_table"
#cd /sbin/ #cd /sbin/
...@@ -16,10 +17,12 @@ if [ ! -d "$run_Dir" ]; then ...@@ -16,10 +17,12 @@ if [ ! -d "$run_Dir" ]; then
mkdir ${run_Dir} mkdir ${run_Dir}
fi fi
if [ ! -d "$tsl_Dir" ]; then if [ ! -d "$tsl_Dir" ]; then
cp -rf /app/ccuApps/tsl ${run_Dir}/ cp -rf /app/ccuApps/tsl ${run_Dir}/
fi fi
if [ ! -d "$map_Dir" ]; then
cp -rf /app/ccuApps/map ${run_Dir}/
fi
cd /app/ccuApps/lib cd /app/ccuApps/lib
if [ ! -f "$nanomsg_File" ]; then if [ ! -f "$nanomsg_File" ]; then
...@@ -42,6 +45,9 @@ sleep 3 ...@@ -42,6 +45,9 @@ sleep 3
sleep 1 sleep 1
#/home/kk/process_check.sh >/dev/null 2>&1 & #/home/kk/process_check.sh >/dev/null 2>&1 &
/app/ccuApps/bin/smarthome_z3gw_nx5 -r1 -l3 --device-def=/app/ccuApps/kk_device_def.json --db=/data/kk/kk_z3gw.db --uart=/dev/ttyS1& /app/ccuApps/bin/smarthome_z3gw_nx5 -r1 -l3 --device-def=/app/ccuApps/kk_device_def.json --db=/data/kk/kk_z3gw.db --uart=/dev/ttyS1&
sleep 2
/app/ccuApps/bin/kk_lan &
sleep 1 sleep 1
echo "*/1 * * * * /app/ccuApps/process_check.sh" > /etc/cron.d/ccu || { echo "ERROR:add ccu crontab rule failed."; exit 1;}
ntpd -n -q -d -p stdtime.gov.hk & ntpd -n -q -d -p stdtime.gov.hk &
exit 0 exit 0
\ No newline at end of file
#!/bin/sh #!/bin/sh
#判断进程是否存在,如果不存在就启动它 #判断进程是否存在,如果不存在就启动它
while true
do
sleep 30
PIDS=`ps|grep kk_midware |grep -v grep | awk '{print $1}'` PIDS=`ps|grep kk_midware |grep -v grep | awk '{print $1}'`
if [ "$PIDS" != "" ]; then if [ "$PIDS" != "" ]; then
echo "kk_midware is runing!" echo "kk_midware is runing!"
else else
/home/kk/kk_midware >/dev/null 2>&1 & export LD_LIBRARY_PATH=/app/ccuApps/lib
/app/ccuApps/bin/kk_midware &
#运行进程 #运行进程
fi fi
sleep 30 sleep 3
PIDS=`ps|grep kcloud |grep -v grep | awk '{print $1}'` PIDS=`ps|grep kk_cloud |grep -v grep | awk '{print $1}'`
if [ "$PIDS" != "" ]; then if [ "$PIDS" != "" ]; then
echo "kcloud is runing!" echo "kk_cloud is runing!"
else else
echo "kcloud is not running ,now restart kk_midware and kcloud" echo "kk_cloud is not running ,now restart kk_midware and kk_cloud"
pgrep kk_midware | xargs kill -s 9 export LD_LIBRARY_PATH=/app/ccuApps/lib
/home/kk/kk_midware >/dev/null 2>&1 & /app/ccuApps/bin/kk_cloud &
/home/kk/kcloud >/dev/null 2>&1 &
fi fi
sleep 30 sleep 1
PIDS=`ps|grep Z3GatewayHost |grep -v grep | awk '{print $1}'` PIDS=`ps|grep smarthome_z3gw_nx5 |grep -v grep | awk '{print $1}'`
if [ "$PIDS" != "" ]; then if [ "$PIDS" != "" ]; then
echo "Z3GatewayHost is runing!" echo "smarthome_z3gw_nx5 is runing!"
else else
echo "Z3GatewayHost is not running ,now restart Z3GatewayHost" echo "smarthome_z3gw_nx5 is not running ,now restart smarthome_z3gw_nx5"
pgrep Z3GatewayHost | xargs kill -s 9 export LD_LIBRARY_PATH=/app/ccuApps/lib
/home/kk/Z3GatewayHost -f x -p /dev/ttyS0 >/dev/null 2>&1 & /app/ccuApps/bin/smarthome_z3gw_nx5 -r1 -l3 --device-def=/app/ccuApps/kk_device_def.json --db=/data/kk/kk_z3gw.db --uart=/dev/ttyS1&
fi
sleep 1
PIDS=`ps|grep kk_lan |grep -v grep | awk '{print $1}'`
if [ "$PIDS" != "" ]; then
echo "kk_lan is runing!"
else
echo "kk_lan is not running ,now restart kk_lan"
export LD_LIBRARY_PATH=/app/ccuApps/lib
/app/ccuApps/bin/kk_lan &
fi fi
done
...@@ -203,6 +203,7 @@ package: ...@@ -203,6 +203,7 @@ package:
mkdir $(releaseDir) mkdir $(releaseDir)
mkdir $(releaseDir)/lib mkdir $(releaseDir)/lib
mkdir $(releaseDir)/bin mkdir $(releaseDir)/bin
mkdir $(releaseDir)/map
cp -rf $(TOP_DIR)/tsl $(TOP_DIR)/$(releaseDir) cp -rf $(TOP_DIR)/tsl $(TOP_DIR)/$(releaseDir)
cp -rf $(TOP_DIR)/output/release/lib/*.so $(TOP_DIR)/$(releaseDir)/lib cp -rf $(TOP_DIR)/output/release/lib/*.so $(TOP_DIR)/$(releaseDir)/lib
cp -rf $(TOP_DIR)/output/release/bin/* $(TOP_DIR)/$(releaseDir)/bin cp -rf $(TOP_DIR)/output/release/bin/* $(TOP_DIR)/$(releaseDir)/bin
...@@ -210,6 +211,7 @@ package: ...@@ -210,6 +211,7 @@ package:
cp -rf $(TOP_DIR)/process_check.sh $(TOP_DIR)/$(releaseDir)/ cp -rf $(TOP_DIR)/process_check.sh $(TOP_DIR)/$(releaseDir)/
cp -rf $(TOP_DIR)/onboot.sh $(TOP_DIR)/$(releaseDir)/ cp -rf $(TOP_DIR)/onboot.sh $(TOP_DIR)/$(releaseDir)/
cp -rf $(TOP_DIR)/VERSION $(TOP_DIR)/$(releaseDir)/ cp -rf $(TOP_DIR)/VERSION $(TOP_DIR)/$(releaseDir)/
cp -rf $(TOP_DIR)/opcodeMapCfg/* $(TOP_DIR)/$(releaseDir)/map
#cp -rf $(TOP_DIR)/platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_config_table $(TOP_DIR)/$(releaseDir)/ #cp -rf $(TOP_DIR)/platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_config_table $(TOP_DIR)/$(releaseDir)/
#cp -rf $(TOP_DIR)/platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_map_table.json $(TOP_DIR)/$(releaseDir)/dev_config_table/ #cp -rf $(TOP_DIR)/platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_map_table.json $(TOP_DIR)/$(releaseDir)/dev_config_table/
ifeq ($(CONFIG_MODEL),ubuntu) ifeq ($(CONFIG_MODEL),ubuntu)
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
"method": "thing.service.property.set", "method": "thing.service.property.set",
"inputData": [ "inputData": [
{ {
"identifier": "TargetTemperature", "identifier": "Temperature",
"name": "目标温度", "name": "目标温度",
"dataType": { "dataType": {
"type": "double", "type": "double",
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
"desc": "属性获取", "desc": "属性获取",
"method": "thing.service.property.get", "method": "thing.service.property.get",
"inputData": [ "inputData": [
"TargetTemperature", "Temperature",
"CurrentTemperature", "CurrentTemperature",
"PowerSwitch", "PowerSwitch",
"ChildLockState", "ChildLockState",
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
], ],
"outputData": [ "outputData": [
{ {
"identifier": "TargetTemperature", "identifier": "Temperature",
"name": "目标温度", "name": "目标温度",
"dataType": { "dataType": {
"type": "double", "type": "double",
...@@ -189,7 +189,7 @@ ...@@ -189,7 +189,7 @@
} }
}, },
{ {
"identifier": "TargetTemperature", "identifier": "Temperature",
"name": "目标温度", "name": "目标温度",
"accessMode": "rw", "accessMode": "rw",
"required": true, "required": true,
...@@ -273,7 +273,7 @@ ...@@ -273,7 +273,7 @@
"method": "thing.event.property.post", "method": "thing.event.property.post",
"outputData": [ "outputData": [
{ {
"identifier": "TargetTemperature", "identifier": "Temperature",
"name": "目标温度", "name": "目标温度",
"dataType": { "dataType": {
"type": "double", "type": "double",
......
...@@ -120,7 +120,19 @@ ...@@ -120,7 +120,19 @@
"desc": "属性上报" "desc": "属性上报"
}, },
{ {
"outputData": [], "outputData":[
{
"identifier": "sosAlarmState",
"name": "紧急按钮告警状态",
"dataType": {
"type": "enum",
"specs": {
"0": "没有报警",
"1": "报警"
}
}
}
],
"identifier": "sosAlarm", "identifier": "sosAlarm",
"method": "thing.event.sosAlarm.post", "method": "thing.event.sosAlarm.post",
"name": "sosAlarm", "name": "sosAlarm",
......
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