Explorar el Código

1.修改MQTT及邮件、短信报警的设备编号为字符串,并且从产品文件中获取。2、修改MQTT产品信息上传。

liyuezong hace 1 año
padre
commit
3c167cdece
Se han modificado 7 ficheros con 92 adiciones y 76 borrados
  1. 1 2
      pro/config/cfg.h
  2. 22 21
      pro/src/Cellular.c
  3. 0 9
      pro/src/appweb_handle.c
  4. 9 0
      pro/src/common.h
  5. 1 1
      pro/src/dflt.c
  6. 20 19
      pro/src/mail.c
  7. 39 24
      pro/src/mqtt.c

+ 1 - 2
pro/config/cfg.h

@@ -2,8 +2,7 @@
 #define __CONFIG_Hx__
 
 
-#define VERSION                                 "V0.0.2"
-#define PROD_ID                                 0
+#define VERSION                                 "V1.2.0"
 
 
 /////////////customer demannd//////////////////////

+ 22 - 21
pro/src/Cellular.c

@@ -182,7 +182,7 @@ typedef struct {
     int             fd;
     CellInfo_t      *pcell;
     lock_t          lck;
-    int             prod_id;
+    char             prod_id[32];
 
     int             stat;
     cell_all_t      all;
@@ -1207,7 +1207,8 @@ int cell_send_sms_all(int type, int subtype, int alarm_type,char *txt)
 
     char temp[128];
     char *prod_name = h->dm->_globalDevInfo.product.name;
-    int prod_id = h->dm->_globalDevInfo.product.id;
+    char  prod_id[32];
+    strcpy( prod_id,h->dm->_globalDevInfo.product.number);
     int langID = h->dm->_globalDevInfo.product.language;
 
     switch (type)
@@ -1220,24 +1221,24 @@ int cell_send_sms_all(int type, int subtype, int alarm_type,char *txt)
             {
             case ENABLE_TAC_V_UP:
             case ENABLE_TAC_V_DOWN:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case ENABLE_TAC_A_UP:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case ENABLE_TAC_W_UP:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case ENABLE_TAC_P_UP:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case ENABLE_TAC_STIME:
             case ENABLE_TAC_ETIME:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
                 break;
 
             default:
@@ -1250,23 +1251,23 @@ int cell_send_sms_all(int type, int subtype, int alarm_type,char *txt)
             {
             case WARNING_V_UP:
             case WARNING_V_DOWN:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case WARNING_A_UP:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case WARNING_W_UP:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case WARNING_P_UP:
-                snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
                 break;
 
             case 0 ... 2:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
                 break;
 
             default:
@@ -1283,31 +1284,31 @@ int cell_send_sms_all(int type, int subtype, int alarm_type,char *txt)
         case SENSOR_TYPE_TEMP_DOUBLE:
         case SENSOR_TYPE_TEMP_HUMI:
         case SENSOR_TYPE_TEMP:
-            snprintf(temp, sizeof(temp), "%s %d %s/%s %s", prod_name, prod_id, language_temperature[langID], language_humidity[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s/%s %s", prod_name, prod_id, language_temperature[langID], language_humidity[langID], language_alarm[langID]);
             break;
 
         case SENSOR_TYPE_SMOKE:
-            snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_smoke[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_sensor_smoke[langID], language_alarm[langID]);
             break;
 
         case SENSOR_TYPE_WATER:
-            snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_humidity[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_humidity[langID], language_alarm[langID]);
             break;
 
         case SENSOR_TYPE_ACCESS:
-            snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_access[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_sensor_access[langID], language_alarm[langID]);
             break;
 
         case SENSOR_TYPE_GAS:
-            snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_atmosphere_gas[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_atmosphere_gas[langID], language_alarm[langID]);
             break;
 
         case SENSOR_TYPE_AIR_PRESS:
-            snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_atmosphere_pressure[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_atmosphere_pressure[langID], language_alarm[langID]);
             break;
 
         case SENSOR_TYPE_LEAK:
-            snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_leak[langID], language_alarm[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_sensor_leak[langID], language_alarm[langID]);
             break;
 
         default:
@@ -1318,7 +1319,7 @@ int cell_send_sms_all(int type, int subtype, int alarm_type,char *txt)
 
     case ALARM_TYPE_NETWORK:
     {
-        snprintf(temp, sizeof(temp), "%s %d %s", prod_name, prod_id, language_alarm_Type_Network[langID]);
+        snprintf(temp, sizeof(temp), "%s %s %s", prod_name, prod_id, language_alarm_Type_Network[langID]);
     }
     break;
 
@@ -1606,7 +1607,7 @@ int cellular_init(void)
 
         h->dm = &__globalDeviceManage;
         h->pcell = &h->dm->_globalDevInfo.cell;
-        h->prod_id = h->dm->_globalDevInfo.product.id;
+        strcpy( h->prod_id,h->dm->_globalDevInfo.product.number);
         h->lck = lock_d_init();
         nic_set(NIC_USB, 1);
 

+ 0 - 9
pro/src/appweb_handle.c

@@ -87,15 +87,6 @@ static char* g_product_board_cpu[] = {
     "T113"
 };
  
-static char* g_product_type_str[] = {
-    "SmartPDU(AC)",
-    "SmartPDU(DC)",
-    "SmartPDU",
-    "SmartPDU(AC_3P-IN & 3P-OUT)",
-    "SmartPDU(AC_3P-IN & 1P-OUT)",
-    "SmartPDU(AC_3P-IN & 1P-OUT)",
-    "SmartPDU(AC_3P-IN & 2P-OUT)",
-};
 
 static web_handle_t webHandle;
 static int webSetCallback(void);

+ 9 - 0
pro/src/common.h

@@ -187,6 +187,15 @@ enum
     SENSOR_TYPE_LIST        //传感器类型1、2、3
 };
 
+static char* g_product_type_str[] = {
+    "SmartPDU(AC)",
+    "SmartPDU(DC)",
+    "SmartPDU",
+    "SmartPDU(AC_3P-IN & 3P-OUT)",
+    "SmartPDU(AC_3P-IN & 1P-OUT)",
+    "SmartPDU(AC_3P-IN & 1P-OUT)",
+    "SmartPDU(AC_3P-IN & 2P-OUT)",
+};
 
 /// @brief 板子类型
 enum MODBUS_BOARD_TYPE

+ 1 - 1
pro/src/dflt.c

@@ -6,7 +6,7 @@
 GlobalDeviceInfo DFLT_PARAS={
 
         .product = {
-            .id         = PROD_ID,
+            .id         = 0,
             .pname      = "Smart PDU",
             .pnumber    = "GCX00000X",
             .number     = "X00001",

+ 20 - 19
pro/src/mail.c

@@ -367,7 +367,8 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
         return -1;
     }
     char *prod_name=h->dm->_globalDevInfo.product.name;
-    int prod_id=h->dm->_globalDevInfo.product.id;
+    char  prod_id[32];
+    strcpy( prod_id,h->dm->_globalDevInfo.product.number);
     int langID=h->dm->_globalDevInfo.product.language;
 
     switch(type) {
@@ -377,24 +378,24 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
                 switch(alarm_type) {
                     case ENABLE_TAC_V_UP:
                     case ENABLE_TAC_V_DOWN:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case ENABLE_TAC_A_UP:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case ENABLE_TAC_W_UP:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case ENABLE_TAC_P_UP:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case ENABLE_TAC_STIME:
                     case ENABLE_TAC_ETIME:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
                     break;
 
                     default:
@@ -405,23 +406,23 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
                 switch(alarm_type) {
                     case WARNING_V_UP:
                     case WARNING_V_DOWN:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_V[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case WARNING_A_UP:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_A[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case WARNING_W_UP:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_W[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case WARNING_P_UP:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s %s", prod_name, prod_id, language_alarm_P[langID], language_exceed[langID], language_alarm[langID]);
                     break;
 
                     case 0 ... 2:
-                    snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
+                    snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_alarm_phase_lose[langID], language_alarm[langID]);
                     break;
 
                     default:
@@ -437,31 +438,31 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
                 case SENSOR_TYPE_TEMP_DOUBLE:
                 case SENSOR_TYPE_TEMP_HUMI:
                 case SENSOR_TYPE_TEMP:
-                 snprintf(temp, sizeof(temp), "%s %d %s/%s %s", prod_name, prod_id, language_temperature[langID], language_humidity[langID], language_alarm[langID]);
+                 snprintf(temp, sizeof(temp), "%s %s %s/%s %s", prod_name, prod_id, language_temperature[langID], language_humidity[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_SMOKE:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_smoke[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_sensor_smoke[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_WATER:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_humidity[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_humidity[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_ACCESS:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_access[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_sensor_access[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_GAS:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_atmosphere_gas[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_atmosphere_gas[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_AIR_PRESS:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_atmosphere_pressure[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_atmosphere_pressure[langID], language_alarm[langID]);
                 break;
 
                 case SENSOR_TYPE_LEAK:
-                snprintf(temp, sizeof(temp), "%s %d %s %s", prod_name, prod_id, language_sensor_leak[langID], language_alarm[langID]);
+                snprintf(temp, sizeof(temp), "%s %s %s %s", prod_name, prod_id, language_sensor_leak[langID], language_alarm[langID]);
                 break;
 
                 default:
@@ -472,7 +473,7 @@ int mail_post_alarm(int type, int subtype, int alarm_type, char *content)
 
         case ALARM_TYPE_NETWORK:
         {
-            snprintf(temp, sizeof(temp), "%s %d %s", prod_name, prod_id, language_alarm_Type_Network[langID]);
+            snprintf(temp, sizeof(temp), "%s %s %s", prod_name, prod_id, language_alarm_Type_Network[langID]);
         }
         break;
 

+ 39 - 24
pro/src/mqtt.c

@@ -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;
         }
@@ -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);