Ver código fonte

1、添加web页面mqtt证书、连接状态
2、添加andson项目下,MODBUS对零线控制

guohui 2 anos atrás
pai
commit
cf2d27b2ca

+ 8 - 7
pro/config/cfg.h

@@ -6,11 +6,10 @@
 #define PROD_ID                                 0
 #define PROD_TYPE                               1
 
-#define USE_INI
 
 /////////////customer demannd//////////////////////
 //#define PRJ_XIAN_AC_I1_O1_P4
-#define PRJ_XIAN_AC_I1_O1_P8
+//#define PRJ_XIAN_AC_I1_O1_P8
 //#define PRJ_USASL_AC_I3_O1
 //#define PRJ_USASL_AC_I3_O3
 //#define PRJ_ITK_AC_I1_O1
@@ -21,7 +20,7 @@
 //#define PRJ_INSPUR_DC_I_DC_O
 //#define PRJ_ANDERSON_AC_I3_O3
 //#define PRJ_HYPERTEC_AC_I3_O1
-//#define PRJ_TEST
+#define PRJ_TEST
 
 
 #if (defined PRJ_XIAN_AC_I1_O1_P4) || (defined PRJ_XIAN_AC_I1_O1_P8)  //GOM037
@@ -136,6 +135,8 @@
     #define USE_SMTP
     #define SMTP_SEND_BUILTIN
 
+    #define USE_NF_CTRL
+
     #define PROD_POWER_TYPE                     3
 #elif defined PRJ_HYPERTEC_AC_I3_O1
     //ac_in3_out1_36ch_nologo_en_hypertec
@@ -175,17 +176,17 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       2//4
+    #define MAX_CHN_COUNT                       4//24//4
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
     
-    //#define USE_SMTP
-    //#define SMTP_SEND_BUILTIN
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
 
     #define USE_MQTT
     #define MQTT_SERVER_BUILTIN
 
-    #define PROD_POWER_TYPE                     3
+    #define PROD_POWER_TYPE                     5
 #else
     #error define a PRJ_XXXX please!
 #endif

+ 43 - 8
pro/src/appweb_handle.c

@@ -3584,14 +3584,6 @@ static void serviceManagement(void *conn)
             dev_mqtt_update_ser(gdm->db, ser);
         }
     }
-    else if(strcmp(_serviceManageRequestInfo.type,"mqttZtQuery")==0)
-    {
-        ack_str = mqtt_status_to_json(1);
-    }
-    else if(strcmp(_serviceManageRequestInfo.type,"mqttZtSave")==0)
-    {
-        //
-    }
     else if(strcmp(_serviceManageRequestInfo.type,"listSnmpQuery")==0)
     {
         // 查询SNMP信息
@@ -4378,6 +4370,48 @@ static void serviceManagement(void *conn)
     cJSON_free((void*)ack_str);
 }
 
+
+static void serviceManagementUpload(void *conn)
+{
+    int idx,r=-1 ;
+    char path[200];
+    buf_t buf;
+    char *p,*tok="idx=";
+    mg_stream_t *s=(mg_stream_t*)conn;
+    struct mg_http_message *hm=s->ev_data;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    
+    if(strstr(hm->uri.buf, "type=importData")) {        //firmware upload
+        sprintf(path, "%s/%s", DOWN_FOLDER, CERT_FILE);
+        r = upload_handle(conn, path);
+        if(r==0) {
+            p = strstr(hm->uri.buf, tok);
+            if(p) {
+                idx = atoi(p+strlen(tok));
+                if(idx<0 || idx>=MQTT_SER_MAX) {
+                    printf("_____ wrong idx, %d\n", idx);
+                    return;
+                }
+                r = file_load(path, &buf);
+                if(r==0) {
+                    mqtt_server_t *ser=&dm->mqttInfo.ser[idx];
+
+                    if(buf.dlen<=sizeof(ser->cert)) {
+                        memcpy(ser->cert, buf.buf, buf.dlen);
+                        dev_mqtt_update_ser(dm->db, ser);
+                    }
+                    else {
+                        printf("_____ cert is too long, %d\n", buf.dlen);
+                    }
+                    free(buf.buf);
+                }
+            }
+        }
+    }
+}
+
+
+
 /// @brief 系统管理
 /// @param stream 
 static void systemManagent(void *conn)
