|
|
@@ -24,6 +24,8 @@
|
|
|
#endif
|
|
|
|
|
|
|
|
|
+#define SEND_PERIOD 5000 //ms
|
|
|
+
|
|
|
#ifdef USE_MQTT
|
|
|
|
|
|
char *topic_sub[MQTT_SUB_MAX]={
|
|
|
@@ -47,17 +49,20 @@ char *topic_pub[MQTT_PUB_MAX]={
|
|
|
};
|
|
|
|
|
|
typedef struct mg_mgr mgr_t;
|
|
|
+typedef struct mg_timer mg_timer_t;
|
|
|
typedef struct mg_mqtt_opts mg_opts_t;
|
|
|
typedef struct mg_connection mg_conn_t;
|
|
|
|
|
|
typedef struct {
|
|
|
+ int id;
|
|
|
char topic[256];
|
|
|
char content[2048];
|
|
|
}mqtt_pkt_t;
|
|
|
typedef struct _mqtt_conn_t{
|
|
|
mg_conn_t *c;
|
|
|
mqtt_server_t ser;
|
|
|
- mg_opts_t opts;
|
|
|
+ //mg_opts_t opts;
|
|
|
+ uint8_t flag[MQTT_PUB_MAX];
|
|
|
}mqtt_conn_t;
|
|
|
typedef struct {
|
|
|
int inited;
|
|
|
@@ -69,10 +74,15 @@ typedef struct {
|
|
|
mqtt_conn_t conn[MQTT_SER_MAX];
|
|
|
|
|
|
handle_t list;
|
|
|
+ mg_timer_t *timer;
|
|
|
}mqtt_handle_t;
|
|
|
static mqtt_handle_t mqHandle={0};
|
|
|
static int my_recv(char *topic, char *data);
|
|
|
static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data);
|
|
|
+static void timer_start(mqtt_handle_t *h, int ms);
|
|
|
+static int send_stat(int type, int id);
|
|
|
+static uint32_t get_serv(char *json);
|
|
|
+static void send_once(void);
|
|
|
|
|
|
//emqx serttle
|
|
|
const char *ca_cert=
|
|
|
@@ -100,6 +110,23 @@ const char *ca_cert=
|
|
|
"-----END CERTIFICATE-----\r\n";
|
|
|
|
|
|
|
|
|
+enum {
|
|
|
+ SERV_NTP=0,
|
|
|
+ SERV_SMTP,
|
|
|
+ SERV_MESG,
|
|
|
+ SERV_MQTT,
|
|
|
+ SERV_CLOUD,
|
|
|
+ SERV_TELNET,
|
|
|
+ SERV_SNMP_V1,
|
|
|
+ SERV_SNMP_V2C,
|
|
|
+ SERV_SNMP_V3,
|
|
|
+ SERV_SNMP_TRAP,
|
|
|
+
|
|
|
+ SERV_MAX
|
|
|
+};
|
|
|
+#define BGET(flag,mask) ((flag)&(1<<(mask)))
|
|
|
+#define BSET(flag,mask) ((flag)|=(1<<(mask)))
|
|
|
+
|
|
|
static int ser_cmp(mqtt_server_t *a, mqtt_server_t *b)
|
|
|
{
|
|
|
if(strcmp(a->server, b->server) ||
|
|
|
@@ -198,12 +225,23 @@ static int pub_one(mg_conn_t *c, char *topic, char *data)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static int my_pub(mqtt_handle_t *h, char *topic, char *data)
|
|
|
+static int is_period(int id)
|
|
|
+{
|
|
|
+ if(id==MQTT_PUB_INFO_DEVICE || id==MQTT_PUB_STAT_NETWORK ||
|
|
|
+ id==MQTT_PUB_STAT_SENSOR || id==MQTT_PUB_STAT_SERVICE) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+static int my_pub(mqtt_handle_t *h, int id, char *topic, char *data)
|
|
|
{
|
|
|
int i;
|
|
|
for(i=0; i<MQTT_SER_MAX; i++) {
|
|
|
if(h->conn[i].c) {
|
|
|
- pub_one(h->conn[i].c, topic, data);
|
|
|
+ if(is_period(id) || !h->conn[i].flag[id]) {
|
|
|
+ pub_one(h->conn[i].c, topic, data);
|
|
|
+ h->conn[i].flag[id] = 1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
@@ -221,11 +259,6 @@ static int my_disconn(mqtt_handle_t *h)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static char *get_url(mqtt_server_t *ser)
|
|
|
-{
|
|
|
- char *url=ser->server[0]?ser->server:(ser->ip[0]?ser->ip:NULL);
|
|
|
- return url;
|
|
|
-}
|
|
|
static GlobalPowerManger* get_power(mqtt_handle_t *h, int ch)
|
|
|
{
|
|
|
GlobalPowerManger *tmp=NULL;
|
|
|
@@ -258,64 +291,75 @@ static int set_ch(mqtt_handle_t *h, int ch, int flag)
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
-static int get_sensor(mqtt_handle_t *h, int type, int id)
|
|
|
+static GlobalSensorManger* get_sensor(mqtt_handle_t *h, int id)
|
|
|
{
|
|
|
+ GlobalSensorManger *tmp=NULL;
|
|
|
|
|
|
+ lock_s_hold(LOCK_ID_SENSOR);
|
|
|
+ list_for_each_entry(tmp, &h->dm->_globalSensorManger.list, list)
|
|
|
+ {
|
|
|
+ if(tmp->sensor_id==id) {
|
|
|
+ return tmp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lock_s_release(LOCK_ID_SENSOR);
|
|
|
|
|
|
- return 0;
|
|
|
+ return NULL;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
//////////////////////////////////////////////////////////////
|
|
|
-
|
|
|
-
|
|
|
-static int my_conn(mqtt_handle_t *h, mqtt_info_t *info)
|
|
|
+static int get_url(mqtt_server_t *ser, char *url)
|
|
|
{
|
|
|
- int i,j,r=-1;
|
|
|
- char *url=NULL;
|
|
|
- mqtt_server_t *ser=info->ser;
|
|
|
+ int port=1883;
|
|
|
+ char *head="mqtts";
|
|
|
|
|
|
- for(i=0; i<MQTT_SER_MAX; i++) {
|
|
|
- url = get_url(&ser[i]);
|
|
|
- if(url) {
|
|
|
- if(h->conn[i].c==NULL) {
|
|
|
- mg_opts_t opts={
|
|
|
- .clean = true,
|
|
|
- .qos = 1,
|
|
|
- .version = 4,
|
|
|
- .keepalive = 60,
|
|
|
- //.topic = mg_str("hello"),
|
|
|
- //.message = mg_str("bye"),
|
|
|
- .client_id = mg_str(ser[i].cid),
|
|
|
- .user = mg_str(ser[i].user),
|
|
|
- .pass = mg_str(ser[i].password),
|
|
|
- };
|
|
|
- char *url=get_url(&ser[i]);
|
|
|
-
|
|
|
- h->conn[i].c = mg_mqtt_connect(&h->mgr, url, &opts, mqtt_fn, &h->conn[i]);
|
|
|
- if(h->conn[i].c) {
|
|
|
- h->conn[i].ser = ser[i];
|
|
|
- h->conn[i].opts = opts;
|
|
|
- my_sub(h->conn[i].c, h->prod_id);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ if((!ser->server[0] && !ser->ip[0]) || !ser->port[0]) {
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
+ port = atoi(ser->port);
|
|
|
+ if(port==1883) {
|
|
|
+ head = "mqtt";
|
|
|
+ }
|
|
|
+ else if(port==8883) {
|
|
|
+ head = "mqtts";
|
|
|
+ }
|
|
|
+ else if(port==8083) {
|
|
|
+ head = "ws";
|
|
|
+ }
|
|
|
+ else if(port==8884) {
|
|
|
+ head = "wss";
|
|
|
+ }
|
|
|
+
|
|
|
+ char *server=(ser->server[0]?ser->server:ser->ip);
|
|
|
+ sprintf(url, "%s://%s:%d", head, server, port);
|
|
|
return 0;
|
|
|
}
|
|
|
-static int my_check(mqtt_handle_t *h)
|
|
|
+static int my_conn(mqtt_handle_t *h)
|
|
|
{
|
|
|
- int i,r=-1;
|
|
|
- char *url=NULL;
|
|
|
+ int i,j,r=-1;
|
|
|
+ char url[1024];
|
|
|
mqtt_server_t *ser=h->dm->mqttInfo.ser;
|
|
|
|
|
|
for(i=0; i<MQTT_SER_MAX; i++) {
|
|
|
- url = get_url(&h->conn[i].ser);
|
|
|
- if(h->conn[i].c==NULL && url) {
|
|
|
- h->conn[i].c = mg_mqtt_connect(&h->mgr, url, &h->conn[i].opts, mqtt_fn, &h->conn[i]);
|
|
|
+ r = get_url(&ser[i], url);
|
|
|
+ if((r==0) && (!h->conn[i].c)) {
|
|
|
+ mg_opts_t opts={
|
|
|
+ .clean = true,
|
|
|
+ .qos = 1,
|
|
|
+ .version = 4,
|
|
|
+ .keepalive = 60,
|
|
|
+ //.topic = mg_str("hello"),
|
|
|
+ //.message = mg_str("bye"),
|
|
|
+ .client_id = mg_str(ser[i].cid),
|
|
|
+ .user = mg_str(ser[i].user),
|
|
|
+ .pass = mg_str(ser[i].password),
|
|
|
+ };
|
|
|
+
|
|
|
+ h->conn[i].c = mg_mqtt_connect(&h->mgr, url, &opts, mqtt_fn, &h->conn[i]);
|
|
|
if(h->conn[i].c) {
|
|
|
+ h->conn[i].ser = ser[i];
|
|
|
+ //h->conn[i].opts = opts;
|
|
|
my_sub(h->conn[i].c, h->prod_id);
|
|
|
}
|
|
|
}
|
|
|
@@ -323,6 +367,7 @@ static int my_check(mqtt_handle_t *h)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
static int my_send(mqtt_handle_t *h)
|
|
|
{
|
|
|
int r=-1;
|
|
|
@@ -331,7 +376,7 @@ static int my_send(mqtt_handle_t *h)
|
|
|
r = xlist_get_node(h->list, &ln, 0);
|
|
|
if(r==0) {
|
|
|
mqtt_pkt_t *pkt=(mqtt_pkt_t*)ln->data.buf;
|
|
|
- my_pub(h, pkt->topic, pkt->content);
|
|
|
+ my_pub(h, pkt->id, pkt->topic, pkt->content);
|
|
|
}
|
|
|
|
|
|
return r;
|
|
|
@@ -340,7 +385,7 @@ static int my_send(mqtt_handle_t *h)
|
|
|
static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
|
|
|
{
|
|
|
mqtt_handle_t *h=&mqHandle;
|
|
|
- mqtt_conn_t *mc=get_conn(h,c);
|
|
|
+ mqtt_conn_t *mc=((mqtt_conn_t*)(c->fn_data));
|
|
|
|
|
|
switch(ev) {
|
|
|
case MG_EV_OPEN:
|
|
|
@@ -364,13 +409,16 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
|
|
|
|
|
|
case MG_EV_MQTT_OPEN:
|
|
|
{
|
|
|
- //
|
|
|
+ LOGD("____ MG_EV_MQTT_OPEN\n");
|
|
|
+ //send_once();
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case MG_EV_POLL:
|
|
|
{
|
|
|
- my_send(h);
|
|
|
+ LOGD("____ MG_EV_POLL\n");
|
|
|
+ my_conn(h);
|
|
|
+ send_once();
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -386,13 +434,15 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
|
|
|
case MG_EV_ERROR:
|
|
|
{
|
|
|
MG_ERROR(("___MG_EV_ERROR, %p %s", c->fd, (char *) ev_data));
|
|
|
+ memset(mc->flag, 0, sizeof(mc->flag));
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case MG_EV_CLOSE:
|
|
|
{
|
|
|
LOGD("____ MG_EV_CLOSE\n");
|
|
|
- ((mqtt_conn_t *)(c->fn_data))->c = NULL;
|
|
|
+ mc->c = NULL;
|
|
|
+ memset(mc->flag, 0, sizeof(mc->flag));
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -403,19 +453,44 @@ static void* mqtt_thread(void *arg)
|
|
|
thread_handle_t *th=(thread_handle_t*)arg;
|
|
|
mqtt_handle_t *h=(mqtt_handle_t*)th->arg;
|
|
|
mqtt_info_t *info=&h->dm->mqttInfo;
|
|
|
-
|
|
|
- my_conn(h, info);
|
|
|
+
|
|
|
+ //timer_start(h, SEND_PERIOD);
|
|
|
+ my_conn(h);
|
|
|
while(th->quit==0) {
|
|
|
- my_check(h);
|
|
|
- mg_mgr_poll(&h->mgr, 500);
|
|
|
+ mg_mgr_poll(&h->mgr, 2000);
|
|
|
}
|
|
|
my_disconn(h);
|
|
|
+ timer_start(h, 0);
|
|
|
|
|
|
pthread_exit(NULL);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+static void send_once(void)
|
|
|
+{
|
|
|
+ send_stat(MQTT_PUB_INFO_DEVICE, 0);
|
|
|
+ send_stat(MQTT_PUB_STAT_NETWORK, 0);
|
|
|
+ send_stat(MQTT_PUB_STAT_SENSOR, 0);
|
|
|
+ send_stat(MQTT_PUB_STAT_SERVICE, 0);
|
|
|
+}
|
|
|
+static void send_period(void *arg)
|
|
|
+{
|
|
|
+ send_stat(MQTT_PUB_STAT_POWER_ALL, 0);
|
|
|
+ send_stat(MQTT_PUB_STAT_POWER_CHN, 0);
|
|
|
+}
|
|
|
+
|
|
|
+static void timer_start(mqtt_handle_t *h, int ms)
|
|
|
+{
|
|
|
+ static mg_timer_t t;
|
|
|
+ if(h->timer) {
|
|
|
+ mg_timer_free(&h->timer, &t);
|
|
|
+ h->timer = NULL;
|
|
|
+ }
|
|
|
|
|
|
+ if(ms>0) {
|
|
|
+ mg_timer_init(&h->timer, &t, ms, MG_TIMER_REPEAT|MG_TIMER_RUN_NOW, send_period, h);
|
|
|
+ }
|
|
|
+}
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
int mqtt_init(void)
|
|
|
{
|
|
|
@@ -426,6 +501,8 @@ int mqtt_init(void)
|
|
|
|
|
|
memset(h, 0, sizeof(mqtt_handle_t));
|
|
|
mg_mgr_init(&h->mgr);
|
|
|
+
|
|
|
+ mg_log_set(MG_LL_DEBUG);
|
|
|
|
|
|
h->dm = &__globalDeviceManage;
|
|
|
h->prod_id = h->dm->_globalDevInfo.product_id;
|
|
|
@@ -445,7 +522,7 @@ int mqtt_init(void)
|
|
|
r = 0;
|
|
|
#endif
|
|
|
|
|
|
- mqtt_test();
|
|
|
+ //mqtt_test();
|
|
|
|
|
|
return r;
|
|
|
}
|
|
|
@@ -469,7 +546,7 @@ int mqtt_deinit(void)
|
|
|
}
|
|
|
|
|
|
|
|
|
-int mqtt_post(int type, int id, void *data)
|
|
|
+static int send_stat(int type, int id)
|
|
|
{
|
|
|
int r=-1;
|
|
|
|
|
|
@@ -643,14 +720,17 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(root,"Topic", topic);
|
|
|
cJSON* data=cJSON_CreateObject();
|
|
|
if(data) {
|
|
|
- cJSON_AddStringToObject(data,"name", "temp sensor");
|
|
|
- cJSON_AddStringToObject(data,"type", "0");
|
|
|
- cJSON_AddStringToObject(data,"modbus_address", "");
|
|
|
- cJSON_AddStringToObject(data,"node", "-1");
|
|
|
- cJSON_AddStringToObject(data,"status", "1");
|
|
|
- cJSON_AddStringToObject(data,"value_num", "");
|
|
|
- cJSON_AddStringToObject(data,"value1", "");
|
|
|
- cJSON_AddStringToObject(data,"value2", "");
|
|
|
+ GlobalSensorManger *tmp=get_sensor(h, id);
|
|
|
+ if(tmp) {
|
|
|
+ cJSON_AddStringToObject(data,"name", "temp sensor");
|
|
|
+ cJSON_AddStringToObject(data,"type", get_int_str(tmp->sensor_type));
|
|
|
+ cJSON_AddStringToObject(data,"modbus_address", get_int_str(tmp->sensor_addr));
|
|
|
+ cJSON_AddStringToObject(data,"node", get_int_str(tmp->sensor_node_number));
|
|
|
+ cJSON_AddStringToObject(data,"status", get_int_str(tmp->sensor_status));
|
|
|
+ cJSON_AddStringToObject(data,"value_num", get_int_str(tmp->sensor_val_count));
|
|
|
+ cJSON_AddStringToObject(data,"value1", get_float_str(tmp->Cur_sensor_info.val1));
|
|
|
+ cJSON_AddStringToObject(data,"value2", get_float_str(tmp->Cur_sensor_info.val2));
|
|
|
+ }
|
|
|
cJSON_AddStringToObject(data,"date", date);
|
|
|
cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
@@ -670,16 +750,18 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(root,"Topic", topic);
|
|
|
cJSON* data=cJSON_CreateObject();
|
|
|
if(data) {
|
|
|
- cJSON_AddStringToObject(data,"telnet", "0");
|
|
|
- cJSON_AddStringToObject(data,"smtp", "1");
|
|
|
- cJSON_AddStringToObject(data,"snmp_v1", "1");
|
|
|
- cJSON_AddStringToObject(data,"snmp_v2c", "1");
|
|
|
- cJSON_AddStringToObject(data,"snmp_v3", "1");
|
|
|
- cJSON_AddStringToObject(data,"snmp_trap", "1");
|
|
|
- cJSON_AddStringToObject(data,"message", "");
|
|
|
- cJSON_AddStringToObject(data,"mqtt", "1");
|
|
|
- cJSON_AddStringToObject(data,"cloud", "1");
|
|
|
- cJSON_AddStringToObject(data,"ntp", "1");
|
|
|
+
|
|
|
+ uint32_t flag = get_serv(NULL);
|
|
|
+ cJSON_AddStringToObject(data,"telnet", BGET(flag, SERV_TELNET)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"smtp", BGET(flag, SERV_SMTP)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"snmp_v1", BGET(flag, SERV_SNMP_V1)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"snmp_v2c", BGET(flag, SERV_SNMP_V2C)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"snmp_v3", BGET(flag, SERV_SNMP_V3)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"snmp_trap", BGET(flag, SERV_SNMP_TRAP)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"message", BGET(flag, SERV_MESG)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"mqtt", BGET(flag, SERV_MQTT)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"cloud", BGET(flag, SERV_CLOUD)?"1":"0");
|
|
|
+ cJSON_AddStringToObject(data,"ntp", BGET(flag, SERV_NTP)?"1":"0");
|
|
|
cJSON_AddStringToObject(data,"date", date);
|
|
|
cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
@@ -692,6 +774,53 @@ int mqtt_post(int type, int id, void *data)
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
+ default:
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ mqtt_pkt_t pkt;
|
|
|
+ snprintf(pkt.topic, sizeof(pkt.topic), "%s", topic);
|
|
|
+ snprintf(pkt.content, sizeof(pkt.content), "%s", content);
|
|
|
+ r = xlist_append(h->list, 0, &pkt, sizeof(pkt));
|
|
|
+ cJSON_free(content);
|
|
|
+#endif
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static int send_alarm(int type, int subtype, char *content, alarm_para_t *para)
|
|
|
+{
|
|
|
+ int r=-1;
|
|
|
+
|
|
|
+#ifdef USE_MQTT
|
|
|
+ char topic[256];
|
|
|
+ mqtt_handle_t *h=&mqHandle;
|
|
|
+ char date[40],time[40];
|
|
|
+ int pub_type;
|
|
|
+ char *json_str=NULL;
|
|
|
+
|
|
|
+ if(!h->inited) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(type==ALARM_TYPE_POWER) {
|
|
|
+ pub_type = MQTT_PUB_ALARM_POWER;
|
|
|
+ }
|
|
|
+ else if(type==ALARM_TYPE_SENSOR) {
|
|
|
+ pub_type = MQTT_PUB_ALARM_SENSOR;
|
|
|
+ }
|
|
|
+ else if(type==ALARM_TYPE_NETWORK) {
|
|
|
+ pub_type = MQTT_PUB_ALARM_NETWORK;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ snprintf(topic, sizeof(topic), topic_pub[pub_type], h->prod_id);
|
|
|
+ get_date_time(date, time);
|
|
|
+
|
|
|
+ switch(pub_type) {
|
|
|
case MQTT_PUB_ALARM_NETWORK:
|
|
|
case MQTT_PUB_ALARM_SENSOR:
|
|
|
case MQTT_PUB_ALARM_POWER:
|
|
|
@@ -701,36 +830,41 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(root,"Topic", topic);
|
|
|
cJSON* data=cJSON_CreateObject();
|
|
|
if(data) {
|
|
|
- cJSON_AddStringToObject(data,"num", "temp sensor");
|
|
|
- cJSON_AddStringToObject(data,"context", "");
|
|
|
- cJSON_AddStringToObject(data,"action", "1");
|
|
|
- cJSON_AddStringToObject(data,"action_para", "7");
|
|
|
+ cJSON_AddStringToObject(data,"num", get_int_str(para->nalarm)); //alarm number, how to get?
|
|
|
+ cJSON_AddStringToObject(data,"context", content);
|
|
|
+ cJSON_AddStringToObject(data,"action", get_int_str(para->action));
|
|
|
+ cJSON_AddStringToObject(data,"action_para", get_int_str(para->actionId));
|
|
|
cJSON_AddStringToObject(data,"date", date);
|
|
|
cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
|
|
|
- content = cJSON_Print(root);
|
|
|
+ json_str = cJSON_Print(root);
|
|
|
cJSON_Delete(root);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
-
|
|
|
- default:
|
|
|
- return -1;
|
|
|
}
|
|
|
|
|
|
mqtt_pkt_t pkt;
|
|
|
snprintf(pkt.topic, sizeof(pkt.topic), "%s", topic);
|
|
|
- snprintf(pkt.content, sizeof(pkt.content), "%s", content);
|
|
|
+ snprintf(pkt.content, sizeof(pkt.content), "%s", json_str);
|
|
|
r = xlist_append(h->list, 0, &pkt, sizeof(pkt));
|
|
|
- cJSON_free(content);
|
|
|
+ cJSON_free(json_str);
|
|
|
#endif
|
|
|
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+int mqtt_post_alarm(int type, int subtype, char *content, alarm_para_t *para)
|
|
|
+{
|
|
|
+ return send_alarm(type, subtype, content, para);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#ifdef USE_MQTT
|
|
|
//////////////////////////////////////////////////////////
|
|
|
static int get_cmd(char *json)
|
|
|
{
|
|
|
@@ -748,21 +882,6 @@ static int get_cmd(char *json)
|
|
|
|
|
|
return cmd;
|
|
|
}
|
|
|
-
|
|
|
-enum {
|
|
|
- SERV_NTP=0,
|
|
|
- SERV_SMTP,
|
|
|
- SERV_MESG,
|
|
|
- SERV_MQTT,
|
|
|
- SERV_CLOUD,
|
|
|
- SERV_TELNET,
|
|
|
- SERV_SNMP_V1,
|
|
|
- SERV_SNMP_V2C,
|
|
|
- SERV_SNMP_V3,
|
|
|
- SERV_SNMP_TRAP,
|
|
|
-
|
|
|
- SERV_MAX
|
|
|
-};
|
|
|
const char *serv_str[SERV_MAX]={
|
|
|
"ntp",
|
|
|
"smtp",
|
|
|
@@ -775,26 +894,118 @@ const char *serv_str[SERV_MAX]={
|
|
|
"snmp_v3",
|
|
|
"snmp_trap",
|
|
|
};
|
|
|
+
|
|
|
static uint32_t get_serv(char *json)
|
|
|
{
|
|
|
int i;
|
|
|
cJSON* tmp=NULL;
|
|
|
uint32_t flag=0;
|
|
|
|
|
|
- cJSON* cjson=cJSON_Parse(json);
|
|
|
- if(cjson) {
|
|
|
- for(i=0; i<SERV_MAX; i++) {
|
|
|
- tmp = cJSON_GetObjectItem(cjson, serv_str[i]);
|
|
|
- if(tmp && tmp->valuestring) {
|
|
|
- flag |= (atoi(tmp->valuestring)<<i);
|
|
|
+ if(json) {
|
|
|
+ cJSON* cjson=cJSON_Parse(json);
|
|
|
+ if(cjson) {
|
|
|
+ for(i=0; i<SERV_MAX; i++) {
|
|
|
+ tmp = cJSON_GetObjectItem(cjson, serv_str[i]);
|
|
|
+ if(tmp && tmp->valuestring) {
|
|
|
+ flag |= (atoi(tmp->valuestring)<<i);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ cJSON_Delete(cjson);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(thread_is_running(THREAD_ID_NTP)) {
|
|
|
+ BSET(flag, SERV_NTP);
|
|
|
}
|
|
|
|
|
|
- cJSON_Delete(cjson);
|
|
|
+ if(thread_is_running(THREAD_ID_SMTP)) {
|
|
|
+ BSET(flag, SERV_SMTP);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(thread_is_running(THREAD_ID_MQTT)) {
|
|
|
+ BSET(flag, SERV_MQTT);
|
|
|
+ }
|
|
|
+
|
|
|
+#if 0
|
|
|
+ if(thread_is_running(SERV_MESG)) {
|
|
|
+ BSET(flag, SERV_MESG);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(thread_is_running(THREAD_ID_CLOUD)) {
|
|
|
+ BSET(flag, SERV_CLOUD);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(thread_is_running(THREAD_ID_TELNET)) {
|
|
|
+ BSET(flag, SERV_TELNET);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(thread_is_running(SERV_SNMP_V1)) {
|
|
|
+ BSET(flag, SERV_NTP);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(thread_is_running(SERV_SNMP_V1)) {
|
|
|
+ BSET(flag, SERV_NTP);
|
|
|
+ }
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
return flag;
|
|
|
}
|
|
|
+static int set_serv(uint32_t flag)
|
|
|
+{
|
|
|
+ if(BGET(flag,SERV_NTP)) {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BGET(flag,SERV_SMTP)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BGET(flag,SERV_MESG)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BGET(flag,SERV_MQTT)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BGET(flag,SERV_CLOUD)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BGET(flag,SERV_TELNET)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BGET(flag,SERV_SNMP_V1) || BGET(flag,SERV_SNMP_V2C) || BGET(flag,SERV_SNMP_V3) || BGET(flag,SERV_SNMP_TRAP)) {
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
static int my_recv(char *topic, char *data)
|
|
|
@@ -803,6 +1014,7 @@ static int my_recv(char *topic, char *data)
|
|
|
|
|
|
#ifdef USE_MQTT
|
|
|
char temp[512];
|
|
|
+ uint32_t flag=0;
|
|
|
mqtt_handle_t *h=&mqHandle;
|
|
|
|
|
|
for(i=0; i<MQTT_SUB_MAX; i++) {
|
|
|
@@ -887,38 +1099,9 @@ static int my_recv(char *topic, char *data)
|
|
|
|
|
|
case MQTT_SUB_CMD_SERVICE:
|
|
|
{
|
|
|
- LOGD("___ MQTT_SUB_CMD_SERVICE\n");
|
|
|
- uint32_t flag=get_serv(data);
|
|
|
- if(flag&(1<<SERV_NTP)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_SMTP)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_MESG)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_MQTT)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_CLOUD)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_TELNET)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_SNMP_V1)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_SNMP_V2C)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_SNMP_V3)) {
|
|
|
-
|
|
|
- }
|
|
|
- if(flag&(1<<SERV_SNMP_TRAP)) {
|
|
|
-
|
|
|
- }
|
|
|
+ flag = get_serv(data);
|
|
|
+ LOGD("___ MQTT_SUB_CMD_SERVICE, 0x%08x\n", flag);
|
|
|
+ set_serv(flag);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -928,7 +1111,7 @@ static int my_recv(char *topic, char *data)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-
|
|
|
+#endif
|
|
|
|
|
|
int mqtt_test(void)
|
|
|
{
|
|
|
@@ -942,14 +1125,14 @@ int mqtt_test(void)
|
|
|
.cid = "mqtlx_e92334545tet3465",
|
|
|
|
|
|
#if 0
|
|
|
- .server = "192.168.1.12:1883",
|
|
|
+ .server = "192.168.1.12",
|
|
|
.ip = "",
|
|
|
.port = "1883",
|
|
|
|
|
|
//root
|
|
|
//root0219107X
|
|
|
#else
|
|
|
- .server = "mqtts://gaae4d7b.ala.cn-hangzhou.emqxsl.cn:8883",
|
|
|
+ .server = "mqtts://gaae4d7b.ala.cn-hangzhou.emqxsl.cn",
|
|
|
.ip = "",
|
|
|
.port = "8883",
|
|
|
#endif
|
|
|
@@ -966,14 +1149,6 @@ int mqtt_test(void)
|
|
|
h->dm->mqttInfo = mInfo;
|
|
|
//mg_log_set(MG_LL_VERBOSE);
|
|
|
|
|
|
- while(cnt<3) {
|
|
|
- mqtt_post(MQTT_PUB_INFO_DEVICE, 0, 0);
|
|
|
- sleep(1);
|
|
|
- cnt++;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
#endif
|
|
|
return 0;
|
|
|
}
|