lmstack 3 years ago
parent
commit
a4a8046503

+ 1 - 1
.gitignore

@@ -17,7 +17,7 @@
 /CONFIGURE/PathSetting.py
 *.log
 /demo.ipynb
-
+*.log.*
 !数据分析平台手册.doc
 
 

+ 9 - 5
LIB/BACKEND/DBManager.py

@@ -129,11 +129,12 @@ class DBManager():
                     ,data['ffBatteryStatus']['soc'],data['ffBatteryStatus']['soh'],data['ffBatteryStatus']['cellVolBalance']]).reshape(1,data_len)
         elif mode == 1:
             data_len = 11
-            
+
             data_block = np.array([data['info']['obdTime'],data['ffBatteryStatus']['rssi']
             ,data['ffBatteryStatus'].get('errorLevel'),data['ffBatteryStatus'].get('errorCode'),data['ffBatteryStatus']['switchState']
             ,data['ffBatteryStatus']['current'],data['ffBatteryStatus']['voltageInner'],data['ffBatteryStatus']['chargeState'],
             data['ffBatteryStatus']['cellVoltageDiff'],data['ffBatteryStatus']['soc'],data['ffBatteryStatus']['soh']]).reshape(1,data_len)
+
         data_block = np.append(data_block,CellU)
         data_block = np.append(data_block,CellT)
         data_block = np.append(data_block,OtherT)
@@ -210,10 +211,13 @@ class DBManager():
             st = time.time()
             for line in DBManager._download_json_data(urls):
                 et = time.time()
-                if i==0:
-                    data_blocks,CellUNum,CellTNum,OtherTNumm = DBManager._convert_to_dataframe_bms(line, mode)
-                    i+=1
-                    continue
+                try:
+                    if i==0:
+                        data_blocks,CellUNum,CellTNum,OtherTNumm = DBManager._convert_to_dataframe_bms(line, mode)
+                        i+=1
+                        continue
+                except:
+                    i = 0
                 try:
                     data_block,CellUNum,CellTNum,OtherTNumm = DBManager._convert_to_dataframe_bms(line, mode)
                 except:

+ 1 - 1
LIB/FRONTEND/LeakCurrent/deploy_6060.py

@@ -80,7 +80,7 @@ if __name__ == "__main__":
             if df_sn.loc[i, 'imei'][6:9] != '660':
                 continue
             sn = df_sn.loc[i, 'sn']
-            logger.info("6060 SN: {} START!".format(sn))
+            logger.info("pid-{} 6060 SN: {} START!".format(os.getpid(), sn))
             res = LFPLeakCurrent.cal_LFPLeakCurrent(sn, end_time, start_time)
             if not res.empty:
                 res.columns = ['time', 'sn', 'cell1', 'cell2', 'cell3', 'cell4', 'cell5', 'cell6', 'cell7', 'cell8', 'cell9', 'cell10',

+ 1 - 1
LIB/FRONTEND/SignalMonitor/deploy.py

@@ -78,7 +78,7 @@ if __name__ == "__main__":
                             'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime'])    # 初始化BMS信号统计数据
         df_res_gps = pd.DataFrame(columns=[
                                 'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime', 'latitude', 'longitude'])    # 初
