Explorar o código

MOD:1:增加刷新websocket时间间隔200ms
2.修复了三相无法设置延时的功能.
3.增加了三相单出在4通道板子上的同步显示功能.
4.未测试级联待测试

chenyuanjie %!s(int64=2) %!d(string=hai) anos
pai
achega
2da3686b38

+ 221 - 9
pro/src/app.c

@@ -38,9 +38,11 @@ void* power_thread(void* arg)
     GlobalPowerManger* _globalPowerMangerTemp = NULL ;
     GlobalPowerInfo _globalPowerInfo ;
     GlobalPowerInfo _globalTotalPowerInfo ; //总电源信息
-    GlobalTreeACManager pTreeAPowerInfo;    //三相子电源信息
+    GlobalTreeACManager* pTreeAPowerInfo;    //三相子电源信息
     GlobalTreeACManager* _pTreeACPowerMangerTemp = NULL ;                
     PowerWarningInfo _globalPowerWarningInfo ;
+    float Vavg[3]={0.0,0.0,0.0};
+    int VavgTimes[3]={0,0,0};
     struct tm* t ;
     struct timeval tv;
     struct timezone tz ;
@@ -144,6 +146,8 @@ void* power_thread(void* arg)
         }
         bool SaveDBFlag=false; //数据库存储记录,只要有通道存,就存一次总通道数据  
         int _chn = 0;
+        memset(Vavg,0.0,sizeof(Vavg));
+        memset(VavgTimes,0,sizeof(VavgTimes));
         //数据刷新
         pthread_mutex_lock(&__globalDeviceManage._power_update);
         list_for_each_entry(_globalPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list, list)
@@ -262,7 +266,100 @@ void* power_thread(void* arg)
                         dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
                     //动作
+                    if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
+                    {
+                        GlobalTreeACManager *_pTreeACPowerPhData = NULL;
+                        memset(&_globalPowerInfo._power_info, 0, sizeof(_globalPowerInfo._power_info));
+                        int k = 0;
+                        list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
+                        {
+                            if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B && _pTreeACPowerMangerTemp->product_ph_outputStatus == 2)
+                            {
+                                continue;
+                            }
+                            memcpy(&_pTreeACPowerMangerTemp->_PowerInfo, &_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerInfo));
+                            memcpy(&_pTreeACPowerMangerTemp->_PowerWarninginfo, &_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerWarningInfo));
+                            gettimeofday(&tv, NULL);
+                            // t = localtime(&tv.tv_sec);
+                            // 计算总三项总数据
+                            _globalPowerInfo._power_info.voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage;
+                            _globalPowerInfo._power_info.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
+                            _globalPowerInfo._power_info.power += _pTreeACPowerMangerTemp->_PowerInfo.power;
+                            _globalPowerInfo._power_info.freq = _pTreeACPowerMangerTemp->_PowerInfo.freq;
+                            _globalPowerInfo._power_info.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
+                            _globalPowerInfo._power_info.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
+                            //
+                            pTreeAPowerInfo = NULL;
+                            list_for_each_entry(pTreeAPowerInfo, &_globalDeviceManager->_globalPowerManger.list_Tree_AC, list_Tree_AC)
+                            {
+                                int nTreeACType = pTreeAPowerInfo->product_ph_type;
+                                if (nTreeACType < 0 || nTreeACType > 3) // 不是ABC相的情况直接跳过
+                                {
+                                    continue;
+                                }
+                                if (nTreeACType == _pTreeACPowerMangerTemp->product_ph_type)
+                                {
+                                    if (VavgTimes[nTreeACType] == 0)
+                                    {
+                                        Vavg[nTreeACType] =_pTreeACPowerMangerTemp->_PowerInfo.voltage;
+                                    }
+                                    else
+                                    {
+                                        Vavg[nTreeACType]  = (Vavg[nTreeACType]  * VavgTimes[nTreeACType]  + _pTreeACPowerMangerTemp->_PowerInfo.voltage) / VavgTimes[nTreeACType] ;
+                                    }
+
+                                    pTreeAPowerInfo->_PowerInfo.voltage = Vavg[nTreeACType];
+                                    pTreeAPowerInfo->_PowerInfo.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
+                                    pTreeAPowerInfo->_PowerInfo.power += _pTreeACPowerMangerTemp->_PowerInfo.power;
+                                    pTreeAPowerInfo->_PowerInfo.freq = _pTreeACPowerMangerTemp->_PowerInfo.freq;
+                                    pTreeAPowerInfo->_PowerInfo.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
+                                    pTreeAPowerInfo->_PowerInfo.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
+                                    VavgTimes[nTreeACType]+=1;
+                                }
+                            }
+
+                            if (__globalDeviceManage.triphasic_mmap)
+                            {
+                                __globalDeviceManage.triphasic_mmap->pw_o_chn[_chn].chn[k].o_consumption = _pTreeACPowerMangerTemp->_PowerInfo.consumption * 1000;
+                                __globalDeviceManage.triphasic_mmap->pw_o_chn[_chn].chn[k].o_current = _pTreeACPowerMangerTemp->_PowerInfo.current * 1000;
+                                __globalDeviceManage.triphasic_mmap->pw_o_chn[_chn].chn[k].o_power = _pTreeACPowerMangerTemp->_PowerInfo.power * 1000;
+                                __globalDeviceManage.triphasic_mmap->pw_o_chn[_chn].chn[k].o_voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage * 1000;
+                                __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_type = _pTreeACPowerMangerTemp->product_ph_type;
+                            }
 
