|
|
@@ -34,7 +34,7 @@
|
|
|
|
|
|
|
|
|
#define CONN_PERIOD 5000 //ms
|
|
|
-#define SEND_PERIOD 5000 //ms
|
|
|
+#define SEND_PERIOD 3000 //ms
|
|
|
|
|
|
|
|
|
#define BGET(flag,mask) ((flag)&(1<<(mask)))
|
|
|
@@ -62,7 +62,7 @@ typedef struct {
|
|
|
}mqtt_conn_t;
|
|
|
typedef struct {
|
|
|
int inited;
|
|
|
- uint32_t prod_id;
|
|
|
+ char prod_id[32];
|
|
|
|
|
|
mqtt_conn_t conn[MQTT_SER_MAX];
|
|
|
handle_t list;
|
|
|
@@ -73,23 +73,23 @@ typedef struct {
|
|
|
|
|
|
#ifdef USE_MQTT
|
|
|
char *topic_sub[MQTT_SUB_MAX]={
|
|
|
- "/pdu/%d/control/power/all_channel",
|
|
|
- "/pdu/%d/control/power/+",
|
|
|
- "/pdu/%d/control/sensor/+",
|
|
|
- "/pdu/%d/control/device/restart",
|
|
|
- "/pdu/%d/control/device/reset",
|
|
|
- "/pdu/%d/control/service",
|
|
|
+ "/pdu/%s/control/power/all_channel",
|
|
|
+ "/pdu/%s/control/power/+",
|
|
|
+ "/pdu/%s/control/sensor/+",
|
|
|
+ "/pdu/%s/control/device/restart",
|
|
|
+ "/pdu/%s/control/device/reset",
|
|
|
+ "/pdu/%s/control/service",
|
|
|
};
|
|
|
char *topic_pub[MQTT_PUB_MAX]={
|
|
|
- "/pdu/%d/info/device",
|
|
|
- "/pdu/%d/status/network",
|
|
|
- "/pdu/%d/status/power/all_channel",
|
|
|
- "/pdu/%d/status/power/%d",
|
|
|
- "/pdu/%d/status/sensor/%d",
|
|
|
- "/pdu/%d/alarm/network",
|
|
|
- "/pdu/%d/alarm/power",
|
|
|
- "/pdu/%d/alarm/sensor",
|
|
|
- "/pdu/%d/status/service",
|
|
|
+ "/pdu/%s/info/device",
|
|
|
+ "/pdu/%s/status/network",
|
|
|
+ "/pdu/%s/status/power/all_channel",
|
|
|
+ "/pdu/%s/status/power/%d",
|
|
|
+ "/pdu/%s/status/sensor/%d",
|
|
|
+ "/pdu/%s/alarm/network",
|
|
|
+ "/pdu/%s/alarm/power",
|
|
|
+ "/pdu/%s/alarm/sensor",
|
|
|
+ "/pdu/%s/status/service",
|
|
|
};
|
|
|
const char *serv_str[SERV_MAX]={
|
|
|
"ntp",
|
|
|
@@ -202,7 +202,7 @@ static int sub_one(mg_conn_t *c, char *topic)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static int my_sub(mg_conn_t *c, int prod_id)
|
|
|
+static int my_sub(mg_conn_t *c, char * prod_id)
|
|
|
{
|
|
|
int i;
|
|
|
char topic[1024];
|
|
|
@@ -388,7 +388,7 @@ static int conn_one(mqtt_conn_t *conn)
|
|
|
if(conn->c) {
|
|
|
//mg_mqtt_bind(conn->c);
|
|
|
|
|
|
- sprintf(conn->ser.cid, "smartPDU_%d\n", h->prod_id);
|
|
|
+ sprintf(conn->ser.cid, "smartPDU_%s\n", h->prod_id);
|
|
|
my_sub(conn->c, h->prod_id);
|
|
|
r = 0;
|
|
|
}
|
|
|
@@ -441,14 +441,14 @@ static int send_once(mqtt_conn_t *conn)
|
|
|
{
|
|
|
send_stat(conn, MQTT_PUB_INFO_DEVICE);
|
|
|
send_stat(conn, MQTT_PUB_STAT_NETWORK);
|
|
|
- send_stat(conn, MQTT_PUB_STAT_SENSOR);
|
|
|
- send_stat(conn, MQTT_PUB_STAT_SERVICE);
|
|
|
return 0;
|
|
|
}
|
|
|
static void send_period(mqtt_conn_t *conn)
|
|
|
{
|
|
|
send_stat(conn, MQTT_PUB_STAT_POWER_ALL);
|
|
|
send_stat(conn, MQTT_PUB_STAT_POWER_CHN);
|
|
|
+ send_stat(conn, MQTT_PUB_STAT_SENSOR);
|
|
|
+ send_stat(conn, MQTT_PUB_STAT_SERVICE);
|
|
|
}
|
|
|
|
|
|
static void timer_conn_fn(void *arg)
|
|
|
@@ -582,7 +582,7 @@ int mqtt_init(void)
|
|
|
//mg_log_set(MG_LL_DEBUG);
|
|
|
|
|
|
h->dm = &__globalDeviceManage;
|
|
|
- h->prod_id = h->dm->_globalDevInfo.product.id;
|
|
|
+ strcpy( h->prod_id,h->dm->_globalDevInfo.product.number);
|
|
|
//sys_get_chip_id(&h->prod_id);
|
|
|
|
|
|
list_cfg_t lc;
|
|
|
@@ -640,12 +640,27 @@ static int send_stat(mqtt_conn_t *conn, int type)
|
|
|
{
|
|
|
cJSON* root=cJSON_CreateObject();
|
|
|
if(root) {
|
|
|
- cJSON_AddStringToObject(root,"id", get_int_str(h->prod_id));
|
|
|
- cJSON_AddStringToObject(root,"name", "Gowone smartPDU");
|
|
|
- cJSON_AddStringToObject(root,"type", "smartPDU AC");
|
|
|
+
|
|
|
+ int nch = 0;
|
|
|
+ GlobalPowerManger *chiterator;
|
|
|
+ list_for_each_entry(chiterator, &h->dm->_globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ nch++;
|
|
|
+ }
|
|
|
+
|
|
|
+ int nsen = 0;
|
|
|
+ GlobalSensorManger *sensoriterator;
|
|
|
+ list_for_each_entry(sensoriterator, &h->dm->_globalSensorManger.list, list)
|
|
|
+ {
|
|
|
+ nsen++;
|
|
|
+ }
|
|
|
+
|
|
|
+ cJSON_AddStringToObject(root,"id", h->prod_id);
|
|
|
+ cJSON_AddStringToObject(root,"name",h->dm->_globalDevInfo.product.name);
|
|
|
+ cJSON_AddStringToObject(root,"type",g_product_type_str[h->dm->_globalDevInfo.product.pwr_type]);
|
|
|
cJSON_AddStringToObject(root,"firmware", VERSION);
|
|
|
- cJSON_AddStringToObject(root,"channel_num", "8");
|
|
|
- cJSON_AddStringToObject(root,"sensor_num", "10");
|
|
|
+ cJSON_AddStringToObject(root,"channel_num", get_int_str(nch));
|
|
|
+ cJSON_AddStringToObject(root,"sensor_num", get_int_str(nsen));
|
|
|
|
|
|
get_date_time(date, time);
|
|
|
cJSON_AddStringToObject(root,"date", date);
|
|
|
@@ -733,19 +748,24 @@ static int send_stat(mqtt_conn_t *conn, int type)
|
|
|
|
|
|
cJSON* root=cJSON_CreateObject();
|
|
|
if(root) {
|
|
|
- sprintf(buf, "L%d", i+1);
|
|
|
- cJSON_AddStringToObject(root,"phase", buf);
|
|
|
- cJSON_AddStringToObject(root,"voltage", get_float_str(info->voltage));
|
|
|
- cJSON_AddStringToObject(root,"current", get_float_str(info->current));
|
|
|
- cJSON_AddStringToObject(root,"power", get_float_str(info->power/1000));
|
|
|
- cJSON_AddStringToObject(root,"consumption", get_float_str(info->consumption));
|
|
|
-
|
|
|
- p1 = info->power;
|
|
|
- p3 = (info->factor?(p1/info->factor):0.0f);
|
|
|
- p2 = p3 - p1;
|
|
|
- cJSON_AddStringToObject(root,"pactive_power", get_float_str(p1));
|
|
|
- cJSON_AddStringToObject(root,"reactive_power", get_float_str(p2));
|
|
|
- cJSON_AddStringToObject(root,"apparent_power", get_float_str(p3));
|
|
|
+ sprintf(buf, "L%d", i + 1);
|
|
|
+ if (cnt == 3)
|
|
|
+ cJSON_AddStringToObject(root, "phase", buf);
|
|
|
+ cJSON_AddStringToObject(root, "voltage", get_float_str(info->voltage));
|
|
|
+ cJSON_AddStringToObject(root, "current", get_float_str(info->current));
|
|
|
+ cJSON_AddStringToObject(root, "power", get_float_str(info->power / 1000));
|
|
|
+ cJSON_AddStringToObject(root, "consumption", get_float_str(info->consumption));
|
|
|
+ if (h->dm->_globalDevInfo.product.pwr_type != SmartPDU_DC)
|
|
|
+ {
|
|
|
+ cJSON_AddStringToObject(root, "power_factor", get_float_str(info->factor));
|
|
|
+ cJSON_AddStringToObject(root, "power_freq", get_float_str(info->freq));
|
|
|
+ p1 = info->power;
|
|
|
+ p3 = (info->factor ? (p1 / info->factor) : 0.0f);
|
|
|
+ p2 = p3 - p1;
|
|
|
+ cJSON_AddStringToObject(root, "pactive_power", get_float_str(p1));
|
|
|
+ cJSON_AddStringToObject(root, "reactive_power", get_float_str(p2));
|
|
|
+ cJSON_AddStringToObject(root, "apparent_power", get_float_str(p3));
|
|
|
+ }
|
|
|
|
|
|
get_date_time(date, time);
|
|
|
cJSON_AddStringToObject(root,"date", date);
|
|
|
@@ -775,23 +795,47 @@ static int send_stat(mqtt_conn_t *conn, int type)
|
|
|
|
|
|
cJSON* root=cJSON_CreateObject();
|
|
|
if(root) {
|
|
|
+ cJSON_AddStringToObject(root,"id", get_int_str(tmp->product_ch_id));
|
|
|
sprintf(buf, "CH%d", tmp->product_ch_id);
|
|
|
cJSON_AddStringToObject(root,"name", buf);
|
|
|
cJSON_AddStringToObject(root,"status", get_int_str(tmp->_PowerInfo.status));
|
|
|
cJSON_AddStringToObject(root,"voltage", get_float_str(tmp->_PowerInfo.voltage));
|
|
|
- cJSON_AddStringToObject(root,"current", get_float_str(tmp->_PowerInfo.current));
|
|
|
- cJSON_AddStringToObject(root,"power", get_float_str(tmp->_PowerInfo.power));
|
|
|
- cJSON_AddStringToObject(root,"power_freq", get_float_str(tmp->_PowerInfo.freq));
|
|
|
- cJSON_AddStringToObject(root,"consumption", get_float_str(tmp->_PowerInfo.consumption));
|
|
|
- cJSON_AddStringToObject(root,"power_factor", get_float_str(tmp->_PowerInfo.factor));
|
|
|
-
|
|
|
-
|
|
|
- p1 = tmp->_PowerInfo.power;
|
|
|
- p3 = p1 / tmp->_PowerInfo.factor;
|
|
|
- p2 = p3 - p1;
|
|
|
- cJSON_AddStringToObject(root,"pactive_power", get_float_str(p1));
|
|
|
- cJSON_AddStringToObject(root,"reactive_power", get_float_str(p2));
|
|
|
- cJSON_AddStringToObject(root,"apparent_power", get_float_str(p3));
|
|
|
+ cJSON_AddStringToObject(root, "current", get_float_str(tmp->_PowerInfo.current));
|
|
|
+ cJSON_AddStringToObject(root, "power", get_float_str(tmp->_PowerInfo.power));
|
|
|
+ cJSON_AddStringToObject(root, "consumption", get_float_str(tmp->_PowerInfo.consumption));
|
|
|
+ if (h->dm->_globalDevInfo.product.pwr_type != SmartPDU_DC)
|
|
|
+ {
|
|
|
+ cJSON_AddStringToObject(root, "power_freq", get_float_str(tmp->_PowerInfo.freq));
|
|
|
+ cJSON_AddStringToObject(root, "power_factor", get_float_str(tmp->_PowerInfo.factor));
|
|
|
+ p1 = tmp->_PowerInfo.power;
|
|
|
+ p3 = p1 / tmp->_PowerInfo.factor;
|
|
|
+ p2 = p3 - p1;
|
|
|
+ cJSON_AddStringToObject(root, "pactive_power", get_float_str(p1));
|
|
|
+ cJSON_AddStringToObject(root, "reactive_power", get_float_str(p2));
|
|
|
+ cJSON_AddStringToObject(root, "apparent_power", get_float_str(p3));
|
|
|
+ }
|
|
|
+
|
|
|
+ cJSON* data_root_array = cJSON_CreateArray();
|
|
|
+ if (h->dm->_globalDevInfo.product.pwr_type == TREE_AC_TYPE|| h->dm->_globalDevInfo.product.pwr_type==DOUBLE_AC_TYPE|| h->dm->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One_B)
|
|
|
+ {
|
|
|
+ GlobalTreeACManager *_TreeACTemp = NULL;
|
|
|
+ // 判断是否三相单输出情况下
|
|
|
+ int phnum = 0;
|
|
|
+ list_for_each_entry(_TreeACTemp, &tmp->list_Tree_AC, list_Tree_AC)
|
|
|
+ {
|
|
|
+ if(_TreeACTemp->product_ph_outputStatus == 1 &&_TreeACTemp->product_ph_type >= 0 && _TreeACTemp->product_ph_type < 3)
|
|
|
+ {
|
|
|
+ cJSON *data_filed = cJSON_CreateObject();
|
|
|
+ cJSON_AddStringToObject(data_filed, "phase_type", g_product_t_ac_type_str[_TreeACTemp->product_ph_type]);
|
|
|
+ cJSON_AddStringToObject(data_filed, "phase_voltage", get_float_str(_TreeACTemp->_PowerInfo.voltage));
|
|
|
+ cJSON_AddStringToObject(data_filed, "phase_current", get_float_str(_TreeACTemp->_PowerInfo.current));
|
|
|
+ cJSON_AddStringToObject(data_filed, "phase_power", get_float_str(_TreeACTemp->_PowerInfo.power));
|
|
|
+ cJSON_AddStringToObject(data_filed, "phase_consumption", get_float_str(_TreeACTemp->_PowerInfo.consumption));
|
|
|
+ cJSON_AddItemToObject(data_root_array, "phase_data", data_filed);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ cJSON_AddItemToObject(root, "phase_data", data_root_array);
|
|
|
|
|
|
get_date_time(date, time);
|
|
|
cJSON_AddStringToObject(root,"date", date);
|