Kaynağa Gözat

1、增加通道分监不控功能;
2、增加定时Websocket推送;
3、增加MQTTWebsocket推送;

liyuezong 1 yıl önce
ebeveyn
işleme
137f757a9d

+ 1 - 1
pro/config/cfg.h

@@ -56,7 +56,7 @@
     #define USE_WATCHDOG
 #endif
 
-
+//#define USE_CH_CTRL_CONFIG
 
 #if (defined PRJ_XIAN_AC_I1_O1_P4) || (defined PRJ_XIAN_AC_I1_O1_P8)  //GOM037
     #define LANGUAGE                            0           //chinese

+ 13 - 0
pro/src/app.c

@@ -242,6 +242,7 @@ static void* power_thread(void* arg)
             memcpy(&_globalPowerWarningInfo,
             &_globalDeviceManager->pCtrlBoard[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
             sizeof(PowerWarningInfo));
+
             switch (_globalPowerMangerTemp->product_ch_type)
             {
               case AC_SINGLE_S_TYPE:
@@ -955,6 +956,18 @@ static void* power_thread(void* arg)
             //nanosleep(&reqSleep, NULL); 
             //usleep(usleepTime);
             #endif
+
+
+            //-- 临时加的通道是否可控 lyz 2025.05.01----
+#ifdef USE_CH_CTRL_CONFIG
+            if (_globalPowerMangerTemp->product_ch_id>6 && _globalPowerMangerTemp->product_ch_id<=10)
+            {
+                _globalPowerInfo._power_info.OperAllowFlag=1;
+            }
+            
+#endif
+
+
             //全局记录一份数据
             if (!isErrorBreak)
             {

+ 3 - 2
pro/src/appweb_handle.c

@@ -1495,6 +1495,7 @@ static void channelStatusMonitoring(void* conn)
                     _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
                     _overChnPwrBackInfoTemp->status = _powerInfo._power_info.status; 
                    _overChnPwrBackInfoTemp->NF_status = _powerInfo._power_info.NF_status; 
+                   _overChnPwrBackInfoTemp->OperAllowFlag=_powerInfo._power_info.OperAllowFlag;
                     _overChnPwrBackInfoTemp->voltage = _powerInfo._power_info.voltage;
                     _overChnPwrBackInfoTemp->current = _powerInfo._power_info.current;
                     _overChnPwrBackInfoTemp->power = _powerInfo._power_info.power ;
@@ -4064,7 +4065,7 @@ static void serviceManagement(void *conn)
 #ifdef USE_MQTT
     else if(strcmp(_serviceManageRequestInfo.type,"listMqttQuery")==0)
     {
-        ack_str = service_mqtt_ack_to_json(&gdm->mqttInfo);
+        ack_str = service_mqtt_ack_to_json(&gdm->mqttInfo,0);
     }
     else if(strcmp(_serviceManageRequestInfo.type,"mqttSave")==0)
     {
@@ -4365,7 +4366,7 @@ static void serviceManagement(void *conn)
         ack_str = service_ds_all_ack_to_json(_serviceManageRequestInfo._ds_info.channelDate,
                                         _serviceManageRequestInfo._ds_info.productChName,
                                         _serviceManageRequestInfo._ds_info.productChId,
-                                        &__globalDeviceManage._globalPowerManger);
+                                        &__globalDeviceManage._globalPowerManger,0);
         lock_s_release(LOCK_ID_POWER_TIMER);
     }
     else if (strcmp(_serviceManageRequestInfo.type, "dsSave") == 0)

+ 2 - 0
pro/src/common.h

@@ -636,6 +636,8 @@ typedef struct
     float           factor                                      ;//功率因素    
     unsigned short  status                                      ;//开关状态     
     unsigned short  NF_status                                   ;//零线状态
+
+    int             OperAllowFlag;                               //操作允许标志
     
     port_info_t     port;                                       //
 }PowerInfo;

+ 82 - 14
pro/src/json_handle.c

@@ -2689,6 +2689,7 @@ char* over_chn_pwr_monitor_to_json(_OverChnPwrAckInfo* _over_chn_pwr_back_info)
         cJSON_AddStringToObject(data_filed,"firingInterval",temp);
         sprintf(temp,"%d",_chnPwrTemp->product_ch_stop_delay/1000);     
         cJSON_AddStringToObject(data_filed,"closeInterval",temp);
+
         if (_chnPwrTemp->product_type==TREE_AC_TYPE||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
         {
             if (_chnPwrTemp->product_phType>=0&&_chnPwrTemp->product_phType<3)
@@ -2720,6 +2721,8 @@ char* over_chn_pwr_monitor_to_json(_OverChnPwrAckInfo* _over_chn_pwr_back_info)
         cJSON_AddStringToObject(data_filed, "productChStatus", temp);
          sprintf(temp, "%d", _chnPwrTemp->NF_status);
         cJSON_AddStringToObject(data_filed, "productChZeroStatus", temp);
+        sprintf(temp, "%d", _chnPwrTemp->OperAllowFlag);
+        cJSON_AddStringToObject(data_filed,"sfyxcz",temp);
 
 #ifdef USE_NETSWITCH
         cJSON_AddStringToObject(data_filed, "MACadress",_chnPwrTemp->mac_addr);
@@ -4499,6 +4502,8 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
         cJSON_AddStringToObject(data_filed,"productChStatus",temp);
          sprintf(temp, "%d", _chnPwrTemp->NF_status);
         cJSON_AddStringToObject(data_filed,"productChZeroStatus",temp);
+        sprintf(temp, "%d", _chnPwrTemp->OperAllowFlag);
+        cJSON_AddStringToObject(data_filed,"sfyxcz",temp);
 
 #ifdef USE_NETSWITCH
         cJSON_AddStringToObject(data_filed, "MACadress",_chnPwrTemp->mac_addr);
@@ -4853,7 +4858,7 @@ char* service_ds_ack_to_json(char* chn_name,char* chn_id,_PowerDSManage_t* __pow
 /// @param chn_id 
 /// @param __powerDSManage_t 
 /// @return 
-char* service_ds_all_ack_to_json(char* pDate,char* strName,char* strchID,GlobalPowerManger* _powerAll)
+char* service_ds_all_ack_to_json(char* pDate,char* strName,char* strchID,GlobalPowerManger* _powerAll,int nWSType)
 {
     if (!_powerAll)
     {
@@ -4866,10 +4871,19 @@ char* service_ds_all_ack_to_json(char* pDate,char* strName,char* strchID,GlobalP
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
-    // 添加基本键值对
-    cJSON_AddNumberToObject(root, "code", 200); 
-    //创建数据
-    cJSON* data_root_array = cJSON_CreateArray();   
+    
+    cJSON* sdata_filed = cJSON_CreateObject();
+    if (nWSType)
+    {
+        cJSON_AddNumberToObject(sdata_filed, "code", 200);
+    }
+    else
+    {
+        cJSON_AddNumberToObject(root, "code", 200);
+    }
+    // 创建数据
+    cJSON *data_root_array = cJSON_CreateArray(); 
+
     GlobalPowerManger* _globalPowerMangerTemp=NULL;
     list_for_each_entry(_globalPowerMangerTemp, &_powerAll->list, list)
     {
@@ -4915,10 +4929,27 @@ char* service_ds_all_ack_to_json(char* pDate,char* strName,char* strchID,GlobalP
             cJSON_AddItemToObject(data_root_array, "data", data_filed);
         }
     }
-    //添加汇总
-    cJSON_AddItemToObject(root, "data", data_root_array);
-    //添加结果
-    cJSON_AddStringToObject(root, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+
+
+    if (nWSType)
+    {
+        // 添加汇总
+        cJSON_AddItemToObject(sdata_filed, "data", data_root_array);
+        // 添加结果
+        cJSON_AddStringToObject(sdata_filed, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+        cJSON_AddItemToObject(root, "data", sdata_filed);
+        // 添加内容
+        cJSON_AddStringToObject(root, "message", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+        cJSON_AddStringToObject(root, "socketIdx", "PDU-WebSocket");
+        cJSON_AddBoolToObject(root, "success", true);
+        cJSON_AddStringToObject(root, "type", "dsStatus");
+    }else
+    {
+        cJSON_AddItemToObject(root, "data", data_root_array);
+        // 添加内容
+        cJSON_AddStringToObject(root, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+    }
+
     //转换
     str = cJSON_Print(root);    
     //释放资源
@@ -5992,14 +6023,25 @@ char* service_mail_ack_to_json(mail_info_t* info)
 }
 
 
-char* service_mqtt_ack_to_json(mqtt_info_t* info)
+char* service_mqtt_ack_to_json(mqtt_info_t* info,int nWSType)
 {
     int idx=0;
     char buf[30];
     char* str = NULL;
     
-    cJSON* root = cJSON_CreateObject();
-    cJSON_AddNumberToObject(root, "code", 200); 
+  // 创建 JSON 对象
+    cJSON* root = cJSON_CreateObject();   
+    
+    cJSON* sdata_filed = cJSON_CreateObject();
+    if (nWSType)
+    {
+        cJSON_AddNumberToObject(sdata_filed, "code", 200);
+    }
+    else
+    {
+        cJSON_AddNumberToObject(root, "code", 200);
+    }
+
 
 #if 1
     cJSON *tmp,*array=cJSON_CreateArray();
@@ -6036,14 +6078,40 @@ char* service_mqtt_ack_to_json(mqtt_info_t* info)
                 cJSON_AddItemToArray(array, tmp);
             }
         }
-        cJSON_AddItemToObject(root, "data", array);
+
+        if (nWSType)
+        {
+            // 添加汇总
+            cJSON_AddItemToObject(sdata_filed, "data", array);
+            // 添加结果
+            cJSON_AddStringToObject(sdata_filed, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+            cJSON_AddItemToObject(root, "data", sdata_filed);
+            // 添加内容
+            cJSON_AddStringToObject(root, "message", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+            cJSON_AddStringToObject(root, "socketIdx", "PDU-WebSocket");
+            cJSON_AddBoolToObject(root, "success", true);
+            cJSON_AddStringToObject(root, "type", "mqttStatus");
+        }
+        else
+        {
+            cJSON_AddItemToObject(root, "data", array);
+            // 添加内容
+            cJSON_AddStringToObject(root, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+        }
     }
 #endif
 
-    cJSON_AddStringToObject(root, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
     str = cJSON_Print(root);    
     cJSON_Delete(root);
     return str;
+
+
+
+
+
+
+
+
 }
 
 char* mqtt_status_to_json(int mode)

+ 4 - 2
pro/src/json_handle.h

@@ -169,6 +169,8 @@ typedef struct
     char            productChId;    
     int             status;
     int             NF_status;
+    int             OperAllowFlag; //允许操作状态 0-允许操作 1-不允许操作
+
     char*           mac_addr;
     char*           ip_addr;
 
@@ -638,12 +640,12 @@ char* communication_4G_ack_to_json(CellInfo_t* _CellularManagerTemp,int nWSType)
 char* communication_WIFI_ack_to_json(WIFIInfo_t* _WIFIManagertemp,int nWSType);
 
 char* service_ds_ack_to_json(char* chn_name,char* chn_id,_PowerDSManage_t* __powerDSManage_t);
-char* service_ds_all_ack_to_json(char* pDate,char* Name,char* nchID,GlobalPowerManger* __powerDSManage_t);
+char* service_ds_all_ack_to_json(char* pDate,char* Name,char* nchID,GlobalPowerManger* __powerDSManage_t,int nWSType);
 char* service_sx_ack_to_json(int product_id, GlobalPowerManger * __PowerManage_t);
 char* service_ntp_ack_to_json(NTPManager* __NTPManager_t);
 char* service_snmp_ack_to_json(SNMPManager* sm);
 char* service_mail_ack_to_json(mail_info_t* info);
-char* service_mqtt_ack_to_json(mqtt_info_t* info);
+char* service_mqtt_ack_to_json(mqtt_info_t* info,int nWSType);
 char* mqtt_status_to_json(int mode);
 
 char* service_group_ack_to_json(GroupInfo* _globalgroupInfo);

+ 1 - 0
pro/src/sqlite_handle.c

@@ -558,6 +558,7 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
                 _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
                 _overChnPwrBackInfoTemp->status = _globalPowerMangerTemp->_PowerInfo.status;
                 _overChnPwrBackInfoTemp->NF_status = _globalPowerMangerTemp->_PowerInfo.NF_status;
+                _overChnPwrBackInfoTemp->OperAllowFlag=_globalPowerMangerTemp->_PowerInfo.OperAllowFlag;
                 _overChnPwrBackInfoTemp->voltage = _globalPowerMangerTemp->_PowerInfo.voltage;
                 _overChnPwrBackInfoTemp->current = _globalPowerMangerTemp->_PowerInfo.current;
                 _overChnPwrBackInfoTemp->power = _globalPowerMangerTemp->_PowerInfo.power;

+ 36 - 0
pro/src/websocket_handle.c

@@ -287,6 +287,35 @@ static int ws_WIFI_update(ws_handle_t *h)
 #endif
 
 
+static int ws_DS_update(ws_handle_t *h)
+{
+    char *json;
+
+    json = service_ds_all_ack_to_json("","","0",&__globalDeviceManage._globalPowerManger, 1);
+    if (json)
+    {
+        ws_send_data(h, json, strlen(json));
+        cJSON_free(json);
+    }
+
+    return 0;
+}
+
+static int ws_MQTT_update(ws_handle_t *h)
+{
+    char *json;
+
+    json = service_mqtt_ack_to_json(&__globalDeviceManage.mqttInfo, 1);
+    if (json)
+    {
+        ws_send_data(h, json, strlen(json));
+        cJSON_free(json);
+    }
+
+    return 0;
+}
+
+
 /////////////////////////////////////////////////////////////
 
 static int ws_update(ws_handle_t *h)
@@ -319,6 +348,13 @@ static int ws_update(ws_handle_t *h)
 #if (CHIP_TYPE != CHIP_T113s)
     r = ws_WIFI_update(h);
 #endif
+
+    //DS refresh
+    r = ws_DS_update(h);
+
+    //MQTT refresh
+    r = ws_MQTT_update(h);
+
     //upgrade refresh
     r = ws_upg_update(h);