From 18cdc07af336dc3580ebffbc162dcd65f3c6285b Mon Sep 17 00:00:00 2001 From: Nico Melone Date: Wed, 13 Nov 2024 08:12:09 -0600 Subject: [PATCH] Remove .DS_Store files and update .gitignore --- .DS_Store | Bin 32772 -> 0 bytes AWS Lambda Layer/.DS_Store | Bin 6148 -> 0 bytes AWS Lambda Layer/python/.DS_Store | Bin 6148 -> 0 bytes AWS Lambda Layer/python/lib/.DS_Store | Bin 6148 -> 0 bytes .../python/lib/python3.9/.DS_Store | Bin 6148 -> 0 bytes Widgets/.DS_Store | Bin 6148 -> 0 bytes meshifyDrivers/.DS_Store | Bin 24580 -> 0 bytes tb_report/backend/buildReportEKKO.ipynb | 231 +++++++++--------- 8 files changed, 121 insertions(+), 110 deletions(-) delete mode 100644 .DS_Store delete mode 100644 AWS Lambda Layer/.DS_Store delete mode 100644 AWS Lambda Layer/python/.DS_Store delete mode 100644 AWS Lambda Layer/python/lib/.DS_Store delete mode 100644 AWS Lambda Layer/python/lib/python3.9/.DS_Store delete mode 100644 Widgets/.DS_Store delete mode 100644 meshifyDrivers/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 776f46da97fa7ce7e8ff72185ae359801eda747f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32772 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 W1JEZd9D)age*`QI+%N-eyk# diff --git a/AWS Lambda Layer/python/lib/.DS_Store b/AWS Lambda Layer/python/lib/.DS_Store deleted file mode 100644 index 06ef86cea097d13aed932de7b81c4ae2ef753806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&1%~~5T3Q2dPOMs&_Z%s$knt~4f&ym$c}RlRY?y`aIDD0BC=Lka!qjzx~DJH zd!8ZBli42!2RqS5T0$T-6BE{3VK`cTCuTU6)&;Y7cipW4>f5*4W`-9r1nq>x$9&265f3V zpU2ssilSD$2OmuZ zjkd;IA*HiLOwHd^)brWI7OAp=pf*MuE2q z6jiq>?*D_&>;JbT(=!Sf1^$!*q||oWE!>j6Tif@b~*NEu9H6!=jEo&j%#e%Am1 diff --git a/Widgets/.DS_Store b/Widgets/.DS_Store deleted file mode 100644 index 094f076567f8a6f36bb65ae7edba8823471ae5d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5B>J5FLjgHbO!vC@3u|N^*lGSsDroB2lA!6p9Uw6hK0v*n%dUf>Xc+xB?xA z;f=>i*1HLG2%(v1{Ji5C`}wW3j)};0??xS>HW4Lo#zqUx8sl;Hnl(aX4`}=x^U-{m z51h+uxf=MJ3h=wzrWo*cE`=?T%=E`fGY5>6fn)KpLMaN zaJJSq$7ijDU%}ZpuMk|8pyQ8XCBk|; diff --git a/meshifyDrivers/.DS_Store b/meshifyDrivers/.DS_Store deleted file mode 100644 index 24e65e24f09746a05698841bfb9d348ee3b624b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24580 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 width):\n", + " width = len(value)\n", + "\n", + " return width" + ] + }, + { + "cell_type": "code", + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -175,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -185,7 +222,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -214,18 +251,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ACW #1\n", - "['latitude', 'longitude', 'speed', 'a_current', 'b_current', 'c_current', 'scada_stop_cmd', 'pit_100a_pressure', 'pit_101a_pressure', 'pit_101b_pressure', 'pit_101c_pressure', 'fit_101_flow_rate', 'fi_101b_popoff', 'fcv_101a_valve', 'fcv_101b_valve', 'pit_102_pressure', 'pit_102_hi_alm', 'pit_102_hihi_alm', 'pit_102_hi_spt', 'pit_102_hihi_spt', 'p200_hand', 'p200_auto', 'xy_200_run', 'ct_200_run', 'pit_100_pressure', 'm106a_vfd_active', 'm106a_vfd_faulted', 'm106a_vfd_frequency', 'm106a_vfd_start', 'm106a_vfd_stop', 'pit_106a_pressure', 'fit_106a_flow_rate', 'm106b_vfd_active', 'm106b_vfd_faulted', 'm106b_vfd_frequency', 'm106b_vfd_start', 'm106b_vfd_stop', 'pit_106b_pressure', 'fit_106b_flow_rate', 'pit_106c_pressure', 'pit_106d_pressure', 'sdv106_open', 'sdv106_closed', 'bp_3a_auto', 'bp_3a_hand', 'bp_3a_run_cmd', 'bp_3a_run', 'bp_3a_fault', 'bp_3b_auto', 'bp_3b_hand', 'bp_3b_run_cmd', 'bp_3b_run', 'bp_3b_fault', 'pit_107a_pressure', 'fit_107a_flow_rate', 'pit_107b_pressure', 'fcv_001_valve', 'fit_107b_flow_rate', 'pit_107d_pressure', 'fcv_002_valve', 'pit_107c_pressure', 'pit_108a_pressure', 'pit_108b_pressure', 'dpi_108a_pressure', 'pit_108c_pressure', 'pit_108d_pressure', 'pdt_108b_pressure', 'pit_108e_pressure', 'pit_108f_pressure', 'pdt_108c_pressure', 'pit_108_pressure', 'pdt_108a_hi_alm', 'pdt_108a_hihi_alm', 'pdt_108b_hi_alm', 'pdt_108b_hihi_alm', 'pdt_108c_hi_alm', 'pdt_108c_hihi_alm', 'ait_102a_turbitity', 'ait_102b_h2s', 'ait_102c_ph', 'ait_102d_oil_in_water', 'fit_102_flow_rate', 'lit_112a_h2o2_level', 'lit_112b_nahso3_level', 'fis_112_h2o2_popoff', 'fit_112a_h2o2_flow_rate', 'fit_112b_nahso3_flow_rate', 'at_109a_turbidity', 'at_109b_h2s', 'at_109c_oil_in_water', 'at_109d_o2_in_water', 'at_109e_orp', 'fit_109a_flow_rate', 'fit_100_flow_rate', 'fit_100_hi_alm', 'fit_100_hihi_alm', 'fit_100_lo_alm', 'fit_111_flow_rate', 'pit_110_pressure', 'lit_170_level', 'lit_200_level', 'lit_101_level', 'li_103D_level_alm', 'lsh_120_hihi_alm', 'pit_050_pressure', 'pit_065_pressure', 'pdi_065_pressure', 'fit_104_n2_rate', 'p100_auto', 'p100_hand', 'sales_recirculate_sw', 'fit_109b_flow_rate', 'pit_111a_n2', 'pit_111b_n2', 'pit_111c_n2', 'ct_200_current', 'sdv_101a', 'xy_100_run', 'skim_total_barrels', 'dpi_108b_pressure', 'chemical_pump_01_run_status', 'chemical_pump_01_rate_offset', 'spt_pid_h2o2_chemical_rate', 'spt_chemical_manual_rate', 'chemical_pump_auto', 'esd_exists', 'n2_purity', 'n2_outlet_flow_rate', 'n2_outlet_temp', 'n2_inlet_pressure', 'compressor_controller_temp', 'compressor_ambient_temp', 'compressor_outlet_temp', 'compressor_outlet_pressure', 'n2_outlet_pressure', 'fit_109b_water_job', 'fit_109b_water_last_month', 'fit_109b_water_month', 'fit_109b_water_lifetime', 'fit_109b_water_today', 'fit_109b_water_yesterday', 'fit_100_water_job', 'fit_100_water_last_month', 'fit_100_water_month', 'fit_100_water_lifetime', 'fit_100_water_today', 'fit_100_water_yesterday', 'h2o2_chemical_rate', 'rmt_sd_alm', 'pnl_esd_alm', 'pit_111c_hihi_alm', 'pit_111b_hihi_alm', 'pit_111a_hihi_alm', 'pit_110_hihi_alm', 'pit_108g_hihi_alm', 'pit_108c_hihi_alm', 'pit_108b_hihi_alm', 'pit_108a_hihi_alm', 'pit_107b_lolo_alm', 'pit_107a_lolo_alm', 'pit_106b_hihi_alm', 'pit_106a_hihi_alm', 'pit_101b_transmitter_alm', 'pit_101b_hihi_alm', 'pit_101a_transmitter_alm', 'pit_101a_hihi_alm', 'pit_101a_hi_alm', 'pit_100_hihi_alm', 'pit_065_hihi_alm', 'pit_050_hihi_alm', 'pdi_065_lolo_alm', 'pdi_065_lo_alm', 'pdi_065_hihi_alm', 'm106b_vfd_faulted_alm', 'm106a_vfd_faulted_alm', 'lit_200_hihi_alm', 'lit_170_hihi_alm', 'fit_107b_lolo_alm', 'fit_107a_lolo_alm', 'fit_106b_hihi_alm', 'fit_106a_hihi_alm', 'fit_004_hihi_alm', 'bp_3b_run_fail_alm', 'bp_3a_run_fail_alm', 'ait_114c_hihi_alm', 'ait_114b_hihi_alm', 'ait_114a_hihi_alm', 'ac_volt', 'bc_volt', 'ab_volt', 'psd_alm', 'ait_114a_lolo_alm', 'ait_114a_lo_alm', 'ait_114r_lolo_alm', 'ait_114r_lo_alm', 'ait_114z_lo_alm', 'ait_114z_lolo_alm', 'ait_114x_lo_alm', 'ait_114x_lolo_alm', 'ait_114c_lolo_alm', 'ait_114c_lo_alm', 'ait_114l_lolo_alm', 'ait_114l_lo_alm', 'lit_116b_level', 'lit_116b_hihi_alm', 'lit_116b_hi_alm', 'lit_116a_level', 'lit_116a_hihi_alm', 'lit_116a_hi_alm', 'outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp']\n" - ] - } - ], + "outputs": [], "source": [ "time = {\n", " \"type\": \"last\",\n", @@ -242,74 +270,38 @@ " \"type\": \"midnight-midnight\",\n", " \"timezone\": \"US/Alaska\" \n", "}\n", + "time = {\n", + " \"type\": \"range\",\n", + " \"timezone\": \"US/Alaska\" ,\n", + " \"ts_start\": 1728115200000,\n", + " \"ts_end\": 1728201600000\n", + "}\n", "telemetry = getThingsBoardData(url, username, password, \"Thunderbird Field Services\", time)" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ait_102a_turbitity INLET TURBIDITY\n", - "ait_102b_h2s INLET H₂S\n", - "at_109a_turbidity OUTLET TURBIDITY\n", - "at_109b_h2s OUTLET H₂S\n", - "at_109c_oil_in_water OUTLET OIL IN WATER\n", - "at_109e_orp OUTLET ORP\n", - "fit_100_flow_rate INLET FLOW RATE\n", - "fit_109b_flow_rate SALES FLOW RATE\n", - "lit_116b_level WASTE TANK 1\n", - "lit_116a_level WASTE TANK 2\n", - "outlet_turbidity_temp OUTLET TURBIDITY TEMP\n", - "outlet_orp_temp OUTLET ORP TEMP\n", - "inlet_turbidity_temp INLET TURBIDITY TEMP\n", - "inlet_ph_temp INLET PH TEMP\n", - "['ait_102a_turbitity', 'ait_102b_h2s', 'at_109a_turbidity', 'at_109b_h2s', 'at_109c_oil_in_water', 'at_109e_orp', 'fit_100_flow_rate', 'fit_109b_flow_rate', 'lit_116b_level', 'lit_116a_level', 'outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp']\n", - "lit_116b_level WASTE TANK 1\n", - "lit_116a_level WASTE TANK 2\n", - "lit_116b_level WASTE TANK 1\n", - "lit_116a_level WASTE TANK 2\n", - "fit_100_flow_rate INLET FLOW RATE\n", - "fit_109b_flow_rate SALES FLOW RATE\n", - "fit_100_flow_rate INLET FLOW RATE\n", - "fit_109b_flow_rate SALES FLOW RATE\n", - "outlet_turbidity_temp OUTLET TURBIDITY TEMP\n", - "outlet_orp_temp OUTLET ORP TEMP\n", - "inlet_turbidity_temp INLET TURBIDITY TEMP\n", - "inlet_ph_temp INLET PH TEMP\n", - "outlet_turbidity_temp OUTLET TURBIDITY TEMP\n", - "outlet_orp_temp OUTLET ORP TEMP\n", - "inlet_turbidity_temp INLET TURBIDITY TEMP\n", - "inlet_ph_temp INLET PH TEMP\n", - "ait_102b_h2s INLET H₂S\n", - "at_109b_h2s OUTLET H₂S\n", - "at_109c_oil_in_water OUTLET OIL IN WATER\n", - "at_109e_orp OUTLET ORP\n", - "ait_102b_h2s INLET H₂S\n", - "at_109b_h2s OUTLET H₂S\n", - "at_109c_oil_in_water OUTLET OIL IN WATER\n", - "at_109e_orp OUTLET ORP\n", - "at_109e_orp OUTLET ORP\n", - "at_109e_orp OUTLET ORP\n", - "ait_102a_turbitity INLET TURBIDITY\n", - "at_109a_turbidity OUTLET TURBIDITY\n", - "ait_102a_turbitity INLET TURBIDITY\n", - "at_109a_turbidity OUTLET TURBIDITY\n" - ] - } - ], + "outputs": [], "source": [ - "\n", "# Create a Pandas Excel writer using XlsxWriter as the engine.\n", - "writer = pd.ExcelWriter(f\"/Users/nico/Documents/test/Thunderbird_{dt.today().strftime('%Y-%m-%d')}.xlsx\", engine=\"xlsxwriter\",\n", + "shutil.copyfile(\"/Users/nico/Documents/test/ACW Daily Report Template.xlsx\", f\"/Users/nico/Documents/test/Thunderbird_{dt.today().strftime('%Y-%m-%d')}.xlsx\")\n", + "writer = pd.ExcelWriter(\n", + " f\"/Users/nico/Documents/test/Thunderbird_{dt.today().strftime('%Y-%m-%d')}.xlsx\", \n", + " engine=\"openpyxl\",\n", " datetime_format=\"yyyy-mm-dd hh:mm:ss\",\n", - " date_format=\"yyyy-mm-dd\",engine_kwargs={'options': {'strings_to_numbers': True}})\n", + " date_format=\"yyyy-mm-dd\",\n", + " #engine_kwargs={'options': {'strings_to_numbers': True}},\n", + " mode=\"a\",\n", + " if_sheet_exists=\"overlay\")\n", + "reportsheet = writer.book.worksheets[0]\n", + "\n", + "\"\"\"\n", "chartsheet = writer.book.add_worksheet(\"Charts\")\n", + "\"\"\"\n", "ignore_keys = ['latitude', 'longitude', 'speed', 'a_current', 'b_current', 'c_current', 'scada_stop_cmd', 'pit_100a_pressure', 'pit_101a_pressure', 'pit_101b_pressure', 'pit_101c_pressure', 'fit_101_flow_rate', 'fi_101b_popoff', 'fcv_101a_valve', 'fcv_101b_valve', 'pit_102_pressure', 'pit_102_hi_alm', 'pit_102_hihi_alm', 'pit_102_hi_spt', 'pit_102_hihi_spt', 'p200_hand', 'p200_auto', 'xy_200_run', 'ct_200_run', 'pit_100_pressure', 'm106a_vfd_active', 'm106a_vfd_faulted', 'm106a_vfd_frequency', 'm106a_vfd_start', 'm106a_vfd_stop', 'pit_106a_pressure', 'fit_106a_flow_rate', 'm106b_vfd_active', 'm106b_vfd_faulted', 'm106b_vfd_frequency', 'm106b_vfd_start', 'm106b_vfd_stop', 'pit_106b_pressure', 'fit_106b_flow_rate', 'pit_106c_pressure', 'pit_106d_pressure', 'sdv106_open', 'sdv106_closed', 'bp_3a_auto', 'bp_3a_hand', 'bp_3a_run_cmd', 'bp_3a_run', 'bp_3a_fault', 'bp_3b_auto', 'bp_3b_hand', 'bp_3b_run_cmd', 'bp_3b_run', 'bp_3b_fault', 'pit_107a_pressure', 'fit_107a_flow_rate', 'pit_107b_pressure', 'fcv_001_valve', 'fit_107b_flow_rate', 'pit_107d_pressure', 'fcv_002_valve', 'pit_107c_pressure', 'pit_108a_pressure', 'pit_108b_pressure', 'dpi_108a_pressure', 'pit_108c_pressure', 'pit_108d_pressure', 'pdt_108b_pressure', 'pit_108e_pressure', 'pit_108f_pressure', 'pdt_108c_pressure', 'pit_108_pressure', 'pdt_108a_hi_alm', 'pdt_108a_hihi_alm', 'pdt_108b_hi_alm', 'pdt_108b_hihi_alm', 'pdt_108c_hi_alm', 'pdt_108c_hihi_alm', 'ait_102c_ph', 'ait_102d_oil_in_water', 'fit_102_flow_rate', 'lit_112a_h2o2_level', 'lit_112b_nahso3_level', 'fis_112_h2o2_popoff', 'fit_112a_h2o2_flow_rate', 'fit_112b_nahso3_flow_rate', 'at_109d_o2_in_water', 'fit_100_hi_alm', 'fit_100_hihi_alm', 'fit_100_lo_alm', 'fit_111_flow_rate', 'pit_110_pressure', 'lit_170_level', 'lit_200_level', 'lit_101_level', 'li_103D_level_alm', 'lsh_120_hihi_alm', 'pit_050_pressure', 'pit_065_pressure', 'pdi_065_pressure', 'fit_104_n2_rate', 'p100_auto', 'p100_hand', 'sales_recirculate_sw', 'fit_109a_flow_rate', 'pit_111a_n2', 'pit_111b_n2', 'pit_111c_n2', 'ct_200_current', 'sdv_101a', 'xy_100_run', 'skim_total_barrels', 'dpi_108b_pressure', 'chemical_pump_01_run_status', 'chemical_pump_01_rate_offset', 'spt_pid_h2o2_chemical_rate', 'spt_chemical_manual_rate', 'chemical_pump_auto', 'esd_exists', 'n2_purity', 'n2_outlet_flow_rate', 'n2_outlet_temp', 'n2_inlet_pressure', 'compressor_controller_temp', 'compressor_ambient_temp', 'compressor_outlet_temp', 'compressor_outlet_pressure', 'n2_outlet_pressure', 'fit_109b_water_job', 'fit_109b_water_last_month', 'fit_109b_water_month', 'fit_109b_water_lifetime', 'fit_109b_water_today', 'fit_109b_water_yesterday', 'fit_100_water_job', 'fit_100_water_last_month', 'fit_100_water_month', 'fit_100_water_lifetime', 'fit_100_water_today', 'fit_100_water_yesterday', 'h2o2_chemical_rate', 'rmt_sd_alm', 'pnl_esd_alm', 'pit_111c_hihi_alm', 'pit_111b_hihi_alm', 'pit_111a_hihi_alm', 'pit_110_hihi_alm', 'pit_108g_hihi_alm', 'pit_108c_hihi_alm', 'pit_108b_hihi_alm', 'pit_108a_hihi_alm', 'pit_107b_lolo_alm', 'pit_107a_lolo_alm', 'pit_106b_hihi_alm', 'pit_106a_hihi_alm', 'pit_101b_transmitter_alm', 'pit_101b_hihi_alm', 'pit_101a_transmitter_alm', 'pit_101a_hihi_alm', 'pit_101a_hi_alm', 'pit_100_hihi_alm', 'pit_065_hihi_alm', 'pit_050_hihi_alm', 'pdi_065_lolo_alm', 'pdi_065_lo_alm', 'pdi_065_hihi_alm', 'm106b_vfd_faulted_alm', 'm106a_vfd_faulted_alm', 'lit_200_hihi_alm', 'lit_170_hihi_alm', 'fit_107b_lolo_alm', 'fit_107a_lolo_alm', 'fit_106b_hihi_alm', 'fit_106a_hihi_alm', 'fit_004_hihi_alm', 'bp_3b_run_fail_alm', 'bp_3a_run_fail_alm', 'ait_114c_hihi_alm', 'ait_114b_hihi_alm', 'ait_114a_hihi_alm', 'ac_volt', 'bc_volt', 'ab_volt', 'psd_alm', 'ait_114a_lolo_alm', 'ait_114a_lo_alm', 'ait_114r_lolo_alm', 'ait_114r_lo_alm', 'ait_114z_lo_alm', 'ait_114z_lolo_alm', 'ait_114x_lo_alm', 'ait_114x_lolo_alm', 'ait_114c_lolo_alm', 'ait_114c_lo_alm', 'ait_114l_lolo_alm', 'ait_114l_lo_alm', 'lit_116b_hihi_alm', 'lit_116b_hi_alm', 'lit_116a_hihi_alm', 'lit_116a_hi_alm']\n", + "\"\"\"\n", "unit_mapping = {\n", " \"level\": \"ft\",\n", " \"flow\": \"bpd\",\n", @@ -323,54 +315,52 @@ " \"default\": \"H₂S and Oil in Water\"\n", "}\n", "label_mapping = {\n", - " \"LIT 116B LEVEL\": \"WASTE TANK 1\",\n", - " \"LIT 116A LEVEL\": \"WASTE TANK 2\",\n", - " \"FIT 100 FLOW RATE\": \"INLET FLOW RATE\",\n", - " \"FIT 109B FLOW RATE\": \"SALES FLOW RATE\",\n", - " \"OUTLET TURBIDITY TEMP\": \"OUTLET TURBIDITY TEMP\",\n", - " \"OUTLET ORP TEMP\": \"OUTLET ORP TEMP\",\n", - " \"INLET TURBIDITY TEMP\": \"INLET TURBIDITY TEMP\",\n", - " \"INLET PH TEMP\": \"INLET PH TEMP\",\n", - " \"AIT 102B H2S\": \"INLET H₂S\",\n", - " \"AT 109B H2S\": \"OUTLET H₂S\",\n", - " \"AT 109C OIL IN WATER\": \"OUTLET OIL IN WATER\",\n", - " \"AIT 102A TURBITITY\": \"INLET TURBIDITY\",\n", - " \"AT 109A TURBIDITY\": \"OUTLET TURBIDITY\",\n", - " \"AT 109E ORP\": \"OUTLET ORP\"\n", - " }\n", + " \"LIT 116B LEVEL\": \"WASTE TANK 1\",\n", + " \"LIT 116A LEVEL\": \"WASTE TANK 2\",\n", + " \"FIT 100 FLOW RATE\": \"INLET FLOW RATE\",\n", + " \"FIT 109B FLOW RATE\": \"SALES FLOW RATE\",\n", + " \"OUTLET TURBIDITY TEMP\": \"OUTLET TURBIDITY TEMP\",\n", + " \"OUTLET ORP TEMP\": \"OUTLET ORP TEMP\",\n", + " \"INLET TURBIDITY TEMP\": \"INLET TURBIDITY TEMP\",\n", + " \"INLET PH TEMP\": \"INLET PH TEMP\",\n", + " \"AIT 102B H2S\": \"INLET H₂S\",\n", + " \"AT 109B H2S\": \"OUTLET H₂S\",\n", + " \"AT 109C OIL IN WATER\": \"OUTLET OIL IN WATER\",\n", + " \"AIT 102A TURBITITY\": \"INLET TURBIDITY\",\n", + " \"AT 109A TURBIDITY\": \"OUTLET TURBIDITY\",\n", + " \"AT 109E ORP\": \"OUTLET ORP\"\n", + "}\"\"\"\n", + "#Create a Sheet for each Device\n", "for device in telemetry.keys():\n", " df = getDataFrame(telemetry[device], ignore_keys, time)\n", " \n", + " #df.index = [dt.fromtimestamp(x) for x in df.index ]\n", " # Write the dataframe data to XlsxWriter. Turn off the default header and\n", " # index and skip one row to allow us to insert a user defined header.\n", - " df.to_excel(writer, sheet_name=device, startrow=1, header=False, index=True)\n", + " df.to_excel(writer, sheet_name=device, startrow=0, header=True, index=True)\n", "\n", " # Get the xlsxwriter workbook and worksheet objects.\n", " workbook = writer.book\n", " worksheet = writer.sheets[device]\n", - "\n", - " # Get the dimensions of the dataframe.\n", - " (max_row, max_col) = df.shape\n", + " for row in worksheet.iter_rows(min_row=2, max_col=1):\n", + " for cell in row:\n", + " cell.number_format = 'yyyy-mm-dd hh:mm:ss'\n", + " for row in worksheet.iter_rows(min_row=2, min_col=2):\n", + " for cell in row:\n", + " cell.number_format = '#,##0.00'\n", + " \n", " \n", - " # Create a list of column headers, to use in add_table().\n", - " column_settings = [{\"header\": column} for column in df.columns]\n", - " # Add the Excel table structure. Pandas will add the data.\n", - " worksheet.add_table(0, 0, max_row, max_col, {\"columns\": [{'header': 'Date'}] + column_settings})\n", - "\n", - " # Make the columns wider for clarity.\n", - " #worksheet.autofit()\n", - " worksheet.set_column(0, max_col , 18)\n", - "\n", + "\"\"\"\n", "chart_keys = list(telemetry[device].keys())\n", "for key in ignore_keys:\n", " if key in chart_keys:\n", " chart_keys.remove(key)\n", - "print(chart_keys)\n", + "#print(chart_keys)\n", "charts = [\n", " {\"chartType\": \"line\",\"columnNames\": ['lit_116b_level', 'lit_116a_level'], \"unit\": \"FT\", \"title\": \"Levels\"},\n", " {\"chartType\": \"line\",\"columnNames\": ['fit_100_flow_rate', 'fit_109b_flow_rate'], \"unit\": \"bpd\", \"title\": \"Flow Rates\"},\n", " {\"chartType\": \"line\",\"columnNames\": ['outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp'], \"unit\": \"°F\", \"title\": \"Temperatures\"},\n", - " {\"chartType\": \"line\",\"columnNames\": ['ait_102b_h2s','at_109b_h2s', 'at_109c_oil_in_water','at_109e_orp'], \"unit\": \"ppm\", \"title\": \"H₂S and Oil in Water\"},\n", + " {\"chartType\": \"line\",\"columnNames\": ['ait_102b_h2s','at_109b_h2s', 'at_109c_oil_in_water'], \"unit\": \"ppm\", \"title\": \"H₂S and Oil in Water\"},\n", " {\"chartType\": \"line\",\"columnNames\": ['at_109e_orp'], \"unit\": \"mV\", \"title\": \"ORP\"},\n", " {\"chartType\": \"line\", \"columnNames\": ['ait_102a_turbitity','at_109a_turbidity'], \"unit\": \"NTU\", \"title\": \"Turbidity\"}\n", " ]\n", @@ -401,8 +391,8 @@ " 'categories': [device, 1,0,max_row,0],\n", " 'name': label_mapping.get(formatChartName(cn))\n", " })\n", - " \n", " chart.set_x_axis({\"name\": c[\"title\"],'text_axis': True, 'interval_unit': 60, 'interval_tick': 60, \"num_format\": \"mm/dd hh:mm\", 'num_font': {\"rotation\": -45}})\n", + " unit = unit_mapping.get(cn.split(\"_\")[2], \"ppm\")\n", " chart.set_y_axis({\"name\": c[\"unit\"], \"crossing\": min, \"min\": min,'major_gridlines': {'visible': True}, \"major_unit\": math.ceil(max/12)})\n", " elif c[\"chartType\"] == \"pie\":\n", " #pie charts don't allow data from multiple worksheets need to make a new worksheet with all the desired data so add the data to the worksheet here\n", @@ -421,8 +411,29 @@ " \n", " chartsheet.insert_chart('A' + str(position), chart, {'x_scale': 3, 'y_scale': 2})\n", " position += 30\n", + "\"\"\"\n", + "\n", + "reportsheet[\"B9\"] = dt.fromtimestamp(getTime(time)[0]/1000).strftime('%m/%d/%Y')\n", + "reportsheet[\"B10\"] = \"Test Well Name\"\n", + "reportsheet[\"B11\"] = \"Test Well Lead\"\n", + "reportsheet[\"B12\"] = \"Test COPA Lead\"\n", + "reportsheet[\"B13\"] = \"Test Job Name\"\n", + "\n", + "reportsheet[\"B16\"]= \"Test Events or Spills\"\n", + "reportsheet[\"B18\"] = \"Test Issues\"\n", + "\n", + "reportsheet[\"E10\"] = \"A very large summary test text to put into perspective the amount\\n of work that is having to be done to this sheet\\n for this to work\"\n", "# Close the Pandas Excel writer and output the Excel file.\n", - "writer.close()" + "writer.close()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(df.index[0])" ] }, {