Browse Source

Merge remote-tracking branch 'origin/dev' into pro

lmstack 3 years ago
parent
commit
f10d2807db

+ 15 - 9
LIB/BACKEND/DBManager.py

@@ -84,19 +84,23 @@ class DBManager():
         i = 0
         while 1:
             try:
-                r = requests.get(url, stream=True, timeout=100,  headers={'Connection':'close'})
+                r = requests.get(url, stream=True, timeout=(0.1, 1000),  headers={'Connection':'keep-alive', 'Accept':'*/*', 'Accept-Encoding':'gzip,deflate,br'})
                 break
             except requests.exceptions.RequestException as e:
                 if (i == 0):
                     print()
                 print('\r' + 'Server Error, retry {}......'.format(str(i)), end=" ")
-                time.sleep(5)
+                time.sleep(0.1)
                 i+=1
         # print(r.content)
-        # pdb.set_trace()    
+        # pdb.set_trace()
+        data = [] 
         for line in r.iter_lines():
+
             if line:
-                yield json.loads(line)
+                data.append(json.loads(line))
+                # yield json.loads(line)
+        return data
 
     @staticmethod
     def _convert_to_dataframe_bms(data, mode=0):
@@ -198,6 +202,7 @@ class DBManager():
     
     @staticmethod
     def _get_data(urls,type_name,mode=0):
+        data = DBManager._download_json_data(urls)
         if type_name == 'bms':
             if mode == 0:
                 name_const = ['时间戳','GSM信号','故障等级','故障代码','总电流[A]','总电压[V]', '外电压', '总输出状态', '上锁状态', '充电状态','加热状态',
@@ -209,7 +214,8 @@ class DBManager():
             CellTNum = 0
             OtherTNumm = 0
             st = time.time()
-            for line in DBManager._download_json_data(urls):
+            
+            for line in data:
                 et = time.time()
                 try:
                     if i==0:
@@ -251,7 +257,7 @@ class DBManager():
             elif mode == 1:
                 df_all = pd.DataFrame(columns=['时间戳','定位类型', '纬度','经度','速度[km/h]','有效位'])
             
-            for line in DBManager._download_json_data(urls):
+            for line in data:
                 df_add = DBManager._convert_to_dataframe_gps(line, mode)
                 df_all = df_all.append(df_add,ignore_index=True)
             if not df_all.empty:
@@ -262,7 +268,7 @@ class DBManager():
                 df_all = pd.DataFrame(columns=['时间戳','加热目标温度', '加热超时','租赁开始时间','租赁天数','bms上传周期','gps上传周期'])
             elif mode == 1:
                 df_all = pd.DataFrame()
-            for line in DBManager._download_json_data(urls):
+            for line in data:
                 df_add = DBManager._convert_to_dataframe_system(line, mode)
                 df_all = df_all.append(df_add,ignore_index=True)
             if not df_all.empty:
@@ -275,13 +281,13 @@ class DBManager():
                                                '累计高温充电电量', '累计高温充电能量'])
             elif mode == 1:
                 df_all = pd.DataFrame(columns=['时间戳','累计充电电量','累计充电能量','累计放电电量','累计放电能量', '累积里程'])
-            for line in DBManager._download_json_data(urls):
+            for line in data:
                 df_add = DBManager._convert_to_dataframe_accum(line, mode)
                 df_all = df_all.append(df_add,ignore_index=True)
             if not df_all.empty:
                 df_all.loc[:,'时间戳'] = df_all.loc[:,'时间戳'].apply(lambda x:time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(x)/1000)))
             return df_all
-    def get_data(self, url='http://172.16.126.13/store/load?dataType={}&limit=0&sn={}', sn='', start_time='', end_time='', 
+    def get_data(self, url='http://172.16.121.236/store/load?dataType={}&limit=0&sn={}', sn='', start_time='', end_time='', 
                  data_groups=['bms', 'gps']):
         '''
         获取指定 sn 和起止日期的bms和gps数据.

+ 52 - 0
LIB/MIDDLE/Stray/VoltageStray/V_1_0_0/VoltageStray.py

@@ -0,0 +1,52 @@
+import pandas as pd
+
+class VoltageStray:
+    def __init__(self):  #参数初始化
+        pass
+
+    def cal_vol_uniform(self, df, roll=1, alarm_threshold=5):
+        volt_column = [x for x in df.columns if "单体电压" in x]
+        all_columns = volt_column.copy()
+        all_columns.append("时间戳")
+        df = df[all_columns]
+        df_filt = df.copy()
+        if len(df_filt) > 0:
+
+            # df_filt = df_t.dropna(how='all')
+            df_filt = df_filt.reset_index(drop=True)
+            volt_count = len(volt_column)-1
+            volt_column = volt_column
+            df_cell_volt = df_filt[all_columns]
+            df_cell_volt = df_cell_volt.dropna().reset_index(drop=True)
+            
+
+            # 观察单体电压
+            df_rolling = df_cell_volt.loc[:, volt_column].rolling(roll, center=True, min_periods=1).mean()  # 滑动平均值
+
+            # df_temp_change = df_temp_change.dropna().reset_index(drop=True)
+            # df_temp_change_2 = df_temp_change_2.dropna().reset_index(drop=True)
+
+            mean = df_rolling.mean(axis=1)
+            std = df_rolling.std(axis=1)
+            df_rolling_norm = df_rolling.sub(mean, axis=0).div(std,axis=0)
+
+            # fig = plt.figure(figsize=(20,12))
+            # ax1 = fig.add_subplot(2,1,1)
+            # ax1.set_title("电压 - " + file[0:-5])
+            # ax1.plot(df_rolling_norm)
+
+            # plt.savefig('./res/'+str(count) + '-' + file[0:-5] +"--原始电压-"+ '.png')
+            # plt.close()
+            # plt.clf()
+            # plt.cla()
+
+            all_alarm = {'alarm_time':[], 'alarm_cell':[]}
+            df_alarm = df_rolling_norm[abs(df_rolling_norm)>1].dropna(how='all')
+            for index in df_alarm.index:
+                print(index)
+                df_temp = df_alarm.loc[index, :].dropna(how='all', axis=0)
+                all_alarm['alarm_time'].append(df_cell_volt.loc[index, '时间戳'])
+                alarm_cell = df_temp.keys().tolist()
+                all_alarm['alarm_cell'].append(str([x[4:] for x in alarm_cell]))
+            df_alarm = pd.DataFrame(all_alarm)
+            return df_alarm

+ 15 - 0
LIB/MIDDLE/Stray/VoltageStray/main.py

@@ -0,0 +1,15 @@
+# 获取数据
+import sys
+from LIB.BACKEND import DBManager
+from LIB.MIDDLE.Stray.VoltageStray.V_1_0_0 import VoltageStray
+
+sn = "MGMCLN750N215N116"
+st = '2021-09-17 21:33:07'
+et = '2021-09-17 21:35:07'
+
+dbManager = DBManager.DBManager()
+df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms'])
+# 
+df_bms = df_data['bms']
+voltageStray = VoltageStray.VoltageStray();
+print(voltageStray.cal_vol_uniform(df_bms, 1, 5))