-        logger.info("{}/{}, {} {} START!".format(str(count), str(len(df_sn)), sn, str(st)))
+        logger.info("pid-{} {}/{}, {} {} START!".format(os.getpid(), str(count), str(len(df_sn)), sn, str(st)))
         while st < et:
             try:
                 df_res, df_state, df_last_state = signalMonitor.get_bms_offline_stat(

+ 1 - 1
LIB/FRONTEND/deltsoc/deploy_6060.py

@@ -77,7 +77,7 @@ if __name__ == "__main__":
             if df_sn.loc[i, 'imei'][6:9] != '660':
                 continue
             sn = df_sn.loc[i, 'sn']
-            logger.info("6060 SN: {} START!".format(sn))
+            logger.info("pid-{} 6060 SN: {} START!".format(os.getpid(), sn))
             res = LFPDeltSoc.cal_deltsoc(sn, end_time, start_time)
             if not res.empty:
                 res.columns = ['time', 'sn', 'delta_soc']

+ 6 - 6
LIB/FRONTEND/odo/deploy.py

@@ -86,18 +86,18 @@ if __name__ == "__main__":
         SN=SN.strip('\t')
         SN=SN.strip('\n')
         try:
-            logger.info("{}---{} START!".format(SN, str(input_starttime)))
+            logger.info("pid-{} {}---{} START!".format(os.getpid(), SN, str(input_starttime)))
             range=GetDistInfo(SN,input_starttime,input_endtime)
             range_df=pd.DataFrame([range])
             drive_info_aday=pd.concat([drive_info_aday,range_df],axis=0)
             logger.info("{}---{} DONE!".format(SN, str(input_starttime)))
-
+            if not drive_info_aday.empty:
+                drive_info_aday['time'] = input_starttime[0:10]
+                drive_info_aday.columns = ['sn', 'odo', 'accum_soc', 'start_soc', 'end_soc', 'start_time','end_time', 'min_soc', 'time']
+                drive_info_aday.to_sql("odo_result",con=db_engine, if_exists="append",index=False)
         except Exception as e:
             logger.error(traceback.format_exc)
             logger.error(u"{} :{},{} 任务运行错误".format(SN,input_starttime,input_endtime), exc_info=True)
-    if not drive_info_aday.empty:
-        drive_info_aday['time'] = input_starttime[0:10]
-        drive_info_aday.columns = ['sn', 'odo', 'accum_soc', 'start_soc', 'end_soc', 'start_time','end_time', 'min_soc', 'time']
-        drive_info_aday.to_sql("odo_result",con=db_engine, if_exists="append",index=False)
+
 
     

+ 1 - 1
LIB/FRONTEND/soh/deploy_4840.py

@@ -72,7 +72,7 @@ if __name__ == "__main__":
             if df_sn.loc[i, 'imei'][6:9] != '440':
                 continue
             sn = df_sn.loc[i, 'sn']
-            logger.info("4840 SN: {} START!".format(sn))
+            logger.info("pid-{} 4840 SN: {} START!".format(os.getpid(), sn))
             res = NCMSoh.cal_soh(sn, end_time, start_time)
             if not res.empty:
                 res.columns = ['time', 'sn', 'bms_soh', 'soh', 'soh_err']

+ 1 - 1
LIB/FRONTEND/soh/deploy_6040.py

@@ -75,7 +75,7 @@ if __name__ == "__main__":
             if df_sn.loc[i, 'imei'][6:9] != '640':
                 continue
             sn = df_sn.loc[i, 'sn']
-            logger.info("6040 SN: {} START!".format(sn))
+            logger.info("pid-{} 6040 SN: {} START!".format(os.getpid(), sn))
             res = NCMSoh.cal_soh(sn, end_time, start_time)
             if not res.empty:
                 res.columns = ['time', 'sn', 'bms_soh', 'soh', 'soh_err']

+ 1 - 1
LIB/FRONTEND/soh/deploy_6060.py

@@ -81,7 +81,7 @@ if __name__ == "__main__":
             if df_sn.loc[i, 'imei'][6:9] != '660':
                 continue
             sn = df_sn.loc[i, 'sn']
-            logger.info("6060 SN: {} START!".format(sn))
+            logger.info("pid-{} 6060 SN: {} START!".format(os.getpid(), sn))
             res = LFPSoh.cal_soh(sn, end_time, start_time)
             if not res.empty:
                 res.columns = ['time', 'sn', 'bms_soh', 'soh', 'soh_err']

+ 91 - 42
demo.ipynb

@@ -3,29 +3,14 @@
   {
    "cell_type": "code",
    "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "### start to get data PK10001A326000123 from 2021-07-06 00:00:00 to 2021-07-07 20:00:00\n",
-      "# get data from 2021-07-06 00:00:00 to 2021-07-07 00:00:00......... \n",
-      "Server Error, retry 1...... \n",
-      "# get data from 2021-07-07 00:00:00 to 2021-07-07 20:00:00......... \n",
-      "all data-getting done, bms_count is 0, gps_count is 0, system_count is 0, accum_count is 0 \n",
-      "\n"
-     ]
-    }
-   ],
    "source": [
     "# 获取数据\r\n",
     "import sys\r\n",
     "from LIB.BACKEND import DBManager\r\n",
     "\r\n",
-    "sn = \"PK10001A326000123\"\r\n",
-    "st = '2021-07-06 00:00:00'\r\n",
-    "et = '2021-07-07 20:00:00'\r\n",
+    "sn = \"MGMCLN750N215I057\"\r\n",
+    "st = '2021-05-23 00:00:00'\r\n",
+    "et = '2021-08-12 20:00:00'\r\n",
     "\r\n",
     "dbManager = DBManager.DBManager()\r\n",
     "df_data = dbManager.get_data(sn=sn, start_time=st, end_time=et, data_groups=['bms', 'gps', 'accum', 'system'])\r\n",
@@ -34,13 +19,75 @@
     "df_gps = df_data['gps']\r\n",
     "df_accum = df_data['accum']\r\n",
     "df_system = df_data['system']"
-   ]
+   ],
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "### start to get data MGMCLN750N215I057 from 2021-05-23 00:00:00 to 2021-08-12 20:00:00\n",
+      "# get data from 2021-08-12 00:00:00 to 2021-08-12 20:00:00......... \n",
+      "all data-getting done, bms_count is 53957, gps_count is 53959, system_count is 0, accum_count is 53959 \n",
+      "\n"
+     ]
+    }
+   ],
+   "metadata": {}
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {},
+   "source": [
+    "#coding=utf-8\r\n",
+    "import os\r\n",
+    "import datetime\r\n",
+    "import pandas as pd\r\n",
+    "from LIB.BACKEND import DBManager, Log\r\n",
+    "from LIB.MIDDLE import SignalMonitor\r\n",
+    "from sqlalchemy import create_engine\r\n",
+    "from sqlalchemy.orm import sessionmaker\r\n",
+    "import time, datetime\r\n",
+    "import traceback\r\n",
+    "import pymysql\r\n",
+    "from urllib import parse\r\n",
+    "import dateutil.relativedelta\r\n",
+    "dbManager = DBManager.DBManager()\r\n",
+    "if __name__ == \"__main__\":\r\n",
+    "    \r\n",
+    "    # # 算法运行\r\n",
+    "    count = 0\r\n",
+    "    signalMonitor = SignalMonitor.SignalMonitor()\r\n",
+    "    cal_period = 24    # 计算间隔,单位h\r\n",
+    "    sn = 'MGMCLN750N215I057'\r\n",
+    "    st = datetime.datetime.strptime('2021-05-23 00:00:00', \"%Y-%m-%d %H:%M:%S\")\r\n",
+    "    et = datetime.datetime.strptime('2021-08-12 00:00:00', \"%Y-%m-%d %H:%M:%S\")\r\n",
+    "    df_last_state = pd.DataFrame(\r\n",
+    "        columns=['sn', 'current', 'Timestamp', 'PackState', 'LineState'])    # 每日最后BMS数据\r\n",
+    "    df_last_state_gps = pd.DataFrame(\r\n",
+    "        columns=['sn', 'Timestamp', 'PackState', 'LineState', 'latitude', 'longitude'])    # 每日最后GPS数据\r\n",
+    "    df_res = pd.DataFrame(columns=[\r\n",
+    "                        'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime'])    # 初始化BMS信号统计数据\r\n",
+    "    df_res_gps = pd.DataFrame(columns=[\r\n",
+    "                            'sn', 'PackState', 'LineState', 'StartTime', 'EndTime', 'OfflineTime', 'latitude', 'longitude'])    # 初\r\n",
+    "    logger.info(\"pid-{} {}/{}, {} {} START!\".format(os.getpid(), str(count), str(len(df_sn)), sn, str(st)))\r\n",
+    "    while st < et:\r\n",
+    "\r\n",
+    "        df_res, df_state, df_last_state = signalMonitor.get_bms_offline_stat(\r\n",
+    "            sn, st, et, df_res, df_last_state, cal_period)    # 计算每日BMS信号统计数据\r\n",
+    "        df_res_gps, df_last_state_gps = signalMonitor.get_gps_offline_stat(\r\n",
+    "            sn, st, et, df_state, df_res_gps, df_last_state_gps, cal_period)    # 计算每日GPS信号统计数据\r\n",
+    "        st = st + datetime.timedelta(hours=cal_period)\r\n",
+    "\r\n",
+    "\r\n",
+    "\r\n",
+    "\r\n"
+   ],
    "outputs": [],