+                            if (_globalPowerInfo._power_info.status == 0)
+                            {
+                                _globalPowerInfo._power_info.status = _pTreeACPowerMangerTemp->_PowerInfo.status;
+                            }
+                            else
+                            {
+                                _globalPowerInfo._power_info.status = 0;
+                            }
+                            if (__globalDeviceManage.triphasic_mmap)
+                            __globalDeviceManage.triphasic_mmap->pw_o_chn[_chn].chn[k].o_status = _globalPowerInfo._power_info.status;
+                            time_t now;
+                            time(&now);
+                            t = localtime(&now);
+
+                            char buffer[80];
+                            strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
+                            memset(_globalPowerInfo.samp_time, 0, sizeof(_globalPowerInfo.samp_time));
+                            strftime(_globalPowerInfo.samp_time, sizeof(_globalPowerInfo.samp_time), "%Y-%m-%d %H:%M:%S", t);
+                            sprintf(buffer, ".%03ld", tv.tv_usec / 1000);
+                            strcat(_globalPowerInfo.samp_time, buffer);
+
+                            if (difftime(now, _pTreeACPowerMangerTemp->product_log_time) > (sSaveTime / 1000))
+                            {
+                                _pTreeACPowerMangerTemp->product_log_time = now;
+                                /* code */
+                                // 插入数据库
+                                if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &nSaveTacIndex, _globalPowerInfo.samp_time) != 0)
+                                {
+                                    log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
+                                }
+                            }
+                        }
+                    }
                 }
                 break;
                 case DC_OUT_TYPE:
@@ -648,6 +745,50 @@ void* power_thread(void* arg)
             }
             __globalDeviceManage.triphasic_mmap->dev_chn = __globalDeviceManage._global_device_info->product_pwr_type << 8 | _chn;
         }