@@ -5226,6 +5260,7 @@ static int webSetCallback(void)
     httpAddCallback("/pdu/logInformation", logInformation);//日志
     httpAddCallback("/pdu/communicationManagement", communicationManagement);//通信设置
     httpAddCallback("/pdu/serviceManagement", serviceManagement);//服务管理
+    httpAddCallback("/pdu/serviceManagementUpload", serviceManagementUpload);//服务管理
     httpAddCallback("/pdu/system", systemManagent);//用户管理
     httpAddCallback("/pdu/equipmentMintenance", equipmentMintenance);//设备重启 
     httpAddCallback("/pdu/equipmentMintenanceUpload", equipmentMintenanceUpload); //固件升级

+ 3 - 0
pro/src/cascade_slave.c

@@ -584,6 +584,7 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                                                      _globalTACManager->product_ch_addr - 1, 
                                                      phsts);
                             }
+                            g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, val);
                             break;
                         }else
                         {
@@ -636,6 +637,8 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                         _globalPowerMangerTemp->product_ch_status = val;
                         int rec = g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_ch_type, _globalPowerMangerTemp->product_saddr, val);
                         // printf("rec = %d 0x%x\n",rec,val);
+
+                        g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, val);
                     }
                 }
             }

+ 3 - 1
pro/src/common.h

@@ -56,6 +56,7 @@
 #define IMAGE_PATH          "image"
 #define LOGO_FILE           "logo.png"
 #define QRCODE_FILE         "qrcode.png"
+#define CERT_FILE           "ca.cert"
 
 
 #define AC_SINGLE_S_CUR_CHN_NUM 8
@@ -671,6 +672,7 @@ typedef struct {
     char                user[32];    			        //认证方式  
     char                password[32];
     char                cert[8192];
+    int                 status;
 }mqtt_server_t;
 typedef struct {
     #define MQTT_SER_MAX   5
@@ -681,7 +683,7 @@ typedef struct
 {
     int                 product_id;
     int                 userID;    				//用户ID
-    char*               userName;                //用户名-登录
+    char*               userName;               //用户名-登录
     char*               userPW; 		        //用户密码
     char*               nickName; 			    //用户名称
     int                 roleID;    		        //角色ID

+ 16 - 0
pro/src/json_handle.c

@@ -4472,6 +4472,11 @@ cJSON* json_to_service_manage(const char* str,_ServiceManageRequestInfo* _servic
         if(tmp) {
             info->password = tmp->valuestring;
         }
+
+        tmp = cJSON_GetObjectItem(cjson, "ljzt");
+        if(tmp) {
+            info->status = tmp->valuestring;
+        }
     }
     else if(strcmp(_serviceManageRequestInfo->type,"mqttOpen")==0)
     {
@@ -5072,6 +5077,17 @@ char* service_mqtt_ack_to_json(mqtt_info_t* info)
                 cJSON_AddStringToObject(tmp,"mm", ser->password);
                 cJSON_AddStringToObject(tmp,"kfdId", ser->cid);
 
+                if(strlen(ser->cert)>0) {
+                    strcpy(buf, "CERT");
+                }
+                else {
+                    strcpy(buf, "");
+                }
+                cJSON_AddStringToObject(tmp,"zs", buf);
+
+                sprintf(buf, "%d", ser->status?1:2);
+                cJSON_AddStringToObject(tmp,"ljzt", buf);
+
                 cJSON_AddItemToArray(array, tmp);
             }
         }

+ 1 - 0
pro/src/json_handle.h

@@ -364,6 +364,7 @@ typedef struct
     char* user;
     char* password;
     char* cert;
+    char* status;       //connect status
 }_MQTT_ServerRequestInfo;
 
 /// @brief SNMP信息

