20260506 Backup
|
After Width: | Height: | Size: 15 KiB |
@@ -63,7 +63,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"props": {
|
"props": {
|
||||||
"address": "172.30.47.17",
|
"address": "172.30.47.14",
|
||||||
"device": {},
|
"device": {},
|
||||||
"geolocation": {},
|
"geolocation": {},
|
||||||
"locale": "en-US",
|
"locale": "en-US",
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"custom": {},
|
"custom": {},
|
||||||
"params": {
|
"params": {
|
||||||
"dataType": "Int4",
|
"dataType": "String",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"max": 9999,
|
"max": 9999,
|
||||||
"min": -9999,
|
"min": -9999,
|
||||||
"name": "Int",
|
"name": "Int",
|
||||||
"options": [],
|
"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
|
"visible": true
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
|
After Width: | Height: | Size: 61 KiB |
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -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))
|
||||||
|
Before Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -7,41 +7,27 @@ def get_tagpaths(udt_type):
|
|||||||
for location in equipment.common.gtwys:
|
for location in equipment.common.gtwys:
|
||||||
results = system.tag.browse(location, fltr)
|
results = system.tag.browse(location, fltr)
|
||||||
for result in results:
|
for result in results:
|
||||||
paths_list.append(result['fullPath'])
|
paths_list.append(str(result['fullPath']))
|
||||||
return paths_list
|
return paths_list
|
||||||
|
|
||||||
def update_tagpaths(data_tagpath, udt_type):
|
def update_data(destination_tag, paths_list, sub_paths_map):
|
||||||
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):
|
|
||||||
'''
|
'''
|
||||||
config_tag_path: Path to the memory tag that contains the JSON with all the paths
|
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.
|
sub_paths_map: Dictionary that maps all the sub_paths with the tag to be used in the table.
|
||||||
'''
|
'''
|
||||||
logger = system.util.getLogger("DataTableUpdates")
|
logger = system.util.getLogger("DataTableUpdates")
|
||||||
try:
|
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()
|
col_names = sub_paths_map.keys()
|
||||||
|
|
||||||
# 2. Build the reading list
|
# 1. Build the reading list
|
||||||
read_paths = []
|
read_paths = []
|
||||||
for path in paths_list:
|
for path in paths_list:
|
||||||
for col in col_names:
|
for col in col_names:
|
||||||
read_paths.append(path + sub_paths_map[col])
|
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)
|
reads = system.tag.readBlocking(read_paths)
|
||||||
|
|
||||||
# 4. Process the result
|
# 3. Process the result
|
||||||
data = []
|
data = []
|
||||||
num_cols = len(col_names)
|
num_cols = len(col_names)
|
||||||
for device_idx, path in enumerate(paths_list):
|
for device_idx, path in enumerate(paths_list):
|
||||||
@@ -55,9 +41,9 @@ def update_data(data_tagpath, sub_paths_map):
|
|||||||
data.append(item)
|
data.append(item)
|
||||||
|
|
||||||
document = {'data':data}
|
document = {'data':data}
|
||||||
system.tag.writeBlocking(data_tagpath + '/Data', document)
|
system.tag.writeBlocking([destination_tag], document)
|
||||||
except Exception as e:
|
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):
|
def style_table(data_dic):
|
||||||
output = []
|
output = []
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
},
|
},
|
||||||
"params": {
|
"params": {
|
||||||
"selectedPens": [],
|
"selectedPens": [],
|
||||||
"tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_MOV51"
|
"tagPath": "[default]simulator/DOAS/DOAS1"
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
"custom.trendConfig": {
|
"custom.trendConfig": {
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Templates/Framework/Pen List",
|
"path": "Library/Framework/Pen List",
|
||||||
"useDefaultViewHeight": false,
|
"useDefaultViewHeight": false,
|
||||||
"useDefaultViewWidth": false
|
"useDefaultViewWidth": false
|
||||||
},
|
},
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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)
|
|
||||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 950 B |
@@ -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()
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 16 KiB |
@@ -248,7 +248,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Templates/Framework/Pen",
|
"path": "Library/Framework/Pen",
|
||||||
"style": {
|
"style": {
|
||||||
"marginLeft": "10px",
|
"marginLeft": "10px",
|
||||||
"marginTop": "5px",
|
"marginTop": "5px",
|
||||||
@@ -309,75 +309,45 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"meta": {
|
"meta": {
|
||||||
"name": "Map"
|
"name": "DateTimeInput"
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"height": 400,
|
"height": 32,
|
||||||
"width": 400,
|
"width": 170,
|
||||||
"x": 141.5,
|
"x": 220,
|
||||||
"y": 187.5
|
"y": 99
|
||||||
},
|
},
|
||||||
"props": {
|
"propConfig": {
|
||||||
"init": {
|
"custom.key": {
|
||||||
"center": {
|
"binding": {
|
||||||
"lat": 38.660867,
|
"config": {
|
||||||
"lng": -121.159728
|
"path": "this.props.value"
|
||||||
},
|
},
|
||||||
"zoom": 12
|
"transforms": [
|
||||||
},
|
|
||||||
"layers": {
|
|
||||||
"raster": {
|
|
||||||
"tile": [
|
|
||||||
{
|
{
|
||||||
"WMS": {
|
"expression": "datediff(now(), {value}, \"Hour\")",
|
||||||
"format": "image/jpeg",
|
"type": "expression"
|
||||||
"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": {}
|
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"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": {
|
"meta": {
|
||||||
|
After Width: | Height: | Size: 13 KiB |
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -339,7 +339,7 @@
|
|||||||
"label": "Lead Lag"
|
"label": "Lead Lag"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"label": "Skid details"
|
"label": "Chiller Package"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
@@ -551,6 +551,16 @@
|
|||||||
"expanded": false,
|
"expanded": false,
|
||||||
"items": [],
|
"items": [],
|
||||||
"label": "UPS"
|
"label": "UPS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"GoTo": "",
|
||||||
|
"target": "Pages/Dashboards/UPS",
|
||||||
|
"zoom": ""
|
||||||
|
},
|
||||||
|
"expanded": false,
|
||||||
|
"items": [],
|
||||||
|
"label": "Cellwatch"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"label": "Electrical"
|
"label": "Electrical"
|
||||||
@@ -565,6 +575,16 @@
|
|||||||
"items": [],
|
"items": [],
|
||||||
"label": "Fire System"
|
"label": "Fire System"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"GoTo": "FS",
|
||||||
|
"target": "Library/Layouts/Equipment_L3",
|
||||||
|
"zoom": ""
|
||||||
|
},
|
||||||
|
"expanded": false,
|
||||||
|
"items": [],
|
||||||
|
"label": "Plumbing"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"GoTo": "",
|
"GoTo": "",
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"custom": {},
|
"custom": {},
|
||||||
"params": {
|
"params": {
|
||||||
"deviceDataset": "[default]Device Datasets/VM/Info",
|
"deviceDataset": "[default]Device Datasets/DOAS/Meta",
|
||||||
"tagPath": "[PHXA2_IG_COMN]HE1138/PHXA2_UPS_BATT_VM_HS1"
|
"tagPath": "[default]simulator/DOAS/DOAS1"
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
"params.deviceDataset": {
|
"params.deviceDataset": {
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
},
|
},
|
||||||
"transforms": [
|
"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"
|
"type": "script"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Templates/Framework/Tag Info",
|
"path": "Library/Framework/Tag Meta",
|
||||||
"style": {
|
"style": {
|
||||||
"border": "1px solid var(--border)",
|
"border": "1px solid var(--border)",
|
||||||
"gap": "10px 0",
|
"gap": "10px 0",
|
||||||
|
Before Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 45 KiB |
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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)
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 748 B |
|
Before Width: | Height: | Size: 19 KiB |
@@ -63,7 +63,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"props": {
|
"props": {
|
||||||
"address": "172.30.47.17",
|
"address": "172.30.47.14",
|
||||||
"device": {},
|
"device": {},
|
||||||
"geolocation": {},
|
"geolocation": {},
|
||||||
"locale": "en-US",
|
"locale": "en-US",
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
"props.json"
|
"props.json"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "98fdd0962800ce601ab1f48547957af5bcea1c517732a2f99b9ee082de499f4f",
|
"lastModificationSignature": "3fe74b502c56ad14e24d1efd8f2459cd942a317583e98ac3718603fe26d7cf6d",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Aldo",
|
||||||
"timestamp": "2026-05-05T22:26:44Z"
|
"timestamp": "2026-05-06T22:03:29Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 16 KiB |
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "86e4e97ef521f778e9a87ccefdf7ad3d7de090b63967181a6d7ada9a8a20564d",
|
"lastModificationSignature": "906fd0084ea0e7506a05c39b77ddeee3976fc1dc1e745f8f6d38a90d311bb1e5",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-05T21:00:28Z"
|
"timestamp": "2026-05-06T18:10:22Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 13 KiB |
@@ -309,75 +309,45 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"meta": {
|
"meta": {
|
||||||
"name": "Map"
|
"name": "DateTimeInput"
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"height": 400,
|
"height": 32,
|
||||||
"width": 400,
|
"width": 170,
|
||||||
"x": 141.5,
|
"x": 220,
|
||||||
"y": 187.5
|
"y": 99
|
||||||
},
|
},
|
||||||
"props": {
|
"propConfig": {
|
||||||
"init": {
|
"custom.key": {
|
||||||
"center": {
|
"binding": {
|
||||||
"lat": 38.660867,
|
"config": {
|
||||||
"lng": -121.159728
|
"path": "this.props.value"
|
||||||
},
|
},
|
||||||
"zoom": 12
|
"transforms": [
|
||||||
},
|
|
||||||
"layers": {
|
|
||||||
"raster": {
|
|
||||||
"tile": [
|
|
||||||
{
|
{
|
||||||
"WMS": {
|
"expression": "datediff(now(), {value}, \"Hour\")",
|
||||||
"format": "image/jpeg",
|
"type": "expression"
|
||||||
"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": {}
|
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"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": {
|
"meta": {
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "78e8bd448405eaf84b9c2f186f6798c4ca620ed85fdec483434b05ea8f48463e",
|
"lastModificationSignature": "0b92a1bc639e55cf07832f5a443455c38d235c4f07f54c19094d414af35fd5da",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-04-16T13:38:08Z"
|
"timestamp": "2026-05-06T20:18:43Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@@ -248,7 +248,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Templates/Framework/Pen",
|
"path": "Library/Framework/Pen",
|
||||||
"style": {
|
"style": {
|
||||||
"marginLeft": "10px",
|
"marginLeft": "10px",
|
||||||
"marginTop": "5px",
|
"marginTop": "5px",
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "8fbac10ba880d8528caada026330f7f2e0d0be7301f3beea50811e52bd5e5c49",
|
"lastModificationSignature": "e299c66803f438afe471a4b8dd56fa1c6295b012dfb3b21b0cbe288781028728",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-04-22T23:25:46Z"
|
"timestamp": "2026-05-06T15:51:00Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 748 B After Width: | Height: | Size: 950 B |
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"custom": {},
|
"custom": {},
|
||||||
"params": {
|
"params": {
|
||||||
"dataType": "Int4",
|
"dataType": "String",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"max": 9999,
|
"max": 9999,
|
||||||
"min": -9999,
|
"min": -9999,
|
||||||
"name": "Int",
|
"name": "Int",
|
||||||
"options": [],
|
"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
|
"visible": true
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "7ed66bc2dc884267ddb31033b5967fc8da843f9e2c9fc23ec9f2f02e735afb53",
|
"lastModificationSignature": "ee62646db99d1a0454a8e106c4786639bd3df1976ed153cee846fa1bfef894f6",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-01T21:41:30Z"
|
"timestamp": "2026-05-06T14:13:22Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
@@ -339,7 +339,7 @@
|
|||||||
"label": "Lead Lag"
|
"label": "Lead Lag"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"label": "Skid details"
|
"label": "Chiller Package"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
@@ -551,6 +551,16 @@
|
|||||||
"expanded": false,
|
"expanded": false,
|
||||||
"items": [],
|
"items": [],
|
||||||
"label": "UPS"
|
"label": "UPS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"GoTo": "",
|
||||||
|
"target": "Pages/Dashboards/UPS",
|
||||||
|
"zoom": ""
|
||||||
|
},
|
||||||
|
"expanded": false,
|
||||||
|
"items": [],
|
||||||
|
"label": "Cellwatch"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"label": "Electrical"
|
"label": "Electrical"
|
||||||
@@ -565,6 +575,16 @@
|
|||||||
"items": [],
|
"items": [],
|
||||||
"label": "Fire System"
|
"label": "Fire System"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"GoTo": "FS",
|
||||||
|
"target": "Library/Layouts/Equipment_L3",
|
||||||
|
"zoom": ""
|
||||||
|
},
|
||||||
|
"expanded": false,
|
||||||
|
"items": [],
|
||||||
|
"label": "Plumbing"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"GoTo": "",
|
"GoTo": "",
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "695b95d114baf3a9a0b0eb2e75a1099b7908ae014998ce6d2bb0625f870b8009",
|
"lastModificationSignature": "5f8159ec4dbc5e404621372a6fe30a06ce4d595d629c50752b776033f4189c25",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-05T22:26:26Z"
|
"timestamp": "2026-05-06T18:30:14Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 61 KiB |
@@ -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": {
|
"params": {
|
||||||
"deviceDataset": "[default]Device Datasets/VM/Info",
|
"deviceDataset": "[default]Device Datasets/DOAS",
|
||||||
"tagPath": "[PHXA2_IG_COMN]HE1138/PHXA2_UPS_BATT_VM_HS1"
|
"tagPath": "[default]simulator/DOAS/DOAS1"
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
|
"custom.data": {
|
||||||
|
"binding": {
|
||||||
|
"config": {
|
||||||
|
"fallbackDelay": 2.5,
|
||||||
|
"mode": "indirect",
|
||||||
|
"references": {
|
||||||
|
"deviceDataset": "{view.params.deviceDataset}"
|
||||||
|
},
|
||||||
|
"tagPath": "{deviceDataset}/Info"
|
||||||
|
},
|
||||||
|
"type": "tag"
|
||||||
|
},
|
||||||
|
"persistent": true
|
||||||
|
},
|
||||||
"params.deviceDataset": {
|
"params.deviceDataset": {
|
||||||
"paramDirection": "input",
|
"paramDirection": "input",
|
||||||
"persistent": true
|
"persistent": true
|
||||||
@@ -28,12 +149,7 @@
|
|||||||
"props.instances": {
|
"props.instances": {
|
||||||
"binding": {
|
"binding": {
|
||||||
"config": {
|
"config": {
|
||||||
"fallbackDelay": 2.5,
|
"path": "view.custom.data"
|
||||||
"mode": "indirect",
|
|
||||||
"references": {
|
|
||||||
"deviceDataset": "{view.params.deviceDataset}"
|
|
||||||
},
|
|
||||||
"tagPath": "{deviceDataset}"
|
|
||||||
},
|
},
|
||||||
"transforms": [
|
"transforms": [
|
||||||
{
|
{
|
||||||
@@ -41,7 +157,7 @@
|
|||||||
"type": "script"
|
"type": "script"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "tag"
|
"type": "property"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -54,7 +170,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Templates/Framework/Tag Info",
|
"path": "Library/Framework/Tag Info",
|
||||||
"style": {
|
"style": {
|
||||||
"border": "1px solid var(--border)",
|
"border": "1px solid var(--border)",
|
||||||
"gap": "10px 0",
|
"gap": "10px 0",
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "eb37a28f2d2d96ae3f898da1f2f71afc5d66d7cb3d04d32825e7fd30c0f58cd4",
|
"lastModificationSignature": "27fb7e9b953fc10096981fe693b2934461e81830bf7d83c41135e2f26d6e6171",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-02T02:11:33Z"
|
"timestamp": "2026-05-06T18:12:57Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 12 KiB |
@@ -1,172 +1,11 @@
|
|||||||
{
|
{
|
||||||
"custom": {
|
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"params": {
|
"params": {
|
||||||
"auth": {
|
"deviceDataset": "[default]Device Datasets/DOAS/Meta",
|
||||||
"almAck": true,
|
"tagPath": "[default]simulator/DOAS/DOAS1"
|
||||||
"almShelve": true,
|
|
||||||
"config": true,
|
|
||||||
"control": true
|
|
||||||
},
|
|
||||||
"tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS"
|
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
"custom.allTags": {
|
"params.deviceDataset": {
|
||||||
"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": {
|
|
||||||
"paramDirection": "input",
|
"paramDirection": "input",
|
||||||
"persistent": true
|
"persistent": true
|
||||||
},
|
},
|
||||||
@@ -189,20 +28,20 @@
|
|||||||
"props.instances": {
|
"props.instances": {
|
||||||
"binding": {
|
"binding": {
|
||||||
"config": {
|
"config": {
|
||||||
"struct": {
|
"fallbackDelay": 2.5,
|
||||||
"allTags": "{view.custom.allTags}",
|
"mode": "indirect",
|
||||||
"auth": "{view.params.auth.config}",
|
"references": {
|
||||||
"tagPath": "{view.params.tagPath} + \"/Meta/\""
|
"deviceDataset": "{view.params.deviceDataset}"
|
||||||
},
|
},
|
||||||
"waitOnAll": true
|
"tagPath": "{deviceDataset}"
|
||||||
},
|
},
|
||||||
"transforms": [
|
"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": "script"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "expr-struct"
|
"type": "tag"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -215,7 +54,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Framework/Tag Config",
|
"path": "Library/Framework/Tag Meta",
|
||||||
"style": {
|
"style": {
|
||||||
"border": "1px solid var(--border)",
|
"border": "1px solid var(--border)",
|
||||||
"gap": "10px 0",
|
"gap": "10px 0",
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"thumbnail.png"
|
"thumbnail.png"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "cf296d8312679dc8017fab8f997596f5a6a6b75084b0626685cc1227dc8a0288",
|
"lastModificationSignature": "fcb289027b2b4e6421001df6f80bd770727c1f2dd8e4f0bb366f38479f83e0ba",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-02T02:11:33Z"
|
"timestamp": "2026-05-06T20:18:41Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 45 KiB |
@@ -4,7 +4,7 @@
|
|||||||
},
|
},
|
||||||
"params": {
|
"params": {
|
||||||
"selectedPens": [],
|
"selectedPens": [],
|
||||||
"tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_MOV51"
|
"tagPath": "[default]simulator/DOAS/DOAS1"
|
||||||
},
|
},
|
||||||
"propConfig": {
|
"propConfig": {
|
||||||
"custom.trendConfig": {
|
"custom.trendConfig": {
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
"loading": {
|
"loading": {
|
||||||
"order": "with-parent"
|
"order": "with-parent"
|
||||||
},
|
},
|
||||||
"path": "Library/Templates/Framework/Pen List",
|
"path": "Library/Framework/Pen List",
|
||||||
"useDefaultViewHeight": false,
|
"useDefaultViewHeight": false,
|
||||||
"useDefaultViewWidth": false
|
"useDefaultViewWidth": false
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
"code.py"
|
"code.py"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"lastModificationSignature": "7aaa342aed62e05b1ae23d5e1f4a38c7d2761efa9975387b2333b425fc7e8b5d",
|
"lastModificationSignature": "9207f96c78254178ffd2e20ecb0148aeabd4d28bd9d9c6bfcfbe74ddea5c19f4",
|
||||||
"hintScope": 7,
|
"hintScope": 7,
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-04T19:01:42Z"
|
"timestamp": "2026-05-06T15:34:13Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"hintScope": 7,
|
"hintScope": 7,
|
||||||
"lastModificationSignature": "9eb6928e909875055a3f065a11fb7ed868921a79e9ab374e1cdb08972e8e3989",
|
"lastModificationSignature": "4d05216451f0a5c78f437a57dca2b77a0dd44bac3bf68330f9ec9eddf1870d1c",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-04T19:22:01Z"
|
"timestamp": "2026-05-06T18:28:13Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"hintScope": 7,
|
"hintScope": 7,
|
||||||
"lastModificationSignature": "812333a27ba424a63a7bb2138a2c572e69a2111eeab00617fbf1e46cc411e0ab",
|
"lastModificationSignature": "9524e09faa9432b06a64f04f5c496a13667306e10bb25cfd6467bd6499991617",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-04T19:01:34Z"
|
"timestamp": "2026-05-06T15:34:13Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,41 +7,27 @@ def get_tagpaths(udt_type):
|
|||||||
for location in equipment.common.gtwys:
|
for location in equipment.common.gtwys:
|
||||||
results = system.tag.browse(location, fltr)
|
results = system.tag.browse(location, fltr)
|
||||||
for result in results:
|
for result in results:
|
||||||
paths_list.append(result['fullPath'])
|
paths_list.append(str(result['fullPath']))
|
||||||
return paths_list
|
return paths_list
|
||||||
|
|
||||||
def update_tagpaths(data_tagpath, udt_type):
|
def update_data(destination_tag, paths_list, sub_paths_map):
|
||||||
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):
|
|
||||||
'''
|
'''
|
||||||
config_tag_path: Path to the memory tag that contains the JSON with all the paths
|
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.
|
sub_paths_map: Dictionary that maps all the sub_paths with the tag to be used in the table.
|
||||||
'''
|
'''
|
||||||
logger = system.util.getLogger("DataTableUpdates")
|
logger = system.util.getLogger("DataTableUpdates")
|
||||||
try:
|
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()
|
col_names = sub_paths_map.keys()
|
||||||
|
|
||||||
# 2. Build the reading list
|
# 1. Build the reading list
|
||||||
read_paths = []
|
read_paths = []
|
||||||
for path in paths_list:
|
for path in paths_list:
|
||||||
for col in col_names:
|
for col in col_names:
|
||||||
read_paths.append(path + sub_paths_map[col])
|
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)
|
reads = system.tag.readBlocking(read_paths)
|
||||||
|
|
||||||
# 4. Process the result
|
# 3. Process the result
|
||||||
data = []
|
data = []
|
||||||
num_cols = len(col_names)
|
num_cols = len(col_names)
|
||||||
for device_idx, path in enumerate(paths_list):
|
for device_idx, path in enumerate(paths_list):
|
||||||
@@ -55,9 +41,9 @@ def update_data(data_tagpath, sub_paths_map):
|
|||||||
data.append(item)
|
data.append(item)
|
||||||
|
|
||||||
document = {'data':data}
|
document = {'data':data}
|
||||||
system.tag.writeBlocking(data_tagpath + '/Data', document)
|
system.tag.writeBlocking([destination_tag], document)
|
||||||
except Exception as e:
|
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):
|
def style_table(data_dic):
|
||||||
output = []
|
output = []
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"hintScope": 7,
|
"hintScope": 7,
|
||||||
"lastModificationSignature": "2082d9f4c43b85e21fc7c8f0a9a964f11dc246f364088a9deb0d76ed98dadb75",
|
"lastModificationSignature": "beb30a0bc3fb681e5b99ba6a9cc694b180cdbaf8cec1dc0b27051bfa606177d4",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-05T21:24:17Z"
|
"timestamp": "2026-05-06T14:36:03Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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()
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"hintScope": 2,
|
"hintScope": 2,
|
||||||
"lastModificationSignature": "1ec497a52d03da78106a8d54b326366024f8493359de30b553b79f53b020cbe1",
|
"lastModificationSignature": "0097918d2f4bab1398b03454a60b09269ca07be73d3a1a5a423da966db80b97b",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-04T21:52:00Z"
|
"timestamp": "2026-05-06T14:58:21Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -7,11 +7,11 @@
|
|||||||
"code.py"
|
"code.py"
|
||||||
],
|
],
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"hintScope": 7,
|
"hintScope": 2,
|
||||||
"lastModificationSignature": "4a0f454d3297d1bc7016bba11ad55ad961723511a09a6ccb501176f5fc0f93f1",
|
"lastModificationSignature": "64bdde7cf9cfd870b5c5a6914a8ca3f1c4acf71159d9a090d5f1b2a8a8846488",
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-05T15:04:19Z"
|
"timestamp": "2026-05-06T14:17:53Z"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,18 @@
|
|||||||
def handleTimerEvent():
|
def handleTimerEvent():
|
||||||
# DOAS update data
|
try:
|
||||||
tagpath = '[default]System/DataTables/DOAS'
|
paths = equipment.rtu.get_paths()
|
||||||
sub_paths = {
|
mapping = equipment.rtu.get_config()
|
||||||
'OAD':'/Outdoor Air Dewpoint',
|
dest = equipment.rtu.get_destination()
|
||||||
'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
|
equipment.common.update_data(dest, paths, mapping)
|
||||||
tagpath = '[default]System/DataTables/DOAS'
|
except Exception as e:
|
||||||
sub_paths = {
|
system.util.getLogger("Timer.RTU").error(str(e))
|
||||||
'OAD':'/Outdoor Air Dewpoint',
|
|
||||||
'BP':'/Building Pressure',
|
try:
|
||||||
'SAT':'/Supply Air Temperature',
|
paths = equipment.doas.get_paths()
|
||||||
'SAD':'/Supply Air Dewpoint',
|
mapping = equipment.doas.get_config()
|
||||||
'Alm':'/AlarmSummary/Highest Active Priority'
|
dest = equipment.doas.get_destination()
|
||||||
}
|
|
||||||
equipment.common.update_data(tagpath, sub_paths)
|
equipment.common.update_data(dest, paths, mapping)
|
||||||
|
except Exception as e:
|
||||||
|
system.util.getLogger("Timer.DOAS").error(str(e))
|
||||||
@@ -9,11 +9,11 @@
|
|||||||
"attributes": {
|
"attributes": {
|
||||||
"sharedThread": true,
|
"sharedThread": true,
|
||||||
"delay": 10000,
|
"delay": 10000,
|
||||||
"lastModificationSignature": "028eec92dcd85ffca7bd6b750275903fda44afd67a09c1f7bae0c92a7fe642ef",
|
"lastModificationSignature": "0ca653422be58e764c3c6ccc4fa2fbcae871cc7601e09047ea94b4a6d8a415fb",
|
||||||
"fixedDelay": true,
|
"fixedDelay": true,
|
||||||
"lastModification": {
|
"lastModification": {
|
||||||
"actor": "Emmanuel",
|
"actor": "Emmanuel",
|
||||||
"timestamp": "2026-05-05T21:41:30Z"
|
"timestamp": "2026-05-06T14:54:08Z"
|
||||||
},
|
},
|
||||||
"enabled": false
|
"enabled": false
|
||||||
}
|
}
|
||||||
|
|||||||