Commit 26b97c85 authored by chen.weican's avatar chen.weican

【修改内容】1,增加主机的设备初始化和属性上报,以及属性状态监控。

【提交人】陈伟灿
parent 09bfaf87
......@@ -14,10 +14,12 @@
#define KK_FILTER_REGISTER_TOPIC_REPLY "/thing/sub/register_reply"
#define KK_FILTER_LOGIN_TOPIC "/thing/combine/login"
#define KK_FILTER_LOGIN_TOPIC_REPLY "/thing/combine/login_reply"
#define KK_FILTER_SET_TOPIC "/thing/service/property/set"
#define KK_FILTER_SET_TOPIC_REPLY "/thing/service/property/set_reply"
#define KK_FILTER_EVENT_POST_TOPIC "/thing/event/property/post"
#define KK_FILTER_EVENT_POST_REPLY "/thing/event/property/post_reply"
#define KK_FILTER_SET_TOPIC "/thing/service/property/set"
#define KK_FILTER_SET_TOPIC_REPLY "/thing/service/property/set_reply"
#define KK_FILTER_EVENT_POST_TOPIC "/thing/event/property/post"
#define KK_FILTER_EVENT_POST_REPLY "/thing/event/property/post_reply"
#define KK_CLOUDSTATE_MSG "/thing/ccu/cloudstate"
const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productType\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}";
#define KK_TOPIC_SERVICE_DELIMITER '/'
......@@ -191,7 +193,47 @@ static char * _kk_data_create(const char *topic,const char *data)
return out;
//free(out); /* Print to text, Delete the cJSON, print it, release the string. */
}
const char DM_MSG_CLOUDSTATE[] = "{\"msgId\":\"1\",\"version\":\"1.0\",\"params\":{\"IOTCloudState\":\"%d\"},\"method\":\"/thing/ccu/cloudstate\"}";
int KK_Send_CloudState(int state)
{
char *infoStr = NULL;
char *payloadStr = NULL;
int infoStr_len = 0;
int payloadStr_len = 0;
cJSON *root;
char *out;
infoStr_len = strlen(DM_MSG_TO_MIDDWARE)+strlen(KK_CLOUDSTATE_MSG)+10;
infoStr = malloc(infoStr_len);
if(infoStr == NULL){
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
memset(infoStr,0x0,infoStr_len);
snprintf(infoStr,infoStr_len,DM_MSG_TO_MIDDWARE,KK_CLOUDSTATE_MSG,"","","");
payloadStr_len = strlen(DM_MSG_CLOUDSTATE) + 10;
payloadStr = malloc(payloadStr_len);
if(payloadStr == NULL){
ERROR_PRINT("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
memset(payloadStr,0x0,payloadStr_len);
snprintf(payloadStr,payloadStr_len,DM_MSG_CLOUDSTATE,state);
root=cJSON_CreateObject();
cJSON_AddStringToObject(root,MSG_INFO_STR,infoStr);
cJSON_AddStringToObject(root,MSG_PAYLOAD_STR,payloadStr);
out=cJSON_Print(root);
kk_ipc_send(IPC_APP2MID, out, strlen(out)+1);
cJSON_Delete(root);
free(payloadStr);
free(infoStr);
INFO_PRINT("[%s][%d]%s\n",__FUNCTION__,__LINE__,out);
free(out);
return 0;
}
void KK_Sendto_DevData(const char *topic,const char *data)
{
if(_check_invalid_topic(topic))
......
......@@ -26,7 +26,7 @@ static void connlost(void *context, char *cause)
INFO_PRINT("\nConnection lost\n");
INFO_PRINT("cause: %s\n", cause);
KK_Send_CloudState(0);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
......@@ -98,6 +98,7 @@ void onConnectFailure(void* context, MQTTAsync_failureData* response)
void onConnect(void* context, MQTTAsync_successData* response)
{
INFO_PRINT("Successful connection\n");
KK_Send_CloudState(1);
}
......
......@@ -61,7 +61,8 @@ typedef enum{
#define MSG_DEVICE_CODE_STR "deviceCode"
#define MSG_PAYLOAD_STR "payload"
#define MSG_INFO_STR "info"
#define MSG_INDENTIFIER_STR "identifier"
#define MSG_INDENTIFIER_STR "identifier"
#define MSG_PARAMS_STR "params"
typedef void ipc_cb(void* data, int len, char* chalMark);
int kk_ipc_init(ipc_type type, ipc_cb cb, char* chalMark, char* ip);
......
......@@ -99,19 +99,24 @@ static int _dm_init_tsl_params(int devId)
/*******set version***********/
HAL_GetVersion(version);
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_GATAWAY_VERSION_IDENTIFIER,NULL,version);
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_VERSION_IDENTIFIER,NULL,version);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
/*******set IP*************/
HAL_Get_IP(s_IP,NULL);
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_GATAWAY_IP_IDENTIFIER,NULL,s_IP);
//HAL_Get_IP(s_IP,NULL);
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_CCU_LANIP_IDENTIFIER,NULL,"0.0.0.0");
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_CCU_WANIP_IDENTIFIER,NULL,"0.0.0.0");
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
/*******set MAC*************/
HAL_Get_mac(s_mac);
......@@ -122,13 +127,26 @@ static int _dm_init_tsl_params(int devId)
}
/*******set port*************/
port = HAL_Get_port();
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_GATAWAY_PORT_IDENTIFIER,&port,NULL);
//port = HAL_Get_port();
//res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_GATAWAY_PORT_IDENTIFIER,&port,NULL);
//if(res != SUCCESS_RETURN)
//{
//ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
//}
/*******set wanState*************/
int wanState = 0;
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_CCU_WANSTATE_IDENTIFIER,&wanState,NULL);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
int IOTCloudState = 0;
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_CCU_IOTCLOUD_IDENTIFIER,&IOTCloudState,NULL);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
/*******set sn*************/
HAL_Get_SN(s_SN);
res = kk_tsl_set_value(kk_tsl_set_property_value,devId,KK_TSL_GATAWAY_SN_IDENTIFIER,NULL,s_SN);
......@@ -368,6 +386,9 @@ int dm_mgr_init(void)
if (res != SUCCESS_RETURN) {
goto ERROR;
}
else{
_dm_init_tsl_params(devId);
}
res = dm_mgr_device_create(KK_DM_DEVICE_GATEWAY,KK_DM_GW_DEVICE_PRODUCT_TYPE,KK_DM_GW_DEVICE_PRODUCT_CODE,"588E81FFFED3834A",deviceCode,&devId);
if (res != SUCCESS_RETURN) {
......@@ -409,6 +430,7 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
char timestamp[DM_UTILS_UINT64_STRLEN] = {0};
dm_mgr_dev_node_t *node = NULL;
int paramLen = 0;
int msgTypeLen = 0;
char *payload_param = NULL;
res = dm_mgr_search_dev_by_devid(devid, &node);
if (res != SUCCESS_RETURN) {
......@@ -430,11 +452,13 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
request->msgid = msgid;
request->devid = devid;
request->msgTypeStr = malloc(strlen(DM_URI_THING_EVENT_POST) + strlen(identify) + 1);
msgTypeLen = strlen(DM_URI_THING_EVENT_POST) + strlen(identify) + 1;
request->msgTypeStr = malloc(msgTypeLen);
if(request->msgTypeStr == NULL){
return MEMORY_NOT_ENOUGH;
}
sprintf(request->msgTypeStr,DM_URI_THING_EVENT_POST,identify);
memset(request->msgTypeStr,0x0,msgTypeLen);
snprintf(request->msgTypeStr,msgTypeLen,DM_URI_THING_EVENT_POST,identify);
memcpy(request->productType, node->productType, strlen(node->productType));
memcpy(request->productCode, node->productCode, strlen(node->productCode));
memcpy(request->deviceCode, node->deviceCode, strlen(node->deviceCode));
......@@ -509,6 +533,7 @@ static int _kk_mgr_upstream_response_assemble(_IN_ int devid, _IN_ char *msgid,
_IN_ const char *identfy, _IN_ int code, _OU_ kk_msg_request_payload_t *request, _OU_ kk_msg_response_t *response)
{
int res = 0;
int msgTypeLen = 0;
dm_mgr_dev_node_t *node = NULL;
res = dm_mgr_search_dev_by_devid(devid, &node);
......@@ -519,11 +544,14 @@ static int _kk_mgr_upstream_response_assemble(_IN_ int devid, _IN_ char *msgid,
request->id.value = msgid;
request->id.value_length = msgid_len;
response->msgTypeStr = malloc(strlen(DM_URI_THING_SERVICE_RESPONSE) + strlen(identfy) + 1);
msgTypeLen = strlen(DM_URI_THING_SERVICE_RESPONSE) + strlen(identfy) + 1;
response->msgTypeStr = malloc(msgTypeLen);
if(response->msgTypeStr == NULL){
return MEMORY_NOT_ENOUGH;
}
sprintf(response->msgTypeStr,DM_URI_THING_SERVICE_RESPONSE,identfy);
memset(response->msgTypeStr,0x0,msgTypeLen);
snprintf(response->msgTypeStr,msgTypeLen,DM_URI_THING_SERVICE_RESPONSE,identfy);
memcpy(response->productType, node->productType, strlen(node->productType));
memcpy(response->productCode, node->productCode, strlen(node->productCode));
memcpy(response->deviceCode, node->deviceCode, strlen(node->deviceCode));
......
......@@ -46,6 +46,7 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_LOGIN_TOPIC_REPLY "/thing/combine/login_reply"
#define KK_THING_SERVICE_PROPERTY_SET "/thing/service/property/set"
#define KK_THING_OTA_DEVICE_UPGRADE "/ota/device/upgrade"
#define KK_THING_CLOUDSTATE_MSG "/thing/ccu/cloudstate"
//const char DM_URI_SYS_PREFIX[] DM_READ_ONLY = "/sys/%s/%s/";
......
......@@ -8,6 +8,7 @@
#include "cJSON.h"
#include "kk_dm_msg.h"
#include "kk_dm_api.h"
#include "kk_tsl_api.h"
#include "com_api.h"
#include "kk_log.h"
......@@ -287,6 +288,23 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
cJSON *deviceCode = cJSON_GetObjectItem(info, MSG_DEVICE_CODE_STR);
dm_msg_thing_property_set_reply(deviceCode->valuestring,payload->valuestring, strlen(payload->valuestring), NULL);
//kk_tsl_service_property_set(topic->valuestring, payload->valuestring, strlen(payload->valuestring), NULL);
}else if (strstr(typeJson->valuestring,KK_THING_CLOUDSTATE_MSG)){
INFO_PRINT("cloud state notify \n");
cJSON *payloadStr = cJSON_Parse(payload->valuestring);
cJSON *paramStr = cJSON_GetObjectItem(payloadStr, MSG_PARAMS_STR);
cJSON *state = cJSON_GetObjectItem(paramStr, "IOTCloudState");
int state_int = atoi(state->valuestring);
res = kk_tsl_set_value(kk_tsl_set_property_value,0,KK_TSL_CCU_WANSTATE_IDENTIFIER,&state_int,NULL);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
res = kk_tsl_set_value(kk_tsl_set_property_value,0,KK_TSL_CCU_IOTCLOUD_IDENTIFIER,&state_int,NULL);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
cJSON_Delete(payloadStr);
}else if (strstr(typeJson->valuestring,KK_THING_OTA_DEVICE_UPGRADE)){
INFO_PRINT("ota upgrade... \n");
kk_dm_ota_send(data, strlen(data)+1);
......
......@@ -14,6 +14,7 @@
#include "cJSON.h"
#include "kk_product.h"
#include "kk_tsl_common.h"
#include "kk_tsl_api.h"
#include "kk_dm_api.h"
#include "kk_log.h"
......@@ -202,8 +203,10 @@ typedef struct {
int permit_join;
void *g_mid_dispatch_thread;
void *g_ota_dispatch_thread;
void *g_ccuProChg_dispatch_thread;
int g_mid_dispatch_thread_running;
int g_ota_dispatch_thread_running;
int g_ccuProChg_dispatch_thread_running;
} mid_ctx_t;
#define MID_YIELD_TIMEOUT_MS (200)
......@@ -238,6 +241,61 @@ void *ota_dispatch_yield(void *args)
return NULL;
}
void *ccu_property_monitor(void *args)
{
mid_ctx_t *mid_ctx = kk_mid_get_ctx();
char s_IP[NETWORK_ADDR_LEN];
char *s_IP_TSL = NULL;
int res = 0;
int needReport = 0;
static int s_cloudStatus = 0;
int cloudState = 0;
int time_second = 10;
static int alreadyRepord = 0;
while (mid_ctx->g_ccuProChg_dispatch_thread_running) {
//dm_ota_yield(MID_YIELD_TIMEOUT_MS);
HAL_Get_IP(s_IP,NULL);
res = kk_tsl_get_value(kk_tsl_get_property_value,0,KK_TSL_CCU_WANIP_IDENTIFIER,NULL,&s_IP_TSL);
INFO_PRINT("current ip:%s,db ip:%s\n",s_IP,s_IP_TSL);
if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_tsl_get_value Failed\n");
}
else{
if(strcmp(s_IP,s_IP_TSL)){
kk_tsl_set_value(kk_tsl_set_property_value,0,KK_TSL_CCU_WANIP_IDENTIFIER,NULL,s_IP);
needReport = 1;
}
}
res = kk_tsl_get_value(kk_tsl_get_property_value,0,KK_TSL_CCU_IOTCLOUD_IDENTIFIER,&cloudState,NULL);
INFO_PRINT("current ip:%s,db ip:%s\n",s_IP,s_IP_TSL);
INFO_PRINT("cloudState:%d,s_cloudStatus:%d\n",cloudState,s_cloudStatus);
if(res != SUCCESS_RETURN){
ERROR_PRINT("kk_tsl_get_value Failed\n");
}
else{
if(s_cloudStatus == cloudState){
}else{
s_cloudStatus = cloudState;
needReport = 1;
}
}
if(alreadyRepord){
time_second = 60;
}
else{
time_second = 10;
}
if(needReport&&(cloudState == 1)){
kk_tsl_post_property(0,NULL);
needReport = 0;
alreadyRepord = 1;
}
sleep(time_second);
}
return NULL;
}
......@@ -291,6 +349,12 @@ int main(const int argc, const char **argv)
IOT_Linkkit_Close(mid_ctx->master_devid);
return -1;
}
mid_ctx->g_ccuProChg_dispatch_thread_running = 1;
res = pthread_create(&mid_ctx->g_ccuProChg_dispatch_thread, NULL, ccu_property_monitor, NULL);
if (res < 0) {
ERROR_PRINT("HAL_ThreadCreate Failed\n");
return -1;
}
int ct = 0;
for (;;) {
......
......@@ -63,6 +63,11 @@
#define KK_TSL_SPECIAL_EVENT_POST_IDENTIFIER "post"
#define KK_TSL_SPECIAL_EVENT_POST_METHOD "thing.event.property.post"
#define KK_TSL_VERSION_IDENTIFIER "Version"
#define KK_TSL_CCU_LANIP_IDENTIFIER "LanIPAddress"
#define KK_TSL_CCU_WANIP_IDENTIFIER "WanIPAddress"
#define KK_TSL_CCU_WANSTATE_IDENTIFIER "WanState"
#define KK_TSL_CCU_IOTCLOUD_IDENTIFIER "IOTCloudState"
#define KK_TSL_GATAWAY_VERSION_IDENTIFIER "Version"
#define KK_TSL_GATAWAY_IP_IDENTIFIER "IPAddress"
......
#include "kk_sub_tsl.h"
typedef unsigned char EmberEUI64[8];
typedef struct {
void *mutex;
int sub_devid;
......@@ -103,17 +105,20 @@ int kk_tsl_init(void)
//kk_test();
return SUCCESS_RETURN;
}
int kk_sub_tsl_add(const char *device_mac,const char *product_type)
int kk_sub_tsl_add(EmberEUI64 device_mac,const char *product_type)
{
sub_dev_node_t *node = NULL;
kk_sub_dev_ctx_t *ctx = _sub_dev_get_ctx();
char name[TSL_PATH_MAXLEN] = {0};
char *tsl_str = NULL;
int res = 0;
if(device_mac == NULL||product_type == NULL)
char macString[19] = {0};
if(product_type == NULL)
{
return INVALID_PARAMETER;
}
rpc_eui64ToString(device_mac,macString);
node = malloc(sizeof(sub_dev_node_t));
if (node == NULL) {
......@@ -122,7 +127,7 @@ int kk_sub_tsl_add(const char *device_mac,const char *product_type)
_sub_dev_mutex_lock();
memset(node,0,sizeof(sub_dev_node_t) );
memcpy(node->device_mac, device_mac, strlen(device_mac));
memcpy(node->device_mac, macString, strlen(macString));
memcpy(node->product_type, product_type, strlen(product_type));
node->devid = _sub_tsl_next_devid();
......
......@@ -12,16 +12,12 @@
#define _OU_
#endif
#define PRODUCT_KEY_MAXLEN (32 + 1)
#define DEVICE_NAME_MAXLEN (32 + 1)
#define DEVICE_SECRET_MAXLEN (64 + 1)
#define PRODUCT_TYPE_MAXLEN (32 + 1)
#define PRODUCT_CODE_MAXLEN (32 + 1)
#define DEVICE_CODE_MAXLEN (32 + 1)
#define DEVICE_MAC_MAXLEN (16 + 1)
#define DEVICE_SN_MAXLEN (32 + 1)
#define TSL_PATH_MAXLEN (64 + 1)
#define DM_UTILS_UINT16_STRLEN (5)
#define DM_UTILS_UINT32_STRLEN (10)
#define DM_UTILS_UINT64_STRLEN (20)
......@@ -66,7 +62,6 @@
#define KK_TSL_SPECIAL_EVENT_POST_METHOD "thing.event.property.post"
#define KK_TSL_GATAWAY_VERSION_IDENTIFIER "Version"
#define KK_TSL_GATAWAY_IP_IDENTIFIER "IPAddress"
#define KK_TSL_GATAWAY_MAC_IDENTIFIER "MACAddress"
#define KK_TSL_GATAWAY_PORT_IDENTIFIER "Port"
......
......@@ -483,14 +483,8 @@ void emAfDeviceTableLoad(void)
fscanf(fp, "%d", &data);
deviceTable[i].clusterOutStartPosition = (uint16_t) data;
deviceTable[i].state = EMBER_AF_PLUGIN_DEVICE_TABLE_STATE_JOINED;
char mac[17] = {0};
sprintf(mac,"%02X%02X%02X%02X%02X%02X%02X%02X",deviceTable[i].eui64[7],deviceTable[i].eui64[6],
deviceTable[i].eui64[5],deviceTable[i].eui64[4],deviceTable[i].eui64[3],deviceTable[i].eui64[2],
deviceTable[i].eui64[1],deviceTable[i].eui64[0]);
kk_sub_tsl_add(mac,"3");
deviceTable[i].state = EMBER_AF_PLUGIN_DEVICE_TABLE_STATE_JOINED;
kk_sub_tsl_add(deviceTable[i].eui64,"3");
}
deviceTable[i].lastMsgTimestamp = halCommonGetInt32uMillisecondTick();
......
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