+        if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
+        {
+            _pTreeACPowerMangerTemp = NULL;
+            list_for_each_entry(_pTreeACPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list_Tree_AC, list_Tree_AC)
+            {
+                int nTreeACType = _pTreeACPowerMangerTemp->product_ph_type;
+                if (nTreeACType < 0 || nTreeACType > 3) // 不是ABC相的情况直接跳过
+                {
+                    continue;
+                }
+                if (_globalDeviceManager->triphasic_mmap)
+                {
+                    _globalDeviceManager->triphasic_mmap->i_total.pw_i_total[nTreeACType].i_total_consumption = _pTreeACPowerMangerTemp->_PowerInfo.consumption * 1000;
+                    _globalDeviceManager->triphasic_mmap->i_total.pw_i_total[nTreeACType].i_total_power = _pTreeACPowerMangerTemp->_PowerInfo.power * 1000;
+                    _globalDeviceManager->triphasic_mmap->i_total.pw_i_total[nTreeACType].i_total_voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage * 1000;
+                    _globalDeviceManager->triphasic_mmap->i_total.pw_i_total[nTreeACType].i_total_current = _pTreeACPowerMangerTemp->_PowerInfo.current * 1000;
+                }
+
+                time_t now;
+                time(&now);
+                t = localtime(&now);
+
+                char buffer[80];
+                strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
+                memset(_globalPowerInfo.samp_time, 0, sizeof(_globalPowerInfo.samp_time));
+                strftime(_globalPowerInfo.samp_time, sizeof(_globalPowerInfo.samp_time), "%Y-%m-%d %H:%M:%S", t);
+                sprintf(buffer, ".%03ld", tv.tv_usec / 1000);
+                strcat(_globalPowerInfo.samp_time, buffer);
+                if (difftime(now, _pTreeACPowerMangerTemp->product_log_time) > (sSaveTime / 1000))
+                {
+                    _pTreeACPowerMangerTemp->product_log_time = now;
+                    /* code */
+                    // 插入数据库
+                    if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &nSaveTacIndex, _globalPowerInfo.samp_time) != 0)
+                    {
+                        log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
+                    }
+                }
+            }
+            if (_globalDeviceManager->triphasic_mmap)
+            {
+                __globalDeviceManage.triphasic_mmap->dev_chn = __globalDeviceManage._global_device_info->product_pwr_type << 8 | _chn;
+            }
+        }
 
         //插入总电源信息
         gettimeofday(&tv, &tz);
@@ -886,8 +1027,11 @@ void* sensor_thread(void* arg)
                     _globalDeviceManager->single_mmap->total_temp.humidity = _globalSensorInfo.val2 *100;
                 }else
                 {
-                    _globalDeviceManager->triphasic_mmap->temperature = temperature *100;
-                    _globalDeviceManager->triphasic_mmap->humidity = humidity * 100;
+                    if (_globalDeviceManager->triphasic_mmap)
+                    {
+                        _globalDeviceManager->triphasic_mmap->temperature = temperature * 100;
+                        _globalDeviceManager->triphasic_mmap->humidity = humidity * 100;
+                    }
                 }
                 _globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;;
                 _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
@@ -1286,7 +1430,10 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
             log_i("all chn data inserted ok.\n");
         }        
     }
-    if (_globalDeviceManager->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_Tree||_globalDeviceManager->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One)
+    if (_globalDeviceManager->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_Tree
+    ||_globalDeviceManager->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One
+    ||_globalDeviceManager->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One_B
+    )
     {
         __globalDeviceManage.nTreeACLshow=0;
         _globalDeviceManager->useSlaveCount++;
@@ -1460,11 +1607,76 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                                 log_i("chn %d data inserted ok.\n",(i-1)*AC_SINGLE_S_CUR_CHN_NUM+j+1);
                             }
                             */
