Browse Source

更新 信号检测

lmstack 3 years ago
parent
commit
14afcade56

+ 29 - 25
LIB/FRONTEND/SignalMonitor/create_table.py

@@ -23,12 +23,12 @@ class BmsLastDataDay(Base):
     line_state = Column(Integer, comment="信号状态")
 
 
-    def __init__(self, sn, current, time_stamp, pack_state, line_state):
-        self.sn = sn
-        self.current = current
-        self.time_stamp = time_stamp
-        self.pack_state = pack_state
-        self.line_state = line_state
+    # def __init__(self, sn, current, time_stamp, pack_state, line_state):
+    #     self.sn = sn
+    #     self.current = current
+    #     self.time_stamp = time_stamp
+    #     self.pack_state = pack_state
+    #     self.line_state = line_state
 
 class GpsLastDataDay(Base):
     __tablename__ = "gps_last_data_day"
@@ -41,13 +41,15 @@ class GpsLastDataDay(Base):
     time_stamp = Column(DateTime, comment="时间戳")
     pack_state = Column(Integer, comment="电池状态")
     line_state = Column(Integer, comment="信号状态")
+    latitude = Column(Integer, comment="纬度")
+    longtitude = Column(Integer, comment="经度")
 
 
-    def __init__(self, sn, time_stamp, pack_state, line_state):
-        self.sn = sn
-        self.time_stamp = time_stamp
-        self.pack_state = pack_state
-        self.line_state = line_state
+    # def __init__(self, sn, time_stamp, pack_state, line_state, ):
+    #     self.sn = sn
+    #     self.time_stamp = time_stamp
+    #     self.pack_state = pack_state
+    #     self.line_state = line_state
 
 class GpsSignalMonitor(Base):
     __tablename__ = "gps_signal_monitor"
@@ -62,15 +64,17 @@ class GpsSignalMonitor(Base):
     offline_time = Column(Integer, comment="离线时间")
     pack_state = Column(Integer, comment="电池状态")
     line_state = Column(Integer, comment="信号状态")
+    latitude = Column(Integer, comment="纬度")
+    longtitude = Column(Integer, comment="经度")
 
 
-    def __init__(self, sn, start_time, end_time, off_line_time, pack_state, line_state):
-        self.sn = sn
-        self.start_time = start_time
-        self.end_time = end_time
-        self.off_line_time = off_line_time
-        self.pack_state = pack_state
-        self.line_state = line_state
+    # def __init__(self, sn, start_time, end_time, off_line_time, pack_state, line_state):
+    #     self.sn = sn
+    #     self.start_time = start_time
+    #     self.end_time = end_time
+    #     self.off_line_time = off_line_time
+    #     self.pack_state = pack_state
+    #     self.line_state = line_state
 
 class BmsSignalMonitor(Base):
     __tablename__ = "bms_signal_monitor"
@@ -87,13 +91,13 @@ class BmsSignalMonitor(Base):
     line_state = Column(Integer, comment="信号状态")
 
 
-    def __init__(self, sn, start_time, end_time, off_line_time, pack_state, line_state):
-        self.sn = sn
-        self.start_time = start_time
-        self.end_time = end_time
-        self.off_line_time = off_line_time
-        self.pack_state = pack_state
-        self.line_state = line_state
+    # def __init__(self, sn, start_time, end_time, off_line_time, pack_state, line_state):
+    #     self.sn = sn
+    #     self.start_time = start_time
+    #     self.end_time = end_time
+    #     self.off_line_time = off_line_time
+    #     self.pack_state = pack_state
+    #     self.line_state = line_state
 
 # 执行该文件,创建表格到对应的数据库中
 if __name__ == "__main__":

+ 3 - 3
LIB/FRONTEND/SignalMonitor/main.py

