|
|
@@ -1,4 +1,5 @@
|
|
|
#include <regex.h>
|
|
|
+#include <time.h>
|
|
|
#include "common.h"
|
|
|
#include "cJSON.h"
|
|
|
#include "mqtt.h"
|
|
|
@@ -9,6 +10,7 @@
|
|
|
#include "sys.h"
|
|
|
#include "cfg.h"
|
|
|
#include "xlist.h"
|
|
|
+#include "switch_ctrl.h"
|
|
|
#include "sqlite_handle.h"
|
|
|
|
|
|
#if 0
|
|
|
@@ -123,12 +125,33 @@ static int get_id(mqtt_handle_t *h, mqtt_server_t *ser)
|
|
|
}
|
|
|
return -1;
|
|
|
}
|
|
|
-static char *get_str(int n)
|
|
|
+static char *get_int_str(int n)
|
|
|
{
|
|
|
static char tmp[32];
|
|
|
snprintf(tmp, sizeof(tmp), "%d", n);
|
|
|
return tmp;
|
|
|
}
|
|
|
+static char *get_float_str(float n)
|
|
|
+{
|
|
|
+ static char tmp[32];
|
|
|
+ snprintf(tmp, sizeof(tmp), "%f", n);
|
|
|
+ return tmp;
|
|
|
+}
|
|
|
+static int get_date_time(char *d, char *t)
|
|
|
+{
|
|
|
+ time_t now;
|
|
|
+ struct tm* tm;
|
|
|
+
|
|
|
+ time(&now);
|
|
|
+ tm = localtime(&now);
|
|
|
+ if(!tm) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ sprintf(d, "%04d-%02d-%02d", tm->tm_year+1990, tm->tm_mon+1, tm->tm_mday);
|
|
|
+ sprintf(t, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static mqtt_conn_t* get_conn(mqtt_handle_t *h, mg_conn_t *c)
|
|
|
{
|
|
|
int i;
|
|
|
@@ -203,6 +226,50 @@ 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;
|
|
|
+ list_for_each_entry(tmp, &h->dm->_globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ if(tmp->product_ch_id==ch) {
|
|
|
+ return tmp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+static int set_ch(mqtt_handle_t *h, int ch, int flag)
|
|
|
+{
|
|
|
+ int sendAddr=0;
|
|
|
+ GlobalPowerManger *tmp=NULL;
|
|
|
+ list_for_each_entry(tmp, &h->dm->_globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ if(tmp->product_saddr==sendAddr) continue;
|
|
|
+ sendAddr = tmp->product_saddr;
|
|
|
+
|
|
|
+ if(tmp->product_ch_id==ch) {
|
|
|
+ g_switch_set_all_chn_ctrl(&h->dm->_globalRelaySampManger, tmp, tmp->product_saddr, tmp->product_ch_addr, flag, false);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ch==0xff) {
|
|
|
+ g_switch_set_all_ctrl(&h->dm->_globalRelaySampManger, tmp->product_ch_type, tmp->product_saddr, flag);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+static int get_sensor(mqtt_handle_t *h, int type, int id)
|
|
|
+{
|
|
|
+
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+
|
|
|
static int my_conn(mqtt_handle_t *h, mqtt_info_t *info)
|
|
|
{
|
|
|
int i,j,r=-1;
|
|
|
@@ -284,8 +351,8 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
|
|
|
|
|
|
case MG_EV_CONNECT:
|
|
|
{
|
|
|
- char path[200];
|
|
|
- sys_get_path(path, "emqxsl-ca.crt");
|
|
|
+ //char path[200];
|
|
|
+ //sys_get_path(path, "emqxsl-ca.crt");
|
|
|
if (mg_url_is_ssl(mc->ser.server)) {
|
|
|
|
|
|
struct mg_tls_opts opts = {.ca = mg_str(ca_cert),
|
|
|
@@ -407,9 +474,10 @@ int mqtt_post(int type, int id, void *data)
|
|
|
int r=-1;
|
|
|
|
|
|
#ifdef USE_MQTT
|
|
|
- char topic[512];
|
|
|
+ char topic[256];
|
|
|
char* content=NULL;
|
|
|
mqtt_handle_t *h=&mqHandle;
|
|
|
+ char date[40],time[40];
|
|
|
|
|
|
if(!h->inited || type<0 || type>=MQTT_PUB_MAX) {
|
|
|
return -1;
|
|
|
@@ -421,6 +489,7 @@ int mqtt_post(int type, int id, void *data)
|
|
|
else {
|
|
|
snprintf(topic, sizeof(topic), topic_pub[type], h->prod_id);
|
|
|
}
|
|
|
+ get_date_time(date, time);
|
|
|
|
|
|
switch(type) {
|
|
|
case MQTT_PUB_INFO_DEVICE:
|
|
|
@@ -430,12 +499,14 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(root,"Topic", topic);
|
|
|
cJSON* data=cJSON_CreateObject();
|
|
|
if(data) {
|
|
|
- cJSON_AddStringToObject(data,"id", get_str(id));
|
|
|
+ cJSON_AddStringToObject(data,"id", get_int_str(id));
|
|
|
cJSON_AddStringToObject(data,"name", "Gowone smartPDU");
|
|
|
cJSON_AddStringToObject(data,"type", "smartPDU AC");
|
|
|
cJSON_AddStringToObject(data,"firmware", VERSION);
|
|
|
cJSON_AddStringToObject(data,"channel_num", "8");
|
|
|
cJSON_AddStringToObject(data,"sensor_num", "10");
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -489,10 +560,12 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(data,"wifi_ipv6_mask", "");
|
|
|
}
|
|
|
|
|
|
- cJSON_AddStringToObject(data,"modbus_address", get_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_addr));
|
|
|
- cJSON_AddStringToObject(data,"modbus_baud", get_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_baud));
|
|
|
- cJSON_AddStringToObject(data,"modbus_mode", get_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_type));
|
|
|
+ cJSON_AddStringToObject(data,"modbus_address", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_addr));
|
|
|
+ cJSON_AddStringToObject(data,"modbus_baud", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_baud));
|
|
|
+ cJSON_AddStringToObject(data,"modbus_mode", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_type));
|
|
|
cJSON_AddStringToObject(data,"vpn_enable", "0");
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -510,6 +583,7 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(root,"Topic", topic);
|
|
|
cJSON* data=cJSON_CreateObject();
|
|
|
if(data) {
|
|
|
+ //h->dm->_globalPowerManger
|
|
|
cJSON_AddStringToObject(data,"voltage", "");
|
|
|
cJSON_AddStringToObject(data,"current", "");
|
|
|
cJSON_AddStringToObject(data,"power", "");
|
|
|
@@ -517,8 +591,8 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(data,"pactive_power", "");
|
|
|
cJSON_AddStringToObject(data,"reactive_power", "");
|
|
|
cJSON_AddStringToObject(data,"apparent_power", "");
|
|
|
- cJSON_AddStringToObject(data,"date", "");
|
|
|
- cJSON_AddStringToObject(data,"time", "");
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -536,19 +610,22 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(root,"Topic", topic);
|
|
|
cJSON* data=cJSON_CreateObject();
|
|
|
if(data) {
|
|
|
- cJSON_AddStringToObject(data,"name", "app server channel");
|
|
|
- cJSON_AddStringToObject(data,"status", "1");
|
|
|
- cJSON_AddStringToObject(data,"voltage", "");
|
|
|
- cJSON_AddStringToObject(data,"current", "");
|
|
|
- cJSON_AddStringToObject(data,"power", "");
|
|
|
- cJSON_AddStringToObject(data,"power_freq", "");
|
|
|
- cJSON_AddStringToObject(data,"consumption", "");
|
|
|
- cJSON_AddStringToObject(data,"power_factor", "");
|
|
|
- cJSON_AddStringToObject(data,"pactive_power", "");
|
|
|
- cJSON_AddStringToObject(data,"reactive_power", "");
|
|
|
- cJSON_AddStringToObject(data,"apparent_power", "");
|
|
|
- cJSON_AddStringToObject(data,"date", "");
|
|
|
- cJSON_AddStringToObject(data,"time", "");
|
|
|
+ GlobalPowerManger *tmp=get_power(h, id);
|
|
|
+ if(tmp) {
|
|
|
+ cJSON_AddStringToObject(data,"name", "app server channel");
|
|
|
+ cJSON_AddStringToObject(data,"status", get_int_str(tmp->_PowerInfo.status));
|
|
|
+ cJSON_AddStringToObject(data,"voltage", get_float_str(tmp->_PowerInfo.voltage));
|
|
|
+ cJSON_AddStringToObject(data,"current", get_float_str(tmp->_PowerInfo.current));
|
|
|
+ cJSON_AddStringToObject(data,"power", get_float_str(tmp->_PowerInfo.power));
|
|
|
+ cJSON_AddStringToObject(data,"power_freq", get_float_str(tmp->_PowerInfo.freq));
|
|
|
+ cJSON_AddStringToObject(data,"consumption", get_float_str(tmp->_PowerInfo.consumption));
|
|
|
+ cJSON_AddStringToObject(data,"power_factor", get_float_str(tmp->_PowerInfo.factor));
|
|
|
+ cJSON_AddStringToObject(data,"pactive_power", "");
|
|
|
+ cJSON_AddStringToObject(data,"reactive_power", "");
|
|
|
+ cJSON_AddStringToObject(data,"apparent_power", "");
|
|
|
+ }
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -574,8 +651,8 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(data,"value_num", "");
|
|
|
cJSON_AddStringToObject(data,"value1", "");
|
|
|
cJSON_AddStringToObject(data,"value2", "");
|
|
|
- cJSON_AddStringToObject(data,"date", "");
|
|
|
- cJSON_AddStringToObject(data,"time", "");
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -603,6 +680,8 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(data,"mqtt", "1");
|
|
|
cJSON_AddStringToObject(data,"cloud", "1");
|
|
|
cJSON_AddStringToObject(data,"ntp", "1");
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -626,8 +705,8 @@ int mqtt_post(int type, int id, void *data)
|
|
|
cJSON_AddStringToObject(data,"context", "");
|
|
|
cJSON_AddStringToObject(data,"action", "1");
|
|
|
cJSON_AddStringToObject(data,"action_para", "7");
|
|
|
- cJSON_AddStringToObject(data,"date", "");
|
|
|
- cJSON_AddStringToObject(data,"time", "");
|
|
|
+ cJSON_AddStringToObject(data,"date", date);
|
|
|
+ cJSON_AddStringToObject(data,"time", time);
|
|
|
|
|
|
cJSON_AddItemToObject(root, "Data", data);
|
|
|
}
|
|
|
@@ -732,8 +811,11 @@ static int my_recv(char *topic, char *data)
|
|
|
switch(i) {
|
|
|
case MQTT_SUB_CMD_POWER_ALL:
|
|
|
{
|
|
|
- LOGD("___ MQTT_SUB_CMD_POWER_ALL\n");
|
|
|
cmd = get_cmd(data);
|
|
|
+ LOGD("___ MQTT_SUB_CMD_POWER_ALL, %d\n", cmd);
|
|
|
+ if(cmd==0 || cmd==1) {
|
|
|
+ set_ch(h, 0xff, cmd);
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -741,8 +823,11 @@ static int my_recv(char *topic, char *data)
|
|
|
{
|
|
|
int ch=atoi(topic+strlen(temp));
|
|
|
cmd = get_cmd(data);
|
|
|
-
|
|
|
LOGD("___ MQTT_SUB_CMD_POWER_CHN, %d\n", ch);
|
|
|
+
|
|
|
+ if(cmd==0 || cmd==1) {
|
|
|
+ set_ch(h, ch, cmd);
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
|