+ 11 - 20
pro/src/mqtt.c

@@ -116,7 +116,12 @@ static int send_stat(mqtt_conn_t *conn, int type);
 static int get_serv(char *json);
 static void* client_thread(void *arg);
 /////////////////////////////////////////////////////////
-
+static void set_status(mqtt_conn_t *conn, int flag)
+{
+    mqtt_handle_t *h=(mqtt_handle_t*)conn->h;
+    int id=conn->ser.id;
+    h->dm->mqttInfo.ser[id].status = flag;
+}
 static char *get_int_str(int n)
 {
     static char tmp[32];
@@ -144,16 +149,7 @@ static int get_date_time(char *d, char *t)
     return 0;
 }
 
-static mqtt_conn_t* get_conn(mqtt_handle_t *h, mg_conn_t *c)
-{
-    int i;
-    for(i=0; i<MQTT_SER_MAX; i++) {
-        if(h->conn[i].c==c) {
-            return &h->conn[i];
-        }
-    }
-    return NULL;
-}
+
 static int sub_one(mg_conn_t *c, char *topic)
 {
     int r=-1;
@@ -190,14 +186,7 @@ static int pub_one(mg_conn_t *c, char *topic, char *data)
 
     return 0;
 }
-static int is_period(int id)
-{
-    if(id==MQTT_PUB_INFO_DEVICE || id==MQTT_PUB_STAT_NETWORK ||
-       id==MQTT_PUB_STAT_SENSOR || id==MQTT_PUB_STAT_SERVICE) {
-        return 0;
-    }
-    return 1;
-}
+
 static int my_pub(mqtt_conn_t *conn, char *topic, char *data)
 {
     if(conn->c) {
@@ -266,7 +255,7 @@ static int get_url(mqtt_server_t *ser, char *url)
     int port=1883;
     char *head="mqtts";
 
-    if(!ser->server[0] || !ser->port[0]) {
+    if(!ser->server[0] || !ser->port[0] || !ser->mode) {
         return -1;
     }
 
@@ -442,6 +431,7 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
         case  MG_EV_MQTT_OPEN:
         {
             send_once(conn);
+            set_status(conn, 1);
         }
         break;
         
@@ -470,6 +460,7 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
         case MG_EV_CLOSE:
         {
             conn->c = NULL;
+            set_status(conn, 0);
         }
         break;
     }

+ 8 - 5
pro/src/switch_ctrl.c

@@ -3,6 +3,7 @@
 #include "modbus_handle.h"
 #include "hlw8110_habdle.h"
 #include "breaker_detection.h"
+#include "cfg.h"
 
 /// @brief 获取继电器板类型以及通道
 /// @param manger 
@@ -2001,16 +2002,18 @@ int g_switch_set_t_ac_chn_ctrl(void* manger,int saddr,unsigned char chn,unsigned
 
 int g_switch_set_t_ac_chn_NF_ctrl(void* manger,int saddr,unsigned char chn,unsigned short sts)
 {
+    int r=0;
+#ifdef USE_NF_CTRL
     unsigned int offset = 0;
-    if(chn > 3 || chn < 0) return -1;
+    if(chn >= 3 || chn < 0) return -1;
     unsigned short data_temp[2]; 
-    memset(data_temp,0,sizeof(data_temp));
-    if(chn>=3)
-        return -1;  
+    memset(data_temp,0,sizeof(data_temp)); 
     offset = _SWITCH_T_AC_NF_STATUS;   
     data_temp[0]=sts;
     data_temp[1]=0;
-    return g_modbus_write_x_reg(manger,saddr,offset, 2, data_temp);
+    r = g_modbus_write_x_reg(manger,saddr,offset, 2, data_temp);
+#endif
+    return r;
 }
 
 int g_switch_set_t_ac_phchn_ctrl(void* manger,int saddr,unsigned char chn,unsigned short sts)