@@ -42,11 +42,11 @@ if __name__ == "__main__":
         df_last_state = pd.DataFrame(
             columns=['sn', 'current', 'Timestamp', 'PackState', 'LineState'])    # 每日最后BMS数据
         df_last_state_gps = pd.DataFrame(
-            columns=['sn', 'Timestamp', 'PackState', 'LineState'])    # 每日最后GPS数据
+            columns=['sn', 'Timestamp', 'PackState', 'LineState', 'latitude', 'longtitude'])    # 每日最后GPS数据
         df_res = pd.DataFrame(columns=[
                                 'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime'])    # 初始化BMS信号统计数据
         df_res_gps = pd.DataFrame(columns=[
-                                    'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime'])    # 初始化GPS信号统计数据
+                                    'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime', 'latitude', 'longitude'])    # 初始化GPS信号统计数据
         while st < et:
 
             df_res, df_state, df_last_state = signalMonitor.get_bms_offline_stat(
@@ -57,7 +57,7 @@ if __name__ == "__main__":
             st = st + datetime.timedelta(hours=cal_period)
         SignalMonitor._file_write(r'D:\result_04.xls', df_res)    # BMS信号统计数据入库
         SignalMonitor._file_write(r'D:\result_05.xls', df_res_gps)    # GPS信号统计数据入库
-        
+
         SignalMonitor._file_write(r'D:\result_06.xls', df_last_state)
         SignalMonitor._file_write(r'D:\result_07.xls', df_last_state_gps)
 

+ 27 - 21
LIB/MIDDLE/SignalMonitor.py

@@ -75,7 +75,7 @@ class SignalMonitor():
         return df_state
     
     @staticmethod
-    def _judge_offline_state_between_messages(sn, PackState_new, PackState_old, Timestamp_new, Timestamp_old, df_res, mode):
+    def _judge_offline_state_between_messages(sn, PackState_new, PackState_old, Timestamp_new, Timestamp_old, lat, long, df_res, mode):
         delta_time = (Timestamp_new - Timestamp_old).total_seconds()
         max_state = max(PackState_new, PackState_old)
         if max_state == 0:
@@ -109,7 +109,7 @@ class SignalMonitor():
         
         if LineState > 0:
             df_res = df_res.append({'sn':sn[0], 'PackState':PackState_new*16+PackState_old, 'LineState':LineState, 'StartTime':Timestamp_old, 
-                        'EndTime':Timestamp_new, 'OfflineTime':delta_time}, ignore_index=True)
+                        'EndTime':Timestamp_new, 'OfflineTime':delta_time, 'latitude':lat, 'longitude':long}, ignore_index=True)
         return LineState, df_res
 
     @staticmethod
@@ -120,16 +120,19 @@ class SignalMonitor():
             while index < len(df_state)-1:
                 index = index + 1
                 LineState, df_res = SignalMonitor._judge_offline_state_between_messages(sn, df_state.loc[index, 'PackState'], df_state.loc[index-1, 'PackState'], 
-                df_state.loc[index, 'Timestamp'], df_state.loc[index-1, 'Timestamp'], df_res, mode=mode)
+                df_state.loc[index, 'Timestamp'], df_state.loc[index-1, 'Timestamp'], df_state.loc[index-1, 'latitude'], df_state.loc[index-1, 'longitude'],
+                df_res, mode=mode)
                 df_state.loc[index, 'LineState'] = LineState
         else:
             df_last_info = df_last_state.loc[len(df_last_state) - 1]
             df_state.loc[0,'LineState'], df_res = SignalMonitor._judge_offline_state_between_messages(sn, df_state.loc[0, 'PackState'], df_last_info['PackState'], 
-                df_state.loc[0, 'Timestamp'], df_last_info['Timestamp'], df_res, mode=mode)
+                df_state.loc[0, 'Timestamp'], df_last_info['Timestamp'], df_state.loc[0, 'latitude'], df_state.loc[0, 'longitude'],
+                df_res, mode=mode)
             while index < len(df_state)-1:
                 index = index + 1
                 LineState, df_res = SignalMonitor._judge_offline_state_between_messages(sn, df_state.loc[index, 'PackState'], df_state.loc[index-1, 'PackState'], 
-                df_state.loc[index, 'Timestamp'], df_state.loc[index-1, 'Timestamp'], df_res, mode=mode)
+                df_state.loc[index, 'Timestamp'], df_state.loc[index-1, 'Timestamp'], df_state.loc[index-1, 'latitude'], df_state.loc[index-1, 'longitude'],
+                df_res, mode=mode)
                 df_state.loc[index, 'LineState'] = LineState
         # SignalMonitor._file_write(r'D:\result_03.xls', df_state)
         return df_res
@@ -137,22 +140,22 @@ class SignalMonitor():
     @staticmethod
     def _set_gps_working_states(df_state, df_state_gps):
         for i in range(0, len(df_state_gps)):
