Bläddra i källkod

1、完善MQTT功能,增加三相上传总体及通道相信息、增加网络及设备信息实时上传、增加超限实时报警状态。

liyuezong 1 år sedan
förälder
incheckning
9014b0d33b
1 ändrade filer med 70 tillägg och 35 borttagningar
  1. 70 35
      pro/src/mqtt.c

+ 70 - 35
pro/src/mqtt.c

@@ -449,6 +449,8 @@ static void send_period(mqtt_conn_t *conn)
     send_stat(conn, MQTT_PUB_STAT_POWER_CHN);
     send_stat(conn, MQTT_PUB_STAT_SENSOR);
     send_stat(conn, MQTT_PUB_STAT_SERVICE);
+    send_stat(conn, MQTT_PUB_INFO_DEVICE);
+    send_stat(conn, MQTT_PUB_STAT_NETWORK);
 }
 
 static void timer_conn_fn(void *arg)
@@ -739,44 +741,59 @@ static int send_stat(mqtt_conn_t *conn, int type)
             int cnt=1;
             pwrall_info_t *pall=websocket_get_pwrall();
 
-            if(pall->ph3) {
+            if (pall->ph3)
+            {
                 cnt = 3;
             }
+            cJSON *root = cJSON_CreateObject();
+            if (root)
+            {
+                cJSON *data_root_array = cJSON_CreateArray();
+                for (i = 0; i < cnt; i++)
+                {
+                    _OverAllPwrAckInfo *info = &pall->ch[i];
 
-            for(i=0; i<cnt; i++) {
-                _OverAllPwrAckInfo *info=&pall->ch[i];
-
-                cJSON* root=cJSON_CreateObject();
-                if(root) {
-                    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 *data_filed = cJSON_CreateObject();
+                    if (data_filed)
                     {
-                        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));
+                        sprintf(buf, "L%d", i + 1);
+                        if (cnt == 3)
+                            cJSON_AddStringToObject(data_filed, "phase", buf);
+                        cJSON_AddStringToObject(data_filed, "voltage", get_float_str(info->voltage));
+                        cJSON_AddStringToObject(data_filed, "current", get_float_str(info->current));
+                        cJSON_AddStringToObject(data_filed, "power", get_float_str(info->power / 1000));
+                        cJSON_AddStringToObject(data_filed, "consumption", get_float_str(info->consumption));
+                        if (h->dm->_globalDevInfo.product.pwr_type != SmartPDU_DC)
+                        {
+                            cJSON_AddStringToObject(data_filed, "power_factor", get_float_str(info->factor));
+                            cJSON_AddStringToObject(data_filed, "power_freq", get_float_str(info->freq));
+                            p1 = info->power;
+                            p3 = (info->factor ? (p1 / info->factor) : 0.0f);
+                            p2 = p3 - p1;
+                            cJSON_AddStringToObject(data_filed, "pactive_power", get_float_str(p1));
+                            cJSON_AddStringToObject(data_filed, "reactive_power", get_float_str(p2));
+                            cJSON_AddStringToObject(data_filed, "apparent_power", get_float_str(p3));
+                        }
+                        cJSON_AddItemToObject(data_root_array, "power_status", data_filed);
                     }
+                }
+                cJSON_AddItemToObject(root, "power_status", data_root_array);
 
-                    get_date_time(date, time);
-                    cJSON_AddStringToObject(root,"date", date);
-                    cJSON_AddStringToObject(root,"time", time);
+                cJSON_AddStringToObject(root, "voltage_over", get_int_str(h->dm->_globalPowerManger._PowerWarninginfo.w_voltage_up));
+                cJSON_AddStringToObject(root, "voltage_low", get_int_str(h->dm->_globalPowerManger._PowerWarninginfo.w_voltage_down));
+                cJSON_AddStringToObject(root, "current_over", get_int_str(h->dm->_globalPowerManger._PowerWarninginfo.w_current));
+                cJSON_AddStringToObject(root, "power_over", get_int_str(h->dm->_globalPowerManger._PowerWarninginfo.w_power));
+                cJSON_AddStringToObject(root, "consumption_over", get_int_str(h->dm->_globalPowerManger._PowerWarninginfo.w_consumption));
 
-                    content = cJSON_Print(root);    
-                    my_pub(conn, topic, content);
-                    cJSON_free(content);
+                get_date_time(date, time);
+                cJSON_AddStringToObject(root, "date", date);
+                cJSON_AddStringToObject(root, "time", time);
 
-                    cJSON_Delete(root);
-                }
+                content = cJSON_Print(root);
+                my_pub(conn, topic, content);
+                cJSON_free(content);
+
+                cJSON_Delete(root);
             }
         }
         break;
