diff --git a/CHANGELOG.md b/CHANGELOG.md index 91fa6548..4336c0e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,35 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Removed - None. +## [v1.4.0] - 2021-11-14 +### Added +- added installation on docker to myems-modbus-tcp. + +### Changed +- Merged expression table into virtual meter table in database. + NOTE: THIS CHANGE MAY BREAK YOUR SYSTEM. + + Upgrade procedure for this change: + 1. Stop the myems-normalization service or container. + 2. Backup your database. + 3. Upgrade myems/admin, myems/myems-api, and myems/myems-normalization source code, + and keep previous .env files unchanged. + 4. Run database/upgrade/upgrade1.4.0.sql to merge expression into virtual meter + 5. Check the virtual meters in Admin UI. + 6. Start the myems-normalization service or container. + +- updated virtual meter model view in admin ui +- updated docker hub address in README +- updated excel exporters to make them print friendly +- added access control to actions of user in api + +### Fixed +- fixed issue in on_delete of gateway in API +- upgraded falcon framework to v3.0.1 in API to fix warnings + +### Removed +- None. + ## [v1.3.4] - 2021-11-06 ### Added - added notification drop down list and notification page. diff --git a/database/demo-cn/myems_system_db.sql b/database/demo-cn/myems_system_db.sql index 616675b7..979b6302 100644 --- a/database/demo-cn/myems_system_db.sql +++ b/database/demo-cn/myems_system_db.sql @@ -374,18 +374,6 @@ VALUES COMMIT; --- --------------------------------------------------------------------------------------------------------------------- --- Demo Data for table `myems_system_db`.`tbl_expressions` --- --------------------------------------------------------------------------------------------------------------------- -START TRANSACTION; -USE `myems_system_db`; - -INSERT INTO `myems_system_db`.`tbl_expressions` -(`id`, `uuid`, `virtual_meter_id`, `equation`) -VALUES -(1, '3fff2cfb-f755-44c8-a919-6135205a8573', 1, 'x1+x2-x3'); -COMMIT; - -- --------------------------------------------------------------------------------------------------------------------- -- Demo Data for table `myems_system_db`.`tbl_gateways` -- --------------------------------------------------------------------------------------------------------------------- @@ -1114,9 +1102,9 @@ START TRANSACTION; USE `myems_system_db`; INSERT INTO `myems_system_db`.`tbl_virtual_meters` -(`id`, `name`, `uuid`, `energy_category_id`, `is_counted`, `cost_center_id`, `energy_item_id`, `description`) +(`id`, `name`, `uuid`, `equation`, `energy_category_id`, `is_counted`, `cost_center_id`, `energy_item_id`, `description`) VALUES -(1, '虚拟表1', '3fff2cfb-f755-44c8-a919-6135205a8573', 1, true, 1, 1, 'virtual description'); +(1, '虚拟表1', '3fff2cfb-f755-44c8-a919-6135205a8573', 'x1+x2+x3', 1, true, 1, 1, 'virtual description'); COMMIT; @@ -1127,7 +1115,7 @@ START TRANSACTION; USE `myems_system_db`; -- meter_type = {'meter', 'virtual_meter', 'offline_meter'} INSERT INTO `myems_system_db`.`tbl_variables` -(`id`, `name`, `expression_id`, `meter_type`, `meter_id`) +(`id`, `name`, `virtual_meter_id`, `meter_type`, `meter_id`) VALUES (1, 'x1', 1, 'meter', 1), (2, 'x2', 1, 'meter', 2), diff --git a/database/demo-de/myems_system_db.sql b/database/demo-de/myems_system_db.sql index f722281c..21c50ebb 100644 --- a/database/demo-de/myems_system_db.sql +++ b/database/demo-de/myems_system_db.sql @@ -375,18 +375,6 @@ VALUES COMMIT; --- --------------------------------------------------------------------------------------------------------------------- --- Demo Data for table `myems_system_db`.`tbl_expressions` --- --------------------------------------------------------------------------------------------------------------------- -START TRANSACTION; -USE `myems_system_db`; - -INSERT INTO `myems_system_db`.`tbl_expressions` -(`id`, `uuid`, `virtual_meter_id`, `equation`) -VALUES -(1, '3fff2cfb-f755-44c8-a919-6135205a8573', 1, 'x1+x2-x3'); -COMMIT; - -- --------------------------------------------------------------------------------------------------------------------- -- Demo Data for table `myems_system_db`.`tbl_gateways` -- --------------------------------------------------------------------------------------------------------------------- @@ -1127,9 +1115,9 @@ START TRANSACTION; USE `myems_system_db`; INSERT INTO `myems_system_db`.`tbl_virtual_meters` -(`id`, `name`, `uuid`, `energy_category_id`, `is_counted`, `cost_center_id`, `energy_item_id`, `description`) +(`id`, `name`, `uuid`, `equation`, `energy_category_id`, `is_counted`, `cost_center_id`, `energy_item_id`, `description`) VALUES -(1, 'Beispiel Virtueller Meter', '3fff2cfb-f755-44c8-a919-6135205a8573', 1, true, 1, 1, 'virtual description'); +(1, 'Beispiel Virtueller Meter', '3fff2cfb-f755-44c8-a919-6135205a8573', 'x1+x2+x3', 1, true, 1, 1, 'virtual description'); COMMIT; @@ -1140,7 +1128,7 @@ START TRANSACTION; USE `myems_system_db`; -- meter_type = {'meter', 'virtual_meter', 'offline_meter'} INSERT INTO `myems_system_db`.`tbl_variables` -(`id`, `name`, `expression_id`, `meter_type`, `meter_id`) +(`id`, `name`, `virtual_meter_id`, `meter_type`, `meter_id`) VALUES (1, 'x1', 1, 'meter', 1), (2, 'x2', 1, 'meter', 2), diff --git a/database/demo-en/myems_system_db.sql b/database/demo-en/myems_system_db.sql index ca9ab144..90ede0e7 100644 --- a/database/demo-en/myems_system_db.sql +++ b/database/demo-en/myems_system_db.sql @@ -375,18 +375,6 @@ VALUES COMMIT; --- --------------------------------------------------------------------------------------------------------------------- --- Demo Data for table `myems_system_db`.`tbl_expressions` --- --------------------------------------------------------------------------------------------------------------------- -START TRANSACTION; -USE `myems_system_db`; - -INSERT INTO `myems_system_db`.`tbl_expressions` -(`id`, `uuid`, `virtual_meter_id`, `equation`) -VALUES -(1, '3fff2cfb-f755-44c8-a919-6135205a8573', 1, 'x1+x2-x3'); -COMMIT; - -- --------------------------------------------------------------------------------------------------------------------- -- Demo Data for table `myems_system_db`.`tbl_gateways` -- --------------------------------------------------------------------------------------------------------------------- @@ -1126,9 +1114,9 @@ START TRANSACTION; USE `myems_system_db`; INSERT INTO `myems_system_db`.`tbl_virtual_meters` -(`id`, `name`, `uuid`, `energy_category_id`, `is_counted`, `cost_center_id`, `energy_item_id`, `description`) +(`id`, `name`, `uuid`, `equation`, `energy_category_id`, `is_counted`, `cost_center_id`, `energy_item_id`, `description`) VALUES -(1, 'Example Virtual Meter', '3fff2cfb-f755-44c8-a919-6135205a8573', 1, true, 1, 1, 'virtual description'); +(1, 'Example Virtual Meter', '3fff2cfb-f755-44c8-a919-6135205a8573', 'x1+x2+x3', 1, true, 1, 1, 'virtual description'); COMMIT; @@ -1139,7 +1127,7 @@ START TRANSACTION; USE `myems_system_db`; -- meter_type = {'meter', 'virtual_meter', 'offline_meter'} INSERT INTO `myems_system_db`.`tbl_variables` -(`id`, `name`, `expression_id`, `meter_type`, `meter_id`) +(`id`, `name`, `virtual_meter_id`, `meter_type`, `meter_id`) VALUES (1, 'x1', 1, 'meter', 1), (2, 'x2', 1, 'meter', 2), diff --git a/database/install/myems_system_db.sql b/database/install/myems_system_db.sql index 615ae0de..1d058923 100644 --- a/database/install/myems_system_db.sql +++ b/database/install/myems_system_db.sql @@ -336,19 +336,6 @@ CREATE TABLE IF NOT EXISTS `myems_system_db`.`tbl_equipments_virtual_meters` ( PRIMARY KEY (`id`)); CREATE INDEX `tbl_equipments_virtual_meters_index_1` ON `myems_system_db`.`tbl_equipments_virtual_meters` (`equipment_id`); --- --------------------------------------------------------------------------------------------------------------------- --- Table `myems_system_db`.`tbl_expressions` --- --------------------------------------------------------------------------------------------------------------------- -DROP TABLE IF EXISTS `myems_system_db`.`tbl_expressions` ; - -CREATE TABLE IF NOT EXISTS `myems_system_db`.`tbl_expressions` ( - `id` BIGINT NOT NULL AUTO_INCREMENT, - `uuid` CHAR(36) NOT NULL, - `virtual_meter_id` BIGINT NOT NULL, - `equation` LONGTEXT NOT NULL, - PRIMARY KEY (`id`)); -CREATE INDEX `tbl_expressions_index_1` ON `myems_system_db`.`tbl_expressions` (`virtual_meter_id`); - -- --------------------------------------------------------------------------------------------------------------------- -- Table `myems_system_db`.`tbl_gateways` -- --------------------------------------------------------------------------------------------------------------------- @@ -1213,6 +1200,7 @@ CREATE TABLE IF NOT EXISTS `myems_system_db`.`tbl_virtual_meters` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `uuid` CHAR(36) NOT NULL, + `equation` LONGTEXT NOT NULL, `energy_category_id` BIGINT NOT NULL, `is_counted` BOOL NOT NULL, `cost_center_id` BIGINT NOT NULL, @@ -1231,12 +1219,12 @@ DROP TABLE IF EXISTS `myems_system_db`.`tbl_variables` ; CREATE TABLE IF NOT EXISTS `myems_system_db`.`tbl_variables` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `name` CHAR(36) NOT NULL, - `expression_id` BIGINT NOT NULL, + `virtual_meter_id` BIGINT NOT NULL, `meter_type` VARCHAR(32) NOT NULL COMMENT 'meter, virtual_meter, offline_meter', `meter_id` BIGINT NOT NULL, PRIMARY KEY (`id`)); - CREATE INDEX `tbl_variables_index_1` ON `myems_system_db`.`tbl_variables` (`expression_id`); - CREATE INDEX `tbl_variables_index_2` ON `myems_system_db`.`tbl_variables` (`meter_id`, `meter_type`, `expression_id`); + CREATE INDEX `tbl_variables_index_1` ON `myems_system_db`.`tbl_variables` (`virtual_meter_id`); + CREATE INDEX `tbl_variables_index_2` ON `myems_system_db`.`tbl_variables` (`meter_id`, `meter_type`, `virtual_meter_id`); -- --------------------------------------------------------------------------------------------------------------------- -- Table `myems_system_db`.`tbl_versions` @@ -1258,6 +1246,6 @@ USE `myems_system_db`; INSERT INTO `myems_system_db`.`tbl_versions` (`id`, `version`, `release_date`) VALUES -(1, '1.3.3', '2021-10-30'); +(1, '1.4.0', '2021-11-13'); COMMIT; diff --git a/database/upgrade/upgrade1.4.0.sql b/database/upgrade/upgrade1.4.0.sql new file mode 100644 index 00000000..a56096b2 --- /dev/null +++ b/database/upgrade/upgrade1.4.0.sql @@ -0,0 +1,60 @@ +-- NOTE: BACKUP YOUR DATABASE AND SOURCE CODE FIRST +-- THIS UPGRADE MAY CAUSE DATA LOSS AND BREAK YOUR MYEMS SYSTEM + +-- THIS UPGRADE SCRIPT WILL MERGE EXPRESSION TABLE INTO VIRTUAL METER TABLE +-- STOP NORMALIZATION SERVICE BEFORE RUNNING THIS SCRIPT: +-- $ sudo systemctl stop myems-normalization.service +-- AFTER RUNNING THIS UPGRADE SCRIPT, +-- UPGRADE ADMIN UI, API, AND NORMALIZATION SERVICE +-- START NORMALIZATION SERVICE +-- $ sudo systemctl start myems-normalization.service +START TRANSACTION; +CREATE TABLE IF NOT EXISTS `myems_system_db`.`tbl_virtual_meters_new` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NOT NULL, + `uuid` CHAR(36) NOT NULL, + `equation` LONGTEXT NOT NULL, + `energy_category_id` BIGINT NOT NULL, + `is_counted` BOOL NOT NULL, + `cost_center_id` BIGINT NOT NULL, + `energy_item_id` BIGINT, + `description` VARCHAR(255), + PRIMARY KEY (`id`)); + +CREATE TABLE IF NOT EXISTS `myems_system_db`.`tbl_variables_new` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `name` CHAR(36) NOT NULL, + `virtual_meter_id` BIGINT NOT NULL, + `meter_type` VARCHAR(32) NOT NULL COMMENT 'meter, virtual_meter, offline_meter', + `meter_id` BIGINT NOT NULL, + PRIMARY KEY (`id`)); + +INSERT INTO myems_system_db.tbl_virtual_meters_new +(id, name, uuid, equation, energy_category_id, is_counted, cost_center_id, energy_item_id, description) +SELECT tvm.id, tvm.name, tvm.uuid, te.equation, tvm.energy_category_id, tvm.is_counted, tvm.cost_center_id, + tvm.energy_item_id, tvm.description +FROM myems_system_db.tbl_virtual_meters tvm, myems_system_db.tbl_expressions te +WHERE tvm.id = te.virtual_meter_id ; + +INSERT INTO myems_system_db.tbl_variables_new +(id, name, virtual_meter_id, meter_type, meter_id) +SELECT tv.id, tv.name, te.virtual_meter_id, tv.meter_type, tv.meter_id +FROM myems_system_db.tbl_variables tv, myems_system_db.tbl_expressions te +WHERE tv.expression_id = te.id ; + +DROP TABLE IF EXISTS myems_system_db.tbl_variables; +DROP TABLE IF EXISTS myems_system_db.tbl_virtual_meters; + +ALTER TABLE myems_system_db.tbl_variables_new RENAME myems_system_db.tbl_variables; +ALTER TABLE myems_system_db.tbl_virtual_meters_new RENAME myems_system_db.tbl_virtual_meters; + +CREATE INDEX `tbl_variables_index_1` ON `myems_system_db`.`tbl_variables` (`virtual_meter_id`); +CREATE INDEX `tbl_variables_index_2` ON `myems_system_db`.`tbl_variables` (`meter_id`, `meter_type`, `virtual_meter_id`); +CREATE INDEX `tbl_virtual_meters_index_1` ON `myems_system_db`.`tbl_virtual_meters` (`name`); +CREATE INDEX `tbl_virtual_meters_index_2` ON `myems_system_db`.`tbl_virtual_meters` (`energy_category_id`); +CREATE INDEX `tbl_virtual_meters_index_3` ON `myems_system_db`.`tbl_virtual_meters` (`energy_item_id`); + +-- UPDATE VERSION NUMBER +UPDATE myems_system_db.tbl_versions SET version='1.4.0', release_date='2021-11-13' WHERE id=1; + +COMMIT; diff --git a/myems-api/core/meter.py b/myems-api/core/meter.py index ce01ffa1..d98bd9de 100644 --- a/myems-api/core/meter.py +++ b/myems-api/core/meter.py @@ -394,9 +394,8 @@ class MeterItem: # check if this meter is being used by virtual meters cursor.execute(" SELECT vm.name " - " FROM tbl_variables va, tbl_expressions ex, tbl_virtual_meters vm " - " WHERE va.meter_id = %s AND va.meter_type = 'meter' AND va.expression_id = ex.id " - " AND ex.virtual_meter_id = vm.id ", + " FROM tbl_variables va, tbl_virtual_meters vm " + " WHERE va.meter_id = %s AND va.meter_type = 'meter' AND va.virtual_meter_id = vm.id ", (id_,)) row_virtual_meter = cursor.fetchone() if row_virtual_meter is not None: diff --git a/myems-api/core/offlinemeter.py b/myems-api/core/offlinemeter.py index 2cbb486b..4a91a308 100644 --- a/myems-api/core/offlinemeter.py +++ b/myems-api/core/offlinemeter.py @@ -339,9 +339,8 @@ class OfflineMeterItem: # check if this offline meter is being used by virtual meters cursor.execute(" SELECT vm.name " - " FROM tbl_variables va, tbl_expressions ex, tbl_virtual_meters vm " - " WHERE va.meter_id = %s AND va.meter_type = 'offline_meter' AND va.expression_id = ex.id " - " AND ex.virtual_meter_id = vm.id ", + " FROM tbl_variables va, tbl_virtual_meters vm " + " WHERE va.meter_id = %s AND va.meter_type = 'offline_meter' AND va.virtual_meter_id = vm.id ", (id_,)) row_virtual_meter = cursor.fetchone() if row_virtual_meter is not None: diff --git a/myems-api/core/virtualmeter.py b/myems-api/core/virtualmeter.py index e7bf2af3..800219f1 100644 --- a/myems-api/core/virtualmeter.py +++ b/myems-api/core/virtualmeter.py @@ -57,8 +57,8 @@ class VirtualMeterCollection: "name": row['name'], "uuid": row['uuid']} - query = (" SELECT id, name, uuid, energy_category_id, is_counted, " - " energy_item_id, cost_center_id, description " + query = (" SELECT id, name, uuid, equation, energy_category_id, is_counted, cost_center_id, " + " energy_item_id, description " " FROM tbl_virtual_meters " " ORDER BY id ") cursor.execute(query) @@ -68,36 +68,29 @@ class VirtualMeterCollection: if rows_virtual_meters is not None and len(rows_virtual_meters) > 0: for row in rows_virtual_meters: energy_category = energy_category_dict.get(row['energy_category_id'], None) - energy_item = energy_item_dict.get(row['energy_item_id'], None) cost_center = cost_center_dict.get(row['cost_center_id'], None) + energy_item = energy_item_dict.get(row['energy_item_id'], None) meta_result = {"id": row['id'], "name": row['name'], "uuid": row['uuid'], + "equation": row['equation'], "energy_category": energy_category, "is_counted": True if row['is_counted'] else False, - "energy_item": energy_item, "cost_center": cost_center, + "energy_item": energy_item, "description": row['description'], "expression": {}} expression = dict() - query_expression = (" SELECT e.id, e.uuid, e.equation " - " FROM tbl_expressions e " - " WHERE e.virtual_meter_id = %s ") - cursor.execute(query_expression, (row['id'],)) - row_expression = cursor.fetchone() - if row_expression is not None: - expression = {'id': row_expression['id'], - 'uuid': row_expression['uuid'], - 'equation': row_expression['equation'], - 'variables': []} + if meta_result["equation"] is not None: + expression = {'equation': meta_result["equation"], 'variables': []} query_variables = (" SELECT v.id, v.name, v.meter_type, v.meter_id " - " FROM tbl_expressions e, tbl_variables v " - " WHERE e.id = %s AND v.expression_id = e.id " + " FROM tbl_virtual_meters vm, tbl_variables v " + " WHERE vm.id = %s AND v.virtual_meter_id = vm.id " " ORDER BY v.name ") - cursor.execute(query_variables, (row_expression['id'],)) + cursor.execute(query_variables, (meta_result['id'],)) rows_variables = cursor.fetchall() if rows_variables is not None: for row_variable in rows_variables: @@ -312,11 +305,12 @@ class VirtualMeterCollection: description='API.VIRTUAL_METER_OF_VARIABLE_NOT_FOUND') add_values = (" INSERT INTO tbl_virtual_meters " - " (name, uuid, energy_category_id, is_counted, " + " (name, uuid, equation, energy_category_id, is_counted, " " cost_center_id, energy_item_id, description) " - " VALUES (%s, %s, %s, %s, %s, %s, %s) ") + " VALUES (%s, %s, %s, %s, %s, %s, %s, %s) ") cursor.execute(add_values, (name, str(uuid.uuid4()), + new_values['data']['expression']['equation'].lower(), energy_category_id, is_counted, cost_center_id, @@ -325,32 +319,12 @@ class VirtualMeterCollection: new_id = cursor.lastrowid cnx.commit() - cursor.execute(" SELECT id " - " FROM tbl_expressions " - " WHERE virtual_meter_id = %s ", (new_id,)) - row_expression = cursor.fetchone() - if row_expression is not None: - # delete variables - cursor.execute(" DELETE FROM tbl_variables WHERE expression_id = %s ", (row_expression[0],)) - # delete expression - cursor.execute(" DELETE FROM tbl_expressions WHERE id = %s ", (row_expression[0],)) - cnx.commit() - - # add expression - add_values = (" INSERT INTO tbl_expressions (uuid, virtual_meter_id, equation) " - " VALUES (%s, %s, %s) ") - cursor.execute(add_values, (str(uuid.uuid4()), - new_id, - new_values['data']['expression']['equation'].lower())) - new_expression_id = cursor.lastrowid - cnx.commit() - # add variables for variable in new_values['data']['expression']['variables']: - add_values = (" INSERT INTO tbl_variables (name, expression_id, meter_type, meter_id) " + add_values = (" INSERT INTO tbl_variables (name, virtual_meter_id, meter_type, meter_id) " " VALUES (%s, %s, %s, %s) ") cursor.execute(add_values, (variable['name'].lower(), - new_expression_id, + new_id, variable['meter_type'], variable['meter_id'],)) cnx.commit() @@ -417,8 +391,8 @@ class VirtualMeterItem: "name": row['name'], "uuid": row['uuid']} - query = (" SELECT id, name, uuid, energy_category_id, is_counted, " - " energy_item_id, cost_center_id, description " + query = (" SELECT id, name, uuid, equation, energy_category_id, is_counted, cost_center_id, " + " energy_item_id, description " " FROM tbl_virtual_meters " " WHERE id = %s ") cursor.execute(query, (id_,)) @@ -428,36 +402,29 @@ class VirtualMeterItem: description='API.VIRTUAL_METER_NOT_FOUND') else: energy_category = energy_category_dict.get(row['energy_category_id'], None) - energy_item = energy_item_dict.get(row['energy_item_id'], None) cost_center = cost_center_dict.get(row['cost_center_id'], None) + energy_item = energy_item_dict.get(row['energy_item_id'], None) meta_result = {"id": row['id'], "name": row['name'], "uuid": row['uuid'], + "equation": row['equation'], "energy_category": energy_category, "is_counted": True if row['is_counted'] else False, - "energy_item": energy_item, "cost_center": cost_center, + "energy_item": energy_item, "description": row['description'], "expression": {}} expression = dict() - query_expression = (" SELECT e.id, e.uuid, e.equation " - " FROM tbl_expressions e " - " WHERE e.virtual_meter_id = %s ") - cursor.execute(query_expression, (id_,)) - row_expression = cursor.fetchone() - if row_expression is not None: - expression = {'id': row_expression['id'], - 'uuid': row_expression['uuid'], - 'equation': row_expression['equation'], - 'variables': []} + if meta_result["equation"] is not None: + expression = {'equation': meta_result["equation"], 'variables': []} query_variables = (" SELECT v.id, v.name, v.meter_type, v.meter_id " - " FROM tbl_expressions e, tbl_variables v " - " WHERE e.id = %s AND v.expression_id = e.id " + " FROM tbl_virtual_meters vm, tbl_variables v " + " WHERE vm.id = %s AND v.virtual_meter_id = vm.id " " ORDER BY v.name ") - cursor.execute(query_variables, (row_expression['id'],)) + cursor.execute(query_variables, (meta_result["id"],)) rows_variables = cursor.fetchall() if rows_variables is not None: for row_variable in rows_variables: @@ -528,9 +495,8 @@ class VirtualMeterItem: # check relations with other virtual meters cursor.execute(" SELECT vm.name " - " FROM tbl_variables va, tbl_expressions ex, tbl_virtual_meters vm " - " WHERE va.meter_id = %s AND va.meter_type = 'virtual_meter' AND va.expression_id = ex.id " - " AND ex.virtual_meter_id = vm.id ", + " FROM tbl_variables va, tbl_virtual_meters vm " + " WHERE va.meter_id = %s AND va.meter_type = 'virtual_meter' AND va.virtual_meter_id = vm.id ", (id_,)) row_virtual_meter = cursor.fetchone() if row_virtual_meter is not None: @@ -639,17 +605,6 @@ class VirtualMeterItem: title='API.BAD_REQUEST', description='API.THERE_IS_RELATION_WITH_SHOPFLOORS') - cursor.execute(" SELECT id " - " FROM tbl_expressions " - " WHERE virtual_meter_id = %s ", (id_,)) - row_expression = cursor.fetchone() - if row_expression is not None: - # delete variables - cursor.execute(" DELETE FROM tbl_variables WHERE expression_id = %s ", (row_expression[0],)) - # delete expression - cursor.execute(" DELETE FROM tbl_expressions WHERE id = %s ", (row_expression[0],)) - cnx.commit() - # check relation with energy flow diagram links cursor.execute(" SELECT id " " FROM tbl_energy_flow_diagrams_links " @@ -662,6 +617,15 @@ class VirtualMeterItem: title='API.BAD_REQUEST', description='API.THERE_IS_RELATION_WITH_ENERGY_FLOW_DIAGRAM_LINKS') + cursor.execute(" SELECT id " + " FROM tbl_variables " + " WHERE virtual_meter_id = %s ", (id_,)) + row_variables = cursor.fetchall() + if row_variables is not None and len(row_variables) > 0: + # delete variables + cursor.execute(" DELETE FROM tbl_variables WHERE virtual_meter_id = %s ", (id_,)) + cnx.commit() + cursor.execute(" DELETE FROM tbl_virtual_meters WHERE id = %s ", (id_,)) cnx.commit() @@ -850,10 +814,11 @@ class VirtualMeterItem: description='API.VIRTUAL_METER_OF_VARIABLE_NOT_FOUND') update_row = (" UPDATE tbl_virtual_meters " - " SET name = %s, energy_category_id = %s, is_counted = %s, " + " SET name = %s, equation = %s, energy_category_id = %s, is_counted = %s, " " cost_center_id = %s, energy_item_id = %s, description = %s " " WHERE id = %s ") cursor.execute(update_row, (name, + new_values['data']['expression']['equation'].lower(), energy_category_id, is_counted, cost_center_id, @@ -863,31 +828,20 @@ class VirtualMeterItem: cnx.commit() cursor.execute(" SELECT id " - " FROM tbl_expressions " + " FROM tbl_variables " " WHERE virtual_meter_id = %s ", (id_,)) - row_expression = cursor.fetchone() - if row_expression is not None: + row_variables = cursor.fetchall() + if row_variables is not None and len(row_variables) > 0: # delete variables - cursor.execute(" DELETE FROM tbl_variables WHERE expression_id = %s ", (row_expression[0],)) - # delete expression - cursor.execute(" DELETE FROM tbl_expressions WHERE id = %s ", (row_expression[0],)) + cursor.execute(" DELETE FROM tbl_variables WHERE virtual_meter_id = %s ", (id_,)) cnx.commit() - # add expression - add_values = (" INSERT INTO tbl_expressions (uuid, virtual_meter_id, equation) " - " VALUES (%s, %s, %s) ") - cursor.execute(add_values, (str(uuid.uuid4()), - id_, - new_values['data']['expression']['equation'].lower())) - new_expression_id = cursor.lastrowid - cnx.commit() - # add variables for variable in new_values['data']['expression']['variables']: - add_values = (" INSERT INTO tbl_variables (name, expression_id, meter_type, meter_id) " + add_values = (" INSERT INTO tbl_variables (name, virtual_meter_id, meter_type, meter_id) " " VALUES (%s, %s, %s, %s) ") cursor.execute(add_values, (variable['name'].lower(), - new_expression_id, + id_, variable['meter_type'], variable['meter_id'],)) cnx.commit() diff --git a/myems-normalization/main.py b/myems-normalization/main.py index 59718de7..eace31c9 100644 --- a/myems-normalization/main.py +++ b/myems-normalization/main.py @@ -25,11 +25,11 @@ def main(): logger.addHandler(fh) # calculate energy consumption in hourly period - Process(target=meter.calculate_hourly, args=(logger,)).start() - Process(target=offlinemeter.calculate_hourly, args=(logger,)).start() + # Process(target=meter.calculate_hourly, args=(logger,)).start() + # Process(target=offlinemeter.calculate_hourly, args=(logger,)).start() Process(target=virtualmeter.calculate_hourly, args=(logger,)).start() # calculate virtual point value - Process(target=virtualpoint.calculate, args=(logger,)).start() + # Process(target=virtualpoint.calculate, args=(logger,)).start() if __name__ == '__main__': diff --git a/myems-normalization/virtualmeter.py b/myems-normalization/virtualmeter.py index 086bd61f..4215f743 100644 --- a/myems-normalization/virtualmeter.py +++ b/myems-normalization/virtualmeter.py @@ -36,10 +36,9 @@ def calculate_hourly(logger): virtual_meter_list = list() try: - cursor_system_db.execute(" SELECT m.id, m.name, e.equation, e.id as expression_id " - " FROM tbl_virtual_meters m, tbl_expressions e " - " WHERE m.id = e.virtual_meter_id " - " ORDER BY m.id ") + cursor_system_db.execute(" SELECT id, name, equation " + " FROM tbl_virtual_meters " + " ORDER BY id ") rows_virtual_meters = cursor_system_db.fetchall() if rows_virtual_meters is None or len(rows_virtual_meters) == 0: @@ -48,7 +47,7 @@ def calculate_hourly(logger): continue for row in rows_virtual_meters: - meta_result = {"id": row[0], "name": row[1], "equation": row[2], "expression_id": row[3]} + meta_result = {"id": row[0], "name": row[1], "equation": row[2]} virtual_meter_list.append(meta_result) except Exception as e: @@ -196,8 +195,8 @@ def worker(virtual_meter): " FROM tbl_meters m, tbl_variables v " " WHERE m.id = v.meter_id " " AND v.meter_type = 'meter' " - " AND v.expression_id = %s ", - (virtual_meter['expression_id'], )) + " AND v.virtual_meter_id = %s ", + (virtual_meter['id'], )) rows = cursor_system_db.fetchall() if rows is not None and len(rows) > 0: for row in rows: @@ -211,8 +210,8 @@ def worker(virtual_meter): " FROM tbl_virtual_meters m, tbl_variables v " " WHERE m.id = v.meter_id " " AND v.meter_type = 'virtual_meter' " - " AND v.expression_id = %s ", - (virtual_meter['expression_id'],)) + " AND v.virtual_meter_id = %s ", + (virtual_meter['id'],)) rows = cursor_system_db.fetchall() if rows is not None and len(rows) > 0: for row in rows: @@ -227,8 +226,8 @@ def worker(virtual_meter): " FROM tbl_offline_meters m, tbl_variables v " " WHERE m.id = v.meter_id " " AND v.meter_type = 'offline_meter' " - " AND v.expression_id = %s ", - (virtual_meter['expression_id'],)) + " AND v.virtual_meter_id = %s ", + (virtual_meter['id'],)) rows = cursor_system_db.fetchall() if rows is not None and len(rows) > 0: for row in rows: