# 获取数据
import sys
from LIB.BACKEND import DBManager
from LIB.BACKEND import DataPreProcess
dataPrePro = DataPreProcess.DataPreProcess()
sn = "MGMCLN750N215N097"
st = '2022-01-01 00:00:00'
et = '2022-03-01 00:00:00'
dbManager = DBManager.DBManager()
df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms', 'gps', 'accum', 'system'])
#
df_bms = df_data['bms']
df_gps = df_data['gps']
df_accum = df_data['accum']
df_system = df_data['system']
df_bms = dataPrePro.data_fault_tag(sn,df_bms)
### start to get data MGMCLN750N215N097 from 2022-01-01 00:00:00 to 2022-03-01 00:00:00 # get data from 2022-01-08 00:00:00 to 2022-01-09 00:00:00.........
df_bms[['时间戳','fault_tag']].to_csv('test.csv')
# 下载数据
import sys
from LIB.BACKEND import Tools
tools = Tools.Tools()
write_path = r''
sn = "PK50001A100000680"
st = '2021-07-06 00:00:00'
et = '2021-07-07 20:00:00'
tools.data_download(write_path=write_path, sn=sn, start_time=st, end_time=et, data_groups=['bms'])
# 数据预处理
import sys
from LIB.BACKEND import DataPreProcess
dataPrePro = DataPreProcess.DataPreProcess()
# 时间完全相同的数据仅保留一行
df_bms_pro, df_gps_pro = dataPrePro.time_filter(df_bms, df_gps)
# bms数据按照电流和状态分段, 然后在状态分段内部,根据时间跳变继续分段(解决段内数据丢失)
df_bms_pro = dataPrePro.data_split_by_status(df_bms_pro)
df_bms_pro = dataPrePro.data_split_by_time(df_bms_pro)
# bms数据将两次充电间的状态合并
df_bms_pro = dataPrePro.combine_drive_stand(df_bms_pro)
# bms 数据计算行车和充电开始前后的静置时间
df_bms_pro = dataPrePro.cal_stand_time(df_bms_pro)
# gps 数据可靠性判断, 并增加里程和速度至gps数据(根据未合并的数据段判断)
df_bms_pro, df_gps_pro, res_record= dataPrePro.gps_data_judge(df_bms_pro, df_gps_pro)
# gps 数据可靠性判断, 并增加里程和速度至gps数据(根据已合并的数据段判断)
df_bms_pro, df_gps_pro, res_record= dataPrePro.data_gps_judge_after_combine(df_bms_pro, df_gps_pro)
# 单cycle指标统计
import sys
from LIB.BACKEND import IndexStaByOneCycle
indexSta = IndexStaByOneCycle.IndexStaByOneCycle()
data_number_list = sorted(list(set(df_bms[(df_bms['data_status'].isin(['drive']))]['data_split_by_status'])))
for data_number in data_number_list[:]:
df_sel_bms = df_bms[df_bms['data_split_by_status'] == data_number]
df_sel_bms = df_sel_bms.reset_index(drop=True)
df_sel_gps = df_gps[(df_gps['时间戳']>df_sel_bms.loc[0,'时间戳']) & (df_gps['时间戳']<df_sel_bms.loc[len(df_sel_bms)-1,'时间戳'])]
df_sel_gps = df_sel_gps.reset_index(drop=True)
print(indexSta.odo_sta(np.array(df_sel_gps['odo'])))
print(indexSta.capacity_sta(40, np.array(df_sel_bms['SOC[%]']), np.array(df_sel_bms['SOH[%]'])))
print(indexSta.energy_sta(40, np.array(df_sel_bms['SOC[%]']), np.array(df_sel_bms['SOH[%]']),np.array(df_sel_bms['总电压[V]'])))
print(indexSta.acc_time_sta(np.array(df_sel_bms['时间戳'])))
print(indexSta.mean_temp_sta(np.array(df_sel_bms['单体温度1'])))
print(indexSta.temp_change_rate_sta(np.array(df_sel_bms['时间戳']), np.array(df_sel_bms['单体温度1'])))
print(indexSta.dischrg_max_pwr_sta(np.array(df_sel_bms['总电压[V]']), np.array(df_sel_bms['总电流[A]'])))
print(indexSta.chrg_max_pwr_sta(np.array(df_sel_bms['总电压[V]']), np.array(df_sel_bms['总电流[A]'])))
print(indexSta.speed_sta(indexSta.odo_sta(np.array(df_sel_gps['odo'])), indexSta.acc_time_sta(np.array(df_sel_gps['时间戳'])), np.array(df_sel_gps['speed'])))
break
# 生成pydoc 说明文档
!python -m pydoc -w LIB\BACKEND\DataPreProcess.py
problem in LIB\BACKEND\DataPreProcess.py - ModuleNotFoundError: No module named 'DBManager'
from LIB.BACKEND import DBManager, Log
log = Log.Mylog(log_name='signal_monitor', log_level = 'info')
log.set_file_hl(file_name='info.log', log_level='info')
log.set_file_hl(file_name='error.log', log_level='error')
logger = log.get_logger()
import LIB.BACKEND.OPENAPI.OpenApi as OpenApi
from LIB.BACKEND import DBManager
from LIB.BACKEND import DBManager
dbManager = DBManager.DBManager()
o = OpenApi.OpenApi()
# df_fault = o.get_omp_fatult_tag(sn='PK50001A100000608')
sn = "PK50001A100000608"
st = '2022-01-16 10:47:16'
et = '2022-01-18 10:47:16'
dbManager = DBManager.DBManager()
df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms'])['bms']
df_data['fault_tag'] = None
### start to get data PK50001A100000608 from 2022-01-16 10:47:16 to 2022-01-18 10:47:16 # get data from 2022-01-17 10:47:16 to 2022-01-18 10:47:16......... all data-getting done, bms_count is 5763, gps_count is 0, system_count is 0, accum_count is 0
# 先按故障码分组,相同故障码的起始和终止时间 取最大区间
import pandas as pd
import pdb
for index in df_fault.index:
startT = df_fault.loc[index, 'faultTime']
endT = df_fault.loc[index, 'endTime']
tagTypeText = df_fault.loc[index, 'tagTypeText']
childTagText = df_fault.loc[index, 'childTagText']
tagType = df_fault.loc[index, 'tagType']
childTag = df_fault.loc[index, 'childTag']
# 标签拼接
new_tag = []
if pd.isnull(tagType) or len(tagTypeText) <= 0:
continue
elif pd.isnull(childTag) or len(childTagText) <= 0:
new_tag.append(tagTypeText)
else:
for child in childTagText.split(";"):
new_tag.append(tagTypeText+':' + child)
# 原始数据对应故障时间的index
for index2 in df_data[(df_data['时间戳']>=startT) & (df_data['时间戳']<endT)].index:
old_tag = df_data.loc[index2, 'fault_tag']
if pd.isnull(old_tag) or len(old_tag) <= 0:
df_data.loc[index2,'fault_tag'] = ';'.join(new_tag)
else:
tag = old_tag.split(";")
tag.extend(new_tag)
df_data.loc[index2,'fault_tag'] = ';'.join(list(set(tag)))
tag = old_tag.split(";")
tag.extend(new_tag)
df_data.loc[index2,'fault_tag'] = ';'.join(list(set(tag)))
df_data.to_csv('test.csv')
from LIB.BACKEND.OPENAPI import OpenApi
o = OpenApi.OpenApi()
df_fault = o.get_omp_fatult_tag()
df_fault.to_csv('c.csv')