+   "metadata": {}
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
    "source": [
     "# 下载数据 \r\n",
     "import sys\r\n",
@@ -53,13 +100,13 @@
     "st = '2021-07-06 00:00:00'\r\n",
     "et = '2021-07-07 20:00:00'\r\n",
     "tools.data_download(write_path=write_path, sn=sn, start_time=st, end_time=et, data_groups=['bms'])"
-   ]
+   ],
+   "outputs": [],
+   "metadata": {}
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {},
-   "outputs": [],
    "source": [
     "# 数据预处理\r\n",
     "import sys\r\n",
@@ -81,13 +128,13 @@
     "df_bms_pro, df_gps_pro, res_record= dataPrePro.gps_data_judge(df_bms_pro, df_gps_pro)\r\n",
     "# gps 数据可靠性判断, 并增加里程和速度至gps数据(根据已合并的数据段判断)\r\n",
     "df_bms_pro, df_gps_pro, res_record= dataPrePro.data_gps_judge_after_combine(df_bms_pro, df_gps_pro)"
-   ]
+   ],
+   "outputs": [],
+   "metadata": {}
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {},
-   "outputs": [],
    "source": [
     "# 单cycle指标统计\r\n",
     "import sys\r\n",
@@ -112,54 +159,56 @@
     "    print(indexSta.chrg_max_pwr_sta(np.array(df_sel_bms['总电压[V]']), np.array(df_sel_bms['总电流[A]'])))\r\n",
     "    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'])))\r\n",
     "    break"
-   ]
+   ],
+   "outputs": [],
+   "metadata": {}
   },
   {
    "cell_type": "code",
    "execution_count": 2,
-   "metadata": {},
+   "source": [
+    "# 生成pydoc 说明文档\r\n",
+    "!python -m pydoc -w LIB\\BACKEND\\DataPreProcess.py"
+   ],
    "outputs": [
     {
-     "name": "stdout",
      "output_type": "stream",
+     "name": "stdout",
      "text": [
       "problem in LIB\\BACKEND\\DataPreProcess.py - ModuleNotFoundError: No module named 'DBManager'\n"
      ]
     }
    ],
-   "source": [
-    "# 生成pydoc 说明文档\r\n",
-    "!python -m pydoc -w LIB\\BACKEND\\DataPreProcess.py"
-   ]
+   "metadata": {}
   },
   {
    "cell_type": "code",
    "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
    "source": [
     "from LIB.BACKEND import DBManager, Log\r\n",
     "log = Log.Mylog(log_name='signal_monitor', log_level = 'info')\r\n",
     "log.set_file_hl(file_name='info.log', log_level='info')\r\n",
     "log.set_file_hl(file_name='error.log', log_level='error')\r\n",
     "logger = log.get_logger()\r\n"
-   ]
+   ],
+   "outputs": [],
+   "metadata": {}
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {},
+   "source": [],
    "outputs": [],
-   "source": []
+   "metadata": {}
   }
  ],
  "metadata": {
   "interpreter": {
-   "hash": "69976922f58704918d459eb5dccc4a4074095a997db3fffa9f9946bbc3807710"
+   "hash": "c31ac167ea649b5e73a69633f597408431a0cc42e7f7f3912c5d7e4fcd239e88"
   },
   "kernelspec": {
-   "display_name": "Python 3.8.10 64-bit (conda)",
-   "name": "python3"
+   "name": "python3",
+   "display_name": "Python 3.8.11 64-bit (conda)"
   },
   "language_info": {
    "codemirror_mode": {
@@ -171,7 +220,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.10"
+   "version": "3.8.11"
   },
   "orig_nbformat": 4
  },