@@ -796,13 +813,26 @@ 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,"name", tmp->product_ch_name);
                     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, "consumption", get_float_str(tmp->_PowerInfo.consumption));
+
+                    cJSON_AddStringToObject(root, "voltage_over", get_int_str(tmp->_PowerWarninginfo.w_voltage_up));
+                    cJSON_AddStringToObject(root, "voltage_low", get_int_str(tmp->_PowerWarninginfo.w_voltage_down));
+                    cJSON_AddStringToObject(root, "current_over", get_int_str(tmp->_PowerWarninginfo.w_current));
+                    cJSON_AddStringToObject(root, "power_over", get_int_str(tmp->_PowerWarninginfo.w_power));
+                    cJSON_AddStringToObject(root, "consumption_over", get_int_str(tmp->_PowerWarninginfo.w_consumption));
+
+                    if (h->dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree)
+                    {
+                        cJSON_AddStringToObject(root, "phase_loss_L1", get_int_str(tmp->_PowerWarninginfo.w_phase_lossA));
+                        cJSON_AddStringToObject(root, "phase_loss_L2", get_int_str(tmp->_PowerWarninginfo.w_phase_lossB));
+                        cJSON_AddStringToObject(root, "phase_loss_L3", get_int_str(tmp->_PowerWarninginfo.w_phase_lossC));
+                    }
+
                     if (h->dm->_globalDevInfo.product.pwr_type != SmartPDU_DC)
                     {
                         cJSON_AddStringToObject(root, "power_freq", get_float_str(tmp->_PowerInfo.freq));
@@ -831,7 +861,7 @@ static int send_stat(mqtt_conn_t *conn, int type)
                                 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(data_root_array, "phase_data", data_filed);
                             }
                         }
                     }
@@ -866,7 +896,7 @@ static int send_stat(mqtt_conn_t *conn, int type)
 
                 cJSON* root=cJSON_CreateObject();
                 if(root) {
-                    cJSON_AddStringToObject(root,"name", "temp sensor");
+                    cJSON_AddStringToObject(root,"name", tmp->sensor_name);
                     cJSON_AddStringToObject(root,"type", get_int_str(tmp->sensor_type));
                     cJSON_AddStringToObject(root,"modbus_address", get_int_str(tmp->sensor_addr));
                     cJSON_AddStringToObject(root,"node", get_int_str(tmp->sensor_node_number));
@@ -874,7 +904,12 @@ static int send_stat(mqtt_conn_t *conn, int type)
                     cJSON_AddStringToObject(root,"value_num", get_int_str(tmp->sensor_val_count));
                     cJSON_AddStringToObject(root,"value1", get_float_str(tmp->Cur_sensor_info.val1));
                     cJSON_AddStringToObject(root,"value2", get_float_str(tmp->Cur_sensor_info.val2));
-                
+
+                    cJSON_AddStringToObject(root, "value1_over", get_int_str(tmp->warning_status.sensor_val1_upper));
+                    cJSON_AddStringToObject(root, "value1_low", get_int_str(tmp->warning_status.sensor_val1_lower));
+                    cJSON_AddStringToObject(root, "value2_over", get_int_str(tmp->warning_status.sensor_val2_upper));
+                    cJSON_AddStringToObject(root, "value2_low", get_int_str(tmp->warning_status.sensor_val2_lower));
+
                     get_date_time(date, time);
                     cJSON_AddStringToObject(root,"date", date);
                     cJSON_AddStringToObject(root,"time", time);