-                if df_state_gps.loc[i, 'Timestamp'] <= df_state.loc[0, 'Timestamp']:
-                    df_state_gps.loc[i, 'PackState'] = df_state.loc[0, 'PackState']
-                elif df_state_gps.loc[i, 'Timestamp'] >= df_state.loc[len(df_state)-1, 'Timestamp']:
-                    df_state_gps.loc[i:len(df_state_gps)-1, 'PackState'] = df_state.loc[len(df_state)-1, 'PackState']
-                    break
+            if df_state_gps.loc[i, 'Timestamp'] <= df_state.loc[0, 'Timestamp']:
+                df_state_gps.loc[i, 'PackState'] = df_state.loc[0, 'PackState']
+            elif df_state_gps.loc[i, 'Timestamp'] >= df_state.loc[len(df_state)-1, 'Timestamp']:
+                df_state_gps.loc[i:len(df_state_gps)-1, 'PackState'] = df_state.loc[len(df_state)-1, 'PackState']
+                break
+            else:
+                index0 = max(df_state[df_state['Timestamp'] <= df_state_gps.loc[i, 'Timestamp']].index)
+                index1 = min(df_state[df_state['Timestamp'] >= df_state_gps.loc[i, 'Timestamp']].index)
+                front = (df_state_gps.loc[i, 'Timestamp'] - df_state.loc[index0, 'Timestamp']).total_seconds()
+                back = (df_state.loc[index1, 'Timestamp'] - df_state_gps.loc[i, 'Timestamp']).total_seconds()
+                if front > back:
+                    df_state_gps.loc[i, 'PackState'] = df_state.loc[index1, 'PackState']
+                elif front == back:
+                    df_state_gps.loc[i, 'PackState'] = max(df_state.loc[index1, 'PackState'], df_state.loc[index0, 'PackState'])
                 else:
-                    index0 = max(df_state[df_state['Timestamp'] <= df_state_gps.loc[i, 'Timestamp']].index)
-                    index1 = min(df_state[df_state['Timestamp'] >= df_state_gps.loc[i, 'Timestamp']].index)
-                    front = (df_state_gps.loc[i, 'Timestamp'] - df_state.loc[index0, 'Timestamp']).total_seconds()
-                    back = (df_state.loc[index1, 'Timestamp'] - df_state_gps.loc[i, 'Timestamp']).total_seconds()
-                    if front > back:
-                        df_state_gps.loc[i, 'PackState'] = df_state.loc[index1, 'PackState']
-                    elif front == back:
-                        df_state_gps.loc[i, 'PackState'] = max(df_state.loc[index1, 'PackState'], df_state.loc[index0, 'PackState'])
-                    else:
-                        df_state_gps.loc[i, 'PackState'] = df_state.loc[index0, 'PackState']
+                    df_state_gps.loc[i, 'PackState'] = df_state.loc[index0, 'PackState']
         return df_state_gps
     
     @staticmethod
@@ -209,7 +212,7 @@ class SignalMonitor():
         return df_res,df_state, df_last_state
     
     def get_gps_offline_stat(self,sn, st, et, df_state, df_res_gps, df_last_state_gps, cal_Period=24):    # 计算一段时间内GPS信号统计数据
-        df_state_gps = pd.DataFrame(columns=['sn', 'Timestamp', 'PackState', 'LineState'])
+        df_state_gps = pd.DataFrame(columns=['sn', 'Timestamp', 'PackState', 'LineState', 'latitude', 'longitude'])
         # print("start_time is {}, limit_time is {}".format(st, limit_time))
         end_time = st + datetime.timedelta(hours=cal_Period)    # 结束时间
         start_time_str = st.strftime('%Y-%m-%d %H:%M:%S')
@@ -223,6 +226,9 @@ class SignalMonitor():
 
         df_state_gps['Timestamp'] = df_gps['时间戳']
         df_state_gps['sn'] = sn[0]
+        df_state_gps['latitude'] = df_gps['latitude']
+        df_state_gps['longitude'] = df_gps['longitude']
+
 
         if len(df_state_gps) > 0:    # 无数据则不计算    
             df_state_gps = SignalMonitor._set_gps_working_states(df_state, df_state_gps)    # 根据同时间段内BMS状态计算GPS数据对应的BMS状态