Explorar el Código

1、修改MQTT实时上传数据周期,修改MQTT总体电源状态及通道电源状态上传数据结构

liyuezong hace 1 año
padre
commit
bea836e61c
Se han modificado 1 ficheros con 58 adiciones y 29 borrados
  1. 58 29
      pro/src/mqtt.c

+ 58 - 29
pro/src/mqtt.c

@@ -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)))
@@ -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)
@@ -748,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);
@@ -790,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);