From f3d70cf5fb1b47a00d12ccb542a800c94ccf21f9 Mon Sep 17 00:00:00 2001 From: Caozhenhui <823914102@qq.com> Date: Tue, 18 Jan 2022 12:55:34 +0800 Subject: [PATCH 1/2] added alternative parameter meter_uuid --- myems-api/reports/metercost.py | 43 ++++++++++++++-------- myems-api/reports/meterrealtime.py | 33 +++++++++++++---- myems-api/reports/metersubmetersbalance.py | 34 +++++++++++++---- myems-api/reports/metertrend.py | 36 +++++++++++++----- 4 files changed, 108 insertions(+), 38 deletions(-) diff --git a/myems-api/reports/metercost.py b/myems-api/reports/metercost.py index 74b1b2d8..91cc580f 100644 --- a/myems-api/reports/metercost.py +++ b/myems-api/reports/metercost.py @@ -1,3 +1,4 @@ +import re import falcon import simplejson as json import mysql.connector @@ -35,6 +36,7 @@ class Reporting: def on_get(req, resp): print(req.params) meter_id = req.params.get('meterid') + meter_uuid = req.params.get('meteruuid') period_type = req.params.get('periodtype') base_period_start_datetime_local = req.params.get('baseperiodstartdatetime') base_period_end_datetime_local = req.params.get('baseperiodenddatetime') @@ -44,16 +46,20 @@ class Reporting: ################################################################################################################ # Step 1: valid parameters ################################################################################################################ - if meter_id is None: - raise falcon.HTTPError(falcon.HTTP_400, - title='API.BAD_REQUEST', - description='API.INVALID_METER_ID') - else: + if meter_id is None and meter_uuid is None: + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') + + if meter_id is not None: meter_id = str.strip(meter_id) if not meter_id.isdigit() or int(meter_id) <= 0: - raise falcon.HTTPError(falcon.HTTP_400, - title='API.BAD_REQUEST', - description='API.INVALID_METER_ID') + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') + + if meter_uuid is not None: + meter_uuid = str.strip(meter_uuid) + regex = re.compile('^[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}\Z', re.I) + match = regex.match(meter_uuid) + if not bool(match): + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_UUID') if period_type is None: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_PERIOD_TYPE') @@ -139,12 +145,18 @@ class Reporting: cnx_historical = mysql.connector.connect(**config.myems_historical_db) cursor_historical = cnx_historical.cursor() - - cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " - " ec.name, ec.unit_of_measure, ec.kgce, ec.kgco2e " - " FROM tbl_meters m, tbl_energy_categories ec " - " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) - row_meter = cursor_system.fetchone() + if meter_id is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure, ec.kgce, ec.kgco2e " + " FROM tbl_meters m, tbl_energy_categories ec " + " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) + row_meter = cursor_system.fetchone() + elif meter_uuid is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure, ec.kgce, ec.kgco2e " + " 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() @@ -166,7 +178,8 @@ class Reporting: if cnx_historical: cnx_historical.disconnect() raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') - + if meter_id is not None and int(meter_id) != int(row_meter[0]): + raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') meter = dict() meter['id'] = row_meter[0] meter['name'] = row_meter[1] diff --git a/myems-api/reports/meterrealtime.py b/myems-api/reports/meterrealtime.py index e3827dba..7f2194fc 100644 --- a/myems-api/reports/meterrealtime.py +++ b/myems-api/reports/meterrealtime.py @@ -1,3 +1,4 @@ +import re import falcon import simplejson as json import mysql.connector @@ -28,17 +29,26 @@ class Reporting: def on_get(req, resp): print(req.params) meter_id = req.params.get('meterid') + meter_uuid = req.params.get('meteruuid') ################################################################################################################ # Step 1: valid parameters ################################################################################################################ - if meter_id is None: + if meter_id is None and meter_uuid is None: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') - else: + + if meter_id is not None: meter_id = str.strip(meter_id) if not meter_id.isdigit() or int(meter_id) <= 0: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') + if meter_uuid is not None: + meter_uuid = str.strip(meter_uuid) + regex = re.compile('^[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}\Z', re.I) + match = regex.match(meter_uuid) + if not bool(match): + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_UUID') + timezone_offset = int(config.utc_offset[1:3]) * 60 + int(config.utc_offset[4:6]) if config.utc_offset[0] == '-': timezone_offset = -timezone_offset @@ -54,11 +64,18 @@ class Reporting: cnx_historical = mysql.connector.connect(**config.myems_historical_db) cursor_historical = cnx_historical.cursor() - cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " - " ec.name, ec.unit_of_measure " - " FROM tbl_meters m, tbl_energy_categories ec " - " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) - row_meter = cursor_system.fetchone() + if meter_id is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure " + " FROM tbl_meters m, tbl_energy_categories ec " + " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) + row_meter = cursor_system.fetchone() + elif meter_uuid is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure " + " 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() @@ -70,6 +87,8 @@ class Reporting: if cnx_historical: cnx_historical.disconnect() raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') + if meter_id is not None and int(meter_id) != int(row_meter[0]): + raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') meter = dict() meter['id'] = row_meter[0] diff --git a/myems-api/reports/metersubmetersbalance.py b/myems-api/reports/metersubmetersbalance.py index df25161a..fe62fc89 100644 --- a/myems-api/reports/metersubmetersbalance.py +++ b/myems-api/reports/metersubmetersbalance.py @@ -1,3 +1,5 @@ +import re + import falcon import simplejson as json import mysql.connector @@ -33,6 +35,7 @@ class Reporting: def on_get(req, resp): print(req.params) meter_id = req.params.get('meterid') + meter_uuid = req.params.get('meteruuid') period_type = req.params.get('periodtype') reporting_period_start_datetime_local = req.params.get('reportingperiodstartdatetime') reporting_period_end_datetime_local = req.params.get('reportingperiodenddatetime') @@ -40,13 +43,21 @@ class Reporting: ################################################################################################################ # Step 1: valid parameters ################################################################################################################ - if meter_id is None: + if meter_id is None and meter_uuid is None: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') - else: + + if meter_id is not None: meter_id = str.strip(meter_id) if not meter_id.isdigit() or int(meter_id) <= 0: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') + if meter_uuid is not None: + meter_uuid = str.strip(meter_uuid) + regex = re.compile('^[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}\Z', re.I) + match = regex.match(meter_uuid) + if not bool(match): + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_UUID') + if period_type is None: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_PERIOD_TYPE') else: @@ -99,11 +110,18 @@ class Reporting: cnx_energy = mysql.connector.connect(**config.myems_energy_db) cursor_energy = cnx_energy.cursor() - cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " - " ec.name, ec.unit_of_measure " - " FROM tbl_meters m, tbl_energy_categories ec " - " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) - row_meter = cursor_system.fetchone() + if meter_id is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure " + " FROM tbl_meters m, tbl_energy_categories ec " + " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) + row_meter = cursor_system.fetchone() + elif meter_uuid is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure " + " 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() @@ -116,6 +134,8 @@ class Reporting: cnx_energy.disconnect() raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') + if meter_id is not None and int(meter_id) != int(row_meter[0]): + raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') master_meter = dict() master_meter['id'] = row_meter[0] diff --git a/myems-api/reports/metertrend.py b/myems-api/reports/metertrend.py index f1870418..6c89e3ef 100644 --- a/myems-api/reports/metertrend.py +++ b/myems-api/reports/metertrend.py @@ -1,3 +1,5 @@ +import re + import falcon import simplejson as json import mysql.connector @@ -30,6 +32,7 @@ class Reporting: def on_get(req, resp): print(req.params) meter_id = req.params.get('meterid') + meter_uuid = req.params.get('meteruuid') reporting_period_start_datetime_local = req.params.get('reportingperiodstartdatetime') reporting_period_end_datetime_local = req.params.get('reportingperiodenddatetime') quick_mode = req.params.get('quickmode') @@ -37,13 +40,21 @@ class Reporting: ################################################################################################################ # Step 1: valid parameters ################################################################################################################ - if meter_id is None: + if meter_id is None and meter_uuid is None: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') - else: + + if meter_id is not None: meter_id = str.strip(meter_id) if not meter_id.isdigit() or int(meter_id) <= 0: raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_ID') + if meter_uuid is not None: + meter_uuid = str.strip(meter_uuid) + regex = re.compile('^[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}\Z', re.I) + match = regex.match(meter_uuid) + if not bool(match): + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', description='API.INVALID_METER_UUID') + timezone_offset = int(config.utc_offset[1:3]) * 60 + int(config.utc_offset[4:6]) if config.utc_offset[0] == '-': timezone_offset = -timezone_offset @@ -95,12 +106,18 @@ class Reporting: cnx_historical = mysql.connector.connect(**config.myems_historical_db) cursor_historical = cnx_historical.cursor() - - cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " - " ec.name, ec.unit_of_measure, ec.kgce, ec.kgco2e " - " FROM tbl_meters m, tbl_energy_categories ec " - " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) - row_meter = cursor_system.fetchone() + if meter_id is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure, ec.kgce, ec.kgco2e " + " FROM tbl_meters m, tbl_energy_categories ec " + " WHERE m.id = %s AND m.energy_category_id = ec.id ", (meter_id,)) + row_meter = cursor_system.fetchone() + elif meter_uuid is not None: + cursor_system.execute(" SELECT m.id, m.name, m.cost_center_id, m.energy_category_id, " + " ec.name, ec.unit_of_measure, ec.kgce, ec.kgco2e " + " 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() @@ -112,7 +129,8 @@ class Reporting: if cnx_historical: cnx_historical.disconnect() raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') - + if meter_id is not None and int(meter_id) != int(row_meter[0]): + raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.METER_NOT_FOUND') meter = dict() meter['id'] = row_meter[0] meter['name'] = row_meter[1] From 64b53ac6e049efb74c47e55becabb196ca8e3a3f Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 18 Jan 2022 21:36:11 +0800 Subject: [PATCH 2/2] added meteruuid as alternative parameter to meter reports --- myems-api/MyEMS.postman_collection.json | 47 ++++++++++++++++++++----- myems-api/README.md | 23 +++++++++--- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/myems-api/MyEMS.postman_collection.json b/myems-api/MyEMS.postman_collection.json index b5223b05..fd569754 100644 --- a/myems-api/MyEMS.postman_collection.json +++ b/myems-api/MyEMS.postman_collection.json @@ -11089,7 +11089,14 @@ "query": [ { "key": "meterid", - "value": "6" + "value": "6", + "description": "use meterid or meteruuid" + }, + { + "key": "meteruuid", + "value": "eb78f7f9-f26f-463b-92fa-d9daf5b3651c", + "description": "use meterid or meteruuid", + "disabled": true }, { "key": "periodtype", @@ -11185,6 +11192,12 @@ { "key": "meterid", "value": "1" + }, + { + "key": "meteruuid", + "value": "eb78f7f9-f26f-463b-92fa-d9daf5b3651c", + "description": "use meterid or meteruuid", + "disabled": true } ] } @@ -11208,7 +11221,14 @@ "query": [ { "key": "meterid", - "value": "1" + "value": "1", + "description": "use meterid or meteruuid" + }, + { + "key": "meteruuid", + "value": "eb78f7f9-f26f-463b-92fa-d9daf5b3651c", + "description": "use meterid or meteruuid", + "disabled": true }, { "key": "periodtype", @@ -11244,7 +11264,14 @@ "query": [ { "key": "meterid", - "value": "6" + "value": "6", + "description": "use meterid or meteruuid" + }, + { + "key": "meteruuid", + "value": "eb78f7f9-f26f-463b-92fa-d9daf5b3651c", + "description": "use meterid or meteruuid", + "disabled": true }, { "key": "reportingperiodstartdatetime", @@ -11253,11 +11280,6 @@ { "key": "reportingperiodenddatetime", "value": "2020-09-11T00:00:00" - }, - { - "key": "", - "value": "", - "disabled": true } ] } @@ -11281,7 +11303,14 @@ "query": [ { "key": "meterid", - "value": "6" + "value": "6", + "description": "use meterid or meteruuid" + }, + { + "key": "meteruuid", + "value": "eb78f7f9-f26f-463b-92fa-d9daf5b3651c", + "description": "use meterid or meteruuid", + "disabled": true }, { "key": "reportingperiodstartdatetime", diff --git a/myems-api/README.md b/myems-api/README.md index c39a0a61..5272d28e 100644 --- a/myems-api/README.md +++ b/myems-api/README.md @@ -2306,23 +2306,38 @@ curl -i -X GET {{base_url}}/reports/equipmentstatistics?equipmentid=1&periodtype ```bash curl -i -X GET {{base_url}}/reports/meterbatch?spaceid=1&reportingperiodstartdatetime=2021-05-01T00:00:00&reportingperiodenddatetime=2021-05-20T11:41:09 ``` -* GET Meter Cost Report +* GET Meter Cost Report + +(use meterid or meteruuid to get meter report) + ```bash curl -i -X GET {{base_url}}/reports/metercost?meterid=6&periodtype=daily&baseperiodstartdatetime=2020-08-01T00:00:00&baseperiodenddatetime=2020-09-01T00:00:00&reportingperiodstartdatetime=2020-09-01T00:00:00&reportingperiodenddatetime=2020-10-01T00:00:00 ``` * GET Meter Energy Report + +(use meterid or meteruuid to get meter report) + ```bash curl -i -X GET {{base_url}}/reports/meterenergy?meterid=6&periodtype=daily&baseperiodstartdatetime=2020-08-01T00:00:00&baseperiodenddatetime=2020-09-01T00:00:00&reportingperiodstartdatetime=2020-09-01T00:00:00&reportingperiodenddatetime=2020-10-01T00:00:00 ``` -* GET Meter Realtime Report +* GET Meter Realtime Report + +(use meterid or meteruuid to get meter report) + ```bash curl -i -X GET {{base_url}}/reports/meterrealtime?meterid=1 ``` -* GET Meter Submeters Balance Report +* GET Meter Submeters Balance Report + +(use meterid or meteruuid to get meter report) + ```bash curl -i -X GET {{base_url}}/reports/metersubmetersbalance?meterid=1&periodtype=daily&reportingperiodstartdatetime=2020-09-01T00:00:00&reportingperiodenddatetime=2020-10-01T00:00:00 ``` -* GET Meter Trend Report +* GET Meter Trend Report + +(use meterid or meteruuid to get meter report) + ```bash curl -i -X GET {{base_url}}/reports/metertrend?meterid=6&reportingperiodstartdatetime=2020-09-10T00:00:00&reportingperiodenddatetime=2020-09-11T00:00:00 ```