From 24a0677c40cd48fc50ad8397611d3e3bd83b6a70 Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Mon, 24 Jan 2022 21:41:40 +0800 Subject: [PATCH] added meter carbon dioxide emission report --- myems-api/example.env | 7 +++ myems-api/excelexporters/metercarbon.py | 20 ++++---- myems-api/excelexporters/metercost.py | 6 +-- myems-api/excelexporters/offlinemetercost.py | 6 +-- myems-api/reports/metercarbon.py | 48 +++++++++++++------- 5 files changed, 55 insertions(+), 32 deletions(-) diff --git a/myems-api/example.env b/myems-api/example.env index 76aa15d5..9b687431 100644 --- a/myems-api/example.env +++ b/myems-api/example.env @@ -61,6 +61,13 @@ MYEMS_REPORTING_DB_DATABASE=myems_reporting_db MYEMS_REPORTING_DB_USER=root MYEMS_REPORTING_DB_PASSWORD=!MyEMS1 +# config for myems_carbon_db +MYEMS_CARBON_DB_HOST=127.0.0.1 +MYEMS_CARBON_DB_PORT=3306 +MYEMS_CARBON_DB_DATABASE=myems_carbon_db +MYEMS_CARBON_DB_USER=root +MYEMS_CARBON_DB_PASSWORD=!MyEMS1 + # indicated in how many minutes to calculate meter energy consumption # 30 for half hourly period # 60 for hourly period diff --git a/myems-api/excelexporters/metercarbon.py b/myems-api/excelexporters/metercarbon.py index b216a2a7..c97f1ced 100644 --- a/myems-api/excelexporters/metercarbon.py +++ b/myems-api/excelexporters/metercarbon.py @@ -62,7 +62,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d # todo ws = wb.active - ws.title = "MeterCarbonEmission" + ws.title = "MeterCarbon" # Row height ws.row_dimensions[1].height = 102 for i in range(2, 2000 + 1): @@ -147,14 +147,14 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d #################################################################################################################### - has_cost_data_flag = True + has_carbon_data_flag = True if "values" not in report['reporting_period'].keys() or len(report['reporting_period']['values']) == 0: - has_cost_data_flag = False + has_carbon_data_flag = False - if has_cost_data_flag: + if has_carbon_data_flag: ws['B6'].font = title_font - ws['B6'] = name + 'Reporting Period Carbon Emission' + ws['B6'] = name + 'Reporting Period Carbon Dioxide Emissions' reporting_period_data = report['reporting_period'] category = report['meter']['energy_category_name'] @@ -166,7 +166,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws['B8'].font = title_font ws['B8'].alignment = c_c_alignment - ws['B8'] = 'Carbon Emission' + ws['B8'] = 'Carbon Dioxide Emission' ws['B8'].border = f_border ws['B9'].font = title_font @@ -242,7 +242,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d #################################################################################################################### - has_cost_datail_flag = True + has_carbon_detail_flag = True reporting_period_data = report['reporting_period'] category = report['meter']['energy_category_name'] ca_len = len(category) @@ -256,9 +256,9 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d parameters_parameters_datas_len += 1 if "values" not in reporting_period_data.keys() or len(reporting_period_data['values']) == 0: - has_cost_datail_flag = False + has_carbon_detail_flag = False - if has_cost_datail_flag: + if has_carbon_detail_flag: start_detail_data_row_number = 13 + (parameters_parameters_datas_len + ca_len) * 6 ws['B11'].font = title_font @@ -324,7 +324,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(end_data_row_number + 1)].border = f_border line = LineChart() - line.title = 'Reporting Period Costs - ' + report['meter']['energy_category_name'] + \ + line.title = 'Reporting Period Carbon Dioxide Emissions - ' + report['meter']['energy_category_name'] + \ " (" + report['meter']['unit_of_measure'] + ")" line_data = Reference(ws, min_col=3, min_row=start_detail_data_row_number, max_row=max_row) line.series.append(Series(line_data, title_from_data=True)) diff --git a/myems-api/excelexporters/metercost.py b/myems-api/excelexporters/metercost.py index 6c9b0635..7aa7fbf8 100644 --- a/myems-api/excelexporters/metercost.py +++ b/myems-api/excelexporters/metercost.py @@ -242,7 +242,7 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d #################################################################################################################### - has_cost_datail_flag = True + has_cost_detail_flag = True reporting_period_data = report['reporting_period'] category = report['meter']['energy_category_name'] ca_len = len(category) @@ -256,9 +256,9 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d parameters_parameters_datas_len += 1 if "values" not in reporting_period_data.keys() or len(reporting_period_data['values']) == 0: - has_cost_datail_flag = False + has_cost_detail_flag = False - if has_cost_datail_flag: + if has_cost_detail_flag: start_detail_data_row_number = 13 + (parameters_parameters_datas_len + ca_len) * 6 ws['B11'].font = title_font diff --git a/myems-api/excelexporters/offlinemetercost.py b/myems-api/excelexporters/offlinemetercost.py index fd07203a..66e2c256 100644 --- a/myems-api/excelexporters/offlinemetercost.py +++ b/myems-api/excelexporters/offlinemetercost.py @@ -241,16 +241,16 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d #################################################################################################################### - has_cost_datail_flag = True + has_cost_detail_flag = True reporting_period_data = report['reporting_period'] category = report['offline_meter']['energy_category_name'] ca_len = len(category) times = reporting_period_data['timestamps'] if "values" not in reporting_period_data.keys() or len(reporting_period_data['values']) == 0: - has_cost_datail_flag = False + has_cost_detail_flag = False - if has_cost_datail_flag: + if has_cost_detail_flag: ws['B11'].font = title_font ws['B11'] = name + 'Detailed Data' diff --git a/myems-api/reports/metercarbon.py b/myems-api/reports/metercarbon.py index dce3a7fb..cf92dd88 100644 --- a/myems-api/reports/metercarbon.py +++ b/myems-api/reports/metercarbon.py @@ -22,12 +22,12 @@ class Reporting: #################################################################################################################### # PROCEDURES # Step 1: valid parameters - # Step 2: query the meter and carbon + # Step 2: query the meter and energy category # Step 3: query associated points # Step 4: query base period energy consumption - # Step 5: query base period carbon Emission + # Step 5: query base period carbon dioxide emission # Step 6: query reporting period energy consumption - # Step 7: query reporting period carbon emission + # Step 7: query reporting period carbon dioxide emission # Step 8: query tariff data # Step 9: query associated points data # Step 10: construct the report @@ -132,11 +132,14 @@ class Reporting: description='API.INVALID_REPORTING_PERIOD_END_DATETIME') ################################################################################################################ - # Step 2: query the meter and carbon + # Step 2: query the meter and energy category ################################################################################################################ cnx_system = mysql.connector.connect(**config.myems_system_db) cursor_system = cnx_system.cursor() + cnx_energy = mysql.connector.connect(**config.myems_energy_db) + cursor_energy = cnx_energy.cursor() + cnx_carbon = mysql.connector.connect(**config.myems_carbon_db) cursor_carbon = cnx_carbon.cursor() @@ -154,16 +157,23 @@ class Reporting: " FROM tbl_meters m, tbl_energy_categories ec " " WHERE m.uuid = %s AND m.energy_category_id = ec.id ", (meter_uuid,)) row_meter = cursor_system.fetchone() + if row_meter is None: if cursor_system: cursor_system.close() if cnx_system: cnx_system.disconnect() + if cursor_energy: + cursor_energy.close() + if cnx_energy: + cnx_energy.disconnect() + if cursor_carbon: cursor_carbon.close() if cnx_carbon: cnx_carbon.disconnect() + if cursor_historical: cursor_historical.close() if cnx_historical: @@ -203,8 +213,8 @@ class Reporting: " AND start_datetime_utc >= %s " " AND start_datetime_utc < %s " " ORDER BY start_datetime_utc ") - cursor_carbon.execute(query, (meter['id'], base_start_datetime_utc, base_end_datetime_utc)) - rows_meter_hourly = cursor_carbon.fetchall() + cursor_energy.execute(query, (meter['id'], base_start_datetime_utc, base_end_datetime_utc)) + rows_meter_hourly = cursor_energy.fetchall() rows_meter_periodically = utilities.aggregate_hourly_data_by_period(rows_meter_hourly, base_start_datetime_utc, @@ -238,7 +248,7 @@ class Reporting: base['total_in_kgco2e'] += actual_value * meter['kgco2e'] ################################################################################################################ - # Step 5: query base period Carbon Emission + # Step 5: query base period carbon dioxide emission ################################################################################################################ query = (" SELECT start_datetime_utc, actual_value " " FROM tbl_meter_hourly " @@ -264,7 +274,7 @@ class Reporting: base['total_in_category'] += actual_value ################################################################################################################ - # Step 6: query reporting period carbon consumption + # Step 6: query reporting period energy consumption ################################################################################################################ query = (" SELECT start_datetime_utc, actual_value " " FROM tbl_meter_hourly " @@ -272,8 +282,8 @@ class Reporting: " AND start_datetime_utc >= %s " " AND start_datetime_utc < %s " " ORDER BY start_datetime_utc ") - cursor_carbon.execute(query, (meter['id'], reporting_start_datetime_utc, reporting_end_datetime_utc)) - rows_meter_hourly = cursor_carbon.fetchall() + cursor_energy.execute(query, (meter['id'], reporting_start_datetime_utc, reporting_end_datetime_utc)) + rows_meter_hourly = cursor_energy.fetchall() rows_meter_periodically = utilities.aggregate_hourly_data_by_period(rows_meter_hourly, reporting_start_datetime_utc, @@ -308,7 +318,7 @@ class Reporting: reporting['total_in_kgco2e'] += actual_value * meter['kgco2e'] ################################################################################################################ - # Step 7: query reporting period carbon emission + # Step 7: query reporting period carbon dioxide emission ################################################################################################################ query = (" SELECT start_datetime_utc, actual_value " " FROM tbl_meter_hourly " @@ -429,10 +439,16 @@ class Reporting: if cnx_system: cnx_system.disconnect() + if cursor_energy: + cursor_energy.close() + if cnx_energy: + cnx_energy.disconnect() + if cursor_carbon: cursor_carbon.close() if cnx_carbon: cnx_carbon.disconnect() + if cursor_historical: cursor_historical.close() if cnx_historical: @@ -442,7 +458,7 @@ class Reporting: "cost_center_id": meter['cost_center_id'], "energy_category_id": meter['energy_category_id'], "energy_category_name": meter['energy_category_name'], - "unit_of_measure": config.currency_unit, + "unit_of_measure": 'KG', "kgce": meter['kgce'], "kgco2e": meter['kgco2e'], }, @@ -472,9 +488,9 @@ class Reporting: # export result to Excel file and then encode the file to base64 string result['excel_bytes_base64'] = \ excelexporters.metercarbon.export(result, - meter['name'], - reporting_period_start_datetime_local, - reporting_period_end_datetime_local, - period_type) + meter['name'], + reporting_period_start_datetime_local, + reporting_period_end_datetime_local, + period_type) resp.text = json.dumps(result)