diff --git a/Gateways/FE/projects/.resources/01104dd5bc2f429ba6533311313b456af79aceb089ddbcadd215a9abefbc9a00 b/Gateways/FE/projects/.resources/01104dd5bc2f429ba6533311313b456af79aceb089ddbcadd215a9abefbc9a00 new file mode 100644 index 0000000..da4bd81 Binary files /dev/null and b/Gateways/FE/projects/.resources/01104dd5bc2f429ba6533311313b456af79aceb089ddbcadd215a9abefbc9a00 differ diff --git a/Gateways/FE/projects/.resources/e4c6715fa7ebad4335cf4cc810331ef6656a036c5e4c52ca33bf53f836f14520 b/Gateways/FE/projects/.resources/0a18eb9c6789c1597177a6c97cc936dcc91031aaa99aaf3a25e86a76630e7f2d similarity index 98% rename from Gateways/FE/projects/.resources/e4c6715fa7ebad4335cf4cc810331ef6656a036c5e4c52ca33bf53f836f14520 rename to Gateways/FE/projects/.resources/0a18eb9c6789c1597177a6c97cc936dcc91031aaa99aaf3a25e86a76630e7f2d index 7b61f82..0d9bbf1 100644 --- a/Gateways/FE/projects/.resources/e4c6715fa7ebad4335cf4cc810331ef6656a036c5e4c52ca33bf53f836f14520 +++ b/Gateways/FE/projects/.resources/0a18eb9c6789c1597177a6c97cc936dcc91031aaa99aaf3a25e86a76630e7f2d @@ -63,7 +63,7 @@ } }, "props": { - "address": "172.30.47.17", + "address": "172.30.47.14", "device": {}, "geolocation": {}, "locale": "en-US", diff --git a/Gateways/FE/projects/.resources/157080b9c30d6f3f8e5a27e9869afb5483c32765e19aacd1c39ec8befe787a93 b/Gateways/FE/projects/.resources/1487d0fba4ea7d13462601a421e4707a75b39f6ec1dbadf1980cbb0ca300baaa similarity index 97% rename from Gateways/FE/projects/.resources/157080b9c30d6f3f8e5a27e9869afb5483c32765e19aacd1c39ec8befe787a93 rename to Gateways/FE/projects/.resources/1487d0fba4ea7d13462601a421e4707a75b39f6ec1dbadf1980cbb0ca300baaa index 600df90..f410769 100644 --- a/Gateways/FE/projects/.resources/157080b9c30d6f3f8e5a27e9869afb5483c32765e19aacd1c39ec8befe787a93 +++ b/Gateways/FE/projects/.resources/1487d0fba4ea7d13462601a421e4707a75b39f6ec1dbadf1980cbb0ca300baaa @@ -1,13 +1,13 @@ { "custom": {}, "params": { - "dataType": "Int4", + "dataType": "String", "enabled": true, "max": 9999, "min": -9999, "name": "Int", "options": [], - "tagPath": "[Ignition_SATB1_IO2_default]Yard/SATB1_YARD_UT-P2-4/Vacuum Fault Interrupter2 Tripped/Config/Target", + "tagPath": "[default]simulator/DOAS/DOAS1/Power Domain", "visible": true }, "propConfig": { diff --git a/Gateways/FE/projects/.resources/1d4be51e9b37ab0badb997f614e022f1d9305b519bf34e6e5b92af1b8b7081ba b/Gateways/FE/projects/.resources/1d4be51e9b37ab0badb997f614e022f1d9305b519bf34e6e5b92af1b8b7081ba new file mode 100644 index 0000000..265315b Binary files /dev/null and b/Gateways/FE/projects/.resources/1d4be51e9b37ab0badb997f614e022f1d9305b519bf34e6e5b92af1b8b7081ba differ diff --git a/Gateways/FE/projects/.resources/2331c900913a12d20199aedeb301495536c97bb5d3420489c8c6f93abf91f569 b/Gateways/FE/projects/.resources/2331c900913a12d20199aedeb301495536c97bb5d3420489c8c6f93abf91f569 new file mode 100644 index 0000000..5a10e91 --- /dev/null +++ b/Gateways/FE/projects/.resources/2331c900913a12d20199aedeb301495536c97bb5d3420489c8c6f93abf91f569 @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/EF/Data" + +def get_type(): + return "Objects/Air/EF" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/3b3d39a5cecc609bd1283f3728f0dae9c53e6071915d03c8054afd8babc6b561 b/Gateways/FE/projects/.resources/3b3d39a5cecc609bd1283f3728f0dae9c53e6071915d03c8054afd8babc6b561 new file mode 100644 index 0000000..b464f06 --- /dev/null +++ b/Gateways/FE/projects/.resources/3b3d39a5cecc609bd1283f3728f0dae9c53e6071915d03c8054afd8babc6b561 @@ -0,0 +1,183 @@ +{ + "custom": {}, + "params": { + "dataType": "String", + "enabled": true, + "max": 9999, + "min": -9999, + "name": "Int", + "options": [], + "tagPath": "[default]simulator/DOAS/DOAS1/Meta/Power Domain", + "visible": true + }, + "propConfig": { + "params.dataType": { + "paramDirection": "input", + "persistent": true + }, + "params.enabled": { + "paramDirection": "input", + "persistent": true + }, + "params.max": { + "paramDirection": "input", + "persistent": true + }, + "params.min": { + "paramDirection": "input", + "persistent": true + }, + "params.name": { + "paramDirection": "input", + "persistent": true + }, + "params.options": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + }, + "params.visible": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 40, + "width": 399 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "Name", + "tooltip": { + "enabled": true + } + }, + "position": { + "basis": "220px" + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.OpcItemPath" + }, + "type": "tag" + } + }, + "props.text": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "code": "\tif value is None:\n\t\treturn \"Null value\"\n\treturn value.split(\u0027/\u0027)[-1]", + "type": "script" + } + ], + "type": "property" + } + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Input" + }, + "position": { + "basis": "170px" + }, + "propConfig": { + "props.params.enabled": { + "binding": { + "config": { + "path": "view.params.enabled" + }, + "type": "property" + } + }, + "props.params.max": { + "binding": { + "config": { + "path": "view.params.max" + }, + "type": "property" + } + }, + "props.params.min": { + "binding": { + "config": { + "path": "view.params.min" + }, + "type": "property" + } + }, + "props.params.options": { + "binding": { + "config": { + "path": "view.params.options" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "case({view.params.dataType},\r\n\u0027Boolean\u0027, \u0027Library/Framework/Input/Boolean\u0027,\r\n\u0027Int4\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027Int8\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027Float4\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027Float8\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027String\u0027, \u0027Library/Framework/Input/String\u0027,\r\n\u0027\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "style": { + "minWidth": "10px" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "propConfig": { + "meta.visible": { + "binding": { + "config": { + "path": "view.params.visible" + }, + "type": "property" + } + } + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible", + "padding": "0 10px" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/3d88041d10ad3bdac2f16b420eba4e6d496528c13fc402627224ac8e479bd399 b/Gateways/FE/projects/.resources/3d88041d10ad3bdac2f16b420eba4e6d496528c13fc402627224ac8e479bd399 new file mode 100644 index 0000000..9ebe40c Binary files /dev/null and b/Gateways/FE/projects/.resources/3d88041d10ad3bdac2f16b420eba4e6d496528c13fc402627224ac8e479bd399 differ diff --git a/Gateways/FE/projects/.resources/3e34f88e70496765e4fbd6b74ecd4c7029fc2f6adbf5b5d731efe979e46dfb26 b/Gateways/FE/projects/.resources/3e34f88e70496765e4fbd6b74ecd4c7029fc2f6adbf5b5d731efe979e46dfb26 new file mode 100644 index 0000000..308f037 --- /dev/null +++ b/Gateways/FE/projects/.resources/3e34f88e70496765e4fbd6b74ecd4c7029fc2f6adbf5b5d731efe979e46dfb26 @@ -0,0 +1,18 @@ +def handleTimerEvent(): + try: + paths = equipment.rtu.get_paths() + mapping = equipment.rtu.get_config() + dest = equipment.rtu.get_destination() + + equipment.common.update_data(dest, paths, mapping) + except Exception as e: + system.util.getLogger("Timer.RTU").error(str(e)) + + try: + paths = equipment.doas.get_paths() + mapping = equipment.doas.get_config() + dest = equipment.doas.get_destination() + + equipment.common.update_data(dest, paths, mapping) + except Exception as e: + system.util.getLogger("Timer.DOAS").error(str(e)) \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/3eb0d10495980a8b96e3371cb940220432c54e0867ff1fdd082472f39fa97269 b/Gateways/FE/projects/.resources/3eb0d10495980a8b96e3371cb940220432c54e0867ff1fdd082472f39fa97269 deleted file mode 100644 index ccdc813..0000000 Binary files a/Gateways/FE/projects/.resources/3eb0d10495980a8b96e3371cb940220432c54e0867ff1fdd082472f39fa97269 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/437b74b7b829fc88d214d23fa134ac6ebada397a480cb2d67b10c1b8af9b50ee b/Gateways/FE/projects/.resources/437b74b7b829fc88d214d23fa134ac6ebada397a480cb2d67b10c1b8af9b50ee new file mode 100644 index 0000000..234987d Binary files /dev/null and b/Gateways/FE/projects/.resources/437b74b7b829fc88d214d23fa134ac6ebada397a480cb2d67b10c1b8af9b50ee differ diff --git a/Gateways/FE/projects/.resources/441f78def116b66da54ca1d307cb7e43a8143725bbe07586bfa8d7943d9121a4 b/Gateways/FE/projects/.resources/441f78def116b66da54ca1d307cb7e43a8143725bbe07586bfa8d7943d9121a4 new file mode 100644 index 0000000..f4b1c0b --- /dev/null +++ b/Gateways/FE/projects/.resources/441f78def116b66da54ca1d307cb7e43a8143725bbe07586bfa8d7943d9121a4 @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/PLC/Data" + +def get_type(): + return "Objects/Air/PLC" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/4ec8eff6640b9f5adc6309801cbaa6e34eceadc2c55ab58a03503dd8c4e3e6cd b/Gateways/FE/projects/.resources/4ec8eff6640b9f5adc6309801cbaa6e34eceadc2c55ab58a03503dd8c4e3e6cd new file mode 100644 index 0000000..72e79c7 --- /dev/null +++ b/Gateways/FE/projects/.resources/4ec8eff6640b9f5adc6309801cbaa6e34eceadc2c55ab58a03503dd8c4e3e6cd @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/CRAH/Data" + +def get_type(): + return "Objects/Air/CRAH" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/5b145a997e925c41430e10ba413059d5870066a9e9943a49d7a721047f62a372 b/Gateways/FE/projects/.resources/5b145a997e925c41430e10ba413059d5870066a9e9943a49d7a721047f62a372 new file mode 100644 index 0000000..53ccf27 --- /dev/null +++ b/Gateways/FE/projects/.resources/5b145a997e925c41430e10ba413059d5870066a9e9943a49d7a721047f62a372 @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/DOAS/Data" + +def get_type(): + return "Objects/Air/DOAS" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/44a86ec8532f8ffae4e269a72b1f61be7908bb569b56f4882e7ba854199c7bab b/Gateways/FE/projects/.resources/5fa5958324b4b5350ab092c3efb28aea57845d4b615ca3b8780c3277e996f1db similarity index 63% rename from Gateways/FE/projects/.resources/44a86ec8532f8ffae4e269a72b1f61be7908bb569b56f4882e7ba854199c7bab rename to Gateways/FE/projects/.resources/5fa5958324b4b5350ab092c3efb28aea57845d4b615ca3b8780c3277e996f1db index 99346c3..ccd7fe8 100644 --- a/Gateways/FE/projects/.resources/44a86ec8532f8ffae4e269a72b1f61be7908bb569b56f4882e7ba854199c7bab +++ b/Gateways/FE/projects/.resources/5fa5958324b4b5350ab092c3efb28aea57845d4b615ca3b8780c3277e996f1db @@ -7,41 +7,27 @@ def get_tagpaths(udt_type): for location in equipment.common.gtwys: results = system.tag.browse(location, fltr) for result in results: - paths_list.append(result['fullPath']) + paths_list.append(str(result['fullPath'])) return paths_list - -def update_tagpaths(data_tagpath, udt_type): - raw_paths = get_tagpaths(udt_type) - paths = [str(p) for p in raw_paths] - document = {'paths':paths} - system.tag.writeBlocking(data_tagpath + '/Paths', document) -def update_data(data_tagpath, sub_paths_map): +def update_data(destination_tag, paths_list, sub_paths_map): ''' config_tag_path: Path to the memory tag that contains the JSON with all the paths sub_paths_map: Dictionary that maps all the sub_paths with the tag to be used in the table. ''' logger = system.util.getLogger("DataTableUpdates") try: - # 1. Read the list of tagpaths. - read_config = system.tag.readBlocking(data_tagpath + '/Paths') - raw_data = read_config[0].value - if not raw_data or 'paths' not in raw_data: - logger.warn("Empty configuration: %s" % data_tagpath) - return - # Order the keys to make sure the reading loop is consistent - paths_list = raw_data.get('paths', []) col_names = sub_paths_map.keys() - # 2. Build the reading list + # 1. Build the reading list read_paths = [] for path in paths_list: for col in col_names: read_paths.append(path + sub_paths_map[col]) - # 3. Read all the values in one execution + # 2. Read all the values in one execution reads = system.tag.readBlocking(read_paths) - # 4. Process the result + # 3. Process the result data = [] num_cols = len(col_names) for device_idx, path in enumerate(paths_list): @@ -55,9 +41,9 @@ def update_data(data_tagpath, sub_paths_map): data.append(item) document = {'data':data} - system.tag.writeBlocking(data_tagpath + '/Data', document) + system.tag.writeBlocking([destination_tag], document) except Exception as e: - logger.error("Fail to update data (%s): %s" % (data_tagpath, str(e))) + logger.error("Fail to update data (%s): %s" % (destination_tag, str(e))) def style_table(data_dic): output = [] diff --git a/Gateways/FE/projects/.resources/4bce5a0404ab0156697abf79fdc1e863ba48c15c7594d96206cecc2d34cf1c66 b/Gateways/FE/projects/.resources/5fc07320a3a4a8f794dcbb5751810ae4e5df7e9a1c5da3b1410511dda92708be similarity index 99% rename from Gateways/FE/projects/.resources/4bce5a0404ab0156697abf79fdc1e863ba48c15c7594d96206cecc2d34cf1c66 rename to Gateways/FE/projects/.resources/5fc07320a3a4a8f794dcbb5751810ae4e5df7e9a1c5da3b1410511dda92708be index dcad027..ee746d0 100644 --- a/Gateways/FE/projects/.resources/4bce5a0404ab0156697abf79fdc1e863ba48c15c7594d96206cecc2d34cf1c66 +++ b/Gateways/FE/projects/.resources/5fc07320a3a4a8f794dcbb5751810ae4e5df7e9a1c5da3b1410511dda92708be @@ -4,7 +4,7 @@ }, "params": { "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_MOV51" + "tagPath": "[default]simulator/DOAS/DOAS1" }, "propConfig": { "custom.trendConfig": { @@ -105,7 +105,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Templates/Framework/Pen List", + "path": "Library/Framework/Pen List", "useDefaultViewHeight": false, "useDefaultViewWidth": false }, diff --git a/Gateways/FE/projects/.resources/66cf7868b1a3e78d132ced3b395e35782850776d0e91e44e4e8f28f429507da9 b/Gateways/FE/projects/.resources/66cf7868b1a3e78d132ced3b395e35782850776d0e91e44e4e8f28f429507da9 new file mode 100644 index 0000000..2696e54 --- /dev/null +++ b/Gateways/FE/projects/.resources/66cf7868b1a3e78d132ced3b395e35782850776d0e91e44e4e8f28f429507da9 @@ -0,0 +1,22 @@ +def get_paths(): + return [ + '[default]simulator/RTU/RTU1', + '[default]simulator/RTU/RTU2', + '[default]simulator/RTU/RTU3', + '[default]simulator/RTU/RTU4', + '[default]simulator/RTU/RTU5' + ] +def get_config(): + return { + 'OAF':'/Outside Air Flow', + 'RPP':'/Return Plenum Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/RTU/Data" + +def get_type(): + return "Objects/Air/RTU" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/7d97e8ab11685f38cf74f67b45b6e5fb38c2409c31851994ddd9c1ddebd5f66a b/Gateways/FE/projects/.resources/7d97e8ab11685f38cf74f67b45b6e5fb38c2409c31851994ddd9c1ddebd5f66a deleted file mode 100644 index 2ed2d05..0000000 --- a/Gateways/FE/projects/.resources/7d97e8ab11685f38cf74f67b45b6e5fb38c2409c31851994ddd9c1ddebd5f66a +++ /dev/null @@ -1,22 +0,0 @@ -def handleTimerEvent(): - # DOAS update data - tagpath = '[default]System/DataTables/DOAS' - sub_paths = { - 'OAD':'/Outdoor Air Dewpoint', - 'BP':'/Building Pressure', - 'SAT':'/Supply Air Temperature', - 'SAD':'/Supply Air Dewpoint', - 'Alm':'/AlarmSummary/Highest Active Priority' - } - equipment.common.update_data(tagpath, sub_paths) - - # RTU update data - tagpath = '[default]System/DataTables/DOAS' - sub_paths = { - 'OAD':'/Outdoor Air Dewpoint', - 'BP':'/Building Pressure', - 'SAT':'/Supply Air Temperature', - 'SAD':'/Supply Air Dewpoint', - 'Alm':'/AlarmSummary/Highest Active Priority' - } - equipment.common.update_data(tagpath, sub_paths) \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/825a142473e85c7b441e9e8abfe31dec0b47f7e14fc5c961d19a2b911640d254 b/Gateways/FE/projects/.resources/825a142473e85c7b441e9e8abfe31dec0b47f7e14fc5c961d19a2b911640d254 new file mode 100644 index 0000000..1519c43 Binary files /dev/null and b/Gateways/FE/projects/.resources/825a142473e85c7b441e9e8abfe31dec0b47f7e14fc5c961d19a2b911640d254 differ diff --git a/Gateways/FE/projects/.resources/82eba6acd0b04721f09615d54fd1bb3e9be01cf7af3775ad6e1ee150a20472b7 b/Gateways/FE/projects/.resources/82eba6acd0b04721f09615d54fd1bb3e9be01cf7af3775ad6e1ee150a20472b7 new file mode 100644 index 0000000..17c1adf Binary files /dev/null and b/Gateways/FE/projects/.resources/82eba6acd0b04721f09615d54fd1bb3e9be01cf7af3775ad6e1ee150a20472b7 differ diff --git a/Gateways/FE/projects/.resources/8634b61404b4a516bae4392bfea62d8998eb0a0839772a973fbc5ffb233b0707 b/Gateways/FE/projects/.resources/8634b61404b4a516bae4392bfea62d8998eb0a0839772a973fbc5ffb233b0707 deleted file mode 100644 index 790b93d..0000000 --- a/Gateways/FE/projects/.resources/8634b61404b4a516bae4392bfea62d8998eb0a0839772a973fbc5ffb233b0707 +++ /dev/null @@ -1,21 +0,0 @@ -def toggleCommandPaths (resetTagPath, enableTagPath): - """ - This function receives two paths, resetTagPath set to False, then the enabletagPath is set to True - Params: - resetTagPath: string - enableTagPath: string - Returns: - none - """ - - def writeSeparate(): - def writeEnable(asyncReturn): - system.tag.writeBlocking([enableTagPath],[1]) - system.tag.writeAsync([resetTagPath],[0], writeEnable) - - - def writeAll(): - system.tag.writeBlocking([resetTagPath, enableTagPath], [0,1]) - - writeAll() -# writeSeparate() \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/87680afdf0843e5b3cbcfc3f8da55bd802bee79e552ce0c1f097bb4ecabda26b b/Gateways/FE/projects/.resources/87680afdf0843e5b3cbcfc3f8da55bd802bee79e552ce0c1f097bb4ecabda26b new file mode 100644 index 0000000..bb07303 --- /dev/null +++ b/Gateways/FE/projects/.resources/87680afdf0843e5b3cbcfc3f8da55bd802bee79e552ce0c1f097bb4ecabda26b @@ -0,0 +1,197 @@ +{ + "custom": { + "data": [ + { + "engUnit": "Int4", + "tagName": "Compressor A Signal" + }, + { + "engUnit": "Int4", + "tagName": "Compressor B Signal" + }, + { + "engUnit": "Int4", + "tagName": "Condenser A Signal" + }, + { + "engUnit": "Int4", + "tagName": "Condenser B Signal" + }, + { + "engUnit": "Float4", + "tagName": "Modulating Heat Position" + }, + { + "engUnit": "Float4", + "tagName": "Modulating Hot Gas Reheat Valve Position" + }, + { + "engUnit": "Float4", + "tagName": "Outside Air Humidity" + }, + { + "engUnit": "Float4", + "tagName": "Return Air Humidity" + }, + { + "engUnit": "Float4", + "tagName": "Building Pressure" + }, + { + "engUnit": "Float4", + "tagName": "Compressor Runtime" + }, + { + "engUnit": "Float4", + "tagName": "Fan Runtime" + }, + { + "engUnit": "Boolean", + "tagName": "Compressor A Enabled" + }, + { + "engUnit": "Boolean", + "tagName": "Compressor B1 Enabled" + }, + { + "engUnit": "Boolean", + "tagName": "Compressor B2 Enabled" + }, + { + "engUnit": "Boolean", + "tagName": "Economizer Enabled Status" + }, + { + "engUnit": "Boolean", + "tagName": "Exhaust Fan Status" + }, + { + "engUnit": "Boolean", + "tagName": "Heating Enabled Status" + }, + { + "engUnit": "Boolean", + "tagName": "Remote Forced Occupied Status" + }, + { + "engUnit": "Boolean", + "tagName": "Supply Fan Status" + }, + { + "engUnit": "Float4", + "tagName": "Discharge A Pressure" + }, + { + "engUnit": "Float4", + "tagName": "Discharge B Pressure" + }, + { + "engUnit": "Float4", + "tagName": "Outdoor Air Dewpoint" + }, + { + "engUnit": "Float4", + "tagName": "Outside Air Temperature" + }, + { + "engUnit": "Float4", + "tagName": "Return Air Temperature" + }, + { + "engUnit": "Float4", + "tagName": "Supply Air Dewpoint" + }, + { + "engUnit": "Float4", + "tagName": "Supply Air Temperature" + } + ] + }, + "params": { + "deviceDataset": "[default]Device Datasets/DOAS", + "tagPath": "[default]simulator/DOAS/DOAS1" + }, + "propConfig": { + "custom.data": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "deviceDataset": "{view.params.deviceDataset}" + }, + "tagPath": "{deviceDataset}/Info" + }, + "type": "tag" + }, + "persistent": true + }, + "params.deviceDataset": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "meta": { + "name": "FlexRepeater" + }, + "position": { + "basis": "100%" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.data" + }, + "transforms": [ + { + "code": "\treturn Global.DeviceDatasets.getTagInstances(deviceDataset\u003dvalue, tagPath\u003dself.view.params.tagPath)", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Info", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/88397df1f15a324a5782311e31cc9b8915726faebe4aac64c34a62a8505c16b3 b/Gateways/FE/projects/.resources/88397df1f15a324a5782311e31cc9b8915726faebe4aac64c34a62a8505c16b3 deleted file mode 100644 index 21a8231..0000000 Binary files a/Gateways/FE/projects/.resources/88397df1f15a324a5782311e31cc9b8915726faebe4aac64c34a62a8505c16b3 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/2cddddbc70090ef48693051985acba1464ad09ba8520a18727caa9fef81da81a b/Gateways/FE/projects/.resources/97e5ca2c81fe3f35648f3429f187d210a684448f01586750566c8149165eb599 similarity index 99% rename from Gateways/FE/projects/.resources/2cddddbc70090ef48693051985acba1464ad09ba8520a18727caa9fef81da81a rename to Gateways/FE/projects/.resources/97e5ca2c81fe3f35648f3429f187d210a684448f01586750566c8149165eb599 index ba8406f..0a0d978 100644 --- a/Gateways/FE/projects/.resources/2cddddbc70090ef48693051985acba1464ad09ba8520a18727caa9fef81da81a +++ b/Gateways/FE/projects/.resources/97e5ca2c81fe3f35648f3429f187d210a684448f01586750566c8149165eb599 @@ -248,7 +248,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Templates/Framework/Pen", + "path": "Library/Framework/Pen", "style": { "marginLeft": "10px", "marginTop": "5px", diff --git a/Gateways/FE/projects/.resources/8de16e890c5bd088e7ce8b639091b83b27298d6f457c5faed1d006c9e4921901 b/Gateways/FE/projects/.resources/9874f8b9e0724b751aa076446df24bcad30317355b92d9b5dd7cfcb9164a79c9 similarity index 74% rename from Gateways/FE/projects/.resources/8de16e890c5bd088e7ce8b639091b83b27298d6f457c5faed1d006c9e4921901 rename to Gateways/FE/projects/.resources/9874f8b9e0724b751aa076446df24bcad30317355b92d9b5dd7cfcb9164a79c9 index 087481e..3e02c5c 100644 --- a/Gateways/FE/projects/.resources/8de16e890c5bd088e7ce8b639091b83b27298d6f457c5faed1d006c9e4921901 +++ b/Gateways/FE/projects/.resources/9874f8b9e0724b751aa076446df24bcad30317355b92d9b5dd7cfcb9164a79c9 @@ -309,75 +309,45 @@ }, { "meta": { - "name": "Map" + "name": "DateTimeInput" }, "position": { - "height": 400, - "width": 400, - "x": 141.5, - "y": 187.5 + "height": 32, + "width": 170, + "x": 220, + "y": 99 }, - "props": { - "init": { - "center": { - "lat": 38.660867, - "lng": -121.159728 - }, - "zoom": 12 - }, - "layers": { - "raster": { - "tile": [ + "propConfig": { + "custom.key": { + "binding": { + "config": { + "path": "this.props.value" + }, + "transforms": [ { - "WMS": { - "format": "image/jpeg", - "layers": "", - "styles": "", - "transparent": false, - "uppercase": false, - "version": "1.1.1" - }, - "options": { - "attribution": "Map data \u0026copy; \u003ca href\u003d\u0027https://www.openstreetmap.org/\u0027\u003eOpenStreetMap\u003c/a\u003e contributors, \u003ca href\u003d\u0027https://creativecommons.org/licenses/by-sa/2.0/\u0027\u003eCC-BY-SA\u003c/a\u003e", - "crossOrigin": false, - "detectRetina": false, - "errorTileUrl": "", - "opacity": 1, - "subdomains": [ - "a", - "b", - "c" - ], - "tileSize": { - "height": 256, - "width": 256 - }, - "tms": false, - "update": { - "interval": 200, - "whenIdle": false, - "whenZooming": true - }, - "zIndex": 1, - "zoom": { - "max": 18, - "min": 0, - "native": { - "max": null, - "min": null - }, - "offset": 0, - "reverse": false - } - }, - "url": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", - "urlTemplateParams": {} + "expression": "datediff(now(), {value}, \"Hour\")", + "type": "expression" } - ] + ], + "type": "property" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[default]simulator/DOAS/DOAS1/Maintenance/Expiration Date" + }, + "type": "tag" } } }, - "type": "ia.display.map" + "props": { + "formattedValue": "Jul 17, 2026 12:00 AM" + }, + "type": "ia.input.date-time-input" } ], "meta": { diff --git a/Gateways/FE/projects/.resources/9acf1ae2f5382c104b1475cb6a8078ee11ede86e6ac3b0fa3e3aed89552a7219 b/Gateways/FE/projects/.resources/9acf1ae2f5382c104b1475cb6a8078ee11ede86e6ac3b0fa3e3aed89552a7219 new file mode 100644 index 0000000..a16f6a0 Binary files /dev/null and b/Gateways/FE/projects/.resources/9acf1ae2f5382c104b1475cb6a8078ee11ede86e6ac3b0fa3e3aed89552a7219 differ diff --git a/Gateways/FE/projects/.resources/a63e82fbdedfccb13d40b1e12fa69c23e04b6b02f73f466139599e6bbad7a2eb b/Gateways/FE/projects/.resources/a63e82fbdedfccb13d40b1e12fa69c23e04b6b02f73f466139599e6bbad7a2eb new file mode 100644 index 0000000..82892c8 --- /dev/null +++ b/Gateways/FE/projects/.resources/a63e82fbdedfccb13d40b1e12fa69c23e04b6b02f73f466139599e6bbad7a2eb @@ -0,0 +1,188 @@ +{ + "custom": { + "allTags": [ + { + "dataType": "Boolean", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Alarms Enabled", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Alarms Enabled" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Level", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Level" + }, + { + "dataType": "DateTime", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Maintenance Expiration", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Maintenance Expiration" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Power Domain", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Power Domain" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Program", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Program" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Room Number", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Room Number" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Site", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Site" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Source Gateway", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Source Gateway" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Zone", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Zone" + } + ] + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "meta": { + "name": "FlexRepeater" + }, + "position": { + "basis": "100%" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "struct": { + "allTags": "{view.custom.allTags}", + "auth": "{view.params.auth.config}", + "tagPath": "{view.params.tagPath} + \"/Meta/\"" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\t\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + tagName\n\t\ttag[\u0027enabled\u0027] \u003d value[\u0027auth\u0027]\n\t\toutput.append(tag)\n\t\t\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Meta", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/ac5d0d14e031a4f70315827c9b3a987c7814227521c6cba15d4d9aba6bc331a1 b/Gateways/FE/projects/.resources/ac5d0d14e031a4f70315827c9b3a987c7814227521c6cba15d4d9aba6bc331a1 new file mode 100644 index 0000000..d8e67db --- /dev/null +++ b/Gateways/FE/projects/.resources/ac5d0d14e031a4f70315827c9b3a987c7814227521c6cba15d4d9aba6bc331a1 @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/STU/Data" + +def get_type(): + return "Objects/Air/STU" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/26034633e1a31d64940d59b87f02e89924272de8862e55df859b9b3bad181df9 b/Gateways/FE/projects/.resources/ac655b792c00835614e5ded4b79fd542c10c9b24a4f47fc77f7485910bec97ac similarity index 98% rename from Gateways/FE/projects/.resources/26034633e1a31d64940d59b87f02e89924272de8862e55df859b9b3bad181df9 rename to Gateways/FE/projects/.resources/ac655b792c00835614e5ded4b79fd542c10c9b24a4f47fc77f7485910bec97ac index 213440c..ddfbf0e 100644 --- a/Gateways/FE/projects/.resources/26034633e1a31d64940d59b87f02e89924272de8862e55df859b9b3bad181df9 +++ b/Gateways/FE/projects/.resources/ac655b792c00835614e5ded4b79fd542c10c9b24a4f47fc77f7485910bec97ac @@ -339,7 +339,7 @@ "label": "Lead Lag" } ], - "label": "Skid details" + "label": "Chiller Package" }, { "data": { @@ -551,6 +551,16 @@ "expanded": false, "items": [], "label": "UPS" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Dashboards/UPS", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Cellwatch" } ], "label": "Electrical" @@ -565,6 +575,16 @@ "items": [], "label": "Fire System" }, + { + "data": { + "GoTo": "FS", + "target": "Library/Layouts/Equipment_L3", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Plumbing" + }, { "data": { "GoTo": "", diff --git a/Gateways/FE/projects/.resources/27a81bd351723905bc6a4e36b78e9cc0e4fa6ec391675a5bf39b5d85afcdc396 b/Gateways/FE/projects/.resources/b052c1651604c8660e77f9a467e94a405f4a6b335f720d738fec95f288a9178d similarity index 90% rename from Gateways/FE/projects/.resources/27a81bd351723905bc6a4e36b78e9cc0e4fa6ec391675a5bf39b5d85afcdc396 rename to Gateways/FE/projects/.resources/b052c1651604c8660e77f9a467e94a405f4a6b335f720d738fec95f288a9178d index 4425c96..d4d41af 100644 --- a/Gateways/FE/projects/.resources/27a81bd351723905bc6a4e36b78e9cc0e4fa6ec391675a5bf39b5d85afcdc396 +++ b/Gateways/FE/projects/.resources/b052c1651604c8660e77f9a467e94a405f4a6b335f720d738fec95f288a9178d @@ -1,8 +1,8 @@ { "custom": {}, "params": { - "deviceDataset": "[default]Device Datasets/VM/Info", - "tagPath": "[PHXA2_IG_COMN]HE1138/PHXA2_UPS_BATT_VM_HS1" + "deviceDataset": "[default]Device Datasets/DOAS/Meta", + "tagPath": "[default]simulator/DOAS/DOAS1" }, "propConfig": { "params.deviceDataset": { @@ -37,7 +37,7 @@ }, "transforms": [ { - "code": "\treturn Global.DeviceDatasets.getTagInstances(deviceDataset\u003dvalue, tagPath\u003dself.view.params.tagPath)", + "code": "\treturn Global.DeviceDatasets.getTagInstances(deviceDataset\u003dvalue, tagPath\u003dself.view.params.tagPath, folder\u003d \"/Meta\")", "type": "script" } ], @@ -54,7 +54,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Templates/Framework/Tag Info", + "path": "Library/Framework/Tag Meta", "style": { "border": "1px solid var(--border)", "gap": "10px 0", diff --git a/Gateways/FE/projects/.resources/b0db3deca94fa14d5922af8a4047bf10f9e591352b8f9fa084c0cf9806048b3b b/Gateways/FE/projects/.resources/b0db3deca94fa14d5922af8a4047bf10f9e591352b8f9fa084c0cf9806048b3b deleted file mode 100644 index 61a473f..0000000 Binary files a/Gateways/FE/projects/.resources/b0db3deca94fa14d5922af8a4047bf10f9e591352b8f9fa084c0cf9806048b3b and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b3a3647d950d88f89de687e86b4b9918686f5ac9dc2d42865c69e56ec59c59f7 b/Gateways/FE/projects/.resources/b3a3647d950d88f89de687e86b4b9918686f5ac9dc2d42865c69e56ec59c59f7 new file mode 100644 index 0000000..a98c606 Binary files /dev/null and b/Gateways/FE/projects/.resources/b3a3647d950d88f89de687e86b4b9918686f5ac9dc2d42865c69e56ec59c59f7 differ diff --git a/Gateways/FE/projects/.resources/bb9dccabb20cbc0ef54984aad32699098ad021f9fca8d7195eb000b15dfd4063 b/Gateways/FE/projects/.resources/bb9dccabb20cbc0ef54984aad32699098ad021f9fca8d7195eb000b15dfd4063 new file mode 100644 index 0000000..8bc83f2 Binary files /dev/null and b/Gateways/FE/projects/.resources/bb9dccabb20cbc0ef54984aad32699098ad021f9fca8d7195eb000b15dfd4063 differ diff --git a/Gateways/FE/projects/.resources/cbbb097a633793912f86842856336be60e132bbf00b351ed538ab04eb7d4cca9 b/Gateways/FE/projects/.resources/cbbb097a633793912f86842856336be60e132bbf00b351ed538ab04eb7d4cca9 new file mode 100644 index 0000000..e3f6d6e --- /dev/null +++ b/Gateways/FE/projects/.resources/cbbb097a633793912f86842856336be60e132bbf00b351ed538ab04eb7d4cca9 @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/FCU/Data" + +def get_type(): + return "Objects/Air/FCU" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/d418b6bfe84d88b5d444fed101298f2fe1e5a5ed67d5ceb18cbc6cefa16d2a0e b/Gateways/FE/projects/.resources/d418b6bfe84d88b5d444fed101298f2fe1e5a5ed67d5ceb18cbc6cefa16d2a0e new file mode 100644 index 0000000..0c97a6d --- /dev/null +++ b/Gateways/FE/projects/.resources/d418b6bfe84d88b5d444fed101298f2fe1e5a5ed67d5ceb18cbc6cefa16d2a0e @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/HUM/Data" + +def get_type(): + return "Objects/Air/HUM" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/e4d768f50e9025e51319ea13e6bc7276c26751e93da2934708af0d788a9479d2 b/Gateways/FE/projects/.resources/e4d768f50e9025e51319ea13e6bc7276c26751e93da2934708af0d788a9479d2 deleted file mode 100644 index 4d1f695..0000000 --- a/Gateways/FE/projects/.resources/e4d768f50e9025e51319ea13e6bc7276c26751e93da2934708af0d788a9479d2 +++ /dev/null @@ -1,50 +0,0 @@ -# Definition of tag location to store tagpaths and updated data. -tagpath = '[default]System/DataTables/DOAS' -udt_type = 'Objects/Air/DOAS' -sub_paths = { - 'OAD':'/Outdoor Air Dewpoint', - 'BP':'/Building Pressure', - 'SAT':'/Supply Air Temperature', - 'SAD':'/Supply Air Dewpoint' -} - -def update_data(config_tagpath, sub_paths_map): - ''' - config_tag_path: Path to the memory tag that contains the JSON with all the paths - sub_paths_map: Dictionary that maps all the sub_paths with the tag to be used in the table. - ''' - # 1. Read the list of tagpaths. - raw_data = system.tag.readBlocking(config_tagpath + '/Data')[0].value - paths_list = raw_data.get('paths', []) - if not paths_list: - return [] - # Order the keys to make sure the reading loop is consistent - col_names = sub_paths_map.keys() - - # 2. Build the reading list - read_paths = [] - for path in paths_list: - for col in col_names: - read_paths.append(path + sub_paths_map[col]) - # 3. Read all the values in one execution - reads = system.tag.readBlocking(read_paths) - - # 4. Process the result - output = [] - num_cols = len(col_names) - for device_idx, path in enumerate(paths_list): - item = {"device": path.split('/')[-1]} - for col_idx, col in enumerate(col_names): - global_idx = (device_idx * num_cols) + col_idx - tag_value = reads[global_idx].value - - - item[col] = tag_value if tag_value is not None else "0" - output.append(item) - return output - -def update_tagpaths(): - raw_paths = equipment.common.get_tagpaths(udt_type) - paths = [str(p) for p in raw_paths] - document = {'paths':paths} - system.tag.writeBlocking(tagpath + '/Data', document) \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/e599200bf9ed6795e4d4500d9f8fc5092b8d19594fcb0c31363c20a5d24d577f b/Gateways/FE/projects/.resources/e599200bf9ed6795e4d4500d9f8fc5092b8d19594fcb0c31363c20a5d24d577f new file mode 100644 index 0000000..01cde43 --- /dev/null +++ b/Gateways/FE/projects/.resources/e599200bf9ed6795e4d4500d9f8fc5092b8d19594fcb0c31363c20a5d24d577f @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/VAV/Data" + +def get_type(): + return "Objects/Air/VAV" + \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/eb9324654b56b84ef92fb6d4735f3d5012fa45d233230ffca98103d87009ad34 b/Gateways/FE/projects/.resources/eb9324654b56b84ef92fb6d4735f3d5012fa45d233230ffca98103d87009ad34 deleted file mode 100644 index 328edfe..0000000 Binary files a/Gateways/FE/projects/.resources/eb9324654b56b84ef92fb6d4735f3d5012fa45d233230ffca98103d87009ad34 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f725fec08d4c08b3d187f864b4806c47d1df1be8a53857257146aaaa6a2c66e8 b/Gateways/FE/projects/.resources/f725fec08d4c08b3d187f864b4806c47d1df1be8a53857257146aaaa6a2c66e8 deleted file mode 100644 index 17938b8..0000000 Binary files a/Gateways/FE/projects/.resources/f725fec08d4c08b3d187f864b4806c47d1df1be8a53857257146aaaa6a2c66e8 and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/props.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/props.json index 7b61f82..0d9bbf1 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/props.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/props.json @@ -63,7 +63,7 @@ } }, "props": { - "address": "172.30.47.17", + "address": "172.30.47.14", "device": {}, "geolocation": {}, "locale": "en-US", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json index 4fa96e9..4574dce 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json @@ -7,10 +7,10 @@ "props.json" ], "attributes": { - "lastModificationSignature": "98fdd0962800ce601ab1f48547957af5bcea1c517732a2f99b9ee082de499f4f", + "lastModificationSignature": "3fe74b502c56ad14e24d1efd8f2459cd942a317583e98ac3718603fe26d7cf6d", "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-05-05T22:26:44Z" + "actor": "Aldo", + "timestamp": "2026-05-06T22:03:29Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/resource.json new file mode 100644 index 0000000..caf1c16 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "bcf333bf089de0cfe214f374e124ca53543cb3ad85989c3af3d56b8c172a2701", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T18:12:40Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/thumbnail.png new file mode 100644 index 0000000..1519c43 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/view.json new file mode 100644 index 0000000..82892c8 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Meta/view.json @@ -0,0 +1,188 @@ +{ + "custom": { + "allTags": [ + { + "dataType": "Boolean", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Alarms Enabled", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Alarms Enabled" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Level", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Level" + }, + { + "dataType": "DateTime", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Maintenance Expiration", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Maintenance Expiration" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Power Domain", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Power Domain" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Program", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Program" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Room Number", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Room Number" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Site", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Site" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Source Gateway", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Source Gateway" + }, + { + "dataType": "String", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Zone", + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta/Zone" + } + ] + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[default]_types_/Objects/Air/DOAS/Meta" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "meta": { + "name": "FlexRepeater" + }, + "position": { + "basis": "100%" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "struct": { + "allTags": "{view.custom.allTags}", + "auth": "{view.params.auth.config}", + "tagPath": "{view.params.tagPath} + \"/Meta/\"" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\t\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + tagName\n\t\ttag[\u0027enabled\u0027] \u003d value[\u0027auth\u0027]\n\t\toutput.append(tag)\n\t\t\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Meta", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json index d721a3b..b7eb504 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "86e4e97ef521f778e9a87ccefdf7ad3d7de090b63967181a6d7ada9a8a20564d", + "lastModificationSignature": "906fd0084ea0e7506a05c39b77ddeee3976fc1dc1e745f8f6d38a90d311bb1e5", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-05T21:00:28Z" + "timestamp": "2026-05-06T18:10:22Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png index 61a473f..a16f6a0 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json index 087481e..3e02c5c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json @@ -309,75 +309,45 @@ }, { "meta": { - "name": "Map" + "name": "DateTimeInput" }, "position": { - "height": 400, - "width": 400, - "x": 141.5, - "y": 187.5 + "height": 32, + "width": 170, + "x": 220, + "y": 99 }, - "props": { - "init": { - "center": { - "lat": 38.660867, - "lng": -121.159728 - }, - "zoom": 12 - }, - "layers": { - "raster": { - "tile": [ + "propConfig": { + "custom.key": { + "binding": { + "config": { + "path": "this.props.value" + }, + "transforms": [ { - "WMS": { - "format": "image/jpeg", - "layers": "", - "styles": "", - "transparent": false, - "uppercase": false, - "version": "1.1.1" - }, - "options": { - "attribution": "Map data \u0026copy; \u003ca href\u003d\u0027https://www.openstreetmap.org/\u0027\u003eOpenStreetMap\u003c/a\u003e contributors, \u003ca href\u003d\u0027https://creativecommons.org/licenses/by-sa/2.0/\u0027\u003eCC-BY-SA\u003c/a\u003e", - "crossOrigin": false, - "detectRetina": false, - "errorTileUrl": "", - "opacity": 1, - "subdomains": [ - "a", - "b", - "c" - ], - "tileSize": { - "height": 256, - "width": 256 - }, - "tms": false, - "update": { - "interval": 200, - "whenIdle": false, - "whenZooming": true - }, - "zIndex": 1, - "zoom": { - "max": 18, - "min": 0, - "native": { - "max": null, - "min": null - }, - "offset": 0, - "reverse": false - } - }, - "url": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", - "urlTemplateParams": {} + "expression": "datediff(now(), {value}, \"Hour\")", + "type": "expression" } - ] + ], + "type": "property" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[default]simulator/DOAS/DOAS1/Maintenance/Expiration Date" + }, + "type": "tag" } } }, - "type": "ia.display.map" + "props": { + "formattedValue": "Jul 17, 2026 12:00 AM" + }, + "type": "ia.input.date-time-input" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/resource.json index 7f1f668..03b2177 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "78e8bd448405eaf84b9c2f186f6798c4ca620ed85fdec483434b05ea8f48463e", + "lastModificationSignature": "0b92a1bc639e55cf07832f5a443455c38d235c4f07f54c19094d414af35fd5da", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T13:38:08Z" + "timestamp": "2026-05-06T20:18:43Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/thumbnail.png index 21a8231..a98c606 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/view.json index ba8406f..0a0d978 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Pen List/view.json @@ -248,7 +248,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Templates/Framework/Pen", + "path": "Library/Framework/Pen", "style": { "marginLeft": "10px", "marginTop": "5px", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/resource.json index 0b91d6e..0a72bbb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "8fbac10ba880d8528caada026330f7f2e0d0be7301f3beea50811e52bd5e5c49", + "lastModificationSignature": "e299c66803f438afe471a4b8dd56fa1c6295b012dfb3b21b0cbe288781028728", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:25:46Z" + "timestamp": "2026-05-06T15:51:00Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/thumbnail.png index 328edfe..17c1adf 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/view.json index 600df90..f410769 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Config/view.json @@ -1,13 +1,13 @@ { "custom": {}, "params": { - "dataType": "Int4", + "dataType": "String", "enabled": true, "max": 9999, "min": -9999, "name": "Int", "options": [], - "tagPath": "[Ignition_SATB1_IO2_default]Yard/SATB1_YARD_UT-P2-4/Vacuum Fault Interrupter2 Tripped/Config/Target", + "tagPath": "[default]simulator/DOAS/DOAS1/Power Domain", "visible": true }, "propConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/resource.json new file mode 100644 index 0000000..a9187c1 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a5c7f9042e3782aa74cdb6a968887ff0a1c3f402bd20e29bf33f63aa23be8283", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T15:50:54Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/thumbnail.png new file mode 100644 index 0000000..9ebe40c Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/view.json new file mode 100644 index 0000000..b464f06 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag Meta/view.json @@ -0,0 +1,183 @@ +{ + "custom": {}, + "params": { + "dataType": "String", + "enabled": true, + "max": 9999, + "min": -9999, + "name": "Int", + "options": [], + "tagPath": "[default]simulator/DOAS/DOAS1/Meta/Power Domain", + "visible": true + }, + "propConfig": { + "params.dataType": { + "paramDirection": "input", + "persistent": true + }, + "params.enabled": { + "paramDirection": "input", + "persistent": true + }, + "params.max": { + "paramDirection": "input", + "persistent": true + }, + "params.min": { + "paramDirection": "input", + "persistent": true + }, + "params.name": { + "paramDirection": "input", + "persistent": true + }, + "params.options": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + }, + "params.visible": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 40, + "width": 399 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "Name", + "tooltip": { + "enabled": true + } + }, + "position": { + "basis": "220px" + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.OpcItemPath" + }, + "type": "tag" + } + }, + "props.text": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "code": "\tif value is None:\n\t\treturn \"Null value\"\n\treturn value.split(\u0027/\u0027)[-1]", + "type": "script" + } + ], + "type": "property" + } + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Input" + }, + "position": { + "basis": "170px" + }, + "propConfig": { + "props.params.enabled": { + "binding": { + "config": { + "path": "view.params.enabled" + }, + "type": "property" + } + }, + "props.params.max": { + "binding": { + "config": { + "path": "view.params.max" + }, + "type": "property" + } + }, + "props.params.min": { + "binding": { + "config": { + "path": "view.params.min" + }, + "type": "property" + } + }, + "props.params.options": { + "binding": { + "config": { + "path": "view.params.options" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "case({view.params.dataType},\r\n\u0027Boolean\u0027, \u0027Library/Framework/Input/Boolean\u0027,\r\n\u0027Int4\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027Int8\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027Float4\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027Float8\u0027, \u0027Library/Framework/Input/Int\u0027,\r\n\u0027String\u0027, \u0027Library/Framework/Input/String\u0027,\r\n\u0027\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "style": { + "minWidth": "10px" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "propConfig": { + "meta.visible": { + "binding": { + "config": { + "path": "view.params.visible" + }, + "type": "property" + } + } + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible", + "padding": "0 10px" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json index 97eea83..5999aa8 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "7ed66bc2dc884267ddb31033b5967fc8da843f9e2c9fc23ec9f2f02e735afb53", + "lastModificationSignature": "ee62646db99d1a0454a8e106c4786639bd3df1976ed153cee846fa1bfef894f6", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-01T21:41:30Z" + "timestamp": "2026-05-06T14:13:22Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png index ccdc813..da4bd81 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json index 213440c..ddfbf0e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json @@ -339,7 +339,7 @@ "label": "Lead Lag" } ], - "label": "Skid details" + "label": "Chiller Package" }, { "data": { @@ -551,6 +551,16 @@ "expanded": false, "items": [], "label": "UPS" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Dashboards/UPS", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Cellwatch" } ], "label": "Electrical" @@ -565,6 +575,16 @@ "items": [], "label": "Fire System" }, + { + "data": { + "GoTo": "FS", + "target": "Library/Layouts/Equipment_L3", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Plumbing" + }, { "data": { "GoTo": "", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/resource.json index 7f9d393..6ee50fd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "695b95d114baf3a9a0b0eb2e75a1099b7908ae014998ce6d2bb0625f870b8009", + "lastModificationSignature": "5f8159ec4dbc5e404621372a6fe30a06ce4d595d629c50752b776033f4189c25", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-05T22:26:26Z" + "timestamp": "2026-05-06T18:30:14Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/thumbnail.png index d7e6118..265315b 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/view.json index 4425c96..bb07303 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Info/view.json @@ -1,10 +1,131 @@ { - "custom": {}, + "custom": { + "data": [ + { + "engUnit": "Int4", + "tagName": "Compressor A Signal" + }, + { + "engUnit": "Int4", + "tagName": "Compressor B Signal" + }, + { + "engUnit": "Int4", + "tagName": "Condenser A Signal" + }, + { + "engUnit": "Int4", + "tagName": "Condenser B Signal" + }, + { + "engUnit": "Float4", + "tagName": "Modulating Heat Position" + }, + { + "engUnit": "Float4", + "tagName": "Modulating Hot Gas Reheat Valve Position" + }, + { + "engUnit": "Float4", + "tagName": "Outside Air Humidity" + }, + { + "engUnit": "Float4", + "tagName": "Return Air Humidity" + }, + { + "engUnit": "Float4", + "tagName": "Building Pressure" + }, + { + "engUnit": "Float4", + "tagName": "Compressor Runtime" + }, + { + "engUnit": "Float4", + "tagName": "Fan Runtime" + }, + { + "engUnit": "Boolean", + "tagName": "Compressor A Enabled" + }, + { + "engUnit": "Boolean", + "tagName": "Compressor B1 Enabled" + }, + { + "engUnit": "Boolean", + "tagName": "Compressor B2 Enabled" + }, + { + "engUnit": "Boolean", + "tagName": "Economizer Enabled Status" + }, + { + "engUnit": "Boolean", + "tagName": "Exhaust Fan Status" + }, + { + "engUnit": "Boolean", + "tagName": "Heating Enabled Status" + }, + { + "engUnit": "Boolean", + "tagName": "Remote Forced Occupied Status" + }, + { + "engUnit": "Boolean", + "tagName": "Supply Fan Status" + }, + { + "engUnit": "Float4", + "tagName": "Discharge A Pressure" + }, + { + "engUnit": "Float4", + "tagName": "Discharge B Pressure" + }, + { + "engUnit": "Float4", + "tagName": "Outdoor Air Dewpoint" + }, + { + "engUnit": "Float4", + "tagName": "Outside Air Temperature" + }, + { + "engUnit": "Float4", + "tagName": "Return Air Temperature" + }, + { + "engUnit": "Float4", + "tagName": "Supply Air Dewpoint" + }, + { + "engUnit": "Float4", + "tagName": "Supply Air Temperature" + } + ] + }, "params": { - "deviceDataset": "[default]Device Datasets/VM/Info", - "tagPath": "[PHXA2_IG_COMN]HE1138/PHXA2_UPS_BATT_VM_HS1" + "deviceDataset": "[default]Device Datasets/DOAS", + "tagPath": "[default]simulator/DOAS/DOAS1" }, "propConfig": { + "custom.data": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "deviceDataset": "{view.params.deviceDataset}" + }, + "tagPath": "{deviceDataset}/Info" + }, + "type": "tag" + }, + "persistent": true + }, "params.deviceDataset": { "paramDirection": "input", "persistent": true @@ -28,12 +149,7 @@ "props.instances": { "binding": { "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "deviceDataset": "{view.params.deviceDataset}" - }, - "tagPath": "{deviceDataset}" + "path": "view.custom.data" }, "transforms": [ { @@ -41,7 +157,7 @@ "type": "script" } ], - "type": "tag" + "type": "property" } } }, @@ -54,7 +170,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Templates/Framework/Tag Info", + "path": "Library/Framework/Tag Info", "style": { "border": "1px solid var(--border)", "gap": "10px 0", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json index 6235be9..574a3ae 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "eb37a28f2d2d96ae3f898da1f2f71afc5d66d7cb3d04d32825e7fd30c0f58cd4", + "lastModificationSignature": "27fb7e9b953fc10096981fe693b2934461e81830bf7d83c41135e2f26d6e6171", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-02T02:11:33Z" + "timestamp": "2026-05-06T18:12:57Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/thumbnail.png index 3545640..234987d 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/view.json index 9bfb166..d4d41af 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/view.json @@ -1,172 +1,11 @@ { - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Tooltip" - } - ] - }, + "custom": {}, "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" + "deviceDataset": "[default]Device Datasets/DOAS/Meta", + "tagPath": "[default]simulator/DOAS/DOAS1" }, "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { + "params.deviceDataset": { "paramDirection": "input", "persistent": true }, @@ -189,20 +28,20 @@ "props.instances": { "binding": { "config": { - "struct": { - "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", - "tagPath": "{view.params.tagPath} + \"/Meta/\"" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "deviceDataset": "{view.params.deviceDataset}" }, - "waitOnAll": true + "tagPath": "{deviceDataset}" }, "transforms": [ { - "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\t\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + tagName\n\t\ttag[\u0027enabled\u0027] \u003d value[\u0027auth\u0027]\n\t\toutput.append(tag)\n\t\t\n\treturn output", + "code": "\treturn Global.DeviceDatasets.getTagInstances(deviceDataset\u003dvalue, tagPath\u003dself.view.params.tagPath, folder\u003d \"/Meta\")", "type": "script" } ], - "type": "expr-struct" + "type": "tag" } } }, @@ -215,7 +54,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Framework/Tag Config", + "path": "Library/Framework/Tag Meta", "style": { "border": "1px solid var(--border)", "gap": "10px 0", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json index 9d78cf6..cd63e96 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "cf296d8312679dc8017fab8f997596f5a6a6b75084b0626685cc1227dc8a0288", + "lastModificationSignature": "fcb289027b2b4e6421001df6f80bd770727c1f2dd8e4f0bb366f38479f83e0ba", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-02T02:11:33Z" + "timestamp": "2026-05-06T20:18:41Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/thumbnail.png index 17938b8..8bc83f2 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/view.json index dcad027..ee746d0 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/view.json @@ -4,7 +4,7 @@ }, "params": { "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_MOV51" + "tagPath": "[default]simulator/DOAS/DOAS1" }, "propConfig": { "custom.trendConfig": { @@ -105,7 +105,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Templates/Framework/Pen List", + "path": "Library/Framework/Pen List", "useDefaultViewHeight": false, "useDefaultViewWidth": false }, diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/AlmTables/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/AlmTables/resource.json index 23a3f0a..38f2b26 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/AlmTables/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/AlmTables/resource.json @@ -7,11 +7,11 @@ "code.py" ], "attributes": { - "lastModificationSignature": "7aaa342aed62e05b1ae23d5e1f4a38c7d2761efa9975387b2333b425fc7e8b5d", + "lastModificationSignature": "9207f96c78254178ffd2e20ecb0148aeabd4d28bd9d9c6bfcfbe74ddea5c19f4", "hintScope": 7, "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-04T19:01:42Z" + "timestamp": "2026-05-06T15:34:13Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/DeviceDatasets/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/DeviceDatasets/resource.json index 9b0bd69..0b64f1c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/DeviceDatasets/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/DeviceDatasets/resource.json @@ -8,10 +8,10 @@ ], "attributes": { "hintScope": 7, - "lastModificationSignature": "9eb6928e909875055a3f065a11fb7ed868921a79e9ab374e1cdb08972e8e3989", + "lastModificationSignature": "4d05216451f0a5c78f437a57dca2b77a0dd44bac3bf68330f9ec9eddf1870d1c", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-04T19:22:01Z" + "timestamp": "2026-05-06T18:28:13Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/UpdateDeviceTable/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/UpdateDeviceTable/resource.json index 01f5016..6fec79a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/UpdateDeviceTable/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/Global/UpdateDeviceTable/resource.json @@ -8,10 +8,10 @@ ], "attributes": { "hintScope": 7, - "lastModificationSignature": "812333a27ba424a63a7bb2138a2c572e69a2111eeab00617fbf1e46cc411e0ab", + "lastModificationSignature": "9524e09faa9432b06a64f04f5c496a13667306e10bb25cfd6467bd6499991617", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-04T19:01:34Z" + "timestamp": "2026-05-06T15:34:13Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/code.py index 99346c3..ccd7fe8 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/code.py +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/code.py @@ -7,41 +7,27 @@ def get_tagpaths(udt_type): for location in equipment.common.gtwys: results = system.tag.browse(location, fltr) for result in results: - paths_list.append(result['fullPath']) + paths_list.append(str(result['fullPath'])) return paths_list - -def update_tagpaths(data_tagpath, udt_type): - raw_paths = get_tagpaths(udt_type) - paths = [str(p) for p in raw_paths] - document = {'paths':paths} - system.tag.writeBlocking(data_tagpath + '/Paths', document) -def update_data(data_tagpath, sub_paths_map): +def update_data(destination_tag, paths_list, sub_paths_map): ''' config_tag_path: Path to the memory tag that contains the JSON with all the paths sub_paths_map: Dictionary that maps all the sub_paths with the tag to be used in the table. ''' logger = system.util.getLogger("DataTableUpdates") try: - # 1. Read the list of tagpaths. - read_config = system.tag.readBlocking(data_tagpath + '/Paths') - raw_data = read_config[0].value - if not raw_data or 'paths' not in raw_data: - logger.warn("Empty configuration: %s" % data_tagpath) - return - # Order the keys to make sure the reading loop is consistent - paths_list = raw_data.get('paths', []) col_names = sub_paths_map.keys() - # 2. Build the reading list + # 1. Build the reading list read_paths = [] for path in paths_list: for col in col_names: read_paths.append(path + sub_paths_map[col]) - # 3. Read all the values in one execution + # 2. Read all the values in one execution reads = system.tag.readBlocking(read_paths) - # 4. Process the result + # 3. Process the result data = [] num_cols = len(col_names) for device_idx, path in enumerate(paths_list): @@ -55,9 +41,9 @@ def update_data(data_tagpath, sub_paths_map): data.append(item) document = {'data':data} - system.tag.writeBlocking(data_tagpath + '/Data', document) + system.tag.writeBlocking([destination_tag], document) except Exception as e: - logger.error("Fail to update data (%s): %s" % (data_tagpath, str(e))) + logger.error("Fail to update data (%s): %s" % (destination_tag, str(e))) def style_table(data_dic): output = [] diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/resource.json index b422fc5..08a46f3 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/common/resource.json @@ -8,10 +8,10 @@ ], "attributes": { "hintScope": 7, - "lastModificationSignature": "2082d9f4c43b85e21fc7c8f0a9a964f11dc246f364088a9deb0d76ed98dadb75", + "lastModificationSignature": "beb30a0bc3fb681e5b99ba6a9cc694b180cdbaf8cec1dc0b27051bfa606177d4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-05T21:24:17Z" + "timestamp": "2026-05-06T14:36:03Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/control/common/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/control/common/code.py deleted file mode 100644 index 790b93d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/control/common/code.py +++ /dev/null @@ -1,21 +0,0 @@ -def toggleCommandPaths (resetTagPath, enableTagPath): - """ - This function receives two paths, resetTagPath set to False, then the enabletagPath is set to True - Params: - resetTagPath: string - enableTagPath: string - Returns: - none - """ - - def writeSeparate(): - def writeEnable(asyncReturn): - system.tag.writeBlocking([enableTagPath],[1]) - system.tag.writeAsync([resetTagPath],[0], writeEnable) - - - def writeAll(): - system.tag.writeBlocking([resetTagPath, enableTagPath], [0,1]) - - writeAll() -# writeSeparate() \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/crah/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/crah/code.py new file mode 100644 index 0000000..72e79c7 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/crah/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/CRAH/Data" + +def get_type(): + return "Objects/Air/CRAH" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/control/common/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/crah/resource.json similarity index 59% rename from Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/control/common/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/crah/resource.json index 29756eb..caf05a3 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/control/common/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/crah/resource.json @@ -8,10 +8,10 @@ ], "attributes": { "hintScope": 2, - "lastModificationSignature": "1ec497a52d03da78106a8d54b326366024f8493359de30b553b79f53b020cbe1", + "lastModificationSignature": "0097918d2f4bab1398b03454a60b09269ca07be73d3a1a5a423da966db80b97b", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-04T21:52:00Z" + "timestamp": "2026-05-06T14:58:21Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/data/DOAS/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/data/DOAS/code.py deleted file mode 100644 index 4d1f695..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/data/DOAS/code.py +++ /dev/null @@ -1,50 +0,0 @@ -# Definition of tag location to store tagpaths and updated data. -tagpath = '[default]System/DataTables/DOAS' -udt_type = 'Objects/Air/DOAS' -sub_paths = { - 'OAD':'/Outdoor Air Dewpoint', - 'BP':'/Building Pressure', - 'SAT':'/Supply Air Temperature', - 'SAD':'/Supply Air Dewpoint' -} - -def update_data(config_tagpath, sub_paths_map): - ''' - config_tag_path: Path to the memory tag that contains the JSON with all the paths - sub_paths_map: Dictionary that maps all the sub_paths with the tag to be used in the table. - ''' - # 1. Read the list of tagpaths. - raw_data = system.tag.readBlocking(config_tagpath + '/Data')[0].value - paths_list = raw_data.get('paths', []) - if not paths_list: - return [] - # Order the keys to make sure the reading loop is consistent - col_names = sub_paths_map.keys() - - # 2. Build the reading list - read_paths = [] - for path in paths_list: - for col in col_names: - read_paths.append(path + sub_paths_map[col]) - # 3. Read all the values in one execution - reads = system.tag.readBlocking(read_paths) - - # 4. Process the result - output = [] - num_cols = len(col_names) - for device_idx, path in enumerate(paths_list): - item = {"device": path.split('/')[-1]} - for col_idx, col in enumerate(col_names): - global_idx = (device_idx * num_cols) + col_idx - tag_value = reads[global_idx].value - - - item[col] = tag_value if tag_value is not None else "0" - output.append(item) - return output - -def update_tagpaths(): - raw_paths = equipment.common.get_tagpaths(udt_type) - paths = [str(p) for p in raw_paths] - document = {'paths':paths} - system.tag.writeBlocking(tagpath + '/Data', document) \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/doas/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/doas/code.py new file mode 100644 index 0000000..53ccf27 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/doas/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/DOAS/Data" + +def get_type(): + return "Objects/Air/DOAS" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/data/DOAS/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/doas/resource.json similarity index 54% rename from Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/data/DOAS/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/doas/resource.json index f367354..f864972 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/data/DOAS/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/doas/resource.json @@ -7,11 +7,11 @@ "code.py" ], "attributes": { - "hintScope": 7, - "lastModificationSignature": "4a0f454d3297d1bc7016bba11ad55ad961723511a09a6ccb501176f5fc0f93f1", + "hintScope": 2, + "lastModificationSignature": "64bdde7cf9cfd870b5c5a6914a8ca3f1c4acf71159d9a090d5f1b2a8a8846488", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-05T15:04:19Z" + "timestamp": "2026-05-06T14:17:53Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/ef/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/ef/code.py new file mode 100644 index 0000000..5a10e91 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/ef/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/EF/Data" + +def get_type(): + return "Objects/Air/EF" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/ef/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/ef/resource.json new file mode 100644 index 0000000..b6a4496 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/ef/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "0b325694dc20014d34549eae26e46d9f4cea742e35a85d68252483690307c402", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:58:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/fcu/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/fcu/code.py new file mode 100644 index 0000000..e3f6d6e --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/fcu/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/FCU/Data" + +def get_type(): + return "Objects/Air/FCU" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/fcu/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/fcu/resource.json new file mode 100644 index 0000000..9f8aba7 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/fcu/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "8358064220a01e51a0e8906ebf27f16e992a2bf0da777b8a0eb5d23d33ccd834", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:58:48Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/hum/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/hum/code.py new file mode 100644 index 0000000..0c97a6d --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/hum/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/HUM/Data" + +def get_type(): + return "Objects/Air/HUM" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/hum/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/hum/resource.json new file mode 100644 index 0000000..73a61e7 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/hum/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "43e7d78e7cc2a3686b35084e0a1e24c374a1399147b533d10b47e2cb5b3c1c24", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:59:05Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/plc/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/plc/code.py new file mode 100644 index 0000000..f4b1c0b --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/plc/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/PLC/Data" + +def get_type(): + return "Objects/Air/PLC" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/plc/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/plc/resource.json new file mode 100644 index 0000000..f06ec5d --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/plc/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "0e9e612c8da3531636429681877effe7cc04d645484bf0ce74ab6dce57954bdd", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:59:15Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/rtu/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/rtu/code.py new file mode 100644 index 0000000..2696e54 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/rtu/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + '[default]simulator/RTU/RTU1', + '[default]simulator/RTU/RTU2', + '[default]simulator/RTU/RTU3', + '[default]simulator/RTU/RTU4', + '[default]simulator/RTU/RTU5' + ] +def get_config(): + return { + 'OAF':'/Outside Air Flow', + 'RPP':'/Return Plenum Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/RTU/Data" + +def get_type(): + return "Objects/Air/RTU" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/rtu/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/rtu/resource.json new file mode 100644 index 0000000..3abbf4a --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/rtu/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "c58718d36c7eadd81ce21a00f8cf628a28d14d77ddb340739b61f133f0c953c5", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:23:30Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/stu/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/stu/code.py new file mode 100644 index 0000000..d8e67db --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/stu/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/STU/Data" + +def get_type(): + return "Objects/Air/STU" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/stu/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/stu/resource.json new file mode 100644 index 0000000..1b9b195 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/stu/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "c5e677e9640c6b8faaaceb89cab03b7ea161e76a455eb0fd161f60d470e814e5", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:59:28Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/vav/code.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/vav/code.py new file mode 100644 index 0000000..01cde43 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/vav/code.py @@ -0,0 +1,22 @@ +def get_paths(): + return [ + "[default]simulator/DOAS/DOAS1", + "[default]simulator/DOAS/DOAS2", + "[default]simulator/DOAS/DOAS3", + "[default]simulator/DOAS/DOAS4", + "[default]simulator/DOAS/DOAS5 + ] +def get_config(): + return { + 'OAD':'/Outdoor Air Dewpoint', + 'BP':'/Building Pressure', + 'SAT':'/Supply Air Temperature', + 'SAD':'/Supply Air Dewpoint', + 'Alm':'/AlarmSummary/Highest Active Priority' + } +def get_destination(): + return "[default]System/DataTables/VAV/Data" + +def get_type(): + return "Objects/Air/VAV" + \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/vav/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/vav/resource.json new file mode 100644 index 0000000..58f5acc --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/script-python/equipment/vav/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "A", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "code.py" + ], + "attributes": { + "hintScope": 2, + "lastModificationSignature": "a7dc8e9b98a74e8e9e466f441c266211d17c621ae73fd7c9385949b7814957d2", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-06T14:59:38Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/handleTimerEvent.py b/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/handleTimerEvent.py index 2ed2d05..308f037 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/handleTimerEvent.py +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/handleTimerEvent.py @@ -1,22 +1,18 @@ def handleTimerEvent(): - # DOAS update data - tagpath = '[default]System/DataTables/DOAS' - sub_paths = { - 'OAD':'/Outdoor Air Dewpoint', - 'BP':'/Building Pressure', - 'SAT':'/Supply Air Temperature', - 'SAD':'/Supply Air Dewpoint', - 'Alm':'/AlarmSummary/Highest Active Priority' - } - equipment.common.update_data(tagpath, sub_paths) + try: + paths = equipment.rtu.get_paths() + mapping = equipment.rtu.get_config() + dest = equipment.rtu.get_destination() + + equipment.common.update_data(dest, paths, mapping) + except Exception as e: + system.util.getLogger("Timer.RTU").error(str(e)) - # RTU update data - tagpath = '[default]System/DataTables/DOAS' - sub_paths = { - 'OAD':'/Outdoor Air Dewpoint', - 'BP':'/Building Pressure', - 'SAT':'/Supply Air Temperature', - 'SAD':'/Supply Air Dewpoint', - 'Alm':'/AlarmSummary/Highest Active Priority' - } - equipment.common.update_data(tagpath, sub_paths) \ No newline at end of file + try: + paths = equipment.doas.get_paths() + mapping = equipment.doas.get_config() + dest = equipment.doas.get_destination() + + equipment.common.update_data(dest, paths, mapping) + except Exception as e: + system.util.getLogger("Timer.DOAS").error(str(e)) \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/resource.json b/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/resource.json index 8cc0599..ce87e73 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/ignition/timer/UpdateData/resource.json @@ -9,11 +9,11 @@ "attributes": { "sharedThread": true, "delay": 10000, - "lastModificationSignature": "028eec92dcd85ffca7bd6b750275903fda44afd67a09c1f7bae0c92a7fe642ef", + "lastModificationSignature": "0ca653422be58e764c3c6ccc4fa2fbcae871cc7601e09047ea94b4a6d8a415fb", "fixedDelay": true, "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-05-05T21:41:30Z" + "timestamp": "2026-05-06T14:54:08Z" }, "enabled": false }