-                        }   
-                        _globalPowerMangerTemp->product_saddr = i ;
-                        //添加到队尾
-                        list_add_tail(&_globalPowerMangerTemp->list,&_globalDeviceManager->_globalPowerManger.list);
-                        chn+=1;
+                        }
+                        if (type == AC_SINGLE_B_TYPE && _globalDeviceManager->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
+                        {
+                            // 初始化三相子通道
+                            GlobalTreeACManager *_globalTACManager = NULL;
+                            INIT_LIST_HEAD(&_globalPowerMangerTemp->list_Tree_AC);
+                            for (size_t indexT = 0; indexT < 3; indexT++)
+                            {
+                                _globalTACManager = (GlobalTreeACManager *)malloc(sizeof(GlobalTreeACManager));
+                                memset(_globalTACManager, 0, sizeof(GlobalTreeACManager));
+                                if (_globalTACManager == NULL)
+                                {
+                                    log_e("_globalTACManager malloc error.\n");
+                                    return -1;
+                                }
+                                _globalTACManager->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
+                                memset(_globalTACManager->global_over_manager, 0, sizeof(GlobalOverManager));
+                                if (_globalTACManager->global_over_manager == NULL)
+                                {
+                                    log_e("_globalTACManager->global_over_manager malloc error.\n");
+                                    return -1;
+                                }
+                                ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
+                                                                     _globalDeviceManager->_global_device_info->product_id, i,
+                                                                     j + 1, // 1*8+j
+                                                                     nTac_chn,
+                                                                     _globalTACManager);
+                                _globalTACManager->product_ch_addr = j + 1;
+                                // 未查询到信息 则插入
+                                if (ret == -1)
+                                {
+                                    _globalTACManager->product_id = _globalDeviceManager->_global_device_info->product_id;
+                                    _globalTACManager->product_saddr = i;
+                                    _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
+                                    _globalTACManager->product_ch_addr = j + 1;
+                                    _globalTACManager->product_ph_id = nTac_chn;
+                                    _globalTACManager->product_ph_type = indexT;
+                                    _globalTACManager->product_ph_outputType = 2; // 1三相2单相
+                                    if (nTac_chn == 0)
+                                    {
+                                        _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
+                                    }
+                                    else
+                                    {
+                                        _globalTACManager->product_ph_outputStatus = 2; // 1输出2不输出
+                                    }
+
+                                    if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
+                                                                          _globalDeviceManager->_global_device_info->product_id,
+                                                                          _globalTACManager->product_ch_id,
+                                                                          _globalTACManager) != 0)
+                                    {
+                                        log_e("address %d ph_chn %d data inserted error.\n", i, nTac_chn);
+                                        return 0;
+                                    }
+                                }
+                                // 绑定到三项通道
+                                _globalTACManager->product_saddr = i;
+                                _globalTACManager->product_ph_type = indexT;
+                                if (_globalPowerMangerTemp)
+                                {
+                                    list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
+                                }
+                                nTac_chn += 1;
+                            }
+                        }
+                        _globalPowerMangerTemp->product_saddr = i;
+                        // 添加到队尾
+                        list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
+                        chn += 1;
                     }
                 }
                 break;

+ 9 - 5
pro/src/appweb_handle.c

@@ -478,7 +478,10 @@ static void overallStatusMonitoring(void* conn)
             _over_all_pwr_back_info.product_id = __globalDeviceManage._global_device_info->product_id;
             _over_all_pwr_back_info.product_number = __globalDeviceManage._global_device_info->product_number;
             //查询数据库总电源信息
-            if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_Tree ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One)
+            if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_Tree 
+            ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One
+            ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B
+            )
             {
                 if (strcmp(_over_all_sts_monitor.product_phOrder, "L1") == 0) // a相
                 {
@@ -1313,7 +1316,8 @@ static void channelStatusMonitoring(void* conn)
                 break;
             }
         }
-        if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One)
+        if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One
+            ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
         {
             if (_over_chn_pwr_request.outputType == 1)
             {
@@ -2762,9 +2766,9 @@ static void serviceManagement(void *conn)
             }
         }
         if (bflag == false) return;
-        
-        //ack_str = service_sx_ack_to_json(_globalPowerMangerTemp->product_id, &__globalDeviceManage._globalPowerManger);
-        //if (_serviceManageRequestInfo._posix_info.productId) free(_serviceManageRequestInfo._posix_info.productId);
+                
+        ack_str = service_sx_ack_to_json(_globalPowerMangerTemp->product_id, &__globalDeviceManage._globalPowerManger);
+        if (_serviceManageRequestInfo._posix_info.productId) free(_serviceManageRequestInfo._posix_info.productId);
     }   
     else if(strcmp(_serviceManageRequestInfo.type,"sXTimeSave")==0)//保存时间间隔
     {

+ 2 - 1
pro/src/common.h

@@ -118,7 +118,8 @@ enum AppProductType
     SmartPDU_AC=0,
     SmartPDU_DC=1,
     SmartPDU_Tree_AC_Tree=3,
-    SmartPDU_Tree_AC_One=4    
+    SmartPDU_Tree_AC_One=4,
+    SmartPDU_Tree_AC_One_B=5,    
 };
 
 /// @brief 三相网页数据

+ 15 - 7
pro/src/json_handle.c

@@ -1126,8 +1126,13 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
                             sprintf(temp, "%d", dl.slave[i].addr);
                             cJSON_AddStringToObject(data_filed, "RSadress", temp);
                         }
+                        if(_over_back_sts_info->product_type_id==SmartPDU_Tree_AC_One_B||_over_back_sts_info->product_type_id==SmartPDU_Tree_AC_One)
+                        {
+                            sprintf(temp, "%d", 4);
+                        }else{
+                            sprintf(temp, "%d", _over_back_sts_info->product_type_id);
+                        }
 
-                        sprintf(temp, "%d", _over_back_sts_info->product_type_id);
                         cJSON_AddStringToObject(data_filed, "productType", temp);
                         cJSON_AddStringToObject(data_filed, "productStatus", "online");
                         cJSON_AddItemToArray(root_array, data_filed);
@@ -2069,7 +2074,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)
+        if (_chnPwrTemp->product_type==TREE_AC_TYPE||(_chnPwrTemp->product_type==AC_SINGLE_B_TYPE&&__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B))
         {
             if (_chnPwrTemp->product_phType>=0&&_chnPwrTemp->product_phType<3)
             {
@@ -2096,7 +2101,8 @@ char* over_chn_pwr_monitor_to_json(_OverChnPwrAckInfo* _over_chn_pwr_back_info)
         // cJSON_AddNumberToObject(data_filed,"productChPowerFreq",_over_chn_pwr_back_info->freq);
         // cJSON_AddNumberToObject(data_filed,"productChConsumption",_over_chn_pwr_back_info->consumption);
         // cJSON_AddNumberToObject(data_filed,"productChPowerFactor",_over_chn_pwr_back_info->factor);
-        cJSON_AddNumberToObject(data_filed,"productChStatus",_chnPwrTemp->status);
+        sprintf(temp, "%d", _chnPwrTemp->status);
+        cJSON_AddStringToObject(data_filed, "productChStatus", temp);
         cJSON_AddItemToObject(data_root_array, "data", data_filed);        
     }
     //添加汇总
@@ -2711,7 +2717,8 @@ char* alarm_power_threshold_to_json(GlobalPowerManger* _globalPowerManger)
         cJSON_AddNumberToObject(data_filed,"productChId",_globalPowerMangerTemp->product_ch_id);
         //cJSON_AddNumberToObject(data_filed,"dyType",_globalPowerMangerTemp->product_ch_id);
         cJSON_AddNumberToObject(data_filed,"dyType",1);
-        cJSON_AddNumberToObject(data_filed,"productChStatus",_globalPowerMangerTemp->_PowerInfo.status);
+        sprintf(temp, "%d", _globalPowerMangerTemp->_PowerInfo.status);
+        cJSON_AddStringToObject(data_filed,"productChStatus",temp);
         sprintf(temp,"%0.2f",_globalPowerMangerTemp->global_over_manager->product_cur_upper_threshold);
         cJSON_AddStringToObject(data_filed,"currentUpperValue",temp);
         sprintf(temp,"%0.2f",_globalPowerMangerTemp->global_over_manager->product_vol_upper_threshold); 
@@ -2730,7 +2737,7 @@ char* alarm_power_threshold_to_json(GlobalPowerManger* _globalPowerManger)
         cJSON_AddStringToObject(data_filed,"productChName",_globalPowerManger->product_ch_name);
         cJSON_AddNumberToObject(data_filed,"productChId",_globalPowerManger->product_ch_id);
         cJSON_AddNumberToObject(data_filed,"dyType",_globalPowerManger->product_ch_id);
-        cJSON_AddNumberToObject(data_filed,"productChStatus",1);
+        cJSON_AddStringToObject(data_filed,"productChStatus","1");
         sprintf(temp,"%0.2f",_globalPowerManger->global_over_manager->product_cur_upper_threshold);
         cJSON_AddStringToObject(data_filed,"currentUpperValue",temp);
         sprintf(temp,"%0.2f",_globalPowerManger->global_over_manager->product_vol_upper_threshold);
@@ -2974,8 +2981,9 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
         sprintf(temp,"%d",_chnPwrTemp->product_ch_stop_delay/1000);     
         cJSON_AddStringToObject(data_filed,"closeInterval",temp);
         cJSON_AddItemToObject(sub_data_root_array, "data", data_filed);
-        cJSON_AddNumberToObject(data_filed,"productChStatus",_chnPwrTemp->status);
-        if (_chnPwrTemp->product_type == TREE_AC_TYPE)
+        sprintf(temp, "%d", _chnPwrTemp->status);
+        cJSON_AddStringToObject(data_filed,"productChStatus",temp);
+        if (_chnPwrTemp->product_type == TREE_AC_TYPE||(_chnPwrTemp->product_type==AC_SINGLE_B_TYPE&&__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B))
         {
             if (_chnPwrTemp->product_phType >= 0 && _chnPwrTemp->product_phType < 3)
             {

+ 3 - 3
pro/src/sqlite_handle.c

@@ -384,12 +384,12 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
     char* upgrade_msg = NULL ;
     list_for_each_entry(_globalPowerMangerTemp, &globalDeviceManger->_globalPowerManger.list, list)
     {
-        if (_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE)
+        if (_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||(_globalPowerMangerTemp->product_ch_type==AC_SINGLE_B_TYPE&&__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B))
         {
             GlobalTreeACManager* _TreeACTemp=NULL;
             int nStatus=-1;//-1则状态不变,0、1则是子状态
             //判断是否三相单输出情况下
-            if(_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE)
+            if(_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||(_globalPowerMangerTemp->product_ch_type==AC_SINGLE_B_TYPE&&__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B))
             {
                 list_for_each_entry(_TreeACTemp, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
                 {
@@ -429,7 +429,7 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
                 _overChnPwrBackInfoTemp->ph_consumption = _TreeACTemp->_PowerInfo.consumption;
                 _overChnPwrBackInfoTemp->ph_outputType   = _TreeACTemp->product_ph_outputType;
                 _overChnPwrBackInfoTemp->ph_outputStatus = _TreeACTemp->product_ph_outputStatus;
-                if (globalDeviceManger->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One && 
+                if ((globalDeviceManger->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One ||globalDeviceManger->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B) && 
                     _TreeACTemp->product_ph_outputType == 2 && _TreeACTemp->product_ph_outputStatus == 2) // 如果是单项输出并且则非输出通道数据为0
                 { 
                      // 3-1模式 单项状态,不输出则数据为空

+ 1 - 1
pro/src/switch_ctrl.c

@@ -12,7 +12,7 @@
 int g_switch_get_type(void* manger,int saddr, int* type,int* chn,int nPowerType)
 {
     
-    if(nPowerType==SmartPDU_AC) //交流无法使用需要
+    if(nPowerType==SmartPDU_AC||nPowerType==SmartPDU_Tree_AC_One_B) //交流无法使用需要
     {
         int ret = 0 ;
         unsigned short data_temp = 0 ;

+ 3 - 1
pro/src/websocket_handle.c

@@ -65,7 +65,8 @@ static void web_update(ws_handle_t *wh)
         //if(gdm->view_page==1)
         { 
             if(gdm->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_Tree ||
-                gdm->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One)
+                gdm->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One ||
+				gdm->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One_B)
             {
                 //三相
                 _OverAllPwrAckInfo l1,l2,l3;
@@ -209,6 +210,7 @@ void* websocket_thread(void* arg)
         mg_mgr_poll(&wh->mgr, 1000);                    // Infinite event loop
 
         web_update(wh);
+        usleep(200000);
     }
     wh->inited = 0;
     mg_mgr_free(&wh->mgr);