diff --git a/Gateways/FE/projects/.resources/00ca1091c1f5a399ed390608e9b9828538b98b1785d03e1aa8c36e721c84fff0 b/Gateways/FE/projects/.resources/00ca1091c1f5a399ed390608e9b9828538b98b1785d03e1aa8c36e721c84fff0 deleted file mode 100644 index e6f9cd0..0000000 Binary files a/Gateways/FE/projects/.resources/00ca1091c1f5a399ed390608e9b9828538b98b1785d03e1aa8c36e721c84fff0 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/0169ad8fabc1b961f722d4e76b243ba0b316d7aa7a91ce9dc1d0e9ec47e29e55 b/Gateways/FE/projects/.resources/0169ad8fabc1b961f722d4e76b243ba0b316d7aa7a91ce9dc1d0e9ec47e29e55 deleted file mode 100644 index f37d202..0000000 --- a/Gateways/FE/projects/.resources/0169ad8fabc1b961f722d4e76b243ba0b316d7aa7a91ce9dc1d0e9ec47e29e55 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]GAL1271/SATB1_GAL1271_PDU_P2-4-3" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948194045 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948194045 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/01a92b1cded10a871e133b800a24f624663abbc9d65171d0cc6a87baa57463fe b/Gateways/FE/projects/.resources/01a92b1cded10a871e133b800a24f624663abbc9d65171d0cc6a87baa57463fe deleted file mode 100644 index dac37af..0000000 Binary files a/Gateways/FE/projects/.resources/01a92b1cded10a871e133b800a24f624663abbc9d65171d0cc6a87baa57463fe and /dev/null differ diff --git a/Gateways/FE/projects/.resources/01c3945a3baa4253f0115a4f581e2620a3e69583739d288afdd771eaf1bbc42c b/Gateways/FE/projects/.resources/01c3945a3baa4253f0115a4f581e2620a3e69583739d288afdd771eaf1bbc42c deleted file mode 100644 index c15f9b3..0000000 --- a/Gateways/FE/projects/.resources/01c3945a3baa4253f0115a4f581e2620a3e69583739d288afdd771eaf1bbc42c +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/036fecad0b8baad8a7775bfdbfdccea952c86455613d7354996ede365aa05f2c b/Gateways/FE/projects/.resources/036fecad0b8baad8a7775bfdbfdccea952c86455613d7354996ede365aa05f2c deleted file mode 100644 index ff437da..0000000 Binary files a/Gateways/FE/projects/.resources/036fecad0b8baad8a7775bfdbfdccea952c86455613d7354996ede365aa05f2c and /dev/null differ diff --git a/Gateways/FE/projects/.resources/dc971ca50f8b19b5874b8a5d80dd972d800de523ecc08c646aab690aee174bac b/Gateways/FE/projects/.resources/050d46680be64e4c6b95078fd8a1ca21d8bdfdef62e2fdef741380fae0473cd9 similarity index 98% rename from Gateways/FE/projects/.resources/dc971ca50f8b19b5874b8a5d80dd972d800de523ecc08c646aab690aee174bac rename to Gateways/FE/projects/.resources/050d46680be64e4c6b95078fd8a1ca21d8bdfdef62e2fdef741380fae0473cd9 index 1e74136..09b0f49 100644 --- a/Gateways/FE/projects/.resources/dc971ca50f8b19b5874b8a5d80dd972d800de523ecc08c646aab690aee174bac +++ b/Gateways/FE/projects/.resources/050d46680be64e4c6b95078fd8a1ca21d8bdfdef62e2fdef741380fae0473cd9 @@ -72,7 +72,7 @@ "props": { "params": { "inputs": { - "targetDetailedURL": "/Oneline-UT/37d94815" + "targetDetailedURL": "/Oneline-UT/" } }, "path": "Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame" diff --git a/Gateways/FE/projects/.resources/0629fe865eb0e0ab813d0d3eacf4ef66f074f108d77a2326a5683b1e78785283 b/Gateways/FE/projects/.resources/0629fe865eb0e0ab813d0d3eacf4ef66f074f108d77a2326a5683b1e78785283 deleted file mode 100644 index 5ecbd42..0000000 --- a/Gateways/FE/projects/.resources/0629fe865eb0e0ab813d0d3eacf4ef66f074f108d77a2326a5683b1e78785283 +++ /dev/null @@ -1,726 +0,0 @@ -{ - "custom": { - "FCU_tagPath": [], - "backupdata": [ - "[Ignition_Common_IO_Gtwy]ER1185/SATB1_HS2_EL1185_FCU01", - "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02", - "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03", - "[Ignition_Common_IO_Gtwy]ER1160/SATB1_HS2_EL1160_FCU04", - "[Ignition_Common_IO_Gtwy]IDF1174/SATB1_HS2_IDF1174_FCU05", - "[Ignition_Common_IO_Gtwy]IDF1154/SATB1_HS2_IDF1154_FCU06", - "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU07", - "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU08", - "[Ignition_Common_IO_Gtwy]FS1285/SATB1_HS2_FS1285_FCU09", - "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU10", - "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU11", - "[Ignition_Common_IO_Gtwy]ER1287/SATB1_HS2_EL1287_FCU12", - "[Ignition_Common_IO_Gtwy]ER1284/SATB1_HS2_EL1284_FCU13", - "[Ignition_Common_IO_Gtwy]IDF1274/SATB1_HS2_IDF1274_FCU14", - "[Ignition_Common_IO_Gtwy]IDF1264/SATB1_HS2_IDF1264_FCU15", - "[Ignition_Common_IO_Gtwy]ER1128/SATB1_HS2_EL1128_FCU16", - "[Ignition_Common_IO_Gtwy]MR1125/SATB1_HS2_ME1125_FCU17", - "[Ignition_Common_IO_Gtwy]ER1229/SATB1_HS2_EL1229_FCU18", - "[Ignition_Common_IO_Gtwy]IDF1218/SATB1_HS2_IDF1218_FCU19", - "[Ignition_Common_IO_Gtwy]IDF1122/SATB1_HS2_IDF1122_FCU20", - "[Ignition_Common_IO_Gtwy]FS1232/SATB1_HS2_FS1232_FCU21", - "[Ignition_Common_IO_Gtwy]MR1132/SATB1_HS2_ME1132_FCU22", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU23", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU24", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU25", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU26", - "[Ignition_Common_IO_Gtwy]RM1219/SATB1_HS2_RM1219_FCU27", - "[Ignition_Common_IO_Gtwy]RM1193/SATB1_HS2_RM1193_FCU28", - "[Ignition_Common_IO_Gtwy]RM1234/SATB1_HS2_RM1234_FCU29" - ], - "data": [ - "[Ignition_Common_IO_Gtwy]ER1185/SATB1_HS2_EL1185_FCU01", - "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02", - "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03", - "[Ignition_Common_IO_Gtwy]ER1160/SATB1_HS2_EL1160_FCU04", - "[Ignition_Common_IO_Gtwy]IDF1174/SATB1_HS2_IDF1174_FCU05", - "[Ignition_Common_IO_Gtwy]IDF1154/SATB1_HS2_IDF1154_FCU06", - "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU07", - "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU08", - "[Ignition_Common_IO_Gtwy]FS1285/SATB1_HS2_FS1285_FCU09", - "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU10", - "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU11", - "[Ignition_Common_IO_Gtwy]ER1287/SATB1_HS2_EL1287_FCU12", - "[Ignition_Common_IO_Gtwy]ER1284/SATB1_HS2_EL1284_FCU13", - "[Ignition_Common_IO_Gtwy]IDF1274/SATB1_HS2_IDF1274_FCU14", - "[Ignition_Common_IO_Gtwy]IDF1264/SATB1_HS2_IDF1264_FCU15", - "[Ignition_Common_IO_Gtwy]ER1128/SATB1_HS2_EL1128_FCU16", - "[Ignition_Common_IO_Gtwy]MR1125/SATB1_HS2_ME1125_FCU17", - "[Ignition_Common_IO_Gtwy]ER1229/SATB1_HS2_EL1229_FCU18", - "[Ignition_Common_IO_Gtwy]IDF1218/SATB1_HS2_IDF1218_FCU19", - "[Ignition_Common_IO_Gtwy]IDF1122/SATB1_HS2_IDF1122_FCU20", - "[Ignition_Common_IO_Gtwy]FS1232/SATB1_HS2_FS1232_FCU21", - "[Ignition_Common_IO_Gtwy]MR1132/SATB1_HS2_ME1132_FCU22", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU23", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU24", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU25", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU26", - "[Ignition_Common_IO_Gtwy]RM1219/SATB1_HS2_RM1219_FCU27", - "[Ignition_Common_IO_Gtwy]RM1193/SATB1_HS2_RM1193_FCU28", - "[Ignition_Common_IO_Gtwy]RM1234/SATB1_HS2_RM1234_FCU29" - ], - "selectedRoom": "MDF1187", - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, - "params": {}, - "propConfig": { - "custom.FCU_tagPath": { - "binding": { - "config": { - "struct": { - "selected": "{view.custom.selectedRoom}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selected\"]\n\tpath \u003d str(self.view.custom.tagPath) + selected\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/FCU\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.backupdata": { - "persistent": true - }, - "custom.data": { - "persistent": true - }, - "custom.selectedRoom": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.FCU_tagPath" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"FCU\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "direction": "column", - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "FCU", - "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02" - }, - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "FCU", - "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03" - } - ], - "path": "Library/Diagrams/HVAC/Dgrm_FCU", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Diagram" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--container)" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"updateRoom\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "55%" - }, - "propConfig": { - "custom.selectedData": { - "binding": { - "config": { - "path": "this.props.selection.selectedRow" - }, - "transforms": [ - { - "code": "\tif value is None:\n\t\tvalue \u003d 0\n\ttagPath \u003d self.props.data[value][\"tagPath\"]\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/FCU\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "property" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(3000)" - }, - "waitOnAll": false - }, - "overlayOptOut": true, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\t\n\tAlarmSeverity \u003d \"\"\n\tfor item in data:\n\t\t\n\t\t\"\"\"\n\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\t\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\t\"\"\"\n\t\tST \u003d system.tag.readBlocking(item + \"/Space Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\",1000)[0].value\n\t\t#Room \u003d system.tag.readBlocking(item + \"/Meta/Room\",1000)[0].value\n\t\tRoom \u003d item.split(\u0027/\u0027)[0].split(\u0027]\u0027)[1]\n\t\tName \u003d item.split(\u0027_\u0027)[6]\n\t\tpath \u003d item\n\t\toutput.append({ \"ST\": ST,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": path})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Name" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "flex grow" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "ST", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Space Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "filter": { - "enabled": true - } - }, - "type": "ia.display.table" - } - ], - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "updateRoom", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/7748072ee03db7f89ff7f996a43fbd7d767fe391e4fa27da714e2795408073d3 b/Gateways/FE/projects/.resources/065b9e16abafddeaae124483576e2edc383f6a38f604e9a0759986ef5fd6f51b similarity index 76% rename from Gateways/FE/projects/.resources/7748072ee03db7f89ff7f996a43fbd7d767fe391e4fa27da714e2795408073d3 rename to Gateways/FE/projects/.resources/065b9e16abafddeaae124483576e2edc383f6a38f604e9a0759986ef5fd6f51b index 9fcf2cd..0084f25 100644 --- a/Gateways/FE/projects/.resources/7748072ee03db7f89ff7f996a43fbd7d767fe391e4fa27da714e2795408073d3 +++ b/Gateways/FE/projects/.resources/065b9e16abafddeaae124483576e2edc383f6a38f604e9a0759986ef5fd6f51b @@ -4,7 +4,7 @@ "props": { "defaultSize": { "height": 500, - "width": 767 + "width": 1376 } }, "root": { @@ -14,10 +14,10 @@ "name": "Sym_Chiller" }, "position": { - "height": 0.3, - "width": 0.25, - "x": 0.0648, - "y": 0.054 + "height": 150, + "width": 230, + "x": 124.16, + "y": 27 }, "props": { "params": { @@ -33,10 +33,10 @@ "name": "Sym_ValveC" }, "position": { - "height": 0.164, - "width": 0.1493, - "x": 0.4062, - "y": 0.376 + "height": 82, + "width": 152, + "x": 577.93, + "y": 188 }, "props": { "params": { @@ -53,10 +53,10 @@ "name": "Sym_ValveC_0" }, "position": { - "height": 0.162, - "width": 0.1627, - "x": 0.4036, - "y": 0.641 + "height": 81, + "width": 223.88, + "x": 555.35, + "y": 320.5 }, "props": { "params": { @@ -73,10 +73,10 @@ "name": "Sym_ValveM" }, "position": { - "height": 0.218, - "width": 0.1707, - "x": 0.6572, - "y": 0.17 + "height": 109, + "width": 81, + "x": 908.31, + "y": 75 }, "props": { "params": { @@ -93,10 +93,10 @@ "name": "Sym_TES" }, "position": { - "height": 0.254, - "width": 0.1213, - "x": 0.6328, - "y": 0.453 + "height": 127, + "width": 166.91, + "x": 870.73, + "y": 226.5 }, "props": { "params": { @@ -112,10 +112,10 @@ "name": "Sym_CHWPump" }, "position": { - "height": 0.178, - "width": 0.17, - "x": 0.1271, - "y": 0.486 + "height": 89, + "width": 233.92, + "x": 174.89, + "y": 243 }, "props": { "params": { @@ -134,13 +134,13 @@ "name": "Label" }, "position": { - "height": 0.086, + "height": 43, "rotate": { "anchor": "-30% 25%" }, - "width": 0.0887, - "x": 0.8786, - "y": 0.23 + "width": 122.05, + "x": 1208.95, + "y": 115 }, "props": { "text": "To CHWS Header" @@ -152,13 +152,13 @@ "name": "Label_0" }, "position": { - "height": 0.086, + "height": 43, "rotate": { "anchor": "-30% 25%" }, - "width": 0.0939, - "x": 0.8787, - "y": 0.8578 + "width": 129.21, + "x": 1209.09, + "y": 428.9 }, "props": { "text": "From CHWS Header" @@ -170,10 +170,10 @@ "name": "EmbeddedView" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.7276, - "y": 0.52 + "height": 35, + "width": 154.25, + "x": 1001.18, + "y": 260 }, "props": { "params": { @@ -192,10 +192,10 @@ "name": "EmbeddedView_0" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.5085, - "y": 0.52 + "height": 35, + "width": 154.25, + "x": 699.7, + "y": 260 }, "props": { "params": { @@ -214,10 +214,10 @@ "name": "EmbeddedView_1" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.2387, - "y": 0.216 + "height": 35, + "width": 154.25, + "x": 328.45, + "y": 108 }, "props": { "params": { @@ -236,10 +236,10 @@ "name": "EmbeddedView_2" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.2387, - "y": 0.826 + "height": 35, + "width": 154.25, + "x": 328.45, + "y": 413 }, "props": { "params": { @@ -258,10 +258,10 @@ "name": "EmbeddedView_3" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.317, - "y": 0.216 + "height": 35, + "width": 154.25, + "x": 436.19, + "y": 108 }, "props": { "params": { @@ -280,7 +280,6 @@ "name": "root" }, "props": { - "mode": "percent", "pipes": [ { "appearance": "auto", @@ -294,21 +293,21 @@ { "connections": [ { - "x": 0.1726, - "y": 0.278 + "x": 237.5, + "y": 139 }, { "connections": [], - "x": 0.6746, - "y": 0.278 + "x": 928.25, + "y": 139 } ], - "x": 0.4663, - "y": 0.278 + "x": 641.63, + "y": 139 } ], - "x": 0.4663, - "y": 0.432 + "x": 641.63, + "y": 216 }, "start": "none", "stroke": "", @@ -327,26 +326,26 @@ { "connections": [ { - "x": 0.8688, - "y": 0.9114 + "x": 1195.47, + "y": 455.7 }, { "connections": [ { - "x": 0.1726, - "y": 0.564 + "x": 237.5, + "y": 282 } ], - "x": 0.1726, - "y": 0.9114 + "x": 237.5, + "y": 455.7 } ], - "x": 0.4651, - "y": 0.9114 + "x": 639.98, + "y": 455.7 } ], - "x": 0.4651, - "y": 0.744 + "x": 639.98, + "y": 372 }, "start": "none", "stroke": "", @@ -363,16 +362,16 @@ "origin": { "connections": [ { - "x": 0.1726, - "y": 0.292 + "x": 237.5, + "y": 146 }, { - "x": 0.1726, - "y": 0.54 + "x": 237.5, + "y": 270 } ], - "x": 0.1726, - "y": 0.418 + "x": 237.5, + "y": 209 }, "start": "none", "stroke": "", @@ -391,20 +390,20 @@ { "connections": [ { - "x": 0.4663, - "y": 0.486 + "x": 641.63, + "y": 243 }, { - "x": 0.6746, - "y": 0.588 + "x": 928.25, + "y": 294 } ], - "x": 0.4663, - "y": 0.588 + "x": 641.63, + "y": 294 } ], - "x": 0.4663, - "y": 0.694 + "x": 641.63, + "y": 347 }, "start": "none", "stroke": "", @@ -425,25 +424,25 @@ { "connections": [ { - "x": 0.8688, - "y": 0.278 + "x": 1195.47, + "y": 139 }, { "connections": [], - "x": 0.7, - "y": 0.278 + "x": 963.2, + "y": 139 } ], - "x": 0.7876, - "y": 0.278 + "x": 1083.74, + "y": 139 } ], - "x": 0.7876, - "y": 0.588 + "x": 1083.74, + "y": 294 } ], - "x": 0.6895, - "y": 0.588 + "x": 948.75, + "y": 294 }, "start": "none", "stroke": "", diff --git a/Gateways/FE/projects/.resources/06bc935620354951e710b27c3b4931d2aa4027f095a81efe759c5914df00fb0d b/Gateways/FE/projects/.resources/06bc935620354951e710b27c3b4931d2aa4027f095a81efe759c5914df00fb0d new file mode 100644 index 0000000..8538409 --- /dev/null +++ b/Gateways/FE/projects/.resources/06bc935620354951e710b27c3b4931d2aa4027f095a81efe759c5914df00fb0d @@ -0,0 +1,227 @@ +{ + "custom": { + "STU_tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01", + "data": [ + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU01", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU03", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU05", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU07", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU09", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU11", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU13", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU15", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU17", + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU19", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU02", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU04", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU06", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU08", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU10", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU12", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU14", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU16", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU18", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU20", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU01", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU03", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU05", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU07", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU09", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU11", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU13", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU15", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU17", + "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU19", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU02", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU04", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU06", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU08", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU10", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU12", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU14", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU16", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU18", + "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU20", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU03", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU05", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU07", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU09", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU11", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU13", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU15", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU17", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU19", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU02", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU04", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU06", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU08", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU10", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU12", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU14", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU16", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU18", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU20", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU01", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU03", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU05", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU07", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU09", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU11", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU13", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU15", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU17", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU19", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU02", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU04", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU06", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU08", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU10", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU12", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU14", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU16", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU18", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU20", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU01", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU03", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU05", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU07", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU09", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU11", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU13", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU15", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU17", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU19", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU02", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU04", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU08", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU10", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU12", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU14", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU16", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU18", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU20" + ], + "room": "GAL1172", + "tagPath": "[Ignition_Common_IO_Gtwy]" + }, + "params": {}, + "propConfig": { + "custom.STU_tagPath": { + "binding": { + "config": { + "path": "view.custom.selected" + }, + "transforms": [ + { + "code": "\toutput \u003d \"\"\n\tif(value is None):\n\t\toutput \u003d \"[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01\"\n\telse:\n\t\toutput \u003d value\n\treturn output", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.data": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.custom.tagPath}", + "time": "now(3000)" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/STU\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.room": { + "persistent": true + }, + "custom.tagPath": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "STU diagram" + }, + "propConfig": { + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.custom.STU_tagPath" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": false, + "objectName": "STU" + }, + "path": "Library/Diagrams/HVAC/Dgrm_STU", + "style": { + "backgroundColor": "var(--container)", + "borderBottomLeftRadius": "var(--borderRadius)", + "borderBottomRightRadius": "var(--borderRadius)", + "borderTopLeftRadius": "var(--borderRadius)", + "borderTopRightRadius": "var(--borderRadius)", + "boxShadow": "var(--boxShadow2)", + "overflow": "visible", + "padding": 5 + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "justify": "space-evenly", + "style": { + "backgroundColor": "var(--containerRoot)", + "padding": 15 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "roomUpdate", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.room \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + }, + { + "messageType": "equipmentUpdate", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.STU_tagPath \u003d payload[\"Tag\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/0770d47a1857cb33d7fdedd6b761ad73c19f55a42d84219b4105c6e0eccbdc3d b/Gateways/FE/projects/.resources/0770d47a1857cb33d7fdedd6b761ad73c19f55a42d84219b4105c6e0eccbdc3d new file mode 100644 index 0000000..4bab4ec Binary files /dev/null and b/Gateways/FE/projects/.resources/0770d47a1857cb33d7fdedd6b761ad73c19f55a42d84219b4105c6e0eccbdc3d differ diff --git a/Gateways/FE/projects/.resources/07842c8b29a79c350741992e1a3b474f61fd63f956c52046c5741a0134d198c5 b/Gateways/FE/projects/.resources/07842c8b29a79c350741992e1a3b474f61fd63f956c52046c5741a0134d198c5 deleted file mode 100644 index 7e38499..0000000 --- a/Gateways/FE/projects/.resources/07842c8b29a79c350741992e1a3b474f61fd63f956c52046c5741a0134d198c5 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_UT-M1/Source 1 Switch" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/0a3a873d52b71692e418ad0f8acafefbb580944a1971461aed0c0100b565e96b b/Gateways/FE/projects/.resources/0a3a873d52b71692e418ad0f8acafefbb580944a1971461aed0c0100b565e96b deleted file mode 100644 index 0f82a1b..0000000 Binary files a/Gateways/FE/projects/.resources/0a3a873d52b71692e418ad0f8acafefbb580944a1971461aed0c0100b565e96b and /dev/null differ diff --git a/Gateways/FE/projects/.resources/0a519ecdcca1ef3958403572dd0e2aebab0e058e30f6eaa95bab38dae2c34e1b b/Gateways/FE/projects/.resources/0a519ecdcca1ef3958403572dd0e2aebab0e058e30f6eaa95bab38dae2c34e1b deleted file mode 100644 index 2dfc152..0000000 Binary files a/Gateways/FE/projects/.resources/0a519ecdcca1ef3958403572dd0e2aebab0e058e30f6eaa95bab38dae2c34e1b and /dev/null differ diff --git a/Gateways/FE/projects/.resources/0b79075346e9e5f9113c370c26d5e0f20146d0759fcc03c7cc365e9c4f90b2d6 b/Gateways/FE/projects/.resources/0b79075346e9e5f9113c370c26d5e0f20146d0759fcc03c7cc365e9c4f90b2d6 deleted file mode 100644 index 2fbb0a5..0000000 Binary files a/Gateways/FE/projects/.resources/0b79075346e9e5f9113c370c26d5e0f20146d0759fcc03c7cc365e9c4f90b2d6 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/0bc33d135eb78d5fc4927b23c537584e1c7d1f01a6730cf08f704dd45575346a b/Gateways/FE/projects/.resources/0bc33d135eb78d5fc4927b23c537584e1c7d1f01a6730cf08f704dd45575346a new file mode 100644 index 0000000..36cbecc Binary files /dev/null and b/Gateways/FE/projects/.resources/0bc33d135eb78d5fc4927b23c537584e1c7d1f01a6730cf08f704dd45575346a differ diff --git a/Gateways/FE/projects/.resources/0bea6c23be13e89312ef7e996b88753610502e345110667fefde433499a8b56e b/Gateways/FE/projects/.resources/0bea6c23be13e89312ef7e996b88753610502e345110667fefde433499a8b56e deleted file mode 100644 index cde5dd1..0000000 Binary files a/Gateways/FE/projects/.resources/0bea6c23be13e89312ef7e996b88753610502e345110667fefde433499a8b56e and /dev/null differ diff --git a/Gateways/FE/projects/.resources/0c35554f6e405e841cb663fa3ddf238e4209ec9a6ce47ff2fd1436fade59f546 b/Gateways/FE/projects/.resources/0c35554f6e405e841cb663fa3ddf238e4209ec9a6ce47ff2fd1436fade59f546 deleted file mode 100644 index 4a6fb98..0000000 --- a/Gateways/FE/projects/.resources/0c35554f6e405e841cb663fa3ddf238e4209ec9a6ce47ff2fd1436fade59f546 +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/0c703631d2cd29eaf5a1462ffdd90bcff8df6e0e3caeb93c1b51805289def2db b/Gateways/FE/projects/.resources/0c703631d2cd29eaf5a1462ffdd90bcff8df6e0e3caeb93c1b51805289def2db new file mode 100644 index 0000000..2789832 Binary files /dev/null and b/Gateways/FE/projects/.resources/0c703631d2cd29eaf5a1462ffdd90bcff8df6e0e3caeb93c1b51805289def2db differ diff --git a/Gateways/FE/projects/.resources/0c9eeb7bd70f1475251e6cbcdbe80ad7a052a351f00e33633a94cc7e13025560 b/Gateways/FE/projects/.resources/0c9eeb7bd70f1475251e6cbcdbe80ad7a052a351f00e33633a94cc7e13025560 new file mode 100644 index 0000000..24416ab Binary files /dev/null and b/Gateways/FE/projects/.resources/0c9eeb7bd70f1475251e6cbcdbe80ad7a052a351f00e33633a94cc7e13025560 differ diff --git a/Gateways/FE/projects/.resources/0d382d41044fe23c1286f50a92c9d09f0dba4d6bbce0a02343dff3b76a588093 b/Gateways/FE/projects/.resources/0d382d41044fe23c1286f50a92c9d09f0dba4d6bbce0a02343dff3b76a588093 deleted file mode 100644 index a595e34..0000000 --- a/Gateways/FE/projects/.resources/0d382d41044fe23c1286f50a92c9d09f0dba4d6bbce0a02343dff3b76a588093 +++ /dev/null @@ -1,1939 +0,0 @@ -{ - "custom": { - "auth": { - "almAck": false, - "almShelve": false, - "config": false, - "control": false - } - }, - "params": { - "dh": 201 - }, - "propConfig": { - "custom.auth": { - "binding": { - "config": { - "path": "session.props.auth.user.roles" - }, - "transforms": [ - { - "code": "\treturn utils.roles.validate(value)", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "params.dh": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "height": 1000, - "width": 350 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Chiller Load Sub Limit" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 30 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_2" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "CHWP Diff Press SP" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 21 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_9" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Bypass Valve DP SP" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 4 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_8" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Chiller Min Flow SP" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 150 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_7" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "CHWP Sub Limit " - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 67 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_5" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "CHWP Add Limit" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 94 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_4" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Chiller Tonnage Rating" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 320 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_3" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Chiller Load Add Limit" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField" - }, - "position": { - "basis": "125px", - "shrink": 0 - }, - "propConfig": { - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.config" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" - }, - "enabled": false, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "dh": "{view.params.dh}" - }, - "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--tagvalue-color)", - "fontWeight": "bold", - "min-height": "30px" - }, - "value": 90 - }, - "type": "ia.input.numeric-entry-field" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "props": { - "justify": "space-between", - "style": { - "gap": "5px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "EmbeddedView_28" - }, - "position": { - "basis": "50%", - "grow": 1 - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.dh" - }, - "transforms": [ - { - "expression": "\"[Ignition_Common_IO_Gtwy]DH\"+{value}+\"/SATB1_DH\"+{value}+\"_DP_PID\"", - "type": "expression" - } - ], - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": true, - "objectName": "PID_Loop", - "title": "CHWP PID" - }, - "path": "Library/Widgets/Wdg_PID", - "style": { - "classes": "containers/HoverOver", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "children": [ - { - "meta": { - "name": "AvgMinMax_1" - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.dh" - }, - "transforms": [ - { - "expression": "\"[Ignition_Common_IO_Gtwy]DH\" + {value} + \"/SATB1_DH\" + {value} + \"_RH_AvgObj\"", - "type": "expression" - } - ], - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": true, - "format": "#,###.###", - "objectName": "AvgMinMax", - "title": "CHWST Avg" - }, - "path": "Library/Widgets/Wdg_AvgMinMax", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "AvgMinMax_2" - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.dh" - }, - "transforms": [ - { - "expression": "\"[Ignition_Common_IO_Gtwy]DH\" + {value} + \"/SATB1_DH\" + {value} + \"_Temp_AvgObj\"", - "type": "expression" - } - ], - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": true, - "format": "#,###.###", - "objectName": "AvgMinMax", - "title": "CHWST Avg" - }, - "path": "Library/Widgets/Wdg_AvgMinMax", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "50%" - }, - "props": { - "direction": "column", - "justify": "space-between", - "style": { - "gap": "15px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer_6" - }, - "position": { - "basis": "150px" - }, - "props": { - "style": { - "gap": "15px", - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\tdh \u003d str(self.view.params.dh)\n\tviewPath \u003d \u0027Pages/Datahall/LLS_STU_DH%s\u0027%(dh)\n\ttitle \u003d \u0027DH%s STU LLS\u0027 %(dh)\n\tutils.nav.openLLSPopup(viewPath,title)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button_4" - }, - "position": { - "basis": "40px" - }, - "props": { - "pageId": "", - "text": "STU LLS" - }, - "type": "ia.input.button" - }, - { - "meta": { - "name": "Table" - }, - "position": { - "basis": "50%", - "grow": 1 - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "ChillerName", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Chiller" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "priority", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Priority" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "status", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 41" - }, - "index": 40, - "priority": 1, - "priority2": 1, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 26" - }, - "index": 25, - "priority": 2, - "priority2": 2, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 29" - }, - "index": 28, - "priority": 3, - "priority2": 3, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 08" - }, - "index": 7, - "priority": 4, - "priority2": 4, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 46" - }, - "index": 45, - "priority": 5, - "priority2": 5, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 44" - }, - "index": 43, - "priority": 6, - "priority2": 6, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 12" - }, - "index": 11, - "priority": 7, - "priority2": 7, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 11" - }, - "index": 10, - "priority": 8, - "priority2": 8, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 28" - }, - "index": 27, - "priority": 9, - "priority2": 9, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 40" - }, - "index": 39, - "priority": 10, - "priority2": 10, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 13" - }, - "index": 12, - "priority": 11, - "priority2": 11, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 36" - }, - "index": 35, - "priority": 12, - "priority2": 12, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 19" - }, - "index": 18, - "priority": 13, - "priority2": 13, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 24" - }, - "index": 23, - "priority": 14, - "priority2": 14, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 20" - }, - "index": 19, - "priority": 15, - "priority2": 15, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 17" - }, - "index": 16, - "priority": 16, - "priority2": 16, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 47" - }, - "index": 46, - "priority": 17, - "priority2": 17, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 38" - }, - "index": 37, - "priority": 18, - "priority2": 18, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 30" - }, - "index": 29, - "priority": 19, - "priority2": 19, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 07" - }, - "index": 6, - "priority": 20, - "priority2": 20, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 05" - }, - "index": 4, - "priority": 21, - "priority2": 21, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 27" - }, - "index": 26, - "priority": 22, - "priority2": 22, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 15" - }, - "index": 14, - "priority": 23, - "priority2": 23, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 34" - }, - "index": 33, - "priority": 24, - "priority2": 24, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 22" - }, - "index": 21, - "priority": 25, - "priority2": 25, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 14" - }, - "index": 13, - "priority": 26, - "priority2": 26, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 33" - }, - "index": 32, - "priority": 27, - "priority2": 27, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 45" - }, - "index": 44, - "priority": 28, - "priority2": 28, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 21" - }, - "index": 20, - "priority": 29, - "priority2": 29, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 16" - }, - "index": 15, - "priority": 30, - "priority2": 30, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 48" - }, - "index": 47, - "priority": 31, - "priority2": 31, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 43" - }, - "index": 42, - "priority": 32, - "priority2": 32, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 39" - }, - "index": 38, - "priority": 33, - "priority2": 33, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 23" - }, - "index": 22, - "priority": 34, - "priority2": 34, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 31" - }, - "index": 30, - "priority": 35, - "priority2": 35, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 02" - }, - "index": 1, - "priority": 36, - "priority2": 36, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 03" - }, - "index": 2, - "priority": 37, - "priority2": 37, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 04" - }, - "index": 3, - "priority": 38, - "priority2": 38, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 32" - }, - "index": 31, - "priority": 39, - "priority2": 39, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 09" - }, - "index": 8, - "priority": 40, - "priority2": 40, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 06" - }, - "index": 5, - "priority": 41, - "priority2": 41, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 25" - }, - "index": 24, - "priority": 42, - "priority2": 42, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 42" - }, - "index": 41, - "priority": 43, - "priority2": 43, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 01" - }, - "index": 0, - "priority": 44, - "priority2": 44, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 18" - }, - "index": 17, - "priority": 45, - "priority2": 45, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 10" - }, - "index": 9, - "priority": 46, - "priority2": 46, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 37" - }, - "index": 36, - "priority": 47, - "priority2": 47, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 35" - }, - "index": 34, - "priority": 0, - "priority2": 999, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - } - ] - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "justify": "space-between", - "style": { - "gap": "10px", - "overflow": "visible", - "padding": "10px" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/0d8a0c3e80065c104ba70045326c14ec55629808795f4568ec79281ca4cba68a b/Gateways/FE/projects/.resources/0d8a0c3e80065c104ba70045326c14ec55629808795f4568ec79281ca4cba68a new file mode 100644 index 0000000..a522e34 --- /dev/null +++ b/Gateways/FE/projects/.resources/0d8a0c3e80065c104ba70045326c14ec55629808795f4568ec79281ca4cba68a @@ -0,0 +1,419 @@ +{ + "custom": { + "tabsConfig": { + "showConfig": false, + "showControl": false, + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "Motor", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH01_MOTOR" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "enabled": false, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "enabled": false, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/0e065f05a938d5a6e05d6445bc93d89741b2dee6069e65bb4eedbb019c917763 b/Gateways/FE/projects/.resources/0e065f05a938d5a6e05d6445bc93d89741b2dee6069e65bb4eedbb019c917763 deleted file mode 100644 index 0862d24..0000000 Binary files a/Gateways/FE/projects/.resources/0e065f05a938d5a6e05d6445bc93d89741b2dee6069e65bb4eedbb019c917763 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/7171fc52df19cfd587944c1fb86c54328314e6cca7c1d21850c7d4035383c4d4 b/Gateways/FE/projects/.resources/0e9bba93fe0b3ec34243fa89492ea513a8d6a49e0f5a6e6e1cbf1cc3df314d51 similarity index 95% rename from Gateways/FE/projects/.resources/7171fc52df19cfd587944c1fb86c54328314e6cca7c1d21850c7d4035383c4d4 rename to Gateways/FE/projects/.resources/0e9bba93fe0b3ec34243fa89492ea513a8d6a49e0f5a6e6e1cbf1cc3df314d51 index 6118898..db4b4dd 100644 --- a/Gateways/FE/projects/.resources/7171fc52df19cfd587944c1fb86c54328314e6cca7c1d21850c7d4035383c4d4 +++ b/Gateways/FE/projects/.resources/0e9bba93fe0b3ec34243fa89492ea513a8d6a49e0f5a6e6e1cbf1cc3df314d51 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/1cf203dad5c1b4688f66fd405d3d4b500d3250625b80191ef06ba9a72dce9ba5 b/Gateways/FE/projects/.resources/105997a614c0cc00c71503342b4ac0bac1459cb1b89095bf1f55e028ffe6f1a3 similarity index 94% rename from Gateways/FE/projects/.resources/1cf203dad5c1b4688f66fd405d3d4b500d3250625b80191ef06ba9a72dce9ba5 rename to Gateways/FE/projects/.resources/105997a614c0cc00c71503342b4ac0bac1459cb1b89095bf1f55e028ffe6f1a3 index d92fcb1..eec5b16 100644 --- a/Gateways/FE/projects/.resources/1cf203dad5c1b4688f66fd405d3d4b500d3250625b80191ef06ba9a72dce9ba5 +++ b/Gateways/FE/projects/.resources/105997a614c0cc00c71503342b4ac0bac1459cb1b89095bf1f55e028ffe6f1a3 @@ -33,8 +33,8 @@ }, "props": { "defaultSize": { - "height": 1000, - "width": 350 + "height": 900, + "width": 260 } }, "root": { @@ -43,6 +43,9 @@ "meta": { "name": "Title" }, + "position": { + "basis": "19px" + }, "propConfig": { "props.text": { "binding": { @@ -61,7 +64,7 @@ }, "props": { "textStyle": { - "fontSize": 24 + "fontSize": 14 } }, "type": "ia.display.label" @@ -71,7 +74,7 @@ "name": "SLA" }, "position": { - "basis": "93px" + "basis": "75px" }, "props": { "columns": [ @@ -166,14 +169,14 @@ "viewParams": {}, "viewPath": "", "visible": true, - "width": "" + "width": 80 }, { "align": "center", "boolean": "checkbox", "dateFormat": "MM/DD/YYYY", "editable": false, - "field": "Minimum", + "field": "Min", "filter": { "boolean": { "condition": "" @@ -207,7 +210,7 @@ "style": { "classes": "" }, - "title": "" + "title": "Min" }, "justify": "auto", "nullFormat": { @@ -258,14 +261,14 @@ "viewParams": {}, "viewPath": "", "visible": true, - "width": "" + "width": 40 }, { "align": "center", "boolean": "checkbox", "dateFormat": "MM/DD/YYYY", "editable": false, - "field": "Maximum", + "field": "Max", "filter": { "boolean": { "condition": "" @@ -299,7 +302,7 @@ "style": { "classes": "" }, - "title": "" + "title": "Max" }, "justify": "auto", "nullFormat": { @@ -350,13 +353,13 @@ "viewParams": {}, "viewPath": "", "visible": true, - "width": "" + "width": 40 } ], "data": [ { - "Maximum": "95 degF", - "Minimum": "50 degF", + "Max": "95 degF", + "Min": "50 degF", "Variable": { "align": "center", "editable": false, @@ -369,8 +372,8 @@ } }, { - "Maximum": "80%", - "Minimum": "5%", + "Max": "80%", + "Min": "5%", "Variable": { "align": "center", "editable": false, @@ -387,11 +390,18 @@ "pager": { "bottom": false }, + "rows": { + "height": "20px", + "style": { + "fontSize": 12 + } + }, "selection": { "enableRowSelection": false }, "style": { - "fontSize": 16 + "fontSize": 12, + "overflow": "visible" } }, "type": "ia.display.table" @@ -403,7 +413,10 @@ "name": "Label" }, "props": { - "text": "Humidifier Disable Setpoint" + "text": "Humidifier Disable Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -463,9 +476,6 @@ "meta": { "name": "FlexContainer_1" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -475,6 +485,28 @@ }, "type": "ia.container.flex" }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "basis": "25px" + }, + "props": { + "params": { + "dataType": "Int4", + "enabled": true, + "max": 9999, + "min": -9999, + "name": "Int", + "options": [], + "tagPath": "[Ignition_SATB1_IO2_default]Yard/SATB1_YARD_UT-P2-4/Vacuum Fault Interrupter2 Tripped/Config/Target", + "visible": true + }, + "path": "Library/Framework/Tag ConfigShort" + }, + "type": "ia.display.view" + }, { "children": [ { @@ -482,7 +514,10 @@ "name": "Label" }, "props": { - "text": "Humidifier Enable Setpoint" + "text": "Humidifier Enable Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -542,9 +577,6 @@ "meta": { "name": "FlexContainer_0" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -561,7 +593,10 @@ "name": "Label" }, "props": { - "text": "Dewpoint Hi Limit" + "text": "Dewpoint Hi Limit", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -621,9 +656,6 @@ "meta": { "name": "FlexContainer_9" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -640,7 +672,10 @@ "name": "Label" }, "props": { - "text": "Dewpoint Lo Limit" + "text": "Dewpoint Lo Limit", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -700,9 +735,6 @@ "meta": { "name": "FlexContainer_10" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -722,7 +754,10 @@ "basis": "100%" }, "props": { - "text": "STU Demand" + "text": "STU Demand", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -782,9 +817,6 @@ "meta": { "name": "FlexContainer_4" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -901,7 +933,10 @@ "basis": "190px" }, "props": { - "text": "DP PID Setpoint" + "text": "DP PID Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -961,9 +996,6 @@ "meta": { "name": "FlexContainer_3" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -980,7 +1012,10 @@ "name": "Label" }, "props": { - "text": "STU PID RA Temperature Setpoint" + "text": "STU PID RA Temperature Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -1040,9 +1075,6 @@ "meta": { "name": "FlexContainer_2" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -1059,7 +1091,10 @@ "name": "Label" }, "props": { - "text": "Global Discharge Temp Setpoint" + "text": "Global Discharge Temp Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -1119,9 +1154,6 @@ "meta": { "name": "FlexContainer_8" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -1339,9 +1371,9 @@ "direction": "column", "justify": "space-between", "style": { - "gap": "10px", + "gap": "var(--space-sm)", "overflow": "visible", - "padding": "10px" + "padding": "var(--space-sm)" } }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/.resources/c79490fdb200f0700c9d96f1c8745560b93d96cc14794efe71c028ba6fcd029e b/Gateways/FE/projects/.resources/1061a56c86c31f20dadbf6ef6bf5f21c34d758a384189c2e8c9263cc9ec6fc53 similarity index 99% rename from Gateways/FE/projects/.resources/c79490fdb200f0700c9d96f1c8745560b93d96cc14794efe71c028ba6fcd029e rename to Gateways/FE/projects/.resources/1061a56c86c31f20dadbf6ef6bf5f21c34d758a384189c2e8c9263cc9ec6fc53 index 952b565..f275c31 100644 --- a/Gateways/FE/projects/.resources/c79490fdb200f0700c9d96f1c8745560b93d96cc14794efe71c028ba6fcd029e +++ b/Gateways/FE/projects/.resources/1061a56c86c31f20dadbf6ef6bf5f21c34d758a384189c2e8c9263cc9ec6fc53 @@ -1,6 +1,6 @@ { "custom": { - "global": 75 + "global": null }, "params": { "pageId": "" diff --git a/Gateways/FE/projects/.resources/10e1485f9b58807c99ed38d0f940b27e3fe13a319d468042d0faceb2a043b357 b/Gateways/FE/projects/.resources/10e1485f9b58807c99ed38d0f940b27e3fe13a319d468042d0faceb2a043b357 new file mode 100644 index 0000000..ff3cbba --- /dev/null +++ b/Gateways/FE/projects/.resources/10e1485f9b58807c99ed38d0f940b27e3fe13a319d468042d0faceb2a043b357 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "PID_Loop", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/PID_Loop" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/10ff9522d3988d84cad094037643eca198321824f61bd34e184bc673235c7ad3 b/Gateways/FE/projects/.resources/10ff9522d3988d84cad094037643eca198321824f61bd34e184bc673235c7ad3 deleted file mode 100644 index bf04acb..0000000 Binary files a/Gateways/FE/projects/.resources/10ff9522d3988d84cad094037643eca198321824f61bd34e184bc673235c7ad3 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/11476099d1cdd4cc97e46dd7597cd679628264bba50b344446bd68cb968dba02 b/Gateways/FE/projects/.resources/11476099d1cdd4cc97e46dd7597cd679628264bba50b344446bd68cb968dba02 deleted file mode 100644 index f9db101..0000000 --- a/Gateways/FE/projects/.resources/11476099d1cdd4cc97e46dd7597cd679628264bba50b344446bd68cb968dba02 +++ /dev/null @@ -1,430 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_DS-1A1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t#histprov:MSSQL_Server:/drv:ignition-satb1-io6:default:/tag:yard/satb1_yard_ds-1b1/breaker open way 01\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1744233841621 - ], - "$ts": 1744271940000 - }, - "rangeSelectorPen": "histprov:MSSQL_Server:/drv:ignition-satb1-io6:default:/tag:yard/satb1_yard_ds-1b1/breaker open way 01", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1744233827719 - ], - "$ts": 1744039359000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - } - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947885209 - ], - "$ts": 1744271940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:MSSQL_Server:/drv:ignition-satb1-io6:default:/tag:yard/satb1_yard_ds-1b1/breaker open way 01", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947885209 - ], - "$ts": 1744039359000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/11d89d0f1a341038b2ff84182422b1b0fdb25b8034a45d3d81947abc5774fc50 b/Gateways/FE/projects/.resources/11d89d0f1a341038b2ff84182422b1b0fdb25b8034a45d3d81947abc5774fc50 new file mode 100644 index 0000000..e7a1869 Binary files /dev/null and b/Gateways/FE/projects/.resources/11d89d0f1a341038b2ff84182422b1b0fdb25b8034a45d3d81947abc5774fc50 differ diff --git a/Gateways/FE/projects/.resources/11e9fe858ea4c57099fa80245496e714945f321cae291b32711cc6b0bf8ddfc2 b/Gateways/FE/projects/.resources/11e9fe858ea4c57099fa80245496e714945f321cae291b32711cc6b0bf8ddfc2 new file mode 100644 index 0000000..7b93152 Binary files /dev/null and b/Gateways/FE/projects/.resources/11e9fe858ea4c57099fa80245496e714945f321cae291b32711cc6b0bf8ddfc2 differ diff --git a/Gateways/FE/projects/.resources/12298482a56acabbb02a71d3421f62c1db79388cf2e059e5481adca358085951 b/Gateways/FE/projects/.resources/12298482a56acabbb02a71d3421f62c1db79388cf2e059e5481adca358085951 deleted file mode 100644 index 672351d..0000000 Binary files a/Gateways/FE/projects/.resources/12298482a56acabbb02a71d3421f62c1db79388cf2e059e5481adca358085951 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/596fc963bf2a7f2a35892f22455090972ee44a901039014e2eb8138fce0f060c b/Gateways/FE/projects/.resources/1281e8d9b811b421fbb006173b19d7d74c86405a9962911d53087a5907193761 similarity index 99% rename from Gateways/FE/projects/.resources/596fc963bf2a7f2a35892f22455090972ee44a901039014e2eb8138fce0f060c rename to Gateways/FE/projects/.resources/1281e8d9b811b421fbb006173b19d7d74c86405a9962911d53087a5907193761 index 1914fb3..5643603 100644 --- a/Gateways/FE/projects/.resources/596fc963bf2a7f2a35892f22455090972ee44a901039014e2eb8138fce0f060c +++ b/Gateways/FE/projects/.resources/1281e8d9b811b421fbb006173b19d7d74c86405a9962911d53087a5907193761 @@ -82,7 +82,8 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { diff --git a/Gateways/FE/projects/.resources/1421fe17fa194d0a5a368c9b665a0c6f80f544ba400e769bf57ff8230b4a8c70 b/Gateways/FE/projects/.resources/1421fe17fa194d0a5a368c9b665a0c6f80f544ba400e769bf57ff8230b4a8c70 new file mode 100644 index 0000000..ba20a79 Binary files /dev/null and b/Gateways/FE/projects/.resources/1421fe17fa194d0a5a368c9b665a0c6f80f544ba400e769bf57ff8230b4a8c70 differ diff --git a/Gateways/FE/projects/.resources/1551514114e34ee3ab18dc9604b50ecd03b0fc6533ed1308716082bac14016b9 b/Gateways/FE/projects/.resources/1551514114e34ee3ab18dc9604b50ecd03b0fc6533ed1308716082bac14016b9 deleted file mode 100644 index c882d93..0000000 Binary files a/Gateways/FE/projects/.resources/1551514114e34ee3ab18dc9604b50ecd03b0fc6533ed1308716082bac14016b9 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/16b8aa7c24a18ea42c3843fb1d30115b31b18c107598acf647673db0fa03bcc3 b/Gateways/FE/projects/.resources/16b8aa7c24a18ea42c3843fb1d30115b31b18c107598acf647673db0fa03bcc3 deleted file mode 100644 index c5f2965..0000000 Binary files a/Gateways/FE/projects/.resources/16b8aa7c24a18ea42c3843fb1d30115b31b18c107598acf647673db0fa03bcc3 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/170b13cea518b8774706651dc09edda6461750dd8cde80cec9ee28281aaf5f83 b/Gateways/FE/projects/.resources/170b13cea518b8774706651dc09edda6461750dd8cde80cec9ee28281aaf5f83 deleted file mode 100644 index 185855f..0000000 Binary files a/Gateways/FE/projects/.resources/170b13cea518b8774706651dc09edda6461750dd8cde80cec9ee28281aaf5f83 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/174f563910c55542bc5b1fcf997273b8ff4306f2fc9350b2b1c5e915690a35d0 b/Gateways/FE/projects/.resources/174f563910c55542bc5b1fcf997273b8ff4306f2fc9350b2b1c5e915690a35d0 deleted file mode 100644 index bfafe50..0000000 --- a/Gateways/FE/projects/.resources/174f563910c55542bc5b1fcf997273b8ff4306f2fc9350b2b1c5e915690a35d0 +++ /dev/null @@ -1,555 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cold Aisle Space Humidity", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Cold Aisle Space Humidity" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cold Aisle Space Temperature", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Cold Aisle Space Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Hot Aisle Differential Pressure", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Hot Aisle Differential Pressure" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Hot Aisle Space Temperature", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Hot Aisle Space Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Space Dew Point Setpoint", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Space Dew Point Setpoint" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Space Differential Pressure", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Space Differential Pressure" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947899741 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947899741 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/1860555b3ee822aee5b581d260a6041de81c7d6557bf145f884591f0a8f03ea2 b/Gateways/FE/projects/.resources/1860555b3ee822aee5b581d260a6041de81c7d6557bf145f884591f0a8f03ea2 deleted file mode 100644 index 51e8716..0000000 Binary files a/Gateways/FE/projects/.resources/1860555b3ee822aee5b581d260a6041de81c7d6557bf145f884591f0a8f03ea2 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/18bb9bb490d81251523019810e84246782afeec65cea2e1e2d91d0d165cc9db6 b/Gateways/FE/projects/.resources/18bb9bb490d81251523019810e84246782afeec65cea2e1e2d91d0d165cc9db6 deleted file mode 100644 index e4e1728..0000000 Binary files a/Gateways/FE/projects/.resources/18bb9bb490d81251523019810e84246782afeec65cea2e1e2d91d0d165cc9db6 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/71d56862123d5c0517ee4a74e07dbde73ad69caf577a770ed74b4b9e345ef843 b/Gateways/FE/projects/.resources/19c28ab168425b04a1a94e9fb2368608ed73707f5afe79d863d55c00c5d40761 similarity index 95% rename from Gateways/FE/projects/.resources/71d56862123d5c0517ee4a74e07dbde73ad69caf577a770ed74b4b9e345ef843 rename to Gateways/FE/projects/.resources/19c28ab168425b04a1a94e9fb2368608ed73707f5afe79d863d55c00c5d40761 index c63ec27..6659690 100644 --- a/Gateways/FE/projects/.resources/71d56862123d5c0517ee4a74e07dbde73ad69caf577a770ed74b4b9e345ef843 +++ b/Gateways/FE/projects/.resources/19c28ab168425b04a1a94e9fb2368608ed73707f5afe79d863d55c00c5d40761 @@ -169,20 +169,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -271,16 +264,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -471,7 +459,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 2 + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/1a60ebb4d892c93a3cce2b58b1f7db8e864743f120d6586bb179200990360496 b/Gateways/FE/projects/.resources/1a60ebb4d892c93a3cce2b58b1f7db8e864743f120d6586bb179200990360496 deleted file mode 100644 index d114f04..0000000 --- a/Gateways/FE/projects/.resources/1a60ebb4d892c93a3cce2b58b1f7db8e864743f120d6586bb179200990360496 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \"\",\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948474968 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948474968 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/6a8284fb1584a75b6af044792a6cc16be70736e297ca048c959380b2dfe48bb5 b/Gateways/FE/projects/.resources/1a953642b0319fd63aa743bf936f0a7d07006b4e0e222454af929edc9e7b48a3 similarity index 96% rename from Gateways/FE/projects/.resources/6a8284fb1584a75b6af044792a6cc16be70736e297ca048c959380b2dfe48bb5 rename to Gateways/FE/projects/.resources/1a953642b0319fd63aa743bf936f0a7d07006b4e0e222454af929edc9e7b48a3 index 92dbed9..024f2aa 100644 --- a/Gateways/FE/projects/.resources/6a8284fb1584a75b6af044792a6cc16be70736e297ca048c959380b2dfe48bb5 +++ b/Gateways/FE/projects/.resources/1a953642b0319fd63aa743bf936f0a7d07006b4e0e222454af929edc9e7b48a3 @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "ATS", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/ATS" + "objectName": "VAV", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VAV" }, "propConfig": { "custom.tabsConfig": { @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -200,6 +193,14 @@ "type": "expr" } }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, "props.params.tagPath": { "binding": { "config": { @@ -258,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -330,6 +326,14 @@ "type": "expr" } }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, "props.params.tagPath": { "binding": { "config": { @@ -381,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 1 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/1c0f518632e1ecd158641841501ac7708064d7f8f7bf112faddae6ca0f0c199e b/Gateways/FE/projects/.resources/1c0f518632e1ecd158641841501ac7708064d7f8f7bf112faddae6ca0f0c199e new file mode 100644 index 0000000..c46cc02 Binary files /dev/null and b/Gateways/FE/projects/.resources/1c0f518632e1ecd158641841501ac7708064d7f8f7bf112faddae6ca0f0c199e differ diff --git a/Gateways/FE/projects/.resources/f918cc37e42df733e6715a2b38df5d0502c3cda15db32cf583b9eb05af91f3f7 b/Gateways/FE/projects/.resources/1c54119dc9862a073855f816cbf1f1eb2e81c376d18f012d60792a7b7b5bfa30 similarity index 92% rename from Gateways/FE/projects/.resources/f918cc37e42df733e6715a2b38df5d0502c3cda15db32cf583b9eb05af91f3f7 rename to Gateways/FE/projects/.resources/1c54119dc9862a073855f816cbf1f1eb2e81c376d18f012d60792a7b7b5bfa30 index a6606f3..f0394f9 100644 --- a/Gateways/FE/projects/.resources/f918cc37e42df733e6715a2b38df5d0502c3cda15db32cf583b9eb05af91f3f7 +++ b/Gateways/FE/projects/.resources/1c54119dc9862a073855f816cbf1f1eb2e81c376d18f012d60792a7b7b5bfa30 @@ -37,8 +37,8 @@ }, "props": { "defaultSize": { - "height": 1896, - "width": 2694 + "height": 1901, + "width": 2836 } }, "root": { @@ -51,7 +51,7 @@ "height": 1447, "width": 1983, "x": 39.56, - "y": -15.31 + "y": 87.69 }, "props": { "elements": [ @@ -298,8 +298,8 @@ "position": { "height": 69, "width": 121, - "x": 436.01, - "y": 171.3 + "x": 436, + "y": 274.3 }, "props": { "params": { @@ -322,7 +322,7 @@ "height": 69, "width": 120, "x": 587.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -345,7 +345,7 @@ "height": 69, "width": 120, "x": 737.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -368,7 +368,7 @@ "height": 69, "width": 120, "x": 887.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -391,7 +391,7 @@ "height": 69, "width": 120, "x": 1037.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -414,7 +414,7 @@ "height": 69, "width": 120, "x": 1187.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -437,7 +437,7 @@ "height": 69, "width": 120, "x": 1337.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -460,7 +460,7 @@ "height": 69, "width": 120, "x": 1487.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -483,7 +483,7 @@ "height": 69, "width": 120, "x": 1637.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -506,7 +506,7 @@ "height": 69, "width": 120, "x": 1787.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -528,8 +528,8 @@ "position": { "height": 69, "width": 120, - "x": 436.01, - "y": 1104 + "x": 436, + "y": 1207 }, "props": { "params": { @@ -552,7 +552,7 @@ "height": 69, "width": 120, "x": 586.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -575,7 +575,7 @@ "height": 69, "width": 120, "x": 736.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -598,7 +598,7 @@ "height": 69, "width": 120, "x": 886.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -621,7 +621,7 @@ "height": 69, "width": 120, "x": 1036.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -644,7 +644,7 @@ "height": 69, "width": 120, "x": 1186.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -667,7 +667,7 @@ "height": 69, "width": 120, "x": 1336.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -690,7 +690,7 @@ "height": 69, "width": 120, "x": 1486.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -713,7 +713,7 @@ "height": 69, "width": 120, "x": 1636.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -736,7 +736,7 @@ "height": 69, "width": 120, "x": 1786.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -762,7 +762,7 @@ }, "width": 165, "x": 1781.71, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -788,7 +788,7 @@ }, "width": 165, "x": 446.72, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -811,7 +811,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -836,7 +836,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -861,7 +861,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -886,7 +886,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -911,7 +911,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -936,7 +936,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -961,7 +961,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -986,7 +986,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -1011,7 +1011,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -1036,7 +1036,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1061,7 +1061,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1086,7 +1086,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1111,7 +1111,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1136,7 +1136,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1161,7 +1161,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1186,7 +1186,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1211,7 +1211,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1236,7 +1236,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1261,7 +1261,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1286,7 +1286,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1311,7 +1311,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1336,7 +1336,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1361,7 +1361,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1386,7 +1386,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1411,7 +1411,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1436,7 +1436,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1461,7 +1461,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1486,7 +1486,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1511,7 +1511,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1536,7 +1536,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1561,7 +1561,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1586,7 +1586,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1611,7 +1611,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1636,7 +1636,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1661,7 +1661,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1686,7 +1686,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1711,7 +1711,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1736,7 +1736,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1761,7 +1761,7 @@ "height": 85, "width": 72, "x": 1912.39, - "y": 1122.44 + "y": 1225.44 }, "props": { "params": { @@ -1786,7 +1786,7 @@ "height": 88, "width": 79, "x": 364.36, - "y": 128.135 + "y": 231.135 }, "props": { "params": { @@ -1812,7 +1812,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -1837,7 +1837,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1865,7 +1865,7 @@ }, "width": 72, "x": 450.04, - "y": 287.032 + "y": 390.032 }, "propConfig": { "props.params.SP": { @@ -1900,7 +1900,7 @@ }, "width": 72, "x": 522.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -1941,7 +1941,7 @@ }, "width": 72, "x": 666.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -1982,7 +1982,7 @@ }, "width": 72, "x": 594.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2017,7 +2017,7 @@ }, "width": 72, "x": 810.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2059,7 +2059,7 @@ }, "width": 72, "x": 738.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2094,7 +2094,7 @@ }, "width": 72, "x": 954.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2135,7 +2135,7 @@ }, "width": 72, "x": 882.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2170,7 +2170,7 @@ }, "width": 72, "x": 1099.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2211,7 +2211,7 @@ }, "width": 72, "x": 1026.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2246,7 +2246,7 @@ }, "width": 72, "x": 1242.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2287,7 +2287,7 @@ }, "width": 72, "x": 1170.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2322,7 +2322,7 @@ }, "width": 72, "x": 1386.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2363,7 +2363,7 @@ }, "width": 72, "x": 1314.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2398,7 +2398,7 @@ }, "width": 72, "x": 1530.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2439,7 +2439,7 @@ }, "width": 72, "x": 1458.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2474,7 +2474,7 @@ }, "width": 72, "x": 1602.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2509,7 +2509,7 @@ }, "width": 72, "x": 1674.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2550,7 +2550,7 @@ }, "width": 72, "x": 1746.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2585,7 +2585,7 @@ }, "width": 72, "x": 1818.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2626,7 +2626,7 @@ }, "width": 72, "x": 452.04, - "y": 696.932 + "y": 799.932 }, "propConfig": { "props.params.SP": { @@ -2661,7 +2661,7 @@ }, "width": 72, "x": 524.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2702,7 +2702,7 @@ }, "width": 72, "x": 668.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2743,7 +2743,7 @@ }, "width": 72, "x": 596.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2778,7 +2778,7 @@ }, "width": 72, "x": 812.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2819,7 +2819,7 @@ }, "width": 72, "x": 740.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2854,7 +2854,7 @@ }, "width": 72, "x": 956.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2895,7 +2895,7 @@ }, "width": 72, "x": 884.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2930,7 +2930,7 @@ }, "width": 72, "x": 1100.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2971,7 +2971,7 @@ }, "width": 72, "x": 1028.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3006,7 +3006,7 @@ }, "width": 72, "x": 1244.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3047,7 +3047,7 @@ }, "width": 72, "x": 1172.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3082,7 +3082,7 @@ }, "width": 72, "x": 1388.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3123,7 +3123,7 @@ }, "width": 72, "x": 1316.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3158,7 +3158,7 @@ }, "width": 72, "x": 1532.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3199,7 +3199,7 @@ }, "width": 72, "x": 1460.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3234,7 +3234,7 @@ }, "width": 72, "x": 1676.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3275,7 +3275,7 @@ }, "width": 72, "x": 1604.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3310,7 +3310,7 @@ }, "width": 72, "x": 1748.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3345,7 +3345,7 @@ }, "width": 72, "x": 1820.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3386,7 +3386,7 @@ }, "width": 72, "x": 1890.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -3421,7 +3421,7 @@ }, "width": 72, "x": 1892.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3445,27 +3445,6 @@ }, "type": "ia.display.view" }, - { - "meta": { - "name": "DH controls" - }, - "position": { - "height": 1000, - "width": 350, - "x": 2047.01, - "y": 23.8426 - }, - "props": { - "params": { - "dh": 201 - }, - "path": "Library/Cards/Card_DH_Control", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, { "meta": { "name": "Transmitter_105" @@ -3474,7 +3453,7 @@ "height": 37, "width": 77, "x": 414.49, - "y": 651.2 + "y": 754.2 }, "props": { "params": { @@ -3499,7 +3478,7 @@ "height": 172, "width": 145, "x": 160.97, - "y": 45.9924 + "y": 148.9924 }, "props": { "params": { @@ -3525,7 +3504,7 @@ }, "width": 165, "x": 889.71, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -3551,7 +3530,7 @@ }, "width": 165, "x": 1334.71, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -3574,7 +3553,7 @@ "height": 94, "width": 84, "x": 302.95, - "y": 333.908 + "y": 436.908 }, "props": { "params": { @@ -3600,7 +3579,7 @@ "height": 17, "width": 1521, "x": 434.92, - "y": 147.8 + "y": 250.8 }, "props": { "params": { @@ -3626,7 +3605,7 @@ "height": 17, "width": 1498, "x": 410.01, - "y": 1177 + "y": 1280 }, "props": { "params": { @@ -3660,7 +3639,7 @@ "height": 74, "width": 99, "x": 1134.01, - "y": 52 + "y": 155 }, "props": { "params": { @@ -3686,7 +3665,7 @@ }, "width": 99, "x": 1133.01, - "y": 1214 + "y": 1317 }, "props": { "params": { @@ -3709,7 +3688,7 @@ "height": 37, "width": 77, "x": 386.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3734,7 +3713,7 @@ "height": 37, "width": 77, "x": 385.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3759,7 +3738,7 @@ "height": 37, "width": 77, "x": 475.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3784,7 +3763,7 @@ "height": 37, "width": 77, "x": 475.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3809,7 +3788,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3834,7 +3813,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3859,7 +3838,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3884,7 +3863,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3909,7 +3888,7 @@ "height": 37, "width": 77, "x": 60.56, - "y": 600.0260004882813 + "y": 703.026 }, "props": { "params": { @@ -3934,7 +3913,7 @@ "height": 86, "width": 154, "x": 169.86, - "y": 379.045 + "y": 482.045 }, "props": { "params": { @@ -3954,7 +3933,7 @@ "height": 70, "width": 140, "x": 170.01, - "y": 325.145 + "y": 428.145 }, "props": { "params": { @@ -3974,7 +3953,7 @@ "height": 37, "width": 77, "x": 386.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -3999,7 +3978,7 @@ "height": 37, "width": 77, "x": 476.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -4024,7 +4003,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -4049,7 +4028,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -4074,7 +4053,7 @@ "height": 37, "width": 77, "x": 385.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4099,7 +4078,7 @@ "height": 37, "width": 77, "x": 475.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4124,7 +4103,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4149,7 +4128,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4174,7 +4153,7 @@ "height": 37, "width": 77, "x": 8.55948, - "y": 428.0780162353516 + "y": 531.078 }, "props": { "params": { @@ -4190,6 +4169,236 @@ } }, "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_19" + }, + "position": { + "height": 69, + "width": 121, + "x": 435.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU01" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_20" + }, + "position": { + "height": 69, + "width": 120, + "x": 586.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU03" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_21" + }, + "position": { + "height": 69, + "width": 120, + "x": 736.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU05" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_22" + }, + "position": { + "height": 69, + "width": 120, + "x": 886.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU07" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_23" + }, + "position": { + "height": 69, + "width": 120, + "x": 1036.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU09" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_24" + }, + "position": { + "height": 69, + "width": 120, + "x": 1186.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU11" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_25" + }, + "position": { + "height": 69, + "width": 120, + "x": 1336.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU13" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_26" + }, + "position": { + "height": 69, + "width": 120, + "x": 1486.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU15" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_27" + }, + "position": { + "height": 69, + "width": 120, + "x": 1636.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU17" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_28" + }, + "position": { + "height": 69, + "width": 120, + "x": 1786.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU19" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" } ], "meta": { diff --git a/Gateways/FE/projects/.resources/1cf45f39ae6001eb9a8b32d72d655aca2525228da99f8cb5055159ea7ac0216f b/Gateways/FE/projects/.resources/1cf45f39ae6001eb9a8b32d72d655aca2525228da99f8cb5055159ea7ac0216f new file mode 100644 index 0000000..44fc270 --- /dev/null +++ b/Gateways/FE/projects/.resources/1cf45f39ae6001eb9a8b32d72d655aca2525228da99f8cb5055159ea7ac0216f @@ -0,0 +1,126 @@ +{ + "custom": { + "target": "/DH201", + "zoom": 100 + }, + "params": { + "pageId": "value" + }, + "propConfig": { + "custom.target": { + "persistent": true + }, + "custom.zoom": { + "persistent": true + }, + "params.pageId": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "height": 984, + "width": 1400 + }, + "propConfig": { + "props.src": { + "binding": { + "config": { + "struct": { + "pageId": "{page.props.pageId}", + "target": "{view.custom.target}", + "zoom": "{view.custom.zoom}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\treturn \"http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d\" + value[\u0027target\u0027] + \"\u0026targetDetailedURL\u003d\" + value[\u0027target\u0027] + \"\u0026height\u003d175%25\u0026width\u003d175%25\u0026pageId\u003d\" + value[\u0027pageId\u0027]", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "allowFullScreen": true, + "style": { + "flex": "1 1 auto", + "minHeight": "100%", + "minWidth": "100%" + } + }, + "type": "ia.display.iframe" + } + ], + "meta": { + "name": "CoordinateContainer" + }, + "position": { + "basis": "820px", + "grow": 1 + }, + "props": { + "style": { + "overflow": "hidden" + } + }, + "type": "ia.container.coord" + }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "basis": "280px", + "shrink": 0 + }, + "props": { + "path": "Library/Cards/Card_DH_Control", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "eqPopup", + "pageScope": true, + "script": "\ttagPath \u003d payload.get(\u0027tagPath\u0027)\n\tobjectName \u003d payload.get(\u0027objectName\u0027)\n\t\n\tparams \u003d {\n\t\t\"tagPath\": tagPath,\n\t\t\"objectName\": objectName\n\t}\n\t\n\tsystem.perspective.openPopup(\n\t\tid \u003d \"Popup_\" + objectName.replace(\" \", \"_\"),\n\t\tview \u003d \"Library/Templates/Base\",\n\t\tparams \u003d params,\n\t\tshowCloseIcon \u003d True,\n\t\tresizable \u003d True,\n\t\tdraggable \u003d True,\n\t\tmodal \u003d False,\n\t\twidth \u003d 800,\n\t\theight \u003d 835\n\t)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/1d44dcf505d2db7d586702b92527e4e376483f02230889317e25daf330b64a2b b/Gateways/FE/projects/.resources/1d44dcf505d2db7d586702b92527e4e376483f02230889317e25daf330b64a2b deleted file mode 100644 index 019aff1..0000000 Binary files a/Gateways/FE/projects/.resources/1d44dcf505d2db7d586702b92527e4e376483f02230889317e25daf330b64a2b and /dev/null differ diff --git a/Gateways/FE/projects/.resources/1d81a10d0ff617610a480311db2fc1358fbeeb3de40894fa3d2dc1ca890da1f9 b/Gateways/FE/projects/.resources/1d81a10d0ff617610a480311db2fc1358fbeeb3de40894fa3d2dc1ca890da1f9 new file mode 100644 index 0000000..611b737 Binary files /dev/null and b/Gateways/FE/projects/.resources/1d81a10d0ff617610a480311db2fc1358fbeeb3de40894fa3d2dc1ca890da1f9 differ diff --git a/Gateways/FE/projects/.resources/3159b9da2db23aaf67de20cba7e22f43305c439fd8aada8ce363598406a508cf b/Gateways/FE/projects/.resources/1e1548b3180d1c7c5a82e989ce5657857332a76ee7cc44e7f466310a101ee9c5 similarity index 99% rename from Gateways/FE/projects/.resources/3159b9da2db23aaf67de20cba7e22f43305c439fd8aada8ce363598406a508cf rename to Gateways/FE/projects/.resources/1e1548b3180d1c7c5a82e989ce5657857332a76ee7cc44e7f466310a101ee9c5 index f1fc78b..47e6c8a 100644 --- a/Gateways/FE/projects/.resources/3159b9da2db23aaf67de20cba7e22f43305c439fd8aada8ce363598406a508cf +++ b/Gateways/FE/projects/.resources/1e1548b3180d1c7c5a82e989ce5657857332a76ee7cc44e7f466310a101ee9c5 @@ -179,7 +179,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 4 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/1e20e7727ad6424cfdb3c996c728ef93277f2d3652b771886d2cc34796ca206d b/Gateways/FE/projects/.resources/1e20e7727ad6424cfdb3c996c728ef93277f2d3652b771886d2cc34796ca206d deleted file mode 100644 index 8c7e6c0..0000000 Binary files a/Gateways/FE/projects/.resources/1e20e7727ad6424cfdb3c996c728ef93277f2d3652b771886d2cc34796ca206d and /dev/null differ diff --git a/Gateways/FE/projects/.resources/1e9ad448ba4d9752c748900c35a6c02f6f71c8767ab866b3da9d8c4547661cb2 b/Gateways/FE/projects/.resources/1e9ad448ba4d9752c748900c35a6c02f6f71c8767ab866b3da9d8c4547661cb2 new file mode 100644 index 0000000..3bca727 Binary files /dev/null and b/Gateways/FE/projects/.resources/1e9ad448ba4d9752c748900c35a6c02f6f71c8767ab866b3da9d8c4547661cb2 differ diff --git a/Gateways/FE/projects/.resources/1f67947f0e170ae0b6270c03d46b336ed9eca3b1e21b74b870bfcfe8c8b39abb b/Gateways/FE/projects/.resources/1f67947f0e170ae0b6270c03d46b336ed9eca3b1e21b74b870bfcfe8c8b39abb new file mode 100644 index 0000000..fd6ff1b --- /dev/null +++ b/Gateways/FE/projects/.resources/1f67947f0e170ae0b6270c03d46b336ed9eca3b1e21b74b870bfcfe8c8b39abb @@ -0,0 +1,418 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "HUM", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "params": { + "tagPath_2": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_DH5_HS1_GA1182_HUM2" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/b11dd5f201424c355c32c4ba380518a31278ee81cc637d6214c487989923a686 b/Gateways/FE/projects/.resources/20a3e0ae64d2ef8f60457e4e9e4d92723c38b3d5e9d1542e838639ef6fe086e1 similarity index 97% rename from Gateways/FE/projects/.resources/b11dd5f201424c355c32c4ba380518a31278ee81cc637d6214c487989923a686 rename to Gateways/FE/projects/.resources/20a3e0ae64d2ef8f60457e4e9e4d92723c38b3d5e9d1542e838639ef6fe086e1 index 2f58278..b25f453 100644 --- a/Gateways/FE/projects/.resources/b11dd5f201424c355c32c4ba380518a31278ee81cc637d6214c487989923a686 +++ b/Gateways/FE/projects/.resources/20a3e0ae64d2ef8f60457e4e9e4d92723c38b3d5e9d1542e838639ef6fe086e1 @@ -2,15 +2,16 @@ "custom": { "Alarm": false, "AlarmSevery": 0, - "ModeSts": 5, - "RunStatus": 1, - "Status": 1, - "Tag": "CH01", + "ModeSts": 0, + "RunStatus": 0, + "Status": 3, + "Tag": "CH02", "available": 1, + "maintenance": "value", "priority": 0 }, "params": { - "CH": "01", + "CH": "02", "LLS_tagPath": "[Ignition_Common_IO_Gtwy]CHWS/Chiller_LLS/Reference Devices", "MTR_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH27_MOTOR", "SYS_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH27_SYSTEM", @@ -22,7 +23,6 @@ "config": { "path": "view.custom.AlarmSevery" }, - "enabled": false, "transforms": [ { "expression": "if({value}\u003e0, True, False)", @@ -156,6 +156,9 @@ }, "persistent": true }, + "custom.maintenance": { + "persistent": true + }, "custom.priority": { "binding": { "config": { @@ -201,7 +204,7 @@ }, "props": { "defaultSize": { - "height": 65, + "height": 60, "width": 50 } }, @@ -214,7 +217,7 @@ "name": "Label" }, "position": { - "height": 65, + "height": 60, "width": 50 }, "propConfig": { @@ -304,9 +307,6 @@ "borderTopRightRadius": 5, "boxShadow": "var(--boxShadow2)", "classes": "containers/HoverOver", - "outlineColor": "#000000", - "outlineStyle": "none", - "outlineWidth": "1", "paddingLeft": 2 }, "textStyle": { @@ -321,7 +321,7 @@ "name": "Label_0" }, "position": { - "height": 28, + "height": 26, "width": 42.98, "x": 4.07, "y": 12.72 @@ -395,11 +395,10 @@ "name": "EmbeddedView" }, "position": { - "basis": "320px", "height": 20, "width": 20, "x": 4, - "y": 42 + "y": 40 }, "props": { "path": "Library/Framework/Frwk_Badge_XS", @@ -419,7 +418,7 @@ "height": 20, "width": 20, "x": 26, - "y": 42 + "y": 40 }, "props": { "params": { diff --git a/Gateways/FE/projects/.resources/20e84c55561eaa7762e0474e98e1f55566fa954a609da580add3a15725b664bd b/Gateways/FE/projects/.resources/20e84c55561eaa7762e0474e98e1f55566fa954a609da580add3a15725b664bd new file mode 100644 index 0000000..9107efb Binary files /dev/null and b/Gateways/FE/projects/.resources/20e84c55561eaa7762e0474e98e1f55566fa954a609da580add3a15725b664bd differ diff --git a/Gateways/FE/projects/.resources/21893b20cc06e66c5b019f863887d3f5afbfbf0cbb4b185bc259e599e9bb1e2d b/Gateways/FE/projects/.resources/21893b20cc06e66c5b019f863887d3f5afbfbf0cbb4b185bc259e599e9bb1e2d deleted file mode 100644 index f1bcc59..0000000 Binary files a/Gateways/FE/projects/.resources/21893b20cc06e66c5b019f863887d3f5afbfbf0cbb4b185bc259e599e9bb1e2d and /dev/null differ diff --git a/Gateways/FE/projects/.resources/218d9e96e6a7091df541242a5aad137fa9a7b199b2f6f9502476bccbc455253b b/Gateways/FE/projects/.resources/218d9e96e6a7091df541242a5aad137fa9a7b199b2f6f9502476bccbc455253b new file mode 100644 index 0000000..9b1328b Binary files /dev/null and b/Gateways/FE/projects/.resources/218d9e96e6a7091df541242a5aad137fa9a7b199b2f6f9502476bccbc455253b differ diff --git a/Gateways/FE/projects/.resources/21b9addbbde2f059ccce25e6f67af84b4fd57ab01cca835c4b666008d5503698 b/Gateways/FE/projects/.resources/21b9addbbde2f059ccce25e6f67af84b4fd57ab01cca835c4b666008d5503698 new file mode 100644 index 0000000..9126dc1 Binary files /dev/null and b/Gateways/FE/projects/.resources/21b9addbbde2f059ccce25e6f67af84b4fd57ab01cca835c4b666008d5503698 differ diff --git a/Gateways/FE/projects/.resources/224bc130aedaf33af211e6c93fd552073678c83c633156dc984b4bcb79b9fbcc b/Gateways/FE/projects/.resources/224bc130aedaf33af211e6c93fd552073678c83c633156dc984b4bcb79b9fbcc new file mode 100644 index 0000000..ef658e8 Binary files /dev/null and b/Gateways/FE/projects/.resources/224bc130aedaf33af211e6c93fd552073678c83c633156dc984b4bcb79b9fbcc differ diff --git a/Gateways/FE/projects/.resources/22ef4f7f385d579d9d9a4b69e9f4468a4044cc3d9a7dc63d25b2bbb990a12073 b/Gateways/FE/projects/.resources/22ef4f7f385d579d9d9a4b69e9f4468a4044cc3d9a7dc63d25b2bbb990a12073 deleted file mode 100644 index de3d969..0000000 Binary files a/Gateways/FE/projects/.resources/22ef4f7f385d579d9d9a4b69e9f4468a4044cc3d9a7dc63d25b2bbb990a12073 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/23cec89a33c27d455a983307923f990fcd842be4569029672a03c289056acf74 b/Gateways/FE/projects/.resources/23cec89a33c27d455a983307923f990fcd842be4569029672a03c289056acf74 new file mode 100644 index 0000000..c94e088 Binary files /dev/null and b/Gateways/FE/projects/.resources/23cec89a33c27d455a983307923f990fcd842be4569029672a03c289056acf74 differ diff --git a/Gateways/FE/projects/.resources/41dff8a7a213e8a7e93537c006e1cafa9739411eb286485cac09ab30339d207d b/Gateways/FE/projects/.resources/247733f6d49fdee0f4611b5f592f0c0cef6ca9f21a1ea6c4d7c6f9bf909572d2 similarity index 95% rename from Gateways/FE/projects/.resources/41dff8a7a213e8a7e93537c006e1cafa9739411eb286485cac09ab30339d207d rename to Gateways/FE/projects/.resources/247733f6d49fdee0f4611b5f592f0c0cef6ca9f21a1ea6c4d7c6f9bf909572d2 index a3a576f..980d79e 100644 --- a/Gateways/FE/projects/.resources/41dff8a7a213e8a7e93537c006e1cafa9739411eb286485cac09ab30339d207d +++ b/Gateways/FE/projects/.resources/247733f6d49fdee0f4611b5f592f0c0cef6ca9f21a1ea6c4d7c6f9bf909572d2 @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,6 +389,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, + "currentTabIndex": 3, "tabs": [ "Status", "Config", diff --git a/Gateways/FE/projects/.resources/25a43aceff3a3c9cf3ec95b020998c0d42dbed268cb29da5a9850b255e478d01 b/Gateways/FE/projects/.resources/25a43aceff3a3c9cf3ec95b020998c0d42dbed268cb29da5a9850b255e478d01 new file mode 100644 index 0000000..5edd314 Binary files /dev/null and b/Gateways/FE/projects/.resources/25a43aceff3a3c9cf3ec95b020998c0d42dbed268cb29da5a9850b255e478d01 differ diff --git a/Gateways/FE/projects/.resources/bcc18a50299eb9aa8695b847f0fe465cc111fc0a0c104dd7453b1b4a435a45b9 b/Gateways/FE/projects/.resources/26034633e1a31d64940d59b87f02e89924272de8862e55df859b9b3bad181df9 similarity index 92% rename from Gateways/FE/projects/.resources/bcc18a50299eb9aa8695b847f0fe465cc111fc0a0c104dd7453b1b4a435a45b9 rename to Gateways/FE/projects/.resources/26034633e1a31d64940d59b87f02e89924272de8862e55df859b9b3bad181df9 index c07ce2d..213440c 100644 --- a/Gateways/FE/projects/.resources/bcc18a50299eb9aa8695b847f0fe465cc111fc0a0c104dd7453b1b4a435a45b9 +++ b/Gateways/FE/projects/.resources/26034633e1a31d64940d59b87f02e89924272de8862e55df859b9b3bad181df9 @@ -10,7 +10,7 @@ }, "props": { "defaultSize": { - "width": 240 + "width": 220 } }, "root": { @@ -344,7 +344,7 @@ { "data": { "GoTo": "/CHW_System", - "target": "Library/Layouts/iFrame/Main", + "target": "Pages/Mechanical/CHW_System", "zoom": "130%" }, "expanded": false, @@ -364,9 +364,9 @@ "items": [ { "data": { - "GoTo": "/DH101", - "target": "Library/Layouts/iFrame/Main", - "zoom": "143%" + "GoTo": "", + "target": "Development/testiframe", + "zoom": "" }, "expanded": false, "items": [], @@ -384,9 +384,9 @@ }, { "data": { - "GoTo": "/DH201", - "target": "Library/Layouts/iFrame/Main", - "zoom": "150%" + "GoTo": "DH201", + "target": "Library/Layouts/DH_L2", + "zoom": 100 }, "expanded": false, "items": [], @@ -433,8 +433,8 @@ "items": [ { "data": { - "GoTo": "", - "target": "Pages/HVAC/DOAS", + "GoTo": "DOAS", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -443,8 +443,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/RTU", + "GoTo": "RTU", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -453,8 +453,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/CRAH", + "GoTo": "CRAH", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -463,8 +463,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/STU", + "GoTo": "STU", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -473,8 +473,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/HUM", + "GoTo": "HUM", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -483,8 +483,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/VAV", + "GoTo": "VAV", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -493,8 +493,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/FCU", + "GoTo": "FCU", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -503,8 +503,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/EF", + "GoTo": "EF", + "target": "Library/Layouts/Equipment_L3", "zoom": "value" }, "expanded": false, @@ -513,8 +513,8 @@ }, { "data": { - "GoTo": "value", - "target": "Pages/HVAC/SP", + "GoTo": "SP", + "target": "Library/Layouts/Equipment_L3", "zoom": "value" }, "expanded": false, @@ -522,7 +522,7 @@ "label": "ESP" } ], - "label": "HVAC" + "label": "Mechanical" }, { "data": { @@ -557,8 +557,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/FireSystem/FireSystem", + "GoTo": "FS", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -1123,7 +1123,88 @@ "zoom": "" }, "expanded": false, - "items": [], + "items": [ + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Frontend" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO1" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO2" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO3" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO4" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO5" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Common IO" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "MQTT Gtwy" + } + ], "label": "Gateways" }, { @@ -1137,7 +1218,7 @@ "label": "Connections" } ], - "label": "Diagnotics \u0026 Tools" + "label": "Diagnostics \u0026 Tools" } ], "selection": [ diff --git a/Gateways/FE/projects/.resources/263c8556c383da86b001818767485e33573241746251698e6ace84c371ae36ba b/Gateways/FE/projects/.resources/263c8556c383da86b001818767485e33573241746251698e6ace84c371ae36ba new file mode 100644 index 0000000..cd80221 Binary files /dev/null and b/Gateways/FE/projects/.resources/263c8556c383da86b001818767485e33573241746251698e6ace84c371ae36ba differ diff --git a/Gateways/FE/projects/.resources/271d53d85f687e222050f00751ff7155b435db6258d1b62910d8e3d5e6e58824 b/Gateways/FE/projects/.resources/271d53d85f687e222050f00751ff7155b435db6258d1b62910d8e3d5e6e58824 new file mode 100644 index 0000000..f3336d4 Binary files /dev/null and b/Gateways/FE/projects/.resources/271d53d85f687e222050f00751ff7155b435db6258d1b62910d8e3d5e6e58824 differ diff --git a/Gateways/FE/projects/.resources/27fd6b8921f44501f3f7320e2fde43ceb72f8c67f61b135a66ad504fe48b8c9d b/Gateways/FE/projects/.resources/27fd6b8921f44501f3f7320e2fde43ceb72f8c67f61b135a66ad504fe48b8c9d new file mode 100644 index 0000000..737a158 --- /dev/null +++ b/Gateways/FE/projects/.resources/27fd6b8921f44501f3f7320e2fde43ceb72f8c67f61b135a66ad504fe48b8c9d @@ -0,0 +1,71 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 942, + "width": 1668 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "height": 928, + "width": 1356 + }, + "propConfig": { + "props.src": { + "binding": { + "config": { + "struct": { + "pageId": "{page.props.pageId}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\treturn \"http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/DH201\u0026targetDetailedURL\u003d/DH201\u0026height\u003d175%25\u0026width\u003d175%25\u0026pageId\u003d\" + value[\u0027pageId\u0027]", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "allowFullScreen": true + }, + "type": "ia.display.iframe" + }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "height": 938, + "width": 320, + "x": 1330 + }, + "props": { + "path": "Library/Cards/Card_DH_Control", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": -90, + "y": -170 + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/432106fab62a0c40396c3e421f88c4a3766d1e7585fc8aef104b3619ac9f2e0e b/Gateways/FE/projects/.resources/28079b5b1566b23fca17f467c3e82c0361f65a3428b72a6ddcd313c5a9328bc3 similarity index 95% rename from Gateways/FE/projects/.resources/432106fab62a0c40396c3e421f88c4a3766d1e7585fc8aef104b3619ac9f2e0e rename to Gateways/FE/projects/.resources/28079b5b1566b23fca17f467c3e82c0361f65a3428b72a6ddcd313c5a9328bc3 index 4aabe17..e235c12 100644 --- a/Gateways/FE/projects/.resources/432106fab62a0c40396c3e421f88c4a3766d1e7585fc8aef104b3619ac9f2e0e +++ b/Gateways/FE/projects/.resources/28079b5b1566b23fca17f467c3e82c0361f65a3428b72a6ddcd313c5a9328bc3 @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "Breaker", - "tagPath": "[Ignition_Common_IO_Gtwy]ER1151/SATB1_MPR1151_HS1_FE1" + "objectName": "SWBDPQM", + "tagPath": "[Ignition_SATB1_IO1_default]ER1242_P1-1/SWBD/SATB1_ER1242_PQM1" }, "propConfig": { "custom.tabsConfig": { @@ -113,13 +113,20 @@ }, "type": "property" } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } } }, "props": { "loading": { "order": "with-parent" - }, - "path": "Library/Templates/Breaker E/Info" + } }, "type": "ia.display.view" }, @@ -157,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +251,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +369,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/295f808bbfa096f147590c2daa55887a44d14a91a7d8277b9d0f5302def0e431 b/Gateways/FE/projects/.resources/295f808bbfa096f147590c2daa55887a44d14a91a7d8277b9d0f5302def0e431 new file mode 100644 index 0000000..f74bf2f Binary files /dev/null and b/Gateways/FE/projects/.resources/295f808bbfa096f147590c2daa55887a44d14a91a7d8277b9d0f5302def0e431 differ diff --git a/Gateways/FE/projects/.resources/2994c03353cc2eb3ae763a86610963fe129ef300967e42812b6e6205d2a91004 b/Gateways/FE/projects/.resources/2994c03353cc2eb3ae763a86610963fe129ef300967e42812b6e6205d2a91004 new file mode 100644 index 0000000..3a72b3f Binary files /dev/null and b/Gateways/FE/projects/.resources/2994c03353cc2eb3ae763a86610963fe129ef300967e42812b6e6205d2a91004 differ diff --git a/Gateways/FE/projects/.resources/2a6560ac3ef86d27496f53db16e8c2f97741982decdca759612c67cd7f4715c2 b/Gateways/FE/projects/.resources/2a6560ac3ef86d27496f53db16e8c2f97741982decdca759612c67cd7f4715c2 deleted file mode 100644 index 3564418..0000000 Binary files a/Gateways/FE/projects/.resources/2a6560ac3ef86d27496f53db16e8c2f97741982decdca759612c67cd7f4715c2 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/2b42d61bf61b199e0c76d59f324cc584e4b0d8cd189dd4c5fc77c7e509fcdf49 b/Gateways/FE/projects/.resources/2b42d61bf61b199e0c76d59f324cc584e4b0d8cd189dd4c5fc77c7e509fcdf49 deleted file mode 100644 index baf0f92..0000000 Binary files a/Gateways/FE/projects/.resources/2b42d61bf61b199e0c76d59f324cc584e4b0d8cd189dd4c5fc77c7e509fcdf49 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/2be9d1717732db55b4cf3c37030acbcff1c9c0268f1b4c709341cdf05ec52278 b/Gateways/FE/projects/.resources/2be9d1717732db55b4cf3c37030acbcff1c9c0268f1b4c709341cdf05ec52278 new file mode 100644 index 0000000..b0406df Binary files /dev/null and b/Gateways/FE/projects/.resources/2be9d1717732db55b4cf3c37030acbcff1c9c0268f1b4c709341cdf05ec52278 differ diff --git a/Gateways/FE/projects/.resources/2ca19105a09573e7996bc82f438a8f4f8d55a6eafa2fbb95aac0255f7a12eceb b/Gateways/FE/projects/.resources/2ca19105a09573e7996bc82f438a8f4f8d55a6eafa2fbb95aac0255f7a12eceb deleted file mode 100644 index c656762..0000000 Binary files a/Gateways/FE/projects/.resources/2ca19105a09573e7996bc82f438a8f4f8d55a6eafa2fbb95aac0255f7a12eceb and /dev/null differ diff --git a/Gateways/FE/projects/.resources/bc7004d272833efdb7213b3ffd00519fd839a4cc2e70e71eef2efdc16e257d02 b/Gateways/FE/projects/.resources/2ccc3f33a306d4967e12d797317c5f86ca3249bb0cd926184b355238eaadbd82 similarity index 99% rename from Gateways/FE/projects/.resources/bc7004d272833efdb7213b3ffd00519fd839a4cc2e70e71eef2efdc16e257d02 rename to Gateways/FE/projects/.resources/2ccc3f33a306d4967e12d797317c5f86ca3249bb0cd926184b355238eaadbd82 index 15b1523..d00e094 100644 --- a/Gateways/FE/projects/.resources/bc7004d272833efdb7213b3ffd00519fd839a4cc2e70e71eef2efdc16e257d02 +++ b/Gateways/FE/projects/.resources/2ccc3f33a306d4967e12d797317c5f86ca3249bb0cd926184b355238eaadbd82 @@ -67,8 +67,8 @@ def doGet(request, session): position: absolute; top: 0; left: 0; - width: 100%; - height: 100%; + width: 100vw; + height: 100vh; } #content { @@ -78,8 +78,8 @@ def doGet(request, session): top: 62px; width: 100%; /*replace-width*/ height: 100%; /*replace-height*/ - border: none; + } #overlay { diff --git a/Gateways/FE/projects/.resources/2d03ad7b6d78c1beca66f7f4fd6046c3dc83534ab95e70e86deaa2a957a63404 b/Gateways/FE/projects/.resources/2d03ad7b6d78c1beca66f7f4fd6046c3dc83534ab95e70e86deaa2a957a63404 deleted file mode 100644 index 15d0ae4..0000000 Binary files a/Gateways/FE/projects/.resources/2d03ad7b6d78c1beca66f7f4fd6046c3dc83534ab95e70e86deaa2a957a63404 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/2d143841ce026f68c6db0a865c684408d449f9327695229a9d22585498f6f893 b/Gateways/FE/projects/.resources/2d143841ce026f68c6db0a865c684408d449f9327695229a9d22585498f6f893 deleted file mode 100644 index 24a79ca..0000000 Binary files a/Gateways/FE/projects/.resources/2d143841ce026f68c6db0a865c684408d449f9327695229a9d22585498f6f893 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/2e05ef43753e34e3c77aa6c83cb8178e614b77045111b3a8a9b34b420772bae8 b/Gateways/FE/projects/.resources/2e05ef43753e34e3c77aa6c83cb8178e614b77045111b3a8a9b34b420772bae8 deleted file mode 100644 index e1e61c5..0000000 --- a/Gateways/FE/projects/.resources/2e05ef43753e34e3c77aa6c83cb8178e614b77045111b3a8a9b34b420772bae8 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/2ef3fd7df9cd49fb25adb33245ae6021c33aecfbae69178d66464af1800dcb4c b/Gateways/FE/projects/.resources/2ef3fd7df9cd49fb25adb33245ae6021c33aecfbae69178d66464af1800dcb4c deleted file mode 100644 index d758009..0000000 Binary files a/Gateways/FE/projects/.resources/2ef3fd7df9cd49fb25adb33245ae6021c33aecfbae69178d66464af1800dcb4c and /dev/null differ diff --git a/Gateways/FE/projects/.resources/2efbcdafc3511efe3b6a809b59dae29d7a10d7e269182f0eb07fd071cf8263b2 b/Gateways/FE/projects/.resources/2efbcdafc3511efe3b6a809b59dae29d7a10d7e269182f0eb07fd071cf8263b2 deleted file mode 100644 index 50335bc..0000000 --- a/Gateways/FE/projects/.resources/2efbcdafc3511efe3b6a809b59dae29d7a10d7e269182f0eb07fd071cf8263b2 +++ /dev/null @@ -1,773 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "%", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "%", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "CHW Valve Feedback", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/CHW Valve Feedback" - }, - { - "color": "", - "enabled": false, - "engUnit": "%", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Comm Percentage", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Comm Percentage" - } - ] - }, - { - "group": "% Full Speed", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "% Full Speed", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Speed Feedback", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Speed Feedback" - } - ] - }, - { - "group": "Hrs", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "Hrs", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Runtime", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Runtime" - } - ] - }, - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "CMD_Out", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/CMD_Out" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EquipCounts", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/EquipCounts" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Status Available", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Status Available" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Status Running", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Status Running" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1A", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1A" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1B", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1B" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1C", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1C" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1D", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1D" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1E", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1E" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1F", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1F" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1G", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1G" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1H", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1H" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1I", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1I" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Unit Status", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Unit Status" - } - ] - }, - { - "group": "°F", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge Air Temperature A", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Discharge Air Temperature A" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge Air Temperature B", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Discharge Air Temperature B" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge Air Temperature C", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Discharge Air Temperature C" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Return Air Temperature", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Return Air Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Return Water Temperature", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Return Water Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Water Temperature", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Water Temperature" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948508092 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948508092 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/2ff8b74eaaa9b2ca0e2cf3ce1f922861e7364ebafe21ae5ea67165394ab8a264 b/Gateways/FE/projects/.resources/2ff8b74eaaa9b2ca0e2cf3ce1f922861e7364ebafe21ae5ea67165394ab8a264 deleted file mode 100644 index fe7e824..0000000 Binary files a/Gateways/FE/projects/.resources/2ff8b74eaaa9b2ca0e2cf3ce1f922861e7364ebafe21ae5ea67165394ab8a264 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/301f2d581b06462ff0628dbffc6a36b95dfa9424e1227cfec9d185cb26fffc12 b/Gateways/FE/projects/.resources/301f2d581b06462ff0628dbffc6a36b95dfa9424e1227cfec9d185cb26fffc12 new file mode 100644 index 0000000..6f9fe28 Binary files /dev/null and b/Gateways/FE/projects/.resources/301f2d581b06462ff0628dbffc6a36b95dfa9424e1227cfec9d185cb26fffc12 differ diff --git a/Gateways/FE/projects/.resources/30b125f1b978023bc5e337db2c88e0fd0987bc5f043fed7d4901539731d83650 b/Gateways/FE/projects/.resources/30b125f1b978023bc5e337db2c88e0fd0987bc5f043fed7d4901539731d83650 deleted file mode 100644 index a83c9df..0000000 Binary files a/Gateways/FE/projects/.resources/30b125f1b978023bc5e337db2c88e0fd0987bc5f043fed7d4901539731d83650 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/30b2ef134f9f7739d3a00cd92fca6b34b3b7744815a6bcd3de9fc6195375b290 b/Gateways/FE/projects/.resources/30b2ef134f9f7739d3a00cd92fca6b34b3b7744815a6bcd3de9fc6195375b290 new file mode 100644 index 0000000..584543c Binary files /dev/null and b/Gateways/FE/projects/.resources/30b2ef134f9f7739d3a00cd92fca6b34b3b7744815a6bcd3de9fc6195375b290 differ diff --git a/Gateways/FE/projects/.resources/326f14c0d21204002ad7209e2435c1038b283744a83739eb373ac8203655307a b/Gateways/FE/projects/.resources/326f14c0d21204002ad7209e2435c1038b283744a83739eb373ac8203655307a deleted file mode 100644 index f486edf..0000000 --- a/Gateways/FE/projects/.resources/326f14c0d21204002ad7209e2435c1038b283744a83739eb373ac8203655307a +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VSD 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/5a30d1ebc0f649f69896646294ee353c73f07daa88c4aa8efb9ab08282e967df b/Gateways/FE/projects/.resources/336621d3f4afb7dc1caa3e7ef05ddc14f96fc5cbe0422e7e22e1f2bbcab937a7 similarity index 94% rename from Gateways/FE/projects/.resources/5a30d1ebc0f649f69896646294ee353c73f07daa88c4aa8efb9ab08282e967df rename to Gateways/FE/projects/.resources/336621d3f4afb7dc1caa3e7ef05ddc14f96fc5cbe0422e7e22e1f2bbcab937a7 index 1fd7637..7e986f5 100644 --- a/Gateways/FE/projects/.resources/5a30d1ebc0f649f69896646294ee353c73f07daa88c4aa8efb9ab08282e967df +++ b/Gateways/FE/projects/.resources/336621d3f4afb7dc1caa3e7ef05ddc14f96fc5cbe0422e7e22e1f2bbcab937a7 @@ -157,20 +157,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +244,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +362,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/a271ba47ad0a46bed709347ae919a01969f219f2ea51823a6f7a16a6ce6fcd54 b/Gateways/FE/projects/.resources/34960505e19a5ea1112432e5295b8af3db60d1673952b4a9542d039413ae4399 similarity index 98% rename from Gateways/FE/projects/.resources/a271ba47ad0a46bed709347ae919a01969f219f2ea51823a6f7a16a6ce6fcd54 rename to Gateways/FE/projects/.resources/34960505e19a5ea1112432e5295b8af3db60d1673952b4a9542d039413ae4399 index c2aa176..e477b13 100644 --- a/Gateways/FE/projects/.resources/a271ba47ad0a46bed709347ae919a01969f219f2ea51823a6f7a16a6ce6fcd54 +++ b/Gateways/FE/projects/.resources/34960505e19a5ea1112432e5295b8af3db60d1673952b4a9542d039413ae4399 @@ -71,7 +71,8 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { diff --git a/Gateways/FE/projects/.resources/350c6cfadd6ed41b6103b6e20bb8e6561e86e65d777b5a8d850afb549db336cf b/Gateways/FE/projects/.resources/350c6cfadd6ed41b6103b6e20bb8e6561e86e65d777b5a8d850afb549db336cf deleted file mode 100644 index 93b5f55..0000000 Binary files a/Gateways/FE/projects/.resources/350c6cfadd6ed41b6103b6e20bb8e6561e86e65d777b5a8d850afb549db336cf and /dev/null differ diff --git a/Gateways/FE/projects/.resources/381d11adbaa1476adccead9af9c1df036f9aef55b1dd98f1d7c5043dfde67e5a b/Gateways/FE/projects/.resources/381d11adbaa1476adccead9af9c1df036f9aef55b1dd98f1d7c5043dfde67e5a new file mode 100644 index 0000000..245ba01 Binary files /dev/null and b/Gateways/FE/projects/.resources/381d11adbaa1476adccead9af9c1df036f9aef55b1dd98f1d7c5043dfde67e5a differ diff --git a/Gateways/FE/projects/.resources/3906478a50b22092e773e643bb239a1f2324f26d4f54cbeeec037453ce6d5ccd b/Gateways/FE/projects/.resources/3906478a50b22092e773e643bb239a1f2324f26d4f54cbeeec037453ce6d5ccd new file mode 100644 index 0000000..2312c27 Binary files /dev/null and b/Gateways/FE/projects/.resources/3906478a50b22092e773e643bb239a1f2324f26d4f54cbeeec037453ce6d5ccd differ diff --git a/Gateways/FE/projects/.resources/39099d21f40e4cc8b7933397e94e6ecc9d67137a6588f02154c73bc8ccd88dd7 b/Gateways/FE/projects/.resources/39099d21f40e4cc8b7933397e94e6ecc9d67137a6588f02154c73bc8ccd88dd7 deleted file mode 100644 index b88124b..0000000 Binary files a/Gateways/FE/projects/.resources/39099d21f40e4cc8b7933397e94e6ecc9d67137a6588f02154c73bc8ccd88dd7 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/3bc5acd6d6dd1ab5b338d50af74c104f3bc1321c687ba58af1ddb6e6c7a883e6 b/Gateways/FE/projects/.resources/3bc5acd6d6dd1ab5b338d50af74c104f3bc1321c687ba58af1ddb6e6c7a883e6 deleted file mode 100644 index d631754..0000000 Binary files a/Gateways/FE/projects/.resources/3bc5acd6d6dd1ab5b338d50af74c104f3bc1321c687ba58af1ddb6e6c7a883e6 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/3beacb3e91f700f1952606e3efd73d38db59177336929a683cfc78188d442044 b/Gateways/FE/projects/.resources/3beacb3e91f700f1952606e3efd73d38db59177336929a683cfc78188d442044 new file mode 100644 index 0000000..3178a05 --- /dev/null +++ b/Gateways/FE/projects/.resources/3beacb3e91f700f1952606e3efd73d38db59177336929a683cfc78188d442044 @@ -0,0 +1,207 @@ +{ + "custom": {}, + "params": { + "GoTo": "DOAS", + "Zoom": "value" + }, + "propConfig": { + "params.GoTo": { + "paramDirection": "input", + "persistent": true + }, + "params.Zoom": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "32px" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "expression": "{view.params.GoTo} + \" Details Page.\"" + }, + "type": "expr" + } + } + }, + "props": { + "textStyle": { + "classes": "labels/H2" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "1px", + "shrink": 0 + }, + "props": { + "style": { + "backgroundColor": "var(--text-muted)" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Details" + }, + "position": { + "grow": 1 + }, + "propConfig": { + "props.path": { + "binding": { + "config": { + "path": "view.params.GoTo" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": "CRAH", + "output": "Pages/HVAC/CRAH" + }, + { + "input": "DOAS", + "output": "Pages/HVAC/DOAS" + }, + { + "input": "EF", + "output": "Pages/HVAC/EF" + }, + { + "input": "FCU", + "output": "Pages/HVAC/FCU" + }, + { + "input": "HUM", + "output": "Pages/HVAC/HUM" + }, + { + "input": "RTU", + "output": "Pages/HVAC/RTU" + }, + { + "input": "SP", + "output": "Pages/HVAC/SP" + }, + { + "input": "STU", + "output": "Pages/HVAC/STU" + }, + { + "input": "VAV", + "output": "Pages/HVAC/VAV" + }, + { + "input": "FS", + "output": "Pages/FireSystem/FireSystem" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": false, + "objectName": "DOAS", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "grow": 1 + }, + "props": { + "direction": "column", + "path": "value" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Details" + }, + "position": { + "basis": "400px" + }, + "propConfig": { + "props.path": { + "binding": { + "config": { + "path": "view.params.type" + }, + "enabled": false, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": "DOAS", + "output": "Library/Cards/Card_DOAS" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "path": "Library/Cards/Card_L3_Navigation", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/3c1d22d7aa77288133baada4e6599c7c66e05759b521ef47e563d0edcb97eb9c b/Gateways/FE/projects/.resources/3c1d22d7aa77288133baada4e6599c7c66e05759b521ef47e563d0edcb97eb9c deleted file mode 100644 index 345949c..0000000 Binary files a/Gateways/FE/projects/.resources/3c1d22d7aa77288133baada4e6599c7c66e05759b521ef47e563d0edcb97eb9c and /dev/null differ diff --git a/Gateways/FE/projects/.resources/3cab6f54b5aff5e50165a76fa5a4d404afa62e7ff13c944cff8633fd4fffa737 b/Gateways/FE/projects/.resources/3cab6f54b5aff5e50165a76fa5a4d404afa62e7ff13c944cff8633fd4fffa737 deleted file mode 100644 index c74cb42..0000000 Binary files a/Gateways/FE/projects/.resources/3cab6f54b5aff5e50165a76fa5a4d404afa62e7ff13c944cff8633fd4fffa737 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/3d5c79a2bcfa0bf8d95463c9a96562bb5cbbbf6a49080cfeb9227f19e1b2ad97 b/Gateways/FE/projects/.resources/3d5c79a2bcfa0bf8d95463c9a96562bb5cbbbf6a49080cfeb9227f19e1b2ad97 new file mode 100644 index 0000000..de003e8 Binary files /dev/null and b/Gateways/FE/projects/.resources/3d5c79a2bcfa0bf8d95463c9a96562bb5cbbbf6a49080cfeb9227f19e1b2ad97 differ diff --git a/Gateways/FE/projects/.resources/3e61dc19c8552f2f29ab70ccdc708f45196178cadb6014c9d38a44ce9e851c48 b/Gateways/FE/projects/.resources/3e61dc19c8552f2f29ab70ccdc708f45196178cadb6014c9d38a44ce9e851c48 new file mode 100644 index 0000000..9ac65da Binary files /dev/null and b/Gateways/FE/projects/.resources/3e61dc19c8552f2f29ab70ccdc708f45196178cadb6014c9d38a44ce9e851c48 differ diff --git a/Gateways/FE/projects/.resources/3eb0d10495980a8b96e3371cb940220432c54e0867ff1fdd082472f39fa97269 b/Gateways/FE/projects/.resources/3eb0d10495980a8b96e3371cb940220432c54e0867ff1fdd082472f39fa97269 new file mode 100644 index 0000000..ccdc813 Binary files /dev/null and b/Gateways/FE/projects/.resources/3eb0d10495980a8b96e3371cb940220432c54e0867ff1fdd082472f39fa97269 differ diff --git a/Gateways/FE/projects/.resources/3ee47edd4f5949d7588e278f71a6a119454d3c133fd8d52f0256f2345a6a8033 b/Gateways/FE/projects/.resources/3ee47edd4f5949d7588e278f71a6a119454d3c133fd8d52f0256f2345a6a8033 deleted file mode 100644 index 831e3a2..0000000 Binary files a/Gateways/FE/projects/.resources/3ee47edd4f5949d7588e278f71a6a119454d3c133fd8d52f0256f2345a6a8033 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/3fe97e9478121242eb23fcf61cbeddbe26ff6136279840c1fc8be0eb31ff5c12 b/Gateways/FE/projects/.resources/3fe97e9478121242eb23fcf61cbeddbe26ff6136279840c1fc8be0eb31ff5c12 deleted file mode 100644 index ab96496..0000000 Binary files a/Gateways/FE/projects/.resources/3fe97e9478121242eb23fcf61cbeddbe26ff6136279840c1fc8be0eb31ff5c12 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/416553462c7d10b57e7a74a59a626ee5697fb30da7652a7339d976802f915818 b/Gateways/FE/projects/.resources/416553462c7d10b57e7a74a59a626ee5697fb30da7652a7339d976802f915818 deleted file mode 100644 index 88290f1..0000000 Binary files a/Gateways/FE/projects/.resources/416553462c7d10b57e7a74a59a626ee5697fb30da7652a7339d976802f915818 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/4374d7e8f5b4ef9778696791693f67d4f0efa458c645b707e5cf6c5f5bd75bc4 b/Gateways/FE/projects/.resources/4374d7e8f5b4ef9778696791693f67d4f0efa458c645b707e5cf6c5f5bd75bc4 deleted file mode 100644 index cd6bdce..0000000 Binary files a/Gateways/FE/projects/.resources/4374d7e8f5b4ef9778696791693f67d4f0efa458c645b707e5cf6c5f5bd75bc4 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/439c02c857bbb0a8abc52451342c1e9ba759d15e4123aaaefd192cde95e28045 b/Gateways/FE/projects/.resources/439c02c857bbb0a8abc52451342c1e9ba759d15e4123aaaefd192cde95e28045 deleted file mode 100644 index 6b17c90..0000000 Binary files a/Gateways/FE/projects/.resources/439c02c857bbb0a8abc52451342c1e9ba759d15e4123aaaefd192cde95e28045 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/43a4154bc35bee289f2ca6d536e0da1c2d059334997c55ef957f3a68a0b08b3d b/Gateways/FE/projects/.resources/43a4154bc35bee289f2ca6d536e0da1c2d059334997c55ef957f3a68a0b08b3d new file mode 100644 index 0000000..8e9fbd6 --- /dev/null +++ b/Gateways/FE/projects/.resources/43a4154bc35bee289f2ca6d536e0da1c2d059334997c55ef957f3a68a0b08b3d @@ -0,0 +1,46 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "shrink": 0 + }, + "props": { + "params": { + "detail_view": "Library/Diagrams/HVAC/Dgrm_DOAS", + "nav_view": "Library/Cards/Card_L3_Navigation", + "type": "DOAS" + }, + "path": "Library/Diagrams/HVAC/Dgrm_DOAS", + "style": { + "overflow": "visible" + }, + "useDefaultViewHeight": true, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "alignContent": "center", + "alignItems": "center", + "direction": "column", + "justify": "center" + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/43dc0c9ecdd6ee80e312fae023c27074fe43735e837a97bc1814cab7a3706c07 b/Gateways/FE/projects/.resources/43dc0c9ecdd6ee80e312fae023c27074fe43735e837a97bc1814cab7a3706c07 deleted file mode 100644 index 86f1520..0000000 Binary files a/Gateways/FE/projects/.resources/43dc0c9ecdd6ee80e312fae023c27074fe43735e837a97bc1814cab7a3706c07 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/4407304a7d259ad4c0b8b1af2b45acb8d96aa8b93d1e68cafdbe5ce90fa7d449 b/Gateways/FE/projects/.resources/4407304a7d259ad4c0b8b1af2b45acb8d96aa8b93d1e68cafdbe5ce90fa7d449 deleted file mode 100644 index 31f6006..0000000 --- a/Gateways/FE/projects/.resources/4407304a7d259ad4c0b8b1af2b45acb8d96aa8b93d1e68cafdbe5ce90fa7d449 +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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]\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/44cfbabaf0798a2e7a108dff26d8f04a50e693caf173f1c7d0dcf514684cdce7 b/Gateways/FE/projects/.resources/44cfbabaf0798a2e7a108dff26d8f04a50e693caf173f1c7d0dcf514684cdce7 new file mode 100644 index 0000000..9d3b654 Binary files /dev/null and b/Gateways/FE/projects/.resources/44cfbabaf0798a2e7a108dff26d8f04a50e693caf173f1c7d0dcf514684cdce7 differ diff --git a/Gateways/FE/projects/.resources/450425cfcce2c766dfd68c260d17801a8f8c27a1812ba5f5715d1ea4d492a91a b/Gateways/FE/projects/.resources/450425cfcce2c766dfd68c260d17801a8f8c27a1812ba5f5715d1ea4d492a91a new file mode 100644 index 0000000..918e355 Binary files /dev/null and b/Gateways/FE/projects/.resources/450425cfcce2c766dfd68c260d17801a8f8c27a1812ba5f5715d1ea4d492a91a differ diff --git a/Gateways/FE/projects/.resources/4536f7171e67de8951dcb6893e35ec3f2f1de251d6bcca5e64f1d0319b9cb75b b/Gateways/FE/projects/.resources/4536f7171e67de8951dcb6893e35ec3f2f1de251d6bcca5e64f1d0319b9cb75b new file mode 100644 index 0000000..70b482d Binary files /dev/null and b/Gateways/FE/projects/.resources/4536f7171e67de8951dcb6893e35ec3f2f1de251d6bcca5e64f1d0319b9cb75b differ diff --git a/Gateways/FE/projects/.resources/c110138b1bcbe9c4bf93a6294fcce07fec3060eb292bf4deed9824f2692a041c b/Gateways/FE/projects/.resources/47f6de124908ff796f4486566ef5531e0c6db475676c3473d2fa732ba340ddcf similarity index 95% rename from Gateways/FE/projects/.resources/c110138b1bcbe9c4bf93a6294fcce07fec3060eb292bf4deed9824f2692a041c rename to Gateways/FE/projects/.resources/47f6de124908ff796f4486566ef5531e0c6db475676c3473d2fa732ba340ddcf index 280fffb..28204df 100644 --- a/Gateways/FE/projects/.resources/c110138b1bcbe9c4bf93a6294fcce07fec3060eb292bf4deed9824f2692a041c +++ b/Gateways/FE/projects/.resources/47f6de124908ff796f4486566ef5531e0c6db475676c3473d2fa732ba340ddcf @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/48a8851aa5fe0b131afe402031fbaa65828919524c6d734593f9fe66598e984b b/Gateways/FE/projects/.resources/48a8851aa5fe0b131afe402031fbaa65828919524c6d734593f9fe66598e984b new file mode 100644 index 0000000..1028550 Binary files /dev/null and b/Gateways/FE/projects/.resources/48a8851aa5fe0b131afe402031fbaa65828919524c6d734593f9fe66598e984b differ diff --git a/Gateways/FE/projects/.resources/490e70bfae2f715aff725074b71b4f17591761931ad4b70831ee14934e06751f b/Gateways/FE/projects/.resources/490e70bfae2f715aff725074b71b4f17591761931ad4b70831ee14934e06751f new file mode 100644 index 0000000..c57e5fc Binary files /dev/null and b/Gateways/FE/projects/.resources/490e70bfae2f715aff725074b71b4f17591761931ad4b70831ee14934e06751f differ diff --git a/Gateways/FE/projects/.resources/4911a6f40e09c5f55972823a421ef88c952cd578d95f8574c0f456009c4b3301 b/Gateways/FE/projects/.resources/4911a6f40e09c5f55972823a421ef88c952cd578d95f8574c0f456009c4b3301 deleted file mode 100644 index 996f413..0000000 Binary files a/Gateways/FE/projects/.resources/4911a6f40e09c5f55972823a421ef88c952cd578d95f8574c0f456009c4b3301 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/4958bc23fa3c07e1831d1306137e2dab72a61eddd4dbcc0f2a5f2fe1be80d6e8 b/Gateways/FE/projects/.resources/4958bc23fa3c07e1831d1306137e2dab72a61eddd4dbcc0f2a5f2fe1be80d6e8 new file mode 100644 index 0000000..2e6a363 --- /dev/null +++ b/Gateways/FE/projects/.resources/4958bc23fa3c07e1831d1306137e2dab72a61eddd4dbcc0f2a5f2fe1be80d6e8 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "ValveC", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/ValveC 1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/4bcdd34a409d5d29749a74613a796503536a05b98e73b3da0def90ab18c9e82e b/Gateways/FE/projects/.resources/4bcdd34a409d5d29749a74613a796503536a05b98e73b3da0def90ab18c9e82e new file mode 100644 index 0000000..ce517f9 --- /dev/null +++ b/Gateways/FE/projects/.resources/4bcdd34a409d5d29749a74613a796503536a05b98e73b3da0def90ab18c9e82e @@ -0,0 +1,1180 @@ +{ + "custom": { + "Available": [ + "SATB1_RF_RTU01", + "SATB1_RF_RTU02" + ], + "ColorHandler": { + "Wall": "black", + "available": "#BAEDFF", + "background": "lightgray", + "selected": "#FFBABD" + }, + "roomColors": { + "RTU01": "#BAEDFF", + "RTU02": "#BAEDFF" + }, + "selected": "SATB1_4" + }, + "params": {}, + "propConfig": { + "custom.Available": { + "persistent": true + }, + "custom.ColorHandler": { + "persistent": true + }, + "custom.roomColors": { + "binding": { + "config": { + "struct": { + "rooms": "{view.custom.Available}", + "selected": "{view.custom.selected}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\trooms \u003d value[\"rooms\"]\n\tselected \u003d value[\"selected\"]\n\toutput \u003d {}\n\tfor room in rooms:\n\t\tshortName \u003d room.split(\"_\")\n\t\tif room \u003d\u003d selected:\n\t\t\tcolor \u003d self.custom.ColorHandler.selected\n\t\telse:\n\t\t\tcolor \u003d self.custom.ColorHandler.available\n\t\tsroom \u003d shortName[2]\n\t\toutput[sroom] \u003d color\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.selected": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 100, + "width": 392 + } + }, + "root": { + "children": [ + { + "custom": { + "room": "MMR1120" + }, + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpayload \u003d {\"Room\":self.meta.name}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "SATB1_RF_RTU01", + "tooltip": { + "enabled": true + } + }, + "position": { + "height": 105, + "width": 170, + "x": 260, + "y": 8 + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "path": "this.meta.name" + }, + "type": "property" + } + } + }, + "props": { + "style": { + "backgroundColor": "transparent" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "1sf" + }, + "position": { + "height": 100, + "width": 392 + }, + "props": { + "elements": [ + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "19.513", + "x": "15.769", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.652", + "x": "118.364", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.652", + "x": "170.016", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "50.952", + "x": "221.667", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.739", + "x": "272.62", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "50.602", + "x": "324.359", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.477", + "x": "429.8", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.564", + "x": "481.277", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.564", + "x": "532.841", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.04", + "x": "584.405", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.04", + "x": "635.445", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "54.275", + "x": "686.485", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "21.346", + "name": "rect", + "type": "rect", + "width": "21.925", + "x": "740.759", + "y": "19.107" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.475", + "name": "rect", + "type": "rect", + "width": "21.925", + "x": "740.759", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.416", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "786.218", + "y": "13.901" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.416", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "852.316", + "y": "13.901" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.135", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "786.218", + "y": "27.317" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.135", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "852.316", + "y": "27.317" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.851", + "name": "rect", + "type": "rect", + "width": "16.222", + "x": "930.366", + "y": "26.601" + }, + { + "d": "M930.348,40.452l-27.849,0l-0,-36.821l44.089,0l0,22.925l-16.24,0l-0,13.896Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "23.534", + "x": "762.684", + "y": "3.631" + }, + { + "d": "M786.218,13.913l0,-10.282l90.299,0l-0,36.821l-9.76,0l0,-26.539l-14.441,0l-0,26.539l-51.657,0l0,-26.539l-14.441,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "25.982", + "x": "876.517", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.228", + "x": "946.588", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "54.368", + "x": "997.816", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "14.089", + "name": "rect", + "type": "rect", + "width": "15.038", + "x": "35.282", + "y": "26.364" + }, + { + "d": "M35.282,26.32l0,-22.689l43.295,0l0,36.821l-28.213,0l0,-14.132l-15.082,-0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "16.934", + "name": "rect", + "type": "rect", + "width": "12.193", + "x": "1030.82", + "y": "59.578" + }, + { + "d": "M704.881,225.51l-0,-170.409l161.096,0l0,187.468l-149.344,-0l0,-17.059l-11.752,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.24", + "name": "rect", + "type": "rect", + "width": "11.943", + "x": "704.881", + "y": "225.328" + }, + { + "d": "M876.967,214.554l-0,-64.103l36.031,-0l-0,85.698l-15.332,0l-0,-21.595l-20.699,-0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "14.539", + "name": "rect", + "type": "rect", + "width": "36.031", + "x": "876.967", + "y": "236.149" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "21.595", + "name": "rect", + "type": "rect", + "width": "20.699", + "x": "876.967", + "y": "214.554" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "18.473", + "name": "rect", + "type": "rect", + "width": "18.536", + "x": "930.889", + "y": "150.451" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "18.473", + "name": "rect", + "type": "rect", + "width": "17.891", + "x": "912.998", + "y": "150.451" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "6.994", + "name": "rect", + "type": "rect", + "width": "18.536", + "x": "930.889", + "y": "168.924" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.849", + "name": "rect", + "type": "rect", + "width": "11.891", + "x": "937.534", + "y": "175.918" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.849", + "name": "rect", + "type": "rect", + "width": "8.674", + "x": "928.86", + "y": "175.918" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "23.641", + "name": "rect", + "type": "rect", + "width": "15.862", + "x": "912.998", + "y": "175.918" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "21.866", + "name": "rect", + "type": "rect", + "width": "36.427", + "x": "912.998", + "y": "199.559" + }, + { + "d": "M971.223,232.877l-0,18.173l-58.225,-0l-0,-29.625l36.427,0l-0,11.452l21.798,-0Z", + "fill": { + "opacity": "0.8", + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.062", + "name": "rect", + "type": "rect", + "width": "18.445", + "x": "963.414", + "y": "189.423" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "11.862", + "name": "rect", + "type": "rect", + "width": "17.665", + "x": "963.915", + "y": "170.98" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "18.443", + "name": "rect", + "type": "rect", + "width": "16.899", + "x": "981.58", + "y": "170.98" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "38.861", + "name": "rect", + "type": "rect", + "width": "29.136", + "x": "1001.35", + "y": "128.524" + }, + { + "d": "M1030.49,85.457l-0,43.067l-66.685,0l-0,5.678l-14.384,0l-0,4.915l-72.683,0l0,-84.077l58.255,0l-0,4.364l12.265,-0l0,-4.364l74.607,0l-0,30.417l8.625,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "57.132", + "name": "rect", + "type": "rect", + "width": "29.136", + "x": "1001.35", + "y": "167.624" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "28.911", + "name": "rect", + "type": "rect", + "width": "17.935", + "x": "1034.25", + "y": "222.138" + }, + { + "d": "M1030.49,222.138l3.76,0l-0,28.912l-63.026,-0l-0,-44.565l30.13,0l-0,18.226l29.136,0l-0,-2.573Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M998.256,150.993l-0,19.987l-34.452,0l-0,-11.174l8.944,0l-0,-8.813l25.508,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M972.748,147.916l-0,-8.464l-8.944,0l-0,-10.928l34.452,0l-0,19.392l-25.508,-0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.062", + "name": "rect", + "type": "rect", + "width": "19.494", + "x": "981.859", + "y": "189.423" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "6.994", + "name": "rect", + "type": "rect", + "width": "17.891", + "x": "912.998", + "y": "168.924" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "24.65", + "name": "rect", + "type": "rect", + "width": "22.172", + "x": "18.391", + "y": "53.391" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "11.206", + "name": "rect", + "type": "rect", + "width": "12.24", + "x": "54.692", + "y": "55.139" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "11.102", + "name": "rect", + "type": "rect", + "width": "12.24", + "x": "54.692", + "y": "66.345" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "12.117", + "name": "rect", + "type": "rect", + "width": "25.955", + "x": "15.646", + "y": "200.465" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "22.964", + "name": "rect", + "type": "rect", + "width": "25.955", + "x": "15.646", + "y": "212.582" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.623", + "name": "rect", + "type": "rect", + "width": "25.955", + "x": "15.646", + "y": "235.546" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "10.277", + "name": "rect", + "type": "rect", + "width": "11.384", + "x": "29.179", + "y": "84.3" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "32.029", + "name": "rect", + "type": "rect", + "width": "51.287", + "x": "15.646", + "y": "168.436" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "12.158", + "name": "rect", + "type": "rect", + "width": "13.351", + "x": "53.581", + "y": "200.465" + }, + { + "d": "M40.563,54.987l14.129,-0l0,21.662l12.24,-0l0,91.787l-51.286,-0l-0,-64.403l24.917,-0l0,-49.046Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M40.563,94.439l0,9.615l-24.917,-0l-0,-15.097l13.597,-0l-0,5.482l11.32,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M29.198,89.667l-13.552,0l-0,-11.626l24.917,0l0,6.248l-11.365,0l-0,5.378Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.024", + "name": "rect", + "type": "rect", + "width": "11.711", + "x": "80.091", + "y": "91.578" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "152.196", + "name": "rect", + "type": "rect", + "width": "263.909", + "x": "111.158", + "y": "75.196" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.177", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "98.309", + "y": "227.392" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "20.095", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "98.309", + "y": "55.101" + }, + { + "d": "M91.815,91.578l19.397,-0l0,120.214l-31.121,-0l-0,-103.211l11.724,-0l0,-17.003Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.286", + "name": "rect", + "type": "rect", + "width": "11.012", + "x": "393.832", + "y": "91.578" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "152.196", + "name": "rect", + "type": "rect", + "width": "263.909", + "x": "422.8", + "y": "75.196" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.177", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "409.951", + "y": "227.392" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "20.095", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "409.951", + "y": "55.101" + }, + { + "d": "M404.766,91.578l18.089,-0l0,122.924l-29.023,0l-0,-105.538l10.934,0l-0,-17.386Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M66.932,211.792l0,-156.653l31.37,-0.038l0.007,20.095l12.903,0l0,16.382l-31.121,-0l-0,120.214l-13.159,-0Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor21", + "name": "Corridor21", + "type": "path" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "36.821", + "id": "Corridor20", + "name": "Corridor20", + "type": "rect", + "width": "39.787", + "x": "78.577", + "y": "3.631" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor19", + "name": "Corridor19", + "type": "rect", + "width": "276.758", + "x": "98.309", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor18", + "name": "Corridor18", + "type": "rect", + "width": "256.909", + "x": "429.8", + "y": "40.452" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "187.468", + "id": "Corridor17", + "name": "Corridor17", + "type": "rect", + "width": "18.171", + "x": "686.709", + "y": "55.101" + }, + { + "d": "M876.967,55.04l-172.086,0.061l-0,-14.649l172.086,0l-0,14.588Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor16", + "name": "Corridor16", + "type": "path" + }, + { + "d": "M876.967,40.452l175.217,0l-0,12.187l-8.968,0l0,6.939l-12.2,-0l0,-6.939l-9.235,0l0,2.401l-74.524,0l0,4.364l-12.265,-0l-0,-4.364l-58.025,0l-0,-14.588Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor15", + "name": "Corridor15", + "type": "path" + }, + { + "d": "M876.967,55.042l-0,187.527l-10.99,-0l0,-187.523l10.99,-0.004Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor14", + "name": "Corridor14", + "type": "path" + }, + { + "d": "M949.421,150.451l-72.454,-0l-0,-11.334l72.453,0l0.001,11.334Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor13", + "name": "Corridor13", + "type": "path" + }, + { + "d": "M949.425,189.767l-0.005,-55.565l14.139,0l0,5.1l9,0l0,20.504l-8.755,0l-0,11.174l0.111,0l0,11.863l17.665,-0l0,6.58l-18.166,0l-0,17.062l7.809,0l-0,27.437l-21.798,-0l-0,-34.363l-20.565,0l-0,-9.792l20.565,0Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor12", + "name": "Corridor12", + "type": "path" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor11", + "name": "Corridor11", + "type": "rect", + "width": "10.99", + "x": "865.977", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor10", + "name": "Corridor10", + "type": "rect", + "width": "161.096", + "x": "704.881", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor9", + "name": "Corridor9", + "type": "rect", + "width": "18.171", + "x": "686.709", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor8", + "name": "Corridor8", + "type": "rect", + "width": "276.758", + "x": "409.951", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor7", + "name": "Corridor7", + "type": "rect", + "width": "18.171", + "x": "686.709", + "y": "40.452" + }, + { + "d": "M409.951,251.169l-34.885,0l0,-196.068l34.885,0l0,20.095l12.849,0l0,16.382l-28.968,-0l-0,122.924l28.968,0l0,12.89l-12.849,-0l0,23.777Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor6", + "name": "Corridor6", + "type": "path" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "36.821", + "id": "Corridor5", + "name": "Corridor5", + "type": "rect", + "width": "54.839", + "x": "374.961", + "y": "3.631" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor4", + "name": "Corridor4", + "type": "rect", + "width": "54.839", + "x": "374.961", + "y": "40.452" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor3", + "name": "Corridor3", + "type": "rect", + "width": "256.597", + "x": "118.364", + "y": "40.452" + }, + { + "d": "M118.364,55.101l-20.055,0l-31.377,0.038l-12.24,0l0,-0.152l-14.129,-0l0,-1.596l-24.917,-0l-0,-12.939l102.718,0l0,14.649Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor2", + "name": "Corridor2", + "type": "path" + }, + { + "d": "M98.309,251.169l-56.708,0l-0,-50.704l11.98,-0l0,12.158l13.351,0l0,-0.831l44.28,-0l0,15.6l-12.903,-0l-0,23.777Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor1", + "name": "Corridor1", + "type": "path" + }, + { + "d": "M1052.18,251.104l-1036.44,-0l0,-247.345l1036.44,-0l-0,83.692m-0,134.724l-0,28.929m-52.001,-250.662l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-102.714,-0l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-102.714,-0l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-106.218,-0l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-102.824,-0l0,3.317l-11.769,-0l0,-3.317l11.769,-0Zm-102.604,-0l-0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-106.218,-0l-0,3.317l-11.77,-0l0,-3.317l11.77,-0Zm-102.714,-0l-0,3.317l-11.77,-0l0,-3.317l11.77,-0Zm-102.714,-0l-0,3.317l-11.77,-0l0,-3.317l11.77,-0Zm-102.933,-0l-0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm14.199,250.662l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm78.141,-0l0,3.316l-11.769,0l-0,-3.316l11.769,-0Zm108.518,-0l-0,3.316l-11.769,0l-0,-3.316l11.769,-0Zm92.421,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm108.846,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm107.86,-0l0,3.316l-11.769,0l0,-3.316l11.769,-0Zm142.85,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm92.311,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm108.298,-0l0,3.316l-11.769,0l0,-3.316l11.769,-0Zm63.403,-0l-0,3.316l-11.769,0l-0,-3.316l11.769,-0Zm66.807,-163.653l-21.805,0l0,134.724l21.805,-0m-998.837,28.929l-0,14.955l-36.793,0l-0,-14.955l36.793,-0Zm-37.601,-201.071l-14.956,-0l0,-36.793l14.956,-0l0,36.793Zm402.74,201.071l-0,14.955l-35.84,0l-0,-14.955l35.84,-0Zm488.384,-0l-0,14.955l-35.84,0l-0,-14.955l35.84,-0Zm-878.403,-0l0,14.955l-5.536,0l0,-14.955l5.536,-0Zm-12.721,-225.95l-14.956,-0l0,-5.537l14.956,0l0,5.537Zm375.282,225.95l-0,14.955l-5.873,0l-0,-14.955l5.873,-0Zm488.383,-0l0,14.955l-5.872,0l-0,-14.955l5.872,-0Zm-829.288,0.589l-0,14.366l-5.537,0l0,-14.366l5.537,-0Zm-34.966,-204.884l-14.367,0l0,-5.536l14.367,-0l0,5.536Zm397.526,204.884l-0,14.366l-5.537,0l0,-14.366l5.537,-0Zm488.384,-0l-0,14.366l-5.537,0l0,-14.366l5.537,-0Zm-856.621,7.183l0,1.997l-15.979,0l0,-1.997l15.979,0Zm-36.623,-217.674l-2.221,0l-0,-15.978l2.221,-0l0,15.978Zm4.811,-0.07l-11.844,0l0,-15.978l11.844,-0l0,15.978Zm394.372,217.744l0,1.997l-15.978,0l-0,-1.997l15.978,0Zm488.384,0l0,1.997l-15.979,0l0,-1.997l15.979,0Zm-865.311,-4.66l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-17.445,-227.45l-11.844,-0l0,-1.612l11.844,-0l0,1.612Zm380.005,227.45l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm362.56,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-20.669,-224.227l-11.844,0l0,-1.612l11.844,0l0,1.612Zm383.229,224.227l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm362.56,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-23.893,-221.003l-11.844,0l0,-1.612l11.844,0l0,1.612Zm386.453,221.003l-0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm362.56,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-27.117,-217.779l-11.844,-0l0,-1.612l11.844,0l0,1.612Zm389.677,217.779l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm362.56,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-849.333,-0l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm-30.34,-214.555l-11.844,-0l0,-1.612l11.844,-0l0,1.612Zm392.9,214.555l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm488.384,-0l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-22.508,-213.996l-6.332,-0l0,-36.461l19.372,-0l0,36.461l-4.638,-0m21.154,-0l-10.159,-0m-6.357,-0l0,-36.461l43.331,-0l0,36.461l-19.065,-0m583.35,-0l-7.439,-0l-0,-36.461l51.229,-0l0,36.461l-5.848,-0m-8.363,-0l-25.4,-0m-55.819,-0l-7.029,-0l0,-36.461l51.23,-0l-0,36.461l-6.341,-0m-8.116,-0l-24.827,-0m-56.31,-0l-6.866,-0l0,-36.461l51.23,-0l0,36.461l-6.013,-0m-8.444,-0l-25.236,-0m-56.023,-0l-7.111,-0l-0,-36.461l51.23,-0l-0,36.461l-5.521,-0m-8.609,-0l-25.728,-0m-55.501,-0l-7.208,-0l0,-36.461l51.319,-0l0,36.461l-5.53,-0m-8.786,-0l-25.362,-0m-110.308,-0l-6.979,-0l0,-36.461l50.722,-0l-0,36.461l-6.309,-0m-7.726,-0l-25.622,-0m-55.689,-0l-7.12,-0l-0,-36.461l51.744,-0l0,36.461l-6.436,-0m-7.882,-0l-26.138,-0m-55.433,-0l-7.043,-0l-0,-36.461l51.188,-0l-0,36.461l-6.367,-0m-7.797,-0l-25.858,-0m-54.966,-0l-7.535,-0l-0,-36.461l51.188,-0l-0,36.461l-6.366,-0m-7.798,-0l-25.202,-0m-55.967,-0l-7.043,-0l-0,-36.461l51.188,-0l-0,36.461l-6.366,-0m-7.798,-0l-25.038,-0m-52.337,-0l0,-36.461l39.795,-0l-0,36.461m586.833,185.309l0,-2.629m0,-161.477l0,-6.244l160.844,0l-0,187.61l-160.844,-0l0,-12.419m0,-15.318l0,-145.865m0,156.342l11.507,-0l-0,17.26l-11.507,-0m171.85,-33.867l0,-58.424l36.021,-0l0,85.787l-36.021,-0m0,-4.74l0,-18.361m0,1.338l20.762,0l0,21.763m66.039,-43.071l-0,-3.706l18.01,-0l0,16.759l-18.01,0l-0,-8.955m19.341,8.955l-1.331,0l0,-16.759l15.009,-0l0,16.759l-9.744,0m-56.673,-55.769l2.135,-0m4.373,-0l12.381,-0l0,25.252l-36.271,-0l0,-25.252l13.185,-0m20.296,48.852l2.79,0l0,21.773l-36.271,-0l0,-21.773l29.547,0m-245.928,-159.13l-10.043,-0l0,-36.461l54.087,-0l0,36.461l-36.195,-0m163.185,-0l-112.808,-0m-8.504,-0l-5.678,-0l0,-36.461l161.833,-0l0,36.461l-28.183,-0m-133.65,-20.985l22.051,-0m0,-11.066l0,32.051m179.19,-0l-12.032,-0m-8.966,-0l-18.41,-0l0,-36.461l44.144,-0l0,36.461m6.351,-0l-6.351,-0l0,-36.461l50.96,-0l0,36.461l-35.652,-0m-554.75,213.996l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm117.352,-213.996l39.302,-0m-54.636,-0l7.578,-0m-630.125,29.237l0,5.502l-276.536,0l-0,-5.498m-0,-8.612l-0,-5.78l276.536,-0l0,5.833m311.467,8.555l-0,5.502l-276.537,0l0,-5.498m0,-8.612l0,-5.78l276.537,-0l-0,5.833m-311.467,181.679l-276.536,0m-0,-8.206l-0,-6.881l276.536,0l0,6.463m311.467,8.624l-276.537,0m0,-8.206l0,-6.881l276.537,0l-0,6.492m-575.322,-159.027l-0,1.574m311.466,-1.574l0,1.574m-47.611,-1.574l0,1.574m311.467,-1.574l-0,1.574m-575.322,8.073l-0,134.332m311.466,-134.332l0,134.332m-47.611,-134.332l0,134.332m311.467,-134.332l-0,134.332m-594.841,-127.238l19.519,-0l-0,16.749m-0,0l-0,103.263l-17.458,0m-8.49,0l-4.994,0l-0,-114.804m313.656,-5.208l28.752,-0l0,122.574l-16.492,-0m-8.218,-0l-4.042,-0l0,-103.062m-313.656,-18.19l-0,-1.322l11.423,-0l-0,16.749l-11.423,0m324.631,-16.749l0,19.512l-10.975,0l0,-14.613m648.968,-44.009l9.356,-0l-0,32.739l-30.212,0l-0,-32.739l8.914,-0m11.942,-0l0,23.939l-11.942,0l0,-23.939m9.715,7.176l2.227,-0l0,16.763l-11.942,0l0,-16.763l3.717,-0m-3.717,0.673l0,16.09l-8.914,0l-0,-16.09l8.914,-0Zm21.298,-0l-0,16.09l-9.356,0l0,-16.09l9.356,-0Zm-10.447,24.89l-10.891,0l-0,-8.8l10.891,0l-0,8.8Zm-10.851,-23.278l0,1.85l-8.914,-0l-0,-1.85l8.914,-0Zm21.298,-0l-0,1.85l-9.356,-0l0,-1.85l9.356,-0Zm-21.298,3.672l0,1.85l-8.914,0l-0,-1.85l8.914,-0Zm21.298,-0l-0,1.85l-9.356,0l0,-1.85l9.356,-0Zm-21.298,3.672l0,1.85l-8.914,0l-0,-1.85l8.914,0Zm21.298,0l-0,1.85l-9.356,0l0,-1.85l9.356,0Zm-17.581,15.934l-1.85,0l0,-8.8l1.85,0l0,8.8Zm-3.717,-12.262l0,1.851l-8.914,-0l-0,-1.851l8.914,0Zm21.298,0l-0,1.851l-9.356,-0l0,-1.851l9.356,0Zm-14.042,12.262l-1.851,0l0,-8.8l1.851,0l-0,8.8Zm1.85,0l-1.85,0l-0,-8.8l1.85,0l-0,8.8Zm-998.447,144.397l-0,5.746l-25.799,-0l0,-23.054l25.799,0l-0,4.601m2.292,-162.133l-3.289,0m14.274,0l-2.959,0m-10.318,194.328l-0,1.89m-0,-15.632l-0,9.168m25.294,-112.121l0,-4.249m0,72.181l0,-56.286m0,-20.04l0,-47.132m-30.609,-23.708l4.318,0l-0,24.335l-24.802,-0l0,-24.335l8.156,0m36.246,1.601l6.691,0l0,11.796m0,4.564l0,5.747l-12.017,0l-0,-22.107l1.392,0m-1.392,11.054l12.017,-0m-25.294,145.671l-0,0.807l-25.799,0l0,-11.967l25.799,0l-0,6.697m-23.003,-153.863l-0,24.335l-2.796,-0l0,-24.335l2.796,0Zm48.297,158.313l0,0.82l-13.145,0l-0,-11.967l13.145,0l0,6.908m-23.436,-6.908l-1.858,0m12.149,0l-2.395,0m10.426,-31.873l5.114,0m-13.145,0l3.849,0m-41.797,0l25.799,0m-6.427,-142.069l15.071,0l-0,13.711m-9.641,42.41l-0,15.895m-0,3.83l-0,1.626l-24.802,0l0,-26.361l24.802,-0l-0,0.971m-24.802,-0.423l0,8.131l-15.304,0l-0,-8.131l15.304,-0Zm23.838,6.088l0.964,0l-0,10.23l-11.246,-0l0,-10.23l6.505,0m-20.061,5.115l13.556,0m-25.319,-11.203l-0,8.131l-1.836,0l-0,-8.131l1.836,-0Zm3.724,-0l0,8.131l-1.836,0l0,-8.131l1.836,-0Zm1026.6,163.98l0,8.956m0,-28.929l0,12.924m-121.356,1.54l0,14.465m-36.021,-14.465l0,9.022m94.493,-31.3l-0,-8.094m-0,44.837l-0,-25.923m-0,7.468l-21.901,0l0,-5.891m0,-51.008l0,13.866l-7.044,0m-4.739,-13.866l0,13.866l-3.97,0m-4.739,-13.866l0,18.477m2.057,-18.477l-0,-25.252m-11.022,18.242l22.413,0m26.741,13.943l12.322,-0m-17.547,-23.164l0,23.164l1.209,-0m-1.209,-11.582l34.453,-0m-16.906,13.887l-0,-13.887m-12.68,-11.582l3.907,-0l-0,-20.108l-4.035,0m4.035,8.709l25.679,-0.128m-25.679,2.818l25.679,-0m-1.697,38.698l1.697,-0l-0,-60.983l-34.709,-0l0,10.886m14.857,-10.886l-0,3.586m-0,35.605l-0,3.073m19.852,-42.264l31.634,-0m-4.222,96.056l4.523,-0l0,-2.406m-29.118,-93.65l0,85.836m0,3.771l0,6.449l20.742,-0m-25.256,-18.314l4.514,0m25.022,-39.048l4.096,-0m-29.118,-0l20.186,-0m-75.992,-107.941l1.721,-0l0,-4.099l74.796,0m-62.895,79.225l-9.508,-0.075l-0,4.713l-72.642,0l0,-83.863l58.118,0l0,4.099m0,-0l2.295,-0m-151.112,-52.543l-0,-2.976m-0,36.461l-0,-28.157m5.041,2.049l-5.041,-0m14.242,13.054l-0,-13.054m-0,26.108l-0,-7.522m66.189,-17.52l-0,-1.066l-14.242,-0m14.242,15l-0,-9.119m-0,20.227l-0,-3.423m-14.242,-22.685l-0,26.108m24.283,-27.235l-0,27.235m-90.472,-13.054l14.242,-0m51.947,-0l14.242,-0m63.673,13.054l-0,-13.618l16.256,0m96.24,25.988l0,-7.264", + "fill": { + "paint": "transparent" + }, + "id": "_1stFloor", + "name": "_1stFloor", + "stroke": { + "opacity": "0.95", + "paint": "#747474", + "width": "0.88px" + }, + "type": "path" + } + ], + "fill": { + "rule": "evenodd" + }, + "stroke": { + "linecap": "round", + "linejoin": "round", + "miterlimit": "1.5" + }, + "style": { + "clipRule": "evenodd" + }, + "viewBox": "0 0 1053 267" + }, + "type": "ia.shapes.svg" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": 0, + "y": 0 + }, + "props": { + "style": { + "overflow": "hidden", + "paddingBottom": 1, + "paddingLeft": 1, + "paddingRight": 1, + "paddingTop": 1 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "layout_01_Update", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.selected \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/4d2e3e4b07860f763741c882300e479b31f5cb1fc14591b5646042752734a9f7 b/Gateways/FE/projects/.resources/4d2e3e4b07860f763741c882300e479b31f5cb1fc14591b5646042752734a9f7 new file mode 100644 index 0000000..d275173 Binary files /dev/null and b/Gateways/FE/projects/.resources/4d2e3e4b07860f763741c882300e479b31f5cb1fc14591b5646042752734a9f7 differ diff --git a/Gateways/FE/projects/.resources/4dbb7140c6ce306ddccdae27b3f009e14d2357646d2ccd7de2ff4e86876bee5a b/Gateways/FE/projects/.resources/4dbb7140c6ce306ddccdae27b3f009e14d2357646d2ccd7de2ff4e86876bee5a deleted file mode 100644 index 5f48c54..0000000 --- a/Gateways/FE/projects/.resources/4dbb7140c6ce306ddccdae27b3f009e14d2357646d2ccd7de2ff4e86876bee5a +++ /dev/null @@ -1,127 +0,0 @@ -{ - "custom": { - "allTags": null, - "auth": { - "almAck": false, - "almShelve": false, - "config": false, - "control": false - } - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.auth": { - "binding": { - "config": { - "path": "session.props.auth.user.roles" - }, - "transforms": [ - { - "code": "\treturn utils.roles.validate(value)", - "type": "script" - } - ], - "type": "property" - }, - "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\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/6a652c79036b62a9cf5a605a1fe95082745f53fc49a1879d3671cdf450e01b8d b/Gateways/FE/projects/.resources/4fc5835145d4790cfe193d4ca2293a825a543e3846dc9a28247a24e2ff825cf1 similarity index 95% rename from Gateways/FE/projects/.resources/6a652c79036b62a9cf5a605a1fe95082745f53fc49a1879d3671cdf450e01b8d rename to Gateways/FE/projects/.resources/4fc5835145d4790cfe193d4ca2293a825a543e3846dc9a28247a24e2ff825cf1 index b7047b7..cacb3ce 100644 --- a/Gateways/FE/projects/.resources/6a652c79036b62a9cf5a605a1fe95082745f53fc49a1879d3671cdf450e01b8d +++ b/Gateways/FE/projects/.resources/4fc5835145d4790cfe193d4ca2293a825a543e3846dc9a28247a24e2ff825cf1 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/52acfcfc7574c60016c849084b52bd9511e1aab45a1abde9402f0165db510bb4 b/Gateways/FE/projects/.resources/52acfcfc7574c60016c849084b52bd9511e1aab45a1abde9402f0165db510bb4 new file mode 100644 index 0000000..6ba658e Binary files /dev/null and b/Gateways/FE/projects/.resources/52acfcfc7574c60016c849084b52bd9511e1aab45a1abde9402f0165db510bb4 differ diff --git a/Gateways/FE/projects/.resources/5318b756fafc2b38ee64c40a159b3ecf09cf7dbaf79221f0400eb334a0b5e0d6 b/Gateways/FE/projects/.resources/5318b756fafc2b38ee64c40a159b3ecf09cf7dbaf79221f0400eb334a0b5e0d6 deleted file mode 100644 index 3099273..0000000 Binary files a/Gateways/FE/projects/.resources/5318b756fafc2b38ee64c40a159b3ecf09cf7dbaf79221f0400eb334a0b5e0d6 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/5494758c5774cbf45fdead0be5287230ffc8271a3758936bfe9ca84211d9f0c9 b/Gateways/FE/projects/.resources/5494758c5774cbf45fdead0be5287230ffc8271a3758936bfe9ca84211d9f0c9 deleted file mode 100644 index 6d10349..0000000 --- a/Gateways/FE/projects/.resources/5494758c5774cbf45fdead0be5287230ffc8271a3758936bfe9ca84211d9f0c9 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]RM1102/SATB1_RM1102_Fire System Panel" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"HH:mm\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/54e5ab15bc82c8ddd329f17667bbae2c1a48a9eeaf96d13214ed586f0f347c09 b/Gateways/FE/projects/.resources/54e5ab15bc82c8ddd329f17667bbae2c1a48a9eeaf96d13214ed586f0f347c09 deleted file mode 100644 index b844c94..0000000 Binary files a/Gateways/FE/projects/.resources/54e5ab15bc82c8ddd329f17667bbae2c1a48a9eeaf96d13214ed586f0f347c09 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/5599a0c155fdd5a839e830da1aaf7c48ac4b4dbb4ef41286edcff7ff9f04bb9f b/Gateways/FE/projects/.resources/5599a0c155fdd5a839e830da1aaf7c48ac4b4dbb4ef41286edcff7ff9f04bb9f deleted file mode 100644 index 30f0c57..0000000 Binary files a/Gateways/FE/projects/.resources/5599a0c155fdd5a839e830da1aaf7c48ac4b4dbb4ef41286edcff7ff9f04bb9f and /dev/null differ diff --git a/Gateways/FE/projects/.resources/559a261ceefeb1b3db54cf749835a7097a0d5af5b7342b33e561b2e3bdd68230 b/Gateways/FE/projects/.resources/559a261ceefeb1b3db54cf749835a7097a0d5af5b7342b33e561b2e3bdd68230 deleted file mode 100644 index a8b9f82..0000000 --- a/Gateways/FE/projects/.resources/559a261ceefeb1b3db54cf749835a7097a0d5af5b7342b33e561b2e3bdd68230 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/563836f01bfe83821bcbda47e612651a74f393ec696f5a08a05e5fef95bc6db1 b/Gateways/FE/projects/.resources/563836f01bfe83821bcbda47e612651a74f393ec696f5a08a05e5fef95bc6db1 deleted file mode 100644 index 75a40e4..0000000 Binary files a/Gateways/FE/projects/.resources/563836f01bfe83821bcbda47e612651a74f393ec696f5a08a05e5fef95bc6db1 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/58e18d0616f25a798d3f070985f5c660894552aa426a6365ad65fe6819ee4777 b/Gateways/FE/projects/.resources/58e18d0616f25a798d3f070985f5c660894552aa426a6365ad65fe6819ee4777 deleted file mode 100644 index 0090aa9..0000000 --- a/Gateways/FE/projects/.resources/58e18d0616f25a798d3f070985f5c660894552aa426a6365ad65fe6819ee4777 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]ER1248/SWBD/SATB1_ER1248_CB-52U" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/58f440c5335ae3a2f813a5f62a8256e50b8ddac777254bddb91a561520194373 b/Gateways/FE/projects/.resources/58f440c5335ae3a2f813a5f62a8256e50b8ddac777254bddb91a561520194373 new file mode 100644 index 0000000..fe8b923 Binary files /dev/null and b/Gateways/FE/projects/.resources/58f440c5335ae3a2f813a5f62a8256e50b8ddac777254bddb91a561520194373 differ diff --git a/Gateways/FE/projects/.resources/598dd8c43fa8149cc0521ceac45182196b5e69daa0420bb9abcf6eef9777d187 b/Gateways/FE/projects/.resources/598dd8c43fa8149cc0521ceac45182196b5e69daa0420bb9abcf6eef9777d187 deleted file mode 100644 index 91b7c19..0000000 Binary files a/Gateways/FE/projects/.resources/598dd8c43fa8149cc0521ceac45182196b5e69daa0420bb9abcf6eef9777d187 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/59eaf30e77715be7afb3835a00e228876bf0553ea026e71f65133b72515db4b4 b/Gateways/FE/projects/.resources/59eaf30e77715be7afb3835a00e228876bf0553ea026e71f65133b72515db4b4 deleted file mode 100644 index dbabcfa..0000000 --- a/Gateways/FE/projects/.resources/59eaf30e77715be7afb3835a00e228876bf0553ea026e71f65133b72515db4b4 +++ /dev/null @@ -1,793 +0,0 @@ -{ - "custom": { - "HUM_tagPath": [], - "data": [ - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_HUM_03", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_01", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_02", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_HUM_03", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_HUM_03", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_01", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_02", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_HUM_03", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_01", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_02" - ], - "room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, - "params": {}, - "propConfig": { - "custom.HUM_tagPath": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "transforms": [ - { - "code": "\tpath \u003d str(self.view.custom.tagPath) + value +\"/\"\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/HUM\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output\n\t", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.custom.tagPath}", - "time": "now(3000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/HUM\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.room": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.HUM_tagPath" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"HUM\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "direction": "column", - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "HUM", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" - }, - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "HUM", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" - } - ], - "path": "Library/Diagrams/HVAC/Dgrm_HUM", - "style": { - "gap": 100, - "overflow": "visible" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Diagram" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload) " - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "55%" - }, - "propConfig": { - "custom.current_values": { - "binding": { - "config": { - "struct": { - "data": "{view.custom.data}", - "hb": "now(5000)" - }, - "waitOnAll": true - }, - "type": "expr-struct" - } - }, - "custom.selectedData": { - "binding": { - "config": { - "struct": { - "key": "{view.custom.loading}", - "selectedRow": "{this.props.selection.selectedRow}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selectedRow\"]\n\tif selected is None:\n\t\tselected \u003d 0\n\ttagPath \u003d self.props.data[selected].tagPath\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/HUM\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\t\n\t\tSP \u003d system.tag.readBlocking(item + \"/Config/Relative Humidity Setpoint\")[0].value\n\t\tpathname \u003d item.split(\u0027_\u0027)\n\t\t\n\t\tRoom \u003d pathname[-3]\n\t\tif Room \u003d\u003d \"GAL1261\" or Room \u003d\u003d \"GAL1262\":\n\t\t\tName \u003d \"DH1 \" + pathname[-2] + pathname[-1]\n\t\tif Room \u003d\u003d \"GAL1271\" or Room \u003d\u003d \"GAL1272\":\n\t\t\tName \u003d \"DH2 \" + pathname[-2] + pathname[-1] \n\t\tif Room \u003d\u003d \"GAL1171\" or Room \u003d\u003d \"GAL1172\":\n\t\t\tName \u003d \"DH3 \" + pathname[-2] + pathname[-1] \n\t\tif Room \u003d\u003d \"GAL1281\" or Room \u003d\u003d \"GAL1282\":\n\t\t\tName \u003d \"DH4 \" + pathname[-2] + pathname[-1] \n\t\tif Room \u003d\u003d \"GAL1181\" or Room \u003d\u003d \"GAL1182\":\n\t\t\tName \u003d \"DH5 \" + pathname[-2] + pathname[-1] \n\t\ttagPath \u003d item\n\t\toutput.append({ \"SP\": SP,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SP", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Setpoint" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "AlarmSeverity": " ", - "Name": "DH3 HUM03", - "Room": "GAL1171", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH3 HUM01", - "Room": "GAL1172", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH3 HUM02", - "Room": "GAL1172", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_02" - }, - { - "AlarmSeverity": " ", - "Name": "DH1 HUM03", - "Room": "GAL1261", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH1 HUM01", - "Room": "GAL1262", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH1 HUM02", - "Room": "GAL1262", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" - }, - { - "AlarmSeverity": " ", - "Name": "DH2 HUM03", - "Room": "GAL1271", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH2 HUM01", - "Room": "GAL1272", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH2 HUM02", - "Room": "GAL1272", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_02" - }, - { - "AlarmSeverity": " ", - "Name": "DH4 HUM03", - "Room": "GAL1281", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH4 HUM01", - "Room": "GAL1282", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH4 HUM02", - "Room": "GAL1282", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_02" - } - ], - "filter": { - "enabled": true - } - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "paddingBottom": 10, - "paddingLeft": 10, - "paddingRight": 10, - "paddingTop": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.room \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/60d12d398464ecc9149184eadb653c80f581e4d79637f0a7c55fc95411c29abe b/Gateways/FE/projects/.resources/5b1ff1daa4d4294b01075fcb6c4f13d416a62b6cc5af1a8ac66458f9cdcd62ee similarity index 54% rename from Gateways/FE/projects/.resources/60d12d398464ecc9149184eadb653c80f581e4d79637f0a7c55fc95411c29abe rename to Gateways/FE/projects/.resources/5b1ff1daa4d4294b01075fcb6c4f13d416a62b6cc5af1a8ac66458f9cdcd62ee index 5173ae0..dae21ba 100644 --- a/Gateways/FE/projects/.resources/60d12d398464ecc9149184eadb653c80f581e4d79637f0a7c55fc95411c29abe +++ b/Gateways/FE/projects/.resources/5b1ff1daa4d4294b01075fcb6c4f13d416a62b6cc5af1a8ac66458f9cdcd62ee @@ -1,6 +1,5 @@ { "custom": { - "Alarm": 0, "RunningSts": 1, "alarmSeverity": 0 }, @@ -9,21 +8,6 @@ "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH37_MOTOR" }, "propConfig": { - "custom.Alarm": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Alarms/Alarm Summary" - }, - "enabled": false, - "type": "tag" - }, - "persistent": true - }, "custom.RunningSts": { "binding": { "config": { @@ -77,78 +61,9 @@ }, "root": { "children": [ - { - "meta": { - "name": "AlarmBorder" - }, - "position": { - "height": 0.8333, - "width": 0.91, - "x": 0.005, - "y": 0.1259 - }, - "propConfig": { - "props.style.outlineColor": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": null, - "inputType": "scalar", - "mappings": [ - { - "input": 1, - "output": "var(--coolpurple)" - }, - { - "input": 2, - "output": "var(--goldenyellow)" - }, - { - "input": 3, - "output": "var(--sunsetorange)" - }, - { - "input": 4, - "output": "var(--alarmred)" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.style.outlineStyle": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "code": "\tif value \u003e 0:\n\t\treturn \"solid\"\n\telse:\n\t\treturn \"none\"", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "outlineWidth": "3" - } - }, - "type": "ia.display.label" - }, { "custom": { - "colorHandler": { - "lines": "var(--text-muted)" - } + "colorHandler": {} }, "meta": { "name": "Chiller" @@ -160,10 +75,18 @@ "y": -0.0001 }, "propConfig": { + "custom.colorHandler.lines": { + "binding": { + "config": { + "expression": "if({view.custom.alarmSeverity} \u003e 0, \"#7d1116\", \"var(--text-muted)\")" + }, + "type": "expr" + } + }, "custom.colorHandler.status": { "binding": { "config": { - "expression": "if({view.custom.Alarm}, \"var(--state-faulted)\",if({view.custom.RunningSts},\"var(--state-running)\",\"var(--state-standby)\"))" + "expression": "if({view.custom.alarmSeverity} \u003e 0, \"var(--state-faulted)\",if({view.custom.RunningSts},\"var(--state-running)\",\"var(--state-standby)\"))" }, "type": "expr" } @@ -171,298 +94,20 @@ "props.elements[0].elements[0].fill.paint": { "binding": { "config": { - "path": "view.custom.alarmSeverity" + "path": "this.custom.colorHandler.status" }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "visible" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], "type": "property" } }, - "props.elements[0].elements[0].visibility": { + "props.elements[0].elements[0].stroke.paint": { "binding": { "config": { - "path": "view.custom.alarmSeverity" + "path": "this.custom.colorHandler.lines" }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "visible" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], "type": "property" } }, - "props.elements[0].elements[1].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "visible" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[2].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "visible" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[3].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "visible" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[4].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "visible" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[5].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "visible" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[1].elements[0].fill.paint": { + "props.elements[0].elements[1].fill.paint": { "binding": { "config": { "path": "this.custom.colorHandler.status" @@ -470,16 +115,15 @@ "type": "property" } }, - "props.elements[1].elements[0].stroke.paint": { + "props.elements[0].elements[1].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" }, - "enabled": false, "type": "property" } }, - "props.elements[1].elements[1].fill.paint": { + "props.elements[0].elements[2].fill.paint": { "binding": { "config": { "path": "this.custom.colorHandler.status" @@ -487,16 +131,15 @@ "type": "property" } }, - "props.elements[1].elements[1].stroke.paint": { + "props.elements[0].elements[2].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" }, - "enabled": false, "type": "property" } }, - "props.elements[1].elements[2].fill.paint": { + "props.elements[0].elements[3].fill.paint": { "binding": { "config": { "path": "this.custom.colorHandler.status" @@ -504,33 +147,7 @@ "type": "property" } }, - "props.elements[1].elements[2].stroke.paint": { - "binding": { - "config": { - "path": "this.custom.colorHandler.lines" - }, - "enabled": false, - "type": "property" - } - }, - "props.elements[1].elements[3].fill.paint": { - "binding": { - "config": { - "path": "this.custom.colorHandler.status" - }, - "type": "property" - } - }, - "props.elements[1].elements[3].stroke.paint": { - "binding": { - "config": { - "path": "this.custom.colorHandler.lines" - }, - "enabled": false, - "type": "property" - } - }, - "props.elements[1].elements[4].elements[0].stroke.paint": { + "props.elements[0].elements[3].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -538,7 +155,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[10].stroke.paint": { + "props.elements[0].elements[4].elements[0].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -546,7 +163,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[11].stroke.paint": { + "props.elements[0].elements[4].elements[10].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -554,7 +171,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[12].stroke.paint": { + "props.elements[0].elements[4].elements[11].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -562,7 +179,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[13].stroke.paint": { + "props.elements[0].elements[4].elements[12].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -570,7 +187,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[14].stroke.paint": { + "props.elements[0].elements[4].elements[13].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -578,7 +195,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[15].stroke.paint": { + "props.elements[0].elements[4].elements[14].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -586,7 +203,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[16].stroke.paint": { + "props.elements[0].elements[4].elements[15].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -594,7 +211,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[17].stroke.paint": { + "props.elements[0].elements[4].elements[16].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -602,7 +219,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[18].stroke.paint": { + "props.elements[0].elements[4].elements[17].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -610,7 +227,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[1].stroke.paint": { + "props.elements[0].elements[4].elements[18].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -618,7 +235,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[2].stroke.paint": { + "props.elements[0].elements[4].elements[1].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -626,7 +243,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[3].stroke.paint": { + "props.elements[0].elements[4].elements[2].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -634,7 +251,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[4].stroke.paint": { + "props.elements[0].elements[4].elements[3].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -642,7 +259,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[5].stroke.paint": { + "props.elements[0].elements[4].elements[4].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -650,7 +267,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[6].stroke.paint": { + "props.elements[0].elements[4].elements[5].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -658,7 +275,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[7].stroke.paint": { + "props.elements[0].elements[4].elements[6].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -666,7 +283,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[8].stroke.paint": { + "props.elements[0].elements[4].elements[7].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -674,7 +291,15 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[9].stroke.paint": { + "props.elements[0].elements[4].elements[8].stroke.paint": { + "binding": { + "config": { + "path": "this.custom.colorHandler.lines" + }, + "type": "property" + } + }, + "props.elements[0].elements[4].elements[9].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -685,172 +310,6 @@ }, "props": { "elements": [ - { - "elements": [ - { - "d": "M100.525,0.648l6.489,6.489c0.199,0.199 0.199,0.522 -0,0.721l-6.489,6.489c-0.199,0.199 -0.522,0.199 -0.721,0l-6.489,-6.489c-0.199,-0.199 -0.199,-0.522 -0,-0.721l6.489,-6.489c0.199,-0.199 0.522,-0.199 0.721,-0Z", - "fill": {}, - "name": "path", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "path" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M99.83,8.96l-0.351,-4.735l1.371,0l-0.34,4.735l-0.68,-0Zm-0.318,1.81l-0,-1.105l1.305,0l-0,1.105l-1.305,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - }, - { - "elements": [ - { - "d": "M99.522,1.849c0.134,-0.227 0.378,-0.367 0.642,-0.367c0.265,-0 0.509,0.14 0.643,0.367c1.411,2.401 4.768,8.113 6.195,10.541c0.135,0.231 0.137,0.516 0.004,0.748c-0.133,0.232 -0.379,0.375 -0.647,0.375l-12.39,0c-0.267,0 -0.514,-0.143 -0.647,-0.375c-0.132,-0.232 -0.131,-0.517 0.005,-0.748c1.427,-2.428 4.784,-8.14 6.195,-10.541Z", - "fill": { - "paint": "#f4b834" - }, - "name": "path", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "path" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M99.793,9.942l-0.39,-4.988l1.522,0l-0.377,4.988l-0.755,-0Zm-0.353,1.907l-0,-1.164l1.449,0l-0,1.164l-1.449,-0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - }, - { - "elements": [ - { - "d": "M104.973,1.181l0,12.633c0,0.265 -0.215,0.481 -0.481,0.481l-8.656,-0c-0.265,-0 -0.481,-0.216 -0.481,-0.481l0,-12.633c0,-0.265 0.216,-0.48 0.481,-0.48l8.656,-0c0.266,-0 0.481,0.215 0.481,0.48Z", - "fill": { - "paint": "#7166b7" - }, - "name": "path", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "path" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M99.793,9.042l-0.39,-5.001l1.522,-0l-0.377,5.001l-0.755,0Zm-0.353,1.912l-0,-1.167l1.449,0l-0,1.167l-1.449,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - }, - { - "cx": "100.164", - "cy": "7.498", - "fill": { - "paint": "#e22028" - }, - "name": "circle", - "r": "7.198", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "circle" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M98.379,9.232l-0.39,-5.617l1.522,-0l-0.377,5.617l-0.755,0Zm-0.353,2.148l-0,-1.31l1.448,-0l0,1.31l-1.448,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - }, - { - "elements": [ - { - "d": "M101.264,9.232l-0.39,-5.617l1.522,-0l-0.377,5.617l-0.755,0Zm-0.353,2.148l-0,-1.31l1.449,-0l-0,1.31l-1.449,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - } - ], - "id": "Alarm-Items", - "name": "Alarm-Items", - "type": "group" - }, { "elements": [ { @@ -858,7 +317,6 @@ "fill": {}, "name": "path", "stroke": { - "paint": "var(--olGray)", "width": "0.83px" }, "type": "path" @@ -869,7 +327,6 @@ "name": "path", "stroke": { "linecap": "butt", - "paint": "var(--olGray)", "width": "0.75px" }, "type": "path" @@ -880,7 +337,6 @@ "name": "path", "stroke": { "linecap": "butt", - "paint": "var(--olGray)", "width": "0.75px" }, "type": "path" @@ -891,7 +347,6 @@ "name": "path", "stroke": { "linecap": "butt", - "paint": "var(--olGray)", "width": "0.75px" }, "type": "path" @@ -1137,57 +592,8 @@ "type": "ia.shapes.svg" }, { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\ttagPath \u003d self.view.params.tagPath\n\tobjectName \u003d self.view.params.objectName\n\tutils.nav.openEQPopup(objectName, tagPath)" - }, - "scope": "G", - "type": "script" - } - } - }, "meta": { - "name": "Hover", - "tooltip": { - "enabled": true, - "location": "top-right" - } - }, - "position": { - "height": 0.84, - "width": 0.92, - "y": 0.1192 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Parameters.DeviceLabel" - }, - "type": "tag" - } - } - }, - "props": { - "style": { - "classes": "containers/HoverOver", - "outlineColor": "#FF0000", - "outlineStyle": "none", - "outlineWidth": "3" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" + "name": "status" }, "position": { "height": 0.1533, @@ -1196,10 +602,18 @@ "y": 0.7133 }, "propConfig": { + "props.style.color": { + "binding": { + "config": { + "expression": "if({view.custom.alarmSeverity}\u003e0, \"yellow\",\"var(--action-primary)\")" + }, + "type": "expr" + } + }, "props.text": { "binding": { "config": { - "expression": "if({view.custom.Alarm}, \"Faulted\",if({view.custom.RunningSts},\"Running\",\"OFF\"))" + "expression": "if({view.custom.alarmSeverity}\u003e0, \"Faulted\",if({view.custom.RunningSts},\"Running\",\"OFF\"))" }, "type": "expr" } @@ -1207,16 +621,18 @@ }, "props": { "style": { - "color": "var(--tagvalue-color)", - "fontSize": 12, + "fontSize": 14, "textAlign": "center" + }, + "textStyle": { + "fontWeight": "bold" } }, "type": "ia.display.label" }, { "meta": { - "name": "Label" + "name": "LLS_status" }, "position": { "height": 0.1467, @@ -1275,6 +691,139 @@ } }, "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\ttagPath \u003d self.view.params.tagPath\n\tobjectName \u003d self.view.params.objectName\n\tutils.nav.openEQPopup(objectName, tagPath)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "HoverBox", + "tooltip": { + "enabled": true, + "location": "top-right" + } + }, + "position": { + "height": 0.84, + "width": 0.92, + "y": 0.1192 + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Parameters.DeviceLabel" + }, + "type": "tag" + } + }, + "props.style.outlineColor": { + "binding": { + "config": { + "path": "view.custom.alarmSeverity" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": "#00000000" + }, + { + "input": 1, + "output": "var(--alarm-low)" + }, + { + "input": 2, + "output": "var(--alarm-medium)" + }, + { + "input": 3, + "output": "var(--alarm-high)" + }, + { + "input": 4, + "output": "var(--alarm-critical)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + }, + "props.style.outlineStyle": { + "binding": { + "config": { + "path": "view.custom.alarmSeverity" + }, + "transforms": [ + { + "expression": "if({value}\u003e0, \"solid\", \"none\")", + "type": "expression" + } + ], + "type": "property" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": "var(--borderRadius)", + "borderBottomRightRadius": "var(--borderRadius)", + "borderTopLeftRadius": "var(--borderRadius)", + "borderTopRightRadius": "var(--borderRadius)", + "classes": "containers/HoverOver", + "outlineWidth": 2 + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "height": 0.1533, + "width": 0.11, + "x": 0.875, + "y": 0.0469 + }, + "propConfig": { + "props.params.AlarmSeverity": { + "binding": { + "config": { + "path": "view.custom.alarmSeverity" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "ack": false + }, + "path": "Library/Alarms/Icons", + "useDefaultViewHeight": true, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" } ], "meta": { diff --git a/Gateways/FE/projects/.resources/6ba0e513745e1ad0952a28d7a1d369335a8dfb9dff0de17ec457fa9ee198df71 b/Gateways/FE/projects/.resources/5b272956d949c08851c3012368b4852082982f33b13ce9768229a83326cd9a21 similarity index 95% rename from Gateways/FE/projects/.resources/6ba0e513745e1ad0952a28d7a1d369335a8dfb9dff0de17ec457fa9ee198df71 rename to Gateways/FE/projects/.resources/5b272956d949c08851c3012368b4852082982f33b13ce9768229a83326cd9a21 index 347ed4b..586c790 100644 --- a/Gateways/FE/projects/.resources/6ba0e513745e1ad0952a28d7a1d369335a8dfb9dff0de17ec457fa9ee198df71 +++ b/Gateways/FE/projects/.resources/5b272956d949c08851c3012368b4852082982f33b13ce9768229a83326cd9a21 @@ -167,20 +167,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -269,16 +262,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,7 +389,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/5b8b639fb2d40ab12fa05b110d1c2a9198b20e32808de1848d529b7509bbd3a9 b/Gateways/FE/projects/.resources/5b8b639fb2d40ab12fa05b110d1c2a9198b20e32808de1848d529b7509bbd3a9 deleted file mode 100644 index 5d66e63..0000000 Binary files a/Gateways/FE/projects/.resources/5b8b639fb2d40ab12fa05b110d1c2a9198b20e32808de1848d529b7509bbd3a9 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/5c2ae214a01cf61964ae3ed52bbdb342a1c5b94e10266ed28fd0e149a14069fe b/Gateways/FE/projects/.resources/5c2ae214a01cf61964ae3ed52bbdb342a1c5b94e10266ed28fd0e149a14069fe new file mode 100644 index 0000000..c1f64f4 --- /dev/null +++ b/Gateways/FE/projects/.resources/5c2ae214a01cf61964ae3ed52bbdb342a1c5b94e10266ed28fd0e149a14069fe @@ -0,0 +1,316 @@ +{ + "custom": {}, + "params": {}, + "props": {}, + "root": { + "children": [ + { + "meta": { + "name": "MovingAnalogIndicator" + }, + "position": { + "height": 223, + "rotate": { + "anchor": "140% 62%" + }, + "width": 71, + "x": 235, + "y": 326 + }, + "props": { + "defaultRangeColor": "green", + "desiredHigh": 65, + "desiredLow": 40, + "desiredRangeColor": "blue", + "highAlarm": 90, + "highHighAlarm": 95, + "highInterlock": "", + "inactiveAlarmColor": "yellow", + "level1AlarmColor": "red", + "level2AlarmColor": "orange", + "lowAlarm": 10, + "lowInterlock": null, + "lowLowAlarm": 5, + "processValue": 95, + "setpointColor": "purple", + "setpointValue": 50 + }, + "type": "ia.display.moving-analog-indicator" + }, + { + "meta": { + "name": "MovingAnalogIndicator_0" + }, + "position": { + "height": 223, + "rotate": { + "anchor": "140% 62%" + }, + "width": 71, + "x": 250, + "y": 326 + }, + "props": { + "defaultRangeColor": "green", + "desiredHigh": 65, + "desiredLow": 40, + "desiredRangeColor": "blue", + "highAlarm": 90, + "highHighAlarm": 95, + "highInterlock": "", + "inactiveAlarmColor": "yellow", + "level1AlarmColor": "red", + "level2AlarmColor": "orange", + "lowAlarm": 10, + "lowInterlock": null, + "lowLowAlarm": 5, + "processValue": 95, + "reverseIndicator": true, + "setpointColor": "purple", + "setpointValue": 50 + }, + "type": "ia.display.moving-analog-indicator" + }, + { + "meta": { + "name": "Sparkline" + }, + "position": { + "height": 100, + "width": 250, + "x": 357.33000000000004, + "y": 337.5 + }, + "props": { + "color": "blue", + "points": [ + 59, + 80, + 80, + 100, + 68, + 62, + 87, + 72, + 42, + 49, + 58, + 53, + 57, + 51, + 42, + 32, + 37, + 30, + 24, + 38, + 57, + 29, + 18, + 32, + 38, + 24, + 24, + 24, + 20, + 21, + 29, + 32, + 26, + 18, + 32, + 36, + 30, + 36, + 29, + 32, + 29, + 28, + 41, + 20, + 28, + 58, + 18, + 24, + 16, + 2, + 22, + 17, + 22, + 21, + 12, + 22, + 14, + 13, + 11, + 20, + 16, + 16, + 18, + 12, + 28, + 28, + 32, + 16, + 16, + 24, + 16, + 20, + 14, + 18, + 12, + 26, + 17, + 11, + 30, + 16, + 9, + 20, + 42, + 13, + 13, + 24, + 17, + 13, + 20, + 12, + 14, + 13, + 14, + 71, + 82, + 20, + 16, + 20, + 22, + 17, + 5 + ] + }, + "type": "ia.display.sparkline" + }, + { + "meta": { + "name": "Sparkline_0" + }, + "position": { + "height": 100, + "width": 250, + "x": 357, + "y": 337 + }, + "props": { + "color": "red", + "points": [ + 70, + 92, + 92, + 112, + 80, + 74, + 99, + 84, + 54, + 61, + 70, + 65, + 69, + 61, + 52, + 42, + 47, + 40, + 34, + 48, + 67, + 39, + 28, + 42, + 48, + 34, + 34, + 34, + 30, + 31, + 39, + 42, + 36, + 28, + 42, + 46, + 40, + 46, + 39, + 42, + 39, + 38, + 51, + 30, + 38, + 68, + 28, + 34, + 26, + 12, + 32, + 27, + 32, + 31, + 22, + 32, + 24, + 23, + 21, + 30, + 26, + 26, + 28, + 22, + 38, + 38, + 42, + 26, + 26, + 34, + 26, + 30, + 24, + 28, + 22, + 36, + 27, + 21, + 40, + 26, + 19, + 30, + 52, + 23, + 23, + 34, + 27, + 23, + 30, + 22, + 24, + 23, + 24, + 81, + 92, + 30, + 26, + 30, + 32, + 27, + 15 + ] + }, + "type": "ia.display.sparkline" + } + ], + "meta": { + "name": "root" + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/5c9231b2404c9d92d6b892a9eaf104f5c395b516451a3aa022c1a1b8a6715775 b/Gateways/FE/projects/.resources/5c9231b2404c9d92d6b892a9eaf104f5c395b516451a3aa022c1a1b8a6715775 deleted file mode 100644 index 8da2b6d..0000000 Binary files a/Gateways/FE/projects/.resources/5c9231b2404c9d92d6b892a9eaf104f5c395b516451a3aa022c1a1b8a6715775 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/5db7d8cda6e006e45cb7e0c8fc2f7547e4fc5a5734830ee882d7fc25cfd8a7b5 b/Gateways/FE/projects/.resources/5db7d8cda6e006e45cb7e0c8fc2f7547e4fc5a5734830ee882d7fc25cfd8a7b5 new file mode 100644 index 0000000..503a5d1 Binary files /dev/null and b/Gateways/FE/projects/.resources/5db7d8cda6e006e45cb7e0c8fc2f7547e4fc5a5734830ee882d7fc25cfd8a7b5 differ diff --git a/Gateways/FE/projects/.resources/a9cc357f4eaa96a56be5e10a2a97e390359acaf030ba61a40fe43fb2c7d92d67 b/Gateways/FE/projects/.resources/5dfa4723a87103783b1ee4bdb6fd035f5d87edbe5cb43f92a3e637cd82a9a652 similarity index 95% rename from Gateways/FE/projects/.resources/a9cc357f4eaa96a56be5e10a2a97e390359acaf030ba61a40fe43fb2c7d92d67 rename to Gateways/FE/projects/.resources/5dfa4723a87103783b1ee4bdb6fd035f5d87edbe5cb43f92a3e637cd82a9a652 index a67c101..9aa5750 100644 --- a/Gateways/FE/projects/.resources/a9cc357f4eaa96a56be5e10a2a97e390359acaf030ba61a40fe43fb2c7d92d67 +++ b/Gateways/FE/projects/.resources/5dfa4723a87103783b1ee4bdb6fd035f5d87edbe5cb43f92a3e637cd82a9a652 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 1 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/5ffae89b40e437e0fcdbc3b2d5d1144a6b44e787df2db85500809bf3a73dd419 b/Gateways/FE/projects/.resources/5ffae89b40e437e0fcdbc3b2d5d1144a6b44e787df2db85500809bf3a73dd419 new file mode 100644 index 0000000..881ee54 Binary files /dev/null and b/Gateways/FE/projects/.resources/5ffae89b40e437e0fcdbc3b2d5d1144a6b44e787df2db85500809bf3a73dd419 differ diff --git a/Gateways/FE/projects/.resources/639ea2db822f164b81366d524f5ebfab421334e09bf65ce55b666dd3f5128fff b/Gateways/FE/projects/.resources/639ea2db822f164b81366d524f5ebfab421334e09bf65ce55b666dd3f5128fff deleted file mode 100644 index 085b7a0..0000000 --- a/Gateways/FE/projects/.resources/639ea2db822f164b81366d524f5ebfab421334e09bf65ce55b666dd3f5128fff +++ /dev/null @@ -1,1554 +0,0 @@ -{ - "custom": { - "STU_tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01", - "data": [ - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU01", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU03", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU05", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU07", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU09", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU11", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU13", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU15", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU17", - "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU19", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU02", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU04", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU06", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU08", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU10", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU12", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU14", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU16", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU18", - "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU20", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU01", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU03", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU05", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU07", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU09", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU11", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU13", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU15", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU17", - "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU19", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU02", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU04", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU06", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU08", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU10", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU12", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU14", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU16", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU18", - "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU20", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU03", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU05", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU07", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU09", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU11", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU13", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU15", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU17", - "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU19", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU02", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU04", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU06", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU08", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU10", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU12", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU14", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU16", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU18", - "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU20", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU01", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU03", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU05", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU07", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU09", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU11", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU13", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU15", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU17", - "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU19", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU02", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU04", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU06", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU08", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU10", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU12", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU14", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU16", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU18", - "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU20", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU01", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU03", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU05", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU07", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU09", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU11", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU13", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU15", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU17", - "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU19", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU02", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU04", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU08", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU10", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU12", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU14", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU16", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU18", - "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU20" - ], - "room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, - "params": {}, - "propConfig": { - "custom.STU_tagPath": { - "binding": { - "config": { - "path": "view.custom.selected" - }, - "transforms": [ - { - "code": "\toutput \u003d \"\"\n\tif(value is None):\n\t\toutput \u003d \"[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01\"\n\telse:\n\t\toutput \u003d value\n\treturn output", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.custom.tagPath}", - "time": "now(3000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/STU\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.room": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "STU diagram" - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.custom.STU_tagPath" - }, - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": false, - "objectName": "STU" - }, - "path": "Library/Diagrams/HVAC/Dgrm_STU", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 5 - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "padding": 10 - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tpayload \u003d {\t\"Tag\":self.props.selection.data[0].tagPath}\n\tmessageType \u003d \"equipmentUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "50%" - }, - "propConfig": { - "props.data": { - "binding": { - "config": { - "struct": { - "data": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"data\"]\n\tfor item in data:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tinstance \u003d system.tag.readBlocking(item)[0].value\n\t\tRAT \u003d instance[\"Return Air Temperature\"]\n\t\tName \u003d instance[\"Meta\"][\"EqName\"]\n\t\tRoom \u003d instance[\"Meta\"][\"Room\"]\n\t\toutput.append({\"RAT\":RAT ,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.filter.text": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "type": "property" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "RAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Return Air Temperature" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "AlarmSeverity": " ", - "Name": " DH3 STU01", - "RAT": 75.5999984741211, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU03", - "RAT": 75.4000015258789, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU05", - "RAT": 76.5, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU07", - "RAT": 76.69999694824219, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU09", - "RAT": 77.19999694824219, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU11", - "RAT": 76, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU13", - "RAT": 75.4000015258789, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU15", - "RAT": 75.5, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU17", - "RAT": 76.5999984741211, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU19", - "RAT": 77.30000305175781, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU02", - "RAT": 76.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU04", - "RAT": 76.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU06", - "RAT": 76.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU08", - "RAT": 75.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU10", - "RAT": 75.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU12", - "RAT": 75.19999694824219, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU14", - "RAT": 75.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU16", - "RAT": 75.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU18", - "RAT": 75.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU20", - "RAT": 75.69999694824219, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU01", - "RAT": 73.9000015258789, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU03", - "RAT": 74.80000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU05", - "RAT": 75.19999694824219, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU07", - "RAT": 75.4000015258789, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU09", - "RAT": 75.19999694824219, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU11", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU13", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU15", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU17", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU19", - "RAT": 75.19999694824219, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU02", - "RAT": 75, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU04", - "RAT": 75, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU06", - "RAT": 75, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU08", - "RAT": 75.0999984741211, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU10", - "RAT": 75.0999984741211, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU12", - "RAT": 75.19999694824219, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU14", - "RAT": 75.30000305175781, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU16", - "RAT": 75.19999694824219, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU18", - "RAT": 75.30000305175781, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU20", - "RAT": 75.19999694824219, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU01", - "RAT": 89.69999694824219, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU03", - "RAT": 85.4000015258789, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU05", - "RAT": 82.5999984741211, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU07", - "RAT": 82.69999694824219, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU09", - "RAT": 82.0999984741211, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU11", - "RAT": 82, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU13", - "RAT": 83.5, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU15", - "RAT": 81.80000305175781, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU17", - "RAT": 82.4000015258789, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU19", - "RAT": 81.0999984741211, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU02", - "RAT": 85, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU04", - "RAT": 81.30000305175781, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU06", - "RAT": 82, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU08", - "RAT": 81.80000305175781, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU10", - "RAT": 82.0999984741211, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU12", - "RAT": 81.19999694824219, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU14", - "RAT": 82.0999984741211, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU16", - "RAT": 81.0999984741211, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU18", - "RAT": 80.19999694824219, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU20", - "RAT": 82.80000305175781, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU01", - "RAT": 81.0999984741211, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU03", - "RAT": 82.9000015258789, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU05", - "RAT": 82.80000305175781, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU07", - "RAT": 82.5999984741211, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU09", - "RAT": 82.69999694824219, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU11", - "RAT": 82.4000015258789, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU13", - "RAT": 83.5, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU15", - "RAT": 82.5, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU17", - "RAT": 82.69999694824219, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU19", - "RAT": 82.5999984741211, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU02", - "RAT": 81.19999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU04", - "RAT": 81.9000015258789, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU06", - "RAT": 81.69999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU08", - "RAT": 81.5, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU10", - "RAT": 81, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU12", - "RAT": 80.5999984741211, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU14", - "RAT": 81.19999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU16", - "RAT": 80.5, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU18", - "RAT": 80.69999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU20", - "RAT": 83, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU01", - "RAT": 75.5, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU03", - "RAT": 75.9000015258789, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU05", - "RAT": 76.0999984741211, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU07", - "RAT": 76, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU09", - "RAT": 77.30000305175781, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU11", - "RAT": 76.5, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU13", - "RAT": 76.4000015258789, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU15", - "RAT": 76.5999984741211, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU17", - "RAT": 76.5999984741211, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU19", - "RAT": 76.5, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU02", - "RAT": 75.19999694824219, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU04", - "RAT": 75.0999984741211, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU06", - "RAT": 75.0999984741211, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU08", - "RAT": 75.19999694824219, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU10", - "RAT": 75.30000305175781, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU12", - "RAT": 75.19999694824219, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU14", - "RAT": 75.4000015258789, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU16", - "RAT": 75.30000305175781, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU18", - "RAT": 75.30000305175781, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU20", - "RAT": 75, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU20" - } - ], - "filter": { - "enabled": true - } - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-around", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.room \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "equipmentUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.STU_tagPath \u003d payload[\"Tag\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/652a5d14bd2b5b2e4b7466f45cc216611e3afcb48179ccb9b61c17707ff289b7 b/Gateways/FE/projects/.resources/652a5d14bd2b5b2e4b7466f45cc216611e3afcb48179ccb9b61c17707ff289b7 deleted file mode 100644 index 35fe82b..0000000 Binary files a/Gateways/FE/projects/.resources/652a5d14bd2b5b2e4b7466f45cc216611e3afcb48179ccb9b61c17707ff289b7 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/655813082acc01ca4b2a64035d367a57bac0532b0fbfd598f61c9361934d6bce b/Gateways/FE/projects/.resources/655813082acc01ca4b2a64035d367a57bac0532b0fbfd598f61c9361934d6bce new file mode 100644 index 0000000..1c41208 Binary files /dev/null and b/Gateways/FE/projects/.resources/655813082acc01ca4b2a64035d367a57bac0532b0fbfd598f61c9361934d6bce differ diff --git a/Gateways/FE/projects/.resources/65a98a2d93974785b5177c41b221f753225d5c2fd4d673ae6677fdd3ec3e40b8 b/Gateways/FE/projects/.resources/65a98a2d93974785b5177c41b221f753225d5c2fd4d673ae6677fdd3ec3e40b8 deleted file mode 100644 index 42456c0..0000000 --- a/Gateways/FE/projects/.resources/65a98a2d93974785b5177c41b221f753225d5c2fd4d673ae6677fdd3ec3e40b8 +++ /dev/null @@ -1,876 +0,0 @@ -{ - "custom": { - "VAV_tagPaths": [], - "data": [ - "[Ignition_Common_IO_Gtwy]RM1100/SATB1_HS1_RM1100_VAV13", - "[Ignition_Common_IO_Gtwy]RM1100/SATB1_HS1_RM1100_VAV14", - "[Ignition_Common_IO_Gtwy]RM1101/SATB1_HS1_RM1101_VAV17", - "[Ignition_Common_IO_Gtwy]RM1102/SATB1_HS1_RM1102_VAV15", - "[Ignition_Common_IO_Gtwy]RM1102-2/SATB1_HS1_RM1102-2_VAV16", - "[Ignition_Common_IO_Gtwy]RM1103/SATB1_HS1_RM1103_VAV09", - "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06", - "[Ignition_Common_IO_Gtwy]RM1110/SATB1_HS1_RM1110_VAV04", - "[Ignition_Common_IO_Gtwy]RM1110/SATB1_HS1_RM1110_VAV05", - "[Ignition_Common_IO_Gtwy]RM1111/SATB1_HS1_RM1111_VAV11", - "[Ignition_Common_IO_Gtwy]RM1113/SATB1_HS1_RM1113_VAV08", - "[Ignition_Common_IO_Gtwy]RM1114/SATB1_HS1_RM1114_VAV07", - "[Ignition_Common_IO_Gtwy]RM1116/SATB1_HS1_RM1116_VAV01", - "[Ignition_Common_IO_Gtwy]RM1117/SATB1_HS1_RM1117_VAV02", - "[Ignition_Common_IO_Gtwy]RM1118/SATB1_HS1_RM1118_VAV03", - "[Ignition_Common_IO_Gtwy]RM1121/SATB1_HS1_RM1121_VAV19", - "[Ignition_Common_IO_Gtwy]RM1127/SATB1_HS1_RM1127_VAV22", - "[Ignition_Common_IO_Gtwy]RM1127/SATB1_HS1_RM1127_VAV23", - "[Ignition_Common_IO_Gtwy]RM1133/SATB1_HS1_RM1133_VAV25", - "[Ignition_Common_IO_Gtwy]RM1133-5/SATB1_HS1_RM1133-5_VAV18", - "[Ignition_Common_IO_Gtwy]RM1134/SATB1_HS1_RM1134_VAV20", - "[Ignition_Common_IO_Gtwy]RM1135/SATB1_HS1_RM1135_VAV21", - "[Ignition_Common_IO_Gtwy]RM1137/SATB1_HS1_RM1137_VAV12", - "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS1_RM1138_VAV29", - "[Ignition_Common_IO_Gtwy]RM1139/SATB1_HS1_RM1139_VAV26", - "[Ignition_Common_IO_Gtwy]RM1139/SATB1_HS1_RM1139_VAV27", - "[Ignition_Common_IO_Gtwy]RM1139/SATB1_HS1_RM1139_VAV28", - "[Ignition_Common_IO_Gtwy]RM1141/SATB1_HS1_RM1141_VAV24", - "[Ignition_Common_IO_Gtwy]RM1153/SATB1_HS1_RM1153_VAV34", - "[Ignition_Common_IO_Gtwy]RM1190/SATB1_HS1_RM1190_VAV33", - "[Ignition_Common_IO_Gtwy]RM1192/SATB1_HS1_RM1192_VAV31", - "[Ignition_Common_IO_Gtwy]RM1194/SATB1_HS1_RM1194_VAV32" - ], - "selectedRoom": "RM1109", - "tagPath": "[Ignition_Common_IO_Gtwy]", - "tagPath_VAVmaster": "[Ignition_Common_IO_Gtwy]VAV/SATB1_VAV_Master" - }, - "params": {}, - "propConfig": { - "custom.VAV_tagPaths": { - "binding": { - "config": { - "struct": { - "selected": "{view.custom.selectedRoom}", - "time": "now(1000)" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selected\"]\n\tpath \u003d str(self.view.custom.tagPath) + selected\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/VAV v2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.custom.tagPath}", - "time": "now(3000)" - }, - "waitOnAll": false - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/VAV\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\toutput.append(str(item[\"fullPath\"]))\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.selectedRoom": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - }, - "custom.tagPath_VAVmaster": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "32px" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "path": "view.custom.VAV_tagPaths[0]" - }, - "transforms": [ - { - "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "paddingBottom": 5, - "paddingLeft": 15, - "paddingRight": 15, - "paddingTop": 5 - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.VAV_tagPaths" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"VAV v2\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "VAV v2", - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" - } - ], - "justify": "center", - "path": "Library/Diagrams/HVAC/Dgrm_VAV", - "style": { - "backgroundColor": "var(--containerRoot)", - "gap": 50, - "overflow": "visible" - }, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\ttagPath \u003d self.view.custom.tagPath_VAVmaster\n\tobjectName \u003d \"VAVMaster\"\n\tpayload\u003d{\n\t\t\u0027objectName\u0027: objectName,\n\t\t\u0027tagPath\u0027: tagPath,\n\t\t\u0027modal\u0027: False,\n\t\t\u0027resizable\u0027: True,\n\t\t\u0027draggable\u0027: True,\n\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t}\n\t}\n\tutils.nav.eqPopupMsg(self, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button" - }, - "position": { - "basis": "34px" - }, - "props": { - "primary": false, - "text": "VAV Global parameters" - }, - "type": "ia.input.button" - } - ], - "meta": { - "name": "Diagram" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "gap": 20 - }, - "wrap": "wrap" - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "30%", - "grow": 1, - "shrink": 0 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].room}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "66%", - "grow": 1, - "shrink": 0 - }, - "propConfig": { - "custom.data": { - "binding": { - "config": { - "struct": { - "p": "{view.custom.data}", - "t": "now(3000)" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tpaths \u003d value[\u0027p\u0027]\n\tsubPaths \u003d [\n\t\t\"/Space Temperature\",\n\t\t\"/Damper Position\"\n\t]\n\tsize \u003d len(subPaths)\n\ttags \u003d []\n\tfor path in paths:\n\t\tfor sub in subPaths:\n\t\t\ttags.append(path+sub)\n\tdata \u003d system.tag.readBlocking(tags)\n\toutput \u003d []\n\tfor vav in paths:\n\t\telement \u003d {}\n\t\trawTag \u003d vav.split(\u0027_\u0027)\n\t\tname \u003d rawTag[-1]\n\t\troom \u003d rawTag[-2]\n\t\t#almS \u003d alarm.summary.calcMaxPriority(vav)\n\t\talmS \u003d 0\n\t\tif almS \u003c\u003d0: alm_lbl \u003d \u0027\u0027\n\t\telif almS \u003d\u003d1: alm_lbl \u003d \u0027Info\u0027\n\t\telif almS \u003d\u003d2: alm_lbl \u003d \u0027Warning\u0027\n\t\telif almS \u003d\u003d3: alm_lbl \u003d \u0027High\u0027\n\t\telif almS \u003d\u003d4: alm_lbl \u003d \u0027Critical\u0027\n\t\telse: alm_lbl \u003d \u0027error\u0027\n\t\t\n\t\tpos \u003d paths.index(vav)\n\t\tidx1 \u003d pos * size\n\t\tidx2 \u003d (pos * size) +1\n\t\telement[\u0027name\u0027] \u003d name\n\t\telement[\u0027room\u0027] \u003d room\n\t\telement[\u0027alarm\u0027] \u003d alm_lbl\n\t\telement[\u0027SpaceTemp\u0027] \u003d data[idx1].value\n\t\telement[\u0027DamperPos\u0027] \u003d data[idx2].value\n\t\t\n\t\toutput.append(element)\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.selectedData": { - "binding": { - "config": { - "struct": { - "key": "{view.custom.loading}", - "selectedRow": "{this.props.selection.selectedRow}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selectedRow\"]\n\tif selected is None:\n\t\tselected \u003d 0\n\ttagPath \u003d self.props.data[selected].tagPath\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/VAV v2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.data": { - "binding": { - "config": { - "path": "this.custom.data" - }, - "type": "property" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Name" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 70 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Room" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 90 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SpaceTemp", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Space Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 70 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "DamperPos", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Damper Pos" - }, - "justify": "left", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": false, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 80 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "alarm", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "dragOrderable": false, - "filter": { - "enabled": true - }, - "headerGroups": [ - [] - ], - "pager": { - "activeOption": 14, - "options": [ - 5, - 10, - 14, - 50, - 100 - ] - }, - "rows": { - "striped": { - "color": { - "even": "#C0C0C0" - } - } - }, - "virtualized": false - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-around", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/679d02ec046174e61b140e463b9b3aebdce0f109525db5a373769835a24fe4f6 b/Gateways/FE/projects/.resources/679d02ec046174e61b140e463b9b3aebdce0f109525db5a373769835a24fe4f6 deleted file mode 100644 index e1becab..0000000 --- a/Gateways/FE/projects/.resources/679d02ec046174e61b140e463b9b3aebdce0f109525db5a373769835a24fe4f6 +++ /dev/null @@ -1,269 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Type", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Breaker Type" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 ConfigV2", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/67fd0a9c90c90da5a4ddcfd920da6fc702584a018570bca43d6fccb25c809bc8 b/Gateways/FE/projects/.resources/67fd0a9c90c90da5a4ddcfd920da6fc702584a018570bca43d6fccb25c809bc8 deleted file mode 100644 index 5622557..0000000 Binary files a/Gateways/FE/projects/.resources/67fd0a9c90c90da5a4ddcfd920da6fc702584a018570bca43d6fccb25c809bc8 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/68205ed26f8f799e957e563fdf10a7c9f9c0c8d32d03d6a0f3ce885d5f9b3375 b/Gateways/FE/projects/.resources/68205ed26f8f799e957e563fdf10a7c9f9c0c8d32d03d6a0f3ce885d5f9b3375 deleted file mode 100644 index 5fd1cc8..0000000 Binary files a/Gateways/FE/projects/.resources/68205ed26f8f799e957e563fdf10a7c9f9c0c8d32d03d6a0f3ce885d5f9b3375 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/7211139d4b41a39447e1257df70aee8686ac3af20cfe069bea2e046e1c68ea9a b/Gateways/FE/projects/.resources/6a0d2ee4ad4ff3cd281398bc88efd8d89cd118f52cdf807c7d5d8faed1d85a2c similarity index 95% rename from Gateways/FE/projects/.resources/7211139d4b41a39447e1257df70aee8686ac3af20cfe069bea2e046e1c68ea9a rename to Gateways/FE/projects/.resources/6a0d2ee4ad4ff3cd281398bc88efd8d89cd118f52cdf807c7d5d8faed1d85a2c index 0cadaa0..1eb0c6f 100644 --- a/Gateways/FE/projects/.resources/7211139d4b41a39447e1257df70aee8686ac3af20cfe069bea2e046e1c68ea9a +++ b/Gateways/FE/projects/.resources/6a0d2ee4ad4ff3cd281398bc88efd8d89cd118f52cdf807c7d5d8faed1d85a2c @@ -159,20 +159,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -261,16 +254,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -392,7 +380,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/6a6e21cc41ed5f6b0a678fc999b8ad10245d47989b7b6962929091355c29b494 b/Gateways/FE/projects/.resources/6a6e21cc41ed5f6b0a678fc999b8ad10245d47989b7b6962929091355c29b494 deleted file mode 100644 index 8b23c15..0000000 Binary files a/Gateways/FE/projects/.resources/6a6e21cc41ed5f6b0a678fc999b8ad10245d47989b7b6962929091355c29b494 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/8a08b54a4fa9981830cfd91a6234c5862d4f1439fe6708e74544b4cafaf926cb b/Gateways/FE/projects/.resources/6bf3d02112ff5c30ac3d6940a4bab512486534b75a17996d99e2f1014ad7cf10 similarity index 96% rename from Gateways/FE/projects/.resources/8a08b54a4fa9981830cfd91a6234c5862d4f1439fe6708e74544b4cafaf926cb rename to Gateways/FE/projects/.resources/6bf3d02112ff5c30ac3d6940a4bab512486534b75a17996d99e2f1014ad7cf10 index 66bec47..3333454 100644 --- a/Gateways/FE/projects/.resources/8a08b54a4fa9981830cfd91a6234c5862d4f1439fe6708e74544b4cafaf926cb +++ b/Gateways/FE/projects/.resources/6bf3d02112ff5c30ac3d6940a4bab512486534b75a17996d99e2f1014ad7cf10 @@ -173,20 +173,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -275,16 +268,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -572,7 +560,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/6d1b4d33545af4e47d0be8f1bd25a72c4fac8eaba2c293fee90a08e87335fc68 b/Gateways/FE/projects/.resources/6d1b4d33545af4e47d0be8f1bd25a72c4fac8eaba2c293fee90a08e87335fc68 deleted file mode 100644 index d68322a..0000000 Binary files a/Gateways/FE/projects/.resources/6d1b4d33545af4e47d0be8f1bd25a72c4fac8eaba2c293fee90a08e87335fc68 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/6d69290c7cbf92fbd565a9df38377ff2876ef7a22e3db6bc837804fc5e8dfa09 b/Gateways/FE/projects/.resources/6d69290c7cbf92fbd565a9df38377ff2876ef7a22e3db6bc837804fc5e8dfa09 new file mode 100644 index 0000000..614fdcd Binary files /dev/null and b/Gateways/FE/projects/.resources/6d69290c7cbf92fbd565a9df38377ff2876ef7a22e3db6bc837804fc5e8dfa09 differ diff --git a/Gateways/FE/projects/.resources/c495b5340c14828708a465ba1f2f993359e5191f89227d681c8d3ca59a661dc4 b/Gateways/FE/projects/.resources/6ec013692adc316217efbe5a6b7e371db2a61793f972966d18a2dfe56437883b similarity index 63% rename from Gateways/FE/projects/.resources/c495b5340c14828708a465ba1f2f993359e5191f89227d681c8d3ca59a661dc4 rename to Gateways/FE/projects/.resources/6ec013692adc316217efbe5a6b7e371db2a61793f972966d18a2dfe56437883b index b6ddde1..58f2735 100644 --- a/Gateways/FE/projects/.resources/c495b5340c14828708a465ba1f2f993359e5191f89227d681c8d3ca59a661dc4 +++ b/Gateways/FE/projects/.resources/6ec013692adc316217efbe5a6b7e371db2a61793f972966d18a2dfe56437883b @@ -1,29 +1,14 @@ { "custom": {}, "params": { - "enabled": true, - "format": "###.##", - "max": 9999999, - "min": -9999999, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_HUM_03/Config/Relative Humidity Setpoint" + "enabled": false, + "tagPath": "[default]simulator/New Tag" }, "propConfig": { "params.enabled": { "paramDirection": "input", "persistent": true }, - "params.format": { - "paramDirection": "input", - "persistent": true - }, - "params.max": { - "paramDirection": "input", - "persistent": true - }, - "params.min": { - "paramDirection": "input", - "persistent": true - }, "params.tagPath": { "paramDirection": "input", "persistent": true @@ -32,7 +17,7 @@ "props": { "defaultSize": { "height": 40, - "width": 200 + "width": 150 } }, "root": { @@ -56,31 +41,54 @@ "props.format": { "binding": { "config": { - "path": "view.params.format" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.FormatString" }, - "type": "property" + "type": "tag" } }, "props.inputBounds.maximum": { "binding": { "config": { - "path": "view.params.max" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.EngHigh" }, - "type": "property" + "type": "tag" } }, "props.inputBounds.minimum": { "binding": { "config": { - "path": "view.params.min" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.EngLow" }, - "type": "property" + "type": "tag" + } + }, + "props.style.backgroundColor": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--neutral-10)\u0027, \u0027var(--neutral-40)\u0027)" + }, + "type": "expr" } }, "props.style.color": { "binding": { "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027\u0027)" + "expression": "if({this.props.enabled}, \u0027var(--action-primary)\u0027, \u0027var(--text-color)\u0027)" }, "type": "expr" } @@ -114,7 +122,6 @@ "name": "root" }, "props": { - "alignItems": "center", "justify": "center" }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/.resources/6f773336e13f0c56a642a94d57c829c598ad313bc71267ddaab764720811d9d2 b/Gateways/FE/projects/.resources/6f773336e13f0c56a642a94d57c829c598ad313bc71267ddaab764720811d9d2 deleted file mode 100644 index 793420c..0000000 Binary files a/Gateways/FE/projects/.resources/6f773336e13f0c56a642a94d57c829c598ad313bc71267ddaab764720811d9d2 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/6fc48370dc1b74306439cca7cd05dec9f603075e1ba220af48dea261cdcfa943 b/Gateways/FE/projects/.resources/6fc48370dc1b74306439cca7cd05dec9f603075e1ba220af48dea261cdcfa943 deleted file mode 100644 index 9ac490d..0000000 --- a/Gateways/FE/projects/.resources/6fc48370dc1b74306439cca7cd05dec9f603075e1ba220af48dea261cdcfa943 +++ /dev/null @@ -1,260 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/70d317c21315b0acf2ec2a97710d4ea931373f7043e1726648ccfb1749f46a67 b/Gateways/FE/projects/.resources/70d317c21315b0acf2ec2a97710d4ea931373f7043e1726648ccfb1749f46a67 deleted file mode 100644 index d39f37b..0000000 Binary files a/Gateways/FE/projects/.resources/70d317c21315b0acf2ec2a97710d4ea931373f7043e1726648ccfb1749f46a67 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/70fae1eb9b6551c9741fabae8f6c2490e5c3c96f98e01c42660e4a5b6c9edf29 b/Gateways/FE/projects/.resources/70fae1eb9b6551c9741fabae8f6c2490e5c3c96f98e01c42660e4a5b6c9edf29 deleted file mode 100644 index 83214ed..0000000 Binary files a/Gateways/FE/projects/.resources/70fae1eb9b6551c9741fabae8f6c2490e5c3c96f98e01c42660e4a5b6c9edf29 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/14d10b3a6f685b2dcbea50ec07e2f9c643aa976f6fe44dac4ca846587662087c b/Gateways/FE/projects/.resources/716646509eabf97398b69c42ad565b1b4950e02086c55cc7e3c1a15ea3a7d2d7 similarity index 95% rename from Gateways/FE/projects/.resources/14d10b3a6f685b2dcbea50ec07e2f9c643aa976f6fe44dac4ca846587662087c rename to Gateways/FE/projects/.resources/716646509eabf97398b69c42ad565b1b4950e02086c55cc7e3c1a15ea3a7d2d7 index 9563fa3..ec32ae8 100644 --- a/Gateways/FE/projects/.resources/14d10b3a6f685b2dcbea50ec07e2f9c643aa976f6fe44dac4ca846587662087c +++ b/Gateways/FE/projects/.resources/716646509eabf97398b69c42ad565b1b4950e02086c55cc7e3c1a15ea3a7d2d7 @@ -163,20 +163,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -257,16 +250,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -400,7 +388,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/71db475dfd03375db466c3ec3190008fb0174660dae5da9baf30e43cb2d7d1bd b/Gateways/FE/projects/.resources/71db475dfd03375db466c3ec3190008fb0174660dae5da9baf30e43cb2d7d1bd deleted file mode 100644 index 3a74d25..0000000 Binary files a/Gateways/FE/projects/.resources/71db475dfd03375db466c3ec3190008fb0174660dae5da9baf30e43cb2d7d1bd and /dev/null differ diff --git a/Gateways/FE/projects/.resources/7209c9f8a0167a814984a10cc034cda6346c3aaf96ac269d9f844337a31efc21 b/Gateways/FE/projects/.resources/7209c9f8a0167a814984a10cc034cda6346c3aaf96ac269d9f844337a31efc21 new file mode 100644 index 0000000..4488cd5 --- /dev/null +++ b/Gateways/FE/projects/.resources/7209c9f8a0167a814984a10cc034cda6346c3aaf96ac269d9f844337a31efc21 @@ -0,0 +1,153 @@ +{ + "custom": { + "HUM_tagPath": [], + "data": [ + "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_HUM_03", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_01", + "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_02", + "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_HUM_03", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01", + "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02", + "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_HUM_03", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_01", + "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_02", + "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_HUM_03", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_01", + "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_02" + ], + "room": "GAL1262", + "tagPath": "[Ignition_Common_IO_Gtwy]" + }, + "params": {}, + "propConfig": { + "custom.HUM_tagPath": { + "binding": { + "config": { + "path": "view.custom.room" + }, + "transforms": [ + { + "code": "\tpath \u003d str(self.view.custom.tagPath) + value +\"/\"\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/HUM\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output\n\t", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.data": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.custom.tagPath}", + "time": "now(3000)" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/HUM\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.room": { + "persistent": true + }, + "custom.tagPath": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "FlexRepeater" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.HUM_tagPath" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"HUM\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "direction": "column", + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "HUM", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" + }, + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "HUM", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" + } + ], + "path": "Library/Diagrams/HVAC/Dgrm_HUM", + "style": { + "gap": 100, + "overflow": "visible" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "justify": "space-evenly", + "style": { + "backgroundColor": "var(--containerRoot)", + "overflow": "visible", + "padding": 15 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "roomUpdate", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.room \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/727373d626154be8cd1a49422c7f921c2afd5244a9fc3200bf92a831c38ef39a b/Gateways/FE/projects/.resources/727373d626154be8cd1a49422c7f921c2afd5244a9fc3200bf92a831c38ef39a deleted file mode 100644 index df18451..0000000 Binary files a/Gateways/FE/projects/.resources/727373d626154be8cd1a49422c7f921c2afd5244a9fc3200bf92a831c38ef39a and /dev/null differ diff --git a/Gateways/FE/projects/.resources/72b7793fd6970d00609dc7db0a55c6307f0e7098b1b5f5a78746c137b874f2f3 b/Gateways/FE/projects/.resources/72b7793fd6970d00609dc7db0a55c6307f0e7098b1b5f5a78746c137b874f2f3 deleted file mode 100644 index 3d6cec7..0000000 Binary files a/Gateways/FE/projects/.resources/72b7793fd6970d00609dc7db0a55c6307f0e7098b1b5f5a78746c137b874f2f3 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f41efb55a4e240dd6a9b7dd65314a738d0bd240df640d9d77b28d9bc23e26cd9 b/Gateways/FE/projects/.resources/72bf3119ccdea1a08af4fc7472b67af6e2610d77e8455ceee3663ab041ad78bd similarity index 94% rename from Gateways/FE/projects/.resources/f41efb55a4e240dd6a9b7dd65314a738d0bd240df640d9d77b28d9bc23e26cd9 rename to Gateways/FE/projects/.resources/72bf3119ccdea1a08af4fc7472b67af6e2610d77e8455ceee3663ab041ad78bd index b6ec2c0..235abc1 100644 --- a/Gateways/FE/projects/.resources/f41efb55a4e240dd6a9b7dd65314a738d0bd240df640d9d77b28d9bc23e26cd9 +++ b/Gateways/FE/projects/.resources/72bf3119ccdea1a08af4fc7472b67af6e2610d77e8455ceee3663ab041ad78bd @@ -157,20 +157,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +244,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +362,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/116d1d83b1b2ed5a3a937dc2c441b83ae8304d5b83c7129b4e59d5f5a80845cb b/Gateways/FE/projects/.resources/72fd05ddf47748ae53d15ea024a1069c8f2349e40e715d72b75ca1f2ad36665f similarity index 98% rename from Gateways/FE/projects/.resources/116d1d83b1b2ed5a3a937dc2c441b83ae8304d5b83c7129b4e59d5f5a80845cb rename to Gateways/FE/projects/.resources/72fd05ddf47748ae53d15ea024a1069c8f2349e40e715d72b75ca1f2ad36665f index 9117328..ff44f24 100644 --- a/Gateways/FE/projects/.resources/116d1d83b1b2ed5a3a937dc2c441b83ae8304d5b83c7129b4e59d5f5a80845cb +++ b/Gateways/FE/projects/.resources/72fd05ddf47748ae53d15ea024a1069c8f2349e40e715d72b75ca1f2ad36665f @@ -1,5 +1,7 @@ { - "custom": {}, + "custom": { + "key": "value" + }, "params": { "Tag": "STU", "faulted": 8, @@ -7,6 +9,9 @@ "standby": 25 }, "propConfig": { + "custom.key": { + "persistent": true + }, "params.Tag": { "paramDirection": "input", "persistent": true @@ -122,9 +127,9 @@ }, "props": { "colors": [ - "white", - "gray", - "red" + "#E3F2FD", + "#B1B3B2", + "#E22028" ], "cutoutRadius": 50, "data": [ diff --git a/Gateways/FE/projects/.resources/732841dd12e91f8f39a7f9bb1a506b6404fd0a7eb177e5e052dc4def5db36050 b/Gateways/FE/projects/.resources/732841dd12e91f8f39a7f9bb1a506b6404fd0a7eb177e5e052dc4def5db36050 deleted file mode 100644 index 1a4831e..0000000 --- a/Gateways/FE/projects/.resources/732841dd12e91f8f39a7f9bb1a506b6404fd0a7eb177e5e052dc4def5db36050 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Breaker 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948558079 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948558079 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/758c221addc896f67d380999074fb0e77a9cda7eb0b2d26dd48616e03494e801 b/Gateways/FE/projects/.resources/758c221addc896f67d380999074fb0e77a9cda7eb0b2d26dd48616e03494e801 new file mode 100644 index 0000000..5ff9ae6 --- /dev/null +++ b/Gateways/FE/projects/.resources/758c221addc896f67d380999074fb0e77a9cda7eb0b2d26dd48616e03494e801 @@ -0,0 +1,831 @@ +{ + "custom": { + "auth": { + "almAck": false, + "almShelve": false, + "config": false, + "control": false + } + }, + "params": { + "dh": 201 + }, + "propConfig": { + "custom.auth": { + "binding": { + "config": { + "path": "session.props.auth.user.roles" + }, + "transforms": [ + { + "code": "\treturn utils.roles.validate(value)", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "params.dh": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 350 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Chiller Load Sub Limit" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 30 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_2" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "CHWP Diff Press SP" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 21 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_9" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Bypass Valve DP SP" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 4 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_8" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Chiller Min Flow SP" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 150 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_7" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "CHWP Sub Limit " + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 67 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_5" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "CHWP Add Limit" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 94 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_4" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Chiller Tonnage Rating" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 320 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_3" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Chiller Load Add Limit" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField" + }, + "position": { + "basis": "125px", + "shrink": 0 + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.custom.auth.config" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027 \u0027)" + }, + "enabled": false, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "dh": "{view.params.dh}" + }, + "tagPath": "[Ignition_Common_IO_Gtwy]DH{dh}/OPC Tags/SATB1_DH{dh}_HUM_DISABLE_SP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--tagvalue-color)", + "fontWeight": "bold", + "min-height": "30px" + }, + "value": 90 + }, + "type": "ia.input.numeric-entry-field" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "props": { + "justify": "space-between", + "style": { + "gap": "5px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "EmbeddedView_28" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "propConfig": { + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.dh" + }, + "transforms": [ + { + "expression": "\"[Ignition_Common_IO_Gtwy]DH\"+{value}+\"/SATB1_DH\"+{value}+\"_DP_PID\"", + "type": "expression" + } + ], + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": true, + "objectName": "PID_Loop", + "title": "CHWP PID" + }, + "path": "Library/Widgets/Wdg_PID", + "style": { + "classes": "containers/HoverOver", + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "children": [ + { + "meta": { + "name": "AvgMinMax_1" + }, + "propConfig": { + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.dh" + }, + "transforms": [ + { + "expression": "\"[Ignition_Common_IO_Gtwy]DH\" + {value} + \"/SATB1_DH\" + {value} + \"_RH_AvgObj\"", + "type": "expression" + } + ], + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": true, + "format": "#,###.###", + "objectName": "AvgMinMax", + "title": "CHWST Avg" + }, + "path": "Library/Widgets/Wdg_AvgMinMax", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "AvgMinMax_2" + }, + "propConfig": { + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.dh" + }, + "transforms": [ + { + "expression": "\"[Ignition_Common_IO_Gtwy]DH\" + {value} + \"/SATB1_DH\" + {value} + \"_Temp_AvgObj\"", + "type": "expression" + } + ], + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": true, + "format": "#,###.###", + "objectName": "AvgMinMax", + "title": "CHWST Avg" + }, + "path": "Library/Widgets/Wdg_AvgMinMax", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "justify": "space-between", + "style": { + "gap": "15px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer_6" + }, + "position": { + "basis": "150px" + }, + "props": { + "style": { + "gap": "15px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\tdh \u003d str(self.view.params.dh)\n\tviewPath \u003d \u0027Pages/Datahall/LLS_STU_DH%s\u0027%(dh)\n\ttitle \u003d \u0027DH%s STU LLS\u0027 %(dh)\n\tutils.nav.openLLSPopup(viewPath,title)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Button_4" + }, + "position": { + "basis": "40px" + }, + "props": { + "pageId": "", + "text": "STU LLS" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "justify": "space-between", + "style": { + "gap": "10px", + "overflow": "visible", + "padding": "10px" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/759b0d210f7b45972fdbfde071c4336111ae64a0f9d4fdc2e8081e6086be98a0 b/Gateways/FE/projects/.resources/759b0d210f7b45972fdbfde071c4336111ae64a0f9d4fdc2e8081e6086be98a0 new file mode 100644 index 0000000..5dc80b7 --- /dev/null +++ b/Gateways/FE/projects/.resources/759b0d210f7b45972fdbfde071c4336111ae64a0f9d4fdc2e8081e6086be98a0 @@ -0,0 +1,1331 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 100, + "width": 803 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status Indicator 01", + "tooltip": { + "enabled": true, + "text": "Bypass, DPs Fail amd Qty Chiller permissive are all good" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/PlantMgr Permissive OK", + "text": "Plant Manager Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Status Indicator 02", + "tooltip": { + "enabled": true, + "text": "At least 1 DH DP is not faulted" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/DPs Fail Permissive OK", + "text": "DPs Fail Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "Indicators_01" + }, + "position": { + "basis": "150px" + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-sm)", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Status Indicator 03", + "tooltip": { + "enabled": true, + "text": "At least 1 CH is available" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/QtyChillers Permissive OK", + "text": "Qty Chillers Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Status Indicator 04", + "tooltip": { + "enabled": true, + "text": "At least 1 loop bypass valve available" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Bypass Permissive OK", + "text": "Bypass Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "Indicators_02" + }, + "position": { + "basis": "150px" + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-sm)", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_SpdSP" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.#", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 86.7, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "67px" + }, + "props": { + "alignVertical": "top", + "text": "CHWP Speed Setpoint", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "30%" + }, + "props": { + "direction": "column", + "justify": "center", + "style": { + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_ADDLimit" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 94, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHWP Add Limit", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP SUB Limit" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 67, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHWP SuB Limit", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_Demand" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "text": 4, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "VFD", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px", + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "67px" + }, + "props": { + "alignVertical": "top", + "text": "CHWP Demand", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "position": { + "basis": "30%" + }, + "props": { + "direction": "column", + "justify": "center" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "CHWP Calculation Container" + }, + "props": { + "style": { + "classes": "containers/card_nested", + "gap": "5px", + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/DHDP_AvgObj/Value OUT" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 21.16, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "psi", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "DH DP Avg", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/ChillerDP_AvgObj/Value OUT" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 411.67, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "gpm", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "Chiller Min Flow", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Control/PSet_SP" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 25, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "psi", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv PID SP", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Chiller_MinFlow_SP" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 150, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "GPLM", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "Chiller Min Flow SP", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_2" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_1" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Out CV" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 0, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv PID 1 OutCV", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2/Out CV" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 0, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv PID 2 OutCV", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_3" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWBPV_PosSP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "text": 0, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px", + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv Pos SP", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "position": { + "basis": "30%" + }, + "props": { + "direction": "column", + "justify": "center" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer_6" + }, + "props": { + "style": { + "backgroundColor": "var(--container)", + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "boxShadow": "var(--boxShadow2)", + "gap": "5px", + "overflow": "visible", + "padding": "5px" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/card", + "gap": "var(--space-sm)", + "overflow": "visible", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/76c6d9cebd5de47809276bf854bcff486ac826cf9ed913632a7d455b1509ad1c b/Gateways/FE/projects/.resources/76c6d9cebd5de47809276bf854bcff486ac826cf9ed913632a7d455b1509ad1c new file mode 100644 index 0000000..324a1b8 Binary files /dev/null and b/Gateways/FE/projects/.resources/76c6d9cebd5de47809276bf854bcff486ac826cf9ed913632a7d455b1509ad1c differ diff --git a/Gateways/FE/projects/.resources/77073242b515bf7c5c2da7344242aaac4d579e76382cc57c272ca52a4668732f b/Gateways/FE/projects/.resources/77073242b515bf7c5c2da7344242aaac4d579e76382cc57c272ca52a4668732f deleted file mode 100644 index 0ef98d5..0000000 --- a/Gateways/FE/projects/.resources/77073242b515bf7c5c2da7344242aaac4d579e76382cc57c272ca52a4668732f +++ /dev/null @@ -1,483 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1267 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "custom": { - "key": "value" - }, - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\ttagName \u003d tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1]\n\t\t\t\tlowtagName \u003d tagName.lower()\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + lowtagName\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/77be9b38e582d56b4daaf758e1a991ff0c6e69c9f1bf76511d92f56e53a10e0d b/Gateways/FE/projects/.resources/77be9b38e582d56b4daaf758e1a991ff0c6e69c9f1bf76511d92f56e53a10e0d deleted file mode 100644 index 7c909e4..0000000 Binary files a/Gateways/FE/projects/.resources/77be9b38e582d56b4daaf758e1a991ff0c6e69c9f1bf76511d92f56e53a10e0d and /dev/null differ diff --git a/Gateways/FE/projects/.resources/77cef1a59f212105e745b3f1d40ce1c1057eac2c9859e7aee3da3dd347acaaf0 b/Gateways/FE/projects/.resources/77cef1a59f212105e745b3f1d40ce1c1057eac2c9859e7aee3da3dd347acaaf0 deleted file mode 100644 index cfbb822..0000000 Binary files a/Gateways/FE/projects/.resources/77cef1a59f212105e745b3f1d40ce1c1057eac2c9859e7aee3da3dd347acaaf0 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/79e3ff60c576edf0578d36c68949a23c75ff24944a5c6c1f1c09d53ae214f25b b/Gateways/FE/projects/.resources/79e3ff60c576edf0578d36c68949a23c75ff24944a5c6c1f1c09d53ae214f25b new file mode 100644 index 0000000..6884a62 Binary files /dev/null and b/Gateways/FE/projects/.resources/79e3ff60c576edf0578d36c68949a23c75ff24944a5c6c1f1c09d53ae214f25b differ diff --git a/Gateways/FE/projects/.resources/7cebcaf4bcef0107c2029b6f81f66b6fc3aaf18b28b1b6ecf51363745e2e6be9 b/Gateways/FE/projects/.resources/7cebcaf4bcef0107c2029b6f81f66b6fc3aaf18b28b1b6ecf51363745e2e6be9 deleted file mode 100644 index 3b9892c..0000000 Binary files a/Gateways/FE/projects/.resources/7cebcaf4bcef0107c2029b6f81f66b6fc3aaf18b28b1b6ecf51363745e2e6be9 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b02aeaa10bfc2d47320443be1399a7d89a024779643034a43f481451ccf974ec b/Gateways/FE/projects/.resources/7cf2b0ef400afa2b1987be19216a8f23bef9b6700cd1aaaba020c57b1707e87b similarity index 95% rename from Gateways/FE/projects/.resources/b02aeaa10bfc2d47320443be1399a7d89a024779643034a43f481451ccf974ec rename to Gateways/FE/projects/.resources/7cf2b0ef400afa2b1987be19216a8f23bef9b6700cd1aaaba020c57b1707e87b index 55cf12e..c3cad46 100644 --- a/Gateways/FE/projects/.resources/b02aeaa10bfc2d47320443be1399a7d89a024779643034a43f481451ccf974ec +++ b/Gateways/FE/projects/.resources/7cf2b0ef400afa2b1987be19216a8f23bef9b6700cd1aaaba020c57b1707e87b @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "SWBDPQM", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242_P1-1/SWBD/SATB1_ER1242_PQM1" + "objectName": "UT", + "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_UT-M1" }, "propConfig": { "custom.tabsConfig": { @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -200,6 +193,14 @@ "type": "expr" } }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, "props.params.tagPath": { "binding": { "config": { @@ -258,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -330,6 +326,14 @@ "type": "expr" } }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, "props.params.tagPath": { "binding": { "config": { @@ -381,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/c350e82d851e4e32fa5fb25c833dc450a0768b43aea67243ce2df8b982566a40 b/Gateways/FE/projects/.resources/7d259d3b705d6d58228c84782b0bf6db80aca78433a731715c4ade7450687484 similarity index 95% rename from Gateways/FE/projects/.resources/c350e82d851e4e32fa5fb25c833dc450a0768b43aea67243ce2df8b982566a40 rename to Gateways/FE/projects/.resources/7d259d3b705d6d58228c84782b0bf6db80aca78433a731715c4ade7450687484 index fb72f4c..a8fd2d7 100644 --- a/Gateways/FE/projects/.resources/c350e82d851e4e32fa5fb25c833dc450a0768b43aea67243ce2df8b982566a40 +++ b/Gateways/FE/projects/.resources/7d259d3b705d6d58228c84782b0bf6db80aca78433a731715c4ade7450687484 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/7eeff543627a0cc0f1fd2e1d44ed69d39d439c3aee04c880fab69b17661f3811 b/Gateways/FE/projects/.resources/7eeff543627a0cc0f1fd2e1d44ed69d39d439c3aee04c880fab69b17661f3811 deleted file mode 100644 index 86c1272..0000000 Binary files a/Gateways/FE/projects/.resources/7eeff543627a0cc0f1fd2e1d44ed69d39d439c3aee04c880fab69b17661f3811 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/80dde89065964e7fda97d266aaf32d25f115cbf9faee1410f6585386b262a5e0 b/Gateways/FE/projects/.resources/80dde89065964e7fda97d266aaf32d25f115cbf9faee1410f6585386b262a5e0 new file mode 100644 index 0000000..663067f --- /dev/null +++ b/Gateways/FE/projects/.resources/80dde89065964e7fda97d266aaf32d25f115cbf9faee1410f6585386b262a5e0 @@ -0,0 +1,108 @@ +{ + "custom": { + "key": "Development/testiframe" + }, + "params": { + "pageId": "value" + }, + "propConfig": { + "custom.key": { + "binding": { + "config": { + "path": "page.props.pageId" + }, + "type": "property" + }, + "persistent": true + }, + "params.pageId": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "grow": 1 + }, + "propConfig": { + "props.src": { + "binding": { + "config": { + "struct": { + "pageId": "{page.props.pageId}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\treturn \"http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/DH101\u0026targetDetailedURL\u003d/DH101\u0026height\u003d100%25\u0026width\u003d100%25\u0026pageId\u003d\" + value[\u0027pageId\u0027]", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "type": "ia.display.iframe" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "320px" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "path": "page.props.pageId" + }, + "type": "property" + } + } + }, + "props": { + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "eqPopup", + "pageScope": true, + "script": "\ttagPath \u003d payload.get(\u0027tagPath\u0027)\n\tobjectName \u003d payload.get(\u0027objectName\u0027)\n\t\n\tparams \u003d {\n\t\t\"tagPath\": tagPath,\n\t\t\"objectName\": objectName\n\t}\n\t\n\tsystem.perspective.openPopup(\n\t\tid \u003d \"Popup_\" + objectName.replace(\" \", \"_\"),\n\t\tview \u003d \"Library/Templates/Base\",\n\t\tparams \u003d params,\n\t\tshowCloseIcon \u003d True,\n\t\tresizable \u003d True,\n\t\tdraggable \u003d True,\n\t\tmodal \u003d False,\n\t\twidth \u003d 800,\n\t\theight \u003d 835\n\t)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/81583e042d0aa90eb2734f60fbba415282437ab0bdb830cc719f69a98f44089d b/Gateways/FE/projects/.resources/81583e042d0aa90eb2734f60fbba415282437ab0bdb830cc719f69a98f44089d new file mode 100644 index 0000000..848115c Binary files /dev/null and b/Gateways/FE/projects/.resources/81583e042d0aa90eb2734f60fbba415282437ab0bdb830cc719f69a98f44089d differ diff --git a/Gateways/FE/projects/.resources/81f49d1767132a1db02e83b3bd1eca8356816b2953f6eb35e4bb8d69cad535a3 b/Gateways/FE/projects/.resources/81f49d1767132a1db02e83b3bd1eca8356816b2953f6eb35e4bb8d69cad535a3 deleted file mode 100644 index d7d4e16..0000000 Binary files a/Gateways/FE/projects/.resources/81f49d1767132a1db02e83b3bd1eca8356816b2953f6eb35e4bb8d69cad535a3 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/48c2877a72341819fa5df64fc79ae3d658b93607127705e30446353becebb957 b/Gateways/FE/projects/.resources/8291d2dd75b9d7ae5b66783e80eafea8feb84c2ac6c2fd0c7c5e27e9c32759d5 similarity index 66% rename from Gateways/FE/projects/.resources/48c2877a72341819fa5df64fc79ae3d658b93607127705e30446353becebb957 rename to Gateways/FE/projects/.resources/8291d2dd75b9d7ae5b66783e80eafea8feb84c2ac6c2fd0c7c5e27e9c32759d5 index d41a02e..39e7b34 100644 --- a/Gateways/FE/projects/.resources/48c2877a72341819fa5df64fc79ae3d658b93607127705e30446353becebb957 +++ b/Gateways/FE/projects/.resources/8291d2dd75b9d7ae5b66783e80eafea8feb84c2ac6c2fd0c7c5e27e9c32759d5 @@ -2,12 +2,8 @@ "custom": {}, "params": { "dataType": "Int4", - "enabled": true, - "max": 9999, - "min": -9999, - "name": "Int", - "options": [], - "tagPath": "[Ignition_SATB1_IO2_default]Yard/SATB1_YARD_UT-P2-4/Vacuum Fault Interrupter2 Tripped/Config/Target", + "enabled": false, + "tagPath": "[default]simulator/New Tag", "visible": true }, "propConfig": { @@ -19,22 +15,6 @@ "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 @@ -79,9 +59,14 @@ "props.text": { "binding": { "config": { - "path": "view.params.name" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.Tooltip" }, - "type": "property" + "type": "tag" } } }, @@ -103,30 +88,6 @@ "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": { @@ -138,7 +99,7 @@ "props.path": { "binding": { "config": { - "expression": "case({view.params.dataType},\r\n\u0027Boolean\u0027, \u0027Library/Templates/Framework/Input/Boolean\u0027,\r\n\u0027Int4\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027Int8\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027Float4\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027Float8\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027String\u0027, \u0027Library/Templates/Framework/Input/String\u0027,\r\n\u0027\u0027)" + "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" } diff --git a/Gateways/FE/projects/.resources/82eebf0a7e218fb60673ddf9ec77ae4145adf2ef36abf0050d4116f556ba6c3e b/Gateways/FE/projects/.resources/82eebf0a7e218fb60673ddf9ec77ae4145adf2ef36abf0050d4116f556ba6c3e new file mode 100644 index 0000000..3215a90 --- /dev/null +++ b/Gateways/FE/projects/.resources/82eebf0a7e218fb60673ddf9ec77ae4145adf2ef36abf0050d4116f556ba6c3e @@ -0,0 +1,294 @@ +{ + "custom": { + "AlarmSeverity": { + "prov": 3 + }, + "CRAH_tagPaths": [], + "data": [ + "[Ignition_SATB1_IO1_default]ER1242/SATB1_P1_1_ER1242_CRAH_01", + "[Ignition_SATB1_IO1_default]ER1242/SATB1_P1_1_ER1242_CRAH_02", + "[Ignition_SATB1_IO1_default]ER1243/SATB1_P1_2_ER1243_CRAH_01", + "[Ignition_SATB1_IO1_default]ER1243/SATB1_P1_2_ER1243_CRAH_02", + "[Ignition_SATB1_IO1_default]ER1244/SATB1_P1_3_ER1244_CRAH_01", + "[Ignition_SATB1_IO1_default]ER1244/SATB1_P1_3_ER1244_CRAH_02", + "[Ignition_SATB1_IO1_default]ER1245/SATB1_P1_4_ER1245_CRAH_01", + "[Ignition_SATB1_IO1_default]ER1245/SATB1_P1_4_ER1245_CRAH_02", + "[Ignition_SATB1_IO1_default]ER1246/SATB1_P1_5_ER1246_CRAH_01", + "[Ignition_SATB1_IO1_default]ER1246/SATB1_P1_5_ER1246_CRAH_02", + "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_01", + "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_02", + "[Ignition_SATB1_IO2_default]ER1249/SATB1_P2_2_ER1249_CRAH_01", + "[Ignition_SATB1_IO2_default]ER1249/SATB1_P2_2_ER1249_CRAH_02", + "[Ignition_SATB1_IO2_default]ER1250/SATB1_P2_3_ER1250_CRAH_01", + "[Ignition_SATB1_IO2_default]ER1250/SATB1_P2_3_ER1250_CRAH_02", + "[Ignition_SATB1_IO2_default]ER1251/SATB1_P2_4_ER1251_CRAH_01", + "[Ignition_SATB1_IO2_default]ER1251/SATB1_P2_4_ER1251_CRAH_02", + "[Ignition_SATB1_IO2_default]ER1252/SATB1_P2_5_ER1252_CRAH_01", + "[Ignition_SATB1_IO2_default]ER1252/SATB1_P2_5_ER1252_CRAH_02", + "[Ignition_SATB1_IO3_default]ER1155/SATB1_P3_1_ER1155_CRAH_01", + "[Ignition_SATB1_IO3_default]ER1155/SATB1_P3_1_ER1155_CRAH_02", + "[Ignition_SATB1_IO3_default]ER1156/SATB1_P3_2_ER1156_CRAH_01", + "[Ignition_SATB1_IO3_default]ER1156/SATB1_P3_2_ER1156_CRAH_02", + "[Ignition_SATB1_IO3_default]ER1157/SATB1_P3_3_ER1157_CRAH_01", + "[Ignition_SATB1_IO3_default]ER1157/SATB1_P3_3_ER1157_CRAH_02", + "[Ignition_SATB1_IO3_default]ER1158/SATB1_P3_4_ER1158_CRAH_01", + "[Ignition_SATB1_IO3_default]ER1158/SATB1_P3_4_ER1158_CRAH_02", + "[Ignition_SATB1_IO3_default]ER1159/SATB1_P3_5_ER1159_CRAH_01", + "[Ignition_SATB1_IO3_default]ER1159/SATB1_P3_5_ER1159_CRAH_02", + "[Ignition_SATB1_IO4_default]ER1254/SATB1_P4_1_ER1254_CRAH_01", + "[Ignition_SATB1_IO4_default]ER1254/SATB1_P4_1_ER1254_CRAH_02", + "[Ignition_SATB1_IO4_default]ER1255/SATB1_P4_2_ER1255_CRAH_01", + "[Ignition_SATB1_IO4_default]ER1255/SATB1_P4_2_ER1255_CRAH_02", + "[Ignition_SATB1_IO4_default]ER1256/SATB1_P4_3_ER1256_CRAH_01", + "[Ignition_SATB1_IO4_default]ER1256/SATB1_P4_3_ER1256_CRAH_02", + "[Ignition_SATB1_IO4_default]ER1257/SATB1_P4_4_ER1257_CRAH_01", + "[Ignition_SATB1_IO4_default]ER1257/SATB1_P4_4_ER1257_CRAH_02", + "[Ignition_SATB1_IO4_default]ER1258/SATB1_P4_5_ER1258_CRAH_01", + "[Ignition_SATB1_IO4_default]ER1258/SATB1_P4_5_ER1258_CRAH_02", + "[Ignition_SATB1_IO5_default]ER1161/SATB1_P5_1_ER1161_CRAH_01", + "[Ignition_SATB1_IO5_default]ER1161/SATB1_P5_1_ER1161_CRAH_02", + "[Ignition_SATB1_IO5_default]ER1162/SATB1_P5_2_ER1162_CRAH_01", + "[Ignition_SATB1_IO5_default]ER1162/SATB1_P5_2_ER1162_CRAH_02", + "[Ignition_SATB1_IO5_default]ER1163/SATB1_P5_3_ER1163_CRAH_01", + "[Ignition_SATB1_IO5_default]ER1163/SATB1_P5_3_ER1163_CRAH_02", + "[Ignition_SATB1_IO5_default]ER1164/SATB1_P5_4_EL1164_CRAH_01", + "[Ignition_SATB1_IO5_default]ER1164/SATB1_P5_4_EL1164_CRAH_02", + "[Ignition_SATB1_IO5_default]ER1165/SATB1_P5_5_EL1165_CRAH_01", + "[Ignition_SATB1_IO5_default]ER1165/SATB1_P5_5_EL1165_CRAH_02", + "[Ignition_Common_IO_Gtwy]ER1151/SATB1_HS1_ER1151_CRAH_01", + "[Ignition_Common_IO_Gtwy]ER1151/SATB1_HS1_ER1151_CRAH_02", + "[Ignition_Common_IO_Gtwy]IDF1263/SATB1_IDF1263_CRAH_01", + "[Ignition_Common_IO_Gtwy]IDF1263/SATB1_IDF1263_CRAH_02", + "[Ignition_Common_IO_Gtwy]IDF1273/SATB1_IDF1273_CRAH_01", + "[Ignition_Common_IO_Gtwy]IDF1273/SATB1_IDF1273_CRAH_02", + "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_01", + "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_02", + "[Ignition_Common_IO_Gtwy]MPR1240/SATB1_M1_2_MPR1240_CRAH_01", + "[Ignition_Common_IO_Gtwy]MPR1240/SATB1_M1_2_MPR1240_CRAH_02", + "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_M3_4_MPR1241_CRAH_01", + "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_M3_4_MPR1241_CRAH_02", + "[Ignition_Common_IO_Gtwy]MPR1247/SATB1_M7_8_MPR1247_CRAH_01", + "[Ignition_Common_IO_Gtwy]MPR1247/SATB1_M7_8_MPR1247_CRAH_02", + "[Ignition_Common_IO_Gtwy]MR1253/SATB1_HS2_MR1253_CRAH_01", + "[Ignition_Common_IO_Gtwy]MR1253/SATB1_HS2_MR1253_CRAH_02" + ], + "key": "[Ignition_SATB1_IO1_default]ER1242/SATB1_P1_1_ER1242_CRAH_01", + "key_1": null, + "selectedRoom": "MPR1150", + "tagPath": [ + "[Ignition_SATB1_IO1_default]", + "[Ignition_SATB1_IO2_default]", + "[Ignition_SATB1_IO3_default]", + "[Ignition_SATB1_IO4_default]", + "[Ignition_SATB1_IO5_default]", + "[Ignition_Common_IO_Gtwy]" + ] + }, + "params": {}, + "propConfig": { + "custom.AlarmSeverity": { + "binding": { + "config": { + "struct": { + "paths": "{view.custom.data}", + "time": "now(5000)" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttags \u003d value[\u0027paths\u0027]\n\tfor tag in tags:\n\t\taggAlarmStatus \u003d system.tag.readBlocking([tag+\"/AlarmSummary/ActiveAlarms\"])[0].value\n\t\treturn aggAlarmStatus\n\t\tmaxState \u003d 0\n\t\tfor v in aggAlarmStatus:\n\t\t\tmaxState \u003d v if v \u003e maxState else maxState\n\t\toutput.append(maxState)\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.CRAH_tagPaths": { + "binding": { + "config": { + "struct": { + "selected": "{view.custom.selectedRoom}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\tselected \u003d value[\"selected\"]\n\tproviders \u003d {\n\t\t\t\t\"MPR1240\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MPR1241\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MPR1247\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MPR1150\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"ER1151\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MR1253\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"IDF1263\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"IDF1273\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\n\t\t\t\t\"ER1242\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1243\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1244\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1245\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1246\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1248\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1249\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1250\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1251\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1252\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1155\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1156\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1157\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1158\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1159\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1254\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1255\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1256\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1257\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1258\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1161\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1162\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1163\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1164\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1165\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t}\n\t\n\tpath \u003d providers[selected] + \u0027/\u0027 + selected\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/CRAH v2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.data": { + "binding": { + "config": { + "path": "view.custom.time" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tdata \u003d self.custom.tagPath\n\tfor item in data:\n\t\ttags \u003d system.tag.browse(item,{\"typeId\":\"Objects/Air/CRAH\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\t\tfor item in tags:\n\t\t\tCRAH_tagPath \u003d str(item[\"fullPath\"])\n\t\t\toutput.append(CRAH_tagPath)\n\toutput.append(value)\n\treturn output", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.key": { + "persistent": true + }, + "custom.key_1": { + "binding": { + "config": { + "path": "view.custom.key" + }, + "transforms": [ + { + "code": "\n\treturn alarm.summary.calcMaxPriority(value)", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.selectedRoom": { + "persistent": true + }, + "custom.tagPath": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "path": "view.custom.CRAH_tagPaths[0]" + }, + "enabled": false, + "transforms": [ + { + "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "style": { + "backgroundColor": "var(--container)", + "borderBottomLeftRadius": "var(--borderRadius)", + "borderBottomRightRadius": "var(--borderRadius)", + "borderTopLeftRadius": "var(--borderRadius)", + "borderTopRightRadius": "var(--borderRadius)", + "boxShadow": "var(--boxShadow2)", + "overflow": "visible", + "paddingBottom": 5, + "paddingLeft": 15, + "paddingRight": 15, + "paddingTop": 5 + }, + "text": "ER1242" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FlexRepeater" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.CRAH_tagPaths" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"CRAH\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "direction": "row-reverse", + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "CRAH", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_01" + }, + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "CRAH", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_02" + } + ], + "path": "Library/Diagrams/HVAC/Dgrm_CRAH", + "style": { + "gap": 15, + "overflow": "visible" + } + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "justify": "space-evenly", + "style": { + "backgroundColor": "var(--containerRoot)", + "overflow": "visible", + "padding": 15 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "roomUpdate", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/840ad31ad5925d31ec5b2116327c1bf889165240072df651bcf053fbaf9418e7 b/Gateways/FE/projects/.resources/840ad31ad5925d31ec5b2116327c1bf889165240072df651bcf053fbaf9418e7 deleted file mode 100644 index 81a95b5..0000000 --- a/Gateways/FE/projects/.resources/840ad31ad5925d31ec5b2116327c1bf889165240072df651bcf053fbaf9418e7 +++ /dev/null @@ -1,395 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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" - }, - "persistent": true - } - }, - "props": { - "alignContent": "flex-start", - "elementPosition": { - "basis": "50%", - "grow": 0 - }, - "instances": [ - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Alarm Description" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Building" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Cabinet" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqMake" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqName" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/FW Version" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Floor" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Gateway Name" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/IP Address" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/ModelNo" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Port" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Room" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Switch Location" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Tooltip" - } - ], - "loading": { - "order": "with-parent" - }, - "path": "Library/Framework/Tag Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/8460384c69f549995679e8b45c2fb2300c0f3e7f2b342b0e019b96c9a25b3630 b/Gateways/FE/projects/.resources/8460384c69f549995679e8b45c2fb2300c0f3e7f2b342b0e019b96c9a25b3630 deleted file mode 100644 index e095739..0000000 Binary files a/Gateways/FE/projects/.resources/8460384c69f549995679e8b45c2fb2300c0f3e7f2b342b0e019b96c9a25b3630 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/0ed24c079bead0abcf6f25870775e961ad979950cb8c1a9cd074b49d20b2d43d b/Gateways/FE/projects/.resources/84d10c41e10c12fe97a9b1da9c11d68184e5d73a06e5c67590e56ef9ddada2db similarity index 99% rename from Gateways/FE/projects/.resources/0ed24c079bead0abcf6f25870775e961ad979950cb8c1a9cd074b49d20b2d43d rename to Gateways/FE/projects/.resources/84d10c41e10c12fe97a9b1da9c11d68184e5d73a06e5c67590e56ef9ddada2db index 19d15a3..0105fb4 100644 --- a/Gateways/FE/projects/.resources/0ed24c079bead0abcf6f25870775e961ad979950cb8c1a9cd074b49d20b2d43d +++ b/Gateways/FE/projects/.resources/84d10c41e10c12fe97a9b1da9c11d68184e5d73a06e5c67590e56ef9ddada2db @@ -1,8 +1,8 @@ { "custom": { - "c1": 69.8, - "c2": 69.8, - "global": 75 + "c1": null, + "c2": null, + "global": null }, "params": { "pageId": "" diff --git a/Gateways/FE/projects/.resources/866ca9421276e9d1b4c07b4dbace4747ff0128f43f473774f96e708566f765ef b/Gateways/FE/projects/.resources/866ca9421276e9d1b4c07b4dbace4747ff0128f43f473774f96e708566f765ef new file mode 100644 index 0000000..18fce82 Binary files /dev/null and b/Gateways/FE/projects/.resources/866ca9421276e9d1b4c07b4dbace4747ff0128f43f473774f96e708566f765ef differ diff --git a/Gateways/FE/projects/.resources/868109d6f2a8166c814a46af993e3f576eadd4ada60bd52ced9683ccbc50511e b/Gateways/FE/projects/.resources/868109d6f2a8166c814a46af993e3f576eadd4ada60bd52ced9683ccbc50511e deleted file mode 100644 index 5335abd..0000000 --- a/Gateways/FE/projects/.resources/868109d6f2a8166c814a46af993e3f576eadd4ada60bd52ced9683ccbc50511e +++ /dev/null @@ -1,242 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/87d4021119f914ca62892b512384ba58dad570f9b80bb10534b593fc3297d186 b/Gateways/FE/projects/.resources/87d4021119f914ca62892b512384ba58dad570f9b80bb10534b593fc3297d186 new file mode 100644 index 0000000..624cd3f --- /dev/null +++ b/Gateways/FE/projects/.resources/87d4021119f914ca62892b512384ba58dad570f9b80bb10534b593fc3297d186 @@ -0,0 +1,419 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "H2", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "params": { + "embedded": false, + "objectName": "DiscreteIn" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/87e6a79edfa75e029d00fa8bbdae65b280754a6633ca04ed2401d2fb83b9d8fb b/Gateways/FE/projects/.resources/87e6a79edfa75e029d00fa8bbdae65b280754a6633ca04ed2401d2fb83b9d8fb new file mode 100644 index 0000000..ec1d064 --- /dev/null +++ b/Gateways/FE/projects/.resources/87e6a79edfa75e029d00fa8bbdae65b280754a6633ca04ed2401d2fb83b9d8fb @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "CRAC", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1240/SATB1_M1_2_MPR1240_CRAH_01" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/4f91db99f22b9a4b5f30b3fcd52c3d6454b077d25a8b75323fd1f32469bf1a5c b/Gateways/FE/projects/.resources/88781d80a2d53e0e10f457d4fd76ba2e15c0289d0cb4cf9c336840ed80aa7b0d similarity index 99% rename from Gateways/FE/projects/.resources/4f91db99f22b9a4b5f30b3fcd52c3d6454b077d25a8b75323fd1f32469bf1a5c rename to Gateways/FE/projects/.resources/88781d80a2d53e0e10f457d4fd76ba2e15c0289d0cb4cf9c336840ed80aa7b0d index 3d15bdc..8b74b5e 100644 --- a/Gateways/FE/projects/.resources/4f91db99f22b9a4b5f30b3fcd52c3d6454b077d25a8b75323fd1f32469bf1a5c +++ b/Gateways/FE/projects/.resources/88781d80a2d53e0e10f457d4fd76ba2e15c0289d0cb4cf9c336840ed80aa7b0d @@ -229,7 +229,7 @@ "props": { "defaultSize": { "height": 75, - "width": 100 + "width": 84 } }, "root": { diff --git a/Gateways/FE/projects/.resources/88921c7041a00e0997ccd351ac67852f198743d0bbf9c09272c3896e07d18399 b/Gateways/FE/projects/.resources/88921c7041a00e0997ccd351ac67852f198743d0bbf9c09272c3896e07d18399 deleted file mode 100644 index 02687e5..0000000 Binary files a/Gateways/FE/projects/.resources/88921c7041a00e0997ccd351ac67852f198743d0bbf9c09272c3896e07d18399 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/89ce4ac5f46cea6d0fd85fb1b578921ba7a20d979f5db941fac05fe53699f9a8 b/Gateways/FE/projects/.resources/89ce4ac5f46cea6d0fd85fb1b578921ba7a20d979f5db941fac05fe53699f9a8 new file mode 100644 index 0000000..acbdd6c --- /dev/null +++ b/Gateways/FE/projects/.resources/89ce4ac5f46cea6d0fd85fb1b578921ba7a20d979f5db941fac05fe53699f9a8 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "MV SWGR", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/MV SWGR 1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/8b7837da10c1621bf6df5d397bed819e56feb3cc580af6ffc5dfe822d5783663 b/Gateways/FE/projects/.resources/8b7837da10c1621bf6df5d397bed819e56feb3cc580af6ffc5dfe822d5783663 deleted file mode 100644 index 16e671c..0000000 --- a/Gateways/FE/projects/.resources/8b7837da10c1621bf6df5d397bed819e56feb3cc580af6ffc5dfe822d5783663 +++ /dev/null @@ -1,483 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_GEN-P1-3" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1267 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "custom": { - "key": "value" - }, - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\ttagName \u003d tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1]\n\t\t\t\tlowtagName \u003d tagName.lower()\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + lowtagName\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/8bfa9e50f981b60da57556120571a47b4158cb3b0fcdb14e74b2790d01e953d6 b/Gateways/FE/projects/.resources/8bfa9e50f981b60da57556120571a47b4158cb3b0fcdb14e74b2790d01e953d6 new file mode 100644 index 0000000..4288a51 --- /dev/null +++ b/Gateways/FE/projects/.resources/8bfa9e50f981b60da57556120571a47b4158cb3b0fcdb14e74b2790d01e953d6 @@ -0,0 +1,236 @@ +{ + "custom": { + "VAV_tagPaths": [], + "data": [ + "[Ignition_Common_IO_Gtwy]RM1100/SATB1_HS1_RM1100_VAV13", + "[Ignition_Common_IO_Gtwy]RM1100/SATB1_HS1_RM1100_VAV14", + "[Ignition_Common_IO_Gtwy]RM1101/SATB1_HS1_RM1101_VAV17", + "[Ignition_Common_IO_Gtwy]RM1102/SATB1_HS1_RM1102_VAV15", + "[Ignition_Common_IO_Gtwy]RM1102-2/SATB1_HS1_RM1102-2_VAV16", + "[Ignition_Common_IO_Gtwy]RM1103/SATB1_HS1_RM1103_VAV09", + "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06", + "[Ignition_Common_IO_Gtwy]RM1110/SATB1_HS1_RM1110_VAV04", + "[Ignition_Common_IO_Gtwy]RM1110/SATB1_HS1_RM1110_VAV05", + "[Ignition_Common_IO_Gtwy]RM1111/SATB1_HS1_RM1111_VAV11", + "[Ignition_Common_IO_Gtwy]RM1113/SATB1_HS1_RM1113_VAV08", + "[Ignition_Common_IO_Gtwy]RM1114/SATB1_HS1_RM1114_VAV07", + "[Ignition_Common_IO_Gtwy]RM1116/SATB1_HS1_RM1116_VAV01", + "[Ignition_Common_IO_Gtwy]RM1117/SATB1_HS1_RM1117_VAV02", + "[Ignition_Common_IO_Gtwy]RM1118/SATB1_HS1_RM1118_VAV03", + "[Ignition_Common_IO_Gtwy]RM1121/SATB1_HS1_RM1121_VAV19", + "[Ignition_Common_IO_Gtwy]RM1127/SATB1_HS1_RM1127_VAV22", + "[Ignition_Common_IO_Gtwy]RM1127/SATB1_HS1_RM1127_VAV23", + "[Ignition_Common_IO_Gtwy]RM1133/SATB1_HS1_RM1133_VAV25", + "[Ignition_Common_IO_Gtwy]RM1133-5/SATB1_HS1_RM1133-5_VAV18", + "[Ignition_Common_IO_Gtwy]RM1134/SATB1_HS1_RM1134_VAV20", + "[Ignition_Common_IO_Gtwy]RM1135/SATB1_HS1_RM1135_VAV21", + "[Ignition_Common_IO_Gtwy]RM1137/SATB1_HS1_RM1137_VAV12", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS1_RM1138_VAV29", + "[Ignition_Common_IO_Gtwy]RM1139/SATB1_HS1_RM1139_VAV26", + "[Ignition_Common_IO_Gtwy]RM1139/SATB1_HS1_RM1139_VAV27", + "[Ignition_Common_IO_Gtwy]RM1139/SATB1_HS1_RM1139_VAV28", + "[Ignition_Common_IO_Gtwy]RM1141/SATB1_HS1_RM1141_VAV24", + "[Ignition_Common_IO_Gtwy]RM1153/SATB1_HS1_RM1153_VAV34", + "[Ignition_Common_IO_Gtwy]RM1190/SATB1_HS1_RM1190_VAV33", + "[Ignition_Common_IO_Gtwy]RM1192/SATB1_HS1_RM1192_VAV31", + "[Ignition_Common_IO_Gtwy]RM1194/SATB1_HS1_RM1194_VAV32" + ], + "selectedRoom": "RM1109", + "tagPath": "[Ignition_Common_IO_Gtwy]", + "tagPath_VAVmaster": "[Ignition_Common_IO_Gtwy]VAV/SATB1_VAV_Master" + }, + "params": {}, + "propConfig": { + "custom.VAV_tagPaths": { + "binding": { + "config": { + "struct": { + "selected": "{view.custom.selectedRoom}", + "time": "now(1000)" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\tselected \u003d value[\"selected\"]\n\tpath \u003d str(self.view.custom.tagPath) + selected\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/VAV v2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.data": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.custom.tagPath}", + "time": "now(3000)" + }, + "waitOnAll": false + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/VAV\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\toutput.append(str(item[\"fullPath\"]))\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.selectedRoom": { + "persistent": true + }, + "custom.tagPath": { + "persistent": true + }, + "custom.tagPath_VAVmaster": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "32px" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "path": "view.custom.VAV_tagPaths[0]" + }, + "transforms": [ + { + "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "style": { + "backgroundColor": "var(--container)", + "borderBottomLeftRadius": "var(--borderRadius)", + "borderBottomRightRadius": "var(--borderRadius)", + "borderTopLeftRadius": "var(--borderRadius)", + "borderTopRightRadius": "var(--borderRadius)", + "boxShadow": "var(--boxShadow2)", + "overflow": "visible", + "paddingBottom": 5, + "paddingLeft": 15, + "paddingRight": 15, + "paddingTop": 5 + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FlexRepeater" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.VAV_tagPaths" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"VAV v2\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "VAV v2", + "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" + } + ], + "justify": "center", + "path": "Library/Diagrams/HVAC/Dgrm_VAV", + "style": { + "backgroundColor": "var(--containerRoot)", + "gap": 50, + "overflow": "visible" + }, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\ttagPath \u003d self.view.custom.tagPath_VAVmaster\n\tobjectName \u003d \"VAVMaster\"\n\tpayload\u003d{\n\t\t\u0027objectName\u0027: objectName,\n\t\t\u0027tagPath\u0027: tagPath,\n\t\t\u0027modal\u0027: False,\n\t\t\u0027resizable\u0027: True,\n\t\t\u0027draggable\u0027: True,\n\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t}\n\t}\n\tutils.nav.eqPopupMsg(self, payload)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Button" + }, + "position": { + "basis": "34px" + }, + "props": { + "primary": false, + "text": "VAV Global parameters" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "justify": "space-evenly", + "style": { + "backgroundColor": "var(--containerRoot)", + "padding": 15 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "roomUpdate", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/6e3f4a80e8bba49c8b78c441c99339c29f91ac222c500457358dd858aee125d6 b/Gateways/FE/projects/.resources/8d019fff10b8e14381df1d925b69b191fb985f52cc72954f663b4a83e13de06f similarity index 95% rename from Gateways/FE/projects/.resources/6e3f4a80e8bba49c8b78c441c99339c29f91ac222c500457358dd858aee125d6 rename to Gateways/FE/projects/.resources/8d019fff10b8e14381df1d925b69b191fb985f52cc72954f663b4a83e13de06f index bd5c748..72b5641 100644 --- a/Gateways/FE/projects/.resources/6e3f4a80e8bba49c8b78c441c99339c29f91ac222c500457358dd858aee125d6 +++ b/Gateways/FE/projects/.resources/8d019fff10b8e14381df1d925b69b191fb985f52cc72954f663b4a83e13de06f @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/.resources/90cd798a080956cb1a657f9838f137a9f175e84b127af490b883a1abd086c138 b/Gateways/FE/projects/.resources/90cd798a080956cb1a657f9838f137a9f175e84b127af490b883a1abd086c138 new file mode 100644 index 0000000..8420dbf --- /dev/null +++ b/Gateways/FE/projects/.resources/90cd798a080956cb1a657f9838f137a9f175e84b127af490b883a1abd086c138 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "AnalogInRS485", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_DH5_PNL16_C1_HT01" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/aa6221dde5645261b61c90f42354c6717d8ebc15c1f1acdc0946efeed3de3370 b/Gateways/FE/projects/.resources/90dd8a9eebaba7f9aa0d807652befa299681c0fa2164e6a094bc379c49e249c2 similarity index 95% rename from Gateways/FE/projects/.resources/aa6221dde5645261b61c90f42354c6717d8ebc15c1f1acdc0946efeed3de3370 rename to Gateways/FE/projects/.resources/90dd8a9eebaba7f9aa0d807652befa299681c0fa2164e6a094bc379c49e249c2 index 5e578e4..43ac799 100644 --- a/Gateways/FE/projects/.resources/aa6221dde5645261b61c90f42354c6717d8ebc15c1f1acdc0946efeed3de3370 +++ b/Gateways/FE/projects/.resources/90dd8a9eebaba7f9aa0d807652befa299681c0fa2164e6a094bc379c49e249c2 @@ -167,20 +167,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -269,16 +262,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -400,7 +388,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/9118ea204fa17e6762bd92dee2a5ba7ff17ab7c6a4f5bcf1eb97fac6369496a4 b/Gateways/FE/projects/.resources/9118ea204fa17e6762bd92dee2a5ba7ff17ab7c6a4f5bcf1eb97fac6369496a4 deleted file mode 100644 index 88da5e9..0000000 --- a/Gateways/FE/projects/.resources/9118ea204fa17e6762bd92dee2a5ba7ff17ab7c6a4f5bcf1eb97fac6369496a4 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Breaker 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/920294fd7ff3536a0058b4292037bdc315c065f860a12ff1a3bbd78cb95f04c1 b/Gateways/FE/projects/.resources/920294fd7ff3536a0058b4292037bdc315c065f860a12ff1a3bbd78cb95f04c1 new file mode 100644 index 0000000..fd9e515 Binary files /dev/null and b/Gateways/FE/projects/.resources/920294fd7ff3536a0058b4292037bdc315c065f860a12ff1a3bbd78cb95f04c1 differ diff --git a/Gateways/FE/projects/.resources/92b799838056e57fc3d2565a0c0b16eb8aab218a2ecda658f89b00ea8b032e0d b/Gateways/FE/projects/.resources/92b799838056e57fc3d2565a0c0b16eb8aab218a2ecda658f89b00ea8b032e0d new file mode 100644 index 0000000..f162487 Binary files /dev/null and b/Gateways/FE/projects/.resources/92b799838056e57fc3d2565a0c0b16eb8aab218a2ecda658f89b00ea8b032e0d differ diff --git a/Gateways/FE/projects/.resources/9353c70ea8d9f78d08175777f4dac05a3934758e30c54f2ec057c380bcbda89a b/Gateways/FE/projects/.resources/9353c70ea8d9f78d08175777f4dac05a3934758e30c54f2ec057c380bcbda89a new file mode 100644 index 0000000..a7ac9e0 Binary files /dev/null and b/Gateways/FE/projects/.resources/9353c70ea8d9f78d08175777f4dac05a3934758e30c54f2ec057c380bcbda89a differ diff --git a/Gateways/FE/projects/.resources/93ba3176baf0bd9ebeec4f5b54492a8d7c4ff02515c0876943405803a623820d b/Gateways/FE/projects/.resources/93ba3176baf0bd9ebeec4f5b54492a8d7c4ff02515c0876943405803a623820d new file mode 100644 index 0000000..d8436cd --- /dev/null +++ b/Gateways/FE/projects/.resources/93ba3176baf0bd9ebeec4f5b54492a8d7c4ff02515c0876943405803a623820d @@ -0,0 +1,392 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "Breaker", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1151/SATB1_MPR1151_HS1_FE1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Breaker X/Info" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/96217a5c87e990addced695be54e8ea35c20d7c5600963864c61b639723f42d9 b/Gateways/FE/projects/.resources/96217a5c87e990addced695be54e8ea35c20d7c5600963864c61b639723f42d9 deleted file mode 100644 index 1f00f9e..0000000 --- a/Gateways/FE/projects/.resources/96217a5c87e990addced695be54e8ea35c20d7c5600963864c61b639723f42d9 +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VAV" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/96350d8d86c025ea8b717502945d5013ed7cf254d1e86e864d0f30826b0378dc b/Gateways/FE/projects/.resources/96350d8d86c025ea8b717502945d5013ed7cf254d1e86e864d0f30826b0378dc deleted file mode 100644 index 1f46e3c..0000000 Binary files a/Gateways/FE/projects/.resources/96350d8d86c025ea8b717502945d5013ed7cf254d1e86e864d0f30826b0378dc and /dev/null differ diff --git a/Gateways/FE/projects/.resources/970ac08d90cfa9d2f4c57c742636c97291b91f74c14dfc2c0417a0946c74b1c6 b/Gateways/FE/projects/.resources/970ac08d90cfa9d2f4c57c742636c97291b91f74c14dfc2c0417a0946c74b1c6 new file mode 100644 index 0000000..df0093e --- /dev/null +++ b/Gateways/FE/projects/.resources/970ac08d90cfa9d2f4c57c742636c97291b91f74c14dfc2c0417a0946c74b1c6 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "VSD", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VSD 1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/975469910642fe822836d394248656c96bf61067edf5a3493d8ccc8d6c3a44ff b/Gateways/FE/projects/.resources/975469910642fe822836d394248656c96bf61067edf5a3493d8ccc8d6c3a44ff deleted file mode 100644 index d7e6118..0000000 Binary files a/Gateways/FE/projects/.resources/975469910642fe822836d394248656c96bf61067edf5a3493d8ccc8d6c3a44ff and /dev/null differ diff --git a/Gateways/FE/projects/.resources/97591647b3062fa9f4ea23b9c6a5aee90ed46d6bb849cf8722b858cb683ea037 b/Gateways/FE/projects/.resources/97591647b3062fa9f4ea23b9c6a5aee90ed46d6bb849cf8722b858cb683ea037 deleted file mode 100644 index 0818c56..0000000 Binary files a/Gateways/FE/projects/.resources/97591647b3062fa9f4ea23b9c6a5aee90ed46d6bb849cf8722b858cb683ea037 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/986f7bde8363869e2362c8a4ad41194cc0d0e5af0d57902774b1a8796e798193 b/Gateways/FE/projects/.resources/986f7bde8363869e2362c8a4ad41194cc0d0e5af0d57902774b1a8796e798193 new file mode 100644 index 0000000..7164059 Binary files /dev/null and b/Gateways/FE/projects/.resources/986f7bde8363869e2362c8a4ad41194cc0d0e5af0d57902774b1a8796e798193 differ diff --git a/Gateways/FE/projects/.resources/99fb2223e9a9fd53317969fd34f9b6a68caa09168d4aa309a1f94253f28214d2 b/Gateways/FE/projects/.resources/99fb2223e9a9fd53317969fd34f9b6a68caa09168d4aa309a1f94253f28214d2 deleted file mode 100644 index a6594a9..0000000 --- a/Gateways/FE/projects/.resources/99fb2223e9a9fd53317969fd34f9b6a68caa09168d4aa309a1f94253f28214d2 +++ /dev/null @@ -1,283 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "Boolean", - "displaySelection": 1, - "format": 0, - "instancePosition": 0, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Closed Way 01", - "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 1, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Closed Way 02", - "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 6, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Closed Way 03", - "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 7, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Closed Way 04", - "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 4, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 01", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 5, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 02", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 10, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 03", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 11, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 04", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 2, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 01", - "options": [ - "Not Open", - "Open" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 3, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 02", - "options": [ - "Not Open", - "Open" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 8, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 03", - "options": [ - "Not Open", - "Open" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 9, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 04", - "options": [ - "Not Open", - "Open" - ] - } - ] - }, - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_DS-1A3" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\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 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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": {}, - "root": { - "children": [ - { - "meta": { - "name": "FlexRepeater" - }, - "position": { - "basis": "100%" - }, - "propConfig": { - "custom.instances": { - "binding": { - "config": { - "struct": { - "allTags": "{view.custom.allTags}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.instances": { - "binding": { - "config": { - "struct": { - "allTags": "{view.custom.allTags}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "alignContent": "flex-start", - "elementPosition": { - "basis": "50%", - "grow": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Framework/Tag Info", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/9a21f98537dc13c88bff18e166d9eba117a8a0fef9d733bf0ffc43e4d4733161 b/Gateways/FE/projects/.resources/9a21f98537dc13c88bff18e166d9eba117a8a0fef9d733bf0ffc43e4d4733161 new file mode 100644 index 0000000..3ab7cac --- /dev/null +++ b/Gateways/FE/projects/.resources/9a21f98537dc13c88bff18e166d9eba117a8a0fef9d733bf0ffc43e4d4733161 @@ -0,0 +1,392 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "Breaker", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1151/SATB1_MPR1151_HS1_FE1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Breaker E/Info" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/9a2516474951bea6b5709854d4a52404f295689a19e25109470b580cc466cc1a b/Gateways/FE/projects/.resources/9a2516474951bea6b5709854d4a52404f295689a19e25109470b580cc466cc1a new file mode 100644 index 0000000..2d771e3 Binary files /dev/null and b/Gateways/FE/projects/.resources/9a2516474951bea6b5709854d4a52404f295689a19e25109470b580cc466cc1a differ diff --git a/Gateways/FE/projects/.resources/9c92f76e24892f9c8ebdfa38bb0b05fd4a8e4145125c7b6a5b9549aed9473b7f b/Gateways/FE/projects/.resources/9c92f76e24892f9c8ebdfa38bb0b05fd4a8e4145125c7b6a5b9549aed9473b7f new file mode 100644 index 0000000..9962b79 Binary files /dev/null and b/Gateways/FE/projects/.resources/9c92f76e24892f9c8ebdfa38bb0b05fd4a8e4145125c7b6a5b9549aed9473b7f differ diff --git a/Gateways/FE/projects/.resources/8d0bf53e6a22153fab59fb7f41a53146ec4241d8a410108f202b97d69af57f86 b/Gateways/FE/projects/.resources/9cc363ad766e230b8780502dbbf6dd7ab0546aead9ff3ec1cb4c50b3cc781005 similarity index 98% rename from Gateways/FE/projects/.resources/8d0bf53e6a22153fab59fb7f41a53146ec4241d8a410108f202b97d69af57f86 rename to Gateways/FE/projects/.resources/9cc363ad766e230b8780502dbbf6dd7ab0546aead9ff3ec1cb4c50b3cc781005 index f7d3ac7..a517145 100644 --- a/Gateways/FE/projects/.resources/8d0bf53e6a22153fab59fb7f41a53146ec4241d8a410108f202b97d69af57f86 +++ b/Gateways/FE/projects/.resources/9cc363ad766e230b8780502dbbf6dd7ab0546aead9ff3ec1cb4c50b3cc781005 @@ -48,8 +48,8 @@ }, "props": { "defaultSize": { - "height": 1190, - "width": 2078 + "height": 1132, + "width": 1695 } }, "root": { @@ -3383,29 +3383,6 @@ }, "type": "ia.display.view" }, - { - "meta": { - "name": "DH controls" - }, - "position": { - "height": 1000, - "width": 370, - "x": 1708, - "y": -11.1562 - }, - "props": { - "params": { - "dh": 1 - }, - "path": "Library/Cards/Card_DH_Control", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, { "meta": { "name": "EmbeddedView" @@ -3413,8 +3390,8 @@ "position": { "height": 148, "width": 105, - "x": 1814.78, - "y": 915.345 + "x": -0.9600429382324478, + "y": 21.28765649414062 }, "props": { "params": { @@ -3554,8 +3531,8 @@ "name": "root" }, "position": { - "x": 6.98828125, - "y": 147.96875 + "x": 35, + "y": -22 }, "props": { "style": { @@ -3568,16 +3545,9 @@ "extensionFunctions": null, "messageHandlers": [ { - "messageType": "eqPopupMsg", + "messageType": "requestEQPopup", "pageScope": true, - "script": "\t# implement your handler here\n\tutils.nav.eqPopupMsg(self, payload)", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "LLSPopupMsg", - "pageScope": true, - "script": "\t# implement your handler here\n\tutils.nav.LLSPopupMsg(self, payload)", + "script": "\t# implement your handler here\n\tpageId \u003d self.view.params.pageId\n\tif pageId and pageId !\u003d \"\":\n\t\tsystem.perspective.sendMessage(\u0027eqPopup\u0027, payload\u003dpayload, scope\u003d\u0027page\u0027, pageId\u003dpageId)\n\telse:\n\t\tsystem.perspective.openPopup(\"TestPopup\", \"Library/Layouts/L3_Details\", params\u003dpayload)", "sessionScope": false, "viewScope": false } diff --git a/Gateways/FE/projects/.resources/982e2a2696cebc2fffb5a0fe915fbe774c3e333f8f4243aa8867bc881e84f2c9 b/Gateways/FE/projects/.resources/9e1cc94ddbd51340d05e1803e99fcd6009564f16ebf14a74d6432f2d72bf22c2 similarity index 95% rename from Gateways/FE/projects/.resources/982e2a2696cebc2fffb5a0fe915fbe774c3e333f8f4243aa8867bc881e84f2c9 rename to Gateways/FE/projects/.resources/9e1cc94ddbd51340d05e1803e99fcd6009564f16ebf14a74d6432f2d72bf22c2 index 8901a16..ad6feeb 100644 --- a/Gateways/FE/projects/.resources/982e2a2696cebc2fffb5a0fe915fbe774c3e333f8f4243aa8867bc881e84f2c9 +++ b/Gateways/FE/projects/.resources/9e1cc94ddbd51340d05e1803e99fcd6009564f16ebf14a74d6432f2d72bf22c2 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 3 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/9e93773c93941cfcd922801c809f8fa3c293286cd806869e3fd1583950d2f017 b/Gateways/FE/projects/.resources/9e93773c93941cfcd922801c809f8fa3c293286cd806869e3fd1583950d2f017 new file mode 100644 index 0000000..c8f3ae8 Binary files /dev/null and b/Gateways/FE/projects/.resources/9e93773c93941cfcd922801c809f8fa3c293286cd806869e3fd1583950d2f017 differ diff --git a/Gateways/FE/projects/.resources/842533a8dc9ab142ee2551986a437f2902288eaa583b824c29e4f62f9dfa517e b/Gateways/FE/projects/.resources/9eef0de7d1030620a886d4bfe836ebecf2f7ea76d4d2c6d95833504cbe9bdde7 similarity index 62% rename from Gateways/FE/projects/.resources/842533a8dc9ab142ee2551986a437f2902288eaa583b824c29e4f62f9dfa517e rename to Gateways/FE/projects/.resources/9eef0de7d1030620a886d4bfe836ebecf2f7ea76d4d2c6d95833504cbe9bdde7 index 9390938..20b6af9 100644 --- a/Gateways/FE/projects/.resources/842533a8dc9ab142ee2551986a437f2902288eaa583b824c29e4f62f9dfa517e +++ b/Gateways/FE/projects/.resources/9eef0de7d1030620a886d4bfe836ebecf2f7ea76d4d2c6d95833504cbe9bdde7 @@ -24,8 +24,8 @@ "position": { "height": 1040, "width": 2011, - "x": 87.88, - "y": 15.059999999999999 + "x": 85.88, + "y": 15.06 }, "props": { "elements": [ @@ -37,7 +37,7 @@ "id": "Supply", "name": "Supply", "stroke": { - "paint": "#0005ff", + "paint": "var(--flow-supply)", "width": "0.88px" }, "type": "path" @@ -50,7 +50,7 @@ "id": "Return", "name": "Return", "stroke": { - "paint": "#f00", + "paint": "var(--flow-return)", "width": "0.88px" }, "type": "path" @@ -398,811 +398,6 @@ }, "type": "ia.display.view" }, - { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/DHDP_AvgObj/Value OUT" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 21.16, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "psi", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "DH DP Avg", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/ChillerDP_AvgObj/Value OUT" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 411.67, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "gpm", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "Chiller Min Flow", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Control/PSet_SP" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 25, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "psi", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv PID SP", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Chiller_MinFlow_SP" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 150, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "GPLM", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "Chiller Min Flow SP", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_2" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_1" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Out CV" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 0, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv PID 1 OutCV", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2/Out CV" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 0, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv PID 2 OutCV", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_3" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWBPV_PosSP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "text": 0, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px", - "padding": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv Pos SP", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "position": { - "basis": "30%" - }, - "props": { - "direction": "column", - "justify": "center" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer_6" - }, - "position": { - "height": 110, - "rotate": { - "anchor": "61% -55%" - }, - "width": 554, - "x": 1524, - "y": 1027.1396014404297 - }, - "props": { - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": 4, - "borderBottomRightRadius": 4, - "borderTopLeftRadius": 4, - "borderTopRightRadius": 4, - "boxShadow": "var(--boxShadow2)", - "gap": "5px", - "overflow": "visible", - "padding": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "EmbeddedView_28" - }, - "position": { - "height": 110, - "width": 130, - "x": 2285, - "y": 1027.2096014404297 - }, - "props": { - "params": { - "embedded": true, - "objectName": "PID_Loop", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1" - }, - "path": "Library/Widgets/Wdg_PID", - "style": { - "classes": "containers/HoverOver", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_29" - }, - "position": { - "height": 110, - "rotate": { - "anchor": "-22% 0%" - }, - "width": 130, - "x": 2124.16, - "y": 1026.9896014404299 - }, - "props": { - "params": { - "embedded": true, - "objectName": "PID_Loop", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2" - }, - "path": "Library/Widgets/Wdg_PID", - "style": { - "classes": "containers/HoverOver", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, { "meta": { "name": "EmbeddedView_2" @@ -3511,25 +2706,6 @@ }, "type": "ia.display.view" }, - { - "meta": { - "name": "EmbeddedView" - }, - "position": { - "height": 788, - "width": 311, - "x": 2124.48, - "y": 222.49436804199217 - }, - "props": { - "path": "Library/Cards/Card_Process_Control", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, { "custom": { "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" @@ -3683,1423 +2859,6 @@ }, "type": "ia.display.view" }, - { - "custom": { - "ChillerTagInfo": { - "chillerLLSPath": "[Ignition_Common_IO_Gtwy]CHWS/Chiller_LLS", - "statusTranslation": [ - { - "index": 0, - "value": [ - "Not Avail", - "Available" - ] - }, - { - "index": 1, - "value": [ - "Stopped", - "Running" - ] - }, - { - "index": 2, - "value": [ - "Good", - "Failed" - ] - } - ] - } - }, - "meta": { - "name": "Chiller LLS Table" - }, - "position": { - "height": 338, - "rotate": { - "anchor": "64% 50%" - }, - "width": 558, - "x": 1526.04, - "y": 676.49 - }, - "propConfig": { - "custom.ChillerTagInfo.nUnits": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{this.custom.ChillerTagInfo.chillerLLSPath}" - }, - "tagPath": "{tagPath}/Config/Number of Units" - }, - "type": "tag" - } - }, - "custom.ChillerTagInfo.priority": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{this.custom.ChillerTagInfo.chillerLLSPath}" - }, - "tagPath": "{1}/Reference Devices" - }, - "type": "tag" - } - }, - "custom.ChillerTagInfo.status": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{this.custom.ChillerTagInfo.chillerLLSPath}" - }, - "tagPath": "{1}/Status Devices" - }, - "type": "tag" - } - }, - "custom.ChillerTagInfo.statusBinary": { - "binding": { - "config": { - "path": "this.custom.ChillerTagInfo.status" - }, - "transforms": [ - { - "code": "\t\n\tdef int_to_bits(num):\n\t # Ensure the integer is formatted as a 3-bit binary string and then reversed\n\t binary_str \u003d format(num % 8, \u002703b\u0027) # % 8 ensures only the last 3 bits are considered\n\t return [int(bit) for bit in binary_str[::-1]]\n\t\n\treturn [int_to_bits(num) for num in value]", - "type": "script" - } - ], - "type": "property" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "nUnits": "{this.custom.ChillerTagInfo.nUnits}", - "priority": "{this.custom.ChillerTagInfo.priority}", - "status": "{this.custom.ChillerTagInfo.statusBinary}", - "statusTranslation": "{this.custom.ChillerTagInfo.statusTranslation}" - }, - "waitOnAll": false - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor i, priority in enumerate(range(value[\u0027nUnits\u0027])):\n\t\tif i\u003c9:\n\t\t\tchillerName \u003d \u0027Chiller 0{}\u0027.format(i+1)\n\t\telse:\n\t\t\tchillerName \u003d \u0027Chiller {}\u0027.format(i+1)\n\t\tstatusTxt \u003d \"Available\"\n\t\tbgColor \u003d \"transparent\"\n\t\tif value[\u0027statusTranslation\u0027][2].value[value[\u0027status\u0027][i][2]] \u003d\u003d \"Failed\":\n\t\t\tstatusTxt\u003d \"Failed\"\n\t\t\tbgColor \u003d \u0027var(--error)\u0027\n\t\telif value[\u0027statusTranslation\u0027][1].value[value[\u0027status\u0027][i][1]]\u003d\u003d\"Running\":\n\t\t\tstatusTxt\u003d \"Running\"\t\t\n\t\t\n\t\t\n\t\tnewRow \u003d {\n\t\t\t\t\u0027index\u0027: i, # index\n\t\t\t\t\u0027chillerName\u0027: {\n\t\t\t\t\t\u0027value\u0027: chillerName, # chillerName\n\t\t\t\t\t\u0027style\u0027: {\n\t\t\t\t\t\t\u0027margin-left\u0027: 10\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\"status\": {\"value\":statusTxt,\n\t\t\t\t\t\t\t\"style\":{\n\t\t\t\t\t\t\t\t\"backgroundColor\":bgColor}\n\t\t\t\t\t\t},\n\t\t\t\t\u0027priority\u0027 : value[\u0027priority\u0027][i],\n\t\t\t\t\u0027priority2\u0027: value[\u0027priority\u0027][i] if value[\u0027priority\u0027][i] \u003e 0 else 999 , # priority\n\t\t\t}\n\t\toutput.append(newRow)\n\t\tif i \u003d\u003d value[\u0027nUnits\u0027]-1:\n\t\t\tbreak\n\treturn self.sortChillerData(output)", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "index", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": false, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "chillerName", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Chiller" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "status", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Status" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "priority2", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "number", - "resizable": true, - "sort": "ascending", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": 0 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "priority", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Priority" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 41" - }, - "index": 40, - "priority": 1, - "priority2": 1, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 26" - }, - "index": 25, - "priority": 2, - "priority2": 2, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 29" - }, - "index": 28, - "priority": 3, - "priority2": 3, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 08" - }, - "index": 7, - "priority": 4, - "priority2": 4, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 46" - }, - "index": 45, - "priority": 5, - "priority2": 5, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 44" - }, - "index": 43, - "priority": 6, - "priority2": 6, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 12" - }, - "index": 11, - "priority": 7, - "priority2": 7, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 11" - }, - "index": 10, - "priority": 8, - "priority2": 8, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 28" - }, - "index": 27, - "priority": 9, - "priority2": 9, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 40" - }, - "index": 39, - "priority": 10, - "priority2": 10, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 13" - }, - "index": 12, - "priority": 11, - "priority2": 11, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 36" - }, - "index": 35, - "priority": 12, - "priority2": 12, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 19" - }, - "index": 18, - "priority": 13, - "priority2": 13, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 24" - }, - "index": 23, - "priority": 14, - "priority2": 14, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 20" - }, - "index": 19, - "priority": 15, - "priority2": 15, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 17" - }, - "index": 16, - "priority": 16, - "priority2": 16, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 47" - }, - "index": 46, - "priority": 17, - "priority2": 17, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 38" - }, - "index": 37, - "priority": 18, - "priority2": 18, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 30" - }, - "index": 29, - "priority": 19, - "priority2": 19, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 07" - }, - "index": 6, - "priority": 20, - "priority2": 20, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 05" - }, - "index": 4, - "priority": 21, - "priority2": 21, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 27" - }, - "index": 26, - "priority": 22, - "priority2": 22, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 15" - }, - "index": 14, - "priority": 23, - "priority2": 23, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 34" - }, - "index": 33, - "priority": 24, - "priority2": 24, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 35" - }, - "index": 34, - "priority": 25, - "priority2": 25, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 22" - }, - "index": 21, - "priority": 26, - "priority2": 26, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 14" - }, - "index": 13, - "priority": 27, - "priority2": 27, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 33" - }, - "index": 32, - "priority": 28, - "priority2": 28, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 45" - }, - "index": 44, - "priority": 29, - "priority2": 29, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 21" - }, - "index": 20, - "priority": 30, - "priority2": 30, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 16" - }, - "index": 15, - "priority": 31, - "priority2": 31, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 48" - }, - "index": 47, - "priority": 32, - "priority2": 32, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 43" - }, - "index": 42, - "priority": 33, - "priority2": 33, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 39" - }, - "index": 38, - "priority": 34, - "priority2": 34, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 23" - }, - "index": 22, - "priority": 35, - "priority2": 35, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 31" - }, - "index": 30, - "priority": 36, - "priority2": 36, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 02" - }, - "index": 1, - "priority": 37, - "priority2": 37, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 03" - }, - "index": 2, - "priority": 38, - "priority2": 38, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 04" - }, - "index": 3, - "priority": 39, - "priority2": 39, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 32" - }, - "index": 31, - "priority": 40, - "priority2": 40, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 09" - }, - "index": 8, - "priority": 41, - "priority2": 41, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 06" - }, - "index": 5, - "priority": 42, - "priority2": 42, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 25" - }, - "index": 24, - "priority": 43, - "priority2": 43, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 42" - }, - "index": 41, - "priority": 44, - "priority2": 44, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 01" - }, - "index": 0, - "priority": 45, - "priority2": 45, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 18" - }, - "index": 17, - "priority": 46, - "priority2": 46, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 10" - }, - "index": 9, - "priority": 47, - "priority2": 47, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 37" - }, - "index": 36, - "priority": 48, - "priority2": 48, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - } - ], - "pager": { - "bottom": false - } - }, - "scripts": { - "customMethods": [ - { - "name": "sortChillerData", - "params": [ - "arrData" - ], - "script": "\tpriority_rows \u003d sorted([row for row in arrData if row[\"priority2\"] \u003c 999], key\u003dlambda x: x[\"priority2\"])\n\tnewArr \u003d [row for row in arrData if row[\"priority2\"] \u003d\u003d 999]\n\tfor row in priority_rows:\n\t\tif row[\"priority2\"] \u003c 999:\n#\t\t\tsystem.perspective.print(\"%s placed in position %s\"%(row[\"chillerName\"][\"value\"], row[\"priority2\"]-1))\n\t\t\tnewArr.insert(row[\"priority2\"]-1, row)\n\t\n\treturn newArr\n\t\t\t\n\t\n\t" - } - ], - "extensionFunctions": null, - "messageHandlers": [] - }, - "type": "ia.display.table" - }, { "custom": { "tagPath": "[Ignition_Common_IO_Gtwy]Roof" @@ -5108,13 +2867,13 @@ "name": "Supply Chart" }, "position": { - "height": 240, + "height": 426, "rotate": { "anchor": "57% 50%" }, - "width": 352, - "x": 2101.97, - "y": -2.959808349609375 + "width": 630, + "x": 1463.97, + "y": 647.54 }, "propConfig": { "custom.raw": { @@ -6221,8 +3980,8 @@ "name": "root" }, "position": { - "x": 1001, - "y": 600 + "x": 1, + "y": 0 }, "scripts": { "customMethods": [], diff --git a/Gateways/FE/projects/.resources/a03ced5217784339f45e781e7eccfa7f155d77275976e45e2cfd0bd9546abc89 b/Gateways/FE/projects/.resources/a03ced5217784339f45e781e7eccfa7f155d77275976e45e2cfd0bd9546abc89 deleted file mode 100644 index 742ce21..0000000 Binary files a/Gateways/FE/projects/.resources/a03ced5217784339f45e781e7eccfa7f155d77275976e45e2cfd0bd9546abc89 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/a08d468185378a88dd628fe76022c83c0cd70a9f92f9fb681429324fc67cef73 b/Gateways/FE/projects/.resources/a08d468185378a88dd628fe76022c83c0cd70a9f92f9fb681429324fc67cef73 new file mode 100644 index 0000000..04c82a9 --- /dev/null +++ b/Gateways/FE/projects/.resources/a08d468185378a88dd628fe76022c83c0cd70a9f92f9fb681429324fc67cef73 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "LV SWBD", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV SWBD 1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a09ea2e0b236ea5f8391450ccd02af8211be839348c36cabb88eef44288ff348 b/Gateways/FE/projects/.resources/a09ea2e0b236ea5f8391450ccd02af8211be839348c36cabb88eef44288ff348 deleted file mode 100644 index 6bb5024..0000000 Binary files a/Gateways/FE/projects/.resources/a09ea2e0b236ea5f8391450ccd02af8211be839348c36cabb88eef44288ff348 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/a0f2cf81c8965581773df20668ffe35cd23c5d5ff2ee5b009ccc74e873d57e49 b/Gateways/FE/projects/.resources/a0f2cf81c8965581773df20668ffe35cd23c5d5ff2ee5b009ccc74e873d57e49 deleted file mode 100644 index 5107f8e..0000000 Binary files a/Gateways/FE/projects/.resources/a0f2cf81c8965581773df20668ffe35cd23c5d5ff2ee5b009ccc74e873d57e49 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/a106f70f00d4bc8bf66feb61d7d5bdd586c6029302429a71538f091936f899db b/Gateways/FE/projects/.resources/a106f70f00d4bc8bf66feb61d7d5bdd586c6029302429a71538f091936f899db deleted file mode 100644 index c2d0df4..0000000 Binary files a/Gateways/FE/projects/.resources/a106f70f00d4bc8bf66feb61d7d5bdd586c6029302429a71538f091936f899db and /dev/null differ diff --git a/Gateways/FE/projects/.resources/a1acae97f4e01c9fabc66828e1d521500be20b728fd46d638d7e272a6b6ad437 b/Gateways/FE/projects/.resources/a1acae97f4e01c9fabc66828e1d521500be20b728fd46d638d7e272a6b6ad437 deleted file mode 100644 index a111719..0000000 Binary files a/Gateways/FE/projects/.resources/a1acae97f4e01c9fabc66828e1d521500be20b728fd46d638d7e272a6b6ad437 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d37f770c045ae67293288f9dac45930ae5ca495c728aadbd5bd7987f4351dcc3 b/Gateways/FE/projects/.resources/a223439a207b211a836434d4a46c1f7c6147f61ea0f591e417c4f3ae41504b32 similarity index 57% rename from Gateways/FE/projects/.resources/d37f770c045ae67293288f9dac45930ae5ca495c728aadbd5bd7987f4351dcc3 rename to Gateways/FE/projects/.resources/a223439a207b211a836434d4a46c1f7c6147f61ea0f591e417c4f3ae41504b32 index 0d700cd..f9e76df 100644 --- a/Gateways/FE/projects/.resources/d37f770c045ae67293288f9dac45930ae5ca495c728aadbd5bd7987f4351dcc3 +++ b/Gateways/FE/projects/.resources/a223439a207b211a836434d4a46c1f7c6147f61ea0f591e417c4f3ae41504b32 @@ -8,132 +8,6 @@ }, "root": { "children": [ - { - "children": [ - { - "meta": { - "name": "Status Indicator 01", - "tooltip": { - "enabled": true, - "text": "Bypass, DPs Fail amd Qty Chiller permissive are all good" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/PlantMgr Permissive OK", - "text": "Plant Manager Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Status Indicator 02", - "tooltip": { - "enabled": true, - "text": "At least 1 DH DP is not faulted" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/DPs Fail Permissive OK", - "text": "DPs Fail Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Indicators_01" - }, - "position": { - "basis": "45px" - }, - "props": { - "style": { - "gap": "var(--space-sm)", - "padding": "var(--space-sm)" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Status Indicator 03", - "tooltip": { - "enabled": true, - "text": "At least 1 CH is available" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/QtyChillers Permissive OK", - "text": "Qty Chillers Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Status Indicator 04", - "tooltip": { - "enabled": true, - "text": "At least 1 loop bypass valve available" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Bypass Permissive OK", - "text": "Bypass Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Indicators_02" - }, - "position": { - "basis": "45px" - }, - "props": { - "style": { - "gap": "var(--space-sm)", - "padding": "var(--space-sm)" - } - }, - "type": "ia.container.flex" - }, { "children": [ { @@ -725,75 +599,6 @@ }, "type": "ia.container.flex" }, - { - "children": [ - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B301 Chillers LLS\u0027\n\ttitle \u003d \u0027Chillers LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Btn Chiller LLS" - }, - "position": { - "basis": "50%", - "grow": 1 - }, - "props": { - "style": { - "backgroundColor": "var(--action-primary)" - }, - "text": "Chillers LLS" - }, - "type": "ia.input.button" - }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B302 CHW Pumps LLS\u0027\n\ttitle \u003d \u0027Chilled Water Pumps LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Btn CHWP LLS" - }, - "position": { - "basis": "50%" - }, - "props": { - "style": { - "backgroundColor": "var(--action-primary)" - }, - "text": "CHWP LLS" - }, - "type": "ia.input.button" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "position": { - "basis": "40px" - }, - "props": { - "style": { - "gap": "var(--space-sm)" - } - }, - "type": "ia.container.flex" - }, { "children": [ { @@ -893,431 +698,115 @@ { "children": [ { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_SpdSP" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.#", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 86.7, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "67px" - }, - "props": { - "alignVertical": "top", - "text": "CHWP Speed Setpoint", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], "meta": { - "name": "FlexContainer" + "name": "EmbeddedView_29" }, "position": { - "basis": "30%" + "grow": 1 }, "props": { - "direction": "column", - "justify": "center", + "params": { + "embedded": true, + "objectName": "PID_Loop", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2" + }, + "path": "Library/Widgets/Wdg_PID", "style": { - "padding": "5px" + "classes": "containers/HoverOver", + "overflow": "visible" } }, - "type": "ia.container.flex" + "type": "ia.display.view" }, { "meta": { - "name": "Label" - }, - "position": { - "basis": "1px" + "name": "EmbeddedView_28" }, "props": { + "params": { + "embedded": true, + "objectName": "PID_Loop", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1" + }, + "path": "Library/Widgets/Wdg_PID", "style": { - "backgroundColor": "LightGray" + "classes": "containers/HoverOver", + "overflow": "visible" } }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_ADDLimit" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 94, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHWP Add Limit", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP SUB Limit" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 67, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHWP SuB Limit", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_Demand" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "text": 4, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "VFD", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px", - "padding": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "67px" - }, - "props": { - "alignVertical": "top", - "text": "CHWP Demand", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "position": { - "basis": "30%" - }, - "props": { - "direction": "column", - "justify": "center" - }, - "type": "ia.container.flex" + "type": "ia.display.view" } ], "meta": { - "name": "CHWP Calculation Container" + "name": "FlexContainer" + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B301 Chillers LLS\u0027\n\ttitle \u003d \u0027Chillers LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Btn Chiller LLS" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "props": { + "style": { + "backgroundColor": "var(--action-primary)" + }, + "text": "Chillers LLS" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B302 CHW Pumps LLS\u0027\n\ttitle \u003d \u0027Chilled Water Pumps LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Btn CHWP LLS" + }, + "position": { + "basis": "50%" + }, + "props": { + "style": { + "backgroundColor": "var(--action-primary)" + }, + "text": "CHWP LLS" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "position": { + "basis": "40px" }, "props": { "style": { - "classes": "containers/card_nested", - "gap": "5px", - "padding": "5px" + "gap": "var(--space-sm)" } }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/.resources/a2761670c68b78a693e354166a22cfd5ed595538bfe385b95abc974e803c68d5 b/Gateways/FE/projects/.resources/a2761670c68b78a693e354166a22cfd5ed595538bfe385b95abc974e803c68d5 deleted file mode 100644 index 266cdcf..0000000 Binary files a/Gateways/FE/projects/.resources/a2761670c68b78a693e354166a22cfd5ed595538bfe385b95abc974e803c68d5 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/a2c84833eae10b823876e8484282dfd2b238dd719d94c034c9252fe1fc938851 b/Gateways/FE/projects/.resources/a2c84833eae10b823876e8484282dfd2b238dd719d94c034c9252fe1fc938851 deleted file mode 100644 index a36adcf..0000000 --- a/Gateways/FE/projects/.resources/a2c84833eae10b823876e8484282dfd2b238dd719d94c034c9252fe1fc938851 +++ /dev/null @@ -1,481 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CH31_SYSTEM" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - }, - "selected": true - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/ab6fead88b68f09fb6aa72fd3371d048eba671e9fe4e2661957fc770308dd589 b/Gateways/FE/projects/.resources/a2cda4dc4547863c94e4dc346101863235b65bd12af935be0443d0dbd6b51d0e similarity index 97% rename from Gateways/FE/projects/.resources/ab6fead88b68f09fb6aa72fd3371d048eba671e9fe4e2661957fc770308dd589 rename to Gateways/FE/projects/.resources/a2cda4dc4547863c94e4dc346101863235b65bd12af935be0443d0dbd6b51d0e index 89f89e2..d6bca5f 100644 --- a/Gateways/FE/projects/.resources/ab6fead88b68f09fb6aa72fd3371d048eba671e9fe4e2661957fc770308dd589 +++ b/Gateways/FE/projects/.resources/a2cda4dc4547863c94e4dc346101863235b65bd12af935be0443d0dbd6b51d0e @@ -466,7 +466,7 @@ "dom": { "onClick": { "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\ttagPath \u003d self.view.params.tagPath\n\tobjectName \u003d self.view.params.objectName\n\tutils.nav.openEQPopup(objectName, tagPath)" + "script": "\tpayload \u003d {\n\t\t\u0027tagPath\u0027: self.view.params.tagPath,\n\t\t\u0027objectName\u0027: self.view.params.objectName,\n\t\t\u0027modal\u0027: True,\n\t\t\u0027resizable\u0027: True\n\t}\n\tsystem.perspective.sendMessage(\u0027requestEQPopup\u0027, payload \u003d payload, scope\u003d\u0027page\u0027)" }, "scope": "G", "type": "script" diff --git a/Gateways/FE/projects/.resources/a2e73a104f567fa1f49ef85dafbb7784adc916a15cf693e4f86ad7f4e0d93491 b/Gateways/FE/projects/.resources/a2e73a104f567fa1f49ef85dafbb7784adc916a15cf693e4f86ad7f4e0d93491 new file mode 100644 index 0000000..ce0ff42 --- /dev/null +++ b/Gateways/FE/projects/.resources/a2e73a104f567fa1f49ef85dafbb7784adc916a15cf693e4f86ad7f4e0d93491 @@ -0,0 +1,570 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 1000, + "width": 400 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Roof" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FirstFloor Percent" + }, + "props": { + "path": "Library/Widgets/Layouts/Wdt_Bldg_Roof", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "Second Floor" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FirstFloor Percent_0" + }, + "props": { + "path": "Library/Widgets/Layouts/Wdt_Bldg_2f", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Label_2" + }, + "props": { + "text": "First Floor" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FirstFloor Percent_1" + }, + "props": { + "path": "Library/Widgets/Layouts/Wdt_Bldg_1f", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Label_1" + }, + "position": { + "grow": 1 + }, + "props": { + "textStyle": { + "textAlign": "start" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_3" + }, + "props": { + "text": "List of devices", + "textStyle": { + "textAlign": "start" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "component": { + "onRowClick": { + "config": { + "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Tag}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Table" + }, + "position": { + "basis": "243px" + }, + "propConfig": { + "props.data": { + "binding": { + "config": { + "struct": { + "paths": "{view.custom.data}", + "time": "now(5000)" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tRAT \u003d system.tag.readBlocking(item + \"/Return Air Temperature\")[0].value\n\t\tSAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\tName \u003d item.split(\u0027_\u0027)[5]\n\t\t#Tag \u003d system.tag.readBlocking(item + \"/Meta/Ignition Tag Name\")[0].value\n\t\tTag \u003d item.split(\u0027/\u0027)[1]\n\t\ttagPath \u003d item\n\t\toutput.append({\n\t\t\t\t\t\t\"RAT\": RAT,\n\t\t\t\t\t\t\"SAT\": SAT,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Tag\": Tag,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "columns": [ + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "Name", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "SAT", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Supply Air Temperature" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "Tag", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Tag" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": false, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "AlarmSeverity", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Alarm Severity" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + } + ], + "data": [ + { + "AlarmSeverity": " ", + "Name": "DOAS01", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS01", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS02", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS02", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS02" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS03", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS03", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS04", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS04", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS05", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS05", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + } + ] + }, + "type": "ia.display.table" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-sm)", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a3c0909eaf261607489a707a8e6a53ff61b73d52a37edf029751c5c6b889600c b/Gateways/FE/projects/.resources/a3c0909eaf261607489a707a8e6a53ff61b73d52a37edf029751c5c6b889600c new file mode 100644 index 0000000..db3b76b Binary files /dev/null and b/Gateways/FE/projects/.resources/a3c0909eaf261607489a707a8e6a53ff61b73d52a37edf029751c5c6b889600c differ diff --git a/Gateways/FE/projects/.resources/a477a4446ba27f331e610b2e02794d3bd8d75c7f8e4b33d31cdac49b3565fff6 b/Gateways/FE/projects/.resources/a477a4446ba27f331e610b2e02794d3bd8d75c7f8e4b33d31cdac49b3565fff6 new file mode 100644 index 0000000..284953a --- /dev/null +++ b/Gateways/FE/projects/.resources/a477a4446ba27f331e610b2e02794d3bd8d75c7f8e4b33d31cdac49b3565fff6 @@ -0,0 +1,165 @@ +{ + "custom": { + "RTU_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02", + "auth": { + "almAck": false, + "almShelve": false, + "config": false, + "control": false + }, + "data": [ + "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01", + "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" + ], + "room": "SATB1_RF_RTU02", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof" + }, + "params": {}, + "propConfig": { + "custom.RTU_tagPath": { + "binding": { + "config": { + "path": "view.custom.room" + }, + "transforms": [ + { + "code": "\treturn self.custom.tagPath + \"/\"+ value", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.auth": { + "binding": { + "config": { + "path": "session.props.auth.user.roles" + }, + "transforms": [ + { + "code": "\treturn utils.roles.validate(value)", + "type": "script" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.data": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.custom.tagPath}", + "time": "now(3000)" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/RTU-1\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\t\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/RTU-2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.room": { + "persistent": true + }, + "custom.tagPath": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "RTU Diagram" + }, + "propConfig": { + "props.params.objectName": { + "binding": { + "config": { + "path": "view.custom.room" + }, + "transforms": [ + { + "code": "\toutput \u003d value.split(\"_\")\n\treturn output[2]", + "type": "script" + } + ], + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.custom.RTU_tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "path": "view.custom.room" + }, + "enabled": false, + "transforms": [ + { + "code": "\tsplit \u003d value.split(\"_\")\n\treturn \"Pages/Dev/C_AirSystem/Diagrams/\" + split[2]", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": false + }, + "path": "Library/Diagrams/HVAC/Dgrm_RTU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "justify": "space-evenly", + "style": { + "backgroundColor": "var(--containerRoot)", + "overflow": "visible", + "padding": 15 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "roomUpdate", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.room \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a6638d727bf38dffb095afc42dc7ccc982050944a1185d0680b81dab780b19f8 b/Gateways/FE/projects/.resources/a6638d727bf38dffb095afc42dc7ccc982050944a1185d0680b81dab780b19f8 deleted file mode 100644 index 0d7419c..0000000 --- a/Gateways/FE/projects/.resources/a6638d727bf38dffb095afc42dc7ccc982050944a1185d0680b81dab780b19f8 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/SEL-735 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a688de7530cc22c5b05633412d92e804cb8e0e239f1e4bc8bffc548dedab0b19 b/Gateways/FE/projects/.resources/a688de7530cc22c5b05633412d92e804cb8e0e239f1e4bc8bffc548dedab0b19 deleted file mode 100644 index cb865d0..0000000 --- a/Gateways/FE/projects/.resources/a688de7530cc22c5b05633412d92e804cb8e0e239f1e4bc8bffc548dedab0b19 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948666485 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948666485 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a6b8132dc6bab21bc6ffbc75ee4bb8bbc397f64d5c9d59fdc97675221967f72a b/Gateways/FE/projects/.resources/a6b8132dc6bab21bc6ffbc75ee4bb8bbc397f64d5c9d59fdc97675221967f72a new file mode 100644 index 0000000..b78fe5a --- /dev/null +++ b/Gateways/FE/projects/.resources/a6b8132dc6bab21bc6ffbc75ee4bb8bbc397f64d5c9d59fdc97675221967f72a @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "Motor", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH01_MOTOR" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a6d2e5e779d34e5fbfdbc0474d260714326438a05e4dbcb15b01301adfc7dedb b/Gateways/FE/projects/.resources/a6d2e5e779d34e5fbfdbc0474d260714326438a05e4dbcb15b01301adfc7dedb new file mode 100644 index 0000000..a0a60d1 --- /dev/null +++ b/Gateways/FE/projects/.resources/a6d2e5e779d34e5fbfdbc0474d260714326438a05e4dbcb15b01301adfc7dedb @@ -0,0 +1,189 @@ +{ + "custom": { + "FCU_tagPath": [], + "backupdata": [ + "[Ignition_Common_IO_Gtwy]ER1185/SATB1_HS2_EL1185_FCU01", + "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02", + "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03", + "[Ignition_Common_IO_Gtwy]ER1160/SATB1_HS2_EL1160_FCU04", + "[Ignition_Common_IO_Gtwy]IDF1174/SATB1_HS2_IDF1174_FCU05", + "[Ignition_Common_IO_Gtwy]IDF1154/SATB1_HS2_IDF1154_FCU06", + "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU07", + "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU08", + "[Ignition_Common_IO_Gtwy]FS1285/SATB1_HS2_FS1285_FCU09", + "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU10", + "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU11", + "[Ignition_Common_IO_Gtwy]ER1287/SATB1_HS2_EL1287_FCU12", + "[Ignition_Common_IO_Gtwy]ER1284/SATB1_HS2_EL1284_FCU13", + "[Ignition_Common_IO_Gtwy]IDF1274/SATB1_HS2_IDF1274_FCU14", + "[Ignition_Common_IO_Gtwy]IDF1264/SATB1_HS2_IDF1264_FCU15", + "[Ignition_Common_IO_Gtwy]ER1128/SATB1_HS2_EL1128_FCU16", + "[Ignition_Common_IO_Gtwy]MR1125/SATB1_HS2_ME1125_FCU17", + "[Ignition_Common_IO_Gtwy]ER1229/SATB1_HS2_EL1229_FCU18", + "[Ignition_Common_IO_Gtwy]IDF1218/SATB1_HS2_IDF1218_FCU19", + "[Ignition_Common_IO_Gtwy]IDF1122/SATB1_HS2_IDF1122_FCU20", + "[Ignition_Common_IO_Gtwy]FS1232/SATB1_HS2_FS1232_FCU21", + "[Ignition_Common_IO_Gtwy]MR1132/SATB1_HS2_ME1132_FCU22", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU23", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU24", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU25", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU26", + "[Ignition_Common_IO_Gtwy]RM1219/SATB1_HS2_RM1219_FCU27", + "[Ignition_Common_IO_Gtwy]RM1193/SATB1_HS2_RM1193_FCU28", + "[Ignition_Common_IO_Gtwy]RM1234/SATB1_HS2_RM1234_FCU29" + ], + "data": [ + "[Ignition_Common_IO_Gtwy]ER1185/SATB1_HS2_EL1185_FCU01", + "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02", + "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03", + "[Ignition_Common_IO_Gtwy]ER1160/SATB1_HS2_EL1160_FCU04", + "[Ignition_Common_IO_Gtwy]IDF1174/SATB1_HS2_IDF1174_FCU05", + "[Ignition_Common_IO_Gtwy]IDF1154/SATB1_HS2_IDF1154_FCU06", + "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU07", + "[Ignition_Common_IO_Gtwy]MDF1149/SATB1_HS2_MDF1149_FCU08", + "[Ignition_Common_IO_Gtwy]FS1285/SATB1_HS2_FS1285_FCU09", + "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU10", + "[Ignition_Common_IO_Gtwy]IDF1286/SATB1_HS2_IDF1286_FCU11", + "[Ignition_Common_IO_Gtwy]ER1287/SATB1_HS2_EL1287_FCU12", + "[Ignition_Common_IO_Gtwy]ER1284/SATB1_HS2_EL1284_FCU13", + "[Ignition_Common_IO_Gtwy]IDF1274/SATB1_HS2_IDF1274_FCU14", + "[Ignition_Common_IO_Gtwy]IDF1264/SATB1_HS2_IDF1264_FCU15", + "[Ignition_Common_IO_Gtwy]ER1128/SATB1_HS2_EL1128_FCU16", + "[Ignition_Common_IO_Gtwy]MR1125/SATB1_HS2_ME1125_FCU17", + "[Ignition_Common_IO_Gtwy]ER1229/SATB1_HS2_EL1229_FCU18", + "[Ignition_Common_IO_Gtwy]IDF1218/SATB1_HS2_IDF1218_FCU19", + "[Ignition_Common_IO_Gtwy]IDF1122/SATB1_HS2_IDF1122_FCU20", + "[Ignition_Common_IO_Gtwy]FS1232/SATB1_HS2_FS1232_FCU21", + "[Ignition_Common_IO_Gtwy]MR1132/SATB1_HS2_ME1132_FCU22", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU23", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU24", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU25", + "[Ignition_Common_IO_Gtwy]RM1138/SATB1_HS2_RM1138_FCU26", + "[Ignition_Common_IO_Gtwy]RM1219/SATB1_HS2_RM1219_FCU27", + "[Ignition_Common_IO_Gtwy]RM1193/SATB1_HS2_RM1193_FCU28", + "[Ignition_Common_IO_Gtwy]RM1234/SATB1_HS2_RM1234_FCU29" + ], + "selectedRoom": "MDF1187", + "tagPath": "[Ignition_Common_IO_Gtwy]" + }, + "params": {}, + "propConfig": { + "custom.FCU_tagPath": { + "binding": { + "config": { + "struct": { + "selected": "{view.custom.selectedRoom}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\tselected \u003d value[\"selected\"]\n\tpath \u003d str(self.view.custom.tagPath) + selected\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/FCU\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.backupdata": { + "persistent": true + }, + "custom.data": { + "persistent": true + }, + "custom.selectedRoom": { + "persistent": true + }, + "custom.tagPath": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1276 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "FlexRepeater" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.FCU_tagPath" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"FCU\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "direction": "column", + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "FCU", + "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02" + }, + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "FCU", + "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03" + } + ], + "path": "Library/Diagrams/HVAC/Dgrm_FCU", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": false + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "justify": "space-evenly", + "style": { + "backgroundColor": "var(--containerRoot)", + "overflow": "visible", + "padding": 15 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "updateRoom", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/a7a1d63f047a1c256676a8476adef1482253ebb7c322411a5e057f7f35515459 b/Gateways/FE/projects/.resources/a7a1d63f047a1c256676a8476adef1482253ebb7c322411a5e057f7f35515459 deleted file mode 100644 index 7607f3a..0000000 --- a/Gateways/FE/projects/.resources/a7a1d63f047a1c256676a8476adef1482253ebb7c322411a5e057f7f35515459 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/UPS 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948612077 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948612077 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/aa250e6805e07ea55139127ae8d9864255e3cba3b7864f62ba53a9766900d0c7 b/Gateways/FE/projects/.resources/aa250e6805e07ea55139127ae8d9864255e3cba3b7864f62ba53a9766900d0c7 new file mode 100644 index 0000000..5239f9e --- /dev/null +++ b/Gateways/FE/projects/.resources/aa250e6805e07ea55139127ae8d9864255e3cba3b7864f62ba53a9766900d0c7 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "Chiller", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller 1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 1 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/aacc56f748f5c97e399629d890134539c97b6398d0b0353abedf704ad09c806f b/Gateways/FE/projects/.resources/aacc56f748f5c97e399629d890134539c97b6398d0b0353abedf704ad09c806f deleted file mode 100644 index a489d46..0000000 --- a/Gateways/FE/projects/.resources/aacc56f748f5c97e399629d890134539c97b6398d0b0353abedf704ad09c806f +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/RTU-1 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \"\",\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948408573 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948408573 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/abe53d9d6be475310208b00bfd4cc210ad2e86500614cf934d968f5f8c9a70c7 b/Gateways/FE/projects/.resources/abe53d9d6be475310208b00bfd4cc210ad2e86500614cf934d968f5f8c9a70c7 new file mode 100644 index 0000000..e09e21a Binary files /dev/null and b/Gateways/FE/projects/.resources/abe53d9d6be475310208b00bfd4cc210ad2e86500614cf934d968f5f8c9a70c7 differ diff --git a/Gateways/FE/projects/.resources/abf068e1b9b506f0c68c401c6dd567f75e44a9d3cb46fc960e94d357c136cf2d b/Gateways/FE/projects/.resources/abf068e1b9b506f0c68c401c6dd567f75e44a9d3cb46fc960e94d357c136cf2d deleted file mode 100644 index 52268c4..0000000 --- a/Gateways/FE/projects/.resources/abf068e1b9b506f0c68c401c6dd567f75e44a9d3cb46fc960e94d357c136cf2d +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CH31_SYSTEM" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947799223 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947799223 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/acdb7fbcb2250f79cdf06b2de4d639f79dd2d48eeb951744f3807cbae614780b b/Gateways/FE/projects/.resources/acdb7fbcb2250f79cdf06b2de4d639f79dd2d48eeb951744f3807cbae614780b new file mode 100644 index 0000000..efb0834 Binary files /dev/null and b/Gateways/FE/projects/.resources/acdb7fbcb2250f79cdf06b2de4d639f79dd2d48eeb951744f3807cbae614780b differ diff --git a/Gateways/FE/projects/.resources/ad165da537d109c6c00f4bad2ecdbbbe5d3a958bc2b0694a2faeb66120858567 b/Gateways/FE/projects/.resources/ad165da537d109c6c00f4bad2ecdbbbe5d3a958bc2b0694a2faeb66120858567 deleted file mode 100644 index fbb8e8c..0000000 Binary files a/Gateways/FE/projects/.resources/ad165da537d109c6c00f4bad2ecdbbbe5d3a958bc2b0694a2faeb66120858567 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/ae0dc2846bb102a15bd432d216d42bfcfa62e96c954a1eaa6016719af9b55694 b/Gateways/FE/projects/.resources/ae0dc2846bb102a15bd432d216d42bfcfa62e96c954a1eaa6016719af9b55694 new file mode 100644 index 0000000..800ae2b Binary files /dev/null and b/Gateways/FE/projects/.resources/ae0dc2846bb102a15bd432d216d42bfcfa62e96c954a1eaa6016719af9b55694 differ diff --git a/Gateways/FE/projects/.resources/6c717a6a019c5edeab0c8460d0d39ea463d71b03f8d45690d6a08878201a06d6 b/Gateways/FE/projects/.resources/ae12b7f7a23ab83aa71dc7d461e92f247eb989eba0e6465998417bc1d7e7724d similarity index 99% rename from Gateways/FE/projects/.resources/6c717a6a019c5edeab0c8460d0d39ea463d71b03f8d45690d6a08878201a06d6 rename to Gateways/FE/projects/.resources/ae12b7f7a23ab83aa71dc7d461e92f247eb989eba0e6465998417bc1d7e7724d index eb8be05..4a596de 100644 --- a/Gateways/FE/projects/.resources/6c717a6a019c5edeab0c8460d0d39ea463d71b03f8d45690d6a08878201a06d6 +++ b/Gateways/FE/projects/.resources/ae12b7f7a23ab83aa71dc7d461e92f247eb989eba0e6465998417bc1d7e7724d @@ -248,7 +248,7 @@ } }, "props": { - "formattedValue": "Nov 4, 2024 9:22 AM" + "formattedValue": "Nov 4, 2024 3:22 PM" }, "type": "ia.input.date-time-input" } @@ -310,7 +310,7 @@ } }, "props": { - "formattedValue": "Nov 6, 2024 1:59 AM", + "formattedValue": "Nov 6, 2024 7:59 AM", "inputProps": { "style": { "fontSize": 12 diff --git a/Gateways/FE/projects/.resources/5688dce28bec847791088e5896c3ed45ee4aad4f12d6824c8591f979de0f63be b/Gateways/FE/projects/.resources/af1afa3a3097febfde44263de5bfbb9191e0c921497e73f1197c10074b8fe3ab similarity index 94% rename from Gateways/FE/projects/.resources/5688dce28bec847791088e5896c3ed45ee4aad4f12d6824c8591f979de0f63be rename to Gateways/FE/projects/.resources/af1afa3a3097febfde44263de5bfbb9191e0c921497e73f1197c10074b8fe3ab index abd902b..2e6220c 100644 --- a/Gateways/FE/projects/.resources/5688dce28bec847791088e5896c3ed45ee4aad4f12d6824c8591f979de0f63be +++ b/Gateways/FE/projects/.resources/af1afa3a3097febfde44263de5bfbb9191e0c921497e73f1197c10074b8fe3ab @@ -1,6 +1,6 @@ { "custom": { - "UDTSelected": 2, + "UDTSelected": 1, "tabsConfig": { "tabs": [ "Status", @@ -149,7 +149,7 @@ "props.path": { "binding": { "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info \u0027,{view.custom.UDTSelected})" + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" }, "type": "expr" } @@ -196,20 +196,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,7 +244,7 @@ "props.path": { "binding": { "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config \u0027, {view.custom.UDTSelected})" + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" }, "type": "expr" } @@ -298,16 +291,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/.resources/b08ec10ffc8b00d2e3d692ad6c12faa2e1eadf99382a01cfba2c4c7392ac463b b/Gateways/FE/projects/.resources/b08ec10ffc8b00d2e3d692ad6c12faa2e1eadf99382a01cfba2c4c7392ac463b deleted file mode 100644 index 170bf42..0000000 Binary files a/Gateways/FE/projects/.resources/b08ec10ffc8b00d2e3d692ad6c12faa2e1eadf99382a01cfba2c4c7392ac463b and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b12dbb7bc08e4f44c9bfaeeb40360cb7f86ef9b6e96b808df37c48bd05e46c43 b/Gateways/FE/projects/.resources/b12dbb7bc08e4f44c9bfaeeb40360cb7f86ef9b6e96b808df37c48bd05e46c43 deleted file mode 100644 index 5c135e4..0000000 Binary files a/Gateways/FE/projects/.resources/b12dbb7bc08e4f44c9bfaeeb40360cb7f86ef9b6e96b808df37c48bd05e46c43 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b14ab91cc0e2b01de68dc2e65641c36b445d1777effe3eb2d0f217084ea288d3 b/Gateways/FE/projects/.resources/b14ab91cc0e2b01de68dc2e65641c36b445d1777effe3eb2d0f217084ea288d3 deleted file mode 100644 index c4c1601..0000000 Binary files a/Gateways/FE/projects/.resources/b14ab91cc0e2b01de68dc2e65641c36b445d1777effe3eb2d0f217084ea288d3 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b1fa235660347e89be239a4e0b0358d351bcd9446a5cb77d5b8fcd6b7b90f8d8 b/Gateways/FE/projects/.resources/b1fa235660347e89be239a4e0b0358d351bcd9446a5cb77d5b8fcd6b7b90f8d8 deleted file mode 100644 index e06d7a9..0000000 --- a/Gateways/FE/projects/.resources/b1fa235660347e89be239a4e0b0358d351bcd9446a5cb77d5b8fcd6b7b90f8d8 +++ /dev/null @@ -1,451 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [ - "Amps A", - "Amps B" - ], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Generator 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\t" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "measureOfTime": "minutes", - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "historical", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730879452730 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730733759000 - }, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/b201ccea0466317d73dc16cf994483093254b5ce6e27babda5fe9b0f69e33a7f b/Gateways/FE/projects/.resources/b201ccea0466317d73dc16cf994483093254b5ce6e27babda5fe9b0f69e33a7f deleted file mode 100644 index a11ab02..0000000 --- a/Gateways/FE/projects/.resources/b201ccea0466317d73dc16cf994483093254b5ce6e27babda5fe9b0f69e33a7f +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/7bed79e0098353499a2b124119506c465d8cc66c0e13a1ca4141316066ae9ecb b/Gateways/FE/projects/.resources/b26f87c5fc0a3698b7112adda61b82a0fef2912528863680c9cbda339c01f4f4 similarity index 62% rename from Gateways/FE/projects/.resources/7bed79e0098353499a2b124119506c465d8cc66c0e13a1ca4141316066ae9ecb rename to Gateways/FE/projects/.resources/b26f87c5fc0a3698b7112adda61b82a0fef2912528863680c9cbda339c01f4f4 index 9b7d40e..d727045 100644 --- a/Gateways/FE/projects/.resources/7bed79e0098353499a2b124119506c465d8cc66c0e13a1ca4141316066ae9ecb +++ b/Gateways/FE/projects/.resources/b26f87c5fc0a3698b7112adda61b82a0fef2912528863680c9cbda339c01f4f4 @@ -4,7 +4,7 @@ "props": { "defaultSize": { "height": 179, - "width": 999 + "width": 1376 } }, "root": { @@ -92,7 +92,8 @@ "name": "FlexContainer" }, "position": { - "basis": "123px" + "basis": "120px", + "shrink": 0 }, "props": { "direction": "column", @@ -112,7 +113,7 @@ "name": "Supply Chart" }, "position": { - "basis": "415px" + "grow": 1 }, "propConfig": { "custom.raw": { @@ -1166,7 +1167,8 @@ "name": "FlexContainer_0" }, "position": { - "basis": "123px" + "basis": "136px", + "shrink": 0 }, "props": { "direction": "column", @@ -1602,7 +1604,8 @@ "name": "CHWP Calculation Container" }, "position": { - "basis": "297px" + "basis": "200px", + "shrink": 0 }, "props": { "style": { @@ -1612,6 +1615,1114 @@ } }, "type": "ia.container.flex" + }, + { + "meta": { + "name": "Table" + }, + "position": { + "basis": "320px", + "shrink": 0 + }, + "props": { + "columns": [ + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "ChillerName", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Chiller" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "priority", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Priority" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "status", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + } + ], + "data": [ + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 41" + }, + "index": 40, + "priority": 1, + "priority2": 1, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 26" + }, + "index": 25, + "priority": 2, + "priority2": 2, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 29" + }, + "index": 28, + "priority": 3, + "priority2": 3, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 08" + }, + "index": 7, + "priority": 4, + "priority2": 4, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 46" + }, + "index": 45, + "priority": 5, + "priority2": 5, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 44" + }, + "index": 43, + "priority": 6, + "priority2": 6, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 12" + }, + "index": 11, + "priority": 7, + "priority2": 7, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 11" + }, + "index": 10, + "priority": 8, + "priority2": 8, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 28" + }, + "index": 27, + "priority": 9, + "priority2": 9, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 40" + }, + "index": 39, + "priority": 10, + "priority2": 10, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 13" + }, + "index": 12, + "priority": 11, + "priority2": 11, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 36" + }, + "index": 35, + "priority": 12, + "priority2": 12, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 19" + }, + "index": 18, + "priority": 13, + "priority2": 13, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 24" + }, + "index": 23, + "priority": 14, + "priority2": 14, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 20" + }, + "index": 19, + "priority": 15, + "priority2": 15, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 17" + }, + "index": 16, + "priority": 16, + "priority2": 16, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 47" + }, + "index": 46, + "priority": 17, + "priority2": 17, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 38" + }, + "index": 37, + "priority": 18, + "priority2": 18, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 30" + }, + "index": 29, + "priority": 19, + "priority2": 19, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 07" + }, + "index": 6, + "priority": 20, + "priority2": 20, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 05" + }, + "index": 4, + "priority": 21, + "priority2": 21, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 27" + }, + "index": 26, + "priority": 22, + "priority2": 22, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 15" + }, + "index": 14, + "priority": 23, + "priority2": 23, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 34" + }, + "index": 33, + "priority": 24, + "priority2": 24, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 22" + }, + "index": 21, + "priority": 25, + "priority2": 25, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 14" + }, + "index": 13, + "priority": 26, + "priority2": 26, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 33" + }, + "index": 32, + "priority": 27, + "priority2": 27, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 45" + }, + "index": 44, + "priority": 28, + "priority2": 28, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 21" + }, + "index": 20, + "priority": 29, + "priority2": 29, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 16" + }, + "index": 15, + "priority": 30, + "priority2": 30, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 48" + }, + "index": 47, + "priority": 31, + "priority2": 31, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 43" + }, + "index": 42, + "priority": 32, + "priority2": 32, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 39" + }, + "index": 38, + "priority": 33, + "priority2": 33, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 23" + }, + "index": 22, + "priority": 34, + "priority2": 34, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 31" + }, + "index": 30, + "priority": 35, + "priority2": 35, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 02" + }, + "index": 1, + "priority": 36, + "priority2": 36, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 03" + }, + "index": 2, + "priority": 37, + "priority2": 37, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 04" + }, + "index": 3, + "priority": 38, + "priority2": 38, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 32" + }, + "index": 31, + "priority": 39, + "priority2": 39, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 09" + }, + "index": 8, + "priority": 40, + "priority2": 40, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 06" + }, + "index": 5, + "priority": 41, + "priority2": 41, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 25" + }, + "index": 24, + "priority": 42, + "priority2": 42, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 42" + }, + "index": 41, + "priority": 43, + "priority2": 43, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 01" + }, + "index": 0, + "priority": 44, + "priority2": 44, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 18" + }, + "index": 17, + "priority": 45, + "priority2": 45, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 10" + }, + "index": 9, + "priority": 46, + "priority2": 46, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 37" + }, + "index": 36, + "priority": 47, + "priority2": 47, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 35" + }, + "index": 34, + "priority": 0, + "priority2": 999, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + } + ] + }, + "type": "ia.display.table" } ], "meta": { diff --git a/Gateways/FE/projects/.resources/b2a2d0bf0158ec86d7295fef36d4d3df5bd93e7cd3ed5767159498f32b85aac7 b/Gateways/FE/projects/.resources/b2a2d0bf0158ec86d7295fef36d4d3df5bd93e7cd3ed5767159498f32b85aac7 deleted file mode 100644 index 683fe15..0000000 Binary files a/Gateways/FE/projects/.resources/b2a2d0bf0158ec86d7295fef36d4d3df5bd93e7cd3ed5767159498f32b85aac7 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b43d2c74ed65437028a7c568f94efe7b9845dc5af4d4226b9b3ac9646072adbe b/Gateways/FE/projects/.resources/b43d2c74ed65437028a7c568f94efe7b9845dc5af4d4226b9b3ac9646072adbe deleted file mode 100644 index fb196f3..0000000 Binary files a/Gateways/FE/projects/.resources/b43d2c74ed65437028a7c568f94efe7b9845dc5af4d4226b9b3ac9646072adbe and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b49041de48da18ce1e61008e3e2b529ba77f99c22be2804efd4e951cdf3cbc56 b/Gateways/FE/projects/.resources/b49041de48da18ce1e61008e3e2b529ba77f99c22be2804efd4e951cdf3cbc56 deleted file mode 100644 index e966743..0000000 --- a/Gateways/FE/projects/.resources/b49041de48da18ce1e61008e3e2b529ba77f99c22be2804efd4e951cdf3cbc56 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/DOAS1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947830409 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947830409 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/0cd0de00de91f387f9e84f77e83b68aa7219b82feea15da2dee7d9146ef97e1c b/Gateways/FE/projects/.resources/b4ca20ae45e6dfb46ac693e4fe72fb3620850e5d6da5dd4a86157de4782aff83 similarity index 99% rename from Gateways/FE/projects/.resources/0cd0de00de91f387f9e84f77e83b68aa7219b82feea15da2dee7d9146ef97e1c rename to Gateways/FE/projects/.resources/b4ca20ae45e6dfb46ac693e4fe72fb3620850e5d6da5dd4a86157de4782aff83 index 8d98db1..9512b06 100644 --- a/Gateways/FE/projects/.resources/0cd0de00de91f387f9e84f77e83b68aa7219b82feea15da2dee7d9146ef97e1c +++ b/Gateways/FE/projects/.resources/b4ca20ae45e6dfb46ac693e4fe72fb3620850e5d6da5dd4a86157de4782aff83 @@ -41,7 +41,7 @@ }, "/CHW_System/:pageId": { "title": "", - "viewPath": "Pages/Mechanical/CHW_System" + "viewPath": "Pages/Mechanical/CHW_System_Layout" }, "/DH101/:pageId": { "title": "", diff --git a/Gateways/FE/projects/.resources/b5611381b975d81732589792c239c2d9494f405be8b39d4aae46c469ef8b03d1 b/Gateways/FE/projects/.resources/b5611381b975d81732589792c239c2d9494f405be8b39d4aae46c469ef8b03d1 deleted file mode 100644 index dc3f948..0000000 Binary files a/Gateways/FE/projects/.resources/b5611381b975d81732589792c239c2d9494f405be8b39d4aae46c469ef8b03d1 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b6850b928a2eaac0a9f181dc1c2b79a4244d42c7015ed7aa8bce63e366eca054 b/Gateways/FE/projects/.resources/b6850b928a2eaac0a9f181dc1c2b79a4244d42c7015ed7aa8bce63e366eca054 deleted file mode 100644 index bd4fc76..0000000 Binary files a/Gateways/FE/projects/.resources/b6850b928a2eaac0a9f181dc1c2b79a4244d42c7015ed7aa8bce63e366eca054 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b69bd62e06f7abf2d7c97faba4a5c152ce902710ac43933ec08b57de5636541c b/Gateways/FE/projects/.resources/b69bd62e06f7abf2d7c97faba4a5c152ce902710ac43933ec08b57de5636541c new file mode 100644 index 0000000..49e84ad Binary files /dev/null and b/Gateways/FE/projects/.resources/b69bd62e06f7abf2d7c97faba4a5c152ce902710ac43933ec08b57de5636541c differ diff --git a/Gateways/FE/projects/.resources/80f5053b72b813fe17bf53177ae852a4af9d0a5672d857b900ee770516c0d95e b/Gateways/FE/projects/.resources/b6dfe9fd6b99512d69390d7bb2846031c100ea76cd8142c02d9b2bf8eebce8b8 similarity index 95% rename from Gateways/FE/projects/.resources/80f5053b72b813fe17bf53177ae852a4af9d0a5672d857b900ee770516c0d95e rename to Gateways/FE/projects/.resources/b6dfe9fd6b99512d69390d7bb2846031c100ea76cd8142c02d9b2bf8eebce8b8 index 119f5cb..bdc034f 100644 --- a/Gateways/FE/projects/.resources/80f5053b72b813fe17bf53177ae852a4af9d0a5672d857b900ee770516c0d95e +++ b/Gateways/FE/projects/.resources/b6dfe9fd6b99512d69390d7bb2846031c100ea76cd8142c02d9b2bf8eebce8b8 @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "Breaker", - "tagPath": "[Ignition_Common_IO_Gtwy]ER1151/SATB1_MPR1151_HS1_FE1" + "objectName": "ATS", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/ATS" }, "propConfig": { "custom.tabsConfig": { @@ -113,13 +113,20 @@ }, "type": "property" } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } } }, "props": { "loading": { "order": "with-parent" - }, - "path": "Library/Templates/Breaker X/Info" + } }, "type": "ia.display.view" }, @@ -157,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +251,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +369,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/a84ab8dde058ac96ad568554b64d5bf81749f5b6423767e83acbf7044054dbc6 b/Gateways/FE/projects/.resources/b73299e60e35d023d805b0b6a5687b630d4a94a0604dd0c06c8f5feb54ea4207 similarity index 95% rename from Gateways/FE/projects/.resources/a84ab8dde058ac96ad568554b64d5bf81749f5b6423767e83acbf7044054dbc6 rename to Gateways/FE/projects/.resources/b73299e60e35d023d805b0b6a5687b630d4a94a0604dd0c06c8f5feb54ea4207 index 9bd08c1..f4849f1 100644 --- a/Gateways/FE/projects/.resources/a84ab8dde058ac96ad568554b64d5bf81749f5b6423767e83acbf7044054dbc6 +++ b/Gateways/FE/projects/.resources/b73299e60e35d023d805b0b6a5687b630d4a94a0604dd0c06c8f5feb54ea4207 @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,7 +389,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/b7458a5de673710cab900c7638031f159f254a12ce470e626a7af19cf047bed8 b/Gateways/FE/projects/.resources/b7458a5de673710cab900c7638031f159f254a12ce470e626a7af19cf047bed8 deleted file mode 100644 index 0a8a695..0000000 Binary files a/Gateways/FE/projects/.resources/b7458a5de673710cab900c7638031f159f254a12ce470e626a7af19cf047bed8 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/b92c11369fc042e0a62639511dce7e3aa53fac91066cf170f7490871fbbf2978 b/Gateways/FE/projects/.resources/b92c11369fc042e0a62639511dce7e3aa53fac91066cf170f7490871fbbf2978 new file mode 100644 index 0000000..d86abf7 Binary files /dev/null and b/Gateways/FE/projects/.resources/b92c11369fc042e0a62639511dce7e3aa53fac91066cf170f7490871fbbf2978 differ diff --git a/Gateways/FE/projects/.resources/b9cfb5d6fd29f4f2e215689d07993215194261bef2dc461d1c34675009195ffe b/Gateways/FE/projects/.resources/b9cfb5d6fd29f4f2e215689d07993215194261bef2dc461d1c34675009195ffe deleted file mode 100644 index 61727a4..0000000 Binary files a/Gateways/FE/projects/.resources/b9cfb5d6fd29f4f2e215689d07993215194261bef2dc461d1c34675009195ffe and /dev/null differ diff --git a/Gateways/FE/projects/.resources/bb39ba41fdd58803866aa72aee59606e31f5bc47b221aeda484fd8a33bb48cd2 b/Gateways/FE/projects/.resources/bb39ba41fdd58803866aa72aee59606e31f5bc47b221aeda484fd8a33bb48cd2 deleted file mode 100644 index 16903a5..0000000 Binary files a/Gateways/FE/projects/.resources/bb39ba41fdd58803866aa72aee59606e31f5bc47b221aeda484fd8a33bb48cd2 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/bd763caafab02c8a42857b8c86189385776b392cd008cf46b946b4ebf946e6fb b/Gateways/FE/projects/.resources/bd763caafab02c8a42857b8c86189385776b392cd008cf46b946b4ebf946e6fb deleted file mode 100644 index d0c608a..0000000 --- a/Gateways/FE/projects/.resources/bd763caafab02c8a42857b8c86189385776b392cd008cf46b946b4ebf946e6fb +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_TT02" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"HH:mm\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/bd88bf5c697067aa1756e831cfbaeaae6a694a9b31f54960bdc7961f3e4def76 b/Gateways/FE/projects/.resources/bd88bf5c697067aa1756e831cfbaeaae6a694a9b31f54960bdc7961f3e4def76 new file mode 100644 index 0000000..399fb2a Binary files /dev/null and b/Gateways/FE/projects/.resources/bd88bf5c697067aa1756e831cfbaeaae6a694a9b31f54960bdc7961f3e4def76 differ diff --git a/Gateways/FE/projects/.resources/bf1e00a4383ff764290c0478fa5bebf3727d023b3ff09acbaa0af0166d7fc1d9 b/Gateways/FE/projects/.resources/bf1e00a4383ff764290c0478fa5bebf3727d023b3ff09acbaa0af0166d7fc1d9 deleted file mode 100644 index bf55ec5..0000000 Binary files a/Gateways/FE/projects/.resources/bf1e00a4383ff764290c0478fa5bebf3727d023b3ff09acbaa0af0166d7fc1d9 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/bf26949afbe7353851795d364bcc9374f872762412d753bcd90de144a7820d82 b/Gateways/FE/projects/.resources/bf26949afbe7353851795d364bcc9374f872762412d753bcd90de144a7820d82 new file mode 100644 index 0000000..53f1445 Binary files /dev/null and b/Gateways/FE/projects/.resources/bf26949afbe7353851795d364bcc9374f872762412d753bcd90de144a7820d82 differ diff --git a/Gateways/FE/projects/.resources/bf4bc0b7a212e0126238744981d4412254f3808cbe8c3974b7c71aeea0d0b41d b/Gateways/FE/projects/.resources/bf4bc0b7a212e0126238744981d4412254f3808cbe8c3974b7c71aeea0d0b41d deleted file mode 100644 index 5b76d0d..0000000 Binary files a/Gateways/FE/projects/.resources/bf4bc0b7a212e0126238744981d4412254f3808cbe8c3974b7c71aeea0d0b41d and /dev/null differ diff --git a/Gateways/FE/projects/.resources/bfef8786586dd91d2ac9cf163a780e073116f280a1a6e7f83e6f27486ca5c134 b/Gateways/FE/projects/.resources/bfef8786586dd91d2ac9cf163a780e073116f280a1a6e7f83e6f27486ca5c134 deleted file mode 100644 index c7bc565..0000000 Binary files a/Gateways/FE/projects/.resources/bfef8786586dd91d2ac9cf163a780e073116f280a1a6e7f83e6f27486ca5c134 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/c02671823eb02497ce252c5a0436cab03be6d4e6f6fea81932e16ea4453d89f1 b/Gateways/FE/projects/.resources/c02671823eb02497ce252c5a0436cab03be6d4e6f6fea81932e16ea4453d89f1 new file mode 100644 index 0000000..4500b54 Binary files /dev/null and b/Gateways/FE/projects/.resources/c02671823eb02497ce252c5a0436cab03be6d4e6f6fea81932e16ea4453d89f1 differ diff --git a/Gateways/FE/projects/.resources/c0ac1622a576781c4e7cc7a96f0ed836a98b18495e0e51864334fb2bc17596b9 b/Gateways/FE/projects/.resources/c0ac1622a576781c4e7cc7a96f0ed836a98b18495e0e51864334fb2bc17596b9 new file mode 100644 index 0000000..0d0407e Binary files /dev/null and b/Gateways/FE/projects/.resources/c0ac1622a576781c4e7cc7a96f0ed836a98b18495e0e51864334fb2bc17596b9 differ diff --git a/Gateways/FE/projects/.resources/0cb78bf14e74544f940cab6b5623d9869c2defa2817b98080db2bcf9142744b3 b/Gateways/FE/projects/.resources/c2b577ea384a5e4fbceac61fde50704a9c0c065b6075670aa486d05e50805ba6 similarity index 98% rename from Gateways/FE/projects/.resources/0cb78bf14e74544f940cab6b5623d9869c2defa2817b98080db2bcf9142744b3 rename to Gateways/FE/projects/.resources/c2b577ea384a5e4fbceac61fde50704a9c0c065b6075670aa486d05e50805ba6 index 0618743..412c319 100644 --- a/Gateways/FE/projects/.resources/0cb78bf14e74544f940cab6b5623d9869c2defa2817b98080db2bcf9142744b3 +++ b/Gateways/FE/projects/.resources/c2b577ea384a5e4fbceac61fde50704a9c0c065b6075670aa486d05e50805ba6 @@ -3,7 +3,7 @@ "params": { "inputs": { "height": "100%", - "targetDetailedURL": "", + "targetDetailedURL": "/D101", "targetURL": "/Oneline-HS1", "width": "100%" } diff --git a/Gateways/FE/projects/.resources/275d8b886aa08aa555e87446c66e0864536bd1822361fa6ced280ddf9e180775 b/Gateways/FE/projects/.resources/c319954b2856d650b7ea732675e660d098d50e8b7efea80f140bc4f44e4b617f similarity index 95% rename from Gateways/FE/projects/.resources/275d8b886aa08aa555e87446c66e0864536bd1822361fa6ced280ddf9e180775 rename to Gateways/FE/projects/.resources/c319954b2856d650b7ea732675e660d098d50e8b7efea80f140bc4f44e4b617f index c974885..412c7ec 100644 --- a/Gateways/FE/projects/.resources/275d8b886aa08aa555e87446c66e0864536bd1822361fa6ced280ddf9e180775 +++ b/Gateways/FE/projects/.resources/c319954b2856d650b7ea732675e660d098d50e8b7efea80f140bc4f44e4b617f @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 3 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/c396f72b464ab825cfa55ab1db8ec0527b4a785ce765ae89b0eeb8dafdc12a13 b/Gateways/FE/projects/.resources/c396f72b464ab825cfa55ab1db8ec0527b4a785ce765ae89b0eeb8dafdc12a13 deleted file mode 100644 index 6c0aa97..0000000 Binary files a/Gateways/FE/projects/.resources/c396f72b464ab825cfa55ab1db8ec0527b4a785ce765ae89b0eeb8dafdc12a13 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/c39d9e41a463ee72697ca534c72f8d3eb7ad03ef62965651e703f603653d67a4 b/Gateways/FE/projects/.resources/c39d9e41a463ee72697ca534c72f8d3eb7ad03ef62965651e703f603653d67a4 new file mode 100644 index 0000000..dd61cb4 Binary files /dev/null and b/Gateways/FE/projects/.resources/c39d9e41a463ee72697ca534c72f8d3eb7ad03ef62965651e703f603653d67a4 differ diff --git a/Gateways/FE/projects/.resources/d394de445b3a8e3971f72ba8d90228c3ad3ac43cba80932a0e09399a372a0500 b/Gateways/FE/projects/.resources/c4a60be780dc49aa5722786dfccd7e5427e380700704b8a95bb305609bbf5a12 similarity index 95% rename from Gateways/FE/projects/.resources/d394de445b3a8e3971f72ba8d90228c3ad3ac43cba80932a0e09399a372a0500 rename to Gateways/FE/projects/.resources/c4a60be780dc49aa5722786dfccd7e5427e380700704b8a95bb305609bbf5a12 index cdef63f..363a33f 100644 --- a/Gateways/FE/projects/.resources/d394de445b3a8e3971f72ba8d90228c3ad3ac43cba80932a0e09399a372a0500 +++ b/Gateways/FE/projects/.resources/c4a60be780dc49aa5722786dfccd7e5427e380700704b8a95bb305609bbf5a12 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 4 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/c4b5285b94970034ac88fc66c2a6d760e4c21ecc09f6c2185acadfe47b31c996 b/Gateways/FE/projects/.resources/c4b5285b94970034ac88fc66c2a6d760e4c21ecc09f6c2185acadfe47b31c996 deleted file mode 100644 index 8672361..0000000 Binary files a/Gateways/FE/projects/.resources/c4b5285b94970034ac88fc66c2a6d760e4c21ecc09f6c2185acadfe47b31c996 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/c4d3277411332f13bf329d95122924300a7edc0b8408c0297eacdb41463c2089 b/Gateways/FE/projects/.resources/c4d3277411332f13bf329d95122924300a7edc0b8408c0297eacdb41463c2089 deleted file mode 100644 index 38d1913..0000000 Binary files a/Gateways/FE/projects/.resources/c4d3277411332f13bf329d95122924300a7edc0b8408c0297eacdb41463c2089 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/c4f73008d3b13f4cfce6e071896dc255d9096e437e795e8f4960ee59a4d47e5d b/Gateways/FE/projects/.resources/c4f73008d3b13f4cfce6e071896dc255d9096e437e795e8f4960ee59a4d47e5d deleted file mode 100644 index 817e4d0..0000000 Binary files a/Gateways/FE/projects/.resources/c4f73008d3b13f4cfce6e071896dc255d9096e437e795e8f4960ee59a4d47e5d and /dev/null differ diff --git a/Gateways/FE/projects/.resources/c581db81bb742606cdbc92bc67abc949328e6214fc1f720bc2660ded02480208 b/Gateways/FE/projects/.resources/c581db81bb742606cdbc92bc67abc949328e6214fc1f720bc2660ded02480208 new file mode 100644 index 0000000..58bfa35 Binary files /dev/null and b/Gateways/FE/projects/.resources/c581db81bb742606cdbc92bc67abc949328e6214fc1f720bc2660ded02480208 differ diff --git a/Gateways/FE/projects/.resources/c6245f1aef9c58ed099dc310acff86505101f919bec7edf140e04c4dadd266aa b/Gateways/FE/projects/.resources/c6245f1aef9c58ed099dc310acff86505101f919bec7edf140e04c4dadd266aa new file mode 100644 index 0000000..b75e792 Binary files /dev/null and b/Gateways/FE/projects/.resources/c6245f1aef9c58ed099dc310acff86505101f919bec7edf140e04c4dadd266aa differ diff --git a/Gateways/FE/projects/.resources/c635ea4269294893511638d674dea42840a07f1b06cffaf84df6b2c0944ed630 b/Gateways/FE/projects/.resources/c635ea4269294893511638d674dea42840a07f1b06cffaf84df6b2c0944ed630 new file mode 100644 index 0000000..147416a Binary files /dev/null and b/Gateways/FE/projects/.resources/c635ea4269294893511638d674dea42840a07f1b06cffaf84df6b2c0944ed630 differ diff --git a/Gateways/FE/projects/.resources/c7a8a9786547a22a018ebb8b8a8dd4d0be2788d375e4424db2d20074476639f2 b/Gateways/FE/projects/.resources/c7a8a9786547a22a018ebb8b8a8dd4d0be2788d375e4424db2d20074476639f2 deleted file mode 100644 index 5bf44e2..0000000 --- a/Gateways/FE/projects/.resources/c7a8a9786547a22a018ebb8b8a8dd4d0be2788d375e4424db2d20074476639f2 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]DH1/SATB1_DH1_PNL24_H1_TT01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947393186 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947393186 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/c81177302639f19c722f1b268efe4e16a048d9b82eaee91e2b3ed34cb97e8bc5 b/Gateways/FE/projects/.resources/c81177302639f19c722f1b268efe4e16a048d9b82eaee91e2b3ed34cb97e8bc5 deleted file mode 100644 index 48e2ada..0000000 Binary files a/Gateways/FE/projects/.resources/c81177302639f19c722f1b268efe4e16a048d9b82eaee91e2b3ed34cb97e8bc5 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/a4522383cc5e470c7df32b73ca915b65bcc2c4106bc115ac282b9e8acbfae79a b/Gateways/FE/projects/.resources/c85c09183fcf8c2925f0f97bb0309301cfe5aa5c683015a7e9cbe6e80aad2dea similarity index 94% rename from Gateways/FE/projects/.resources/a4522383cc5e470c7df32b73ca915b65bcc2c4106bc115ac282b9e8acbfae79a rename to Gateways/FE/projects/.resources/c85c09183fcf8c2925f0f97bb0309301cfe5aa5c683015a7e9cbe6e80aad2dea index a72b531..b9c90f2 100644 --- a/Gateways/FE/projects/.resources/a4522383cc5e470c7df32b73ca915b65bcc2c4106bc115ac282b9e8acbfae79a +++ b/Gateways/FE/projects/.resources/c85c09183fcf8c2925f0f97bb0309301cfe5aa5c683015a7e9cbe6e80aad2dea @@ -1,8 +1,8 @@ { "custom": { "tabsConfig": { - "showConfig": true, - "showControl": true, + "showConfig": false, + "showControl": false, "tabs": [ "Status", "Control", @@ -170,20 +170,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -272,16 +265,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -404,7 +392,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 3 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/c8c62dd6deee121308ac20985a1cd7efaada237163ee74eeaca603104c1f8f12 b/Gateways/FE/projects/.resources/c8c62dd6deee121308ac20985a1cd7efaada237163ee74eeaca603104c1f8f12 deleted file mode 100644 index 8d51a26..0000000 --- a/Gateways/FE/projects/.resources/c8c62dd6deee121308ac20985a1cd7efaada237163ee74eeaca603104c1f8f12 +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948381171 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948381171 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/58ddc69e61de125aa55230302a4ec6461a36e29ee6449cc2ce975168edd9b8f8 b/Gateways/FE/projects/.resources/c8c88acea8ae52bbc7a8e814e560fa4c8c4ee1593294ba7537ecbe1a586ad213 similarity index 95% rename from Gateways/FE/projects/.resources/58ddc69e61de125aa55230302a4ec6461a36e29ee6449cc2ce975168edd9b8f8 rename to Gateways/FE/projects/.resources/c8c88acea8ae52bbc7a8e814e560fa4c8c4ee1593294ba7537ecbe1a586ad213 index 0c7967e..2fe333e 100644 --- a/Gateways/FE/projects/.resources/58ddc69e61de125aa55230302a4ec6461a36e29ee6449cc2ce975168edd9b8f8 +++ b/Gateways/FE/projects/.resources/c8c88acea8ae52bbc7a8e814e560fa4c8c4ee1593294ba7537ecbe1a586ad213 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/c9ff62c1d3f574728bec3362df74ec335e9914753002c260f1acd1bad6fa5af9 b/Gateways/FE/projects/.resources/c9ff62c1d3f574728bec3362df74ec335e9914753002c260f1acd1bad6fa5af9 new file mode 100644 index 0000000..39bf46c Binary files /dev/null and b/Gateways/FE/projects/.resources/c9ff62c1d3f574728bec3362df74ec335e9914753002c260f1acd1bad6fa5af9 differ diff --git a/Gateways/FE/projects/.resources/cab5aff96eec029797dd3f0e0e23ad007138a84037b461fb386d9f633dfd6dd8 b/Gateways/FE/projects/.resources/cab5aff96eec029797dd3f0e0e23ad007138a84037b461fb386d9f633dfd6dd8 new file mode 100644 index 0000000..f43c714 --- /dev/null +++ b/Gateways/FE/projects/.resources/cab5aff96eec029797dd3f0e0e23ad007138a84037b461fb386d9f633dfd6dd8 @@ -0,0 +1,9 @@ +{ + "base": { + "style": { + "color": "var(--text-on-light)", + "fontFamily": "Noto Sans", + "fontSize": "16px" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/7fb6579bd10cdd0fa190e5d78433dcc8f51583a28e60a0980f54b795a7381949 b/Gateways/FE/projects/.resources/cdca7b583d2503c5ae6c28f4652523f047a39cf9c8a14967d4ff882dc54152cb similarity index 97% rename from Gateways/FE/projects/.resources/7fb6579bd10cdd0fa190e5d78433dcc8f51583a28e60a0980f54b795a7381949 rename to Gateways/FE/projects/.resources/cdca7b583d2503c5ae6c28f4652523f047a39cf9c8a14967d4ff882dc54152cb index f4498cf..1673fc1 100644 --- a/Gateways/FE/projects/.resources/7fb6579bd10cdd0fa190e5d78433dcc8f51583a28e60a0980f54b795a7381949 +++ b/Gateways/FE/projects/.resources/cdca7b583d2503c5ae6c28f4652523f047a39cf9c8a14967d4ff882dc54152cb @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -315,7 +308,7 @@ } }, "props": { - "path": "Library/Framework/Tag Notes/View Notes" + "path": "Library/Templates/Meta" }, "type": "ia.display.view" }, @@ -397,7 +390,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/ce84f41cef42e0f9e3c1b6e509751cc87fd839891dd9b5da3752df421ee9d7db b/Gateways/FE/projects/.resources/ce84f41cef42e0f9e3c1b6e509751cc87fd839891dd9b5da3752df421ee9d7db deleted file mode 100644 index 5e06cd9..0000000 Binary files a/Gateways/FE/projects/.resources/ce84f41cef42e0f9e3c1b6e509751cc87fd839891dd9b5da3752df421ee9d7db and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d06cfc188092512a2f680657fa03152b69fb66edfd86edd1f5f3c36b1f878d68 b/Gateways/FE/projects/.resources/d06cfc188092512a2f680657fa03152b69fb66edfd86edd1f5f3c36b1f878d68 deleted file mode 100644 index 4ba3cba..0000000 Binary files a/Gateways/FE/projects/.resources/d06cfc188092512a2f680657fa03152b69fb66edfd86edd1f5f3c36b1f878d68 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d26e65f858ca136306802dfbc45beb87aadfb1cdc720e217cd6a9ccfa6cffddc b/Gateways/FE/projects/.resources/d26e65f858ca136306802dfbc45beb87aadfb1cdc720e217cd6a9ccfa6cffddc deleted file mode 100644 index b9cf66d..0000000 Binary files a/Gateways/FE/projects/.resources/d26e65f858ca136306802dfbc45beb87aadfb1cdc720e217cd6a9ccfa6cffddc and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d2a8e28550d652c582cec063265649018faa130b012d4f5967aa99e66deed8dc b/Gateways/FE/projects/.resources/d2a8e28550d652c582cec063265649018faa130b012d4f5967aa99e66deed8dc new file mode 100644 index 0000000..89683e7 --- /dev/null +++ b/Gateways/FE/projects/.resources/d2a8e28550d652c582cec063265649018faa130b012d4f5967aa99e66deed8dc @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "LV Feeder", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV Feeder 1" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/d2b13d7a711ca3afd2fb4cd4d886ca9b221102f671d8c5bc064b65dab27c9865 b/Gateways/FE/projects/.resources/d2b13d7a711ca3afd2fb4cd4d886ca9b221102f671d8c5bc064b65dab27c9865 deleted file mode 100644 index 846076c..0000000 Binary files a/Gateways/FE/projects/.resources/d2b13d7a711ca3afd2fb4cd4d886ca9b221102f671d8c5bc064b65dab27c9865 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d2c1cc0c2a425d3dcfab296971b29c67d7eeb9a025ba8fde5294dfd7693ac860 b/Gateways/FE/projects/.resources/d2c1cc0c2a425d3dcfab296971b29c67d7eeb9a025ba8fde5294dfd7693ac860 deleted file mode 100644 index 0b23bee..0000000 Binary files a/Gateways/FE/projects/.resources/d2c1cc0c2a425d3dcfab296971b29c67d7eeb9a025ba8fde5294dfd7693ac860 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/058d7a632336eedcd37a72ba5dc42dc04e48c84902f35c2aa6f09e4e0b13700a b/Gateways/FE/projects/.resources/d317b8c0cfbccfd987dad59bf9777e61c397cc6fd513c0f7297ea2da5cef021d similarity index 98% rename from Gateways/FE/projects/.resources/058d7a632336eedcd37a72ba5dc42dc04e48c84902f35c2aa6f09e4e0b13700a rename to Gateways/FE/projects/.resources/d317b8c0cfbccfd987dad59bf9777e61c397cc6fd513c0f7297ea2da5cef021d index feb70a1..e9917c4 100644 --- a/Gateways/FE/projects/.resources/058d7a632336eedcd37a72ba5dc42dc04e48c84902f35c2aa6f09e4e0b13700a +++ b/Gateways/FE/projects/.resources/d317b8c0cfbccfd987dad59bf9777e61c397cc6fd513c0f7297ea2da5cef021d @@ -176,7 +176,7 @@ } }, "props": { - "path": "Library/CommonObjects/PLC Healt", + "path": "Library/Widgets/PLC Healt", "style": { "padding": "10px" }, @@ -612,18 +612,6 @@ } }, "type": "ia.container.flex" - }, - { - "meta": { - "name": "Audio" - }, - "position": { - "basis": "300px" - }, - "props": { - "source": "/system/webdev/SDC_SAT_B1/alert.mp3" - }, - "type": "ia.display.audio" } ], "custom": { diff --git a/Gateways/FE/projects/.resources/d3364ba99fff71153ee423c7610f1fd6c58180d6899618c3cc1bb2827cfcfe72 b/Gateways/FE/projects/.resources/d3364ba99fff71153ee423c7610f1fd6c58180d6899618c3cc1bb2827cfcfe72 new file mode 100644 index 0000000..4dd55e7 Binary files /dev/null and b/Gateways/FE/projects/.resources/d3364ba99fff71153ee423c7610f1fd6c58180d6899618c3cc1bb2827cfcfe72 differ diff --git a/Gateways/FE/projects/.resources/d7d552f747d2e5671a0e402dc47b759e73757f3e581b189523616f3dd4174890 b/Gateways/FE/projects/.resources/d7d552f747d2e5671a0e402dc47b759e73757f3e581b189523616f3dd4174890 deleted file mode 100644 index 4153bab..0000000 Binary files a/Gateways/FE/projects/.resources/d7d552f747d2e5671a0e402dc47b759e73757f3e581b189523616f3dd4174890 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d7d6eeae88a749653fe9dfc718d576f470f9ea95a30872a4037b854c9277d773 b/Gateways/FE/projects/.resources/d7d6eeae88a749653fe9dfc718d576f470f9ea95a30872a4037b854c9277d773 deleted file mode 100644 index 0f10263..0000000 Binary files a/Gateways/FE/projects/.resources/d7d6eeae88a749653fe9dfc718d576f470f9ea95a30872a4037b854c9277d773 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d89353f11612f98ef945dee3ca9f24399c965395ede8526823d6fce35fe4a72f b/Gateways/FE/projects/.resources/d89353f11612f98ef945dee3ca9f24399c965395ede8526823d6fce35fe4a72f new file mode 100644 index 0000000..8ab3f96 --- /dev/null +++ b/Gateways/FE/projects/.resources/d89353f11612f98ef945dee3ca9f24399c965395ede8526823d6fce35fe4a72f @@ -0,0 +1,104 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "children": [ + { + "meta": { + "name": "iFrame" + }, + "position": { + "height": 744, + "width": 1396 + }, + "props": { + "src": "http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/CHW_System\u0026targetDetailedURL\u003d/CHW_System\u0026height\u003d160%25\u0026width\u003d160%25" + }, + "type": "ia.display.iframe" + } + ], + "meta": { + "name": "Layout" + }, + "position": { + "grow": 1, + "shrink": 0 + }, + "props": { + "style": { + "overflow": "hidden" + } + }, + "type": "ia.container.coord" + }, + { + "meta": { + "name": "Values" + }, + "position": { + "basis": "100px", + "shrink": 0 + }, + "props": { + "path": "Library/Cards/Card_Process_Indicators", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "Indicators" + }, + "position": { + "grow": 1 + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-md)", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Control" + }, + "position": { + "basis": "300px", + "shrink": 0 + }, + "props": { + "path": "Library/Cards/Card_Process_Control", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/d89aedd96f291851d2e993794f938dd56913a4773017f5336443b1be41d9aef2 b/Gateways/FE/projects/.resources/d89aedd96f291851d2e993794f938dd56913a4773017f5336443b1be41d9aef2 deleted file mode 100644 index eea27cf..0000000 Binary files a/Gateways/FE/projects/.resources/d89aedd96f291851d2e993794f938dd56913a4773017f5336443b1be41d9aef2 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d934cae2029c0909fa0511a4343f1584effc52291c08489e1470c33beafe7469 b/Gateways/FE/projects/.resources/d934cae2029c0909fa0511a4343f1584effc52291c08489e1470c33beafe7469 deleted file mode 100644 index 0a74829..0000000 Binary files a/Gateways/FE/projects/.resources/d934cae2029c0909fa0511a4343f1584effc52291c08489e1470c33beafe7469 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/d9718e4a6ea7daa0d9d0455859ba095145c8dd91dba2432521b99ecdb22cb519 b/Gateways/FE/projects/.resources/d9718e4a6ea7daa0d9d0455859ba095145c8dd91dba2432521b99ecdb22cb519 new file mode 100644 index 0000000..7aec370 Binary files /dev/null and b/Gateways/FE/projects/.resources/d9718e4a6ea7daa0d9d0455859ba095145c8dd91dba2432521b99ecdb22cb519 differ diff --git a/Gateways/FE/projects/.resources/dd80514a23168dc5561d2c92ddb32d34bd1690aa46a6a3da0174fb83b38a661d b/Gateways/FE/projects/.resources/dd80514a23168dc5561d2c92ddb32d34bd1690aa46a6a3da0174fb83b38a661d deleted file mode 100644 index e584f93..0000000 Binary files a/Gateways/FE/projects/.resources/dd80514a23168dc5561d2c92ddb32d34bd1690aa46a6a3da0174fb83b38a661d and /dev/null differ diff --git a/Gateways/FE/projects/.resources/817dd6eeb18f55307b818a4d4144c89a1b2542b865ed488606ebcac587389b9d b/Gateways/FE/projects/.resources/dddca63f5ad7bc73778c7ca237490b09a92521fb0fa9cd7a107d89de4bbab29e similarity index 83% rename from Gateways/FE/projects/.resources/817dd6eeb18f55307b818a4d4144c89a1b2542b865ed488606ebcac587389b9d rename to Gateways/FE/projects/.resources/dddca63f5ad7bc73778c7ca237490b09a92521fb0fa9cd7a107d89de4bbab29e index d2dbddb..b7a7fce 100644 --- a/Gateways/FE/projects/.resources/817dd6eeb18f55307b818a4d4144c89a1b2542b865ed488606ebcac587389b9d +++ b/Gateways/FE/projects/.resources/dddca63f5ad7bc73778c7ca237490b09a92521fb0fa9cd7a107d89de4bbab29e @@ -29,7 +29,10 @@ "params": { "color": "green" }, - "path": "Testing/Border CSS" + "path": "Testing/Border CSS", + "style": { + "boxShadow": "inset 0 0 10px rgba(25, 255, 25, 0.8)" + } }, "type": "ia.display.view" }, @@ -73,7 +76,7 @@ "props": { "justify": "center", "style": { - "gap": "10px" + "gap": "80px" } }, "type": "ia.container.flex" @@ -129,6 +132,24 @@ } }, "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_1" + }, + "position": { + "basis": "85px" + }, + "props": { + "style": { + "boxShadow": "inset 0 0 10px rgba(25, 255, 25, 0.8)", + "outlineColor": "#2979FF", + "outlineStyle": "solid", + "outlineWidth": 2 + }, + "text": "Label" + }, + "type": "ia.display.label" } ], "meta": { diff --git a/Gateways/FE/projects/.resources/4330ee01fc35c116aa8784c3ae13876cd6f6eac179f7bf6a629eae64a2699efc b/Gateways/FE/projects/.resources/ded412f0577e0c5444596d39eac84254defa824a651a98cb1eee1ab688fd01f6 similarity index 94% rename from Gateways/FE/projects/.resources/4330ee01fc35c116aa8784c3ae13876cd6f6eac179f7bf6a629eae64a2699efc rename to Gateways/FE/projects/.resources/ded412f0577e0c5444596d39eac84254defa824a651a98cb1eee1ab688fd01f6 index 9796365..b4b4166 100644 --- a/Gateways/FE/projects/.resources/4330ee01fc35c116aa8784c3ae13876cd6f6eac179f7bf6a629eae64a2699efc +++ b/Gateways/FE/projects/.resources/ded412f0577e0c5444596d39eac84254defa824a651a98cb1eee1ab688fd01f6 @@ -1,8 +1,8 @@ { "custom": { "tabsConfig": { - "showConfig": true, - "showControl": true, + "showConfig": false, + "showControl": false, "tabs": [ "Status", "Control", @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -402,7 +390,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/def2050b5c2cda1f09311c71861504b11ae718adfa8afd37ff7fa94d8af64ceb b/Gateways/FE/projects/.resources/def2050b5c2cda1f09311c71861504b11ae718adfa8afd37ff7fa94d8af64ceb new file mode 100644 index 0000000..59cd20a Binary files /dev/null and b/Gateways/FE/projects/.resources/def2050b5c2cda1f09311c71861504b11ae718adfa8afd37ff7fa94d8af64ceb differ diff --git a/Gateways/FE/projects/.resources/df1b67999c008b31d04b3b1a72835b358c44ae4e3f537cf3deab0d76ce853aee b/Gateways/FE/projects/.resources/df1b67999c008b31d04b3b1a72835b358c44ae4e3f537cf3deab0d76ce853aee new file mode 100644 index 0000000..6ad568d Binary files /dev/null and b/Gateways/FE/projects/.resources/df1b67999c008b31d04b3b1a72835b358c44ae4e3f537cf3deab0d76ce853aee differ diff --git a/Gateways/FE/projects/.resources/df737d44760c7513602f5ba87706562c7271e3e2d0e2e13bb2a4605c684997d2 b/Gateways/FE/projects/.resources/df737d44760c7513602f5ba87706562c7271e3e2d0e2e13bb2a4605c684997d2 deleted file mode 100644 index 7b04d44..0000000 Binary files a/Gateways/FE/projects/.resources/df737d44760c7513602f5ba87706562c7271e3e2d0e2e13bb2a4605c684997d2 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/dfcb68475049de1d61ba1d99337d2a81c887952be9192c33245485d15109981e b/Gateways/FE/projects/.resources/dfcb68475049de1d61ba1d99337d2a81c887952be9192c33245485d15109981e new file mode 100644 index 0000000..662b97d Binary files /dev/null and b/Gateways/FE/projects/.resources/dfcb68475049de1d61ba1d99337d2a81c887952be9192c33245485d15109981e differ diff --git a/Gateways/FE/projects/.resources/e152ad69b296f035a36f7443197b78c55edea4282045af444976fd8be2b79eab b/Gateways/FE/projects/.resources/e152ad69b296f035a36f7443197b78c55edea4282045af444976fd8be2b79eab new file mode 100644 index 0000000..8a09c06 Binary files /dev/null and b/Gateways/FE/projects/.resources/e152ad69b296f035a36f7443197b78c55edea4282045af444976fd8be2b79eab differ diff --git a/Gateways/FE/projects/.resources/e208198304e4d7099798a964a341db3c4cd43080871642da1c68f83312dc77a1 b/Gateways/FE/projects/.resources/e208198304e4d7099798a964a341db3c4cd43080871642da1c68f83312dc77a1 deleted file mode 100644 index e2a548f..0000000 Binary files a/Gateways/FE/projects/.resources/e208198304e4d7099798a964a341db3c4cd43080871642da1c68f83312dc77a1 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/e28f08a6eb3f973fdba6f973394c5c727804b461408eb529f6254d7eb93d838b b/Gateways/FE/projects/.resources/e28f08a6eb3f973fdba6f973394c5c727804b461408eb529f6254d7eb93d838b new file mode 100644 index 0000000..cb8b1ba Binary files /dev/null and b/Gateways/FE/projects/.resources/e28f08a6eb3f973fdba6f973394c5c727804b461408eb529f6254d7eb93d838b differ diff --git a/Gateways/FE/projects/.resources/e3009c1fcc14946649ec7fe045fd6414d7be3a6e059ff8650aa1f3eefa6591cf b/Gateways/FE/projects/.resources/e3009c1fcc14946649ec7fe045fd6414d7be3a6e059ff8650aa1f3eefa6591cf new file mode 100644 index 0000000..23de893 --- /dev/null +++ b/Gateways/FE/projects/.resources/e3009c1fcc14946649ec7fe045fd6414d7be3a6e059ff8650aa1f3eefa6591cf @@ -0,0 +1,86 @@ +{ + "custom": {}, + "params": { + "GoTo": "DH201", + "Zoom": 100 + }, + "propConfig": { + "params.GoTo": { + "paramDirection": "input", + "persistent": true + }, + "params.Zoom": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "height": 984, + "width": 1396 + }, + "props": { + "src": "http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/DH201\u0026targetDetailedURL\u003d/Pages/Datahall/DH201\u0026height\u003d175%25\u0026width\u003d175%25", + "style": { + "flex": "1 1 auto", + "key": "value", + "key_1": "value", + "minHeigth": "100%", + "minLength": "100%" + } + }, + "type": "ia.display.iframe" + } + ], + "meta": { + "name": "CoordinateContainer" + }, + "position": { + "grow": 1 + }, + "type": "ia.container.coord" + }, + { + "meta": { + "name": "Details" + }, + "position": { + "basis": "280px", + "shrink": 0 + }, + "props": { + "mode": "fixed", + "path": "Library/Cards/Card_DH_Control", + "style": { + "classes": "containers/card", + "overflow": "hidden" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/e30c0419d7a7f7c0f621a48141f7917575ad0d5f90c696aeba64e9c5134783e3 b/Gateways/FE/projects/.resources/e30c0419d7a7f7c0f621a48141f7917575ad0d5f90c696aeba64e9c5134783e3 new file mode 100644 index 0000000..47fe002 Binary files /dev/null and b/Gateways/FE/projects/.resources/e30c0419d7a7f7c0f621a48141f7917575ad0d5f90c696aeba64e9c5134783e3 differ diff --git a/Gateways/FE/projects/.resources/686adc4c6555942daa9745c19e0978a40b6ff63987acdd169d3d490ce4bfffdc b/Gateways/FE/projects/.resources/e4a207e20cb1a0cd390a193147bc63e7312918843481308e791a58fc92a0f59e similarity index 84% rename from Gateways/FE/projects/.resources/686adc4c6555942daa9745c19e0978a40b6ff63987acdd169d3d490ce4bfffdc rename to Gateways/FE/projects/.resources/e4a207e20cb1a0cd390a193147bc63e7312918843481308e791a58fc92a0f59e index 2fedb1d..bfe03c5 100644 --- a/Gateways/FE/projects/.resources/686adc4c6555942daa9745c19e0978a40b6ff63987acdd169d3d490ce4bfffdc +++ b/Gateways/FE/projects/.resources/e4a207e20cb1a0cd390a193147bc63e7312918843481308e791a58fc92a0f59e @@ -18,10 +18,10 @@ "children": [ { "meta": { - "name": "EmbeddedView" + "name": "ChillersCard" }, "position": { - "basis": "166px" + "basis": "170px" }, "props": { "path": "Library/Cards/Card_CH_Overview", @@ -37,7 +37,7 @@ "children": [ { "meta": { - "name": "EmbeddedView" + "name": "Diagram" }, "position": { "grow": 1 @@ -52,7 +52,7 @@ }, { "meta": { - "name": "EmbeddedView_0" + "name": "Indicators" }, "position": { "basis": "200px" @@ -68,7 +68,7 @@ } ], "meta": { - "name": "FlexContainer" + "name": "Status" }, "position": { "grow": 1 @@ -76,7 +76,7 @@ "props": { "direction": "column", "style": { - "gap": "10px", + "gap": "var(--space-md)", "overflow": "visible" } }, @@ -84,10 +84,10 @@ }, { "meta": { - "name": "EmbeddedView" + "name": "Control" }, "position": { - "basis": "400px" + "basis": "300px" }, "props": { "path": "Library/Cards/Card_CH_Control", @@ -99,11 +99,14 @@ } ], "meta": { - "name": "FlexContainer" + "name": "GroupDetails" + }, + "position": { + "grow": 1 }, "props": { "style": { - "gap": "10px", + "gap": "var(--space-md)", "overflow": "visible" } }, @@ -117,8 +120,8 @@ "direction": "column", "style": { "backgroundColor": "var(--containerRoot)", - "gap": "10px", - "padding": "10px" + "gap": "var(--space-md)", + "padding": "var(--space-md)" } }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/.resources/e5705c41c3cf15b9af2632a290c902e012dd779ec50d8dab204d8241b95fd1e3 b/Gateways/FE/projects/.resources/e5705c41c3cf15b9af2632a290c902e012dd779ec50d8dab204d8241b95fd1e3 deleted file mode 100644 index 4a40239..0000000 --- a/Gateways/FE/projects/.resources/e5705c41c3cf15b9af2632a290c902e012dd779ec50d8dab204d8241b95fd1e3 +++ /dev/null @@ -1,427 +0,0 @@ -{ - "custom": { - "tabsConfig": { - "tabs": [ - "Status", - "Control", - "Config", - "Trend", - "Meta", - "Wiki" - ] - }, - "trendConfig": { - "selectedPens": [] - } - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "objectName": "UT", - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_UT-M1" - }, - "propConfig": { - "custom.tabsConfig": { - "persistent": true - }, - "custom.tabsConfig.showConfig": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{view.params.tagPath}" - }, - "tagPath": "{1}/Config" - }, - "transforms": [ - { - "expression": "coalesce({value},false) !\u003d false", - "type": "expression" - } - ], - "type": "tag" - } - }, - "custom.tabsConfig.showControl": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{view.params.tagPath}" - }, - "tagPath": "{1}/Control" - }, - "transforms": [ - { - "expression": "coalesce({value},false) !\u003d false", - "type": "expression" - } - ], - "type": "tag" - } - }, - "custom.trendConfig": { - "persistent": true - }, - "params.auth": { - "paramDirection": "input", - "persistent": true - }, - "params.objectName": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": {}, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "Status" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Trend" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "view.custom.trendConfig.selectedPens" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Config" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Meta" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Wiki" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Framework/Tag Notes/View Notes" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Control" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "TabContainer" - }, - "position": { - "basis": "300px", - "grow": 1 - }, - "propConfig": { - "props.tabs": { - "binding": { - "config": { - "expression": "{view.custom.tabsConfig}" - }, - "transforms": [ - { - "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", - "type": "script" - } - ], - "type": "expr" - } - } - }, - "props": { - "contentStyle": { - "backgroundColor": "var(--container)" - }, - "currentTabIndex": 1 - }, - "type": "ia.container.tab" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column" - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "enableDisablePen", - "pageScope": true, - "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/e59eca1f22a420e2c3ab6f3dec04ae6ed656cc86aded64024836625894413d52 b/Gateways/FE/projects/.resources/e59eca1f22a420e2c3ab6f3dec04ae6ed656cc86aded64024836625894413d52 deleted file mode 100644 index 4598261..0000000 Binary files a/Gateways/FE/projects/.resources/e59eca1f22a420e2c3ab6f3dec04ae6ed656cc86aded64024836625894413d52 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/e6198fe9e8084392c4c751010286a780c07db810db25abd1d9c3e488449dee1a b/Gateways/FE/projects/.resources/e6198fe9e8084392c4c751010286a780c07db810db25abd1d9c3e488449dee1a new file mode 100644 index 0000000..5cd6a19 Binary files /dev/null and b/Gateways/FE/projects/.resources/e6198fe9e8084392c4c751010286a780c07db810db25abd1d9c3e488449dee1a differ diff --git a/Gateways/FE/projects/.resources/6aec89483c628dd42fadf54d5664ba69b3ba08cb4284be6dd10de22c1ece9b84 b/Gateways/FE/projects/.resources/e6d2b2c5d57d9e50f0db8a2b32852c27d36e82d2bd1664a547f633170cfce120 similarity index 99% rename from Gateways/FE/projects/.resources/6aec89483c628dd42fadf54d5664ba69b3ba08cb4284be6dd10de22c1ece9b84 rename to Gateways/FE/projects/.resources/e6d2b2c5d57d9e50f0db8a2b32852c27d36e82d2bd1664a547f633170cfce120 index 3ded84c..b6129b4 100644 --- a/Gateways/FE/projects/.resources/6aec89483c628dd42fadf54d5664ba69b3ba08cb4284be6dd10de22c1ece9b84 +++ b/Gateways/FE/projects/.resources/e6d2b2c5d57d9e50f0db8a2b32852c27d36e82d2bd1664a547f633170cfce120 @@ -449,8 +449,7 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - }, - "currentTabIndex": 6 + } }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/e6d7f4b3c7c05e373e4f7db2ead55588d7c2257851846b9f6fbc8179bf05847c b/Gateways/FE/projects/.resources/e6d7f4b3c7c05e373e4f7db2ead55588d7c2257851846b9f6fbc8179bf05847c deleted file mode 100644 index db8e34e..0000000 Binary files a/Gateways/FE/projects/.resources/e6d7f4b3c7c05e373e4f7db2ead55588d7c2257851846b9f6fbc8179bf05847c and /dev/null differ diff --git a/Gateways/FE/projects/.resources/e7e707a4152f23865a5223a8b9f8d6745172f1948d31c5acaa7f0b3c2c0799be b/Gateways/FE/projects/.resources/e7e707a4152f23865a5223a8b9f8d6745172f1948d31c5acaa7f0b3c2c0799be deleted file mode 100644 index 34c26b9..0000000 --- a/Gateways/FE/projects/.resources/e7e707a4152f23865a5223a8b9f8d6745172f1948d31c5acaa7f0b3c2c0799be +++ /dev/null @@ -1,621 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Demand_SP", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Demand_SP" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Enable_ChillerCMDS", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Enable_ChillerCMDS" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ORef_Chillers", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/ORef_Chillers" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ref_Chillers", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Ref_Chillers" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_Avail_Chiller", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_Avail_Chiller" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_Chillers", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_Chillers" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_LineUp_Adjusting", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_LineUp_Adjusting" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_LineUp_Complete", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_LineUp_Complete" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_TransActive", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_TransActive" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Val_Avail", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Val_Avail" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Val_Demand", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Val_Demand" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Val_Fdbk", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Val_Fdbk" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947775165 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947775165 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/e847ce5917e1935833e8fd04f6f2c0e9fc893d1dd99939a26750f37dd023dec6 b/Gateways/FE/projects/.resources/e847ce5917e1935833e8fd04f6f2c0e9fc893d1dd99939a26750f37dd023dec6 deleted file mode 100644 index 20c1f25..0000000 Binary files a/Gateways/FE/projects/.resources/e847ce5917e1935833e8fd04f6f2c0e9fc893d1dd99939a26750f37dd023dec6 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/e8cef1f06ac40ad9b922abaa2b24074d867c28adc746754cdac42801531d8d16 b/Gateways/FE/projects/.resources/e8cef1f06ac40ad9b922abaa2b24074d867c28adc746754cdac42801531d8d16 deleted file mode 100644 index fd84872..0000000 Binary files a/Gateways/FE/projects/.resources/e8cef1f06ac40ad9b922abaa2b24074d867c28adc746754cdac42801531d8d16 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/e9ed7edecd89520eea3d8d513bc99a4c38eeb70225c26236e4e5e3a32a115ecb b/Gateways/FE/projects/.resources/e9ed7edecd89520eea3d8d513bc99a4c38eeb70225c26236e4e5e3a32a115ecb deleted file mode 100644 index e54c21e..0000000 Binary files a/Gateways/FE/projects/.resources/e9ed7edecd89520eea3d8d513bc99a4c38eeb70225c26236e4e5e3a32a115ecb and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f0102b9cb3d2ac226cfe29cbc5ceb6dcafa26c0b0a6bed0dccb652934e7e7fdf b/Gateways/FE/projects/.resources/f0102b9cb3d2ac226cfe29cbc5ceb6dcafa26c0b0a6bed0dccb652934e7e7fdf deleted file mode 100644 index e02791d..0000000 --- a/Gateways/FE/projects/.resources/f0102b9cb3d2ac226cfe29cbc5ceb6dcafa26c0b0a6bed0dccb652934e7e7fdf +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/PID_Loop" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948226158 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948226158 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/f14fc3e4af1308e5957af72d1b2f482a3afc3d08281b1420a4161d978a5e85b7 b/Gateways/FE/projects/.resources/f14fc3e4af1308e5957af72d1b2f482a3afc3d08281b1420a4161d978a5e85b7 new file mode 100644 index 0000000..dbe1577 --- /dev/null +++ b/Gateways/FE/projects/.resources/f14fc3e4af1308e5957af72d1b2f482a3afc3d08281b1420a4161d978a5e85b7 @@ -0,0 +1,415 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "SEL-751", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/SEL-751" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "path": "Library/Templates/Trends" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Templates/Meta" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + }, + "currentTabIndex": 2 + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/c47f5d668c566ba6d454f45a48778b03b24285f5ba6b7f27d3a9b57e6c009cb1 b/Gateways/FE/projects/.resources/f1de25365cea95b48968d20729c9c2e99696e173a2f9b936c56dd3a2b524af62 similarity index 99% rename from Gateways/FE/projects/.resources/c47f5d668c566ba6d454f45a48778b03b24285f5ba6b7f27d3a9b57e6c009cb1 rename to Gateways/FE/projects/.resources/f1de25365cea95b48968d20729c9c2e99696e173a2f9b936c56dd3a2b524af62 index 10dcd44..c0e79bb 100644 --- a/Gateways/FE/projects/.resources/c47f5d668c566ba6d454f45a48778b03b24285f5ba6b7f27d3a9b57e6c009cb1 +++ b/Gateways/FE/projects/.resources/f1de25365cea95b48968d20729c9c2e99696e173a2f9b936c56dd3a2b524af62 @@ -3,7 +3,7 @@ "params": {}, "props": { "defaultSize": { - "height": 123, + "height": 155, "width": 1600 } }, diff --git a/Gateways/FE/projects/.resources/f35991f4863aa4e309e27b6ab4bbb02b1a51d020e01415a9ad4a3927ef39355a b/Gateways/FE/projects/.resources/f35991f4863aa4e309e27b6ab4bbb02b1a51d020e01415a9ad4a3927ef39355a deleted file mode 100644 index a2529a4..0000000 Binary files a/Gateways/FE/projects/.resources/f35991f4863aa4e309e27b6ab4bbb02b1a51d020e01415a9ad4a3927ef39355a and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f455e550d988517d7c4507592ffcff5bb89993e41e8b539da2796509bd2bb8c8 b/Gateways/FE/projects/.resources/f455e550d988517d7c4507592ffcff5bb89993e41e8b539da2796509bd2bb8c8 deleted file mode 100644 index c914516..0000000 Binary files a/Gateways/FE/projects/.resources/f455e550d988517d7c4507592ffcff5bb89993e41e8b539da2796509bd2bb8c8 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f4769e6ea143732ecb76ee9cd2028e952a2eda7e2eb880ffa52eeb9ec97c6a2a b/Gateways/FE/projects/.resources/f4769e6ea143732ecb76ee9cd2028e952a2eda7e2eb880ffa52eeb9ec97c6a2a deleted file mode 100644 index 2559ae7..0000000 Binary files a/Gateways/FE/projects/.resources/f4769e6ea143732ecb76ee9cd2028e952a2eda7e2eb880ffa52eeb9ec97c6a2a and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f4fc38678d67d0b7978cbc3b435d7b0a5b19859f8e4b3ccfe7a54201ba83c1bd b/Gateways/FE/projects/.resources/f4fc38678d67d0b7978cbc3b435d7b0a5b19859f8e4b3ccfe7a54201ba83c1bd deleted file mode 100644 index e155d9d..0000000 Binary files a/Gateways/FE/projects/.resources/f4fc38678d67d0b7978cbc3b435d7b0a5b19859f8e4b3ccfe7a54201ba83c1bd and /dev/null differ diff --git a/Gateways/FE/projects/.resources/c68f28dee2560557363c23dfaade58172be47e561a2ee19b3c5cb9c2ed6a856d b/Gateways/FE/projects/.resources/f563a52ebe1686ac7734fdbf7702cc8b847a2d0bc513bd5e82764dbd61a1f1f0 similarity index 95% rename from Gateways/FE/projects/.resources/c68f28dee2560557363c23dfaade58172be47e561a2ee19b3c5cb9c2ed6a856d rename to Gateways/FE/projects/.resources/f563a52ebe1686ac7734fdbf7702cc8b847a2d0bc513bd5e82764dbd61a1f1f0 index c07e7d9..f71d699 100644 --- a/Gateways/FE/projects/.resources/c68f28dee2560557363c23dfaade58172be47e561a2ee19b3c5cb9c2ed6a856d +++ b/Gateways/FE/projects/.resources/f563a52ebe1686ac7734fdbf7702cc8b847a2d0bc513bd5e82764dbd61a1f1f0 @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 4 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/.resources/1a01a74ae12e9225335f88dcf201552006be752c6f153df85ae0b655bded89e1 b/Gateways/FE/projects/.resources/f7a37e679d0cfdb92b3ef05d2288eac84a53c70974d7496883b12cb7edfb1496 similarity index 99% rename from Gateways/FE/projects/.resources/1a01a74ae12e9225335f88dcf201552006be752c6f153df85ae0b655bded89e1 rename to Gateways/FE/projects/.resources/f7a37e679d0cfdb92b3ef05d2288eac84a53c70974d7496883b12cb7edfb1496 index 1375706..0915bca 100644 --- a/Gateways/FE/projects/.resources/1a01a74ae12e9225335f88dcf201552006be752c6f153df85ae0b655bded89e1 +++ b/Gateways/FE/projects/.resources/f7a37e679d0cfdb92b3ef05d2288eac84a53c70974d7496883b12cb7edfb1496 @@ -49,8 +49,8 @@ }, "props": { "defaultSize": { - "height": 120, - "width": 430 + "height": 100, + "width": 392 } }, "root": { @@ -103,8 +103,8 @@ "name": "2nf" }, "position": { - "height": 120, - "width": 430 + "height": 100, + "width": 392 }, "props": { "elements": [ diff --git a/Gateways/FE/projects/.resources/f89db0fbb363d66a3485e64d1af90c50ea0a56a26169792a8077ab7a7371ed44 b/Gateways/FE/projects/.resources/f89db0fbb363d66a3485e64d1af90c50ea0a56a26169792a8077ab7a7371ed44 deleted file mode 100644 index 7d843e1..0000000 Binary files a/Gateways/FE/projects/.resources/f89db0fbb363d66a3485e64d1af90c50ea0a56a26169792a8077ab7a7371ed44 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/f9502ec4e3eb9a7bae176e83f3c01d56ff81f93eb5c0199a7ad2575c9823ab6c b/Gateways/FE/projects/.resources/f9502ec4e3eb9a7bae176e83f3c01d56ff81f93eb5c0199a7ad2575c9823ab6c deleted file mode 100644 index dd2018e..0000000 Binary files a/Gateways/FE/projects/.resources/f9502ec4e3eb9a7bae176e83f3c01d56ff81f93eb5c0199a7ad2575c9823ab6c and /dev/null differ diff --git a/Gateways/FE/projects/.resources/fa102691d2c59c539265f8886e736eed3dbb943afbf07915b61af2f016cd0360 b/Gateways/FE/projects/.resources/fa102691d2c59c539265f8886e736eed3dbb943afbf07915b61af2f016cd0360 deleted file mode 100644 index 7347b30..0000000 --- a/Gateways/FE/projects/.resources/fa102691d2c59c539265f8886e736eed3dbb943afbf07915b61af2f016cd0360 +++ /dev/null @@ -1,843 +0,0 @@ -{ - "custom": { - "AlarmSeverity": { - "prov": 3 - }, - "CRAH_tagPaths": [], - "data": [ - "[Ignition_SATB1_IO1_default]ER1242/SATB1_P1_1_ER1242_CRAH_01", - "[Ignition_SATB1_IO1_default]ER1242/SATB1_P1_1_ER1242_CRAH_02", - "[Ignition_SATB1_IO1_default]ER1243/SATB1_P1_2_ER1243_CRAH_01", - "[Ignition_SATB1_IO1_default]ER1243/SATB1_P1_2_ER1243_CRAH_02", - "[Ignition_SATB1_IO1_default]ER1244/SATB1_P1_3_ER1244_CRAH_01", - "[Ignition_SATB1_IO1_default]ER1244/SATB1_P1_3_ER1244_CRAH_02", - "[Ignition_SATB1_IO1_default]ER1245/SATB1_P1_4_ER1245_CRAH_01", - "[Ignition_SATB1_IO1_default]ER1245/SATB1_P1_4_ER1245_CRAH_02", - "[Ignition_SATB1_IO1_default]ER1246/SATB1_P1_5_ER1246_CRAH_01", - "[Ignition_SATB1_IO1_default]ER1246/SATB1_P1_5_ER1246_CRAH_02", - "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_01", - "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_02", - "[Ignition_SATB1_IO2_default]ER1249/SATB1_P2_2_ER1249_CRAH_01", - "[Ignition_SATB1_IO2_default]ER1249/SATB1_P2_2_ER1249_CRAH_02", - "[Ignition_SATB1_IO2_default]ER1250/SATB1_P2_3_ER1250_CRAH_01", - "[Ignition_SATB1_IO2_default]ER1250/SATB1_P2_3_ER1250_CRAH_02", - "[Ignition_SATB1_IO2_default]ER1251/SATB1_P2_4_ER1251_CRAH_01", - "[Ignition_SATB1_IO2_default]ER1251/SATB1_P2_4_ER1251_CRAH_02", - "[Ignition_SATB1_IO2_default]ER1252/SATB1_P2_5_ER1252_CRAH_01", - "[Ignition_SATB1_IO2_default]ER1252/SATB1_P2_5_ER1252_CRAH_02", - "[Ignition_SATB1_IO3_default]ER1155/SATB1_P3_1_ER1155_CRAH_01", - "[Ignition_SATB1_IO3_default]ER1155/SATB1_P3_1_ER1155_CRAH_02", - "[Ignition_SATB1_IO3_default]ER1156/SATB1_P3_2_ER1156_CRAH_01", - "[Ignition_SATB1_IO3_default]ER1156/SATB1_P3_2_ER1156_CRAH_02", - "[Ignition_SATB1_IO3_default]ER1157/SATB1_P3_3_ER1157_CRAH_01", - "[Ignition_SATB1_IO3_default]ER1157/SATB1_P3_3_ER1157_CRAH_02", - "[Ignition_SATB1_IO3_default]ER1158/SATB1_P3_4_ER1158_CRAH_01", - "[Ignition_SATB1_IO3_default]ER1158/SATB1_P3_4_ER1158_CRAH_02", - "[Ignition_SATB1_IO3_default]ER1159/SATB1_P3_5_ER1159_CRAH_01", - "[Ignition_SATB1_IO3_default]ER1159/SATB1_P3_5_ER1159_CRAH_02", - "[Ignition_SATB1_IO4_default]ER1254/SATB1_P4_1_ER1254_CRAH_01", - "[Ignition_SATB1_IO4_default]ER1254/SATB1_P4_1_ER1254_CRAH_02", - "[Ignition_SATB1_IO4_default]ER1255/SATB1_P4_2_ER1255_CRAH_01", - "[Ignition_SATB1_IO4_default]ER1255/SATB1_P4_2_ER1255_CRAH_02", - "[Ignition_SATB1_IO4_default]ER1256/SATB1_P4_3_ER1256_CRAH_01", - "[Ignition_SATB1_IO4_default]ER1256/SATB1_P4_3_ER1256_CRAH_02", - "[Ignition_SATB1_IO4_default]ER1257/SATB1_P4_4_ER1257_CRAH_01", - "[Ignition_SATB1_IO4_default]ER1257/SATB1_P4_4_ER1257_CRAH_02", - "[Ignition_SATB1_IO4_default]ER1258/SATB1_P4_5_ER1258_CRAH_01", - "[Ignition_SATB1_IO4_default]ER1258/SATB1_P4_5_ER1258_CRAH_02", - "[Ignition_SATB1_IO5_default]ER1161/SATB1_P5_1_ER1161_CRAH_01", - "[Ignition_SATB1_IO5_default]ER1161/SATB1_P5_1_ER1161_CRAH_02", - "[Ignition_SATB1_IO5_default]ER1162/SATB1_P5_2_ER1162_CRAH_01", - "[Ignition_SATB1_IO5_default]ER1162/SATB1_P5_2_ER1162_CRAH_02", - "[Ignition_SATB1_IO5_default]ER1163/SATB1_P5_3_ER1163_CRAH_01", - "[Ignition_SATB1_IO5_default]ER1163/SATB1_P5_3_ER1163_CRAH_02", - "[Ignition_SATB1_IO5_default]ER1164/SATB1_P5_4_EL1164_CRAH_01", - "[Ignition_SATB1_IO5_default]ER1164/SATB1_P5_4_EL1164_CRAH_02", - "[Ignition_SATB1_IO5_default]ER1165/SATB1_P5_5_EL1165_CRAH_01", - "[Ignition_SATB1_IO5_default]ER1165/SATB1_P5_5_EL1165_CRAH_02", - "[Ignition_Common_IO_Gtwy]ER1151/SATB1_HS1_ER1151_CRAH_01", - "[Ignition_Common_IO_Gtwy]ER1151/SATB1_HS1_ER1151_CRAH_02", - "[Ignition_Common_IO_Gtwy]IDF1263/SATB1_IDF1263_CRAH_01", - "[Ignition_Common_IO_Gtwy]IDF1263/SATB1_IDF1263_CRAH_02", - "[Ignition_Common_IO_Gtwy]IDF1273/SATB1_IDF1273_CRAH_01", - "[Ignition_Common_IO_Gtwy]IDF1273/SATB1_IDF1273_CRAH_02", - "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_01", - "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_02", - "[Ignition_Common_IO_Gtwy]MPR1240/SATB1_M1_2_MPR1240_CRAH_01", - "[Ignition_Common_IO_Gtwy]MPR1240/SATB1_M1_2_MPR1240_CRAH_02", - "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_M3_4_MPR1241_CRAH_01", - "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_M3_4_MPR1241_CRAH_02", - "[Ignition_Common_IO_Gtwy]MPR1247/SATB1_M7_8_MPR1247_CRAH_01", - "[Ignition_Common_IO_Gtwy]MPR1247/SATB1_M7_8_MPR1247_CRAH_02", - "[Ignition_Common_IO_Gtwy]MR1253/SATB1_HS2_MR1253_CRAH_01", - "[Ignition_Common_IO_Gtwy]MR1253/SATB1_HS2_MR1253_CRAH_02" - ], - "key": "[Ignition_SATB1_IO1_default]ER1242/SATB1_P1_1_ER1242_CRAH_01", - "key_1": null, - "selectedRoom": "MPR1150", - "tagPath": [ - "[Ignition_SATB1_IO1_default]", - "[Ignition_SATB1_IO2_default]", - "[Ignition_SATB1_IO3_default]", - "[Ignition_SATB1_IO4_default]", - "[Ignition_SATB1_IO5_default]", - "[Ignition_Common_IO_Gtwy]" - ] - }, - "params": {}, - "propConfig": { - "custom.AlarmSeverity": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d value[\u0027paths\u0027]\n\tfor tag in tags:\n\t\taggAlarmStatus \u003d system.tag.readBlocking([tag+\"/AlarmSummary/ActiveAlarms\"])[0].value\n\t\treturn aggAlarmStatus\n\t\tmaxState \u003d 0\n\t\tfor v in aggAlarmStatus:\n\t\t\tmaxState \u003d v if v \u003e maxState else maxState\n\t\toutput.append(maxState)\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.CRAH_tagPaths": { - "binding": { - "config": { - "struct": { - "selected": "{view.custom.selectedRoom}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selected\"]\n\tproviders \u003d {\n\t\t\t\t\"MPR1240\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MPR1241\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MPR1247\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MPR1150\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"ER1151\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"MR1253\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"IDF1263\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\"IDF1273\":\"[Ignition_Common_IO_Gtwy]\",\n\t\t\t\t\n\t\t\t\t\"ER1242\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1243\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1244\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1245\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\"ER1246\":\"[Ignition_SATB1_IO1_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1248\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1249\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1250\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1251\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\"ER1252\":\"[Ignition_SATB1_IO2_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1155\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1156\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1157\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1158\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\"ER1159\":\"[Ignition_SATB1_IO3_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1254\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1255\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1256\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1257\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\"ER1258\":\"[Ignition_SATB1_IO4_default]\",\n\t\t\t\t\n\t\t\t\t\"ER1161\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1162\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1163\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1164\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t\"ER1165\":\"[Ignition_SATB1_IO5_default]\",\n\t\t\t\t}\n\t\n\tpath \u003d providers[selected] + \u0027/\u0027 + selected\n\ttags \u003d system.tag.browse(path,{\"typeId\":\"Objects/Air/CRAH v2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\toutput \u003d []\n\tfor item in tags:\n\t\toutput.append(item[\"fullPath\"])\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "path": "view.custom.time" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d self.custom.tagPath\n\tfor item in data:\n\t\ttags \u003d system.tag.browse(item,{\"typeId\":\"Objects/Air/CRAH\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\t\tfor item in tags:\n\t\t\tCRAH_tagPath \u003d str(item[\"fullPath\"])\n\t\t\toutput.append(CRAH_tagPath)\n\toutput.append(value)\n\treturn output", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.key": { - "persistent": true - }, - "custom.key_1": { - "binding": { - "config": { - "path": "view.custom.key" - }, - "transforms": [ - { - "code": "\n\treturn alarm.summary.calcMaxPriority(value)", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.selectedRoom": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1300 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "path": "view.custom.CRAH_tagPaths[0]" - }, - "enabled": false, - "transforms": [ - { - "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "paddingBottom": 5, - "paddingLeft": 15, - "paddingRight": 15, - "paddingTop": 5 - }, - "text": "ER1242" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.CRAH_tagPaths" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"CRAH\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "direction": "row-reverse", - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "CRAH", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_01" - }, - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "CRAH", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_02" - } - ], - "path": "Library/Diagrams/HVAC/Dgrm_CRAH", - "style": { - "gap": 15, - "overflow": "visible" - } - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Diagrams" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "gap": 15, - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "SecondFloor" - }, - "position": { - "basis": "20%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor" - }, - "position": { - "basis": "20%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\t\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "65%" - }, - "propConfig": { - "custom.selectedPaths": { - "binding": { - "config": { - "struct": { - "key": "{view.custom.loading}", - "selectedRow": "{this.props.selection.selectedRow}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selectedRow\"]\n\tif selected is None:\n\t\tselected \u003d 0\n\ttagPath \u003d self.props.data[selected].tagPath\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/CRAH\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "data": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value[\u0027data\u0027]:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\t\n\t\tRAT \u003d system.tag.readBlocking(item + \"/Return Air Temperature\")[0].value\n\t\t#SAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\t#Room \u003d system.tag.readBlocking(item + \"/Meta/Room\")[0].value\n\t\tRoom \u003d item.split(\u0027/\u0027)[0].split(\u0027]\u0027)[1]\n\t\tName \u003d item.rsplit(\u0027_\u0027,2)\n\t\ttagPath \u003d item\n\t\toutput.append({ \"RAT\": RAT,\n\t\t\t\t\t\t#\"SAT\": SAT,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"Name\": Name[1] + Name[2],\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "RAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Return Air Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": false, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "filter": { - "enabled": true - }, - "pager": { - "activeOption": 14, - "options": [ - 5, - 10, - 14, - 50, - 100 - ] - } - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-around", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/fa2b73eced6a35ad1c667233178e69f3e841ae5ee940af09c28c79ee85fdea47 b/Gateways/FE/projects/.resources/fa2b73eced6a35ad1c667233178e69f3e841ae5ee940af09c28c79ee85fdea47 deleted file mode 100644 index 3631cbd..0000000 --- a/Gateways/FE/projects/.resources/fa2b73eced6a35ad1c667233178e69f3e841ae5ee940af09c28c79ee85fdea47 +++ /dev/null @@ -1,427 +0,0 @@ -{ - "custom": { - "tabsConfig": { - "tabs": [ - "Status", - "Control", - "Config", - "Trend", - "Meta", - "Wiki" - ] - }, - "trendConfig": { - "selectedPens": [] - } - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "objectName": "AvgMinMax", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CH31_SYSTEM" - }, - "propConfig": { - "custom.tabsConfig": { - "persistent": true - }, - "custom.tabsConfig.showConfig": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{view.params.tagPath}" - }, - "tagPath": "{1}/Config" - }, - "transforms": [ - { - "expression": "coalesce({value},false) !\u003d false", - "type": "expression" - } - ], - "type": "tag" - } - }, - "custom.tabsConfig.showControl": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{view.params.tagPath}" - }, - "tagPath": "{1}/Control" - }, - "transforms": [ - { - "expression": "coalesce({value},false) !\u003d false", - "type": "expression" - } - ], - "type": "tag" - } - }, - "custom.trendConfig": { - "persistent": true - }, - "params.auth": { - "paramDirection": "input", - "persistent": true - }, - "params.objectName": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": {}, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "Status" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Trend" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "view.custom.trendConfig.selectedPens" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Config" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Meta" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Wiki" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Framework/Tag Notes/View Notes" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Control" - }, - "propConfig": { - "position.tabIndex": { - "binding": { - "config": { - "expression": "{parent.props.tabs}" - }, - "transforms": [ - { - "code": "\treturn value.indexOf(self.meta.name)", - "type": "script" - } - ], - "type": "expr" - } - }, - "props.params.auth": { - "binding": { - "config": { - "path": "view.params.auth" - }, - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.params.tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" - }, - "type": "expr" - } - } - }, - "props": { - "loading": { - "order": "with-parent" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "TabContainer" - }, - "position": { - "basis": "300px", - "grow": 1 - }, - "propConfig": { - "props.tabs": { - "binding": { - "config": { - "expression": "{view.custom.tabsConfig}" - }, - "transforms": [ - { - "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", - "type": "script" - } - ], - "type": "expr" - } - } - }, - "props": { - "contentStyle": { - "backgroundColor": "var(--container)" - }, - "currentTabIndex": 1 - }, - "type": "ia.container.tab" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column" - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "enableDisablePen", - "pageScope": true, - "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/8a88a8ae9b069a6d3a06790c6414ca5ae635569852a17a079226b5147dc6dbcc b/Gateways/FE/projects/.resources/fac0dda779358a750a3bd9232409d283abb558c608b769ffc5112bba08dee301 similarity index 98% rename from Gateways/FE/projects/.resources/8a88a8ae9b069a6d3a06790c6414ca5ae635569852a17a079226b5147dc6dbcc rename to Gateways/FE/projects/.resources/fac0dda779358a750a3bd9232409d283abb558c608b769ffc5112bba08dee301 index b8e80f8..804239a 100644 --- a/Gateways/FE/projects/.resources/8a88a8ae9b069a6d3a06790c6414ca5ae635569852a17a079226b5147dc6dbcc +++ b/Gateways/FE/projects/.resources/fac0dda779358a750a3bd9232409d283abb558c608b769ffc5112bba08dee301 @@ -49,8 +49,8 @@ }, "props": { "defaultSize": { - "height": 120, - "width": 430 + "height": 100, + "width": 392 } }, "root": { @@ -60,10 +60,8 @@ "name": "Roof" }, "position": { - "height": 109, - "width": 422, - "x": 4, - "y": 6.5 + "height": 100, + "width": 392 }, "props": { "elements": [ @@ -3996,102 +3994,14 @@ "viewBox": "0 0 1066 267" }, "type": "ia.shapes.svg" - }, - { - "custom": { - "room": "MMR1120" - }, - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.meta.name}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "SATB1_RF_RTU01", - "tooltip": { - "enabled": true - } - }, - "position": { - "height": 19, - "width": 12, - "x": 408, - "y": 37 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "path": "this.meta.name" - }, - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "transparent" - } - }, - "type": "ia.display.label" - }, - { - "custom": { - "room": "MMR1120" - }, - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.meta.name}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "SATB1_RF_RTU02", - "tooltip": { - "enabled": true - } - }, - "position": { - "height": 16, - "width": 11, - "x": 409, - "y": 58 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "path": "this.meta.name" - }, - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "transparent" - } - }, - "type": "ia.display.label" } ], "meta": { "name": "root" }, "position": { - "x": 13, - "y": 0 + "x": 155.99408149719238, + "y": 109 }, "scripts": { "customMethods": [], diff --git a/Gateways/FE/projects/.resources/fb759f8bca5ac915f311ea5969e3e500e6d46b56dfbafedade58a9f8b0b99cf6 b/Gateways/FE/projects/.resources/fb759f8bca5ac915f311ea5969e3e500e6d46b56dfbafedade58a9f8b0b99cf6 deleted file mode 100644 index bbfa27b..0000000 Binary files a/Gateways/FE/projects/.resources/fb759f8bca5ac915f311ea5969e3e500e6d46b56dfbafedade58a9f8b0b99cf6 and /dev/null differ diff --git a/Gateways/FE/projects/.resources/fbfdabde74f0ec8798c2797fd26a982697d1668bc392e09c00967b98541b077c b/Gateways/FE/projects/.resources/fbfdabde74f0ec8798c2797fd26a982697d1668bc392e09c00967b98541b077c deleted file mode 100644 index 8db9ed7..0000000 --- a/Gateways/FE/projects/.resources/fbfdabde74f0ec8798c2797fd26a982697d1668bc392e09c00967b98541b077c +++ /dev/null @@ -1,1053 +0,0 @@ -{ - "custom": { - "RTU_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02", - "auth": { - "almAck": false, - "almShelve": false, - "config": false, - "control": false - }, - "data": [ - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01", - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" - ], - "room": "SATB1_RF_RTU02", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof" - }, - "params": {}, - "propConfig": { - "custom.RTU_tagPath": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "transforms": [ - { - "code": "\treturn self.custom.tagPath + \"/\"+ value", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.auth": { - "binding": { - "config": { - "path": "session.props.auth.user.roles" - }, - "transforms": [ - { - "code": "\treturn utils.roles.validate(value)", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.custom.tagPath}", - "time": "now(3000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/RTU-1\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\t\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/RTU-2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagPath \u003d str(item[\"fullPath\"])\n\t\toutput.append(tagPath)\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.room": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "RTU Diagram" - }, - "propConfig": { - "props.params.objectName": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "transforms": [ - { - "code": "\toutput \u003d value.split(\"_\")\n\treturn output[2]", - "type": "script" - } - ], - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.custom.RTU_tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "enabled": false, - "transforms": [ - { - "code": "\tsplit \u003d value.split(\"_\")\n\treturn \"Pages/Dev/C_AirSystem/Diagrams/\" + split[2]", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": false - }, - "path": "Library/Diagrams/HVAC/Dgrm_RTU", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Diagram" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible" - }, - "wrap": "wrap" - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Roof" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_Roof", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_2" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_1" - }, - "position": { - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Tag}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "grow": 1 - }, - "propConfig": { - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tRAD \u003d system.tag.readBlocking(item + \"/Return Air Damper\")[0].value\n\t\tSAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\tName \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\ttag \u003d system.tag.readBlocking(item + \"/Meta/Ignition Tag Name\")[0].value\n\t\toutput.append({ \"RAD\": str(RAD) + \u0027 %\u0027,\n\t\t\t\t\t\t\"SAT\": str(round(SAT,3)) + \u0027 F\u0027,\n\t\t\t\t\t\t\"Tag\": tag,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"Name\": Name})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Device" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "string", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 75 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Supply Air Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "RAD", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Return Air Damper Position" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Tag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - } - ], - "data": [ - { - "AlarmSeverity": "Info", - "Name": "RTU_01", - "RAD": "48.0 %", - "SAT": "57.1 F", - "Tag": "SATB1_RF_RTU01" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_02", - "RAD": "68.0 %", - "SAT": "69.8 F", - "Tag": "SATB1_RF_RTU02" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_03", - "RAD": "68.0 %", - "SAT": "69.8 F", - "Tag": "SATB1_RF_RTU02" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_04", - "RAD": "66.0 %", - "SAT": "70.1 F", - "Tag": "SATB1_RF_RTU02" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_05", - "RAD": "69.0 %", - "SAT": "68.8 F", - "Tag": "SATB1_RF_RTU02" - } - ], - "style": { - "overflow": "auto" - } - }, - "type": "ia.display.table" - }, - { - "children": [ - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tClosed \u003d True\n\tself.custom.RTU1_Emergency_Override \u003d Closed\n\tself.custom.RTU2_Emergency_Override \u003d Closed" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button" - }, - "position": { - "grow": 1 - }, - "propConfig": { - "custom.RTU1_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[0]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "custom.RTU2_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[1]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.control" - }, - "type": "property" - } - }, - "props.primary": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01/Control/Emergency Override" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "image": { - "style": { - "backgroundColor": "#D5D5D5", - "color": "#2B2B2B" - } - }, - "style": { - "borderColor": "#AAAAAA", - "borderStyle": "solid", - "borderWidth": 1, - "margin": 2 - }, - "text": "Close Outside Dampers", - "textStyle": { - "color": "#2B2B2B" - } - }, - "type": "ia.input.button" - }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tAuto \u003d False\n\tself.custom.RTU1_Emergency_Override \u003d Auto\n\tself.custom.RTU2_Emergency_Override \u003d Auto\n\t" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button_0" - }, - "position": { - "grow": 1 - }, - "propConfig": { - "custom.RTU1_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[0]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "custom.RTU2_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[1]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.control" - }, - "type": "property" - } - }, - "props.primary": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01/Control/Emergency Override" - }, - "enabled": false, - "transforms": [ - { - "fallback": false, - "inputType": "scalar", - "mappings": [ - { - "input": false, - "output": true - }, - { - "input": true, - "output": false - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "tag" - } - } - }, - "props": { - "image": { - "style": { - "backgroundColor": "#D5D5D5", - "color": "#2B2B2B" - } - }, - "style": { - "borderColor": "#AAAAAA", - "borderStyle": "solid", - "borderWidth": 1, - "margin": 2 - }, - "text": "Set Dampers In Auto", - "textStyle": { - "color": "#2B2B2B" - } - }, - "type": "ia.input.button" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "50px", - "grow": 1 - }, - "props": { - "style": { - "gap": "var(--space-sm)", - "margin": 5, - "overflow": "visible" - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.room \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/fc3ac47bd7b53194fba6aa04e465563e838ce6a5240bbc871ed469bebeeda2ca b/Gateways/FE/projects/.resources/fc3ac47bd7b53194fba6aa04e465563e838ce6a5240bbc871ed469bebeeda2ca new file mode 100644 index 0000000..3a8a766 Binary files /dev/null and b/Gateways/FE/projects/.resources/fc3ac47bd7b53194fba6aa04e465563e838ce6a5240bbc871ed469bebeeda2ca differ diff --git a/Gateways/FE/projects/.resources/fc5c80d32505519bc6560819f52160661346813b599d2ea6a235a321a17e49c6 b/Gateways/FE/projects/.resources/fc5c80d32505519bc6560819f52160661346813b599d2ea6a235a321a17e49c6 deleted file mode 100644 index bc8e093..0000000 --- a/Gateways/FE/projects/.resources/fc5c80d32505519bc6560819f52160661346813b599d2ea6a235a321a17e49c6 +++ /dev/null @@ -1,699 +0,0 @@ -{ - "custom": { - "DOAS_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03", - "data": [ - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01", - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS02", - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - ], - "selectedRoom": "SATB1_RF_DOAS03", - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, - "params": {}, - "propConfig": { - "custom.DOAS_tagPath": { - "binding": { - "config": { - "path": "view.custom.selectedRoom" - }, - "transforms": [ - { - "code": "\treturn self.custom.tagPath +\"Roof/\"+ value", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.custom.tagPath}", - "time": "now(3000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/DOAS\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\toutput.append(str(item[\"fullPath\"]))\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.selectedRoom": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "meta": { - "name": "DOAS_Diagram" - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.custom.DOAS_tagPath" - }, - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": false, - "objectName": "DOAS" - }, - "path": "Library/Diagrams/HVAC/Dgrm_DOAS", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Diagram" - }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center" - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Roof" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_Roof", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_2" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_1" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Tag}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "35%" - }, - "propConfig": { - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tRAT \u003d system.tag.readBlocking(item + \"/Return Air Temperature\")[0].value\n\t\tSAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\tName \u003d item.split(\u0027_\u0027)[5]\n\t\t#Tag \u003d system.tag.readBlocking(item + \"/Meta/Ignition Tag Name\")[0].value\n\t\tTag \u003d item.split(\u0027/\u0027)[1]\n\t\ttagPath \u003d item\n\t\toutput.append({\n\t\t\t\t\t\t\"RAT\": RAT,\n\t\t\t\t\t\t\"SAT\": SAT,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Tag\": Tag,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Supply Air Temperature" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Tag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Tag" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "AlarmSeverity": " ", - "Name": "DOAS01", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS01", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS02", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS02", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS02" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS03", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS03", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS04", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS04", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS05", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS05", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - } - ] - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-around", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/fee0047e8e57e41f3b66c5d36c86d7d1a21bcc84dace8ec8ebef244a574e648d b/Gateways/FE/projects/.resources/fee0047e8e57e41f3b66c5d36c86d7d1a21bcc84dace8ec8ebef244a574e648d new file mode 100644 index 0000000..d45d0f7 Binary files /dev/null and b/Gateways/FE/projects/.resources/fee0047e8e57e41f3b66c5d36c86d7d1a21bcc84dace8ec8ebef244a574e648d differ diff --git a/Gateways/FE/projects/.resources/ff98f750d3c2a9673247d663fafd238ac3eaaf339645f1f39ad73e2382cb343a b/Gateways/FE/projects/.resources/ff98f750d3c2a9673247d663fafd238ac3eaaf339645f1f39ad73e2382cb343a deleted file mode 100644 index 0a1707f..0000000 Binary files a/Gateways/FE/projects/.resources/ff98f750d3c2a9673247d663fafd238ac3eaaf339645f1f39ad73e2382cb343a and /dev/null differ diff --git a/Gateways/FE/projects/.resources/ffbd05f1012bc1b283c313f4da4c649abb11f58ce050298659d72f2e247044ad b/Gateways/FE/projects/.resources/ffbd05f1012bc1b283c313f4da4c649abb11f58ce050298659d72f2e247044ad deleted file mode 100644 index a36e46c..0000000 --- a/Gateways/FE/projects/.resources/ffbd05f1012bc1b283c313f4da4c649abb11f58ce050298659d72f2e247044ad +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/SEL-751 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/.resources/ffd4bf37c95939b8e1925e5a7dfd6d14202beb959879d06cd9f59a4f73a0348e b/Gateways/FE/projects/.resources/ffd4bf37c95939b8e1925e5a7dfd6d14202beb959879d06cd9f59a4f73a0348e deleted file mode 100644 index 3e04acb..0000000 Binary files a/Gateways/FE/projects/.resources/ffd4bf37c95939b8e1925e5a7dfd6d14202beb959879d06cd9f59a4f73a0348e and /dev/null differ diff --git a/Gateways/FE/projects/.resources/fff5fc386ce13da901494e736ac716ac1ec4d117ec8d25ad42b5126d9f8efc89 b/Gateways/FE/projects/.resources/fff5fc386ce13da901494e736ac716ac1ec4d117ec8d25ad42b5126d9f8efc89 deleted file mode 100644 index be9791f..0000000 --- a/Gateways/FE/projects/.resources/fff5fc386ce13da901494e736ac716ac1ec4d117ec8d25ad42b5126d9f8efc89 +++ /dev/null @@ -1,533 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Depleting Elapsed Time", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/Depleting Elapsed Time" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Mode", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/Mode" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Recharge Fail Elapsed Time", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/Recharge Fail Elapsed Time" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "System Not Ready", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/System Not Ready" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948590619 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948590619 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/config.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/config.json index 8d98db1..9512b06 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/config.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/config.json @@ -41,7 +41,7 @@ }, "/CHW_System/:pageId": { "title": "", - "viewPath": "Pages/Mechanical/CHW_System" + "viewPath": "Pages/Mechanical/CHW_System_Layout" }, "/DH101/:pageId": { "title": "", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/resource.json index 65c6c10..a6cc328 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/page-config/resource.json @@ -7,10 +7,10 @@ "config.json" ], "attributes": { - "lastModificationSignature": "cf8816d06eade5b58cb59891bb00f71cfb5bb4068965a2e3cdf53337790ed15f", + "lastModificationSignature": "5f1d03dc35dcb81aa02b6bffac390a91d94c960ae70a4c774c112404d7bc441b", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-20T15:56:03Z" + "timestamp": "2026-05-01T21:13:37Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json index c819fe5..34d98dc 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/session-props/resource.json @@ -7,10 +7,10 @@ "props.json" ], "attributes": { - "lastModificationSignature": "54e7b298f238335555912ad3495a989204c9cf00d3f77129bd80494e22233d13", + "lastModificationSignature": "2d755c92157bd569b632664e7e00c04448e904254064e74b7c4c3a68d0804026", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-21T00:59:20Z" + "timestamp": "2026-05-01T14:32:58Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H1/data.bin b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H1/data.bin new file mode 100644 index 0000000..29a285e --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H1/data.bin @@ -0,0 +1,5 @@ +{ + "base": { + "style": {} + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H1/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H1/resource.json new file mode 100644 index 0000000..aacca02 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H1/resource.json @@ -0,0 +1,16 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "data.bin" + ], + "attributes": { + "lastModificationSignature": "15c08907b7a7c46539b6987e8c1457065e75832eeecfb294f127d4018152d344", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:40:08Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H2/resource.json new file mode 100644 index 0000000..0f17ebf --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H2/resource.json @@ -0,0 +1,16 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "style.json" + ], + "attributes": { + "lastModificationSignature": "2820e594bcb0487ad33c9fae6731e0c46bc210aa9023c94b585d3658ac03a899", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:42:49Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H2/style.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H2/style.json new file mode 100644 index 0000000..f43c714 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/style-classes/labels/H2/style.json @@ -0,0 +1,9 @@ +{ + "base": { + "style": { + "color": "var(--text-on-light)", + "fontFamily": "Noto Sans", + "fontSize": "16px" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/resource.json similarity index 60% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/resource.json index 64fc9d4..73c2b1f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "1a34546b5bc26075f31e368d0d2016321693b1b50f227823b01d8f1a66808fd5", + "lastModificationSignature": "1106c652b25825a645b42e45f70eb82613bc87af37be166fa210409aebc531b4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:40Z" + "timestamp": "2026-04-28T18:27:01Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/resource.json similarity index 60% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/resource.json index 323365f..617e8e3 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "afea976c35bb1809141b67554d07eeb845210618537841ed5ed30dce92f3bc46", + "lastModificationSignature": "6ccf24bc804c45d1ff33d7339f959768ef3ba66d4f8e7e5f5a8086895a0be964", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" + "timestamp": "2026-04-28T18:27:01Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/resource.json similarity index 60% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/resource.json index 6be7045..d412ccb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "e9251b5f2ed407886d9336b07c8c873ab387a317f64fa4ee0aece666827f2beb", + "lastModificationSignature": "150cc355fb9fa45e64521dce0feaf683060631c05a3e28f05ce8a47f0b93c9e7", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" + "timestamp": "2026-04-28T18:27:01Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Control/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/resource.json similarity index 60% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/resource.json index b90c087..3d38d92 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "21f75c80226b67630c61f0d9562a2206b0cd95c90c8ce8b4095bdcfe5616beb7", + "lastModificationSignature": "416c3a38598039c67599bb611a2a726c61bb05312e00db526ba988d29bfe8f1a", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" + "timestamp": "2026-04-28T18:27:01Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/resource.json new file mode 100644 index 0000000..0d496b2 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "013324e7f8b384a62dd3d8218dd2ad903630f798391539a1b9dfd1d2e37762f1", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:27:01Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/resource.json new file mode 100644 index 0000000..646f849 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a5f653b9fb674258fee3e78fb3321650dfe65ed35c17184b464ffed824e9395d", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:27:01Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CAM/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/resource.json new file mode 100644 index 0000000..0110e2b --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "d90ff793193b3a1bc9d343dc5e797cff4fa9fc0eee9ea2c89bff19fa83c20e3a", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/resource.json new file mode 100644 index 0000000..d07a1d3 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "7a28c9b664ac56bee07d4ae7d826a813a92a34ee05d763e379ad14061f941080", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/resource.json new file mode 100644 index 0000000..367173f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "f8602d048503e9aa3bd948d57679190e64345d649c3ca9a552d1ee3df8839c8e", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Control/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/resource.json new file mode 100644 index 0000000..b78bc9d --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "e3f04593820abab475190a8a92933a4935c65d03c03e09733076d7120bd7e817", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/resource.json new file mode 100644 index 0000000..867cd4a --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "f9627e9bc1ecf632a5c3bd6342877d52b815526ba5913e2a367bf84d27008a87", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/resource.json new file mode 100644 index 0000000..f6f3286 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "0a54b16ca665d97e2a62bafb90780f33a9209372c5dc9bb4a6265b445a9e67bb", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/resource.json new file mode 100644 index 0000000..27300dc --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "73202b7b883631f3fb8a72232ef5013a33157ac37a65fb2a69df71a64bf430a3", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAC_FirstFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/resource.json new file mode 100644 index 0000000..f28342c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a2569aaa8d9772e49bf7abb8033fb7bc63f92913508daa41026234a3afe1390c", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_FirstFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/resource.json new file mode 100644 index 0000000..f3869b0 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "3dc493e52a59d02c786a9848f65f6e271bfb3060e88f10a9b4b961ec6abb18ee", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/CRAH_SecondFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/resource.json new file mode 100644 index 0000000..fb87508 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a544ba41fc0d59a7a844433d579f3ec785ece42bfffdaaa4999916cf67d7d21a", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/resource.json new file mode 100644 index 0000000..d0f2bec --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "c1ea25f4f301a51dd275dd427d35ee907ce5cf46b151884cb5cc12dd9102a115", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/resource.json new file mode 100644 index 0000000..5694933 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "226c72755b75a5242d5796d46b18711d5f71e536e5883818adf3cd6f1cd0c847", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Control/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/resource.json new file mode 100644 index 0000000..c22b69b --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "66148e3b98d332817e940bcbff0d05b39bbe5e89f6e891bc0fdd6d059dc33c5a", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/resource.json new file mode 100644 index 0000000..59a3855 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "8120b5c6779c966d91dc438d8895d0145f96185dc8fdb79f484f68dd912ce799", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/resource.json new file mode 100644 index 0000000..38fd283 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "fb310d59ebcf220fa784bfc7f355b997ae34e0da40f885c2ffdc3db7a52823b2", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/DHUM/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/resource.json new file mode 100644 index 0000000..52b2777 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "972cf85da59700ba46895dbe984e8a3f7f438d923ec4e12007423fecdbac04fd", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/thumbnail.png new file mode 100644 index 0000000..9a9f578 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/b82156fc5a845e4adba81bfbec4cb2f83a68f27ea0a80f925621191c9691bcd9 b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/view.json similarity index 99% rename from Gateways/FE/projects/.resources/b82156fc5a845e4adba81bfbec4cb2f83a68f27ea0a80f925621191c9691bcd9 rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/view.json index 1a58e67..9975575 100644 --- a/Gateways/FE/projects/.resources/b82156fc5a845e4adba81bfbec4cb2f83a68f27ea0a80f925621191c9691bcd9 +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Body/view.json @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "SEL-751", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/SEL-751" + "objectName": "Motor", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH01_MOTOR" }, "propConfig": { "custom.tabsConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/resource.json new file mode 100644 index 0000000..d27da1a --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "0847f2b2fed41dce79b041af83d4ee33ac55ba8459de8392ffbb977d1eabaa22", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/view.json similarity index 89% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/view.json index 4b4306c..9ea4cd5 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Config/view.json @@ -9,14 +9,14 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CH31_MOTOR" }, "propConfig": { "custom.allTags": { "binding": { "config": { "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "waitOnAll": true }, @@ -55,14 +55,13 @@ "config": { "struct": { "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", - "tagPath": "{view.params.tagPath} + \"/Meta/\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "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", + "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\toutput.append(tag)\n\t\t\n\treturn output", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/resource.json new file mode 100644 index 0000000..2126246 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a797fb6c5b9b4e1d9810b740f5ed37ded6219f82f29d34abec34f14b2bd6de69", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/thumbnail.png new file mode 100644 index 0000000..a04edbb Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/view.json new file mode 100644 index 0000000..a2fc6b1 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Control/view.json @@ -0,0 +1,468 @@ +{ + "custom": { + "OCmd": {} + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH01_MOTOR" + }, + "propConfig": { + "custom.OCmd": { + "persistent": true + }, + "custom.OCmd.Mode": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/ModeCMD" + }, + "type": "tag" + } + }, + "custom.OCmd.OOS": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/OCmd_OOS" + }, + "type": "tag" + } + }, + "custom.OCmd.Reset": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/OCmd_Reset" + }, + "type": "tag" + } + }, + "custom.OCmd.Run": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/OCmd_Run" + }, + "type": "tag" + } + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Mode \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "AutoBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Mode" + }, + "type": "property" + } + } + }, + "props": { + "text": "Auto" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Mode \u003d False" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "CloseBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Mode" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": true + }, + { + "input": true, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Manual" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row1" + }, + "position": { + "basis": "50px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Run \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "StartBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "expression": "if({view.params.auth.control}, if(!{view.custom.OCmd.Mode}, true, false) , false)" + }, + "type": "expr" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Run" + }, + "type": "property" + } + } + }, + "props": { + "text": "Start" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Run \u003d False" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "StopBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "expression": "if({view.params.auth.control}, if(!{view.custom.OCmd.Mode}, true, false) , false)" + }, + "type": "expr" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Run" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": true + }, + { + "input": true, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Stop" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row2" + }, + "position": { + "basis": "50px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Reset \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Reset Btn" + }, + "position": { + "basis": "50px" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + } + }, + "props": { + "primary": false, + "text": "Reset" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Left Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Description", + "tooltip": { + "width": "50%" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "text": "Out of Service", + "textStyle": { + "textAlign": "right" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Val" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "bidirectional": true, + "path": "view.custom.OCmd.OOS" + }, + "type": "property" + } + } + }, + "props": { + "text": "" + }, + "type": "ia.input.checkbox" + } + ], + "meta": { + "name": "OutOfService" + }, + "position": { + "basis": "50px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "Right Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/padded-container", + "gap": "10px" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/resource.json new file mode 100644 index 0000000..a98dd91 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "4d8afa83def9f32a880f9d0b1ee91d2f80bc472e6243f2db4ea1bcc76c473eea", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/thumbnail.png new file mode 100644 index 0000000..c430d72 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/view.json new file mode 100644 index 0000000..427e32c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Info/view.json @@ -0,0 +1,133 @@ +{ + "custom": { + "allTags": [ + { + "dataType": "Int8", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "EquipCounts", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Runtime", + "options": [] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Status Running", + "options": [ + "Stopped", + "Running" + ] + } + ] + }, + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH01_MOTOR" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\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 \t#sortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "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}", + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Info", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/resource.json new file mode 100644 index 0000000..59a3855 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "8120b5c6779c966d91dc438d8895d0145f96185dc8fdb79f484f68dd912ce799", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/resource.json new file mode 100644 index 0000000..fe266a3 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a47317a66294c8878b0cbbfb7ee2ce1486c22c2248ae2aa93ed59abd930e8ec7", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/EF/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/resource.json new file mode 100644 index 0000000..5417478 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "3ea2c49a6e0236cd1dd9a57cfd9ac88be58b73a79fb79825c0637464dfc96db2", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_FirstFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/resource.json new file mode 100644 index 0000000..2cd2433 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "516459272dea866e23f7fd6c002b25e4c192906917debb2b3d64b94941ddcfc7", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/FCU_SecondFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/resource.json new file mode 100644 index 0000000..b0d18c4 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "6ae9393c20daa30b11db73bc0a54e708ec65384250df40248d3fa74500cd12c1", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_FirstFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/resource.json new file mode 100644 index 0000000..cb3b673 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "010d13f4667e8cf8a61940617cc2fa13700c2d0820a1b2d15852fe2b03fd13e8", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/GAL_SecondFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/resource.json new file mode 100644 index 0000000..428566c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "9be1ea8d703f4ddf9c26b7824dc23b4236cb7506df56fc44264ea6e83ed13c69", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/resource.json new file mode 100644 index 0000000..b58e3e6 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "3e4bab78bdf3aca4c46c0bdbaa3f05494e9417d491e8f77f310c0c409f6e8223", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/resource.json new file mode 100644 index 0000000..52f3b7c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a0660aaeaba32f34837be79cbfea8752bc4a4e71bc0530f80f4ec0d05e038dd0", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Control/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/resource.json new file mode 100644 index 0000000..a8fe645 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "74f71606996ad7ef9cce6b69972caa830c27731a01044782b6e965d8e0011575", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/resource.json new file mode 100644 index 0000000..058b973 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "f8f1d67b9c6f1d58679f269d63868eae3e980bca43b47842c2a5e9b52d40c55b", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/resource.json new file mode 100644 index 0000000..be40afc --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "9b0d4597ed7e0ec14c9bfaf581200d3212a3c1c48d6e9af89d5742dd299e2d5d", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2 HS/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/resource.json new file mode 100644 index 0000000..ad3cd6f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "6bbf47e270277c0bd0ad7acf5c73f2d877b120a07892455c0ec788de75da500e", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/thumbnail.png new file mode 100644 index 0000000..4e822c9 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/view.json new file mode 100644 index 0000000..d541c37 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Body/view.json @@ -0,0 +1,430 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "H2", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "params": { + "embedded": false, + "objectName": "DiscreteIn" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" + }, + "type": "expr" + } + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + } + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/resource.json new file mode 100644 index 0000000..b58e3e6 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "3e4bab78bdf3aca4c46c0bdbaa3f05494e9417d491e8f77f310c0c409f6e8223", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/thumbnail.png new file mode 100644 index 0000000..f4d64a7 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/2fe8f8caa470e82147b6989b0e738fa6301cd2be5074425528c78ed92fb55ab5 b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/view.json similarity index 89% rename from Gateways/FE/projects/.resources/2fe8f8caa470e82147b6989b0e738fa6301cd2be5074425528c78ed92fb55ab5 rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/view.json index 4b4306c..539e01c 100644 --- a/Gateways/FE/projects/.resources/2fe8f8caa470e82147b6989b0e738fa6301cd2be5074425528c78ed92fb55ab5 +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Config/view.json @@ -9,14 +9,14 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" }, "propConfig": { "custom.allTags": { "binding": { "config": { "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "waitOnAll": true }, @@ -55,14 +55,13 @@ "config": { "struct": { "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", - "tagPath": "{view.params.tagPath} + \"/Meta/\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "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", + "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\toutput.append(tag)\n\t\t\n\treturn output", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/resource.json new file mode 100644 index 0000000..52f3b7c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a0660aaeaba32f34837be79cbfea8752bc4a4e71bc0530f80f4ec0d05e038dd0", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/thumbnail.png new file mode 100644 index 0000000..68d6841 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/view.json new file mode 100644 index 0000000..9d400e9 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Control/view.json @@ -0,0 +1,125 @@ +{ + "custom": { + "OCmd": {} + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.OCmd": { + "persistent": true + }, + "custom.OCmd.Reset": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Reset" + }, + "type": "tag" + } + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Reset \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Reset Btn" + }, + "position": { + "basis": "50px" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + } + }, + "props": { + "primary": false, + "text": "Reset" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Left Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Right Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/padded-container", + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/resource.json new file mode 100644 index 0000000..a8fe645 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "74f71606996ad7ef9cce6b69972caa830c27731a01044782b6e965d8e0011575", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/thumbnail.png new file mode 100644 index 0000000..ffcd78d Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/view.json new file mode 100644 index 0000000..d3f1178 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Info/view.json @@ -0,0 +1,467 @@ +{ + "custom": { + "XA": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2/Device Fault", + "XAH": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2/Alarm High", + "XAHH": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2/Alarm High High" + }, + "params": { + "embedded": false, + "objectName": "H2", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.XA": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "expression": "{value} + \u0027/Device Fault\u0027", + "type": "expression" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.XAH": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "expression": "{value} + \u0027/Alarm High\u0027", + "type": "expression" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.XAHH": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "expression": "{value} + \u0027/Alarm High High\u0027", + "type": "expression" + } + ], + "type": "property" + }, + "persistent": true + }, + "params.embedded": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": [ + { + "config": { + "script": "\ttagPath \u003d \n\tobjectName \u003d \u0027DiscreteIn\u0027\n\tif(self.view.params.embedded \u003d\u003d True):\n\t\tpageId \u003d self.page.props.pageId\n\t\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\tutils.nav.openEQPopup(objectName, tagPath)\n\telse:\n\t\tpayload\u003d{\n\t\t\t\u0027objectName\u0027: objectName,\n\t\t\t\u0027tagPath\u0027: tagPath,\n\t\t\t\u0027modal\u0027: False,\n\t\t\t\u0027resizable\u0027: True,\n\t\t\t\u0027draggable\u0027: True,\n\t\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t\t}\n\t\t}\n\t\tutils.nav.eqPopupMsg(self, payload)\n\t\n\t" + }, + "enabled": false, + "scope": "G", + "type": "script" + }, + { + "config": { + "draggable": true, + "id": "sII9XbeP", + "modal": false, + "overlayDismiss": false, + "position": { + "height": 800, + "width": 1000 + }, + "positionType": "exact", + "resizable": true, + "showCloseIcon": false, + "type": "open", + "viewParams": { + "objectName": "DiscreteIn", + "tagPath": "{view.custom.XA}" + }, + "viewPath": "Library/Templates/Base", + "viewportBound": false + }, + "scope": "C", + "type": "popup" + } + ] + } + }, + "meta": { + "name": "Label_1" + }, + "position": { + "basis": "112px" + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.XA}+\"/Alarms/Alarm Target Disagree\"" + }, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "var(--state-faulted)" + }, + { + "input": false, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + }, + "props.textStyle.color": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.inTagPath} + {view.custom.JA01}+\"/VAL\"" + }, + "enabled": false, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": "white" + }, + { + "input": true, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "classes": "containers/HoverOver", + "outlineStyle": "none" + }, + "text": "Device Fault", + "textStyle": { + "color": "white", + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": [ + { + "config": { + "script": "\ttagPath \u003d self.view.custom.XAH\n\tobjectName \u003d self.view.params.objectName\n\tif(self.view.params.embedded \u003d\u003d True):\n\t\tpageId \u003d self.page.props.pageId\n\t\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\t\t\n\t\tutils.nav.openEQPopup(objectName, tagPath)\n\telse:\n\t\tpayload\u003d{\n\t\t\t\u0027objectName\u0027: objectName,\n\t\t\t\u0027tagPath\u0027: tagPath,\n\t\t\t\u0027modal\u0027: False,\n\t\t\t\u0027resizable\u0027: True,\n\t\t\t\u0027draggable\u0027: True,\n\t\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t\t}\n\t\t}\n\t\tutils.nav.eqPopupMsg(self, payload)\n\t\n\t" + }, + "enabled": false, + "scope": "G", + "type": "script" + }, + { + "config": { + "draggable": true, + "id": "sII9XbeP", + "modal": false, + "overlayDismiss": false, + "position": { + "height": 800, + "width": 1000 + }, + "positionType": "exact", + "resizable": true, + "showCloseIcon": false, + "type": "open", + "viewParams": { + "objectName": "DiscreteIn", + "tagPath": "{view.custom.XAH}" + }, + "viewPath": "Library/Templates/Base", + "viewportBound": false + }, + "scope": "C", + "type": "popup" + } + ] + } + }, + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "112px" + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.XAH}+\"/Alarms/Alarm Target Disagree\"" + }, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "var(--state-faulted)" + }, + { + "input": false, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + }, + "props.textStyle.color": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.inTagPath} + {view.custom.JA02}+\"/VAL\"" + }, + "enabled": false, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": "white" + }, + { + "input": true, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "classes": "containers/HoverOver", + "outlineStyle": "none" + }, + "text": "Alarm High", + "textStyle": { + "color": "white", + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": [ + { + "config": { + "script": "\ttagPath \u003d self.view.custom.XAHH\n\tobjectName \u003d self.view.params.objectName\n\tif(self.view.params.embedded \u003d\u003d True):\n\t\tpageId \u003d self.page.props.pageId\n\t\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\t\t\n\t\tutils.nav.openEQPopup(objectName, tagPath)\n\telse:\n\t\tpayload\u003d{\n\t\t\t\u0027objectName\u0027: objectName,\n\t\t\t\u0027tagPath\u0027: tagPath,\n\t\t\t\u0027modal\u0027: False,\n\t\t\t\u0027resizable\u0027: True,\n\t\t\t\u0027draggable\u0027: True,\n\t\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t\t}\n\t\t}\n\t\tutils.nav.eqPopupMsg(self, payload)\n\t\n\t" + }, + "enabled": false, + "scope": "G", + "type": "script" + }, + { + "config": { + "draggable": true, + "id": "sII9XbeP", + "modal": false, + "overlayDismiss": false, + "position": { + "height": 800, + "width": 1000 + }, + "positionType": "exact", + "resizable": true, + "showCloseIcon": false, + "type": "open", + "viewParams": { + "objectName": "DiscreteIn", + "tagPath": "{view.custom.XAHH}" + }, + "viewPath": "Library/Templates/Base", + "viewportBound": false + }, + "scope": "C", + "type": "popup" + } + ] + } + }, + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "112px" + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.XAHH}+\"/Alarms/Alarm Target Disagree\"" + }, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "var(--state-faulted)" + }, + { + "input": false, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + }, + "props.textStyle.color": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.inTagPath} + {view.custom.JA03}+\"/VAL\"" + }, + "enabled": false, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": "white" + }, + { + "input": true, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "classes": "containers/HoverOver", + "outlineStyle": "none" + }, + "text": "Alarm High High", + "textStyle": { + "color": "white", + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "132px" + }, + "props": { + "justify": "space-around", + "style": { + "gap": 5, + "padding": 5 + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/resource.json new file mode 100644 index 0000000..058b973 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "f8f1d67b9c6f1d58679f269d63868eae3e980bca43b47842c2a5e9b52d40c55b", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/resource.json new file mode 100644 index 0000000..be40afc --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "9b0d4597ed7e0ec14c9bfaf581200d3212a3c1c48d6e9af89d5742dd299e2d5d", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/H2/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/resource.json new file mode 100644 index 0000000..34ace13 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "347e4cd2f249aae1886cadaa01ea93b97671fe27035c9de3d2cac6b206eb80fb", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:34:21Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority v2/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/resource.json new file mode 100644 index 0000000..846b3d1 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "329b6d6e136e0eb526aeaa73c0249971c501fd712cfa36fadd85f8a75932bbfc", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:34:21Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LLS_OperatorPriority/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/resource.json new file mode 100644 index 0000000..472d8f8 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "cd59be5c4a356cf0fbf958095ea6daf525d01233ef1b52817e96e82c336c9c0a", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/thumbnail.png new file mode 100644 index 0000000..9539a1b Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/016e4cecebfdede532fe5176d5e1e95aeec0c8121a283a0abf8667f145894c4e b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/view.json similarity index 99% rename from Gateways/FE/projects/.resources/016e4cecebfdede532fe5176d5e1e95aeec0c8121a283a0abf8667f145894c4e rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/view.json index 551befc..1f2ff7b 100644 --- a/Gateways/FE/projects/.resources/016e4cecebfdede532fe5176d5e1e95aeec0c8121a283a0abf8667f145894c4e +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Body/view.json @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "ValveC", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/ValveC 1" + "objectName": "LV Feeder", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV Feeder 1" }, "propConfig": { "custom.tabsConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/resource.json new file mode 100644 index 0000000..16ae6fb --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "831cdf6b9178310c20ada268af3c481d01d155865b3fa11c17df0c21ae22dc54", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/thumbnail.png new file mode 100644 index 0000000..f4d64a7 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/view.json similarity index 55% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/view.json index a11ab02..e259e83 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Config/view.json @@ -1,127 +1,6 @@ { "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] + "allTags": [] }, "params": { "auth": { @@ -130,17 +9,18 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV Feeder" }, "propConfig": { "custom.allTags": { "binding": { "config": { "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "waitOnAll": true }, + "enabled": false, "transforms": [ { "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", @@ -176,14 +56,13 @@ "config": { "struct": { "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", - "tagPath": "{view.params.tagPath} + \"/Meta/\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "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", + "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\toutput.append(tag)\n\t\t\n\treturn output", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/resource.json new file mode 100644 index 0000000..11a5401 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "2d19d15f6afbbc34e2129a5e576572dfc670563fe57570df291b6d979df66886", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/thumbnail.png new file mode 100644 index 0000000..72f2932 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/view.json new file mode 100644 index 0000000..8dd8481 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Info/view.json @@ -0,0 +1,272 @@ +{ + "custom": { + "allTags": [ + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps A", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps B", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps C", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps N", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Average Phase Current", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Average Phase Voltage", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Frequency", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KVA", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KVAR", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KW", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KW Demand", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Power Factor", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Total KWH", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage A", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage B", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage C", + "options": [] + } + ] + }, + "params": { + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV Feeder 1" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\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 \t#sortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "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}", + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Info", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/resource.json new file mode 100644 index 0000000..59a3855 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "8120b5c6779c966d91dc438d8895d0145f96185dc8fdb79f484f68dd912ce799", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/resource.json new file mode 100644 index 0000000..d5e263f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "cbfb665f8af64542048f0aafc20027b2a1299ebba56eb72b1b4176d01b2f1aee", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV Feeder/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/resource.json new file mode 100644 index 0000000..cb81d99 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "ff546c41e7633e9f133cf566e2133d964b3dbf2d25dbae370cdf4c361b24cde0", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/thumbnail.png new file mode 100644 index 0000000..9539a1b Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/3a027b8f5a3778ca6de95a5f4e56c38e028e610108ac5452e021836e4ad3074c b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/view.json similarity index 99% rename from Gateways/FE/projects/.resources/3a027b8f5a3778ca6de95a5f4e56c38e028e610108ac5452e021836e4ad3074c rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/view.json index 2eaf130..4b6ed29 100644 --- a/Gateways/FE/projects/.resources/3a027b8f5a3778ca6de95a5f4e56c38e028e610108ac5452e021836e4ad3074c +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Body/view.json @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "VSD", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VSD 1" + "objectName": "LV SWBD", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV SWBD 1" }, "propConfig": { "custom.tabsConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/resource.json new file mode 100644 index 0000000..62569e8 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a108727e9b15a01a51eacfc0b68d6ef8068ecba0e815ce5da28fe1f9a7dcac00", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/thumbnail.png new file mode 100644 index 0000000..f4d64a7 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/view.json similarity index 55% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/view.json index a11ab02..bdbd413 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Config/view.json @@ -1,127 +1,6 @@ { "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] + "allTags": [] }, "params": { "auth": { @@ -130,17 +9,18 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV SWBD 1" }, "propConfig": { "custom.allTags": { "binding": { "config": { "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "waitOnAll": true }, + "enabled": false, "transforms": [ { "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", @@ -176,14 +56,13 @@ "config": { "struct": { "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", - "tagPath": "{view.params.tagPath} + \"/Meta/\"" + "tagPath": "{view.params.tagPath} + \"/Config\"" }, "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", + "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\toutput.append(tag)\n\t\t\n\treturn output", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/resource.json new file mode 100644 index 0000000..9bded9f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a5ae4e61ea7f53e9138800fdb2440a6f68957125570a536dca730b4b2bc1602d", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/thumbnail.png new file mode 100644 index 0000000..f43c90f Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/view.json new file mode 100644 index 0000000..278cdb3 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Info/view.json @@ -0,0 +1,448 @@ +{ + "custom": { + "allTags": [ + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps A", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps B", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps C", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps G", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps N", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Average Phase Voltage", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- GFD", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- GFPU", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- INST", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- LTD", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- LTPU", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- Rating Plug Type", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- STD", + "options": [] + }, + { + "dataType": "", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Breaker Setpoint- STPU", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Frequency", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KVA", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KVAR", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KW", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KW Demand", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Power Factor", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Current A", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Current B", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Current C", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Voltage A", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Voltage B", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Voltage C", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Total KWH", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage A", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage B", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage C", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage Sag_Swell", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Waveform Capture", + "options": [] + } + ] + }, + "params": { + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/LV SWBD 1" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\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 \t#sortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "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}", + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Info", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/resource.json new file mode 100644 index 0000000..bf07126 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "62d017cc6e173ae2cb1c1daaf5b1dff83ecb489d1896233bb0e6aa6ef051b436", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/resource.json new file mode 100644 index 0000000..a0ae337 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "210eea9996d4e39a1697809919788d2027ad5e647b35fa86a2b9cd4d389bd81b", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/LV SWBD/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/resource.json new file mode 100644 index 0000000..d2a7c95 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "afdc64ed0fb0095b9e80bba01d5fcb9b9f1dc39c08b61d79096d7fc4573f48b2", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/thumbnail.png new file mode 100644 index 0000000..3478eb4 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/1623e90be0dd5d5ae328ebd73a0fcdfc0134ed4818433cdba730f60cb81e2dad b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/view.json similarity index 99% rename from Gateways/FE/projects/.resources/1623e90be0dd5d5ae328ebd73a0fcdfc0134ed4818433cdba730f60cb81e2dad rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/view.json index 033769a..7948345 100644 --- a/Gateways/FE/projects/.resources/1623e90be0dd5d5ae328ebd73a0fcdfc0134ed4818433cdba730f60cb81e2dad +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Body/view.json @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "Chiller", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller 1" + "objectName": "MV SWGR", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/MV SWGR 1" }, "propConfig": { "custom.tabsConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/resource.json new file mode 100644 index 0000000..1731205 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "f22070cfdfbd4f58a2c24869fdc08e33f2bd93818b8773b65c5b479717ea9e40", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/thumbnail.png new file mode 100644 index 0000000..f4d64a7 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/view.json new file mode 100644 index 0000000..7ac7613 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Config/view.json @@ -0,0 +1,106 @@ +{ + "custom": { + "allTags": [] + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/MV SWGR 1" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath} + \"/Config\"" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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}", + "tagPath": "{view.params.tagPath} + \"/Config\"" + }, + "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\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 Config", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/resource.json new file mode 100644 index 0000000..46db448 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "80b800b28050d30918dbd21b99a1bad92c777f4edfd986a73513d5c319dcbbfe", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/thumbnail.png new file mode 100644 index 0000000..34ce0db Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/view.json new file mode 100644 index 0000000..f478ea0 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Info/view.json @@ -0,0 +1,327 @@ +{ + "custom": { + "allTags": [ + { + "dataType": "Int8", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps A", + "options": [] + }, + { + "dataType": "Int8", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps B", + "options": [] + }, + { + "dataType": "Int8", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps C", + "options": [] + }, + { + "dataType": "Int8", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Amps N", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Average Phase Current", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Frequency", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KVA", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KVAR", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KW", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "KW Demand", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "MVAR", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "MWH", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Power Factor", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Current A", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Current B", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Current C", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Voltage A", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Voltage B", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "THD Voltage C", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Voltage Sag_Swell", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Waveform Capture", + "options": [] + } + ] + }, + "params": { + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/MV SWGR 1" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\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 \t#sortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "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}", + "tagPath": "{view.params.tagPath}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag Info", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/resource.json new file mode 100644 index 0000000..bf07126 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "62d017cc6e173ae2cb1c1daaf5b1dff83ecb489d1896233bb0e6aa6ef051b436", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/resource.json new file mode 100644 index 0000000..21a0014 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "56026a609b8a38f6ca2fc9ab5da879ec1b71f4026885bc890809683e2b7a9b4f", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/MV SWGR/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/resource.json new file mode 100644 index 0000000..7d06e05 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "735f13f37281d13360cd5f739066fde53741eb3c65eaab79fc620569a4d2c6e4", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/resource.json new file mode 100644 index 0000000..47c7585 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "35ed1f762c251bae614a957eda97eb8661f35f344d4cef7379a5b6fdb495008b", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/resource.json new file mode 100644 index 0000000..ba570e0 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "07b7649bfe1f7b97595b8ea9e32d9fe4404e0d64d371a7115116f7b0f8b5dcbf", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:42:28Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/thumbnail.png new file mode 100644 index 0000000..cd80221 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Control/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/resource.json new file mode 100644 index 0000000..533c433 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "2742b5a1b41edaea3779e819389f6cdd028e4ecfeaf02ba1524f55510a539978", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T18:28:38Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/RTU02 (1)/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/resource.json new file mode 100644 index 0000000..7c9867c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "2ab3bf805b8a407c79f17ab1165bc286d5c627cff7614338e1592848c6ba1d28", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/thumbnail.png new file mode 100644 index 0000000..27ffe19 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/b154e3e8d5fbebc9f8beae928da87717e43f27cfa4cb32a4af3b59c43be40e8b b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/view.json similarity index 98% rename from Gateways/FE/projects/.resources/b154e3e8d5fbebc9f8beae928da87717e43f27cfa4cb32a4af3b59c43be40e8b rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/view.json index 0fb8add..2aadfd0 100644 --- a/Gateways/FE/projects/.resources/b154e3e8d5fbebc9f8beae928da87717e43f27cfa4cb32a4af3b59c43be40e8b +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Body/view.json @@ -11,7 +11,9 @@ ] }, "trendConfig": { - "selectedPens": [] + "selectedPens": [ + "Return Air Humidity" + ] } }, "params": { @@ -22,7 +24,7 @@ "control": true }, "objectName": "CRAC", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1240/SATB1_M1_2_MPR1240_CRAH_01" + "tagPath": "[Ignition_Common_IO_Gtwy]MMR1120/SATB1_HS1_MMR1120_CRAC1" }, "propConfig": { "custom.tabsConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/resource.json new file mode 100644 index 0000000..0b35bfe --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "db611b19e257a9c7f8d979cd479de9521b2ed54f7e67a6be1bb3e1de98e1ff8e", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/thumbnail.png new file mode 100644 index 0000000..e7fab86 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/view.json similarity index 59% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/view.json index f101090..38c2df4 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Config/view.json @@ -7,7 +7,7 @@ "instanceStyle": { "classes": "" }, - "name": "High Limit Bld Press Alarm Setpoint" + "name": "Return Air Humidity High Setpoint" }, { "dataType": "Float4", @@ -15,7 +15,7 @@ "instanceStyle": { "classes": "" }, - "name": "High Supply Air Dewpoint" + "name": "Return Air Humidity Low Setpoint" }, { "dataType": "Float4", @@ -23,7 +23,7 @@ "instanceStyle": { "classes": "" }, - "name": "High Supply Air Temperature Setpoint" + "name": "Return Air Temperature High Setpoint" }, { "dataType": "Float4", @@ -31,7 +31,23 @@ "instanceStyle": { "classes": "" }, - "name": "Low Supply Air Temperature Setpoint" + "name": "Return Air Temperature Low Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Temperature High Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Temperature Low Setpoint" } ] }, @@ -42,7 +58,7 @@ "config": true, "control": true }, - "tagPath": "[default]_types_/Objects/Air/DOAS 2" + "tagPath": "[Ignition_Common_IO_Gtwy]MMR1120/SATB1_HS1_MMR1120_CRAC1" }, "propConfig": { "custom.allTags": { @@ -55,7 +71,7 @@ }, "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 \"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", + "code": "\toutput \u003d []\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 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\",\"Int4\")\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", "type": "script" } ], @@ -88,14 +104,13 @@ "config": { "struct": { "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", "tagPath": "{view.params.tagPath} + \"/Config\"" }, "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", + "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\toutput.append(tag)\n\t\t\n\treturn output", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/resource.json new file mode 100644 index 0000000..94915be --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "efc80c9422ae62d199ef82e80605d9d87c907606aaac3e40601390f3d672ae03", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/thumbnail.png new file mode 100644 index 0000000..9b5a1a6 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/view.json new file mode 100644 index 0000000..94a7acc --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Control/view.json @@ -0,0 +1,378 @@ +{ + "custom": { + "OCmd": { + "Reset": 0 + }, + "StsAuto": false + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]RM1152/SATB1_HS1_RM1152_CRAC2" + }, + "propConfig": { + "custom.OCmd": { + "persistent": true + }, + "custom.OCmd.Enable": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Command Enable" + }, + "type": "tag" + } + }, + "custom.StsAuto": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Unit Status" + }, + "type": "tag" + }, + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Enable \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "EnableBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Enable" + }, + "type": "property" + } + } + }, + "props": { + "text": "Enable" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Enable \u003d False" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DisableBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Enable" + }, + "transforms": [ + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": false + }, + { + "input": false, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Disable" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row1" + }, + "position": { + "basis": "375px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "50px", + "shrink": 0 + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Reset \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "ResetBtn" + }, + "position": { + "basis": "100%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + } + }, + "props": { + "primary": false, + "text": "Reset" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row02" + }, + "position": { + "basis": "375px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "50px" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "50%", + "grow": 2 + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Tag Config_0" + }, + "position": { + "shrink": 0 + }, + "propConfig": { + "props.params.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "expression": "{view.params.tagPath}+\u0027/Control/Return Air Temp Setpoint\u0027" + }, + "type": "expr" + } + } + }, + "props": { + "params": { + "dataType": "Int4", + "format": "\u00270,0.##\u0027", + "name": "Return Air Temp Setpoint", + "options": [] + }, + "path": "Library/Framework/Tag Config", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Tag Config" + }, + "position": { + "shrink": 0 + }, + "propConfig": { + "props.params.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "expression": "{view.params.tagPath}+\u0027/Control/Return Air Hum Setpoint\u0027" + }, + "type": "expr" + } + } + }, + "props": { + "params": { + "dataType": "Float4", + "format": "0,0.##", + "name": "Return Air Hum Setpoint", + "options": [] + }, + "path": "Library/Framework/Tag Config" + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "50%", + "grow": 12 + }, + "props": { + "alignContent": "center", + "alignItems": "center", + "direction": "column", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/padded-container", + "gap": "10px" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/resource.json new file mode 100644 index 0000000..b8db831 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "df8c1aa0e42a33ce5f09e53acc5eb8aef7c4fe051ba2d7734ccf0046834c7fe2", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/thumbnail.png new file mode 100644 index 0000000..a01b645 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/view.json similarity index 70% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/view.json index 1244ad0..359b21e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/CRAC/Info/view.json @@ -2,59 +2,160 @@ "custom": { "allTags": [ { - "dataType": "Int4", + "dataType": "Float4", "displaySelection": 0, "format": "0.0", - "instancePosition": 999, + "instancePosition": 3, "instanceStyle": { "classes": "" }, - "name": "Compressor A1 Signal", + "name": "Fan Speed", "options": [] }, { - "dataType": "Int4", + "dataType": "Float4", "displaySelection": 0, "format": "0.0", - "instancePosition": 999, + "instancePosition": 4, "instanceStyle": { "classes": "" }, - "name": "Compressor B1 Signal", + "name": "Return Air Humidity", "options": [] }, { - "dataType": "Int4", - "displaySelection": 0, + "dataType": "Boolean", + "displaySelection": 1, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Condenser A1 Signal", + "name": "DX Cooling Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Dehumidifier State", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Fan Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 5, + "instanceStyle": { + "classes": "" + }, + "name": "Heater 1 Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 6, + "instanceStyle": { + "classes": "" + }, + "name": "Heater 2 Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Humidifier Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Unit Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 2, + "instanceStyle": { + "classes": "" + }, + "name": "Return Air Temperature", "options": [] }, { - "dataType": "Int4", + "dataType": "Float4", "displaySelection": 0, "format": "0.0", - "instancePosition": 999, + "instancePosition": 1, "instanceStyle": { "classes": "" }, - "name": "Condenser B1 Signal", + "name": "Supply Air Temperature", "options": [] }, { - "dataType": "Int4", - "displaySelection": 0, + "dataType": "Boolean", + "displaySelection": 1, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Condenser C Signal", - "options": [] + "name": "Operation Status", + "options": [ + "Primary", + "Stand by" + ] }, { "dataType": "Float4", @@ -64,18 +165,8 @@ "instanceStyle": { "classes": "" }, - "name": "Modulating Hot Gas Reheat Valve Position", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Outside Air Humidity", + "name": "Ckt1 Compressor 1 Runtime", + "numDecimals": 1, "options": [] }, { @@ -90,132 +181,6 @@ "numDecimals": 1, "options": [] }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor A1 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor B1 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor C1 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor C2 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Economizer Enabled Status", - "options": [ - "Off", - "On" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Exhaust Fan Status", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": 0, - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Heating Enabled Status", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Remote Forced Occupied Status", - "options": [ - "Unforced", - "Forced" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status", - "options": [ - "Off", - "Running" - ] - }, { "dataType": "Float4", "displaySelection": 0, @@ -224,73 +189,7 @@ "instanceStyle": { "classes": "" }, - "name": "Discharge A Pressure", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge B Pressure", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge C Pressure", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Outdoor Air Dewpoint", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Outside Air Temperature", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Air Dewpoint", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor Runtime", + "name": "Ckt2 Compressor 1 Runtime", "numDecimals": 1, "options": [] }, @@ -302,7 +201,8 @@ "instanceStyle": { "classes": "" }, - "name": "Supply Air Temperature", + "name": "Heater 1 Runtime", + "numDecimals": 1, "options": [] }, { @@ -313,7 +213,8 @@ "instanceStyle": { "classes": "" }, - "name": "Return Air Humidity", + "name": "Condenser Runtime", + "numDecimals": 1, "options": [] }, { @@ -324,13 +225,14 @@ "instanceStyle": { "classes": "" }, - "name": "Return Air Temperature", + "name": "Humidifier Runtime", + "numDecimals": 1, "options": [] } ] }, "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + "tagPath": "[Ignition_Common_IO_Gtwy]MMR1188/SATB1_HS1_MMR1188_CRAC1" }, "propConfig": { "custom.allTags": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/resource.json new file mode 100644 index 0000000..f1cd7c3 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "8a5308fde30865a7af440f7ce68ad0fe357cb23254fedc4938d3e3946ad6b5a1", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/thumbnail.png new file mode 100644 index 0000000..a969c6a Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/view.json new file mode 100644 index 0000000..4760c50 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Body/view.json @@ -0,0 +1,429 @@ +{ + "custom": { + "tabsConfig": { + "tabs": [ + "Status", + "Control", + "Config", + "Trend", + "Meta", + "Wiki" + ] + }, + "trendConfig": { + "selectedPens": [] + } + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "objectName": "HUM", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" + }, + "propConfig": { + "custom.tabsConfig": { + "persistent": true + }, + "custom.tabsConfig.showConfig": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Config" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.tabsConfig.showControl": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagPath}" + }, + "tagPath": "{1}/Control" + }, + "transforms": [ + { + "expression": "coalesce({value},false) !\u003d false", + "type": "expression" + } + ], + "type": "tag" + } + }, + "custom.trendConfig": { + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Trend" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.selectedPens": { + "binding": { + "config": { + "path": "view.custom.trendConfig.selectedPens" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Config" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + }, + "params": { + "tagPath_2": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_DH5_HS1_GA1182_HUM2" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Meta" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" + }, + "type": "expr" + } + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Wiki" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + } + }, + "props": { + "path": "Library/Framework/Tag Notes/View Notes" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Control" + }, + "propConfig": { + "position.tabIndex": { + "binding": { + "config": { + "expression": "{parent.props.tabs}" + }, + "transforms": [ + { + "code": "\treturn value.indexOf(self.meta.name)", + "type": "script" + } + ], + "type": "expr" + } + }, + "props.params.auth": { + "binding": { + "config": { + "path": "view.params.auth" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Control\u0027)" + }, + "type": "expr" + } + } + }, + "props": { + "loading": { + "order": "with-parent" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "TabContainer" + }, + "position": { + "basis": "300px", + "grow": 1 + }, + "propConfig": { + "props.tabs": { + "binding": { + "config": { + "expression": "{view.custom.tabsConfig}" + }, + "transforms": [ + { + "code": "\ttabs \u003d value[\u0027tabs\u0027]\n\tshowConfig \u003d value[\u0027showConfig\u0027]\n\tshowControl \u003d value[\u0027showControl\u0027]\n\tif not showConfig:\n\t\ttabs.pop(tabs.indexOf(\u0027Config\u0027))\n\tif not showControl:\n\t\ttabs.pop(tabs.indexOf(\u0027Control\u0027))\n\t\n\treturn tabs", + "type": "script" + } + ], + "type": "expr" + } + } + }, + "props": { + "contentStyle": { + "backgroundColor": "var(--container)" + } + }, + "type": "ia.container.tab" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column" + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "enableDisablePen", + "pageScope": true, + "script": "\t# When a pen is selected or de-selected on the trends page, this handler is\n\t# responsible for appending or removing the pen name from the proper trend\n\t# config list.\n\t\n\tname \u003d payload[\u0027name\u0027]\n\tenabledOrDisabled \u003d payload[\u0027enabledOrDisabled\u0027]\n\tgroup \u003d payload[\u0027group\u0027]\n\t\n\tif enabledOrDisabled \u003d\u003d True:\n\t\tif name not in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].append(name)\n\telse:\n\t\tif name in self.view.custom.trendConfig[\u0027selectedPens\u0027]:\n\t\t\tself.view.custom.trendConfig[\u0027selectedPens\u0027].remove(name)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/resource.json new file mode 100644 index 0000000..898efcb --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "0259e86e97cb52cc416e6a8d155130e2f8fe7120e80765592b00aaaa798785cd", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/thumbnail.png new file mode 100644 index 0000000..da43120 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/9733fb40a19cff541497d222a7869dce983745521b0f458377c3fe03b4d7401d b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/view.json similarity index 58% rename from Gateways/FE/projects/.resources/9733fb40a19cff541497d222a7869dce983745521b0f458377c3fe03b4d7401d rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/view.json index f101090..43ec150 100644 --- a/Gateways/FE/projects/.resources/9733fb40a19cff541497d222a7869dce983745521b0f458377c3fe03b4d7401d +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Config/view.json @@ -2,12 +2,44 @@ "custom": { "allTags": [ { - "dataType": "Float4", + "dataType": "Int8", "instancePosition": {}, "instanceStyle": { "classes": "" }, - "name": "High Limit Bld Press Alarm Setpoint" + "name": "Fail Delay SP" + }, + { + "dataType": "Int8", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Fail To Run Delay Setpoint" + }, + { + "dataType": "Int8", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Fail To Stop Delay Setpoint " + }, + { + "dataType": "Boolean", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Reset Required" + }, + { + "dataType": "Boolean", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Runtime Reset" }, { "dataType": "Float4", @@ -15,23 +47,7 @@ "instanceStyle": { "classes": "" }, - "name": "High Supply Air Dewpoint" - }, - { - "dataType": "Float4", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "High Supply Air Temperature Setpoint" - }, - { - "dataType": "Float4", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Low Supply Air Temperature Setpoint" + "name": "Supply Air RH SP" } ] }, @@ -42,7 +58,7 @@ "config": true, "control": true }, - "tagPath": "[default]_types_/Objects/Air/DOAS 2" + "tagPath": "[Ignition_Common_IO_Gtwy]MMR1120/SATB1_HS1_MMR1120_DHUM3" }, "propConfig": { "custom.allTags": { @@ -53,9 +69,10 @@ }, "waitOnAll": true }, + "enabled": false, "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 \"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", + "code": "\toutput \u003d []\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 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\",\"Int4\")\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", "type": "script" } ], @@ -88,14 +105,13 @@ "config": { "struct": { "allTags": "{view.custom.allTags}", - "auth": "{view.params.auth.config}", "tagPath": "{view.params.tagPath} + \"/Config\"" }, "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", + "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\toutput.append(tag)\n\t\t\n\treturn output", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/resource.json new file mode 100644 index 0000000..23e0b0c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "d18740da94f51335134165d7c189739360b44772e6d696d513eafb96a45ee32f", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/thumbnail.png new file mode 100644 index 0000000..4a8e5dd Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/view.json new file mode 100644 index 0000000..e109359 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Control/view.json @@ -0,0 +1,627 @@ +{ + "custom": { + "OCmd": {}, + "OCmd_MB": {} + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]MMR1120/SATB1_HS1_MMR1120_DHUM3" + }, + "propConfig": { + "custom.OCmd": { + "persistent": true + }, + "custom.OCmd.Mode": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/ModeCMD" + }, + "type": "tag" + } + }, + "custom.OCmd.OOS": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/OCmd_OOS" + }, + "type": "tag" + } + }, + "custom.OCmd.Reset": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/OCmd_Reset" + }, + "type": "tag" + } + }, + "custom.OCmd.Run": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/OCmd_Run" + }, + "type": "tag" + } + }, + "custom.OCmd_MB": { + "persistent": true + }, + "custom.OCmd_MB.DHUM_Reset": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/DHUM Reset" + }, + "type": "tag" + } + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Mode \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "AutoBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Mode" + }, + "type": "property" + } + } + }, + "props": { + "text": "Auto" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Mode \u003d False" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "CloseBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Mode" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": true + }, + { + "input": true, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Manual" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row1" + }, + "position": { + "basis": "50px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Run \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "StartBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "expression": "if({view.params.auth.control}, if(!{view.custom.OCmd.Mode}, true, false) , false)" + }, + "type": "expr" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Run" + }, + "type": "property" + } + } + }, + "props": { + "text": "Start" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Run \u003d False" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "StopBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "expression": "if({view.params.auth.control}, if(!{view.custom.OCmd.Mode}, true, false) , false)" + }, + "type": "expr" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd.Run" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": true + }, + { + "input": true, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Stop" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row2" + }, + "position": { + "basis": "50px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd_MB.DHUM_Reset \u003d True\n\tself.view.custom.OCmd.Reset \u003d True\n" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Reset Btn" + }, + "position": { + "basis": "50px" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + } + }, + "props": { + "primary": false, + "text": "Reset" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Left Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Mode \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "RstBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd_MB.Reset" + }, + "type": "property" + } + } + }, + "props": { + "text": "Alarm Reset" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Mode \u003d False" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "EnableBtn" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.primary": { + "binding": { + "config": { + "path": "view.custom.OCmd_MB.Enable" + }, + "transforms": [ + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + }, + "props.text": { + "binding": { + "config": { + "path": "view.custom.OCmd_MB.Enable" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": 1, + "output": "Disable" + }, + { + "input": 0, + "output": "Enable" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Row1" + }, + "position": { + "basis": "50px", + "display": false + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Description", + "tooltip": { + "width": "50%" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "text": "Out of Service", + "textStyle": { + "textAlign": "right" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Val" + }, + "position": { + "basis": "50%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "bidirectional": true, + "path": "view.custom.OCmd.OOS" + }, + "type": "property" + } + } + }, + "props": { + "text": "" + }, + "type": "ia.input.checkbox" + } + ], + "meta": { + "name": "OutOfService" + }, + "position": { + "basis": "50px" + }, + "props": { + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "Right Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/padded-container", + "gap": "10px" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/resource.json new file mode 100644 index 0000000..8aa06de --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "1559983503534ec13dd84e6207de9bb471646c910419b7b54918ca17c4972f86", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/thumbnail.png new file mode 100644 index 0000000..6b07b98 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/view.json similarity index 53% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/view.json index a6594a9..9701d8a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/DHUM/Info/view.json @@ -2,177 +2,73 @@ "custom": { "allTags": [ { - "dataType": "Boolean", - "displaySelection": 1, - "format": 0, - "instancePosition": 0, + "dataType": "Int8", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Breaker Closed Way 01", + "name": "EquipCounts", + "options": [] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Leak Detector", "options": [ - "Not Closed", - "Closed" + "No Leak", + "Leak Detected" + ] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Runtime", + "options": [] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Status Available", + "options": [ + "No Avaliable", + "Available" ] }, { "dataType": "Boolean", "displaySelection": 1, "format": "0.0", - "instancePosition": 1, + "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Breaker Closed Way 02", + "name": "Status Running", "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 6, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Closed Way 03", - "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 7, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Closed Way 04", - "options": [ - "Not Closed", - "Closed" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 4, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 01", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 5, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 02", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 10, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 03", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 11, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Grounded Way 04", - "options": [ - "Not Grounded", - "Grounded" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 2, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 01", - "options": [ - "Not Open", - "Open" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 3, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 02", - "options": [ - "Not Open", - "Open" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 8, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 03", - "options": [ - "Not Open", - "Open" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 9, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Open Way 04", - "options": [ - "Not Open", - "Open" + "Stopped", + "Running" ] } ] }, "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_DS-1A3" + "tagPath": "[Ignition_Common_IO_Gtwy]MMR1120/SATB1_HS1_MMR1120_DHUM3" }, "propConfig": { "custom.allTags": { @@ -210,24 +106,6 @@ "basis": "100%" }, "propConfig": { - "custom.instances": { - "binding": { - "config": { - "struct": { - "allTags": "{view.custom.allTags}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", - "type": "script" - } - ], - "type": "expr-struct" - } - }, "props.instances": { "binding": { "config": { @@ -239,7 +117,7 @@ }, "transforms": [ { - "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", + "code": "\toutput \u003d []\n\tallTags \u003d system.util.jsonDecode(system.util.jsonEncode(value[\u0027allTags\u0027]))\n\tfor tag in allTags:\n\t\ttagName \u003d tag[\"name\"]\n\t\ttag[\"tagPath\"] \u003d value[\"tagPath\"] + \"/\" +tagName\n\t\t\n\t\toutput.append(tag)\n\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted", "type": "script" } ], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/resource.json new file mode 100644 index 0000000..d25afd5 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "73b3318c133ed2af5eccacf68873f389890c1bdf15d4ec89a44488dc537579e4", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/resource.json new file mode 100644 index 0000000..2f0304f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "32dd2afcc6ad9675abba87f77ccf14217b76964c363badd729963d2b598bb614", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/resource.json similarity index 78% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/resource.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/resource.json index bdc3c94..0908782 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "19d41859c904020982f1f0eb277bcb18d4f378c0abfc05384862f4715432cdee", + "lastModificationSignature": "b69a9883bf350d2a630cc36d71116007d9ccfa8189cdb3a47d03c7c6442556d8", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" + "timestamp": "2026-05-02T02:23:33Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/EF_V2/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/resource.json new file mode 100644 index 0000000..c22edee --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "4e5652abc7898db37f3c467472532ca4abe36507b9d381633c075216f0d244da", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:24:18Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/thumbnail.png new file mode 100644 index 0000000..2312c27 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/view.json similarity index 99% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/view.json index eb8be05..4a596de 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/Framework/TrendTable/view.json @@ -248,7 +248,7 @@ } }, "props": { - "formattedValue": "Nov 4, 2024 9:22 AM" + "formattedValue": "Nov 4, 2024 3:22 PM" }, "type": "ia.input.date-time-input" } @@ -310,7 +310,7 @@ } }, "props": { - "formattedValue": "Nov 6, 2024 1:59 AM", + "formattedValue": "Nov 6, 2024 7:59 AM", "inputProps": { "style": { "fontSize": 12 diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/resource.json new file mode 100644 index 0000000..b957b3c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "4c691015874144dccae4818c36ed6677612252ee8e26c49e4daf4fd3976b6488", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/thumbnail.png new file mode 100644 index 0000000..d33da2e Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/1bb353dc61d2c7885e8b64c6bdf2173c6de0e5de870133f7d08204ee9e8ea368 b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/view.json similarity index 98% rename from Gateways/FE/projects/.resources/1bb353dc61d2c7885e8b64c6bdf2173c6de0e5de870133f7d08204ee9e8ea368 rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/view.json index b30d27e..fb847e9 100644 --- a/Gateways/FE/projects/.resources/1bb353dc61d2c7885e8b64c6bdf2173c6de0e5de870133f7d08204ee9e8ea368 +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Body/view.json @@ -1,7 +1,6 @@ { "custom": { "tabsConfig": { - "showConfig": false, "showControl": false, "tabs": [ "Status", @@ -23,8 +22,8 @@ "config": true, "control": true }, - "objectName": "Motor", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH01_MOTOR" + "objectName": "H2", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1151/SATB1_ER1151_H2" }, "propConfig": { "custom.tabsConfig": { @@ -40,7 +39,6 @@ }, "tagPath": "{1}/Config" }, - "enabled": false, "transforms": [ { "expression": "coalesce({value},false) !\u003d false", @@ -130,6 +128,10 @@ "props": { "loading": { "order": "with-parent" + }, + "params": { + "embedded": false, + "objectName": "DiscreteIn" } }, "type": "ia.display.view" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/resource.json new file mode 100644 index 0000000..27a363c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "0dfd1a97f00b75d5f4b618975c5235e810bc1dfd4d89cb6b75bba8408da6f1fc", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/thumbnail.png new file mode 100644 index 0000000..f4d64a7 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/view.json new file mode 100644 index 0000000..539e01c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Config/view.json @@ -0,0 +1,105 @@ +{ + "custom": { + "allTags": [] + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath} + \"/Config\"" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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}", + "tagPath": "{view.params.tagPath} + \"/Config\"" + }, + "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\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 Config", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/resource.json new file mode 100644 index 0000000..9d752c6 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "7055e35a6c08447758f480ebc09296e2bfe4ba6f58193ae33a59ce833e39cbe4", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/thumbnail.png new file mode 100644 index 0000000..68d6841 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/view.json new file mode 100644 index 0000000..9d400e9 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Control/view.json @@ -0,0 +1,125 @@ +{ + "custom": { + "OCmd": {} + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.OCmd": { + "persistent": true + }, + "custom.OCmd.Reset": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Reset" + }, + "type": "tag" + } + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.view.custom.OCmd.Reset \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Reset Btn" + }, + "position": { + "basis": "50px" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + } + }, + "props": { + "primary": false, + "text": "Reset" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "Left Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Right Column" + }, + "position": { + "basis": "50%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/padded-container", + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/resource.json new file mode 100644 index 0000000..61a739c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "5cf6191c43210d1d4ea203978b6e4fcc8771b5fe269a972f3a3c6ddece9ea575", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/thumbnail.png new file mode 100644 index 0000000..ffcd78d Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/view.json new file mode 100644 index 0000000..d3f1178 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/H2 HS/Info/view.json @@ -0,0 +1,467 @@ +{ + "custom": { + "XA": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2/Device Fault", + "XAH": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2/Alarm High", + "XAHH": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2/Alarm High High" + }, + "params": { + "embedded": false, + "objectName": "H2", + "tagPath": "[Ignition_Common_IO_Gtwy]ER1159/SATB1_ER1159_H2" + }, + "propConfig": { + "custom.XA": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "expression": "{value} + \u0027/Device Fault\u0027", + "type": "expression" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.XAH": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "expression": "{value} + \u0027/Alarm High\u0027", + "type": "expression" + } + ], + "type": "property" + }, + "persistent": true + }, + "custom.XAHH": { + "binding": { + "config": { + "path": "view.params.tagPath" + }, + "transforms": [ + { + "expression": "{value} + \u0027/Alarm High High\u0027", + "type": "expression" + } + ], + "type": "property" + }, + "persistent": true + }, + "params.embedded": { + "paramDirection": "input", + "persistent": true + }, + "params.objectName": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "events": { + "dom": { + "onClick": [ + { + "config": { + "script": "\ttagPath \u003d \n\tobjectName \u003d \u0027DiscreteIn\u0027\n\tif(self.view.params.embedded \u003d\u003d True):\n\t\tpageId \u003d self.page.props.pageId\n\t\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\tutils.nav.openEQPopup(objectName, tagPath)\n\telse:\n\t\tpayload\u003d{\n\t\t\t\u0027objectName\u0027: objectName,\n\t\t\t\u0027tagPath\u0027: tagPath,\n\t\t\t\u0027modal\u0027: False,\n\t\t\t\u0027resizable\u0027: True,\n\t\t\t\u0027draggable\u0027: True,\n\t\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t\t}\n\t\t}\n\t\tutils.nav.eqPopupMsg(self, payload)\n\t\n\t" + }, + "enabled": false, + "scope": "G", + "type": "script" + }, + { + "config": { + "draggable": true, + "id": "sII9XbeP", + "modal": false, + "overlayDismiss": false, + "position": { + "height": 800, + "width": 1000 + }, + "positionType": "exact", + "resizable": true, + "showCloseIcon": false, + "type": "open", + "viewParams": { + "objectName": "DiscreteIn", + "tagPath": "{view.custom.XA}" + }, + "viewPath": "Library/Templates/Base", + "viewportBound": false + }, + "scope": "C", + "type": "popup" + } + ] + } + }, + "meta": { + "name": "Label_1" + }, + "position": { + "basis": "112px" + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.XA}+\"/Alarms/Alarm Target Disagree\"" + }, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "var(--state-faulted)" + }, + { + "input": false, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + }, + "props.textStyle.color": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.inTagPath} + {view.custom.JA01}+\"/VAL\"" + }, + "enabled": false, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": "white" + }, + { + "input": true, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "classes": "containers/HoverOver", + "outlineStyle": "none" + }, + "text": "Device Fault", + "textStyle": { + "color": "white", + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": [ + { + "config": { + "script": "\ttagPath \u003d self.view.custom.XAH\n\tobjectName \u003d self.view.params.objectName\n\tif(self.view.params.embedded \u003d\u003d True):\n\t\tpageId \u003d self.page.props.pageId\n\t\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\t\t\n\t\tutils.nav.openEQPopup(objectName, tagPath)\n\telse:\n\t\tpayload\u003d{\n\t\t\t\u0027objectName\u0027: objectName,\n\t\t\t\u0027tagPath\u0027: tagPath,\n\t\t\t\u0027modal\u0027: False,\n\t\t\t\u0027resizable\u0027: True,\n\t\t\t\u0027draggable\u0027: True,\n\t\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t\t}\n\t\t}\n\t\tutils.nav.eqPopupMsg(self, payload)\n\t\n\t" + }, + "enabled": false, + "scope": "G", + "type": "script" + }, + { + "config": { + "draggable": true, + "id": "sII9XbeP", + "modal": false, + "overlayDismiss": false, + "position": { + "height": 800, + "width": 1000 + }, + "positionType": "exact", + "resizable": true, + "showCloseIcon": false, + "type": "open", + "viewParams": { + "objectName": "DiscreteIn", + "tagPath": "{view.custom.XAH}" + }, + "viewPath": "Library/Templates/Base", + "viewportBound": false + }, + "scope": "C", + "type": "popup" + } + ] + } + }, + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "112px" + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.XAH}+\"/Alarms/Alarm Target Disagree\"" + }, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "var(--state-faulted)" + }, + { + "input": false, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + }, + "props.textStyle.color": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.inTagPath} + {view.custom.JA02}+\"/VAL\"" + }, + "enabled": false, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": "white" + }, + { + "input": true, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "classes": "containers/HoverOver", + "outlineStyle": "none" + }, + "text": "Alarm High", + "textStyle": { + "color": "white", + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": [ + { + "config": { + "script": "\ttagPath \u003d self.view.custom.XAHH\n\tobjectName \u003d self.view.params.objectName\n\tif(self.view.params.embedded \u003d\u003d True):\n\t\tpageId \u003d self.page.props.pageId\n\t\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\t\t\n\t\tutils.nav.openEQPopup(objectName, tagPath)\n\telse:\n\t\tpayload\u003d{\n\t\t\t\u0027objectName\u0027: objectName,\n\t\t\t\u0027tagPath\u0027: tagPath,\n\t\t\t\u0027modal\u0027: False,\n\t\t\t\u0027resizable\u0027: True,\n\t\t\t\u0027draggable\u0027: True,\n\t\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t\t}\n\t\t}\n\t\tutils.nav.eqPopupMsg(self, payload)\n\t\n\t" + }, + "enabled": false, + "scope": "G", + "type": "script" + }, + { + "config": { + "draggable": true, + "id": "sII9XbeP", + "modal": false, + "overlayDismiss": false, + "position": { + "height": 800, + "width": 1000 + }, + "positionType": "exact", + "resizable": true, + "showCloseIcon": false, + "type": "open", + "viewParams": { + "objectName": "DiscreteIn", + "tagPath": "{view.custom.XAHH}" + }, + "viewPath": "Library/Templates/Base", + "viewportBound": false + }, + "scope": "C", + "type": "popup" + } + ] + } + }, + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "112px" + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.XAHH}+\"/Alarms/Alarm Target Disagree\"" + }, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "var(--state-faulted)" + }, + { + "input": false, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + }, + "props.textStyle.color": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "expression", + "tagPath": "{view.custom.inTagPath} + {view.custom.JA03}+\"/VAL\"" + }, + "enabled": false, + "transforms": [ + { + "fallback": "purple", + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": "white" + }, + { + "input": true, + "output": "var(--state-standby)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "classes": "containers/HoverOver", + "outlineStyle": "none" + }, + "text": "Alarm High High", + "textStyle": { + "color": "white", + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "132px" + }, + "props": { + "justify": "space-around", + "style": { + "gap": 5, + "padding": 5 + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/resource.json new file mode 100644 index 0000000..414aea8 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "a64569c01473517eb410f2e8a65677aa0f6b22a12c6dee9c8aaa5836870c8b25", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/thumbnail.png new file mode 100644 index 0000000..a6c29b7 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/44d3f858bfaecbef42cad38aa0027d54ed18cba1df57d069810ca2e5ab63cfad b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/view.json similarity index 99% rename from Gateways/FE/projects/.resources/44d3f858bfaecbef42cad38aa0027d54ed18cba1df57d069810ca2e5ab63cfad rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/view.json index a9bf1a0..4b0702f 100644 --- a/Gateways/FE/projects/.resources/44d3f858bfaecbef42cad38aa0027d54ed18cba1df57d069810ca2e5ab63cfad +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Body/view.json @@ -21,8 +21,8 @@ "config": true, "control": true }, - "objectName": "PID_Loop", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/PID_Loop" + "objectName": "RTU02", + "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/RTU-2 1" }, "propConfig": { "custom.tabsConfig": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/resource.json new file mode 100644 index 0000000..036bb70 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "17d952554fe6a29207798277396f1b1cb5610770a7bfa0619cd23962f5926223", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/thumbnail.png new file mode 100644 index 0000000..9b318fa Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/view.json new file mode 100644 index 0000000..354b1ee --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Config/view.json @@ -0,0 +1,956 @@ +{ + "custom": { + "airOvr": false, + "allTags": [ + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Dehumidifier High Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Dehumidifier Low Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Economizer Enthalpy Enable SP" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Economizer Control Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Temp Override" + }, + { + "dataType": "", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Emergency Override Alarm Delay Minutes" + }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Day of Week Enable" + }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Occupancy Mode Start Time" + }, + { + "dataType": "Boolean", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Temp Override En" + }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Unoccupancy Mode Start Time" + }, + { + "dataType": "Int8", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Emergency Override Alarm Delay" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Space Temperature Setpoint" + } + ], + "weekDay": 254 + }, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" + }, + "propConfig": { + "custom.airOvr": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Config/Supply Air Temp Override En" + }, + "type": "tag" + }, + "persistent": true + }, + "custom.allTags": { + "binding": { + "config": { + "struct": { + "tagPath": "{view.params.tagPath} + \"/Config\"" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.weekDay": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Config/Day of Week Enable" + }, + "type": "tag" + }, + "persistent": true + }, + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "FlexRepeater" + }, + "position": { + "grow": 1 + }, + "propConfig": { + "custom.SA_Ovr": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Config/Supply Air Temp Override" + }, + "type": "tag" + } + }, + "custom.SA_Ovr_En": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Config/Supply Air Temp Override EN" + }, + "transforms": [ + { + "code": "\tif value \u003d\u003d False:\n\t\tself.custom.SA_Ovr \u003d 0\n\treturn value", + "type": "script" + } + ], + "type": "tag" + } + }, + "props.instances": { + "binding": { + "config": { + "struct": { + "allTags": "{view.custom.allTags}", + "auth": "{view.params.auth.config}", + "tagPath": "{view.params.tagPath} + \"/Config\"" + }, + "waitOnAll": true + }, + "enabled": false, + "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.instances[0].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[10].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[1].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[2].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[3].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[4].enabled": { + "binding": { + "config": { + "struct": { + "airOv": "{view.custom.airOvr}", + "auth": "{view.params.auth.config}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "expression": "{value}[\"airOv\"] \u0026\u0026 {value}[\"auth\"]", + "type": "expression" + } + ], + "type": "expr-struct" + } + }, + "props.instances[5].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[6].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "enabled": false, + "type": "property" + } + }, + "props.instances[7].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[8].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.instances[9].enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + } + }, + "props": { + "alignContent": "flex-start", + "elementPosition": { + "basis": "50%", + "grow": 0 + }, + "instances": [ + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 100, + "min": 0, + "name": "Dehumidifier High Setpoint", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Dehumidifier High Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 100, + "min": 0, + "name": "Dehumidifier Low Setpoint", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Dehumidifier Low Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 35, + "min": 25, + "name": "Economizer Enthalpy Enable SP", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Economizer Enthalpy Enable SP" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 80, + "min": -30, + "name": "Economizer Enable Setpoint", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Economizer Enable Setpoint" + }, + { + "dataType": "Float4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 200, + "min": 0, + "name": "Supply Air Temp Override", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Supply Air Temp Override" + }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 9999, + "min": 0, + "name": "Emergency Override Alarm Delay Minutes", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Emergency Override Alarm Delay Minutes", + "visible": true + }, + { + "dataType": "Int4", + "enabled": true, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 120, + "min": 0, + "name": "Space Temperature Setpoint", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Space Temperature Setpoint" + }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 9999, + "min": 0, + "name": "Occupancy Mode Start Time", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Occupancy Mode Start Time" + }, + { + "dataType": "Boolean", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 9999, + "min": -9999, + "name": "Supply Air Temp Override En", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Supply Air Temp Override En" + }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "min": 0, + "name": "Unoccupancy Mode Start Time", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Unoccupancy Mode Start Time" + }, + { + "dataType": "Int8", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "min": 0, + "name": "Emergency Override Alarm Delay", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02/Config/Emergency Override Alarm Delay" + } + ], + "loading": { + "order": "with-parent" + }, + "path": "Library/Framework/Tag ConfigV2", + "style": { + "gap": "10px 0", + "padding": "10px" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + }, + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Day of the Week Enable" + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 1\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)\n\t\n\t" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Monday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Monday" + }, + "type": "ia.input.checkbox" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 2\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Tuesday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},2)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Tuesday" + }, + "type": "ia.input.checkbox" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 3\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Wednesday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},3)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Wednesday" + }, + "type": "ia.input.checkbox" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 4\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Thursday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},4)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Thursday" + }, + "type": "ia.input.checkbox" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 5\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Friday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},5)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Friday" + }, + "type": "ia.input.checkbox" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 6\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Saturday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},6)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Saturday" + }, + "type": "ia.input.checkbox" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tposition \u003d 7\n\tself.view.custom.weekDay \u003d self.view.custom.weekDay ^ (int(1) \u003c\u003c position)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Sunday Chbox" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.config" + }, + "type": "property" + } + }, + "props.selected": { + "binding": { + "config": { + "path": "view.custom.weekDay" + }, + "transforms": [ + { + "expression": "getBit({value},7)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": false + }, + { + "input": 1, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "text": "Sunday" + }, + "type": "ia.input.checkbox" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "alignContent": "center", + "alignItems": "center", + "justify": "space-evenly", + "style": { + "gap": "5px", + "padding": "5px" + }, + "wrap": "wrap" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "100%" + }, + "props": { + "direction": "column", + "style": { + "border": "1px solid var(--border)", + "gap": "10px 0", + "padding": "10px" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "classes": "containers/padded-container" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/resource.json new file mode 100644 index 0000000..3f5da39 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "09a104765216a7136089bcf58c17e6274f2e1d941dc36b4acacb712b4912a07a", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/view.json new file mode 100644 index 0000000..e749a94 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Control/view.json @@ -0,0 +1,322 @@ +{ + "custom": {}, + "params": { + "auth": { + "almAck": true, + "almShelve": true, + "config": true, + "control": true + }, + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" + }, + "propConfig": { + "params.auth": { + "paramDirection": "input", + "persistent": true + }, + "params.tagPath": { + "paramDirection": "input", + "persistent": true + } + }, + "props": {}, + "root": { + "children": [ + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "40%" + }, + "props": { + "text": "Schedule Override" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Dropdown" + }, + "position": { + "basis": "60%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Schedule Override Command" + }, + "type": "tag" + } + } + }, + "props": { + "options": [ + { + "label": "Auto", + "value": 0 + }, + { + "label": "Force Occupied", + "value": 1 + }, + { + "label": "Force Unoccupied", + "value": 2 + } + ] + }, + "type": "ia.input.dropdown" + } + ], + "meta": { + "name": "FlexContainer" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "LeftContainer" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column", + "style": { + "gap": "10px" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "40%" + }, + "props": { + "text": "HVAC Override" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Dropdown" + }, + "position": { + "basis": "60%" + }, + "propConfig": { + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/HVAC Override Cmd" + }, + "type": "tag" + } + } + }, + "props": { + "options": [ + { + "label": "Auto", + "value": 0 + }, + { + "label": "Vent", + "value": 1 + }, + { + "label": "Cool", + "value": 2 + }, + { + "label": "Heat", + "value": 3 + }, + { + "label": "Vent Dehum", + "value": 4 + }, + { + "label": "Cool Dehum", + "value": 5 + }, + { + "label": "Heat Dehum", + "value": 6 + } + ] + }, + "type": "ia.input.dropdown" + } + ], + "meta": { + "name": "Dropdown" + }, + "position": { + "display": false + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Tag ConfigV2" + }, + "propConfig": { + "props.params.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "expression": "{view.params.tagPath}+\u0027/Control/Emergency Override\u0027" + }, + "type": "expr" + } + } + }, + "props": { + "params": { + "dataType": "Boolean", + "name": "Emergency Override", + "options": [] + }, + "path": "Library/Framework/Tag ConfigV2" + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "200px", + "grow": 1 + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Tag ConfigV2" + }, + "propConfig": { + "props.params.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.params.tagPath": { + "binding": { + "config": { + "expression": "{view.params.tagPath}+\u0027/Control/Occupancy Override\u0027" + }, + "type": "expr" + } + } + }, + "props": { + "params": { + "dataType": "Boolean", + "name": "Occupancy Override", + "options": [] + }, + "path": "Library/Framework/Tag ConfigV2" + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "200px", + "grow": 1 + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "RightContainer" + }, + "position": { + "grow": 1 + }, + "props": { + "style": { + "gap": "10px" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/padded-container", + "gap": "10px", + "overflow": "visible" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/resource.json new file mode 100644 index 0000000..22d6d0f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "0f96313093c8779d121fdfe063ff8820f1fb516e2478632a1daa1a27f2c65458", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/thumbnail.png new file mode 100644 index 0000000..ed73a5d Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/.resources/30896bf9921ad5d277cadfe507e732f3355fa15dd944da7fee0da45b27bf7c1f b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/view.json similarity index 66% rename from Gateways/FE/projects/.resources/30896bf9921ad5d277cadfe507e732f3355fa15dd944da7fee0da45b27bf7c1f rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/view.json index 1244ad0..8e53d0c 100644 --- a/Gateways/FE/projects/.resources/30896bf9921ad5d277cadfe507e732f3355fa15dd944da7fee0da45b27bf7c1f +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/RTU02/Info/view.json @@ -2,58 +2,160 @@ "custom": { "allTags": [ { - "dataType": "Int4", + "dataType": "Float4", "displaySelection": 0, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Compressor A1 Signal", + "name": "Compressor A VFD Speed", "options": [] }, { - "dataType": "Int4", + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Compressor A1 Running", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Compressor A2 Running", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Float4", "displaySelection": 0, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Compressor B1 Signal", + "name": "Compressor B VFD Speed", "options": [] }, { - "dataType": "Int4", + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Compressor B1 Running", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Compressor B2 Running", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Float4", "displaySelection": 0, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Condenser A1 Signal", + "name": "Compressor Runtime", "options": [] }, { - "dataType": "Int4", - "displaySelection": 0, + "dataType": "Int8", + "displaySelection": 1, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Condenser B1 Signal", - "options": [] + "name": "Control Mode", + "options": [ + "Cooling", + "SA Tempering", + "OA Control", + "RA Constant Volume", + "Space Temp Const Vol", + "Space Temp With OA", + "Single Zone VAV" + ] }, { - "dataType": "Int4", + "dataType": "Int8", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Control Status", + "options": [ + "Unoccupied", + "Occupied", + "Override MOde", + "Holiday Unoccupied", + "Holiday Occupaied", + "Forced Occupied", + "Force Unoccupied", + "Remote Contact Occupied", + "Reserved", + "Reserved", + "Reserved", + "OA Damper Calibration" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Economizer Enabled Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Float4", "displaySelection": 0, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Condenser C Signal", + "name": "Economizer Position", "options": [] }, { @@ -64,7 +166,74 @@ "instanceStyle": { "classes": "" }, - "name": "Modulating Hot Gas Reheat Valve Position", + "name": "Economizer Position Feedback", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Fan Runtime", + "options": [] + }, + { + "dataType": "Int4", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "HVAC Mode", + "options": [ + "Off", + "Vent Mode", + "Cooling mode", + "Heating Mode", + "Vent RH Mode", + "Cooling RH Mode", + "Heating RH Mode", + "Warm Up Mode", + "Purge Mode", + "Defrost Mode", + "Cool Down Mode" + ] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Heat Position", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Outside Air Dewpoint", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Outside Air Flow", "options": [] }, { @@ -78,188 +247,6 @@ "name": "Outside Air Humidity", "options": [] }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Fan Runtime", - "numDecimals": 1, - "options": [] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor A1 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor B1 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor C1 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Compressor C2 Enabled", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Economizer Enabled Status", - "options": [ - "Off", - "On" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Exhaust Fan Status", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": 0, - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Heating Enabled Status", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Remote Forced Occupied Status", - "options": [ - "Unforced", - "Forced" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status", - "options": [ - "Off", - "Running" - ] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge A Pressure", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge B Pressure", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge C Pressure", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Outdoor Air Dewpoint", - "options": [] - }, { "dataType": "Float4", "displaySelection": 0, @@ -279,7 +266,32 @@ "instanceStyle": { "classes": "" }, - "name": "Supply Air Dewpoint", + "name": "Reheat Valve Position", + "options": [] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Remote Forced Occupied Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Return Air Damper", "options": [] }, { @@ -290,19 +302,7 @@ "instanceStyle": { "classes": "" }, - "name": "Compressor Runtime", - "numDecimals": 1, - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Air Temperature", + "name": "Return Air Enthalpy", "options": [] }, { @@ -326,11 +326,100 @@ }, "name": "Return Air Temperature", "options": [] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Running Status", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Space Dewpoint", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Space Humidity", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Space Temperature", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Dewpoint", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Humidity", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Supply Air Temperature", + "options": [] } + ], + "controlMode": [ + "Cooling", + "SA Tempering", + "OA Control", + "RA Constant Volume", + "Space Temp Const Vol", + "Space Temp With OA", + "Single Zone VAV" ] }, "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" }, "propConfig": { "custom.allTags": { @@ -344,7 +433,7 @@ "enabled": false, "transforms": [ { - "code": "\toutput \u003d []\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 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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", + "code": "\toutput \u003d []\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 \t#sortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\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 if dataType \u003d\u003d \u0027Boolean\u0027:\n \tdisplaySel \u003d 1\n else:\n \tdisplaySel \u003d 0\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": 999,\n \"name\": name,\n \"dataType\": dataType,\n \"displaySelection\": displaySel,\n \"format\": \"0.0\",\n \"options\": []\n }\n output.append(instance)\n\t# Return or process the sorted output\n\treturn output", "type": "script" } ], @@ -352,6 +441,9 @@ }, "persistent": true }, + "custom.controlMode": { + "persistent": true + }, "params.tagPath": { "paramDirection": "input", "persistent": true diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/resource.json new file mode 100644 index 0000000..63e8dbd --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "1e0a0ef95d5c2809ada23775c66235edd6a0be9afff5caa24030d0298006ad5f", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/thumbnail.png new file mode 100644 index 0000000..dd61cb4 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/view.json similarity index 99% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/view.json index 3ded84c..b6129b4 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Body/view.json @@ -449,8 +449,7 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - }, - "currentTabIndex": 6 + } }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/resource.json new file mode 100644 index 0000000..2eb3d19 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "cabcb4fda29255369396ce13f90f810e20889c202a2c89aeddd5eeb25eb42819", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/resource.json new file mode 100644 index 0000000..a618e4c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "7c1c26b9ffa5aa8fccdd2043c7c676a36c5def28243366682f3ed712efd63ee3", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Control/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/resource.json new file mode 100644 index 0000000..bfc0c13 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "862fabb2454b45382c739ec7d8ff6651e11e89650690339072e94bfcd0c00f25", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack1 Batt/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/resource.json new file mode 100644 index 0000000..4559803 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "4785477a0ebccfd87899d7c3744cfeb8359e0b0f6d68c78af342618ec401dc8b", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack2 Batt/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/resource.json new file mode 100644 index 0000000..bf360d5 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "692c212e51c3d5a79b47f0a90ca27c146e7eccfa619ca5f8d5962f3c46de5627", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info Rack3 Batt/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/resource.json new file mode 100644 index 0000000..783571e --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "146a64f9e743fbe9bad5b5af28c1f08ae1076c2b9b97f4ed974930c61956864e", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:35:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/UPS_HS/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/resource.json new file mode 100644 index 0000000..2f60705 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "37ef8d54baaf1887c7132670a489ad4e25fa32b2a052e796f12451e8d0e66c43", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Body/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/resource.json new file mode 100644 index 0000000..0c8eb5c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "4b580b61164df5a76a348c869e233f63c9a51f830710854288febdfd09a03c3d", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/thumbnail.png new file mode 100644 index 0000000..0f7b1bd Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/view.json similarity index 90% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/view.json index 4664422..4c02fe8 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Config/view.json @@ -2,73 +2,27 @@ "custom": { "Monday": 0, "allTags": [ - { - "dataType": "Float4", - "instancePosition": 4, - "instanceStyle": { - "classes": "" - }, - "name": "Air Flow Out of Range SP" - }, - { - "dataType": "Float4", - "instancePosition": 1, - "instanceStyle": { - "classes": "" - }, - "name": "Max Cooling Airflow" - }, - { - "dataType": "Float4", - "instancePosition": 3, - "instanceStyle": { - "classes": "" - }, - "name": "Max Heating Airflow" - }, - { - "dataType": "Float4", - "instancePosition": 2, - "instanceStyle": { - "classes": "" - }, - "name": "Min Cooling Airflow" - }, - { - "dataType": "Float4", - "instancePosition": 5, - "instanceStyle": { - "classes": "" - }, - "name": "Min Heating Airflow" - }, { "dataType": "Int8", - "instancePosition": 1, - "instanceStyle": { - "classes": "" - }, - "name": "Occupied Deadband Setpoint" - }, - { - "dataType": "Int8", - "instancePosition": 2, - "instanceStyle": { - "classes": "" - }, - "name": "Unoccupied Deadband Setpoint" - }, - { - "dataType": "Int8", - "instancePosition": 7, + "instancePosition": {}, "instanceStyle": { "classes": "" }, + "max": 240, + "min": 0, "name": "Occupancy Minimum Time" }, + { + "dataType": "Int4", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "name": "Occuppacy Mode Start Time" + }, { "dataType": "Int8", - "instancePosition": 7, + "instancePosition": {}, "instanceStyle": { "classes": "" }, @@ -76,37 +30,37 @@ }, { "dataType": "Int4", - "instancePosition": 8, + "instancePosition": {}, "instanceStyle": { "classes": "" }, - "name": "Occuppacy Mode Start Time" - }, - { - "dataType": "Int4", - "instancePosition": 9, - "instanceStyle": { - "classes": "" - }, - "name": "Unoccupied Mode Start Time", - "visible": false + "name": "Unoccupied Mode Start Time" }, { "dataType": "Float4", - "instancePosition": 6, + "instancePosition": {}, "instanceStyle": { "classes": "" }, "name": "Standby Mode Offset" }, { - "dataType": "Int4", - "instancePosition": 9, + "dataType": "Float4", + "instancePosition": {}, "instanceStyle": { "classes": "" }, - "name": "Unoccupied Mode Start Time", - "visible": true + "name": "Air Flow Out of Range SP" + }, + { + "dataType": "Int8", + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "max": 10, + "min": 0, + "name": "Occupied Deadband Setpoint" } ], "weekDay": 254 @@ -118,7 +72,7 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" + "tagPath": "[Ignition_Common_IO_Gtwy]RM1116/SATB1_HS1_RM1116_VAV01" }, "propConfig": { "custom.allTags": { @@ -132,7 +86,7 @@ "enabled": false, "transforms": [ { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": 999,\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", + "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", "type": "script" } ], @@ -190,7 +144,7 @@ }, "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\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted\t", + "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" } ], @@ -208,7 +162,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Framework/Tag ConfigV2", + "path": "Library/Framework/Tag Config", "style": { "gap": "10px 0", "overflow": "visible", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/resource.json new file mode 100644 index 0000000..feab13c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "4af45f3a0eec4612517916c67e23f8a2bb2b1e09b86d7e95268b8934ee1ed696", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/thumbnail.png new file mode 100644 index 0000000..0e636ae Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/view.json similarity index 76% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/view.json index 6bfdcc5..2f033c2 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Control/view.json @@ -2,7 +2,7 @@ "custom": { "Mode": 1, "OCmd": {}, - "damperCmd": 4 + "damperCmd": 1 }, "params": { "auth": { @@ -11,7 +11,7 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" + "tagPath": "[Ignition_Common_IO_Gtwy]RM1121/SATB1_HS1_RM1121_VAV19" }, "propConfig": { "custom.Mode": { @@ -23,7 +23,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/User Control Mode" + "tagPath": "{tagPath}/Config/User Control Command" }, "type": "tag" }, @@ -55,7 +55,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Cmd_OccMode" + "tagPath": "{tagPath}/Control/OCmd_OccMode" }, "type": "tag" } @@ -69,7 +69,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Cmd_UnOccMode" + "tagPath": "{tagPath}/Control/OCmd_UnOccMode" }, "type": "tag" } @@ -83,7 +83,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Damper Override mode" + "tagPath": "{tagPath}/Control/Damper Override Command" }, "type": "tag" }, @@ -110,7 +110,7 @@ "dom": { "onClick": { "config": { - "script": "\tself.view.custom.OCmd.ModeCMD \u003d True\n\t\n" + "script": "\tself.view.custom.OCmd.ModeCMD \u003d True" }, "scope": "G", "type": "script" @@ -118,7 +118,7 @@ } }, "meta": { - "name": "AutoModeBtn", + "name": "AutoBtn", "tooltip": { "enabled": true } @@ -135,7 +135,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/OCmd_Mode.OpcItemPath" + "tagPath": "{tagPath}/Control/Ocmd_Mode.OpcItemPath" }, "type": "tag" } @@ -143,14 +143,15 @@ "props.enabled": { "binding": { "config": { - "expression": "{view.params.auth.control}" + "path": "view.params.auth.control" }, - "type": "expr" + "type": "property" } }, "props.primary": { "binding": { "config": { + "bidirectional": true, "path": "view.custom.OCmd.ModeCMD" }, "type": "property" @@ -158,7 +159,7 @@ } }, "props": { - "text": "Auto/Schedule" + "text": "Auto" }, "type": "ia.input.button" }, @@ -175,7 +176,7 @@ } }, "meta": { - "name": "ManualOccBtn", + "name": "ManualBtn", "tooltip": { "enabled": true } @@ -192,7 +193,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/OCmd_Mode.OpcItemPath" + "tagPath": "{tagPath}/Control/Ocmd_Mode.OpcItemPath" }, "type": "tag" } @@ -200,17 +201,35 @@ "props.enabled": { "binding": { "config": { - "expression": "{view.params.auth.control}" + "path": "view.params.auth.control" }, - "type": "expr" + "type": "property" } }, "props.primary": { "binding": { "config": { - "expression": "!{view.custom.OCmd.ModeCMD}" + "path": "view.custom.OCmd.ModeCMD" }, - "type": "expr" + "transforms": [ + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": false, + "output": true + }, + { + "input": true, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" } } }, @@ -221,7 +240,7 @@ } ], "meta": { - "name": "Row0" + "name": "Row1" }, "position": { "basis": "50px" @@ -266,7 +285,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Cmd_OccMode.OpcItemPath" + "tagPath": "{tagPath}/Control/OCmd_OccMode.OpcItemPath" }, "type": "tag" } @@ -323,7 +342,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Cmd_UnOccMode.OpcItemPath" + "tagPath": "{tagPath}/Control/OCmd_UnOccMode.OpcItemPath" }, "type": "tag" } @@ -352,7 +371,7 @@ } ], "meta": { - "name": "Row1" + "name": "Row01" }, "position": { "basis": "50px" @@ -398,7 +417,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/User Control Mode.OpcItemPath" + "tagPath": "{tagPath}/Config/User Control Command.OpcItemPath" }, "type": "tag" } @@ -474,10 +493,9 @@ }, { "meta": { - "name": "Dropdown_0", + "name": "Dropdown", "tooltip": { - "enabled": true, - "text": "Min or Max airflow depends on Current Mode. Example: If heat demand \u003e0 then Min or Max Heating Airflow." + "enabled": true } }, "position": { @@ -492,12 +510,19 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Damper Override mode.OpcItemPath" + "tagPath": "{tagPath}/Config/Damper Override Command.OpcItemPath" }, - "enabled": false, "type": "tag" } }, + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, "props.value": { "binding": { "config": { @@ -515,25 +540,22 @@ "value": 1 }, { - "label": "Full OPEN", + "label": "Open", "value": 2 }, { - "label": "Full CLOSE", + "label": "Close", "value": 3 }, { - "label": "Min Airflow", + "label": "Min Cool", "value": 4 }, { - "label": "Max Air Flow", + "label": "Max Cool", "value": 5 } - ], - "placeholder": { - "text": "Damper Override Command of Current Mode" - } + ] }, "type": "ia.input.dropdown" } @@ -717,7 +739,7 @@ "basis": "50%" }, "props": { - "text": "Unoccupied Temperature Setpoint", + "text": "Unoccupied Cooling Setpoint", "textStyle": { "textAlign": "right" } @@ -727,9 +749,7 @@ { "meta": { "name": "NumericEntryField", - "tooltip": { - "enabled": true - } + "tooltip": {} }, "position": { "basis": "35%", @@ -744,7 +764,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Unoccupied Temperature SP.OpcItemPath" + "tagPath": "{tagPath}/Control/Unoccupied Cool SP.OpcItemPath" }, "type": "tag" } @@ -757,6 +777,14 @@ "type": "property" } }, + "props.inputBounds.minimum": { + "binding": { + "config": { + "path": ".../Row4/NumericEntryField.props.value" + }, + "type": "property" + } + }, "props.style.color": { "binding": { "config": { @@ -774,7 +802,149 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Unoccupied Temperature SP" + "tagPath": "{tagPath}/Control/Unoccupied Cool SP" + }, + "type": "tag" + } + } + }, + "props": { + "inputBounds": { + "maximum": 104 + }, + "spinner": { + "enabled": false + }, + "style": { + "fontWeight": "bold", + "max-height": "40px", + "min-height": "30px" + } + }, + "type": "ia.input.numeric-entry-field" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "10%" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Unoccupied Cool SP.EngUnit" + }, + "type": "tag" + } + } + }, + "props": { + "style": { + "color": "var(--units-color)", + "textAlign": "left" + }, + "textStyle": { + "textAlign": "right" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "Row3" + }, + "position": { + "basis": "58px" + }, + "props": { + "style": { + "gap": "10px" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "50%" + }, + "props": { + "text": "Unoccupied Heating Setpoint", + "textStyle": { + "textAlign": "right" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "NumericEntryField", + "tooltip": {} + }, + "position": { + "basis": "35%", + "grow": 1 + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Unoccupied Heat SP.OpcItemPath" + }, + "type": "tag" + } + }, + "props.enabled": { + "binding": { + "config": { + "path": "view.params.auth.control" + }, + "type": "property" + } + }, + "props.inputBounds.maximum": { + "binding": { + "config": { + "path": ".../Row3/NumericEntryField.props.value" + }, + "type": "property" + } + }, + "props.style.color": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027\u0027)" + }, + "type": "expr" + } + }, + "props.value": { + "binding": { + "config": { + "bidirectional": true, + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Control/Unoccupied Heat SP" }, "type": "tag" } @@ -782,7 +952,6 @@ }, "props": { "inputBounds": { - "maximum": 104, "minimum": 50 }, "spinner": { @@ -813,7 +982,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Unoccupied Temperature SP.EngUnit" + "tagPath": "{tagPath}/Control/Unoccupied Heat SP.EngUnit" }, "type": "tag" } @@ -832,7 +1001,7 @@ } ], "meta": { - "name": "Row5" + "name": "Row4" }, "position": { "basis": "58px" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/resource.json new file mode 100644 index 0000000..50b7c03 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "951d705c460f7c9b515a4c50980530e31153a1912025dd80ca428aefd380aa9a", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:23:34Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/thumbnail.png new file mode 100644 index 0000000..bfd5d41 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/view.json similarity index 90% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/view.json index 9394061..70852df 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/Templates/VAV/Info/view.json @@ -31,7 +31,7 @@ "instanceStyle": { "classes": "" }, - "name": "Control SP", + "name": "Control Setpoint", "options": [] }, { @@ -75,7 +75,7 @@ "instanceStyle": { "classes": "" }, - "name": "Max allowed Temperature", + "name": "Maximum Cooling Airflow", "options": [] }, { @@ -86,37 +86,43 @@ "instanceStyle": { "classes": "" }, - "name": "Min allowed Temperature", + "name": "Maximum Heat Airflow", "options": [] }, { - "dataType": "Int4", - "displaySelection": 1, + "dataType": "Float4", + "displaySelection": 0, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Mode", - "options": [ - "No Mode", - "Occupancy", - "Unoccupied", - "Standby Mode" - ] + "name": "Minimum Cooling Airflow", + "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Minimum Heat Airflow", + "options": [] }, { "dataType": "Boolean", "displaySelection": 1, - "format": "0.0", + "format": 0, "instancePosition": 999, "instanceStyle": { "classes": "" }, "name": "Occupancy Sensor", "options": [ - "No Movement", - "Activity" + "Off", + "On" ] }, { @@ -130,34 +136,6 @@ "name": "Space Temperature", "options": [] }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Stage-1 Heater Sts", - "options": [ - "Off", - "On" - ] - }, - { - "dataType": "Boolean", - "displaySelection": 1, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Stage-2 Heater Sts", - "options": [ - "Off", - "On" - ] - }, { "dataType": "Float4", "displaySelection": 0, @@ -168,11 +146,22 @@ }, "name": "Supply Air Temperature", "options": [] + }, + { + "dataType": "Float4", + "displaySelection": 0, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Temperature Setpoint", + "options": [] } ] }, "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" + "tagPath": "[Ignition_Common_IO_Gtwy]RM1116/SATB1_HS1_RM1116_VAV01" }, "propConfig": { "custom.allTags": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/resource.json new file mode 100644 index 0000000..fa4c608 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "d60613614a153062110270707a2ee1f962e5d1bfafb94ed97676b6d68dbe5a68", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:28:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Archive/VAV_FirstFloor/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/resource.json index 72ea18f..c91bf49 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c2ae7ceef07a23eb1bc5d99108f249f7f04fce1f76bbe375c533b1b6059fdae3", + "lastModificationSignature": "558a752df58c762318a5982a291965246c00c9655be6cac49c002bb9009a598c", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-23T19:25:29Z" + "timestamp": "2026-05-02T02:06:37Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/thumbnail.png index 7b04d44..efb0834 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/view.json index d2dbddb..b7a7fce 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/test/view.json @@ -29,7 +29,10 @@ "params": { "color": "green" }, - "path": "Testing/Border CSS" + "path": "Testing/Border CSS", + "style": { + "boxShadow": "inset 0 0 10px rgba(25, 255, 25, 0.8)" + } }, "type": "ia.display.view" }, @@ -73,7 +76,7 @@ "props": { "justify": "center", "style": { - "gap": "10px" + "gap": "80px" } }, "type": "ia.container.flex" @@ -129,6 +132,24 @@ } }, "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_1" + }, + "position": { + "basis": "85px" + }, + "props": { + "style": { + "boxShadow": "inset 0 0 10px rgba(25, 255, 25, 0.8)", + "outlineColor": "#2979FF", + "outlineStyle": "solid", + "outlineWidth": 2 + }, + "text": "Label" + }, + "type": "ia.display.label" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json new file mode 100644 index 0000000..553d103 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "8fbaa2746444344baea75771f6765a6e0bdc210a6bfc4cd93ae53614058e8f33", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:06:35Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png new file mode 100644 index 0000000..cb8b1ba Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json new file mode 100644 index 0000000..c1f64f4 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testCoord/view.json @@ -0,0 +1,316 @@ +{ + "custom": {}, + "params": {}, + "props": {}, + "root": { + "children": [ + { + "meta": { + "name": "MovingAnalogIndicator" + }, + "position": { + "height": 223, + "rotate": { + "anchor": "140% 62%" + }, + "width": 71, + "x": 235, + "y": 326 + }, + "props": { + "defaultRangeColor": "green", + "desiredHigh": 65, + "desiredLow": 40, + "desiredRangeColor": "blue", + "highAlarm": 90, + "highHighAlarm": 95, + "highInterlock": "", + "inactiveAlarmColor": "yellow", + "level1AlarmColor": "red", + "level2AlarmColor": "orange", + "lowAlarm": 10, + "lowInterlock": null, + "lowLowAlarm": 5, + "processValue": 95, + "setpointColor": "purple", + "setpointValue": 50 + }, + "type": "ia.display.moving-analog-indicator" + }, + { + "meta": { + "name": "MovingAnalogIndicator_0" + }, + "position": { + "height": 223, + "rotate": { + "anchor": "140% 62%" + }, + "width": 71, + "x": 250, + "y": 326 + }, + "props": { + "defaultRangeColor": "green", + "desiredHigh": 65, + "desiredLow": 40, + "desiredRangeColor": "blue", + "highAlarm": 90, + "highHighAlarm": 95, + "highInterlock": "", + "inactiveAlarmColor": "yellow", + "level1AlarmColor": "red", + "level2AlarmColor": "orange", + "lowAlarm": 10, + "lowInterlock": null, + "lowLowAlarm": 5, + "processValue": 95, + "reverseIndicator": true, + "setpointColor": "purple", + "setpointValue": 50 + }, + "type": "ia.display.moving-analog-indicator" + }, + { + "meta": { + "name": "Sparkline" + }, + "position": { + "height": 100, + "width": 250, + "x": 357.33000000000004, + "y": 337.5 + }, + "props": { + "color": "blue", + "points": [ + 59, + 80, + 80, + 100, + 68, + 62, + 87, + 72, + 42, + 49, + 58, + 53, + 57, + 51, + 42, + 32, + 37, + 30, + 24, + 38, + 57, + 29, + 18, + 32, + 38, + 24, + 24, + 24, + 20, + 21, + 29, + 32, + 26, + 18, + 32, + 36, + 30, + 36, + 29, + 32, + 29, + 28, + 41, + 20, + 28, + 58, + 18, + 24, + 16, + 2, + 22, + 17, + 22, + 21, + 12, + 22, + 14, + 13, + 11, + 20, + 16, + 16, + 18, + 12, + 28, + 28, + 32, + 16, + 16, + 24, + 16, + 20, + 14, + 18, + 12, + 26, + 17, + 11, + 30, + 16, + 9, + 20, + 42, + 13, + 13, + 24, + 17, + 13, + 20, + 12, + 14, + 13, + 14, + 71, + 82, + 20, + 16, + 20, + 22, + 17, + 5 + ] + }, + "type": "ia.display.sparkline" + }, + { + "meta": { + "name": "Sparkline_0" + }, + "position": { + "height": 100, + "width": 250, + "x": 357, + "y": 337 + }, + "props": { + "color": "red", + "points": [ + 70, + 92, + 92, + 112, + 80, + 74, + 99, + 84, + 54, + 61, + 70, + 65, + 69, + 61, + 52, + 42, + 47, + 40, + 34, + 48, + 67, + 39, + 28, + 42, + 48, + 34, + 34, + 34, + 30, + 31, + 39, + 42, + 36, + 28, + 42, + 46, + 40, + 46, + 39, + 42, + 39, + 38, + 51, + 30, + 38, + 68, + 28, + 34, + 26, + 12, + 32, + 27, + 32, + 31, + 22, + 32, + 24, + 23, + 21, + 30, + 26, + 26, + 28, + 22, + 38, + 38, + 42, + 26, + 26, + 34, + 26, + 30, + 24, + 28, + 22, + 36, + 27, + 21, + 40, + 26, + 19, + 30, + 52, + 23, + 23, + 34, + 27, + 23, + 30, + 22, + 24, + 23, + 24, + 81, + 92, + 30, + 26, + 30, + 32, + 27, + 15 + ] + }, + "type": "ia.display.sparkline" + } + ], + "meta": { + "name": "root" + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/resource.json new file mode 100644 index 0000000..9b20e37 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "dec11d1795faa38cce63957fffc5ee26aa0b4c3f1065419d015fad4957a51fbb", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T22:03:13Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/thumbnail.png new file mode 100644 index 0000000..147416a Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/view.json new file mode 100644 index 0000000..663067f --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Development/testiframe/view.json @@ -0,0 +1,108 @@ +{ + "custom": { + "key": "Development/testiframe" + }, + "params": { + "pageId": "value" + }, + "propConfig": { + "custom.key": { + "binding": { + "config": { + "path": "page.props.pageId" + }, + "type": "property" + }, + "persistent": true + }, + "params.pageId": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "grow": 1 + }, + "propConfig": { + "props.src": { + "binding": { + "config": { + "struct": { + "pageId": "{page.props.pageId}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\treturn \"http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/DH101\u0026targetDetailedURL\u003d/DH101\u0026height\u003d100%25\u0026width\u003d100%25\u0026pageId\u003d\" + value[\u0027pageId\u0027]", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "type": "ia.display.iframe" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "320px" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "path": "page.props.pageId" + }, + "type": "property" + } + } + }, + "props": { + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "eqPopup", + "pageScope": true, + "script": "\ttagPath \u003d payload.get(\u0027tagPath\u0027)\n\tobjectName \u003d payload.get(\u0027objectName\u0027)\n\t\n\tparams \u003d {\n\t\t\"tagPath\": tagPath,\n\t\t\"objectName\": objectName\n\t}\n\t\n\tsystem.perspective.openPopup(\n\t\tid \u003d \"Popup_\" + objectName.replace(\" \", \"_\"),\n\t\tview \u003d \"Library/Templates/Base\",\n\t\tparams \u003d params,\n\t\tshowCloseIcon \u003d True,\n\t\tresizable \u003d True,\n\t\tdraggable \u003d True,\n\t\tmodal \u003d False,\n\t\twidth \u003d 800,\n\t\theight \u003d 835\n\t)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/resource.json index 9253d46..8648560 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "35e63b0aa8a322844fd6cd027f622a4766db6536700c076d25d5921c9e6b2005", + "lastModificationSignature": "567565f2e3af354af22f61f66c6688660991227cd280f27a0e5e1f72b2842992", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T15:32:05Z" + "timestamp": "2026-05-02T00:58:24Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/thumbnail.png index 2dfc152..d86abf7 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/view.json index a595e34..5ff9ae6 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Control/view.json @@ -812,1114 +812,6 @@ "text": "STU LLS" }, "type": "ia.input.button" - }, - { - "meta": { - "name": "Table" - }, - "position": { - "basis": "50%", - "grow": 1 - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "ChillerName", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Chiller" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "priority", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Priority" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "status", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 41" - }, - "index": 40, - "priority": 1, - "priority2": 1, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 26" - }, - "index": 25, - "priority": 2, - "priority2": 2, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 29" - }, - "index": 28, - "priority": 3, - "priority2": 3, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 08" - }, - "index": 7, - "priority": 4, - "priority2": 4, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 46" - }, - "index": 45, - "priority": 5, - "priority2": 5, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 44" - }, - "index": 43, - "priority": 6, - "priority2": 6, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 12" - }, - "index": 11, - "priority": 7, - "priority2": 7, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 11" - }, - "index": 10, - "priority": 8, - "priority2": 8, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 28" - }, - "index": 27, - "priority": 9, - "priority2": 9, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 40" - }, - "index": 39, - "priority": 10, - "priority2": 10, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 13" - }, - "index": 12, - "priority": 11, - "priority2": 11, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 36" - }, - "index": 35, - "priority": 12, - "priority2": 12, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 19" - }, - "index": 18, - "priority": 13, - "priority2": 13, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 24" - }, - "index": 23, - "priority": 14, - "priority2": 14, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 20" - }, - "index": 19, - "priority": 15, - "priority2": 15, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 17" - }, - "index": 16, - "priority": 16, - "priority2": 16, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 47" - }, - "index": 46, - "priority": 17, - "priority2": 17, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 38" - }, - "index": 37, - "priority": 18, - "priority2": 18, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 30" - }, - "index": 29, - "priority": 19, - "priority2": 19, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 07" - }, - "index": 6, - "priority": 20, - "priority2": 20, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 05" - }, - "index": 4, - "priority": 21, - "priority2": 21, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 27" - }, - "index": 26, - "priority": 22, - "priority2": 22, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 15" - }, - "index": 14, - "priority": 23, - "priority2": 23, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 34" - }, - "index": 33, - "priority": 24, - "priority2": 24, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 22" - }, - "index": 21, - "priority": 25, - "priority2": 25, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 14" - }, - "index": 13, - "priority": 26, - "priority2": 26, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 33" - }, - "index": 32, - "priority": 27, - "priority2": 27, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 45" - }, - "index": 44, - "priority": 28, - "priority2": 28, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 21" - }, - "index": 20, - "priority": 29, - "priority2": 29, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 16" - }, - "index": 15, - "priority": 30, - "priority2": 30, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 48" - }, - "index": 47, - "priority": 31, - "priority2": 31, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 43" - }, - "index": 42, - "priority": 32, - "priority2": 32, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 39" - }, - "index": 38, - "priority": 33, - "priority2": 33, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 23" - }, - "index": 22, - "priority": 34, - "priority2": 34, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 31" - }, - "index": 30, - "priority": 35, - "priority2": 35, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 02" - }, - "index": 1, - "priority": 36, - "priority2": 36, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 03" - }, - "index": 2, - "priority": 37, - "priority2": 37, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 04" - }, - "index": 3, - "priority": 38, - "priority2": 38, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 32" - }, - "index": 31, - "priority": 39, - "priority2": 39, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 09" - }, - "index": 8, - "priority": 40, - "priority2": 40, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 06" - }, - "index": 5, - "priority": 41, - "priority2": 41, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 25" - }, - "index": 24, - "priority": 42, - "priority2": 42, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 42" - }, - "index": 41, - "priority": 43, - "priority2": 43, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 01" - }, - "index": 0, - "priority": 44, - "priority2": 44, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 18" - }, - "index": 17, - "priority": 45, - "priority2": 45, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 10" - }, - "index": 9, - "priority": 46, - "priority2": 46, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 37" - }, - "index": 36, - "priority": 47, - "priority2": 47, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 35" - }, - "index": 34, - "priority": 0, - "priority2": 999, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - } - ] - }, - "type": "ia.display.table" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/resource.json index b5868aa..9c0f56a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "6b7f4895ac689a88f90a5c2890c0ad7b1846ab1e122d27ccc98521143f322e05", + "lastModificationSignature": "398784dcf88212ebbd72c5728a13fa9c282d3bdd6fa614da163b04dc9d193208", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-23T20:39:04Z" + "timestamp": "2026-05-01T21:53:57Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/thumbnail.png index c74cb42..1028550 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/view.json index 10dcd44..c0e79bb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Overview/view.json @@ -3,7 +3,7 @@ "params": {}, "props": { "defaultSize": { - "height": 123, + "height": 155, "width": 1600 } }, diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/resource.json index 04bbac2..335d94a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "bd50f549eecf1d678d6a3a10fe240f26c70fab1cd42de01e55fac1f0f365c128", + "lastModificationSignature": "99327235546dc5062b40bf5d2de14995335c76b8c9a472370b77dc1d33154368", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T16:02:20Z" + "timestamp": "2026-05-02T02:06:23Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/thumbnail.png index c656762..de003e8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/view.json index 9b7d40e..d727045 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_CH_Status/view.json @@ -4,7 +4,7 @@ "props": { "defaultSize": { "height": 179, - "width": 999 + "width": 1376 } }, "root": { @@ -92,7 +92,8 @@ "name": "FlexContainer" }, "position": { - "basis": "123px" + "basis": "120px", + "shrink": 0 }, "props": { "direction": "column", @@ -112,7 +113,7 @@ "name": "Supply Chart" }, "position": { - "basis": "415px" + "grow": 1 }, "propConfig": { "custom.raw": { @@ -1166,7 +1167,8 @@ "name": "FlexContainer_0" }, "position": { - "basis": "123px" + "basis": "136px", + "shrink": 0 }, "props": { "direction": "column", @@ -1602,7 +1604,8 @@ "name": "CHWP Calculation Container" }, "position": { - "basis": "297px" + "basis": "200px", + "shrink": 0 }, "props": { "style": { @@ -1612,6 +1615,1114 @@ } }, "type": "ia.container.flex" + }, + { + "meta": { + "name": "Table" + }, + "position": { + "basis": "320px", + "shrink": 0 + }, + "props": { + "columns": [ + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "ChillerName", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Chiller" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "priority", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Priority" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "status", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + } + ], + "data": [ + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 41" + }, + "index": 40, + "priority": 1, + "priority2": 1, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 26" + }, + "index": 25, + "priority": 2, + "priority2": 2, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 29" + }, + "index": 28, + "priority": 3, + "priority2": 3, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 08" + }, + "index": 7, + "priority": 4, + "priority2": 4, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 46" + }, + "index": 45, + "priority": 5, + "priority2": 5, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 44" + }, + "index": 43, + "priority": 6, + "priority2": 6, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 12" + }, + "index": 11, + "priority": 7, + "priority2": 7, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 11" + }, + "index": 10, + "priority": 8, + "priority2": 8, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Running" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 28" + }, + "index": 27, + "priority": 9, + "priority2": 9, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 40" + }, + "index": 39, + "priority": 10, + "priority2": 10, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 13" + }, + "index": 12, + "priority": 11, + "priority2": 11, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 36" + }, + "index": 35, + "priority": 12, + "priority2": 12, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 19" + }, + "index": 18, + "priority": 13, + "priority2": 13, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 24" + }, + "index": 23, + "priority": 14, + "priority2": 14, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 20" + }, + "index": 19, + "priority": 15, + "priority2": 15, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 17" + }, + "index": 16, + "priority": 16, + "priority2": 16, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 47" + }, + "index": 46, + "priority": 17, + "priority2": 17, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 38" + }, + "index": 37, + "priority": 18, + "priority2": 18, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 30" + }, + "index": 29, + "priority": 19, + "priority2": 19, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 07" + }, + "index": 6, + "priority": 20, + "priority2": 20, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 05" + }, + "index": 4, + "priority": 21, + "priority2": 21, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 27" + }, + "index": 26, + "priority": 22, + "priority2": 22, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 15" + }, + "index": 14, + "priority": 23, + "priority2": 23, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 34" + }, + "index": 33, + "priority": 24, + "priority2": 24, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 22" + }, + "index": 21, + "priority": 25, + "priority2": 25, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 14" + }, + "index": 13, + "priority": 26, + "priority2": 26, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 33" + }, + "index": 32, + "priority": 27, + "priority2": 27, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 45" + }, + "index": 44, + "priority": 28, + "priority2": 28, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 21" + }, + "index": 20, + "priority": 29, + "priority2": 29, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 16" + }, + "index": 15, + "priority": 30, + "priority2": 30, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 48" + }, + "index": 47, + "priority": 31, + "priority2": 31, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 43" + }, + "index": 42, + "priority": 32, + "priority2": 32, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 39" + }, + "index": 38, + "priority": 33, + "priority2": 33, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 23" + }, + "index": 22, + "priority": 34, + "priority2": 34, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 31" + }, + "index": 30, + "priority": 35, + "priority2": 35, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 02" + }, + "index": 1, + "priority": 36, + "priority2": 36, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 03" + }, + "index": 2, + "priority": 37, + "priority2": 37, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 04" + }, + "index": 3, + "priority": 38, + "priority2": 38, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 32" + }, + "index": 31, + "priority": 39, + "priority2": 39, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 09" + }, + "index": 8, + "priority": 40, + "priority2": 40, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 06" + }, + "index": 5, + "priority": 41, + "priority2": 41, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 25" + }, + "index": 24, + "priority": 42, + "priority2": 42, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 42" + }, + "index": 41, + "priority": 43, + "priority2": 43, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 01" + }, + "index": 0, + "priority": 44, + "priority2": 44, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 18" + }, + "index": 17, + "priority": 45, + "priority2": 45, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 10" + }, + "index": 9, + "priority": 46, + "priority2": 46, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 37" + }, + "index": 36, + "priority": 47, + "priority2": 47, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + }, + { + "chillerName": { + "style": { + "margin-left": 10 + }, + "value": "Chiller 35" + }, + "index": 34, + "priority": 0, + "priority2": 999, + "status": { + "style": { + "backgroundColor": "transparent" + }, + "value": "Available" + } + } + ] + }, + "type": "ia.display.table" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/resource.json index 2f1f945..58d4ce6 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0dc9eac5fb307188f1caa43c84c1614efd0fc9bd252b6529b88d660641ba6e49", + "lastModificationSignature": "2393f7f2759281afbac97a97b1fc1b89c828d041d091490372e7c4b80fd09ac4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T15:22:27Z" + "timestamp": "2026-04-28T23:55:33Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/thumbnail.png index c7bc565..4dd55e7 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/view.json index d92fcb1..eec5b16 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_DH_Control/view.json @@ -33,8 +33,8 @@ }, "props": { "defaultSize": { - "height": 1000, - "width": 350 + "height": 900, + "width": 260 } }, "root": { @@ -43,6 +43,9 @@ "meta": { "name": "Title" }, + "position": { + "basis": "19px" + }, "propConfig": { "props.text": { "binding": { @@ -61,7 +64,7 @@ }, "props": { "textStyle": { - "fontSize": 24 + "fontSize": 14 } }, "type": "ia.display.label" @@ -71,7 +74,7 @@ "name": "SLA" }, "position": { - "basis": "93px" + "basis": "75px" }, "props": { "columns": [ @@ -166,14 +169,14 @@ "viewParams": {}, "viewPath": "", "visible": true, - "width": "" + "width": 80 }, { "align": "center", "boolean": "checkbox", "dateFormat": "MM/DD/YYYY", "editable": false, - "field": "Minimum", + "field": "Min", "filter": { "boolean": { "condition": "" @@ -207,7 +210,7 @@ "style": { "classes": "" }, - "title": "" + "title": "Min" }, "justify": "auto", "nullFormat": { @@ -258,14 +261,14 @@ "viewParams": {}, "viewPath": "", "visible": true, - "width": "" + "width": 40 }, { "align": "center", "boolean": "checkbox", "dateFormat": "MM/DD/YYYY", "editable": false, - "field": "Maximum", + "field": "Max", "filter": { "boolean": { "condition": "" @@ -299,7 +302,7 @@ "style": { "classes": "" }, - "title": "" + "title": "Max" }, "justify": "auto", "nullFormat": { @@ -350,13 +353,13 @@ "viewParams": {}, "viewPath": "", "visible": true, - "width": "" + "width": 40 } ], "data": [ { - "Maximum": "95 degF", - "Minimum": "50 degF", + "Max": "95 degF", + "Min": "50 degF", "Variable": { "align": "center", "editable": false, @@ -369,8 +372,8 @@ } }, { - "Maximum": "80%", - "Minimum": "5%", + "Max": "80%", + "Min": "5%", "Variable": { "align": "center", "editable": false, @@ -387,11 +390,18 @@ "pager": { "bottom": false }, + "rows": { + "height": "20px", + "style": { + "fontSize": 12 + } + }, "selection": { "enableRowSelection": false }, "style": { - "fontSize": 16 + "fontSize": 12, + "overflow": "visible" } }, "type": "ia.display.table" @@ -403,7 +413,10 @@ "name": "Label" }, "props": { - "text": "Humidifier Disable Setpoint" + "text": "Humidifier Disable Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -463,9 +476,6 @@ "meta": { "name": "FlexContainer_1" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -475,6 +485,28 @@ }, "type": "ia.container.flex" }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "basis": "25px" + }, + "props": { + "params": { + "dataType": "Int4", + "enabled": true, + "max": 9999, + "min": -9999, + "name": "Int", + "options": [], + "tagPath": "[Ignition_SATB1_IO2_default]Yard/SATB1_YARD_UT-P2-4/Vacuum Fault Interrupter2 Tripped/Config/Target", + "visible": true + }, + "path": "Library/Framework/Tag ConfigShort" + }, + "type": "ia.display.view" + }, { "children": [ { @@ -482,7 +514,10 @@ "name": "Label" }, "props": { - "text": "Humidifier Enable Setpoint" + "text": "Humidifier Enable Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -542,9 +577,6 @@ "meta": { "name": "FlexContainer_0" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -561,7 +593,10 @@ "name": "Label" }, "props": { - "text": "Dewpoint Hi Limit" + "text": "Dewpoint Hi Limit", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -621,9 +656,6 @@ "meta": { "name": "FlexContainer_9" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -640,7 +672,10 @@ "name": "Label" }, "props": { - "text": "Dewpoint Lo Limit" + "text": "Dewpoint Lo Limit", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -700,9 +735,6 @@ "meta": { "name": "FlexContainer_10" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -722,7 +754,10 @@ "basis": "100%" }, "props": { - "text": "STU Demand" + "text": "STU Demand", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -782,9 +817,6 @@ "meta": { "name": "FlexContainer_4" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -901,7 +933,10 @@ "basis": "190px" }, "props": { - "text": "DP PID Setpoint" + "text": "DP PID Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -961,9 +996,6 @@ "meta": { "name": "FlexContainer_3" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -980,7 +1012,10 @@ "name": "Label" }, "props": { - "text": "STU PID RA Temperature Setpoint" + "text": "STU PID RA Temperature Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -1040,9 +1075,6 @@ "meta": { "name": "FlexContainer_2" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -1059,7 +1091,10 @@ "name": "Label" }, "props": { - "text": "Global Discharge Temp Setpoint" + "text": "Global Discharge Temp Setpoint", + "textStyle": { + "fontSize": 12 + } }, "type": "ia.display.label" }, @@ -1119,9 +1154,6 @@ "meta": { "name": "FlexContainer_8" }, - "position": { - "basis": "50px" - }, "props": { "justify": "space-between", "style": { @@ -1339,9 +1371,9 @@ "direction": "column", "justify": "space-between", "style": { - "gap": "10px", + "gap": "var(--space-sm)", "overflow": "visible", - "padding": "10px" + "padding": "var(--space-sm)" } }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/resource.json new file mode 100644 index 0000000..96afa41 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "bb89690b5355c5a17c4fca925caceaea9d3490edab5bf9ed510678689ca8b4f4", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:55:23Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/thumbnail.png new file mode 100644 index 0000000..f162487 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/view.json new file mode 100644 index 0000000..ce0ff42 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_L3_Navigation/view.json @@ -0,0 +1,570 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 1000, + "width": 400 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "Label" + }, + "props": { + "text": "Roof" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FirstFloor Percent" + }, + "props": { + "path": "Library/Widgets/Layouts/Wdt_Bldg_Roof", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "Second Floor" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FirstFloor Percent_0" + }, + "props": { + "path": "Library/Widgets/Layouts/Wdt_Bldg_2f", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Label_2" + }, + "props": { + "text": "First Floor" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FirstFloor Percent_1" + }, + "props": { + "path": "Library/Widgets/Layouts/Wdt_Bldg_1f", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Label_1" + }, + "position": { + "grow": 1 + }, + "props": { + "textStyle": { + "textAlign": "start" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_3" + }, + "props": { + "text": "List of devices", + "textStyle": { + "textAlign": "start" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "component": { + "onRowClick": { + "config": { + "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Tag}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Table" + }, + "position": { + "basis": "243px" + }, + "propConfig": { + "props.data": { + "binding": { + "config": { + "struct": { + "paths": "{view.custom.data}", + "time": "now(5000)" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tRAT \u003d system.tag.readBlocking(item + \"/Return Air Temperature\")[0].value\n\t\tSAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\tName \u003d item.split(\u0027_\u0027)[5]\n\t\t#Tag \u003d system.tag.readBlocking(item + \"/Meta/Ignition Tag Name\")[0].value\n\t\tTag \u003d item.split(\u0027/\u0027)[1]\n\t\ttagPath \u003d item\n\t\toutput.append({\n\t\t\t\t\t\t\"RAT\": RAT,\n\t\t\t\t\t\t\"SAT\": SAT,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Tag\": Tag,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "columns": [ + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "Name", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "SAT", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Supply Air Temperature" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "Tag", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Tag" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": false, + "width": "" + }, + { + "align": "center", + "boolean": "checkbox", + "dateFormat": "MM/DD/YYYY", + "editable": false, + "field": "AlarmSeverity", + "filter": { + "boolean": { + "condition": "" + }, + "date": { + "condition": "", + "value": "" + }, + "enabled": false, + "number": { + "condition": "", + "value": "" + }, + "string": { + "condition": "", + "value": "" + }, + "visible": "on-hover" + }, + "footer": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "" + }, + "header": { + "align": "center", + "justify": "left", + "style": { + "classes": "" + }, + "title": "Alarm Severity" + }, + "justify": "auto", + "nullFormat": { + "includeNullStrings": false, + "nullFormatValue": "", + "strict": false + }, + "number": "value", + "numberFormat": "0,0.##", + "progressBar": { + "bar": { + "color": "", + "style": { + "classes": "" + } + }, + "max": 100, + "min": 0, + "track": { + "color": "", + "style": { + "classes": "" + } + }, + "value": { + "enabled": true, + "format": "0,0.##", + "justify": "center", + "style": { + "classes": "" + } + } + }, + "render": "auto", + "resizable": true, + "sort": "none", + "sortable": true, + "strictWidth": false, + "style": { + "classes": "" + }, + "toggleSwitch": { + "color": { + "selected": "", + "unselected": "" + } + }, + "viewParams": {}, + "viewPath": "", + "visible": true, + "width": "" + } + ], + "data": [ + { + "AlarmSeverity": " ", + "Name": "DOAS01", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS01", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS02", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS02", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS02" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS03", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS03", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS04", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS04", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + }, + { + "AlarmSeverity": " ", + "Name": "DOAS05", + "RAT": null, + "SAT": null, + "Tag": "SATB1_RF_DOAS05", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" + } + ] + }, + "type": "ia.display.table" + } + ], + "meta": { + "name": "root" + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-sm)", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/resource.json index 195a507..63098e7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "3b8e2a127085499ebb4209db949a9648a076c8ba84c5054e6a2a0ba854969220", + "lastModificationSignature": "ab030acb7036705b77013cd655e45ed9ebd9cfd4ea1cb7a9d3a28ece3abf7df5", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T16:01:34Z" + "timestamp": "2026-05-01T21:25:40Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/thumbnail.png index 7d843e1..6ad568d 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/view.json index 0d700cd..f9e76df 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Control/view.json @@ -8,132 +8,6 @@ }, "root": { "children": [ - { - "children": [ - { - "meta": { - "name": "Status Indicator 01", - "tooltip": { - "enabled": true, - "text": "Bypass, DPs Fail amd Qty Chiller permissive are all good" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/PlantMgr Permissive OK", - "text": "Plant Manager Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Status Indicator 02", - "tooltip": { - "enabled": true, - "text": "At least 1 DH DP is not faulted" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/DPs Fail Permissive OK", - "text": "DPs Fail Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Indicators_01" - }, - "position": { - "basis": "45px" - }, - "props": { - "style": { - "gap": "var(--space-sm)", - "padding": "var(--space-sm)" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Status Indicator 03", - "tooltip": { - "enabled": true, - "text": "At least 1 CH is available" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/QtyChillers Permissive OK", - "text": "Qty Chillers Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Status Indicator 04", - "tooltip": { - "enabled": true, - "text": "At least 1 loop bypass valve available" - } - }, - "position": { - "basis": "50%" - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Bypass Permissive OK", - "text": "Bypass Permissive" - }, - "path": "Library/Framework/Badge", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Indicators_02" - }, - "position": { - "basis": "45px" - }, - "props": { - "style": { - "gap": "var(--space-sm)", - "padding": "var(--space-sm)" - } - }, - "type": "ia.container.flex" - }, { "children": [ { @@ -725,75 +599,6 @@ }, "type": "ia.container.flex" }, - { - "children": [ - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B301 Chillers LLS\u0027\n\ttitle \u003d \u0027Chillers LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Btn Chiller LLS" - }, - "position": { - "basis": "50%", - "grow": 1 - }, - "props": { - "style": { - "backgroundColor": "var(--action-primary)" - }, - "text": "Chillers LLS" - }, - "type": "ia.input.button" - }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B302 CHW Pumps LLS\u0027\n\ttitle \u003d \u0027Chilled Water Pumps LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Btn CHWP LLS" - }, - "position": { - "basis": "50%" - }, - "props": { - "style": { - "backgroundColor": "var(--action-primary)" - }, - "text": "CHWP LLS" - }, - "type": "ia.input.button" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "position": { - "basis": "40px" - }, - "props": { - "style": { - "gap": "var(--space-sm)" - } - }, - "type": "ia.container.flex" - }, { "children": [ { @@ -893,431 +698,115 @@ { "children": [ { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_SpdSP" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.#", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 86.7, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "67px" - }, - "props": { - "alignVertical": "top", - "text": "CHWP Speed Setpoint", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], "meta": { - "name": "FlexContainer" + "name": "EmbeddedView_29" }, "position": { - "basis": "30%" + "grow": 1 }, "props": { - "direction": "column", - "justify": "center", + "params": { + "embedded": true, + "objectName": "PID_Loop", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2" + }, + "path": "Library/Widgets/Wdg_PID", "style": { - "padding": "5px" + "classes": "containers/HoverOver", + "overflow": "visible" } }, - "type": "ia.container.flex" + "type": "ia.display.view" }, { "meta": { - "name": "Label" - }, - "position": { - "basis": "1px" + "name": "EmbeddedView_28" }, "props": { + "params": { + "embedded": true, + "objectName": "PID_Loop", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1" + }, + "path": "Library/Widgets/Wdg_PID", "style": { - "backgroundColor": "LightGray" + "classes": "containers/HoverOver", + "overflow": "visible" } }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_ADDLimit" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 94, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHWP Add Limit", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP SUB Limit" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 67, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHWP SuB Limit", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_Demand" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "text": 4, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "VFD", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px", - "padding": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "67px" - }, - "props": { - "alignVertical": "top", - "text": "CHWP Demand", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "position": { - "basis": "30%" - }, - "props": { - "direction": "column", - "justify": "center" - }, - "type": "ia.container.flex" + "type": "ia.display.view" } ], "meta": { - "name": "CHWP Calculation Container" + "name": "FlexContainer" + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B301 Chillers LLS\u0027\n\ttitle \u003d \u0027Chillers LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Btn Chiller LLS" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "props": { + "style": { + "backgroundColor": "var(--action-primary)" + }, + "text": "Chillers LLS" + }, + "type": "ia.input.button" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\tviewPath \u003d \u0027Pages/Dev/B_Mechanical/L3/B302 CHW Pumps LLS\u0027\n\ttitle \u003d \u0027Chilled Water Pumps LLS\u0027\n\tutils.nav.openLLSPopup(viewPath,title)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Btn CHWP LLS" + }, + "position": { + "basis": "50%" + }, + "props": { + "style": { + "backgroundColor": "var(--action-primary)" + }, + "text": "CHWP LLS" + }, + "type": "ia.input.button" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "position": { + "basis": "40px" }, "props": { "style": { - "classes": "containers/card_nested", - "gap": "5px", - "padding": "5px" + "gap": "var(--space-sm)" } }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/resource.json new file mode 100644 index 0000000..9d23043 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "9b914c5e5610b033cc2069c428b6cf997071b144a11e758fddd7afc8cb9a3456", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T21:24:24Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/thumbnail.png new file mode 100644 index 0000000..59cd20a Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/view.json new file mode 100644 index 0000000..5dc80b7 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Cards/Card_Process_Indicators/view.json @@ -0,0 +1,1331 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 100, + "width": 803 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Status Indicator 01", + "tooltip": { + "enabled": true, + "text": "Bypass, DPs Fail amd Qty Chiller permissive are all good" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/PlantMgr Permissive OK", + "text": "Plant Manager Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Status Indicator 02", + "tooltip": { + "enabled": true, + "text": "At least 1 DH DP is not faulted" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/DPs Fail Permissive OK", + "text": "DPs Fail Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "Indicators_01" + }, + "position": { + "basis": "150px" + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-sm)", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "meta": { + "name": "Status Indicator 03", + "tooltip": { + "enabled": true, + "text": "At least 1 CH is available" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/QtyChillers Permissive OK", + "text": "Qty Chillers Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Status Indicator 04", + "tooltip": { + "enabled": true, + "text": "At least 1 loop bypass valve available" + } + }, + "position": { + "basis": "50%" + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Bypass Permissive OK", + "text": "Bypass Permissive" + }, + "path": "Library/Framework/Badge", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "Indicators_02" + }, + "position": { + "basis": "150px" + }, + "props": { + "direction": "column", + "style": { + "gap": "var(--space-sm)", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_SpdSP" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.#", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 86.7, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "67px" + }, + "props": { + "alignVertical": "top", + "text": "CHWP Speed Setpoint", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "30%" + }, + "props": { + "direction": "column", + "justify": "center", + "style": { + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_ADDLimit" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 94, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHWP Add Limit", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP SUB Limit" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 67, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHWP SuB Limit", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWP_Demand" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "text": 4, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "VFD", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px", + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "67px" + }, + "props": { + "alignVertical": "top", + "text": "CHWP Demand", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "position": { + "basis": "30%" + }, + "props": { + "direction": "column", + "justify": "center" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "CHWP Calculation Container" + }, + "props": { + "style": { + "classes": "containers/card_nested", + "gap": "5px", + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/DHDP_AvgObj/Value OUT" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 21.16, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "psi", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "DH DP Avg", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/ChillerDP_AvgObj/Value OUT" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 411.67, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "gpm", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "Chiller Min Flow", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Control/PSet_SP" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 25, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "psi", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv PID SP", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Chiller_MinFlow_SP" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 150, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "GPLM", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "Chiller Min Flow SP", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_2" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_1" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Out CV" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 0, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv PID 1 OutCV", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2/Out CV" + }, + "enabled": false, + "transforms": [ + { + "formatType": "numeric", + "formatValue": "#.##", + "type": "format" + } + ], + "type": "tag" + } + } + }, + "props": { + "text": 0, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "25%" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv PID 2 OutCV", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_3" + }, + "position": { + "basis": "40%" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label_2" + }, + "position": { + "basis": "1px" + }, + "props": { + "style": { + "backgroundColor": "LightGray" + } + }, + "type": "ia.display.label" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "direct", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWBPV_PosSP" + }, + "enabled": false, + "type": "tag" + } + } + }, + "props": { + "text": 0, + "textStyle": { + "color": "var(--tagvalue-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "end" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "props": { + "text": "%", + "textStyle": { + "color": "var(--units-color)", + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "start" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer" + }, + "props": { + "justify": "center", + "style": { + "gap": "5px", + "padding": "5px" + } + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Label" + }, + "props": { + "alignVertical": "top", + "text": "CHW Bpv Pos SP", + "textStyle": { + "fontFamily": "inherit", + "fontSize": 12, + "textAlign": "center" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "FlexContainer_1" + }, + "position": { + "basis": "30%" + }, + "props": { + "direction": "column", + "justify": "center" + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "FlexContainer_6" + }, + "props": { + "style": { + "backgroundColor": "var(--container)", + "borderBottomLeftRadius": 4, + "borderBottomRightRadius": 4, + "borderTopLeftRadius": 4, + "borderTopRightRadius": 4, + "boxShadow": "var(--boxShadow2)", + "gap": "5px", + "overflow": "visible", + "padding": "5px" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "classes": "containers/card", + "gap": "var(--space-sm)", + "overflow": "visible", + "padding": "var(--space-sm)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/resource.json index cfdd0fd..5dbcd71 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "9c61877bf3cab9dc43eafb5a23c20f387aadd07e884182f0268f07327c6a90cb", + "lastModificationSignature": "c98b0606add47b6c97974d59f52d3c74e98c2746b111038702aaa9a2c350b839", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-23T19:22:34Z" + "timestamp": "2026-05-01T13:11:35Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/thumbnail.png index d631754..7aec370 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/HVAC/Dgrm_DOAS/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/resource.json index f40dd55..9424f94 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "31f6f6bbf251b1d1aa1016f23899cc7ef93f179682d635ae117e216bf02c49a1", + "lastModificationSignature": "a91af6636c762a47fcd5fe850612e768582df354c64ffe1e88bacb52d5a803c0", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-25T17:40:22Z" + "timestamp": "2026-05-02T02:06:13Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/thumbnail.png index 742ce21..b0406df 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/view.json index 9fcf2cd..0084f25 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Diagrams/Mechanical/Chiller_Skid/view.json @@ -4,7 +4,7 @@ "props": { "defaultSize": { "height": 500, - "width": 767 + "width": 1376 } }, "root": { @@ -14,10 +14,10 @@ "name": "Sym_Chiller" }, "position": { - "height": 0.3, - "width": 0.25, - "x": 0.0648, - "y": 0.054 + "height": 150, + "width": 230, + "x": 124.16, + "y": 27 }, "props": { "params": { @@ -33,10 +33,10 @@ "name": "Sym_ValveC" }, "position": { - "height": 0.164, - "width": 0.1493, - "x": 0.4062, - "y": 0.376 + "height": 82, + "width": 152, + "x": 577.93, + "y": 188 }, "props": { "params": { @@ -53,10 +53,10 @@ "name": "Sym_ValveC_0" }, "position": { - "height": 0.162, - "width": 0.1627, - "x": 0.4036, - "y": 0.641 + "height": 81, + "width": 223.88, + "x": 555.35, + "y": 320.5 }, "props": { "params": { @@ -73,10 +73,10 @@ "name": "Sym_ValveM" }, "position": { - "height": 0.218, - "width": 0.1707, - "x": 0.6572, - "y": 0.17 + "height": 109, + "width": 81, + "x": 908.31, + "y": 75 }, "props": { "params": { @@ -93,10 +93,10 @@ "name": "Sym_TES" }, "position": { - "height": 0.254, - "width": 0.1213, - "x": 0.6328, - "y": 0.453 + "height": 127, + "width": 166.91, + "x": 870.73, + "y": 226.5 }, "props": { "params": { @@ -112,10 +112,10 @@ "name": "Sym_CHWPump" }, "position": { - "height": 0.178, - "width": 0.17, - "x": 0.1271, - "y": 0.486 + "height": 89, + "width": 233.92, + "x": 174.89, + "y": 243 }, "props": { "params": { @@ -134,13 +134,13 @@ "name": "Label" }, "position": { - "height": 0.086, + "height": 43, "rotate": { "anchor": "-30% 25%" }, - "width": 0.0887, - "x": 0.8786, - "y": 0.23 + "width": 122.05, + "x": 1208.95, + "y": 115 }, "props": { "text": "To CHWS Header" @@ -152,13 +152,13 @@ "name": "Label_0" }, "position": { - "height": 0.086, + "height": 43, "rotate": { "anchor": "-30% 25%" }, - "width": 0.0939, - "x": 0.8787, - "y": 0.8578 + "width": 129.21, + "x": 1209.09, + "y": 428.9 }, "props": { "text": "From CHWS Header" @@ -170,10 +170,10 @@ "name": "EmbeddedView" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.7276, - "y": 0.52 + "height": 35, + "width": 154.25, + "x": 1001.18, + "y": 260 }, "props": { "params": { @@ -192,10 +192,10 @@ "name": "EmbeddedView_0" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.5085, - "y": 0.52 + "height": 35, + "width": 154.25, + "x": 699.7, + "y": 260 }, "props": { "params": { @@ -214,10 +214,10 @@ "name": "EmbeddedView_1" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.2387, - "y": 0.216 + "height": 35, + "width": 154.25, + "x": 328.45, + "y": 108 }, "props": { "params": { @@ -236,10 +236,10 @@ "name": "EmbeddedView_2" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.2387, - "y": 0.826 + "height": 35, + "width": 154.25, + "x": 328.45, + "y": 413 }, "props": { "params": { @@ -258,10 +258,10 @@ "name": "EmbeddedView_3" }, "position": { - "height": 0.07, - "width": 0.1121, - "x": 0.317, - "y": 0.216 + "height": 35, + "width": 154.25, + "x": 436.19, + "y": 108 }, "props": { "params": { @@ -280,7 +280,6 @@ "name": "root" }, "props": { - "mode": "percent", "pipes": [ { "appearance": "auto", @@ -294,21 +293,21 @@ { "connections": [ { - "x": 0.1726, - "y": 0.278 + "x": 237.5, + "y": 139 }, { "connections": [], - "x": 0.6746, - "y": 0.278 + "x": 928.25, + "y": 139 } ], - "x": 0.4663, - "y": 0.278 + "x": 641.63, + "y": 139 } ], - "x": 0.4663, - "y": 0.432 + "x": 641.63, + "y": 216 }, "start": "none", "stroke": "", @@ -327,26 +326,26 @@ { "connections": [ { - "x": 0.8688, - "y": 0.9114 + "x": 1195.47, + "y": 455.7 }, { "connections": [ { - "x": 0.1726, - "y": 0.564 + "x": 237.5, + "y": 282 } ], - "x": 0.1726, - "y": 0.9114 + "x": 237.5, + "y": 455.7 } ], - "x": 0.4651, - "y": 0.9114 + "x": 639.98, + "y": 455.7 } ], - "x": 0.4651, - "y": 0.744 + "x": 639.98, + "y": 372 }, "start": "none", "stroke": "", @@ -363,16 +362,16 @@ "origin": { "connections": [ { - "x": 0.1726, - "y": 0.292 + "x": 237.5, + "y": 146 }, { - "x": 0.1726, - "y": 0.54 + "x": 237.5, + "y": 270 } ], - "x": 0.1726, - "y": 0.418 + "x": 237.5, + "y": 209 }, "start": "none", "stroke": "", @@ -391,20 +390,20 @@ { "connections": [ { - "x": 0.4663, - "y": 0.486 + "x": 641.63, + "y": 243 }, { - "x": 0.6746, - "y": 0.588 + "x": 928.25, + "y": 294 } ], - "x": 0.4663, - "y": 0.588 + "x": 641.63, + "y": 294 } ], - "x": 0.4663, - "y": 0.694 + "x": 641.63, + "y": 347 }, "start": "none", "stroke": "", @@ -425,25 +424,25 @@ { "connections": [ { - "x": 0.8688, - "y": 0.278 + "x": 1195.47, + "y": 139 }, { "connections": [], - "x": 0.7, - "y": 0.278 + "x": 963.2, + "y": 139 } ], - "x": 0.7876, - "y": 0.278 + "x": 1083.74, + "y": 139 } ], - "x": 0.7876, - "y": 0.588 + "x": 1083.74, + "y": 294 } ], - "x": 0.6895, - "y": 0.588 + "x": 948.75, + "y": 294 }, "start": "none", "stroke": "", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/resource.json index 4486add..f65b36e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "07b30a630443e02e0ac207bb94a90cc6ca47569410f6689908a045dae06517ff", + "lastModificationSignature": "8a062416ecc71ababad069cf9499a1dbd2d1e074a0671b82df6f2aecb72c0060", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T13:38:07Z" + "timestamp": "2026-04-29T04:08:15Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/thumbnail.png index 3564418..ba20a79 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/view.json index b6ddde1..58f2735 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Input/Int/view.json @@ -1,29 +1,14 @@ { "custom": {}, "params": { - "enabled": true, - "format": "###.##", - "max": 9999999, - "min": -9999999, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_HUM_03/Config/Relative Humidity Setpoint" + "enabled": false, + "tagPath": "[default]simulator/New Tag" }, "propConfig": { "params.enabled": { "paramDirection": "input", "persistent": true }, - "params.format": { - "paramDirection": "input", - "persistent": true - }, - "params.max": { - "paramDirection": "input", - "persistent": true - }, - "params.min": { - "paramDirection": "input", - "persistent": true - }, "params.tagPath": { "paramDirection": "input", "persistent": true @@ -32,7 +17,7 @@ "props": { "defaultSize": { "height": 40, - "width": 200 + "width": 150 } }, "root": { @@ -56,31 +41,54 @@ "props.format": { "binding": { "config": { - "path": "view.params.format" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.FormatString" }, - "type": "property" + "type": "tag" } }, "props.inputBounds.maximum": { "binding": { "config": { - "path": "view.params.max" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.EngHigh" }, - "type": "property" + "type": "tag" } }, "props.inputBounds.minimum": { "binding": { "config": { - "path": "view.params.min" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.EngLow" }, - "type": "property" + "type": "tag" + } + }, + "props.style.backgroundColor": { + "binding": { + "config": { + "expression": "if({this.props.enabled}, \u0027var(--neutral-10)\u0027, \u0027var(--neutral-40)\u0027)" + }, + "type": "expr" } }, "props.style.color": { "binding": { "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027\u0027)" + "expression": "if({this.props.enabled}, \u0027var(--action-primary)\u0027, \u0027var(--text-color)\u0027)" }, "type": "expr" } @@ -114,7 +122,6 @@ "name": "root" }, "props": { - "alignItems": "center", "justify": "center" }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/resource.json index 89b02ab..42672aa 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0a6aa2d241c950a1066357fe5443cd67c81d50d3f94b50db6162c963bf74260f", + "lastModificationSignature": "3a539222b9a1b044c63013b968d5df4ede8f262c9318654ddb8e47d562bd0e1e", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T13:38:08Z" + "timestamp": "2026-05-01T13:16:15Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/thumbnail.png index 02687e5..324a1b8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/view.json index d41a02e..39e7b34 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Framework/Tag ConfigShort/view.json @@ -2,12 +2,8 @@ "custom": {}, "params": { "dataType": "Int4", - "enabled": true, - "max": 9999, - "min": -9999, - "name": "Int", - "options": [], - "tagPath": "[Ignition_SATB1_IO2_default]Yard/SATB1_YARD_UT-P2-4/Vacuum Fault Interrupter2 Tripped/Config/Target", + "enabled": false, + "tagPath": "[default]simulator/New Tag", "visible": true }, "propConfig": { @@ -19,22 +15,6 @@ "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 @@ -79,9 +59,14 @@ "props.text": { "binding": { "config": { - "path": "view.params.name" + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}.Tooltip" }, - "type": "property" + "type": "tag" } } }, @@ -103,30 +88,6 @@ "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": { @@ -138,7 +99,7 @@ "props.path": { "binding": { "config": { - "expression": "case({view.params.dataType},\r\n\u0027Boolean\u0027, \u0027Library/Templates/Framework/Input/Boolean\u0027,\r\n\u0027Int4\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027Int8\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027Float4\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027Float8\u0027, \u0027Library/Templates/Framework/Input/Int\u0027,\r\n\u0027String\u0027, \u0027Library/Templates/Framework/Input/String\u0027,\r\n\u0027\u0027)" + "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" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/resource.json new file mode 100644 index 0000000..e9c3d9c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "d90814d7b413d2f8c51a4b774bebab193dcdabcd690b6df91787c024acf97df9", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T21:12:38Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/thumbnail.png new file mode 100644 index 0000000..24416ab Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/view.json new file mode 100644 index 0000000..23de893 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/DH_L2/view.json @@ -0,0 +1,86 @@ +{ + "custom": {}, + "params": { + "GoTo": "DH201", + "Zoom": 100 + }, + "propConfig": { + "params.GoTo": { + "paramDirection": "input", + "persistent": true + }, + "params.Zoom": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "height": 984, + "width": 1396 + }, + "props": { + "src": "http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/DH201\u0026targetDetailedURL\u003d/Pages/Datahall/DH201\u0026height\u003d175%25\u0026width\u003d175%25", + "style": { + "flex": "1 1 auto", + "key": "value", + "key_1": "value", + "minHeigth": "100%", + "minLength": "100%" + } + }, + "type": "ia.display.iframe" + } + ], + "meta": { + "name": "CoordinateContainer" + }, + "position": { + "grow": 1 + }, + "type": "ia.container.coord" + }, + { + "meta": { + "name": "Details" + }, + "position": { + "basis": "280px", + "shrink": 0 + }, + "props": { + "mode": "fixed", + "path": "Library/Cards/Card_DH_Control", + "style": { + "classes": "containers/card", + "overflow": "hidden" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/resource.json index 2a78dcd..c3ad323 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "478159a5755cf927f21d49439a9a9d028ca30558ae70b98f84b17e574fcc9cad", + "lastModificationSignature": "f8dda42128eb7f5791ca71ab65a4f9d3550e491aa60739444889dbdf155b055f", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T18:25:22Z" + "timestamp": "2026-04-28T22:16:22Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/thumbnail.png index 0f10263..a7ac9e0 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/view.json index feb70a1..e9917c4 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/Header/view.json @@ -176,7 +176,7 @@ } }, "props": { - "path": "Library/CommonObjects/PLC Healt", + "path": "Library/Widgets/PLC Healt", "style": { "padding": "10px" }, @@ -612,18 +612,6 @@ } }, "type": "ia.container.flex" - }, - { - "meta": { - "name": "Audio" - }, - "position": { - "basis": "300px" - }, - "props": { - "source": "/system/webdev/SDC_SAT_B1/alert.mp3" - }, - "type": "ia.display.audio" } ], "custom": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json index 3a5770a..97eea83 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "6404219c6c2161a48b3dcd5effb8c10978ccbaa96d01b16e95b5c6391e362a14", + "lastModificationSignature": "7ed66bc2dc884267ddb31033b5967fc8da843f9e2c9fc23ec9f2f02e735afb53", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-25T17:02:47Z" + "timestamp": "2026-05-01T21:41:30Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png index fbb8e8c..ccdc813 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json index c07ce2d..213440c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Docked/MainNav/view.json @@ -10,7 +10,7 @@ }, "props": { "defaultSize": { - "width": 240 + "width": 220 } }, "root": { @@ -344,7 +344,7 @@ { "data": { "GoTo": "/CHW_System", - "target": "Library/Layouts/iFrame/Main", + "target": "Pages/Mechanical/CHW_System", "zoom": "130%" }, "expanded": false, @@ -364,9 +364,9 @@ "items": [ { "data": { - "GoTo": "/DH101", - "target": "Library/Layouts/iFrame/Main", - "zoom": "143%" + "GoTo": "", + "target": "Development/testiframe", + "zoom": "" }, "expanded": false, "items": [], @@ -384,9 +384,9 @@ }, { "data": { - "GoTo": "/DH201", - "target": "Library/Layouts/iFrame/Main", - "zoom": "150%" + "GoTo": "DH201", + "target": "Library/Layouts/DH_L2", + "zoom": 100 }, "expanded": false, "items": [], @@ -433,8 +433,8 @@ "items": [ { "data": { - "GoTo": "", - "target": "Pages/HVAC/DOAS", + "GoTo": "DOAS", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -443,8 +443,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/RTU", + "GoTo": "RTU", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -453,8 +453,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/CRAH", + "GoTo": "CRAH", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -463,8 +463,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/STU", + "GoTo": "STU", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -473,8 +473,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/HUM", + "GoTo": "HUM", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -483,8 +483,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/VAV", + "GoTo": "VAV", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -493,8 +493,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/FCU", + "GoTo": "FCU", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -503,8 +503,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/HVAC/EF", + "GoTo": "EF", + "target": "Library/Layouts/Equipment_L3", "zoom": "value" }, "expanded": false, @@ -513,8 +513,8 @@ }, { "data": { - "GoTo": "value", - "target": "Pages/HVAC/SP", + "GoTo": "SP", + "target": "Library/Layouts/Equipment_L3", "zoom": "value" }, "expanded": false, @@ -522,7 +522,7 @@ "label": "ESP" } ], - "label": "HVAC" + "label": "Mechanical" }, { "data": { @@ -557,8 +557,8 @@ }, { "data": { - "GoTo": "", - "target": "Pages/FireSystem/FireSystem", + "GoTo": "FS", + "target": "Library/Layouts/Equipment_L3", "zoom": "" }, "expanded": false, @@ -1123,7 +1123,88 @@ "zoom": "" }, "expanded": false, - "items": [], + "items": [ + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Frontend" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO1" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO2" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO3" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO4" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "IO5" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "Common IO" + }, + { + "data": { + "GoTo": "", + "target": "Pages/Diagnostics/Connections", + "zoom": "" + }, + "expanded": false, + "items": [], + "label": "MQTT Gtwy" + } + ], "label": "Gateways" }, { @@ -1137,7 +1218,7 @@ "label": "Connections" } ], - "label": "Diagnotics \u0026 Tools" + "label": "Diagnostics \u0026 Tools" } ], "selection": [ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/resource.json new file mode 100644 index 0000000..bd43d1c --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "edfe6f095ace6e8dbf7c6222901436d860cd09bd9aed15ea79572003df622a25", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:42:51Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/thumbnail.png new file mode 100644 index 0000000..2789832 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/view.json new file mode 100644 index 0000000..3178a05 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/Equipment_L3/view.json @@ -0,0 +1,207 @@ +{ + "custom": {}, + "params": { + "GoTo": "DOAS", + "Zoom": "value" + }, + "propConfig": { + "params.GoTo": { + "paramDirection": "input", + "persistent": true + }, + "params.Zoom": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "Label" + }, + "position": { + "basis": "32px" + }, + "propConfig": { + "props.text": { + "binding": { + "config": { + "expression": "{view.params.GoTo} + \" Details Page.\"" + }, + "type": "expr" + } + } + }, + "props": { + "textStyle": { + "classes": "labels/H2" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Label_0" + }, + "position": { + "basis": "1px", + "shrink": 0 + }, + "props": { + "style": { + "backgroundColor": "var(--text-muted)" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Details" + }, + "position": { + "grow": 1 + }, + "propConfig": { + "props.path": { + "binding": { + "config": { + "path": "view.params.GoTo" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": "CRAH", + "output": "Pages/HVAC/CRAH" + }, + { + "input": "DOAS", + "output": "Pages/HVAC/DOAS" + }, + { + "input": "EF", + "output": "Pages/HVAC/EF" + }, + { + "input": "FCU", + "output": "Pages/HVAC/FCU" + }, + { + "input": "HUM", + "output": "Pages/HVAC/HUM" + }, + { + "input": "RTU", + "output": "Pages/HVAC/RTU" + }, + { + "input": "SP", + "output": "Pages/HVAC/SP" + }, + { + "input": "STU", + "output": "Pages/HVAC/STU" + }, + { + "input": "VAV", + "output": "Pages/HVAC/VAV" + }, + { + "input": "FS", + "output": "Pages/FireSystem/FireSystem" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "params": { + "embedded": false, + "objectName": "DOAS", + "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "FlexContainer" + }, + "position": { + "grow": 1 + }, + "props": { + "direction": "column", + "path": "value" + }, + "type": "ia.container.flex" + }, + { + "meta": { + "name": "Details" + }, + "position": { + "basis": "400px" + }, + "propConfig": { + "props.path": { + "binding": { + "config": { + "path": "view.params.type" + }, + "enabled": false, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": "DOAS", + "output": "Library/Cards/Card_DOAS" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + } + }, + "props": { + "path": "Library/Cards/Card_L3_Navigation", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/resource.json index 58ee255..a11a8f8 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "8380166771f74e8942e7ae7a842e7841ff9a9e8d635ea7f473be4ad5056aad99", + "lastModificationSignature": "32930e122009c9f022fe98044679cdbb54a140971df9e86485a6820315efa6a4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T21:56:15Z" + "timestamp": "2026-05-01T13:54:05Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/thumbnail.png index 4153bab..c46cc02 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/view.json index 1e74136..09b0f49 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Main/view.json @@ -72,7 +72,7 @@ "props": { "params": { "inputs": { - "targetDetailedURL": "/Oneline-UT/37d94815" + "targetDetailedURL": "/Oneline-UT/" } }, "path": "Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/resource.json index 1faa495..3497691 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "3fafb969752a4f141351c7193b38e5848cba5cfeebd0662974ab2694075a4c81", + "lastModificationSignature": "5a7746e2aa51200e518d86953f06a33f2e7aa4727fb66b5f4081598150a850a6", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T14:32:33Z" + "timestamp": "2026-04-28T23:52:54Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/thumbnail.png index 3d6cec7..503a5d1 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/view.json index 0618743..412c319 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Layouts/iFrame/Pan Zoom iFrame/Pan Zoom iFrame/view.json @@ -3,7 +3,7 @@ "params": { "inputs": { "height": "100%", - "targetDetailedURL": "", + "targetDetailedURL": "/D101", "targetURL": "/Oneline-HS1", "width": "100%" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/resource.json index f15e087..294eca6 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "05ca29a25fc8cc9045f6d6be1ae8208411f622c9515995ba0411de435ddf9527", + "lastModificationSignature": "6a7ccea053b1326a78bef0ecec0485acbbdf1af9b1c157d87bd0652053fc90df", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-23T19:22:34Z" + "timestamp": "2026-04-28T21:44:59Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/thumbnail.png index a111719..47fe002 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/view.json index 89f89e2..d6bca5f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/HVAC/Sym_STU/view.json @@ -466,7 +466,7 @@ "dom": { "onClick": { "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\ttagPath \u003d self.view.params.tagPath\n\tobjectName \u003d self.view.params.objectName\n\tutils.nav.openEQPopup(objectName, tagPath)" + "script": "\tpayload \u003d {\n\t\t\u0027tagPath\u0027: self.view.params.tagPath,\n\t\t\u0027objectName\u0027: self.view.params.objectName,\n\t\t\u0027modal\u0027: True,\n\t\t\u0027resizable\u0027: True\n\t}\n\tsystem.perspective.sendMessage(\u0027requestEQPopup\u0027, payload \u003d payload, scope\u003d\u0027page\u0027)" }, "scope": "G", "type": "script" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/resource.json index 7cc9430..e58d310 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c84516be523fec4d0587cd90635af5a44d3399b9f001587262b0585389769e63", + "lastModificationSignature": "35ce1523259cf66836375c09024759abfa61fd808d92f7bd9d651747f94e259e", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-23T15:12:56Z" + "timestamp": "2026-05-01T21:53:53Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/thumbnail.png index 0a8a695..db3b76b 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/view.json index 2f58278..b25f453 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_CHW_System_Status/view.json @@ -2,15 +2,16 @@ "custom": { "Alarm": false, "AlarmSevery": 0, - "ModeSts": 5, - "RunStatus": 1, - "Status": 1, - "Tag": "CH01", + "ModeSts": 0, + "RunStatus": 0, + "Status": 3, + "Tag": "CH02", "available": 1, + "maintenance": "value", "priority": 0 }, "params": { - "CH": "01", + "CH": "02", "LLS_tagPath": "[Ignition_Common_IO_Gtwy]CHWS/Chiller_LLS/Reference Devices", "MTR_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH27_MOTOR", "SYS_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH27_SYSTEM", @@ -22,7 +23,6 @@ "config": { "path": "view.custom.AlarmSevery" }, - "enabled": false, "transforms": [ { "expression": "if({value}\u003e0, True, False)", @@ -156,6 +156,9 @@ }, "persistent": true }, + "custom.maintenance": { + "persistent": true + }, "custom.priority": { "binding": { "config": { @@ -201,7 +204,7 @@ }, "props": { "defaultSize": { - "height": 65, + "height": 60, "width": 50 } }, @@ -214,7 +217,7 @@ "name": "Label" }, "position": { - "height": 65, + "height": 60, "width": 50 }, "propConfig": { @@ -304,9 +307,6 @@ "borderTopRightRadius": 5, "boxShadow": "var(--boxShadow2)", "classes": "containers/HoverOver", - "outlineColor": "#000000", - "outlineStyle": "none", - "outlineWidth": "1", "paddingLeft": 2 }, "textStyle": { @@ -321,7 +321,7 @@ "name": "Label_0" }, "position": { - "height": 28, + "height": 26, "width": 42.98, "x": 4.07, "y": 12.72 @@ -395,11 +395,10 @@ "name": "EmbeddedView" }, "position": { - "basis": "320px", "height": 20, "width": 20, "x": 4, - "y": 42 + "y": 40 }, "props": { "path": "Library/Framework/Frwk_Badge_XS", @@ -419,7 +418,7 @@ "height": 20, "width": 20, "x": 26, - "y": 42 + "y": 40 }, "props": { "params": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/resource.json index 6e958fb..a49861c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "82040cdc0ed0442dee5c120eee245d55639f51744d4a0e77f519a93b45bf09a6", + "lastModificationSignature": "27a79921c86d5b16c32f5ad1e86cb5465170ea31ec3e8e4ca92ef7cbbcdd661b", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T01:02:17Z" + "timestamp": "2026-05-02T02:02:04Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/thumbnail.png index 170bf42..f74bf2f 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/view.json index 5173ae0..dae21ba 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_Chiller/view.json @@ -1,6 +1,5 @@ { "custom": { - "Alarm": 0, "RunningSts": 1, "alarmSeverity": 0 }, @@ -9,21 +8,6 @@ "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_CH37_MOTOR" }, "propConfig": { - "custom.Alarm": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Alarms/Alarm Summary" - }, - "enabled": false, - "type": "tag" - }, - "persistent": true - }, "custom.RunningSts": { "binding": { "config": { @@ -77,78 +61,9 @@ }, "root": { "children": [ - { - "meta": { - "name": "AlarmBorder" - }, - "position": { - "height": 0.8333, - "width": 0.91, - "x": 0.005, - "y": 0.1259 - }, - "propConfig": { - "props.style.outlineColor": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": null, - "inputType": "scalar", - "mappings": [ - { - "input": 1, - "output": "var(--coolpurple)" - }, - { - "input": 2, - "output": "var(--goldenyellow)" - }, - { - "input": 3, - "output": "var(--sunsetorange)" - }, - { - "input": 4, - "output": "var(--alarmred)" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.style.outlineStyle": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "code": "\tif value \u003e 0:\n\t\treturn \"solid\"\n\telse:\n\t\treturn \"none\"", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "outlineWidth": "3" - } - }, - "type": "ia.display.label" - }, { "custom": { - "colorHandler": { - "lines": "var(--text-muted)" - } + "colorHandler": {} }, "meta": { "name": "Chiller" @@ -160,10 +75,18 @@ "y": -0.0001 }, "propConfig": { + "custom.colorHandler.lines": { + "binding": { + "config": { + "expression": "if({view.custom.alarmSeverity} \u003e 0, \"#7d1116\", \"var(--text-muted)\")" + }, + "type": "expr" + } + }, "custom.colorHandler.status": { "binding": { "config": { - "expression": "if({view.custom.Alarm}, \"var(--state-faulted)\",if({view.custom.RunningSts},\"var(--state-running)\",\"var(--state-standby)\"))" + "expression": "if({view.custom.alarmSeverity} \u003e 0, \"var(--state-faulted)\",if({view.custom.RunningSts},\"var(--state-running)\",\"var(--state-standby)\"))" }, "type": "expr" } @@ -171,298 +94,20 @@ "props.elements[0].elements[0].fill.paint": { "binding": { "config": { - "path": "view.custom.alarmSeverity" + "path": "this.custom.colorHandler.status" }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "visible" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], "type": "property" } }, - "props.elements[0].elements[0].visibility": { + "props.elements[0].elements[0].stroke.paint": { "binding": { "config": { - "path": "view.custom.alarmSeverity" + "path": "this.custom.colorHandler.lines" }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "visible" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], "type": "property" } }, - "props.elements[0].elements[1].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "visible" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[2].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "visible" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[3].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "visible" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "hidden" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[4].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "visible" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[0].elements[5].visibility": { - "binding": { - "config": { - "path": "view.custom.alarmSeverity" - }, - "transforms": [ - { - "fallback": "hidden", - "inputType": "scalar", - "mappings": [ - { - "input": -1, - "output": "hidden" - }, - { - "input": 0, - "output": "hidden" - }, - { - "input": 1, - "output": "hidden" - }, - { - "input": 2, - "output": "hidden" - }, - { - "input": 3, - "output": "hidden" - }, - { - "input": 4, - "output": "visible" - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" - } - }, - "props.elements[1].elements[0].fill.paint": { + "props.elements[0].elements[1].fill.paint": { "binding": { "config": { "path": "this.custom.colorHandler.status" @@ -470,16 +115,15 @@ "type": "property" } }, - "props.elements[1].elements[0].stroke.paint": { + "props.elements[0].elements[1].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" }, - "enabled": false, "type": "property" } }, - "props.elements[1].elements[1].fill.paint": { + "props.elements[0].elements[2].fill.paint": { "binding": { "config": { "path": "this.custom.colorHandler.status" @@ -487,16 +131,15 @@ "type": "property" } }, - "props.elements[1].elements[1].stroke.paint": { + "props.elements[0].elements[2].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" }, - "enabled": false, "type": "property" } }, - "props.elements[1].elements[2].fill.paint": { + "props.elements[0].elements[3].fill.paint": { "binding": { "config": { "path": "this.custom.colorHandler.status" @@ -504,33 +147,7 @@ "type": "property" } }, - "props.elements[1].elements[2].stroke.paint": { - "binding": { - "config": { - "path": "this.custom.colorHandler.lines" - }, - "enabled": false, - "type": "property" - } - }, - "props.elements[1].elements[3].fill.paint": { - "binding": { - "config": { - "path": "this.custom.colorHandler.status" - }, - "type": "property" - } - }, - "props.elements[1].elements[3].stroke.paint": { - "binding": { - "config": { - "path": "this.custom.colorHandler.lines" - }, - "enabled": false, - "type": "property" - } - }, - "props.elements[1].elements[4].elements[0].stroke.paint": { + "props.elements[0].elements[3].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -538,7 +155,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[10].stroke.paint": { + "props.elements[0].elements[4].elements[0].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -546,7 +163,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[11].stroke.paint": { + "props.elements[0].elements[4].elements[10].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -554,7 +171,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[12].stroke.paint": { + "props.elements[0].elements[4].elements[11].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -562,7 +179,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[13].stroke.paint": { + "props.elements[0].elements[4].elements[12].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -570,7 +187,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[14].stroke.paint": { + "props.elements[0].elements[4].elements[13].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -578,7 +195,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[15].stroke.paint": { + "props.elements[0].elements[4].elements[14].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -586,7 +203,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[16].stroke.paint": { + "props.elements[0].elements[4].elements[15].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -594,7 +211,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[17].stroke.paint": { + "props.elements[0].elements[4].elements[16].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -602,7 +219,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[18].stroke.paint": { + "props.elements[0].elements[4].elements[17].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -610,7 +227,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[1].stroke.paint": { + "props.elements[0].elements[4].elements[18].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -618,7 +235,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[2].stroke.paint": { + "props.elements[0].elements[4].elements[1].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -626,7 +243,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[3].stroke.paint": { + "props.elements[0].elements[4].elements[2].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -634,7 +251,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[4].stroke.paint": { + "props.elements[0].elements[4].elements[3].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -642,7 +259,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[5].stroke.paint": { + "props.elements[0].elements[4].elements[4].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -650,7 +267,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[6].stroke.paint": { + "props.elements[0].elements[4].elements[5].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -658,7 +275,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[7].stroke.paint": { + "props.elements[0].elements[4].elements[6].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -666,7 +283,7 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[8].stroke.paint": { + "props.elements[0].elements[4].elements[7].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -674,7 +291,15 @@ "type": "property" } }, - "props.elements[1].elements[4].elements[9].stroke.paint": { + "props.elements[0].elements[4].elements[8].stroke.paint": { + "binding": { + "config": { + "path": "this.custom.colorHandler.lines" + }, + "type": "property" + } + }, + "props.elements[0].elements[4].elements[9].stroke.paint": { "binding": { "config": { "path": "this.custom.colorHandler.lines" @@ -685,172 +310,6 @@ }, "props": { "elements": [ - { - "elements": [ - { - "d": "M100.525,0.648l6.489,6.489c0.199,0.199 0.199,0.522 -0,0.721l-6.489,6.489c-0.199,0.199 -0.522,0.199 -0.721,0l-6.489,-6.489c-0.199,-0.199 -0.199,-0.522 -0,-0.721l6.489,-6.489c0.199,-0.199 0.522,-0.199 0.721,-0Z", - "fill": {}, - "name": "path", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "path" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M99.83,8.96l-0.351,-4.735l1.371,0l-0.34,4.735l-0.68,-0Zm-0.318,1.81l-0,-1.105l1.305,0l-0,1.105l-1.305,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - }, - { - "elements": [ - { - "d": "M99.522,1.849c0.134,-0.227 0.378,-0.367 0.642,-0.367c0.265,-0 0.509,0.14 0.643,0.367c1.411,2.401 4.768,8.113 6.195,10.541c0.135,0.231 0.137,0.516 0.004,0.748c-0.133,0.232 -0.379,0.375 -0.647,0.375l-12.39,0c-0.267,0 -0.514,-0.143 -0.647,-0.375c-0.132,-0.232 -0.131,-0.517 0.005,-0.748c1.427,-2.428 4.784,-8.14 6.195,-10.541Z", - "fill": { - "paint": "#f4b834" - }, - "name": "path", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "path" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M99.793,9.942l-0.39,-4.988l1.522,0l-0.377,4.988l-0.755,-0Zm-0.353,1.907l-0,-1.164l1.449,0l-0,1.164l-1.449,-0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - }, - { - "elements": [ - { - "d": "M104.973,1.181l0,12.633c0,0.265 -0.215,0.481 -0.481,0.481l-8.656,-0c-0.265,-0 -0.481,-0.216 -0.481,-0.481l0,-12.633c0,-0.265 0.216,-0.48 0.481,-0.48l8.656,-0c0.266,-0 0.481,0.215 0.481,0.48Z", - "fill": { - "paint": "#7166b7" - }, - "name": "path", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "path" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M99.793,9.042l-0.39,-5.001l1.522,-0l-0.377,5.001l-0.755,0Zm-0.353,1.912l-0,-1.167l1.449,0l-0,1.167l-1.449,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - }, - { - "cx": "100.164", - "cy": "7.498", - "fill": { - "paint": "#e22028" - }, - "name": "circle", - "r": "7.198", - "stroke": { - "paint": "#000", - "width": "0.48px" - }, - "type": "circle" - }, - { - "elements": [ - { - "elements": [ - { - "d": "M98.379,9.232l-0.39,-5.617l1.522,-0l-0.377,5.617l-0.755,0Zm-0.353,2.148l-0,-1.31l1.448,-0l0,1.31l-1.448,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - }, - { - "elements": [ - { - "d": "M101.264,9.232l-0.39,-5.617l1.522,-0l-0.377,5.617l-0.755,0Zm-0.353,2.148l-0,-1.31l1.449,-0l-0,1.31l-1.449,0Z", - "fill": { - "paint": "#fff", - "rule": "nonzero" - }, - "name": "path", - "type": "path" - } - ], - "name": "group", - "type": "group" - } - ], - "name": "group", - "type": "group" - } - ], - "id": "Alarm-Items", - "name": "Alarm-Items", - "type": "group" - }, { "elements": [ { @@ -858,7 +317,6 @@ "fill": {}, "name": "path", "stroke": { - "paint": "var(--olGray)", "width": "0.83px" }, "type": "path" @@ -869,7 +327,6 @@ "name": "path", "stroke": { "linecap": "butt", - "paint": "var(--olGray)", "width": "0.75px" }, "type": "path" @@ -880,7 +337,6 @@ "name": "path", "stroke": { "linecap": "butt", - "paint": "var(--olGray)", "width": "0.75px" }, "type": "path" @@ -891,7 +347,6 @@ "name": "path", "stroke": { "linecap": "butt", - "paint": "var(--olGray)", "width": "0.75px" }, "type": "path" @@ -1137,57 +592,8 @@ "type": "ia.shapes.svg" }, { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\ttagPath \u003d self.view.params.tagPath\n\tobjectName \u003d self.view.params.objectName\n\tutils.nav.openEQPopup(objectName, tagPath)" - }, - "scope": "G", - "type": "script" - } - } - }, "meta": { - "name": "Hover", - "tooltip": { - "enabled": true, - "location": "top-right" - } - }, - "position": { - "height": 0.84, - "width": 0.92, - "y": 0.1192 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Parameters.DeviceLabel" - }, - "type": "tag" - } - } - }, - "props": { - "style": { - "classes": "containers/HoverOver", - "outlineColor": "#FF0000", - "outlineStyle": "none", - "outlineWidth": "3" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" + "name": "status" }, "position": { "height": 0.1533, @@ -1196,10 +602,18 @@ "y": 0.7133 }, "propConfig": { + "props.style.color": { + "binding": { + "config": { + "expression": "if({view.custom.alarmSeverity}\u003e0, \"yellow\",\"var(--action-primary)\")" + }, + "type": "expr" + } + }, "props.text": { "binding": { "config": { - "expression": "if({view.custom.Alarm}, \"Faulted\",if({view.custom.RunningSts},\"Running\",\"OFF\"))" + "expression": "if({view.custom.alarmSeverity}\u003e0, \"Faulted\",if({view.custom.RunningSts},\"Running\",\"OFF\"))" }, "type": "expr" } @@ -1207,16 +621,18 @@ }, "props": { "style": { - "color": "var(--tagvalue-color)", - "fontSize": 12, + "fontSize": 14, "textAlign": "center" + }, + "textStyle": { + "fontWeight": "bold" } }, "type": "ia.display.label" }, { "meta": { - "name": "Label" + "name": "LLS_status" }, "position": { "height": 0.1467, @@ -1275,6 +691,139 @@ } }, "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpageId \u003d self.page.props.pageId\n\tsystem.perspective.print(\u0027pageId: {}\u0027.format(pageId))\n\t\n\ttagPath \u003d self.view.params.tagPath\n\tobjectName \u003d self.view.params.objectName\n\tutils.nav.openEQPopup(objectName, tagPath)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "HoverBox", + "tooltip": { + "enabled": true, + "location": "top-right" + } + }, + "position": { + "height": 0.84, + "width": 0.92, + "y": 0.1192 + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "tagPath": "{view.params.tagPath}" + }, + "tagPath": "{tagPath}/Parameters.DeviceLabel" + }, + "type": "tag" + } + }, + "props.style.outlineColor": { + "binding": { + "config": { + "path": "view.custom.alarmSeverity" + }, + "transforms": [ + { + "fallback": null, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": "#00000000" + }, + { + "input": 1, + "output": "var(--alarm-low)" + }, + { + "input": 2, + "output": "var(--alarm-medium)" + }, + { + "input": 3, + "output": "var(--alarm-high)" + }, + { + "input": 4, + "output": "var(--alarm-critical)" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "property" + } + }, + "props.style.outlineStyle": { + "binding": { + "config": { + "path": "view.custom.alarmSeverity" + }, + "transforms": [ + { + "expression": "if({value}\u003e0, \"solid\", \"none\")", + "type": "expression" + } + ], + "type": "property" + } + } + }, + "props": { + "style": { + "borderBottomLeftRadius": "var(--borderRadius)", + "borderBottomRightRadius": "var(--borderRadius)", + "borderTopLeftRadius": "var(--borderRadius)", + "borderTopRightRadius": "var(--borderRadius)", + "classes": "containers/HoverOver", + "outlineWidth": 2 + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "height": 0.1533, + "width": 0.11, + "x": 0.875, + "y": 0.0469 + }, + "propConfig": { + "props.params.AlarmSeverity": { + "binding": { + "config": { + "path": "view.custom.alarmSeverity" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "ack": false + }, + "path": "Library/Alarms/Icons", + "useDefaultViewHeight": true, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/resource.json index 7989679..3819ec2 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "aac86f93e58184b048435fb1db084843e2305334e5624f466d1eda4b12d94358", + "lastModificationSignature": "6fbec9a9205ce67f436b707e4df0da35a1eb8dd9899ab77fdcf76c99361cf239", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T15:54:10Z" + "timestamp": "2026-04-27T21:07:46Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/thumbnail.png index 8b23c15..d275173 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/view.json index 3d15bdc..8b74b5e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Symbols/Mechanical/Sym_ValveC/view.json @@ -229,7 +229,7 @@ "props": { "defaultSize": { "height": 75, - "width": 100 + "width": 84 } }, "root": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/resource.json index f6da3c7..c48cb06 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "26222d61c7fe582c444c0c359f51a60cc65cab5aff214d18eebeeb3cd27f5208", + "lastModificationSignature": "cff232b12abd18bf861437021389e8f52fe852579173471b3b4a5a0757aa1588", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:34Z" + "timestamp": "2026-05-02T03:14:06Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/thumbnail.png index dd2018e..b75e792 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/view.json index 92dbed9..bdc034f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -258,16 +251,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -381,7 +369,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/thumbnail.png deleted file mode 100644 index d7e6118..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/view.json deleted file mode 100644 index 5f48c54..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Meta/view.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "custom": { - "allTags": null, - "auth": { - "almAck": false, - "almShelve": false, - "config": false, - "control": false - } - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.auth": { - "binding": { - "config": { - "path": "session.props.auth.user.roles" - }, - "transforms": [ - { - "code": "\treturn utils.roles.validate(value)", - "type": "script" - } - ], - "type": "property" - }, - "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\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/thumbnail.png deleted file mode 100644 index bf55ec5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/view.json deleted file mode 100644 index 0ef98d5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ATS/Trends/view.json +++ /dev/null @@ -1,483 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1267 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "custom": { - "key": "value" - }, - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\ttagName \u003d tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1]\n\t\t\t\tlowtagName \u003d tagName.lower()\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + lowtagName\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/resource.json index 0935dd4..9555b01 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "9200bcd0ad66b0c9cfc06b2a6832afee9251dc0e7a2287300970c11d782dfb7b", + "lastModificationSignature": "45a017a7353520b1e9324e242b2fb663b71299a51a0ecc20965f0b458bd24cdb", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:14:05Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/thumbnail.png index 817e4d0..b75e792 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/view.json index 0c7967e..2fe333e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/thumbnail.png deleted file mode 100644 index 51e8716..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/thumbnail.png deleted file mode 100644 index cd6bdce..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/view.json deleted file mode 100644 index d0c608a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogIn/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_TT02" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"HH:mm\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/resource.json index 044da70..99e4a0e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "de73ac6d51857328ef9d308cd8b5a64f774be95b36f062dfa34ef88c3cb31c82", + "lastModificationSignature": "3d8b2d2cfe6ea42f12cab942c0d05043cbb7b8510795fedc384046b24f2a7191", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:14:04Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/thumbnail.png index 6b17c90..e09e21a 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/view.json index a67c101..9aa5750 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 1 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/resource.json deleted file mode 100644 index 0f75265..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f8e70810d4b8b59e27c9ffb9e125a0e509836e51ad31a89d0b9211c4a3d8f173", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/thumbnail.png deleted file mode 100644 index 51e8716..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/view.json deleted file mode 100644 index 81a95b5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Meta/view.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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" - }, - "persistent": true - } - }, - "props": { - "alignContent": "flex-start", - "elementPosition": { - "basis": "50%", - "grow": 0 - }, - "instances": [ - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Alarm Description" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Building" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Cabinet" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqMake" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqName" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/FW Version" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Floor" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Gateway Name" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/IP Address" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/ModelNo" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Port" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Room" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Switch Location" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Tooltip" - } - ], - "loading": { - "order": "with-parent" - }, - "path": "Library/Framework/Tag Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/resource.json deleted file mode 100644 index d9f0511..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "dbcbaf0ef4c3b74aab8cfc7af2563af050f71b6a3efaa1cec2ab1ad20da71055", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/thumbnail.png deleted file mode 100644 index cde5dd1..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/view.json deleted file mode 100644 index 5bf44e2..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInROCRS485/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]DH1/SATB1_DH1_PNL24_H1_TT01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947393186 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947393186 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/resource.json index 9165796..11b1d5a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "d5304e4615dcf2915fcdc7d14455902095869d6f6da91319831a53b256a275c8", + "lastModificationSignature": "6c4d272e0d4ebfe002859b9afd38b52bb4a5e679b6aa4f4492fbb0723347b431", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:34Z" + "timestamp": "2026-05-02T03:14:03Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/thumbnail.png index 6b17c90..9126dc1 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/view.json index a67c101..8420dbf 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/resource.json deleted file mode 100644 index 3bab992..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "363b44fea191a64aceee50531bec966bb3c90b1c947540cb674773362beed73f", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/thumbnail.png deleted file mode 100644 index 51e8716..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/view.json deleted file mode 100644 index 81a95b5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Meta/view.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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" - }, - "persistent": true - } - }, - "props": { - "alignContent": "flex-start", - "elementPosition": { - "basis": "50%", - "grow": 0 - }, - "instances": [ - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Alarm Description" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Building" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Cabinet" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqMake" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/EqName" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/FW Version" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Floor" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Gateway Name" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/IP Address" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/ModelNo" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Port" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Room" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Switch Location" - }, - { - "dataType": "String", - "enabled": true, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS/Meta/Tooltip" - } - ], - "loading": { - "order": "with-parent" - }, - "path": "Library/Framework/Tag Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/resource.json deleted file mode 100644 index d9f0511..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "dbcbaf0ef4c3b74aab8cfc7af2563af050f71b6a3efaa1cec2ab1ad20da71055", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/thumbnail.png deleted file mode 100644 index cde5dd1..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/view.json deleted file mode 100644 index 5bf44e2..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AnalogInRS485/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]DH1/SATB1_DH1_PNL24_H1_TT01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947393186 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947393186 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/resource.json index 0f08498..1cdf50e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "64ec04223caa4257653ad4b1b14f2155c04e0adb0017cfefa0dd16a472f41d64", + "lastModificationSignature": "48a7fe30d8ad2b39cfdef0feb15453ce469239440c7f8d9be703e4eb460ed6bf", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:14:02Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/thumbnail.png index 93b5f55..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/view.json index b7047b7..cacb3ce 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/resource.json deleted file mode 100644 index 65f15f0..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "148b585b90fd3cb1b90dc43e5b81dad518b1faa324273f7685c6698b4bee3ac0", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/thumbnail.png deleted file mode 100644 index 51e8716..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/resource.json deleted file mode 100644 index 854270f..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "97a913128ffeab2b41013a3fbab094b1beb39bbe8fc8dcb8db538e01f837416b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/thumbnail.png deleted file mode 100644 index ff437da..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/view.json deleted file mode 100644 index a36adcf..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/AvgMinMax/Trends/view.json +++ /dev/null @@ -1,481 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CH31_SYSTEM" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - }, - "selected": true - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/resource.json index 943d5c9..e01710e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c2cba3cca9464a52e027759df1803232e20c2ae875494dd295ba17d2a6970e00", + "lastModificationSignature": "9e577d642def7e012c1d8610b725d4aad9862ff464d47f08b97d89ec2350b2f0", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:32Z" + "timestamp": "2026-04-28T21:41:07Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/thumbnail.png index 6bb5024..7b93152 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Base/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/resource.json index f84c1d3..f528f25 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "76d8ba96c323fa2efe07cbb15e55a87f5af622fcb6536adc4f7845aaa39af5c6", + "lastModificationSignature": "4bb3632ce135629e8d45c2aac59afb5e8c66e24b862267279f30ba9e5d612c47", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:14:01Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/thumbnail.png index 266cdcf..245ba01 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/view.json index 1fd7637..7e986f5 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Body/view.json @@ -157,20 +157,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +244,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +362,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/resource.json deleted file mode 100644 index 1046144..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "b8d17ee7e364c8910a0873209c5cac8cb9395f9b494bf0622ab17cf68a206516", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/thumbnail.png deleted file mode 100644 index c5f2965..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/view.json deleted file mode 100644 index e1becab..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Meta/view.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Type", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Breaker Type" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 ConfigV2", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/resource.json deleted file mode 100644 index aba3914..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "1526ca438c32dbb236debbba507728ee0173984db03a3c3788940e70ccb76b12", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/thumbnail.png deleted file mode 100644 index 2fbb0a5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/view.json deleted file mode 100644 index 88da5e9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker A/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Breaker 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/resource.json index fd055dd..109b55f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "066b3f659c9438c959e96585f9d334f81166fb19cb8ff65a2e92c903cc0771c8", + "lastModificationSignature": "302a783f84430bd3e155d693e8924d0c5c5ac65251b543bdfc66717781fd54b9", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:14:00Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/thumbnail.png index 6c0aa97..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/view.json index 4aabe17..3ab7cac 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Body/view.json @@ -157,20 +157,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +244,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +362,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/resource.json deleted file mode 100644 index c5ceb08..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "e53e504e712ef2e5a93f373bb02ea8716e2c3f069cf528a371715a5f693268fc", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/thumbnail.png deleted file mode 100644 index 16903a5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/view.json deleted file mode 100644 index e1becab..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Meta/view.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Type", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Breaker Type" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 ConfigV2", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/resource.json deleted file mode 100644 index aba3914..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "1526ca438c32dbb236debbba507728ee0173984db03a3c3788940e70ccb76b12", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/thumbnail.png deleted file mode 100644 index 2fbb0a5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/view.json deleted file mode 100644 index 88da5e9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker E/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Breaker 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/resource.json index 2a4a5e8..7b0a657 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "3ab7ae03c2c2454025f154f1f1d48bec88fbb0b5c9a74a045e240f4c0b23d1d8", + "lastModificationSignature": "f5fd3bd56cfaa925248fa87a066f15d677a3fc1156e8182a50ca4c8fbcae519f", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:13:59Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/thumbnail.png index de3d969..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/view.json index b6ec2c0..235abc1 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Body/view.json @@ -157,20 +157,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +244,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +362,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/resource.json deleted file mode 100644 index 022dbb3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "99530aa9d4823f5dc49785da79924f390a0ab4a60f8390a7d21bdcf57a1d811b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/thumbnail.png deleted file mode 100644 index 16903a5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/view.json deleted file mode 100644 index e1becab..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Meta/view.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Type", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Breaker Type" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 ConfigV2", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/resource.json deleted file mode 100644 index aba3914..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "1526ca438c32dbb236debbba507728ee0173984db03a3c3788940e70ccb76b12", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/thumbnail.png deleted file mode 100644 index 2fbb0a5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/view.json deleted file mode 100644 index 88da5e9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker P/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Breaker 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/resource.json index 18d99c0..ba38132 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "4fe077d3ebf08bc175c4dbd8d6eee907f2a33f685cce609b5d515512e2f3059f", + "lastModificationSignature": "7b7a482a7bff0c170636361c1a482bfa5fa92e50ce58fbcd89166de1db2f5447", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:13:58Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/thumbnail.png index 5c135e4..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/view.json index 119f5cb..d8436cd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Body/view.json @@ -157,20 +157,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,16 +244,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -374,7 +362,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/resource.json deleted file mode 100644 index de5b61b..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "28da9f43f302c10b68687993dd8287e353e3e10c097f33452469ce7b86ae2fe6", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/thumbnail.png deleted file mode 100644 index 16903a5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/view.json deleted file mode 100644 index e1becab..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Meta/view.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Breaker Type", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Breaker Type" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]ER1242/SWBD/SATB1_ER1242_CB-52F1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 ConfigV2", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/resource.json deleted file mode 100644 index 5a05a00..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "061c0442b3d278916e8b5a08fc619ac63541cda37c2a0dc1e831301046ddb15a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/thumbnail.png deleted file mode 100644 index 5622557..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/view.json deleted file mode 100644 index 0090aa9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Breaker X/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]ER1248/SWBD/SATB1_ER1248_CB-52U" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947448421 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/resource.json deleted file mode 100644 index 4597d5a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "aa1da9628552002e058dac28cc83e86a5bbe38a5a6dd02695137c83104ace6f2", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/resource.json deleted file mode 100644 index b042073..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9878da8cf0b915fac0a8b4656e7036e555b2f3492a6f4bcf3092257c087f2648", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/resource.json deleted file mode 100644 index 79bf7dd..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3c8a67fa71e05b47c25896c8bdbb5ec8f5f98d0ae003be2998428b5bf9896841", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/resource.json deleted file mode 100644 index ed8c02d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3c81c6f7af35539a69973ec8053b6732c0ef51cd9b02e7a1f99c01dd73cb63dd", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/resource.json deleted file mode 100644 index 2eac0c4..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CAM/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "bce2b5e42b49a08bcbdeb402c1838c55685eadbab2dfb38dc76de6df30953135", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/resource.json deleted file mode 100644 index 0242a52..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "0c5ac5b654de1800065eb6721c79f04156cfd6ce716b97326b4f8e51010aeeae", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/resource.json deleted file mode 100644 index 61a8f02..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ac27446b2b310ffd96df29ad744dafa0b47f8b293df7b31ee9e72816b574f7ef", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/resource.json deleted file mode 100644 index c2d9edf..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "2434929ffb6deb7ef04568514f274721c2e37eef87a264c97a814c612f77d6e1", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/resource.json deleted file mode 100644 index e615b2d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "a48061f6bb4017052f07daf4ba0a315dc73c5499a50d3d80da0a8f90e11f9418", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/resource.json deleted file mode 100644 index 4bca754..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "2aac2ff4afdf2d26faac278ea26194b3293338a5bb5ecf07ca00f677f7db8971", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/resource.json deleted file mode 100644 index 5c6d4a8..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAC/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "20a94fe3962c9439c49ac8e26951674a347f284fd936839c998153a57fcdf65a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/resource.json index 5e65b0b..0aa24cd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "ab57cbce055a3e6ce5b236bcc440f8ac1358c26a0c88e55083d0189c879877d6", + "lastModificationSignature": "4a71c5940a5a167c8e5d8ff72dfd13ef421d7c443576dc2bfc266fcf686e3b38", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:13:57Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/thumbnail.png index 27ffe19..c8f3ae8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/view.json index 0fb8add..ec1d064 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/resource.json deleted file mode 100644 index 6bfc08f..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "de91a50982b75b327b99f0842052438c51f1d0311ec4a586bfd7aa92cbe411c3", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/thumbnail.png deleted file mode 100644 index 185855f..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/view.json deleted file mode 100644 index e1e61c5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/CRAH/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/resource.json index 99aa4eb..34babdb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "2aa895fa9b6f0fb17399704cb78a076db5ca772c8902acb2feefa2c665dc9488", + "lastModificationSignature": "1e151713dfbbe15d26b034cc6277055b340c4b3124d5eebe6e61d6fb1e9a7548", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:16:29Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/thumbnail.png index b844c94..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/view.json index bd5c748..72b5641 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/resource.json deleted file mode 100644 index 4f97b4e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "783b2547578393ea0465021a8200d1ecd8cfc8e27a02fc9a7a57faf2083fc32c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/view.json deleted file mode 100644 index 5335abd..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS\n" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/resource.json deleted file mode 100644 index 7ac9fbe..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "8c4d530d8c589a8db00003155b181e3e259e3ab4586f2391ca3f40dfc4386ee1", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/thumbnail.png deleted file mode 100644 index 4ba3cba..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/view.json deleted file mode 100644 index 34c26b9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller LLS/Trends/view.json +++ /dev/null @@ -1,621 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Demand_SP", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Demand_SP" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Enable_ChillerCMDS", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Enable_ChillerCMDS" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ORef_Chillers", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/ORef_Chillers" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ref_Chillers", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Ref_Chillers" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_Avail_Chiller", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_Avail_Chiller" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_Chillers", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_Chillers" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_LineUp_Adjusting", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_LineUp_Adjusting" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_LineUp_Complete", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_LineUp_Complete" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Sts_TransActive", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Sts_TransActive" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Val_Avail", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Val_Avail" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Val_Demand", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Val_Demand" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Val_Fdbk", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1/Val_Fdbk" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller LLS 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947775165 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947775165 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/resource.json index 5eac9a5..bcd87dd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "e60dca21faa6aae357aade7cfe9edfc0c2661fd0cd540c7f965190f1d9b30129", + "lastModificationSignature": "242225a8c1ce9247da86dadc37c6086e11e157f6ce0a51864c80dfa099dad4b8", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:16:30Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/thumbnail.png index c914516..e09e21a 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/view.json index 033769a..5239f9e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 1 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/resource.json deleted file mode 100644 index eaf4b0c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3eeeebfbec406ac1145ed36a85c9beddfa623b1ea233d67f482de8af279777a7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:31:44Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/resource.json deleted file mode 100644 index 9fe2128..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9349e5a157dc2b3e5457a03fe914e05c7be2326b79992ddc9591386c08b5633a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/thumbnail.png deleted file mode 100644 index 15d0ae4..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/view.json deleted file mode 100644 index c15f9b3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Chiller/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Chiller 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/resource.json index 2d732fd..0c5e287 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "3e79966c279ef43b138a112fed25179108982eb1e046c2d360241c79581dfb95", + "lastModificationSignature": "c17bd1a128819f01237ca5b83195128d386d55d8e46c68e54141a620ee49f611", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:34Z" + "timestamp": "2026-05-02T03:16:27Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/thumbnail.png index bd4fc76..3a8a766 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/view.json index fb72f4c..a8fd2d7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/resource.json deleted file mode 100644 index ad79dd1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "a3b1a5ef6faf7e59421906fdd2475d9ec0c49116aa21b3be3510a4d2f848531f", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/view.json deleted file mode 100644 index 31f6006..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Meta/view.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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]\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/resource.json deleted file mode 100644 index c932085..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "04e617c8664a7e30ef7c8a84581f71095415c181bc677ac9bf374fd302df559e", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/thumbnail.png deleted file mode 100644 index d39f37b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/view.json deleted file mode 100644 index 52268c4..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ChillerSystem/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CH31_SYSTEM" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947799223 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947799223 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/resource.json deleted file mode 100644 index 00d983b..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "0ba8b412a02b90e7bf73db4db518c29009b77f94735676398c081b2196b76262", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/resource.json deleted file mode 100644 index 40e110e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "c547c9841bbdf46f1c6bdb1f513655958f3fd866852f19c2ae1205d42c4dc81d", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/resource.json deleted file mode 100644 index ee30c79..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f2cb84e6e366ccd577878b7086ba34a62eef700d86d43840880d989fcbe519ff", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:06:47Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/resource.json deleted file mode 100644 index b3c6412..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "5f52c7660a989c2fecdf93a5ec6d19451f94f9747ce0c31d7f200ab51227307c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/resource.json deleted file mode 100644 index 1de5190..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DHUM/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3c7e53905c2ed035f70e9720a79abdf8ea93c655753c78e1022e8ebf633929f4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/resource.json index 93e4d13..5cd44a1 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0361a23c967985fc7e71609f348fefad3fa70fbc6b451e41e04013254167e4f3", + "lastModificationSignature": "d27cc53067a780d71eeb7440466f16101fe06b19aa17f76ec9e2dae86c67b411", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:18:25Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/thumbnail.png index fe7e824..4bab4ec 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/view.json index abd902b..2e6220c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Body/view.json @@ -1,6 +1,6 @@ { "custom": { - "UDTSelected": 2, + "UDTSelected": 1, "tabsConfig": { "tabs": [ "Status", @@ -149,7 +149,7 @@ "props.path": { "binding": { "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info \u0027,{view.custom.UDTSelected})" + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Info\u0027)" }, "type": "expr" } @@ -196,20 +196,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -251,7 +244,7 @@ "props.path": { "binding": { "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config \u0027, {view.custom.UDTSelected})" + "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Config\u0027)" }, "type": "expr" } @@ -298,16 +291,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/resource.json deleted file mode 100644 index 1432a02..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "25a5bd91e2e2e7443b5a7f6a55a1b175afb42e9331b199d2c65414ac4c730755", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:31:42Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/thumbnail.png deleted file mode 100644 index b9cf66d..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/resource.json deleted file mode 100644 index 0d54119..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "0e92938c70d1f62aeef37f4d9fe7bb449fd23909f102b3a0f47a08770a7ef1be", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/thumbnail.png deleted file mode 100644 index e584f93..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 2/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/resource.json new file mode 100644 index 0000000..1197530 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "839f201b40ff7c9249cf1120f71c454faa49dfe4c60d7702232fcc47f944de8e", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:17:06Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/thumbnail.png new file mode 100644 index 0000000..39bf46c Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config 1/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Config/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/resource.json deleted file mode 100644 index 3ec0121..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "86c9d94d12a2734f6710c5212a93e0ff4245c71757bb14209dd2775071428cb0", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/resource.json deleted file mode 100644 index 9454535..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "0fc8a448156531d58a8391ec489bd5a9e9a6cd8f6c77fccbf787c1288f9adba3", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/thumbnail.png deleted file mode 100644 index 91b7c19..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 2/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/resource.json new file mode 100644 index 0000000..8c93972 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "c9df01c6a92ee09b7a7aa31e20d4f486036f8ebb9d17985011114bf9c408f4e8", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T03:17:04Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info 1/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Info/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/resource.json deleted file mode 100644 index b227922..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "be7a6515630d7caa93b796ca88b06be7f49b9d985ef6274c7556ef33a9c0928b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/thumbnail.png deleted file mode 100644 index dc3f948..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/view.json deleted file mode 100644 index e966743..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DOAS/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/DOAS1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947830409 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947830409 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/resource.json index d5c4cb4..6fc16f4 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "83a7d8ce9b6d4f744ecb24fe25b0cfc6ed06bf33ebfdfe332c48f119e3314db1", + "lastModificationSignature": "a4cb41168cec406ad88479714dea13c193ccae1cb574a9af87fef681b6d45e2c", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:34Z" + "timestamp": "2026-05-02T03:19:33Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/thumbnail.png index 0a74829..662b97d 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/view.json index 5e578e4..43ac799 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Body/view.json @@ -167,20 +167,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -269,16 +262,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -400,7 +388,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/resource.json deleted file mode 100644 index 8cc51b5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "dcef7de00338eca203828f59835d8c41a1bc147c094130a6c126c0ff350f09ad", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/thumbnail.png deleted file mode 100644 index 3b9892c..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Info Old/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/resource.json deleted file mode 100644 index 9cbf52e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "2452c21071e4f044d9037948c92ef12c0651811fc048b589f817a9a9bb01001f", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/thumbnail.png deleted file mode 100644 index bf04acb..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/view.json deleted file mode 100644 index f9db101..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Trends/view.json +++ /dev/null @@ -1,430 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_DS-1A1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t#histprov:MSSQL_Server:/drv:ignition-satb1-io6:default:/tag:yard/satb1_yard_ds-1b1/breaker open way 01\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1744233841621 - ], - "$ts": 1744271940000 - }, - "rangeSelectorPen": "histprov:MSSQL_Server:/drv:ignition-satb1-io6:default:/tag:yard/satb1_yard_ds-1b1/breaker open way 01", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1744233827719 - ], - "$ts": 1744039359000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - } - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947885209 - ], - "$ts": 1744271940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:MSSQL_Server:/drv:ignition-satb1-io6:default:/tag:yard/satb1_yard_ds-1b1/breaker open way 01", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947885209 - ], - "$ts": 1744039359000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/resource.json index 5b2d266..03775e3 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "e8548e06dd0b1df303d7ca92142eb88913c145fddc474395f4ad4004c0506066", + "lastModificationSignature": "5ed7f82d741e803922c89f68435311e139a31417871c6b9639b79b3e08e51f66", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:20:10Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/thumbnail.png index d68322a..9d3b654 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/view.json index f4498cf..1673fc1 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -315,7 +308,7 @@ } }, "props": { - "path": "Library/Framework/Tag Notes/View Notes" + "path": "Library/Templates/Meta" }, "type": "ia.display.view" }, @@ -397,7 +390,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/resource.json deleted file mode 100644 index a396847..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "fce297aa949a4bcb3f4a2636fd4d47d1ecfb4f202264000732c4e651ff29f590", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/thumbnail.png deleted file mode 100644 index fb196f3..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/view.json deleted file mode 100644 index bfafe50..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Trends/view.json +++ /dev/null @@ -1,555 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cold Aisle Space Humidity", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Cold Aisle Space Humidity" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cold Aisle Space Temperature", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Cold Aisle Space Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Hot Aisle Differential Pressure", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Hot Aisle Differential Pressure" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Hot Aisle Space Temperature", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Hot Aisle Space Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Space Dew Point Setpoint", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Space Dew Point Setpoint" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Space Differential Pressure", - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall/Space Differential Pressure" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Data Hall" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947899741 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947899741 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/resource.json index 6e28051..68e435a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0c47973489649732dd907117f296102a9ab35a9815a1a61e0443710e3537460c", + "lastModificationSignature": "4cb9f6c62d05d32e954d78f0023640dd8166e27b00bc47f484313f9aa7ab4bd4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:22:01Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/thumbnail.png index e54c21e..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/view.json index cdef63f..363a33f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 4 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/resource.json deleted file mode 100644 index 5ab1f09..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "6482e972ed9e272861499708e864f6ff3cac5f83f839b670668c18f567279ab2", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/thumbnail.png deleted file mode 100644 index 86c1272..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/view.json deleted file mode 100644 index 7e38499..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DiscreteIn/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_UT-M1/Source 1 Switch" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/resource.json index 5b60221..f2021fa 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "9fac8aa400629c6af970a4dca03a4c73d8b88edcabd67bb627ae27ab37fd2307", + "lastModificationSignature": "591e8f1f81515caa7a14d7268467641ea454fe74ecbdb3fa5e1b26518fe213c6", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:34Z" + "timestamp": "2026-05-02T03:22:00Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/thumbnail.png index 9a9f578..36cbecc 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/view.json index 9975575..b78fe5a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/resource.json deleted file mode 100644 index 5d74b75..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "95f683f6128615092ec2d262a58881f5f4114cd2a082b33f050c94efde7aac52", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/resource.json deleted file mode 100644 index 76b625a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "0f94524fa270648d2c26440252f29d71b83a87a88dbce40693c6ee312161ce08", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/resource.json deleted file mode 100644 index 18fe792..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "82e75b857c0235b11285255a11044e70aaf24c191ee72912ba67962f693b32d1", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/resource.json deleted file mode 100644 index 1bb97ff..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "e45e0a2014c896fd3a9d875bd2110ec5781b9b4fa8e6d05b5e1ed75d35585b4f", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-23T19:23:02Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/resource.json deleted file mode 100644 index 17bcdb7..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "d253c03f3af145cf063c3bf51c835dc4745502910b538524642e8a309ec2ce78", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/resource.json deleted file mode 100644 index d6dd790..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "c2fe195d6904a06c9e7f804ee67ddff63cd1a2fccb402d101cfcf62ea7bdb444", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/thumbnail.png deleted file mode 100644 index 3099273..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/view.json deleted file mode 100644 index cb865d0..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/EF_V2/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948666485 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948666485 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/resource.json index acbe137..d473ca7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "18f0aef53a9b8859ade0d74dd3703c4e259bfc5d321056e5f8fb212de44e82fe", + "lastModificationSignature": "2ff0f8dbddd8cc5d3506657538b35fa7da9768d9ca8cddece9ec438aadd50ade", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:21:55Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/thumbnail.png index 9a9f578..5edd314 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/view.json index 9975575..b78fe5a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/resource.json deleted file mode 100644 index 5d74b75..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "95f683f6128615092ec2d262a58881f5f4114cd2a082b33f050c94efde7aac52", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/view.json deleted file mode 100644 index 0b97663..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ESP/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Motor 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/resource.json index ba06b6d..8995bf6 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "dc2b16fee6ed8788f7c94cc0767e32a715a753e592e53737362c42985860ae10", + "lastModificationSignature": "21437237b021932be426eafd2cc7fa6d97d19df69b0c7a48ea87ec389897c593", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:35Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/thumbnail.png index 35fe82b..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/view.json index 9796365..b4b4166 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FCU/Body/view.json @@ -1,8 +1,8 @@ { "custom": { "tabsConfig": { - "showConfig": true, - "showControl": true, + "showConfig": false, + "showControl": false, "tabs": [ "Status", "Control", @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -402,7 +390,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/resource.json index cae9de3..ddc9b10 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "e92ec72c68bb1848a51f98cdf51780d6e3b723de54eacb3ef64d25ce8b101cc2", + "lastModificationSignature": "b04a20163209f4036a73d59b033673217f05a098860c40e40c98dae6d97a67c5", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:34Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/thumbnail.png index 019aff1..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/view.json index c07e7d9..f71d699 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 4 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/resource.json deleted file mode 100644 index ad0b557..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "192350f5306750b531163715098a304e7654baae0567dfa60e9eda4b1b2d1ac5", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/thumbnail.png deleted file mode 100644 index 8c7e6c0..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/view.json deleted file mode 100644 index 6d10349..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Fire Panel/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]RM1102/SATB1_RM1102_Fire System Panel" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"HH:mm\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947368983 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/resource.json index 6e5be96..ca16854 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "d5adf19f2aad0fee2c46b6bd0783338d4a5c90c2946e8e43e1c8b5940e44a0e0", + "lastModificationSignature": "a6b7dc3b13c21750935f6b626f206b3f9fff8a9f2f744bf92a3150da69f65918", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" + "timestamp": "2026-05-02T03:29:33Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/thumbnail.png index 0b23bee..3a72b3f 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/view.json index f1fc78b..47e6c8a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/FltCodeEnables/Body/view.json @@ -179,7 +179,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 4 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/resource.json deleted file mode 100644 index a10e5c2..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ad78638669df63b67d6e6ad96413e22899b24251045cefde91ecc914f9dfadc6", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:21:02Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/thumbnail.png deleted file mode 100644 index e4e1728..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Framework/TrendTable/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/resource.json index a88b3f7..5b76025 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c5c5221ce64ad7f271f241422332939a7080cf14379441c309f81ab82539d746", + "lastModificationSignature": "6b36e399806bdb96a4eea3e75724074e07c5c9fba387934b4905be4d1659f702", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:32Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/thumbnail.png index dac37af..58bfa35 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/view.json index 347ed4b..586c790 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Body/view.json @@ -167,20 +167,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -269,16 +262,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,7 +389,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/resource.json deleted file mode 100644 index 5797856..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "68a856a5d74efe5a81a57a588d6a32a809bf7759987179c2564dd37114dd2aa8", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/thumbnail.png deleted file mode 100644 index a2529a4..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/view.json deleted file mode 100644 index 16e671c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/Trends/view.json +++ /dev/null @@ -1,483 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_GEN-P1-3" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1267 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "custom": { - "key": "value" - }, - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\ttagName \u003d tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1]\n\t\t\t\tlowtagName \u003d tagName.lower()\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + lowtagName\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/resource.json deleted file mode 100644 index 3c1d27c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "83f1e8352af156fcc8d57bd8ddcee61d80f7e2842302e7d05922baefedeb5672", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:21:21Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/thumbnail.png deleted file mode 100644 index 831e3a2..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/view.json deleted file mode 100644 index e06d7a9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/GEN/_Trends/view.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [ - "Amps A", - "Amps B" - ], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Generator 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\t" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "measureOfTime": "minutes", - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "historical", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730879452730 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730733759000 - }, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/resource.json deleted file mode 100644 index 7661e94..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "431e07f011c9274f7ff47ad5192fced934c948bfe8bc313507e630af748577d1", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/resource.json deleted file mode 100644 index 44ad8a1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ee75db30dacffc9e2bfa5b439cbd1164ef84136aac2c95fb9e4441a6797f476d", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/resource.json deleted file mode 100644 index 41ee8a3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "e10dc4f002c05893a97677d9d3fe4630fb88d2835cee6e6ec59e0e636a1ca86a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:21:22Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/resource.json deleted file mode 100644 index 609269c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "cfc9afea1aeca104d1fd1516df26f3a662cb48657a9c6735a67f2f2c302481f6", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-23T19:23:02Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/resource.json deleted file mode 100644 index dc2e0b9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "11aa2cc1d8f2a4e78d40f054dc2d0f8d9d54122ec316946403e99c2d1dbd6233", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/resource.json deleted file mode 100644 index 778b681..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2 HS/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "24b894d43feb552cb6eabc05c97e3b0255b1d3f05b849d2f00e124f154aa1b06", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/resource.json index 80efb9f..63793f0 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "5507fc1e78b17a8c21afd7b9beb5b84f5e768fc5d14e7311a9d19e3be771087e", + "lastModificationSignature": "46f3bca624b0aee66ca9d1cc0a684041dce3c76bd708707ad58211a44499cddb", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:31Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/thumbnail.png index 4e822c9..0d0407e 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/view.json index d541c37..624cd3f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Body/view.json @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,7 +389,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/resource.json deleted file mode 100644 index 5038a43..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "a0434e451ff613f66ae899bac4fda9009ac9b4f6da91b794eb8a2f8204aa730b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/resource.json deleted file mode 100644 index 778b681..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/H2/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "24b894d43feb552cb6eabc05c97e3b0255b1d3f05b849d2f00e124f154aa1b06", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/resource.json index 00d983b..447103e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0ba8b412a02b90e7bf73db4db518c29009b77f94735676398c081b2196b76262", + "lastModificationSignature": "30fbe971cd4d5cfe853e8941d08bbfc52fd2049f3c92a4488f5aa7a878a8dc6a", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:30Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/thumbnail.png index a969c6a..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/view.json index 4760c50..fd6ff1b 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -269,16 +262,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -400,7 +388,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/resource.json deleted file mode 100644 index 1de5190..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3c7e53905c2ed035f70e9720a79abdf8ea93c655753c78e1022e8ebf633929f4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/thumbnail.png deleted file mode 100644 index e3a81ac..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/view.json deleted file mode 100644 index c06bff4..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HUM/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947980653 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947980653 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/resource.json index 8cdacd8..024ed80 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "fb1729c653b57e396b5b6c47ebc33379d9e8a6785a8c257488295500a9794758", + "lastModificationSignature": "b626ce55b661871119e25d5b7be73715b016082f25db57b5e6fa6cd9a3021fdb", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:29Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/thumbnail.png index 83214ed..918e355 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/view.json index a3a576f..980d79e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Body/view.json @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,6 +389,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, + "currentTabIndex": 3, "tabs": [ "Status", "Config", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/resource.json deleted file mode 100644 index 4df68d3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "7168d41b3d629db3b311c40c1212ed70d694663f0316a3366c34c891dbd28b4e", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/thumbnail.png deleted file mode 100644 index a2529a4..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/view.json deleted file mode 100644 index 16e671c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/Trends/view.json +++ /dev/null @@ -1,483 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Yard/SATB1_YARD_GEN-P1-3" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1267 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "custom": { - "key": "value" - }, - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\ttagName \u003d tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1]\n\t\t\t\tlowtagName \u003d tagName.lower()\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + lowtagName\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947963012 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/resource.json deleted file mode 100644 index 86d57eb..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "b8d25eaec09daeaf1b525cee109e9408187c7890f16d92077c5948424411dac7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:24:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/thumbnail.png deleted file mode 100644 index 831e3a2..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/view.json deleted file mode 100644 index e06d7a9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/HarmonicFilter/_Trends/view.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [ - "Amps A", - "Amps B" - ], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Generator 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\t" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "measureOfTime": "minutes", - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "historical", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730879452730 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730733759000 - }, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972414891 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/resource.json index 358a420..db8102c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c0bffa3b70eb05a21788086946bc34af5f66f518ff71097725c954d73cecb458", + "lastModificationSignature": "dcb5896a8cb1980b6b63a709fe4fb7e433e9f0df44c9a95633536fac0761e4fc", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:28Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/thumbnail.png index baf0f92..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/view.json index c974885..412c7ec 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 3 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/resource.json deleted file mode 100644 index b13d349..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "5fce1f84bc3b973b50e0987f36463ee92c790ea0cc74fe582db1b3b774dcaf64", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/thumbnail.png deleted file mode 100644 index 88290f1..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/view.json deleted file mode 100644 index 8938532..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LD/Trends/view.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/CV31" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/resource.json index d7d70f3..518d787 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "795ffbe4488f708c6ba96539d08af15cad82ae5d35b8e721b632e0abe09a42a7", + "lastModificationSignature": "987e1dac0758c4f7e5373ac0d031fb48b4bc5f67790a247e8d39a6344f19b315", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:27Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/thumbnail.png index 9539a1b..584543c 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/view.json index 1f2ff7b..89683e7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/resource.json deleted file mode 100644 index d7d780a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV Feeder/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "e0ce3ee29d0a96dd5462d2358650b6029d8c302361a31db639de759b4b73d147", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/resource.json index 56f2d3c..a59847c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "08951d9b7d5037d5eaabcf4113d98acf497ae69a7bc54c009e78d44225772925", + "lastModificationSignature": "163691242a172ca7f7ae8ba1da3ba87d6679920851e1f988bd1e90a34b231155", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:26Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/thumbnail.png index 9539a1b..ef658e8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/view.json index 4b6ed29..04c82a9 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/resource.json deleted file mode 100644 index cd185f8..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/LV SWBD/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3883803260750c60ca66899ec1fe290156892e2b8ad024bfc696771911492a8e", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/resource.json index b19d0ac..6cc150f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "3f02362355fdcecb0374e3368bbcf13f2c849f1c57c8f711667105d69da1d857", + "lastModificationSignature": "c783cab3b97020697f2ebf81400cbd9de8a1b2a1dc5d1ad125c8069d35f842e4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:34Z" + "timestamp": "2026-05-02T03:29:25Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/thumbnail.png index 3478eb4..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/view.json index 7948345..acbdd6c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/resource.json deleted file mode 100644 index edf12e8..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/MV SWGR/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "70acdad557fa0f6b75bda80ca50d0fc720ad1f27882e68543093ecd54e6c696c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json new file mode 100644 index 0000000..6235be9 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "eb37a28f2d2d96ae3f898da1f2f71afc5d66d7cb3d04d32825e7fd30c0f58cd4", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:11:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/DS/Meta/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Data Hall/Meta/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Meta/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/resource.json index 8a5c632..04195fc 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "e1119c93f53460e094c136ed14e6f0d01ad95ffb5b4d3e99873c0ec3fb676d3a", + "lastModificationSignature": "ec23bfebdc86577958232bfe62d4da5414c1fbcbec5d5fcebb76267feda163ed", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:23Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/thumbnail.png index 0818c56..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/view.json index 9bd08c1..f4849f1 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Body/view.json @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,7 +389,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/resource.json deleted file mode 100644 index 4a2fe29..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "a1b3f24426dd5c8b476a20ed0b48ff5cbd8fad273856429beb57b26db4a8d4d4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/view.json deleted file mode 100644 index 0b97663..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor JockeyFP/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Motor 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/resource.json index 621ecff..aeb4a96 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "b343a05c552fd161473007f911b3329da818374df26d8dbce14262ce2ad73e43", + "lastModificationSignature": "cb52ae8f4ff0ef77cc75e6f4589f7c4345113ebe7d80f694837415ab2703feea", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:22Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/thumbnail.png index d7d4e16..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/view.json index b30d27e..a522e34 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Body/view.json @@ -168,20 +168,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -270,16 +263,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -401,7 +389,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/resource.json deleted file mode 100644 index 4a2fe29..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "a1b3f24426dd5c8b476a20ed0b48ff5cbd8fad273856429beb57b26db4a8d4d4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/view.json deleted file mode 100644 index 0b97663..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor MainFP/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Motor 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/resource.json index acbe137..beb89bb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "18f0aef53a9b8859ade0d74dd3703c4e259bfc5d321056e5f8fb212de44e82fe", + "lastModificationSignature": "5b36986ecbf3a3401359472be7b796385bd9177b3e4443fe9afe3769733cfd22", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:29:24Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/thumbnail.png index 9a9f578..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/view.json index 9975575..b78fe5a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/resource.json deleted file mode 100644 index 5d74b75..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "95f683f6128615092ec2d262a58881f5f4114cd2a082b33f050c94efde7aac52", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/view.json deleted file mode 100644 index 0b97663..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Motor/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Motor 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948157059 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/resource.json index 97cfae1..2a356c7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "ee4c0b05f3d036f35498f3712fc46c30da126229942a9401fbafa18b9839df14", + "lastModificationSignature": "3172e198ad3b283606120d9c92fe3ad387ee34d0dd553fced0bf826db0c82983", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:31:10Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/thumbnail.png index 48e2ada..9b1328b 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/view.json index c63ec27..6659690 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Body/view.json @@ -169,20 +169,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -271,16 +264,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -471,7 +459,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 2 + "currentTabIndex": 3 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/resource.json deleted file mode 100644 index ed8d2db..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "41bf4722d42df8d6a208c846d151480ba7d5265099d0cc40a8b3aafe04b36dda", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/thumbnail.png deleted file mode 100644 index f1bcc59..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/view.json deleted file mode 100644 index 9ac490d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Meta/view.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Alarm Description" - }, - { - "dataType": "Boolean", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarms Enabled", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Alarms Enabled" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Area Served", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Area Served" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip", - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1/Meta/Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_SATB1_IO1_default]GAL1261/SATB1_GAL1261_PDU_P1-1-1" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/resource.json deleted file mode 100644 index 132aa7d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "5cf33c6a6fbd3fdaa6464a3d85092c778e8d8818a7a4aafb7cb55780350c187f", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/thumbnail.png deleted file mode 100644 index 1f46e3c..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/view.json deleted file mode 100644 index f37d202..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PDU/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]GAL1271/SATB1_GAL1271_PDU_P2-4-3" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948194045 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948194045 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/resource.json index ebe1067..ef87a84 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "affbb998585e1e9db32270d9355340b53ba8499be0e03faa2000cb11649a9b33", + "lastModificationSignature": "b0e2a5df55109e54bea0237b53124c7d95f5c91117b54b0f436f14c64441ab46", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:31:17Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/thumbnail.png index 5fd1cc8..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/view.json index a9bf1a0..ff3cbba 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/resource.json deleted file mode 100644 index 8a286f0..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "da72601653d53980b6401438da245214b113c743854b4be593e5d72f939161d6", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/view.json deleted file mode 100644 index e02791d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PID_Loop/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/PID_Loop" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948226158 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948226158 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/resource.json index 4d42cb6..d770ac8 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c8ceb32dea941fadd4f6b97638f2ede7a20743fc70d8890cb1dc6a76302072cb", + "lastModificationSignature": "8ba82e37d7e12fdb44f08f1b58df950045a92f08ee03c4603abe452ec85c0c50", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:31:15Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/thumbnail.png index 5107f8e..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/view.json index b7047b7..cacb3ce 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/resource.json deleted file mode 100644 index 17bcdb7..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "d253c03f3af145cf063c3bf51c835dc4745502910b538524642e8a309ec2ce78", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/view.json deleted file mode 100644 index a11ab02..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Meta/view.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/resource.json deleted file mode 100644 index 778b681..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "24b894d43feb552cb6eabc05c97e3b0255b1d3f05b849d2f00e124f154aa1b06", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/thumbnail.png deleted file mode 100644 index b0d6754..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/view.json deleted file mode 100644 index 4980fd1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel Red/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948358902 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948358902 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/resource.json index 4d42cb6..5d1d76d 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c8ceb32dea941fadd4f6b97638f2ede7a20743fc70d8890cb1dc6a76302072cb", + "lastModificationSignature": "bdaadce176521ce80337bdaf98a63699907e412e19e4fe5199ff0cca941e5635", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:31:16Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/thumbnail.png index 5107f8e..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/view.json index b7047b7..cacb3ce 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/resource.json deleted file mode 100644 index 36ca77f..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "2767194fbc0ec28c44a8c208c7a33a9f5949a5181b8d12eca752a0d72d84609a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/view.json deleted file mode 100644 index a11ab02..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Meta/view.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/resource.json deleted file mode 100644 index 9e8b5ec..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9637418e67386883d751fb9556250d27dcbdb23f3dfe3490eb7ce50484718e91", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/thumbnail.png deleted file mode 100644 index b0d6754..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/view.json deleted file mode 100644 index 4980fd1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Panel/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948358902 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948358902 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/resource.json index 3bcbcde..bf4d8ae 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "5a6f1750a01c83a7c449156dc1d508f3b8748c2df537217916c55cdca9c1d2fe", + "lastModificationSignature": "2951dbd4238211980584cc808c1f93718f2e0c10b6ee3bcd5302cd199d56b3ef", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:27Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/thumbnail.png index e2a548f..6ba658e 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/view.json index 3631cbd..cacb3ce 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/resource.json deleted file mode 100644 index 17bcdb7..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "d253c03f3af145cf063c3bf51c835dc4745502910b538524642e8a309ec2ce78", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/view.json deleted file mode 100644 index a11ab02..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Meta/view.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/resource.json deleted file mode 100644 index f2541cf..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "4d6c7b3d83cb59f4ea1a529b2e05d9541d72de2fad0a2cd397efa505665b7ad1", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/thumbnail.png deleted file mode 100644 index 3099273..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/view.json deleted file mode 100644 index 8d51a26..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/PlantFailure/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948381171 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948381171 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/resource.json index a68cd38..bc007bd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "4315ea5b8a27ed35e015cdd6f149e8e23e79214393e1855f86f4e5d93caf0650", + "lastModificationSignature": "d35703b1693cb5bb53348421da259256a7c6d866cf463be75c3dfff9650a9273", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:26Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/thumbnail.png index 3a74d25..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/view.json index 6118898..db4b4dd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/resource.json deleted file mode 100644 index 32eb8f2..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "349001c00ebca54898dcf955aa5902302efd6ca9bd96e0587a8f876bc1a527bf", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/thumbnail.png deleted file mode 100644 index 0862d24..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/view.json deleted file mode 100644 index a489d46..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU01/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/RTU-1 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \"\",\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948408573 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948408573 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/resource.json deleted file mode 100644 index 5d9fa1a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "6efea98f5310db798cf76b7bd017aa1a9eaee7be8ca656cc1f0218d590c4c9ca", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/resource.json deleted file mode 100644 index 66322f1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "91e41ae1a2c18c40a560cd22768bc2df87b9f036bf6b765e2176c496815cc962", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/resource.json deleted file mode 100644 index f8c0fa1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "2d0859179c04d9fc0e105cf443e2a3a924101c4ac15c1734d15e9771f73f0761", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/resource.json deleted file mode 100644 index 0d7f67f..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ec7a175e59cccf7242f42a6f95106742d6428fc71132d4ea31b72df56d9bd735", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/resource.json deleted file mode 100644 index 475aa6a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "e06d2d8e8f60aa5cde4f26e5b4fe4d96526978517fb36bb800c7eb1c365a81ce", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/thumbnail.png deleted file mode 100644 index 5b76d0d..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/view.json deleted file mode 100644 index d114f04..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/RTU02/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU02" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \"\",\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948474968 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948474968 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/resource.json index b9d23a0..c3ab74d 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "2ab4157013ab9ae812fb3a1cbf66a1281ba07496d63a07f8287c96ba73a5aa47", + "lastModificationSignature": "046e292641deaa3c2cd88f78fb9d9ffeb5c4cb0815b173286391b5635524676e", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:25Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/thumbnail.png index df18451..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/view.json index 0fb8add..ec1d064 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/resource.json deleted file mode 100644 index 6bfc08f..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "de91a50982b75b327b99f0842052438c51f1d0311ec4a586bfd7aa92cbe411c3", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/thumbnail.png deleted file mode 100644 index 185855f..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/view.json deleted file mode 100644 index e1e61c5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Redundancy/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO2_default]ER1248/SATB1_P2_1_ER1248_CRAH_01" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947747922 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/resource.json index 4f666e7..8378b29 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "9692a94cea1b1d3dad930977f450feb6f0644051e177b1806ca523bd1d08fbb7", + "lastModificationSignature": "a51661e228f2dcd8efaae82585a2ed12db5f64d8ea219ed95ba8511b1840418c", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:24Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/thumbnail.png index 3e04acb..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/view.json index 280fffb..28204df 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/resource.json deleted file mode 100644 index 1e901c1..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "753700f718707352b2c3d473cf0fa1bfc8b4e77fe6445c0584583848d16037cb", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/thumbnail.png deleted file mode 100644 index bbfa27b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/view.json deleted file mode 100644 index 0d7419c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-735/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/SEL-735 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/resource.json index 670be62..5ec5fb7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c3a74c8f8c5ac236c7e7bc7eb227e61db5645c05316ec0fb029f92a32aeac813", + "lastModificationSignature": "9e5be39cc68e705ccc4b4f433f535facca87cde2b37e16e3d0dbcddaa94f2ab3", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:23Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/thumbnail.png index b844c94..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/view.json index 1a58e67..dbe1577 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/resource.json deleted file mode 100644 index 4329462..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "b7f7e69fd02fc1a65c0f63c09e28b3d24b1aeb7f11233f460d9ff324f9278798", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/thumbnail.png deleted file mode 100644 index bbfa27b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/view.json deleted file mode 100644 index a36e46c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SEL-751/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/SEL-751 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1732050757002 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 4, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/resource.json index 4e5e51c..68461c6 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "962eeeeab955ad4b15c851dd153aaa43eb603e77f979c90b44a7ac1bbd52fa0f", + "lastModificationSignature": "23ddbd2a663267f9b55247b193d179b582989282e0b9dd28530fd72a312e8589", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:22Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/thumbnail.png index 0a1707f..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/view.json index a72b531..b9c90f2 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Body/view.json @@ -1,8 +1,8 @@ { "custom": { "tabsConfig": { - "showConfig": true, - "showControl": true, + "showConfig": false, + "showControl": false, "tabs": [ "Status", "Control", @@ -170,20 +170,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -272,16 +265,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -404,7 +392,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 3 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/resource.json deleted file mode 100644 index f83e668..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "028bb65c4f8c922742964f92b9cbbcc8adad9f3239289f89f43952ce0d33d07c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/thumbnail.png deleted file mode 100644 index e095739..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/view.json deleted file mode 100644 index a8b9f82..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747947762435 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/resource.json deleted file mode 100644 index 2cd1469..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "014a899589ad32def8ff08ff7fd8bff9007596cb634e530b9d6340746ec6574b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/thumbnail.png deleted file mode 100644 index e155d9d..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/view.json deleted file mode 100644 index 50335bc..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/STU/TrendsOld/view.json +++ /dev/null @@ -1,773 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "%", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "%", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "CHW Valve Feedback", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/CHW Valve Feedback" - }, - { - "color": "", - "enabled": false, - "engUnit": "%", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Comm Percentage", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Comm Percentage" - } - ] - }, - { - "group": "% Full Speed", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "% Full Speed", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Speed Feedback", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Speed Feedback" - } - ] - }, - { - "group": "Hrs", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "Hrs", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Runtime", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Runtime" - } - ] - }, - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "CMD_Out", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/CMD_Out" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EquipCounts", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/EquipCounts" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Status Available", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Status Available" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Status Running", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Status Running" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1A", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1A" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1B", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1B" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1C", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1C" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1D", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1D" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1E", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1E" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1F", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1F" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1G", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1G" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1H", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1H" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Fan Status 1I", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Fan Status 1I" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Unit Status", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Unit Status" - } - ] - }, - { - "group": "°F", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge Air Temperature A", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Discharge Air Temperature A" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge Air Temperature B", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Discharge Air Temperature B" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Discharge Air Temperature C", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Discharge Air Temperature C" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Return Air Temperature", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Return Air Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Return Water Temperature", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Return Water Temperature" - }, - { - "color": "", - "enabled": false, - "engUnit": "°F", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Supply Water Temperature", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06/Supply Water Temperature" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948508092 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948508092 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/resource.json index f31697a..2342257 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "6f2c6c805aa1611759de413bf4481cb254f150e9c10a70aa6e4a27722eeb29d4", + "lastModificationSignature": "52a031cd8c08e9c771e448f04bf1874d47ab0e17d556a38ed6ed9ec5b05a9b00", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:21Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/thumbnail.png index 683fe15..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/view.json index 55cf12e..e235c12 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -258,16 +251,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -381,7 +369,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/resource.json deleted file mode 100644 index 94a23d0..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "16fa32c71773120943faf3a76f6f7009784fec8ad0a27ce8ec0419a58f83bc4a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/thumbnail.png deleted file mode 100644 index 8672361..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/view.json deleted file mode 100644 index 1a4831e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/SWBDPQM/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/Breaker 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948558079 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948558079 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/resource.json index 5584160..e2caa11 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "621bf806be04aa9d56038b167d2bc66b196825f44e2ffa07f8b400499d4bb14b", + "lastModificationSignature": "a5666cefd7d355cefc1c94e65f8a4200e341f49d60a66ca945149ac03742a94d", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:35:20Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/thumbnail.png index cfbb822..6884a62 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/view.json index 8901a16..ad6feeb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 3 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/resource.json deleted file mode 100644 index cd9ae59..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "40ba3a9eeaff02bce6f23f0bfeab85c54b1e2266e2b6bce14ba2c80adc30a8b7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/thumbnail.png deleted file mode 100644 index eea27cf..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/view.json deleted file mode 100644 index be9791f..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/TES/Trends/view.json +++ /dev/null @@ -1,533 +0,0 @@ -{ - "custom": { - "trendConfig": { - "allPens": [ - { - "group": "misc", - "penList": [ - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Depleting Elapsed Time", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/Depleting Elapsed Time" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Mode", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/Mode" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Recharge Fail Elapsed Time", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/Recharge Fail Elapsed Time" - }, - { - "color": "", - "enabled": false, - "engUnit": "misc", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "System Not Ready", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System/System Not Ready" - } - ] - } - ] - } - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_DH5_Thermal_System" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948590619 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948590619 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json new file mode 100644 index 0000000..9d78cf6 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "cf296d8312679dc8017fab8f997596f5a6a6b75084b0626685cc1227dc8a0288", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-02T02:11:33Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/Trends/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/resource.json index ab24022..bcc0ef0 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "16b55fad646690c309a71e6eee1b63367f68b36258f0d78fbed5d58e2eeb88c2", + "lastModificationSignature": "af500126add7a6de18f405929a07bc54b8290f5c83b9540e76dbb46b381aeec5", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:36:15Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/thumbnail.png index d758009..611b737 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/view.json index 66bec47..3333454 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Body/view.json @@ -173,20 +173,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -275,16 +268,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -572,7 +560,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/resource.json deleted file mode 100644 index 5735bd3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f4c6bbe1bb6ea2111796e541700501398ace2e0aceff9d3214ccb96316764805", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/resource.json deleted file mode 100644 index a443e3e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "66accfb87aa2c6b45b77714bc1e759aefc26cc17d58001fe154b25557d6b327c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/thumbnail.png deleted file mode 100644 index 88290f1..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/view.json deleted file mode 100644 index 7607f3a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/UPS 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948612077 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948612077 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/resource.json deleted file mode 100644 index c0c71e7..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "d58a59a4ba27189193be430d7a16709b1cb164da23d6b3c834c15ebe48e71d2e", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/thumbnail.png deleted file mode 100644 index c4c1601..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Body/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/resource.json deleted file mode 100644 index 2ecafeb..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "8b11057099480875d298cb07e2d7f8bfc1b73bc39d9946e136674c42c8b8f406", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/resource.json deleted file mode 100644 index 24ddfa5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "0c393847aca6ed585126e22109509c37573a6ab2f637d12ca95be0325016ffeb", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:27:01Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/resource.json deleted file mode 100644 index d62311a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack1 Batt/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "4e210bf2bfd049fb6f486b0024e85928c55c875fe62d314da87a60e921496172", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/resource.json deleted file mode 100644 index 109557d..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack2 Batt/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "4e4aa16713f25c6b601e94d97d9d53d314e17589b22fb216de134bc610ede8e3", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/resource.json deleted file mode 100644 index 767681a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info Rack3 Batt/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "2d4b4a84dbb290c4dc44ed003d3200b827c578040c2c9987983af83189a4366c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/resource.json deleted file mode 100644 index ff01965..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "6c22beecd7fd94853edc408be48672ddaf21a6fa94c1c0a622b676e11fa7d7ca", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/resource.json deleted file mode 100644 index a443e3e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "66accfb87aa2c6b45b77714bc1e759aefc26cc17d58001fe154b25557d6b327c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/thumbnail.png deleted file mode 100644 index 88290f1..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/view.json deleted file mode 100644 index 7607f3a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UPS_HS/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/UPS 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948612077 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948612077 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/resource.json index ffd8663..5a0a983 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "751a3b6e78ef3c74b86fd04131dcfc044d9a1e37d04d94c95978fc9790811340", + "lastModificationSignature": "4cedd2437c815f857c03b70532d11ec64d18c4a3df5e2b368233cea79b1723b2", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T03:36:52Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/thumbnail.png index 61727a4..c8f3ae8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/view.json index 4a40239..c3cad46 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -398,7 +386,7 @@ "contentStyle": { "backgroundColor": "var(--container)" }, - "currentTabIndex": 1 + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/resource.json deleted file mode 100644 index 17bcdb7..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "d253c03f3af145cf063c3bf51c835dc4745502910b538524642e8a309ec2ce78", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:34Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/view.json deleted file mode 100644 index a11ab02..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Meta/view.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom": { - "allTags": [ - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Alarm Description" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Building" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Cabinet" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqMake" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "EqName" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "FW Version" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Floor" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Gateway Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "IP Address" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Ignition Tag Name" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "ModelNo" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Port" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Room" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Switch Location" - }, - { - "dataType": "String", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Tooltip" - } - ] - }, - "params": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/resource.json deleted file mode 100644 index d6dd790..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "c2fe195d6904a06c9e7f804ee67ddff63cd1a2fccb402d101cfcf62ea7bdb444", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/thumbnail.png deleted file mode 100644 index 3099273..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/view.json deleted file mode 100644 index cb865d0..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/UT/Trends/view.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/SATB1_PlantFailureParameters" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "custom": { - "historianSettings": { - "dateFormat": "YYYY/MM/DD", - "endDate": { - "$": [ - "ts", - 192, - 1747948666485 - ], - "$ts": 1730879940000 - }, - "export": { - "dateFormat": "None", - "timeFormat": "x" - }, - "measureOfTime": "hours", - "mode": "realtime", - "penNamePathDepth": 1, - "pointCount": 300, - "rangeEndDate": null, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "rangeStartDate": null, - "refreshRate": 1000, - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 192, - 1747948666485 - ], - "$ts": 1730733759000 - }, - "tagBrowserStartPath": "", - "timeFormat": "h:mm A", - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showFullscreenButton": true, - "showMoreButton": true, - "showPanZoomButton": true, - "showRangeBrushButton": true, - "showSettingsButton": false, - "showTagBrowserButton": false, - "showXTraceButton": true - }, - "showDateRangeSelector": true, - "showPenControlDisplay": true, - "showTagBrowser": false - } - } - }, - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/resource.json deleted file mode 100644 index 2631a0b..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Body/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "fb9b0636c0ca0f9ae3eec106aa209119b34a28551b4a2b5fb5f1a24197e63e09", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/resource.json deleted file mode 100644 index 6d46247..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "a6842b80b15bc88e4c8d55dda06da8085ef1d28726f3679a759fc5a362f61a14", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/thumbnail.png deleted file mode 100644 index 7ef45f5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Config/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/resource.json deleted file mode 100644 index ad5aea2..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "7e7ee268a9ba3fe4331a79825e2e9d60fe72135e6a81fe299bec77793b89580b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T14:27:18Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/thumbnail.png deleted file mode 100644 index 671b9b5..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Control/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/resource.json deleted file mode 100644 index 1f6f3ab..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "d315a79ff1ae3953552b8c5e60b6e7ecc9c9c24d28644364ee88930d28af66bb", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/thumbnail.png deleted file mode 100644 index 30c3f3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Info/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/resource.json deleted file mode 100644 index 4483e33..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "e7bc479b00783f8be9d1ee2b780b29a78f5ee910dfad5d97d1423f6e44893aad", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/thumbnail.png deleted file mode 100644 index 5d66e63..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/view.json deleted file mode 100644 index 4a6fb98..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV v2/Trends/view.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/resource.json index 2631a0b..f969495 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "fb9b0636c0ca0f9ae3eec106aa209119b34a28551b4a2b5fb5f1a24197e63e09", + "lastModificationSignature": "961db477f2c9aea7016b8f1aa17975e3c2ab0a45eeb83cf054b9413c5d3d80ae", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T05:19:24Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/thumbnail.png index 0f1d2fb..9107efb 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/view.json index 7aef350..024f2aa 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 1 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/resource.json index 82f1aba..6f604b7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c7da6dc6eca5fbd2fac6b94b16a5ed401a6a1fa22d92c6956b450922109e3cce", + "lastModificationSignature": "995d113216a7ee0daee7aae2216ac91da6adb575d102fe62dd5753afce06ffb4", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" + "timestamp": "2026-05-02T03:36:47Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/thumbnail.png index 0f7b1bd..7ef45f5 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/view.json index 4c02fe8..4664422 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Config/view.json @@ -3,26 +3,72 @@ "Monday": 0, "allTags": [ { - "dataType": "Int8", - "instancePosition": {}, + "dataType": "Float4", + "instancePosition": 4, + "instanceStyle": { + "classes": "" + }, + "name": "Air Flow Out of Range SP" + }, + { + "dataType": "Float4", + "instancePosition": 1, + "instanceStyle": { + "classes": "" + }, + "name": "Max Cooling Airflow" + }, + { + "dataType": "Float4", + "instancePosition": 3, + "instanceStyle": { + "classes": "" + }, + "name": "Max Heating Airflow" + }, + { + "dataType": "Float4", + "instancePosition": 2, + "instanceStyle": { + "classes": "" + }, + "name": "Min Cooling Airflow" + }, + { + "dataType": "Float4", + "instancePosition": 5, + "instanceStyle": { + "classes": "" + }, + "name": "Min Heating Airflow" + }, + { + "dataType": "Int8", + "instancePosition": 1, + "instanceStyle": { + "classes": "" + }, + "name": "Occupied Deadband Setpoint" + }, + { + "dataType": "Int8", + "instancePosition": 2, + "instanceStyle": { + "classes": "" + }, + "name": "Unoccupied Deadband Setpoint" + }, + { + "dataType": "Int8", + "instancePosition": 7, "instanceStyle": { "classes": "" }, - "max": 240, - "min": 0, "name": "Occupancy Minimum Time" }, - { - "dataType": "Int4", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "name": "Occuppacy Mode Start Time" - }, { "dataType": "Int8", - "instancePosition": {}, + "instancePosition": 7, "instanceStyle": { "classes": "" }, @@ -30,37 +76,37 @@ }, { "dataType": "Int4", - "instancePosition": {}, + "instancePosition": 8, "instanceStyle": { "classes": "" }, - "name": "Unoccupied Mode Start Time" + "name": "Occuppacy Mode Start Time" + }, + { + "dataType": "Int4", + "instancePosition": 9, + "instanceStyle": { + "classes": "" + }, + "name": "Unoccupied Mode Start Time", + "visible": false }, { "dataType": "Float4", - "instancePosition": {}, + "instancePosition": 6, "instanceStyle": { "classes": "" }, "name": "Standby Mode Offset" }, { - "dataType": "Float4", - "instancePosition": {}, + "dataType": "Int4", + "instancePosition": 9, "instanceStyle": { "classes": "" }, - "name": "Air Flow Out of Range SP" - }, - { - "dataType": "Int8", - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "max": 10, - "min": 0, - "name": "Occupied Deadband Setpoint" + "name": "Unoccupied Mode Start Time", + "visible": true } ], "weekDay": 254 @@ -72,7 +118,7 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]RM1116/SATB1_HS1_RM1116_VAV01" + "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" }, "propConfig": { "custom.allTags": { @@ -86,7 +132,7 @@ "enabled": false, "transforms": [ { - "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": {},\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", + "code": "\toutput \u003d []\n\ttry:\n\t\t# Simulate fetching tag configurations and sorting by name\n\t\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\t\tfor item in nodes:\n\t\t if \u0027tags\u0027 in item:\n\t\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t\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 \t\n\t for tagConfig in sortedTags:\n\t if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t name \u003d tagConfig.get(\"name\", \"\")\n\t dataType \u003d tagConfig.get(\"dataType\", \"\")\n\t tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t instance \u003d {\n\t \"instanceStyle\": {\n\t \"classes\": \"\"\n\t },\n\t \"instancePosition\": 999,\n\t \"name\": name,\n\t \"dataType\": dataType\n\t }\n\t # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n\t output.append(instance)\n\t\t\n\t\t# Return or process the sorted output\n\t\treturn output\n\texcept:\n\t\treturn output", "type": "script" } ], @@ -144,7 +190,7 @@ }, "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": "\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\toutput_sorted \u003d sorted(output, key\u003dlambda item: item[\"instancePosition\"])\n\treturn output_sorted\t", "type": "script" } ], @@ -162,7 +208,7 @@ "loading": { "order": "with-parent" }, - "path": "Library/Framework/Tag Config", + "path": "Library/Framework/Tag ConfigV2", "style": { "gap": "10px 0", "overflow": "visible", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/resource.json index 875b7d0..35acb98 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "63953984670e47c23e036a0501b1d29ab33b63620f1947eac3c22b273156127e", + "lastModificationSignature": "7bb6f221bb18b84e4a612bec27f57939b3d980964309f7380206c1f695305436", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T14:27:02Z" + "timestamp": "2026-05-02T03:36:47Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/thumbnail.png index 0e636ae..671b9b5 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/view.json index 2f033c2..6bfdcc5 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Control/view.json @@ -2,7 +2,7 @@ "custom": { "Mode": 1, "OCmd": {}, - "damperCmd": 1 + "damperCmd": 4 }, "params": { "auth": { @@ -11,7 +11,7 @@ "config": true, "control": true }, - "tagPath": "[Ignition_Common_IO_Gtwy]RM1121/SATB1_HS1_RM1121_VAV19" + "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" }, "propConfig": { "custom.Mode": { @@ -23,7 +23,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Config/User Control Command" + "tagPath": "{tagPath}/Control/User Control Mode" }, "type": "tag" }, @@ -55,7 +55,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/OCmd_OccMode" + "tagPath": "{tagPath}/Control/Cmd_OccMode" }, "type": "tag" } @@ -69,7 +69,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/OCmd_UnOccMode" + "tagPath": "{tagPath}/Control/Cmd_UnOccMode" }, "type": "tag" } @@ -83,7 +83,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Damper Override Command" + "tagPath": "{tagPath}/Control/Damper Override mode" }, "type": "tag" }, @@ -110,7 +110,7 @@ "dom": { "onClick": { "config": { - "script": "\tself.view.custom.OCmd.ModeCMD \u003d True" + "script": "\tself.view.custom.OCmd.ModeCMD \u003d True\n\t\n" }, "scope": "G", "type": "script" @@ -118,7 +118,7 @@ } }, "meta": { - "name": "AutoBtn", + "name": "AutoModeBtn", "tooltip": { "enabled": true } @@ -135,7 +135,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Ocmd_Mode.OpcItemPath" + "tagPath": "{tagPath}/Control/OCmd_Mode.OpcItemPath" }, "type": "tag" } @@ -143,15 +143,14 @@ "props.enabled": { "binding": { "config": { - "path": "view.params.auth.control" + "expression": "{view.params.auth.control}" }, - "type": "property" + "type": "expr" } }, "props.primary": { "binding": { "config": { - "bidirectional": true, "path": "view.custom.OCmd.ModeCMD" }, "type": "property" @@ -159,7 +158,7 @@ } }, "props": { - "text": "Auto" + "text": "Auto/Schedule" }, "type": "ia.input.button" }, @@ -176,7 +175,7 @@ } }, "meta": { - "name": "ManualBtn", + "name": "ManualOccBtn", "tooltip": { "enabled": true } @@ -193,7 +192,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Ocmd_Mode.OpcItemPath" + "tagPath": "{tagPath}/Control/OCmd_Mode.OpcItemPath" }, "type": "tag" } @@ -201,35 +200,17 @@ "props.enabled": { "binding": { "config": { - "path": "view.params.auth.control" + "expression": "{view.params.auth.control}" }, - "type": "property" + "type": "expr" } }, "props.primary": { "binding": { "config": { - "path": "view.custom.OCmd.ModeCMD" + "expression": "!{view.custom.OCmd.ModeCMD}" }, - "transforms": [ - { - "fallback": false, - "inputType": "scalar", - "mappings": [ - { - "input": false, - "output": true - }, - { - "input": true, - "output": false - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "property" + "type": "expr" } } }, @@ -240,7 +221,7 @@ } ], "meta": { - "name": "Row1" + "name": "Row0" }, "position": { "basis": "50px" @@ -285,7 +266,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/OCmd_OccMode.OpcItemPath" + "tagPath": "{tagPath}/Control/Cmd_OccMode.OpcItemPath" }, "type": "tag" } @@ -342,7 +323,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/OCmd_UnOccMode.OpcItemPath" + "tagPath": "{tagPath}/Control/Cmd_UnOccMode.OpcItemPath" }, "type": "tag" } @@ -371,7 +352,7 @@ } ], "meta": { - "name": "Row01" + "name": "Row1" }, "position": { "basis": "50px" @@ -417,7 +398,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Config/User Control Command.OpcItemPath" + "tagPath": "{tagPath}/Control/User Control Mode.OpcItemPath" }, "type": "tag" } @@ -493,9 +474,10 @@ }, { "meta": { - "name": "Dropdown", + "name": "Dropdown_0", "tooltip": { - "enabled": true + "enabled": true, + "text": "Min or Max airflow depends on Current Mode. Example: If heat demand \u003e0 then Min or Max Heating Airflow." } }, "position": { @@ -510,19 +492,12 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Config/Damper Override Command.OpcItemPath" + "tagPath": "{tagPath}/Control/Damper Override mode.OpcItemPath" }, + "enabled": false, "type": "tag" } }, - "props.enabled": { - "binding": { - "config": { - "path": "view.params.auth.control" - }, - "type": "property" - } - }, "props.value": { "binding": { "config": { @@ -540,22 +515,25 @@ "value": 1 }, { - "label": "Open", + "label": "Full OPEN", "value": 2 }, { - "label": "Close", + "label": "Full CLOSE", "value": 3 }, { - "label": "Min Cool", + "label": "Min Airflow", "value": 4 }, { - "label": "Max Cool", + "label": "Max Air Flow", "value": 5 } - ] + ], + "placeholder": { + "text": "Damper Override Command of Current Mode" + } }, "type": "ia.input.dropdown" } @@ -739,7 +717,7 @@ "basis": "50%" }, "props": { - "text": "Unoccupied Cooling Setpoint", + "text": "Unoccupied Temperature Setpoint", "textStyle": { "textAlign": "right" } @@ -749,7 +727,9 @@ { "meta": { "name": "NumericEntryField", - "tooltip": {} + "tooltip": { + "enabled": true + } }, "position": { "basis": "35%", @@ -764,7 +744,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Unoccupied Cool SP.OpcItemPath" + "tagPath": "{tagPath}/Control/Unoccupied Temperature SP.OpcItemPath" }, "type": "tag" } @@ -777,14 +757,6 @@ "type": "property" } }, - "props.inputBounds.minimum": { - "binding": { - "config": { - "path": ".../Row4/NumericEntryField.props.value" - }, - "type": "property" - } - }, "props.style.color": { "binding": { "config": { @@ -802,149 +774,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Unoccupied Cool SP" - }, - "type": "tag" - } - } - }, - "props": { - "inputBounds": { - "maximum": 104 - }, - "spinner": { - "enabled": false - }, - "style": { - "fontWeight": "bold", - "max-height": "40px", - "min-height": "30px" - } - }, - "type": "ia.input.numeric-entry-field" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "10%" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Control/Unoccupied Cool SP.EngUnit" - }, - "type": "tag" - } - } - }, - "props": { - "style": { - "color": "var(--units-color)", - "textAlign": "left" - }, - "textStyle": { - "textAlign": "right" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Row3" - }, - "position": { - "basis": "58px" - }, - "props": { - "style": { - "gap": "10px" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "50%" - }, - "props": { - "text": "Unoccupied Heating Setpoint", - "textStyle": { - "textAlign": "right" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "NumericEntryField", - "tooltip": {} - }, - "position": { - "basis": "35%", - "grow": 1 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Control/Unoccupied Heat SP.OpcItemPath" - }, - "type": "tag" - } - }, - "props.enabled": { - "binding": { - "config": { - "path": "view.params.auth.control" - }, - "type": "property" - } - }, - "props.inputBounds.maximum": { - "binding": { - "config": { - "path": ".../Row3/NumericEntryField.props.value" - }, - "type": "property" - } - }, - "props.style.color": { - "binding": { - "config": { - "expression": "if({this.props.enabled}, \u0027var(--tagvalue-color)\u0027, \u0027\u0027)" - }, - "type": "expr" - } - }, - "props.value": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{view.params.tagPath}" - }, - "tagPath": "{tagPath}/Control/Unoccupied Heat SP" + "tagPath": "{tagPath}/Control/Unoccupied Temperature SP" }, "type": "tag" } @@ -952,6 +782,7 @@ }, "props": { "inputBounds": { + "maximum": 104, "minimum": 50 }, "spinner": { @@ -982,7 +813,7 @@ "references": { "tagPath": "{view.params.tagPath}" }, - "tagPath": "{tagPath}/Control/Unoccupied Heat SP.EngUnit" + "tagPath": "{tagPath}/Control/Unoccupied Temperature SP.EngUnit" }, "type": "tag" } @@ -1001,7 +832,7 @@ } ], "meta": { - "name": "Row4" + "name": "Row5" }, "position": { "basis": "58px" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/resource.json index e9931fc..1938470 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "2b1891daf880ce923919775f111089e80c5aaa78b9a1298886f86aa820fa2422", + "lastModificationSignature": "44a186be2a2fca16d0f9cdee52481a7ef36ec7bb2186fa3bc620f0a8470c8d66", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" + "timestamp": "2026-05-02T03:36:47Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/thumbnail.png index bfd5d41..30c3f3b 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/view.json index 70852df..9394061 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Info/view.json @@ -31,7 +31,7 @@ "instanceStyle": { "classes": "" }, - "name": "Control Setpoint", + "name": "Control SP", "options": [] }, { @@ -75,7 +75,7 @@ "instanceStyle": { "classes": "" }, - "name": "Maximum Cooling Airflow", + "name": "Max allowed Temperature", "options": [] }, { @@ -86,43 +86,37 @@ "instanceStyle": { "classes": "" }, - "name": "Maximum Heat Airflow", + "name": "Min allowed Temperature", "options": [] }, { - "dataType": "Float4", - "displaySelection": 0, + "dataType": "Int4", + "displaySelection": 1, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Minimum Cooling Airflow", - "options": [] - }, - { - "dataType": "Float4", - "displaySelection": 0, - "format": "0.0", - "instancePosition": 999, - "instanceStyle": { - "classes": "" - }, - "name": "Minimum Heat Airflow", - "options": [] + "name": "Mode", + "options": [ + "No Mode", + "Occupancy", + "Unoccupied", + "Standby Mode" + ] }, { "dataType": "Boolean", "displaySelection": 1, - "format": 0, + "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, "name": "Occupancy Sensor", "options": [ - "Off", - "On" + "No Movement", + "Activity" ] }, { @@ -137,15 +131,32 @@ "options": [] }, { - "dataType": "Float4", - "displaySelection": 0, + "dataType": "Boolean", + "displaySelection": 1, "format": "0.0", "instancePosition": 999, "instanceStyle": { "classes": "" }, - "name": "Supply Air Temperature", - "options": [] + "name": "Stage-1 Heater Sts", + "options": [ + "Off", + "On" + ] + }, + { + "dataType": "Boolean", + "displaySelection": 1, + "format": "0.0", + "instancePosition": 999, + "instanceStyle": { + "classes": "" + }, + "name": "Stage-2 Heater Sts", + "options": [ + "Off", + "On" + ] }, { "dataType": "Float4", @@ -155,13 +166,13 @@ "instanceStyle": { "classes": "" }, - "name": "Temperature Setpoint", + "name": "Supply Air Temperature", "options": [] } ] }, "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]RM1116/SATB1_HS1_RM1116_VAV01" + "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" }, "propConfig": { "custom.allTags": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/resource.json deleted file mode 100644 index 8bf039a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "fa3c576c8b33eeb72c05074027b3621aa71e98f35790d571978b7781af0b6b11", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/view.json deleted file mode 100644 index 1f00f9e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAV/Trends/view.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VAV" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/resource.json index fb09f25..fa20f86 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "86e5f4d57eb7b83d753e1a39b2fce0693eb0a5fbc91d99b0dfa945c3387606da", + "lastModificationSignature": "5ba52bb449664680a26ae5889605cb836ecc394598240c8ae687812026783405", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:31:39Z" + "timestamp": "2026-05-02T05:19:49Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/thumbnail.png index 996f413..3bca727 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/view.json index 9563fa3..ec32ae8 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Body/view.json @@ -163,20 +163,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -257,16 +250,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -400,7 +388,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/resource.json deleted file mode 100644 index 8bf039a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "fa3c576c8b33eeb72c05074027b3621aa71e98f35790d571978b7781af0b6b11", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:21:00Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/thumbnail.png deleted file mode 100644 index 46bbf3b..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/view.json deleted file mode 100644 index 1f00f9e..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VAVMaster/Trends/view.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VAV" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/resource.json index 046c3bf..97c75cc 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "da7ce01cfa367fa3953780052c831c5fcf11b8e590ad61837b1751a3bfd1784d", + "lastModificationSignature": "73f69ec6062055ef897ae46041d89a1be11626bf6bcb342120a76122277f0a94", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T05:20:15Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/thumbnail.png index c2d0df4..c8f3ae8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/view.json index 2eaf130..df0093e 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/resource.json index 6e53d29..225bc07 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "439bf72507498abd05f771a01e6b7bfa9227f96c748085cd21e29f33cffc3243", + "lastModificationSignature": "97edeb15730a3c9d55837f2dbc1f1b040175304bc2a01cf6ec51927b669bb7ad", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:22:26Z" + "timestamp": "2026-05-02T02:11:51Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/thumbnail.png index b88124b..9ac65da 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Info/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/resource.json deleted file mode 100644 index 12c4a9c..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "9e20c8f6ebe564d464a9138c8c7fe55aae3f6f7614a997d96eb1991486d2e0c4", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:35Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/thumbnail.png deleted file mode 100644 index 88290f1..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/view.json deleted file mode 100644 index f486edf..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/VSD/Trends/view.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "custom": { - "trendConfig": {} - }, - "params": { - "selectedPens": [], - "tagPath": "[Ignition_SATB1_IO1_default]Datahall 1/Development/VSD 1" - }, - "propConfig": { - "custom.trendConfig": { - "persistent": true - }, - "custom.trendConfig.allPens": { - "binding": { - "config": { - "struct": { - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": " # Initialize a dictionary to store instances grouped by \u0027engUnit\u0027\n lists \u003d {}\n output \u003d []\n \n # Fetch tag configurations, including nested tags\n nodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n total \u003d 0\n for item in nodes:\n # Check if the item contains the \u0027tags\u0027 key\n if \u0027tags\u0027 in item:\n \ttotal \u003d len(item[\u0027tags\u0027])\n \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027))\n \t\n \tfor i, tagConfig in enumerate(sortedTags):\n \t\tif str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n\t\t\t\t\tisEnabled \u003d False\n\t\t\t\t\t# Get the engineering unit or default to \u0027Misc\u0027 if not available\n\t\t\t\t\tengUnit \u003d tagConfig.get(\"engUnit\", \"misc\")\n\t\t\t\t\tif engUnit \u003d\u003d \"\":\n\t\t\t\t\t engUnit \u003d \"misc\"\n\t\t\t\t\t\n\t\t\t\t\t# Initialize a list for the \u0027engUnit\u0027 if it hasn\u0027t been added\n\t\t\t\t\tif engUnit not in lists:\n\t\t\t\t\t lists[engUnit] \u003d []\n\t\t\t\t\t\n\t\t\t\t\t# Create tag instance details\n\t\t\t\t\tname \u003d tagConfig.get(\"name\", \"\")\n\t\t\t\t\ttagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n\t\t\t\t\tif name in value[\u0027pens\u0027]:\n\t\t\t\t\t\tisEnabled \u003d True\n\t\t\t\t\tinstance \u003d {\n\t\t\t\t\t \"instanceStyle\": {\n\t\t\t\t\t \"classes\": \"\"\n\t\t\t\t\t },\n\t\t\t\t\t \"instancePosition\": {},\n\t\t\t\t\t \"name\": name,\n\t\t\t\t\t \"tagPath\": tagPath,\n\t\t\t\t\t \"engUnit\": engUnit,\n\t\t\t\t\t \"color\": \u0027\u0027,\n\t\t\t\t\t \"enabled\": isEnabled\n\t\t\t\t\t}\n\t\t\t\t\tlists[engUnit].append(instance)\n\t\t\t\t\t\n # Return the sorted and grouped output\n for li in sorted(lists):\n \toutput.append({\n \t\t\u0027group\u0027: lists[li][0][\u0027engUnit\u0027],\n \t\t\u0027penList\u0027: lists[li]\n \t})\n return output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.trendConfig.selectedPens": { - "binding": { - "config": { - "path": "view.params.selectedPens" - }, - "type": "property" - } - }, - "params.selectedPens": { - "paramDirection": "input", - "persistent": true - }, - "params.tagPath": { - "paramDirection": "input", - "persistent": true - } - }, - "props": { - "defaultSize": { - "width": 1200 - } - }, - "root": { - "children": [ - { - "children": [ - { - "children": [ - { - "meta": { - "name": "ToggleSwitch" - }, - "position": { - "basis": "34px", - "shrink": 0 - }, - "props": { - "label": { - "text": "Table View" - } - }, - "type": "ia.input.toggle-switch" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "struct": { - "allPens": "{view.custom.trendConfig.allPens}", - "selectedPens": "{view.custom.trendConfig.selectedPens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tallPens \u003d value[\u0027allPens\u0027]\n\tfor i in range(len(allPens)):\n\t\tpenGroup \u003d allPens[i].get(\u0027group\u0027, \u0027Misc\u0027)\n\t\tpenList \u003d allPens[i].get(\u0027penList\u0027, [])\n\t\tlistLength \u003d len(penList)\n\t\tnewPenList \u003d []\n\t\tfor i, pen in enumerate(penList):\n\t\t\tpen \u003d dict(pen)\n\t\t\tname \u003d pen[\u0027name\u0027]\n\t\t\tpen[\u0027color\u0027] \u003d utils.misc.getHexColorFromInt(i + 1, listLength)\n\t\t\tif name in value[\u0027selectedPens\u0027]:\n\t\t\t\tpen[\u0027enabled\u0027] \u003d True\n\t\t\tnewPenList.append(pen)\n\t\toutput.append({\n\t\t\t\u0027group\u0027: penGroup, \n\t\t\t\u0027penList\u0027: newPenList\n\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "direction": "column", - "elementPosition": { - "basis": "auto", - "grow": 0, - "shrink": 0 - }, - "loading": { - "order": "with-parent" - }, - "path": "Library/Templates/Framework/Pen List", - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "Pens Lists" - }, - "position": { - "basis": "250px" - }, - "props": { - "direction": "column", - "style": { - "border": "1px solid var(--border)", - "border-right": "none" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "domId": "CustomPowerChart", - "name": "Power Chart" - }, - "position": { - "basis": "800px", - "grow": 1 - }, - "propConfig": { - "custom.pens": { - "binding": { - "config": { - "struct": { - "axes": "{this.props.axes}", - "pens": "{view.custom.trendConfig.selectedPens}", - "tagPath": "{view.params.tagPath}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t\n\tinfo \u003d value\n\ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\tdef find_characters(text, char_list):\n\t\tfound_characters \u003d {}\n\t\tfor char_to_find in char_list:\n\t\t\tif char_to_find in text:\n\t\t\t\tfound_characters[char_to_find] \u003d True\n\t\t\t\treturn found_characters\n\t\n\tsearch_text \u003d value[\u0027tagPath\u0027].split(\u0027]\u0027)[0].split(\u0027_\u0027)[2]\n\tcharacters_to_find \u003d [\u00271\u0027, \u00272\u0027, \u00273\u0027, \u00274\u0027, \u00275\u0027]\n\tfound \u003d find_characters(search_text, characters_to_find)\n\t\t\n\tif found:\n\t\tfor character in found:\n\t\t\tif character \u003d\u003d \"1\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io1\u0027\n\t\t\telif character \u003d\u003d \"2\":\n\t\t\t\ttagProvider \u003d \u0027ignition-satb1-io2\u0027\n\t\t\telif character \u003d\u003d \"3\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io3\u0027\n \t\t\telif character \u003d\u003d \"4\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io4\u0027\n \t\t\telif character \u003d\u003d \"5\":\n \t\t\t \ttagProvider \u003d \u0027ignition-satb1-io5\u0027\n\t\t\telse:\n\t\t\t \ttagProvider \u003d \u0027ignition-satb1-io6\u0027\n\treturn tagProvider", - "type": "script" - }, - { - "code": "\toutput \u003d []\n\t\n\ttry:\n\t\tpensList \u003d self.parent.parent.getChild(\"Pens Lists\").getChild(\"FlexRepeater\").props.instances\n\t\tfor tagGroup in pensList:\n\t\t\tgroupName \u003d tagGroup[\u0027group\u0027]\n\t\t\tpenList \u003d tagGroup[\u0027penList\u0027]\n\t\t\tfor tag in penList:\n\t\t\t\taxis \u003d tag[\u0027engUnit\u0027]\n\t\t\t\tcolor \u003d tag[\u0027color\u0027]\n\t\t\t\tinstance \u003d {\n\t\t\t\t\"axis\": axis,\n\t\t\t\t\"data\": {\n\t\t\t\t\"aggregateMode\": \"default\",\n\t\t\t\t\"source\": \u0027histprov:Ignition_Hist:/drv:\u0027+ value +\u0027:default:/tag:\u0027 + tag[\u0027tagPath\u0027].split(\u0027]\u0027)[1].lower()\n\t\t\t\t},\n\t\t\t\t\"display\": {\n\t\t\t\t\"breakLine\": True,\n\t\t\t\t\"interpolation\": \"curveLinear\",\n\t\t\t\t\"radius\": 3,\n\t\t\t\t\"styles\": {\n\t\t\t\t \"highlighted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"muted\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.4\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.4,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"normal\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 0.8\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 0.8,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t },\n\t\t\t\t \"selected\": {\n\t\t\t\t \"fill\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"opacity\": 1\n\t\t\t\t },\n\t\t\t\t \"stroke\": {\n\t\t\t\t \"color\": color,\n\t\t\t\t \"dashArray\": 0,\n\t\t\t\t \"opacity\": 1,\n\t\t\t\t \"width\": 1\n\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"type\": \"line\"\n\t\t\t\t},\n\t\t\t\t\"enabled\": True,\n\t\t\t\t\"name\": tag[\u0027name\u0027],\n\t\t\t\t\"plot\": 1,\n\t\t\t\t\"selectable\": False,\n\t\t\t\t\"visible\": True\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput.append(instance)\n\texcept:\n\t\tpass\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "position.display": { - "binding": { - "config": { - "expression": "!{.../Pens Lists/ToggleSwitch.props.selected}" - }, - "type": "expr" - } - }, - "props.axes": { - "binding": { - "config": { - "struct": { - "tags": "{.../Pens Lists/FlexRepeater.props.instances}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taxes \u003d []\n\tfor i, engUnit in enumerate(value[\u0027tags\u0027]):\n#\t\tengUnit \u003d tagConfig[\u0027engUnit\u0027]\n\t\tif engUnit not in axes:\n\t\t\taxes.append(engUnit)\n\t\t\toutput.append({\n\t\t\t\t\"name\": engUnit,\n\t\t\t\t\"position\": \"left\",\n\t\t\t\t\"width\": 60,\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"dataFormat\": \"0,0.##\",\n\t\t\t\t\"range\": {\n\t\t\t\t\"auto\": True,\n\t\t\t\t\"min\": \"\",\n\t\t\t\t\"max\": \"\"\n\t\t\t\t},\n\t\t\t\t\"label\": {\n\t\t\t\t\"text\": engUnit,\n\t\t\t\t\"offset\": 0,\n\t\t\t\t\"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"tick\": {\n\t\t\t\t\"color\": \"#757A7F\",\n\t\t\t\t\"count\": \"Auto\",\n\t\t\t\t\"label\": {\n\t\t\t\t \"format\": \"Auto\",\n\t\t\t\t \"font\": {\n\t\t\t\t \"color\": \"#757A7F\",\n\t\t\t\t \"size\": 10\n\t\t\t\t },\n\t\t\t\t \"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t }\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t \"classes\": \"\"\n\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"style\": {\n\t\t\t\t\"classes\": \"\"\n\t\t\t\t}\n\t\t\t})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.config": { - "onChange": { - "enabled": null, - "script": "\tconfig \u003d currentValue.value\n\t\n\tif config[\u0027mode\u0027].value \u003d\u003d \u0027historical\u0027:\n\t\tif previousValue !\u003d None:\n\t\t\tif previousValue.value !\u003d None:\n\n\t\t\t\ttry:\n\t\t\t\t\tstartDate \u003d config[\u0027startDate\u0027].value \n\t\t\t\t\tendDate \u003d config[\u0027endDate\u0027].value\n\t\t\t\texcept:\n\t\t\t\t\tstartDate \u003d system.date.now()\n\t\t\t\t\tendDate \u003d system.date.addDays(startDate, -1)\t\t\t\t\n\t\t\t\t\n\t\t\t\tdaysBetween \u003d system.date.daysBetween(startDate,endDate)\n\t\t\t\t\n\t\t\t\tif daysBetween \u003e 14:\n\t\t\t\t\toldStartDate \u003d previousValue.value[\u0027startDate\u0027].value\n\t\t\t\t\toldEndDate \u003d previousValue.value[\u0027endDate\u0027].value\n\t\t\t\t\t\n\t\t\t\t\tif oldStartDate \u003d\u003d startDate:\n\t\t\t\t\t\tself.props.config.startDate \u003d system.date.addDays(endDate,-14)\n\t\t\t\t\telse:\n\t\t\t\t\t\tself.props.config.endDate \u003d system.date.addDays(startDate,14)\n\telif config[\u0027mode\u0027].value \u003d\u003d \u0027realtime\u0027:\n\t\tunits \u003d config[\u0027measureOfTime\u0027].value\n\t\ttime \u003d config[\u0027unitOfTime\u0027].value\n\t\t\n\t\tif units \u003d\u003d \u0027seconds\u0027:\n\t\t\tif time \u003e 1209600:\n\t\t\t\tself.props.config.unitOfTime \u003d 1209600\n\t\telif units \u003d\u003d \u0027minutes\u0027:\n\t\t\tif time \u003e 20160:\n\t\t\t\tself.props.config.unitOfTime \u003d 20160\n\t\telif units \u003d\u003d \u0027hours\u0027:\n\t\t\tif time \u003e 336:\n\t\t\t\tself.props.config.unitOfTime \u003d 336\n\t\telif units \u003d\u003d \u0027days\u0027:\n\t\t\tif time \u003e 14:\n\t\t\t\tself.props.config.unitOfTime \u003d 14\n\t\telif units \u003d\u003d \u0027weeks\u0027:\n\t\t\tif time \u003e 2:\n\t\t\t\tself.props.config.unitOfTime \u003d 2\n\t\telse:\n\t\t\tself.props.config.unitOfTime \u003d 2\n\t\t\tself.props.config.measureOfTime \u003d \u0027weeks\u0027\n\thistSetting \u003d utils.helper.sanitize_tree(self.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings)\n#\tsystem.perspective.print(\"%s\"%histSetting)\n\thistSetting.update(utils.helper.sanitize_tree(self.props.config))\n\tself.parent.parent.parent.getChild(\"FlexContainer\").custom.historianSettings \u003d histSetting" - } - }, - "props.pens": { - "binding": { - "config": { - "struct": { - "enabledPens": "{view.custom.trendConfig.selectedPens}", - "pens": "{this.custom.pens}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\t# Utilize the trendConfig.allPens to know which pens from the \u0027pens\u0027\n\t# custom property to append to the pensToReturn list.\n\t\n\tcurrentPens \u003d self.props.pens\n\t\n\tpensToReturn \u003d []\n\t\n\tpens \u003d value[\u0027pens\u0027]\n\tenabledPens \u003d value[\u0027enabledPens\u0027]\n\t\n\tfor pen in pens:\n\t\tif pen.name in enabledPens:\n\t\t\thistoryPen \u003d ({\u0027axis\u0027:pen.axis,\u0027data\u0027:pen.data,\u0027display\u0027:pen.display,\n\t\t\t\u0027enabled\u0027:pen.enabled,\u0027name\u0027:pen.name,\u0027plot\u0027:pen.plot,\n\t\t\t\u0027selectable\u0027:pen.selectable,\u0027visible\u0027:pen.visible})\n\t\t\t\n\t\t\t# To retain visibility settings.\n\t\t\tfor currPen in currentPens:\n\t\t\t\tif pen.name \u003d\u003d currPen.name:\n\t\t\t\t\thistoryPen[\u0027visible\u0027] \u003d currPen.visible\n\t\t\t\t\t\n\t\t\tpensToReturn.append(historyPen)\n\t\t\t\n\treturn pensToReturn", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "config": { - "endDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730879940000 - }, - "rangeSelectorPen": "histprov:Ignition_Hist_SATB1_IO1_default:/tag:Datahall 1/Development/GEN 1/Amps A", - "responsiveDesignWidth": 100, - "startDate": { - "$": [ - "ts", - 0, - 1731972292627 - ], - "$ts": 1730733759000 - }, - "unitOfTime": 2, - "visibility": { - "buttons": { - "showAnnotationButton": false, - "showSettingsButton": false, - "showTagBrowserButton": false - } - } - }, - "interaction": { - "chartZoomLevel": 1, - "rangeZoomLevel": 1 - }, - "plots": [ - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 3, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 2, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - }, - { - "color": "transparent", - "markers": [], - "relativeWeight": 1, - "style": { - "classes": "" - } - } - ] - }, - "type": "ia.chart.powerchart" - }, - { - "children": [ - { - "meta": { - "name": "Label", - "visible": false - }, - "position": { - "basis": "200px" - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Power Chart.props.pens" - }, - "transforms": [ - { - "code": "\t# If no pens are enabled, then show this label (informing the user to select a pen).\n\t\n\tfor pen in value:\n\t\tif pen.enabled \u003d\u003d True:\n\t\t\treturn False\n\treturn True", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "color": "--neutral-80", - "fontSize": "14px", - "marginTop": "-143px", - "minHeight": "-143px" - }, - "text": "Please select a tag." - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "Pens Cont" - }, - "position": { - "basis": "0px" - }, - "props": { - "alignItems": "center", - "direction": "column", - "style": { - "overflow": "visible", - "zIndex": 0 - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "TrendTable" - }, - "position": { - "basis": "320px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "path": ".../Pens Lists/ToggleSwitch.props.selected" - }, - "type": "property" - } - }, - "props.params.historianSettings": { - "binding": { - "config": { - "path": "..../FlexContainer.custom.historianSettings" - }, - "type": "property" - } - }, - "props.params.selectedPens": { - "binding": { - "config": { - "path": "../Power Chart.props.pens" - }, - "type": "property" - } - } - }, - "props": { - "path": "Library/Templates/Framework/TrendTable" - }, - "type": "ia.display.view" - } - ], - "meta": { - "name": "Chart Cont" - }, - "position": { - "basis": "200px", - "grow": 1 - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "100%" - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/resource.json index b468ec7..70317eb 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "b0e6d0b80f67d941547028db6ed31cfbbbe099b4d9021df1f6cb18fc7fe27f0b", + "lastModificationSignature": "509626bf56747be1e12f4a9230292b820a69080c2781c12d966d48fbb435fedf", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T05:20:37Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/thumbnail.png index a83c9df..c8f3ae8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/view.json index 551befc..2e6a363 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Body/view.json @@ -164,20 +164,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -266,16 +259,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -397,7 +385,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/resource.json deleted file mode 100644 index 6f9daef..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ab2e369731a5350acca70e8a4f51ccc9b55bc1bb9556e642dde8833ce89d2de7", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:23:36Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/thumbnail.png deleted file mode 100644 index 3545640..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/view.json deleted file mode 100644 index 9bfb166..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Meta/view.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "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": { - "auth": { - "almAck": true, - "almShelve": true, - "config": true, - "control": true - }, - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1241/SATB1_MPR1241_M4_ATS" - }, - "propConfig": { - "custom.allTags": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.params.tagPath} + \"/Meta\"" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\t\n\t# Simulate fetching tag configurations and sorting by name\n\tnodes \u003d system.tag.getConfiguration(value[\u0027tagPath\u0027], True)\n\tfor item in nodes:\n\t if \u0027tags\u0027 in item:\n\t \tsortedTags \u003d sorted(item[\u0027tags\u0027], key\u003dlambda x: x[\u0027name\u0027])\n\t \tsortedTags \u003d sorted(sortedTags, key\u003dlambda x: x.get(\u0027engUnit\u0027, \u0027misc\u0027) if x.get(\u0027engUnit\u0027, \u0027misc\u0027) !\u003d \"\" else \u0027misc\u0027)\n\t \t\n for tagConfig in sortedTags:\n if str(tagConfig[\u0027tagType\u0027]) \u003d\u003d \u0027AtomicTag\u0027:\n name \u003d tagConfig.get(\"name\", \"\")\n dataType \u003d tagConfig.get(\"dataType\", \"\")\n tagPath \u003d value[\u0027tagPath\u0027] + \u0027/\u0027 + name\n instance \u003d {\n \"instanceStyle\": {\n \"classes\": \"\"\n },\n \"instancePosition\": {},\n \"name\": name,\n \"tagPath\": tagPath,\n \"dataType\": dataType\n }\n # Group based on name containing \u0027Power\u0027, \u0027Current\u0027, or \u0027Voltage\u0027\n output.append(instance)\n\t\n\t# Return or process the sorted output\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "params.auth": { - "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 Config", - "style": { - "border": "1px solid var(--border)", - "gap": "10px 0", - "padding": "10px" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - } - ], - "meta": { - "name": "root" - }, - "props": { - "direction": "column", - "style": { - "classes": "containers/padded-container" - } - }, - "type": "ia.container.flex" - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/resource.json deleted file mode 100644 index 0b32c31..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveC/Trends/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "15c7143e1d3adcec4182fa9b20aebf074bfa5a73be328b864394c7e8e88dac5a", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-22T23:20:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/resource.json index 546be1c..ec111b2 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c932e55917fab977fbb55d72f04e4ac6dc3cd7db245df13c4ddc26e5c22ba7df", + "lastModificationSignature": "0c2aee440eeb19e03676ee52877411e5db7192d3ebee0c9ab36e3fd031dcbe7d", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T23:27:35Z" + "timestamp": "2026-05-02T05:21:00Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/thumbnail.png index 86f1520..c8f3ae8 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/view.json index 0cadaa0..1eb0c6f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Templates/ValveM/Body/view.json @@ -159,20 +159,13 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Trends\u0027)" - }, - "type": "expr" - } } }, "props": { "loading": { "order": "with-parent" - } + }, + "path": "Library/Templates/Trends" }, "type": "ia.display.view" }, @@ -261,16 +254,11 @@ }, "type": "property" } - }, - "props.path": { - "binding": { - "config": { - "expression": "concat(\u0027Library/Templates/\u0027,{view.params.objectName},\u0027/Meta\u0027)" - }, - "type": "expr" - } } }, + "props": { + "path": "Library/Templates/Meta" + }, "type": "ia.display.view" }, { @@ -392,7 +380,8 @@ "props": { "contentStyle": { "backgroundColor": "var(--container)" - } + }, + "currentTabIndex": 2 }, "type": "ia.container.tab" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/resource.json deleted file mode 100644 index dd59477..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAC_FirstFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "451d00f16309def18459d2e491c7de0ba06a799aa744aac90ddf91e5189ff178", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:06Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/resource.json deleted file mode 100644 index 035f984..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_FirstFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "6104ca7c5c12a46ca81e602dfadd8673add10747b09f20f014fbb994145110d0", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:06Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/resource.json deleted file mode 100644 index 13b9eee..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/CRAH_SecondFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "263657860f7e35fd629e54a0b89c4037325c837248d7b52f11b862dd63b0f28b", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-21T23:36:28Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/resource.json deleted file mode 100644 index 8649576..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_FirstFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "71dc1efc43d67382bb7a7d61893efef587b6f741f630f01ee6829877fbcba27c", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:07Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/resource.json deleted file mode 100644 index 8a1134a..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/FCU_SecondFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "295ed6480699f0fdc3f698d3077c50d441eecd11267a8f0b717d2f6407670a70", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:07Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/resource.json deleted file mode 100644 index 3de3538..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_FirstFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "7417f474703b8ffe673c83728fd0fe9740e60a00062613dcb471e5ea4fa9c65d", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:07Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/resource.json deleted file mode 100644 index 9fb6cf3..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/GAL_SecondFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "3cf103f0fd59d4967983b537dfc596fef1aeefb0ecddd6f6191cd9efbbfdc4e9", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:07Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/resource.json deleted file mode 100644 index f117635..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "c57830e19381ad7f20d193ebc158fa16a4f9154875b8a4e321627d11a5a9add0", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-21T23:33:53Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/resource.json deleted file mode 100644 index fea5a07..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "f5f67b1511b542253dfa78fd50703c8181aa9931d00a8c7369db2997e37f0c04", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-21T23:23:44Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/thumbnail.png deleted file mode 100644 index 672351d..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/resource.json deleted file mode 100644 index 44fafe9..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "ed86f26d69dc55ffb1123c8a53ffccbdd890c387c09116ffd1a8343396c9b119", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-21T23:32:53Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/thumbnail.png deleted file mode 100644 index 4598261..0000000 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/thumbnail.png and /dev/null differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/resource.json deleted file mode 100644 index ed27eb5..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/VAV_FirstFloor/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "c5669d45331e48e2cdbdef39c24a2121e33ff80bf404edfddd1a16be39f085dc", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T18:46:07Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/resource.json new file mode 100644 index 0000000..d3da2cd --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "fc8b7b6da1256acdd08165c0cbab5fc3306dcb7c013dafc8138a068735a4eca8", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:34:01Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/thumbnail.png new file mode 100644 index 0000000..53f1445 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/view.json new file mode 100644 index 0000000..ce517f9 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_1f/view.json @@ -0,0 +1,1180 @@ +{ + "custom": { + "Available": [ + "SATB1_RF_RTU01", + "SATB1_RF_RTU02" + ], + "ColorHandler": { + "Wall": "black", + "available": "#BAEDFF", + "background": "lightgray", + "selected": "#FFBABD" + }, + "roomColors": { + "RTU01": "#BAEDFF", + "RTU02": "#BAEDFF" + }, + "selected": "SATB1_4" + }, + "params": {}, + "propConfig": { + "custom.Available": { + "persistent": true + }, + "custom.ColorHandler": { + "persistent": true + }, + "custom.roomColors": { + "binding": { + "config": { + "struct": { + "rooms": "{view.custom.Available}", + "selected": "{view.custom.selected}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\trooms \u003d value[\"rooms\"]\n\tselected \u003d value[\"selected\"]\n\toutput \u003d {}\n\tfor room in rooms:\n\t\tshortName \u003d room.split(\"_\")\n\t\tif room \u003d\u003d selected:\n\t\t\tcolor \u003d self.custom.ColorHandler.selected\n\t\telse:\n\t\t\tcolor \u003d self.custom.ColorHandler.available\n\t\tsroom \u003d shortName[2]\n\t\toutput[sroom] \u003d color\n\treturn output", + "type": "script" + } + ], + "type": "expr-struct" + }, + "persistent": true + }, + "custom.selected": { + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 100, + "width": 392 + } + }, + "root": { + "children": [ + { + "custom": { + "room": "MMR1120" + }, + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tpayload \u003d {\"Room\":self.meta.name}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "SATB1_RF_RTU01", + "tooltip": { + "enabled": true + } + }, + "position": { + "height": 105, + "width": 170, + "x": 260, + "y": 8 + }, + "propConfig": { + "meta.tooltip.text": { + "binding": { + "config": { + "path": "this.meta.name" + }, + "type": "property" + } + } + }, + "props": { + "style": { + "backgroundColor": "transparent" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "1sf" + }, + "position": { + "height": 100, + "width": 392 + }, + "props": { + "elements": [ + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "19.513", + "x": "15.769", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.652", + "x": "118.364", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.652", + "x": "170.016", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "50.952", + "x": "221.667", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.739", + "x": "272.62", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "50.602", + "x": "324.359", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.477", + "x": "429.8", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.564", + "x": "481.277", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.564", + "x": "532.841", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.04", + "x": "584.405", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.04", + "x": "635.445", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "54.275", + "x": "686.485", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "21.346", + "name": "rect", + "type": "rect", + "width": "21.925", + "x": "740.759", + "y": "19.107" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.475", + "name": "rect", + "type": "rect", + "width": "21.925", + "x": "740.759", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.416", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "786.218", + "y": "13.901" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.416", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "852.316", + "y": "13.901" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.135", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "786.218", + "y": "27.317" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.135", + "name": "rect", + "type": "rect", + "width": "14.539", + "x": "852.316", + "y": "27.317" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.851", + "name": "rect", + "type": "rect", + "width": "16.222", + "x": "930.366", + "y": "26.601" + }, + { + "d": "M930.348,40.452l-27.849,0l-0,-36.821l44.089,0l0,22.925l-16.24,0l-0,13.896Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "23.534", + "x": "762.684", + "y": "3.631" + }, + { + "d": "M786.218,13.913l0,-10.282l90.299,0l-0,36.821l-9.76,0l0,-26.539l-14.441,0l-0,26.539l-51.657,0l0,-26.539l-14.441,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "25.982", + "x": "876.517", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "51.228", + "x": "946.588", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "36.821", + "name": "rect", + "type": "rect", + "width": "54.368", + "x": "997.816", + "y": "3.631" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "14.089", + "name": "rect", + "type": "rect", + "width": "15.038", + "x": "35.282", + "y": "26.364" + }, + { + "d": "M35.282,26.32l0,-22.689l43.295,0l0,36.821l-28.213,0l0,-14.132l-15.082,-0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "16.934", + "name": "rect", + "type": "rect", + "width": "12.193", + "x": "1030.82", + "y": "59.578" + }, + { + "d": "M704.881,225.51l-0,-170.409l161.096,0l0,187.468l-149.344,-0l0,-17.059l-11.752,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.24", + "name": "rect", + "type": "rect", + "width": "11.943", + "x": "704.881", + "y": "225.328" + }, + { + "d": "M876.967,214.554l-0,-64.103l36.031,-0l-0,85.698l-15.332,0l-0,-21.595l-20.699,-0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "14.539", + "name": "rect", + "type": "rect", + "width": "36.031", + "x": "876.967", + "y": "236.149" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "21.595", + "name": "rect", + "type": "rect", + "width": "20.699", + "x": "876.967", + "y": "214.554" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "18.473", + "name": "rect", + "type": "rect", + "width": "18.536", + "x": "930.889", + "y": "150.451" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "18.473", + "name": "rect", + "type": "rect", + "width": "17.891", + "x": "912.998", + "y": "150.451" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "6.994", + "name": "rect", + "type": "rect", + "width": "18.536", + "x": "930.889", + "y": "168.924" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.849", + "name": "rect", + "type": "rect", + "width": "11.891", + "x": "937.534", + "y": "175.918" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "13.849", + "name": "rect", + "type": "rect", + "width": "8.674", + "x": "928.86", + "y": "175.918" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "23.641", + "name": "rect", + "type": "rect", + "width": "15.862", + "x": "912.998", + "y": "175.918" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "21.866", + "name": "rect", + "type": "rect", + "width": "36.427", + "x": "912.998", + "y": "199.559" + }, + { + "d": "M971.223,232.877l-0,18.173l-58.225,-0l-0,-29.625l36.427,0l-0,11.452l21.798,-0Z", + "fill": { + "opacity": "0.8", + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.062", + "name": "rect", + "type": "rect", + "width": "18.445", + "x": "963.414", + "y": "189.423" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "11.862", + "name": "rect", + "type": "rect", + "width": "17.665", + "x": "963.915", + "y": "170.98" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "18.443", + "name": "rect", + "type": "rect", + "width": "16.899", + "x": "981.58", + "y": "170.98" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "38.861", + "name": "rect", + "type": "rect", + "width": "29.136", + "x": "1001.35", + "y": "128.524" + }, + { + "d": "M1030.49,85.457l-0,43.067l-66.685,0l-0,5.678l-14.384,0l-0,4.915l-72.683,0l0,-84.077l58.255,0l-0,4.364l12.265,-0l0,-4.364l74.607,0l-0,30.417l8.625,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "57.132", + "name": "rect", + "type": "rect", + "width": "29.136", + "x": "1001.35", + "y": "167.624" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "28.911", + "name": "rect", + "type": "rect", + "width": "17.935", + "x": "1034.25", + "y": "222.138" + }, + { + "d": "M1030.49,222.138l3.76,0l-0,28.912l-63.026,-0l-0,-44.565l30.13,0l-0,18.226l29.136,0l-0,-2.573Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M998.256,150.993l-0,19.987l-34.452,0l-0,-11.174l8.944,0l-0,-8.813l25.508,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M972.748,147.916l-0,-8.464l-8.944,0l-0,-10.928l34.452,0l-0,19.392l-25.508,-0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.062", + "name": "rect", + "type": "rect", + "width": "19.494", + "x": "981.859", + "y": "189.423" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "6.994", + "name": "rect", + "type": "rect", + "width": "17.891", + "x": "912.998", + "y": "168.924" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "24.65", + "name": "rect", + "type": "rect", + "width": "22.172", + "x": "18.391", + "y": "53.391" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "11.206", + "name": "rect", + "type": "rect", + "width": "12.24", + "x": "54.692", + "y": "55.139" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "11.102", + "name": "rect", + "type": "rect", + "width": "12.24", + "x": "54.692", + "y": "66.345" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "12.117", + "name": "rect", + "type": "rect", + "width": "25.955", + "x": "15.646", + "y": "200.465" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "22.964", + "name": "rect", + "type": "rect", + "width": "25.955", + "x": "15.646", + "y": "212.582" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.623", + "name": "rect", + "type": "rect", + "width": "25.955", + "x": "15.646", + "y": "235.546" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "10.277", + "name": "rect", + "type": "rect", + "width": "11.384", + "x": "29.179", + "y": "84.3" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "32.029", + "name": "rect", + "type": "rect", + "width": "51.287", + "x": "15.646", + "y": "168.436" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "12.158", + "name": "rect", + "type": "rect", + "width": "13.351", + "x": "53.581", + "y": "200.465" + }, + { + "d": "M40.563,54.987l14.129,-0l0,21.662l12.24,-0l0,91.787l-51.286,-0l-0,-64.403l24.917,-0l0,-49.046Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M40.563,94.439l0,9.615l-24.917,-0l-0,-15.097l13.597,-0l-0,5.482l11.32,0Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M29.198,89.667l-13.552,0l-0,-11.626l24.917,0l0,6.248l-11.365,0l-0,5.378Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.024", + "name": "rect", + "type": "rect", + "width": "11.711", + "x": "80.091", + "y": "91.578" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "152.196", + "name": "rect", + "type": "rect", + "width": "263.909", + "x": "111.158", + "y": "75.196" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.177", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "98.309", + "y": "227.392" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "20.095", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "98.309", + "y": "55.101" + }, + { + "d": "M91.815,91.578l19.397,-0l0,120.214l-31.121,-0l-0,-103.211l11.724,-0l0,-17.003Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "17.286", + "name": "rect", + "type": "rect", + "width": "11.012", + "x": "393.832", + "y": "91.578" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "152.196", + "name": "rect", + "type": "rect", + "width": "263.909", + "x": "422.8", + "y": "75.196" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "15.177", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "409.951", + "y": "227.392" + }, + { + "fill": { + "paint": "#ececec" + }, + "height": "20.095", + "name": "rect", + "type": "rect", + "width": "276.758", + "x": "409.951", + "y": "55.101" + }, + { + "d": "M404.766,91.578l18.089,-0l0,122.924l-29.023,0l-0,-105.538l10.934,0l-0,-17.386Z", + "fill": { + "paint": "#ececec" + }, + "name": "path", + "type": "path" + }, + { + "d": "M66.932,211.792l0,-156.653l31.37,-0.038l0.007,20.095l12.903,0l0,16.382l-31.121,-0l-0,120.214l-13.159,-0Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor21", + "name": "Corridor21", + "type": "path" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "36.821", + "id": "Corridor20", + "name": "Corridor20", + "type": "rect", + "width": "39.787", + "x": "78.577", + "y": "3.631" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor19", + "name": "Corridor19", + "type": "rect", + "width": "276.758", + "x": "98.309", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor18", + "name": "Corridor18", + "type": "rect", + "width": "256.909", + "x": "429.8", + "y": "40.452" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "187.468", + "id": "Corridor17", + "name": "Corridor17", + "type": "rect", + "width": "18.171", + "x": "686.709", + "y": "55.101" + }, + { + "d": "M876.967,55.04l-172.086,0.061l-0,-14.649l172.086,0l-0,14.588Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor16", + "name": "Corridor16", + "type": "path" + }, + { + "d": "M876.967,40.452l175.217,0l-0,12.187l-8.968,0l0,6.939l-12.2,-0l0,-6.939l-9.235,0l0,2.401l-74.524,0l0,4.364l-12.265,-0l-0,-4.364l-58.025,0l-0,-14.588Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor15", + "name": "Corridor15", + "type": "path" + }, + { + "d": "M876.967,55.042l-0,187.527l-10.99,-0l0,-187.523l10.99,-0.004Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor14", + "name": "Corridor14", + "type": "path" + }, + { + "d": "M949.421,150.451l-72.454,-0l-0,-11.334l72.453,0l0.001,11.334Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor13", + "name": "Corridor13", + "type": "path" + }, + { + "d": "M949.425,189.767l-0.005,-55.565l14.139,0l0,5.1l9,0l0,20.504l-8.755,0l-0,11.174l0.111,0l0,11.863l17.665,-0l0,6.58l-18.166,0l-0,17.062l7.809,0l-0,27.437l-21.798,-0l-0,-34.363l-20.565,0l-0,-9.792l20.565,0Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor12", + "name": "Corridor12", + "type": "path" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor11", + "name": "Corridor11", + "type": "rect", + "width": "10.99", + "x": "865.977", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor10", + "name": "Corridor10", + "type": "rect", + "width": "161.096", + "x": "704.881", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor9", + "name": "Corridor9", + "type": "rect", + "width": "18.171", + "x": "686.709", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "8.6", + "id": "Corridor8", + "name": "Corridor8", + "type": "rect", + "width": "276.758", + "x": "409.951", + "y": "242.569" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor7", + "name": "Corridor7", + "type": "rect", + "width": "18.171", + "x": "686.709", + "y": "40.452" + }, + { + "d": "M409.951,251.169l-34.885,0l0,-196.068l34.885,0l0,20.095l12.849,0l0,16.382l-28.968,-0l-0,122.924l28.968,0l0,12.89l-12.849,-0l0,23.777Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor6", + "name": "Corridor6", + "type": "path" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "36.821", + "id": "Corridor5", + "name": "Corridor5", + "type": "rect", + "width": "54.839", + "x": "374.961", + "y": "3.631" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor4", + "name": "Corridor4", + "type": "rect", + "width": "54.839", + "x": "374.961", + "y": "40.452" + }, + { + "fill": { + "paint": "#f7f7f7" + }, + "height": "14.649", + "id": "Corridor3", + "name": "Corridor3", + "type": "rect", + "width": "256.597", + "x": "118.364", + "y": "40.452" + }, + { + "d": "M118.364,55.101l-20.055,0l-31.377,0.038l-12.24,0l0,-0.152l-14.129,-0l0,-1.596l-24.917,-0l-0,-12.939l102.718,0l0,14.649Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor2", + "name": "Corridor2", + "type": "path" + }, + { + "d": "M98.309,251.169l-56.708,0l-0,-50.704l11.98,-0l0,12.158l13.351,0l0,-0.831l44.28,-0l0,15.6l-12.903,-0l-0,23.777Z", + "fill": { + "paint": "#f7f7f7" + }, + "id": "Corridor1", + "name": "Corridor1", + "type": "path" + }, + { + "d": "M1052.18,251.104l-1036.44,-0l0,-247.345l1036.44,-0l-0,83.692m-0,134.724l-0,28.929m-52.001,-250.662l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-102.714,-0l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-102.714,-0l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-106.218,-0l0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-102.824,-0l0,3.317l-11.769,-0l0,-3.317l11.769,-0Zm-102.604,-0l-0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm-106.218,-0l-0,3.317l-11.77,-0l0,-3.317l11.77,-0Zm-102.714,-0l-0,3.317l-11.77,-0l0,-3.317l11.77,-0Zm-102.714,-0l-0,3.317l-11.77,-0l0,-3.317l11.77,-0Zm-102.933,-0l-0,3.317l-11.769,-0l-0,-3.317l11.769,-0Zm14.199,250.662l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm78.141,-0l0,3.316l-11.769,0l-0,-3.316l11.769,-0Zm108.518,-0l-0,3.316l-11.769,0l-0,-3.316l11.769,-0Zm92.421,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm108.846,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm107.86,-0l0,3.316l-11.769,0l0,-3.316l11.769,-0Zm142.85,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm92.311,-0l-0,3.316l-11.77,0l0,-3.316l11.77,-0Zm108.298,-0l0,3.316l-11.769,0l0,-3.316l11.769,-0Zm63.403,-0l-0,3.316l-11.769,0l-0,-3.316l11.769,-0Zm66.807,-163.653l-21.805,0l0,134.724l21.805,-0m-998.837,28.929l-0,14.955l-36.793,0l-0,-14.955l36.793,-0Zm-37.601,-201.071l-14.956,-0l0,-36.793l14.956,-0l0,36.793Zm402.74,201.071l-0,14.955l-35.84,0l-0,-14.955l35.84,-0Zm488.384,-0l-0,14.955l-35.84,0l-0,-14.955l35.84,-0Zm-878.403,-0l0,14.955l-5.536,0l0,-14.955l5.536,-0Zm-12.721,-225.95l-14.956,-0l0,-5.537l14.956,0l0,5.537Zm375.282,225.95l-0,14.955l-5.873,0l-0,-14.955l5.873,-0Zm488.383,-0l0,14.955l-5.872,0l-0,-14.955l5.872,-0Zm-829.288,0.589l-0,14.366l-5.537,0l0,-14.366l5.537,-0Zm-34.966,-204.884l-14.367,0l0,-5.536l14.367,-0l0,5.536Zm397.526,204.884l-0,14.366l-5.537,0l0,-14.366l5.537,-0Zm488.384,-0l-0,14.366l-5.537,0l0,-14.366l5.537,-0Zm-856.621,7.183l0,1.997l-15.979,0l0,-1.997l15.979,0Zm-36.623,-217.674l-2.221,0l-0,-15.978l2.221,-0l0,15.978Zm4.811,-0.07l-11.844,0l0,-15.978l11.844,-0l0,15.978Zm394.372,217.744l0,1.997l-15.978,0l-0,-1.997l15.978,0Zm488.384,0l0,1.997l-15.979,0l0,-1.997l15.979,0Zm-865.311,-4.66l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-17.445,-227.45l-11.844,-0l0,-1.612l11.844,-0l0,1.612Zm380.005,227.45l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm362.56,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-20.669,-224.227l-11.844,0l0,-1.612l11.844,0l0,1.612Zm383.229,224.227l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm362.56,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-23.893,-221.003l-11.844,0l0,-1.612l11.844,0l0,1.612Zm386.453,221.003l-0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm362.56,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-27.117,-217.779l-11.844,-0l0,-1.612l11.844,0l0,1.612Zm389.677,217.779l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-849.332,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm362.56,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm488.384,-0l-0,11.213l-1.612,-0l-0,-11.213l1.612,-0Zm-849.333,-0l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm-30.34,-214.555l-11.844,-0l0,-1.612l11.844,-0l0,1.612Zm392.9,214.555l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm488.384,-0l0,11.213l-1.611,-0l-0,-11.213l1.611,-0Zm-849.332,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm-22.508,-213.996l-6.332,-0l0,-36.461l19.372,-0l0,36.461l-4.638,-0m21.154,-0l-10.159,-0m-6.357,-0l0,-36.461l43.331,-0l0,36.461l-19.065,-0m583.35,-0l-7.439,-0l-0,-36.461l51.229,-0l0,36.461l-5.848,-0m-8.363,-0l-25.4,-0m-55.819,-0l-7.029,-0l0,-36.461l51.23,-0l-0,36.461l-6.341,-0m-8.116,-0l-24.827,-0m-56.31,-0l-6.866,-0l0,-36.461l51.23,-0l0,36.461l-6.013,-0m-8.444,-0l-25.236,-0m-56.023,-0l-7.111,-0l-0,-36.461l51.23,-0l-0,36.461l-5.521,-0m-8.609,-0l-25.728,-0m-55.501,-0l-7.208,-0l0,-36.461l51.319,-0l0,36.461l-5.53,-0m-8.786,-0l-25.362,-0m-110.308,-0l-6.979,-0l0,-36.461l50.722,-0l-0,36.461l-6.309,-0m-7.726,-0l-25.622,-0m-55.689,-0l-7.12,-0l-0,-36.461l51.744,-0l0,36.461l-6.436,-0m-7.882,-0l-26.138,-0m-55.433,-0l-7.043,-0l-0,-36.461l51.188,-0l-0,36.461l-6.367,-0m-7.797,-0l-25.858,-0m-54.966,-0l-7.535,-0l-0,-36.461l51.188,-0l-0,36.461l-6.366,-0m-7.798,-0l-25.202,-0m-55.967,-0l-7.043,-0l-0,-36.461l51.188,-0l-0,36.461l-6.366,-0m-7.798,-0l-25.038,-0m-52.337,-0l0,-36.461l39.795,-0l-0,36.461m586.833,185.309l0,-2.629m0,-161.477l0,-6.244l160.844,0l-0,187.61l-160.844,-0l0,-12.419m0,-15.318l0,-145.865m0,156.342l11.507,-0l-0,17.26l-11.507,-0m171.85,-33.867l0,-58.424l36.021,-0l0,85.787l-36.021,-0m0,-4.74l0,-18.361m0,1.338l20.762,0l0,21.763m66.039,-43.071l-0,-3.706l18.01,-0l0,16.759l-18.01,0l-0,-8.955m19.341,8.955l-1.331,0l0,-16.759l15.009,-0l0,16.759l-9.744,0m-56.673,-55.769l2.135,-0m4.373,-0l12.381,-0l0,25.252l-36.271,-0l0,-25.252l13.185,-0m20.296,48.852l2.79,0l0,21.773l-36.271,-0l0,-21.773l29.547,0m-245.928,-159.13l-10.043,-0l0,-36.461l54.087,-0l0,36.461l-36.195,-0m163.185,-0l-112.808,-0m-8.504,-0l-5.678,-0l0,-36.461l161.833,-0l0,36.461l-28.183,-0m-133.65,-20.985l22.051,-0m0,-11.066l0,32.051m179.19,-0l-12.032,-0m-8.966,-0l-18.41,-0l0,-36.461l44.144,-0l0,36.461m6.351,-0l-6.351,-0l0,-36.461l50.96,-0l0,36.461l-35.652,-0m-554.75,213.996l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm488.384,-0l0,11.213l-1.612,-0l0,-11.213l1.612,-0Zm117.352,-213.996l39.302,-0m-54.636,-0l7.578,-0m-630.125,29.237l0,5.502l-276.536,0l-0,-5.498m-0,-8.612l-0,-5.78l276.536,-0l0,5.833m311.467,8.555l-0,5.502l-276.537,0l0,-5.498m0,-8.612l0,-5.78l276.537,-0l-0,5.833m-311.467,181.679l-276.536,0m-0,-8.206l-0,-6.881l276.536,0l0,6.463m311.467,8.624l-276.537,0m0,-8.206l0,-6.881l276.537,0l-0,6.492m-575.322,-159.027l-0,1.574m311.466,-1.574l0,1.574m-47.611,-1.574l0,1.574m311.467,-1.574l-0,1.574m-575.322,8.073l-0,134.332m311.466,-134.332l0,134.332m-47.611,-134.332l0,134.332m311.467,-134.332l-0,134.332m-594.841,-127.238l19.519,-0l-0,16.749m-0,0l-0,103.263l-17.458,0m-8.49,0l-4.994,0l-0,-114.804m313.656,-5.208l28.752,-0l0,122.574l-16.492,-0m-8.218,-0l-4.042,-0l0,-103.062m-313.656,-18.19l-0,-1.322l11.423,-0l-0,16.749l-11.423,0m324.631,-16.749l0,19.512l-10.975,0l0,-14.613m648.968,-44.009l9.356,-0l-0,32.739l-30.212,0l-0,-32.739l8.914,-0m11.942,-0l0,23.939l-11.942,0l0,-23.939m9.715,7.176l2.227,-0l0,16.763l-11.942,0l0,-16.763l3.717,-0m-3.717,0.673l0,16.09l-8.914,0l-0,-16.09l8.914,-0Zm21.298,-0l-0,16.09l-9.356,0l0,-16.09l9.356,-0Zm-10.447,24.89l-10.891,0l-0,-8.8l10.891,0l-0,8.8Zm-10.851,-23.278l0,1.85l-8.914,-0l-0,-1.85l8.914,-0Zm21.298,-0l-0,1.85l-9.356,-0l0,-1.85l9.356,-0Zm-21.298,3.672l0,1.85l-8.914,0l-0,-1.85l8.914,-0Zm21.298,-0l-0,1.85l-9.356,0l0,-1.85l9.356,-0Zm-21.298,3.672l0,1.85l-8.914,0l-0,-1.85l8.914,0Zm21.298,0l-0,1.85l-9.356,0l0,-1.85l9.356,0Zm-17.581,15.934l-1.85,0l0,-8.8l1.85,0l0,8.8Zm-3.717,-12.262l0,1.851l-8.914,-0l-0,-1.851l8.914,0Zm21.298,0l-0,1.851l-9.356,-0l0,-1.851l9.356,0Zm-14.042,12.262l-1.851,0l0,-8.8l1.851,0l-0,8.8Zm1.85,0l-1.85,0l-0,-8.8l1.85,0l-0,8.8Zm-998.447,144.397l-0,5.746l-25.799,-0l0,-23.054l25.799,0l-0,4.601m2.292,-162.133l-3.289,0m14.274,0l-2.959,0m-10.318,194.328l-0,1.89m-0,-15.632l-0,9.168m25.294,-112.121l0,-4.249m0,72.181l0,-56.286m0,-20.04l0,-47.132m-30.609,-23.708l4.318,0l-0,24.335l-24.802,-0l0,-24.335l8.156,0m36.246,1.601l6.691,0l0,11.796m0,4.564l0,5.747l-12.017,0l-0,-22.107l1.392,0m-1.392,11.054l12.017,-0m-25.294,145.671l-0,0.807l-25.799,0l0,-11.967l25.799,0l-0,6.697m-23.003,-153.863l-0,24.335l-2.796,-0l0,-24.335l2.796,0Zm48.297,158.313l0,0.82l-13.145,0l-0,-11.967l13.145,0l0,6.908m-23.436,-6.908l-1.858,0m12.149,0l-2.395,0m10.426,-31.873l5.114,0m-13.145,0l3.849,0m-41.797,0l25.799,0m-6.427,-142.069l15.071,0l-0,13.711m-9.641,42.41l-0,15.895m-0,3.83l-0,1.626l-24.802,0l0,-26.361l24.802,-0l-0,0.971m-24.802,-0.423l0,8.131l-15.304,0l-0,-8.131l15.304,-0Zm23.838,6.088l0.964,0l-0,10.23l-11.246,-0l0,-10.23l6.505,0m-20.061,5.115l13.556,0m-25.319,-11.203l-0,8.131l-1.836,0l-0,-8.131l1.836,-0Zm3.724,-0l0,8.131l-1.836,0l0,-8.131l1.836,-0Zm1026.6,163.98l0,8.956m0,-28.929l0,12.924m-121.356,1.54l0,14.465m-36.021,-14.465l0,9.022m94.493,-31.3l-0,-8.094m-0,44.837l-0,-25.923m-0,7.468l-21.901,0l0,-5.891m0,-51.008l0,13.866l-7.044,0m-4.739,-13.866l0,13.866l-3.97,0m-4.739,-13.866l0,18.477m2.057,-18.477l-0,-25.252m-11.022,18.242l22.413,0m26.741,13.943l12.322,-0m-17.547,-23.164l0,23.164l1.209,-0m-1.209,-11.582l34.453,-0m-16.906,13.887l-0,-13.887m-12.68,-11.582l3.907,-0l-0,-20.108l-4.035,0m4.035,8.709l25.679,-0.128m-25.679,2.818l25.679,-0m-1.697,38.698l1.697,-0l-0,-60.983l-34.709,-0l0,10.886m14.857,-10.886l-0,3.586m-0,35.605l-0,3.073m19.852,-42.264l31.634,-0m-4.222,96.056l4.523,-0l0,-2.406m-29.118,-93.65l0,85.836m0,3.771l0,6.449l20.742,-0m-25.256,-18.314l4.514,0m25.022,-39.048l4.096,-0m-29.118,-0l20.186,-0m-75.992,-107.941l1.721,-0l0,-4.099l74.796,0m-62.895,79.225l-9.508,-0.075l-0,4.713l-72.642,0l0,-83.863l58.118,0l0,4.099m0,-0l2.295,-0m-151.112,-52.543l-0,-2.976m-0,36.461l-0,-28.157m5.041,2.049l-5.041,-0m14.242,13.054l-0,-13.054m-0,26.108l-0,-7.522m66.189,-17.52l-0,-1.066l-14.242,-0m14.242,15l-0,-9.119m-0,20.227l-0,-3.423m-14.242,-22.685l-0,26.108m24.283,-27.235l-0,27.235m-90.472,-13.054l14.242,-0m51.947,-0l14.242,-0m63.673,13.054l-0,-13.618l16.256,0m96.24,25.988l0,-7.264", + "fill": { + "paint": "transparent" + }, + "id": "_1stFloor", + "name": "_1stFloor", + "stroke": { + "opacity": "0.95", + "paint": "#747474", + "width": "0.88px" + }, + "type": "path" + } + ], + "fill": { + "rule": "evenodd" + }, + "stroke": { + "linecap": "round", + "linejoin": "round", + "miterlimit": "1.5" + }, + "style": { + "clipRule": "evenodd" + }, + "viewBox": "0 0 1053 267" + }, + "type": "ia.shapes.svg" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": 0, + "y": 0 + }, + "props": { + "style": { + "overflow": "hidden", + "paddingBottom": 1, + "paddingLeft": 1, + "paddingRight": 1, + "paddingTop": 1 + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "layout_01_Update", + "pageScope": true, + "script": "\t# implement your handler here\n\tself.view.custom.selected \u003d payload[\"Room\"]", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/resource.json new file mode 100644 index 0000000..a361ece --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "41c94a1e33b937d7522728d39c8bff15d79ce2b00218be8ce75daa810735c1d1", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:32:47Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/thumbnail.png new file mode 100644 index 0000000..4500b54 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/view.json similarity index 99% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/view.json index 1375706..0915bca 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_SecondFloor/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_2f/view.json @@ -49,8 +49,8 @@ }, "props": { "defaultSize": { - "height": 120, - "width": 430 + "height": 100, + "width": 392 } }, "root": { @@ -103,8 +103,8 @@ "name": "2nf" }, "position": { - "height": 120, - "width": 430 + "height": 100, + "width": 392 }, "props": { "elements": [ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/resource.json new file mode 100644 index 0000000..df7ee52 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "765664554c0ad4546281e6afe4cce66c56f54e38283e5297c810cfd8bd769c48", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T20:32:32Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/thumbnail.png new file mode 100644 index 0000000..1c41208 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/view.json similarity index 98% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/view.json index b8e80f8..804239a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_Roof/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Roof/view.json @@ -49,8 +49,8 @@ }, "props": { "defaultSize": { - "height": 120, - "width": 430 + "height": 100, + "width": 392 } }, "root": { @@ -60,10 +60,8 @@ "name": "Roof" }, "position": { - "height": 109, - "width": 422, - "x": 4, - "y": 6.5 + "height": 100, + "width": 392 }, "props": { "elements": [ @@ -3996,102 +3994,14 @@ "viewBox": "0 0 1066 267" }, "type": "ia.shapes.svg" - }, - { - "custom": { - "room": "MMR1120" - }, - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.meta.name}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "SATB1_RF_RTU01", - "tooltip": { - "enabled": true - } - }, - "position": { - "height": 19, - "width": 12, - "x": 408, - "y": 37 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "path": "this.meta.name" - }, - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "transparent" - } - }, - "type": "ia.display.label" - }, - { - "custom": { - "room": "MMR1120" - }, - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.meta.name}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "SATB1_RF_RTU02", - "tooltip": { - "enabled": true - } - }, - "position": { - "height": 16, - "width": 11, - "x": 409, - "y": 58 - }, - "propConfig": { - "meta.tooltip.text": { - "binding": { - "config": { - "path": "this.meta.name" - }, - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "transparent" - } - }, - "type": "ia.display.label" } ], "meta": { "name": "root" }, "position": { - "x": 13, - "y": 0 + "x": 155.99408149719238, + "y": 109 }, "scripts": { "customMethods": [], diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/resource.json new file mode 100644 index 0000000..41a03bd --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "79b3ed1ce32f0eca0476fafa522489c0e50530be4be0b2646c4233a069fbbd77", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T19:30:10Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/thumbnail.png similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/thumbnail.png rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/thumbnail.png diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/view.json similarity index 100% rename from Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/RTU_FirstFloor/view.json rename to Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Layouts/Wdt_Bldg_Yard/view.json diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/resource.json deleted file mode 100644 index c00e8ce..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority v2/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "7f5495298f95dfd34ae7075b19491e00ccefba5008eaabb1c065b987f95a15b2", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T19:31:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/resource.json deleted file mode 100644 index 8d8f314..0000000 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Mechanical/LLS_OperatorPriority/resource.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scope": "G", - "version": 1, - "restricted": false, - "overridable": true, - "files": [ - "view.json", - "thumbnail.png" - ], - "attributes": { - "lastModificationSignature": "7c6c387d97cc508394d70b284f557d63aeb9aa7b39afcde7602a887cfa195d17", - "lastModification": { - "actor": "Emmanuel", - "timestamp": "2026-04-16T19:31:59Z" - } - } -} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/resource.json index 4541b50..02cb258 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "229ae00bbe8bf689c8b8707da5ad649ef1ee522ab825879259851ba971f4ef72", + "lastModificationSignature": "4187e12bdca542b2eed1a5126d2c692571f9436b3cbcda9995ad6d73d74cc220", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T15:57:02Z" + "timestamp": "2026-05-01T22:01:52Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/thumbnail.png index 24a79ca..fd9e515 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/view.json index 9117328..ff44f24 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Library/Widgets/Wgt_EquipmentStatusCount/view.json @@ -1,5 +1,7 @@ { - "custom": {}, + "custom": { + "key": "value" + }, "params": { "Tag": "STU", "faulted": 8, @@ -7,6 +9,9 @@ "standby": 25 }, "propConfig": { + "custom.key": { + "persistent": true + }, "params.Tag": { "paramDirection": "input", "persistent": true @@ -122,9 +127,9 @@ }, "props": { "colors": [ - "white", - "gray", - "red" + "#E3F2FD", + "#B1B3B2", + "#E22028" ], "cutoutRadius": 50, "data": [ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/resource.json index c5722b1..a111427 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "986b49f4f31a86323f8cc504cbf1b2b4cd4943880181feac17d240b528c80679", + "lastModificationSignature": "a7733422b42900b5fb546513d07702d4cc82ad80e97c6e3068d686831ff46ca2", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T00:04:42Z" + "timestamp": "2026-04-28T22:17:39Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/thumbnail.png index 30f0c57..c94e088 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/view.json index f7d3ac7..a517145 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH101/view.json @@ -48,8 +48,8 @@ }, "props": { "defaultSize": { - "height": 1190, - "width": 2078 + "height": 1132, + "width": 1695 } }, "root": { @@ -3383,29 +3383,6 @@ }, "type": "ia.display.view" }, - { - "meta": { - "name": "DH controls" - }, - "position": { - "height": 1000, - "width": 370, - "x": 1708, - "y": -11.1562 - }, - "props": { - "params": { - "dh": 1 - }, - "path": "Library/Cards/Card_DH_Control", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, { "meta": { "name": "EmbeddedView" @@ -3413,8 +3390,8 @@ "position": { "height": 148, "width": 105, - "x": 1814.78, - "y": 915.345 + "x": -0.9600429382324478, + "y": 21.28765649414062 }, "props": { "params": { @@ -3554,8 +3531,8 @@ "name": "root" }, "position": { - "x": 6.98828125, - "y": 147.96875 + "x": 35, + "y": -22 }, "props": { "style": { @@ -3568,16 +3545,9 @@ "extensionFunctions": null, "messageHandlers": [ { - "messageType": "eqPopupMsg", + "messageType": "requestEQPopup", "pageScope": true, - "script": "\t# implement your handler here\n\tutils.nav.eqPopupMsg(self, payload)", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "LLSPopupMsg", - "pageScope": true, - "script": "\t# implement your handler here\n\tutils.nav.LLSPopupMsg(self, payload)", + "script": "\t# implement your handler here\n\tpageId \u003d self.view.params.pageId\n\tif pageId and pageId !\u003d \"\":\n\t\tsystem.perspective.sendMessage(\u0027eqPopup\u0027, payload\u003dpayload, scope\u003d\u0027page\u0027, pageId\u003dpageId)\n\telse:\n\t\tsystem.perspective.openPopup(\"TestPopup\", \"Library/Layouts/L3_Details\", params\u003dpayload)", "sessionScope": false, "viewScope": false } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/resource.json index 0ed14e6..1abba43 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "240b43812a78c3303b313fb417dc4c18a0ccff0af8f464cc77a6c1caa8d5ed19", + "lastModificationSignature": "f78e7b50ba5dcd605e8b7e1144713ae6a1f4605ef74441f47b5d68ef368284ab", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T21:11:55Z" + "timestamp": "2026-04-28T23:52:53Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/thumbnail.png index ab96496..e7a1869 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/view.json index 19d15a3..0105fb4 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH102/view.json @@ -1,8 +1,8 @@ { "custom": { - "c1": 69.8, - "c2": 69.8, - "global": 75 + "c1": null, + "c2": null, + "global": null }, "params": { "pageId": "" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/resource.json index 6752fdb..9e62a81 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "2c818785faecd0b4799387ac963316bd30745e92e3f706e1d25b518da11088c0", + "lastModificationSignature": "e4ab60d4ef009c742c3640fd4bda6ab041fb1b3316c3cba4c4e143107865ee0c", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T18:12:16Z" + "timestamp": "2026-05-01T21:12:20Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/thumbnail.png index 5e06cd9..70b482d 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/view.json index a6606f3..f0394f9 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201/view.json @@ -37,8 +37,8 @@ }, "props": { "defaultSize": { - "height": 1896, - "width": 2694 + "height": 1901, + "width": 2836 } }, "root": { @@ -51,7 +51,7 @@ "height": 1447, "width": 1983, "x": 39.56, - "y": -15.31 + "y": 87.69 }, "props": { "elements": [ @@ -298,8 +298,8 @@ "position": { "height": 69, "width": 121, - "x": 436.01, - "y": 171.3 + "x": 436, + "y": 274.3 }, "props": { "params": { @@ -322,7 +322,7 @@ "height": 69, "width": 120, "x": 587.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -345,7 +345,7 @@ "height": 69, "width": 120, "x": 737.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -368,7 +368,7 @@ "height": 69, "width": 120, "x": 887.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -391,7 +391,7 @@ "height": 69, "width": 120, "x": 1037.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -414,7 +414,7 @@ "height": 69, "width": 120, "x": 1187.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -437,7 +437,7 @@ "height": 69, "width": 120, "x": 1337.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -460,7 +460,7 @@ "height": 69, "width": 120, "x": 1487.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -483,7 +483,7 @@ "height": 69, "width": 120, "x": 1637.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -506,7 +506,7 @@ "height": 69, "width": 120, "x": 1787.01, - "y": 171.3 + "y": 274.3 }, "props": { "params": { @@ -528,8 +528,8 @@ "position": { "height": 69, "width": 120, - "x": 436.01, - "y": 1104 + "x": 436, + "y": 1207 }, "props": { "params": { @@ -552,7 +552,7 @@ "height": 69, "width": 120, "x": 586.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -575,7 +575,7 @@ "height": 69, "width": 120, "x": 736.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -598,7 +598,7 @@ "height": 69, "width": 120, "x": 886.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -621,7 +621,7 @@ "height": 69, "width": 120, "x": 1036.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -644,7 +644,7 @@ "height": 69, "width": 120, "x": 1186.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -667,7 +667,7 @@ "height": 69, "width": 120, "x": 1336.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -690,7 +690,7 @@ "height": 69, "width": 120, "x": 1486.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -713,7 +713,7 @@ "height": 69, "width": 120, "x": 1636.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -736,7 +736,7 @@ "height": 69, "width": 120, "x": 1786.01, - "y": 1104 + "y": 1207 }, "props": { "params": { @@ -762,7 +762,7 @@ }, "width": 165, "x": 1781.71, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -788,7 +788,7 @@ }, "width": 165, "x": 446.72, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -811,7 +811,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -836,7 +836,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -861,7 +861,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -886,7 +886,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -911,7 +911,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -936,7 +936,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -961,7 +961,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -986,7 +986,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -1011,7 +1011,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -1036,7 +1036,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1061,7 +1061,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1086,7 +1086,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1111,7 +1111,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1136,7 +1136,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1161,7 +1161,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1186,7 +1186,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1211,7 +1211,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1236,7 +1236,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1261,7 +1261,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1286,7 +1286,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1311,7 +1311,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1336,7 +1336,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1361,7 +1361,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1386,7 +1386,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1411,7 +1411,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1436,7 +1436,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1461,7 +1461,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1486,7 +1486,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 1047 + "y": 1150 }, "props": { "params": { @@ -1511,7 +1511,7 @@ "height": 25, "width": 72, "x": 522.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1536,7 +1536,7 @@ "height": 25, "width": 72, "x": 666.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1561,7 +1561,7 @@ "height": 25, "width": 72, "x": 810.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1586,7 +1586,7 @@ "height": 25, "width": 72, "x": 954.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1611,7 +1611,7 @@ "height": 25, "width": 72, "x": 1100.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1636,7 +1636,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1661,7 +1661,7 @@ "height": 25, "width": 72, "x": 1386.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1686,7 +1686,7 @@ "height": 25, "width": 72, "x": 1530.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1711,7 +1711,7 @@ "height": 25, "width": 72, "x": 1674.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1736,7 +1736,7 @@ "height": 25, "width": 72, "x": 1818.01, - "y": 671.9 + "y": 774.9 }, "props": { "params": { @@ -1761,7 +1761,7 @@ "height": 85, "width": 72, "x": 1912.39, - "y": 1122.44 + "y": 1225.44 }, "props": { "params": { @@ -1786,7 +1786,7 @@ "height": 88, "width": 79, "x": 364.36, - "y": 128.135 + "y": 231.135 }, "props": { "params": { @@ -1812,7 +1812,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 261 + "y": 364 }, "props": { "params": { @@ -1837,7 +1837,7 @@ "height": 25, "width": 72, "x": 1242.01, - "y": 636.9 + "y": 739.9 }, "props": { "params": { @@ -1865,7 +1865,7 @@ }, "width": 72, "x": 450.04, - "y": 287.032 + "y": 390.032 }, "propConfig": { "props.params.SP": { @@ -1900,7 +1900,7 @@ }, "width": 72, "x": 522.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -1941,7 +1941,7 @@ }, "width": 72, "x": 666.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -1982,7 +1982,7 @@ }, "width": 72, "x": 594.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2017,7 +2017,7 @@ }, "width": 72, "x": 810.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2059,7 +2059,7 @@ }, "width": 72, "x": 738.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2094,7 +2094,7 @@ }, "width": 72, "x": 954.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2135,7 +2135,7 @@ }, "width": 72, "x": 882.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2170,7 +2170,7 @@ }, "width": 72, "x": 1099.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2211,7 +2211,7 @@ }, "width": 72, "x": 1026.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2246,7 +2246,7 @@ }, "width": 72, "x": 1242.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2287,7 +2287,7 @@ }, "width": 72, "x": 1170.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2322,7 +2322,7 @@ }, "width": 72, "x": 1386.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2363,7 +2363,7 @@ }, "width": 72, "x": 1314.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2398,7 +2398,7 @@ }, "width": 72, "x": 1530.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2439,7 +2439,7 @@ }, "width": 72, "x": 1458.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2474,7 +2474,7 @@ }, "width": 72, "x": 1602.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2509,7 +2509,7 @@ }, "width": 72, "x": 1674.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2550,7 +2550,7 @@ }, "width": 72, "x": 1746.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2585,7 +2585,7 @@ }, "width": 72, "x": 1818.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -2626,7 +2626,7 @@ }, "width": 72, "x": 452.04, - "y": 696.932 + "y": 799.932 }, "propConfig": { "props.params.SP": { @@ -2661,7 +2661,7 @@ }, "width": 72, "x": 524.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2702,7 +2702,7 @@ }, "width": 72, "x": 668.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2743,7 +2743,7 @@ }, "width": 72, "x": 596.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2778,7 +2778,7 @@ }, "width": 72, "x": 812.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2819,7 +2819,7 @@ }, "width": 72, "x": 740.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2854,7 +2854,7 @@ }, "width": 72, "x": 956.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2895,7 +2895,7 @@ }, "width": 72, "x": 884.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2930,7 +2930,7 @@ }, "width": 72, "x": 1100.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -2971,7 +2971,7 @@ }, "width": 72, "x": 1028.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3006,7 +3006,7 @@ }, "width": 72, "x": 1244.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3047,7 +3047,7 @@ }, "width": 72, "x": 1172.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3082,7 +3082,7 @@ }, "width": 72, "x": 1388.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3123,7 +3123,7 @@ }, "width": 72, "x": 1316.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3158,7 +3158,7 @@ }, "width": 72, "x": 1532.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3199,7 +3199,7 @@ }, "width": 72, "x": 1460.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3234,7 +3234,7 @@ }, "width": 72, "x": 1676.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3275,7 +3275,7 @@ }, "width": 72, "x": 1604.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3310,7 +3310,7 @@ }, "width": 72, "x": 1748.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3345,7 +3345,7 @@ }, "width": 72, "x": 1820.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3386,7 +3386,7 @@ }, "width": 72, "x": 1890.01, - "y": 287 + "y": 390 }, "propConfig": { "props.params.SP": { @@ -3421,7 +3421,7 @@ }, "width": 72, "x": 1892.01, - "y": 696.9 + "y": 799.9 }, "propConfig": { "props.params.SP": { @@ -3445,27 +3445,6 @@ }, "type": "ia.display.view" }, - { - "meta": { - "name": "DH controls" - }, - "position": { - "height": 1000, - "width": 350, - "x": 2047.01, - "y": 23.8426 - }, - "props": { - "params": { - "dh": 201 - }, - "path": "Library/Cards/Card_DH_Control", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, { "meta": { "name": "Transmitter_105" @@ -3474,7 +3453,7 @@ "height": 37, "width": 77, "x": 414.49, - "y": 651.2 + "y": 754.2 }, "props": { "params": { @@ -3499,7 +3478,7 @@ "height": 172, "width": 145, "x": 160.97, - "y": 45.9924 + "y": 148.9924 }, "props": { "params": { @@ -3525,7 +3504,7 @@ }, "width": 165, "x": 889.71, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -3551,7 +3530,7 @@ }, "width": 165, "x": 1334.71, - "y": 1304.4 + "y": 1407.4 }, "props": { "params": { @@ -3574,7 +3553,7 @@ "height": 94, "width": 84, "x": 302.95, - "y": 333.908 + "y": 436.908 }, "props": { "params": { @@ -3600,7 +3579,7 @@ "height": 17, "width": 1521, "x": 434.92, - "y": 147.8 + "y": 250.8 }, "props": { "params": { @@ -3626,7 +3605,7 @@ "height": 17, "width": 1498, "x": 410.01, - "y": 1177 + "y": 1280 }, "props": { "params": { @@ -3660,7 +3639,7 @@ "height": 74, "width": 99, "x": 1134.01, - "y": 52 + "y": 155 }, "props": { "params": { @@ -3686,7 +3665,7 @@ }, "width": 99, "x": 1133.01, - "y": 1214 + "y": 1317 }, "props": { "params": { @@ -3709,7 +3688,7 @@ "height": 37, "width": 77, "x": 386.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3734,7 +3713,7 @@ "height": 37, "width": 77, "x": 385.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3759,7 +3738,7 @@ "height": 37, "width": 77, "x": 475.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3784,7 +3763,7 @@ "height": 37, "width": 77, "x": 475.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3809,7 +3788,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3834,7 +3813,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3859,7 +3838,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 88.1 + "y": 191.1 }, "props": { "params": { @@ -3884,7 +3863,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 51.1 + "y": 154.1 }, "props": { "params": { @@ -3909,7 +3888,7 @@ "height": 37, "width": 77, "x": 60.56, - "y": 600.0260004882813 + "y": 703.026 }, "props": { "params": { @@ -3934,7 +3913,7 @@ "height": 86, "width": 154, "x": 169.86, - "y": 379.045 + "y": 482.045 }, "props": { "params": { @@ -3954,7 +3933,7 @@ "height": 70, "width": 140, "x": 170.01, - "y": 325.145 + "y": 428.145 }, "props": { "params": { @@ -3974,7 +3953,7 @@ "height": 37, "width": 77, "x": 386.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -3999,7 +3978,7 @@ "height": 37, "width": 77, "x": 476.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -4024,7 +4003,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -4049,7 +4028,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 1253.09 + "y": 1356.09 }, "props": { "params": { @@ -4074,7 +4053,7 @@ "height": 37, "width": 77, "x": 385.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4099,7 +4078,7 @@ "height": 37, "width": 77, "x": 475.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4124,7 +4103,7 @@ "height": 37, "width": 77, "x": 1736.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4149,7 +4128,7 @@ "height": 37, "width": 77, "x": 1836.01, - "y": 1211.09 + "y": 1314.09 }, "props": { "params": { @@ -4174,7 +4153,7 @@ "height": 37, "width": 77, "x": 8.55948, - "y": 428.0780162353516 + "y": 531.078 }, "props": { "params": { @@ -4190,6 +4169,236 @@ } }, "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_19" + }, + "position": { + "height": 69, + "width": 121, + "x": 435.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU01" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_20" + }, + "position": { + "height": 69, + "width": 120, + "x": 586.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU03" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_21" + }, + "position": { + "height": 69, + "width": 120, + "x": 736.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU05" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_22" + }, + "position": { + "height": 69, + "width": 120, + "x": 886.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU07" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_23" + }, + "position": { + "height": 69, + "width": 120, + "x": 1036.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU09" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_24" + }, + "position": { + "height": 69, + "width": 120, + "x": 1186.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU11" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_25" + }, + "position": { + "height": 69, + "width": 120, + "x": 1336.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU13" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_26" + }, + "position": { + "height": 69, + "width": 120, + "x": 1486.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU15" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_27" + }, + "position": { + "height": 69, + "width": 120, + "x": 1636.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU17" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "STU_28" + }, + "position": { + "height": 69, + "width": 120, + "x": 1786.98, + "y": 19.3 + }, + "props": { + "params": { + "TagPosition": true, + "objectName": "STU", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU19" + }, + "path": "Library/Symbols/HVAC/Sym_STU", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/resource.json new file mode 100644 index 0000000..45724c8 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "c631bf8597ee5c4454dae83eb9d7b71ee2b638ab7632a34217b4fadd418a89fd", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T14:49:55Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/thumbnail.png new file mode 100644 index 0000000..6f9fe28 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/view.json new file mode 100644 index 0000000..44fc270 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201_old/view.json @@ -0,0 +1,126 @@ +{ + "custom": { + "target": "/DH201", + "zoom": 100 + }, + "params": { + "pageId": "value" + }, + "propConfig": { + "custom.target": { + "persistent": true + }, + "custom.zoom": { + "persistent": true + }, + "params.pageId": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1000, + "width": 1700 + } + }, + "root": { + "children": [ + { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "height": 984, + "width": 1400 + }, + "propConfig": { + "props.src": { + "binding": { + "config": { + "struct": { + "pageId": "{page.props.pageId}", + "target": "{view.custom.target}", + "zoom": "{view.custom.zoom}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\treturn \"http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d\" + value[\u0027target\u0027] + \"\u0026targetDetailedURL\u003d\" + value[\u0027target\u0027] + \"\u0026height\u003d175%25\u0026width\u003d175%25\u0026pageId\u003d\" + value[\u0027pageId\u0027]", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "allowFullScreen": true, + "style": { + "flex": "1 1 auto", + "minHeight": "100%", + "minWidth": "100%" + } + }, + "type": "ia.display.iframe" + } + ], + "meta": { + "name": "CoordinateContainer" + }, + "position": { + "basis": "820px", + "grow": 1 + }, + "props": { + "style": { + "overflow": "hidden" + } + }, + "type": "ia.container.coord" + }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "basis": "280px", + "shrink": 0 + }, + "props": { + "path": "Library/Cards/Card_DH_Control", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "eqPopup", + "pageScope": true, + "script": "\ttagPath \u003d payload.get(\u0027tagPath\u0027)\n\tobjectName \u003d payload.get(\u0027objectName\u0027)\n\t\n\tparams \u003d {\n\t\t\"tagPath\": tagPath,\n\t\t\"objectName\": objectName\n\t}\n\t\n\tsystem.perspective.openPopup(\n\t\tid \u003d \"Popup_\" + objectName.replace(\" \", \"_\"),\n\t\tview \u003d \"Library/Templates/Base\",\n\t\tparams \u003d params,\n\t\tshowCloseIcon \u003d True,\n\t\tresizable \u003d True,\n\t\tdraggable \u003d True,\n\t\tmodal \u003d False,\n\t\twidth \u003d 800,\n\t\theight \u003d 835\n\t)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.flex" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/resource.json new file mode 100644 index 0000000..5aed57e --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "29cce7822f22e2157d43ac27cdcbbe9347ffdee1cb94a2c5fa4d72ae0444e047", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-04-28T23:45:30Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/thumbnail.png new file mode 100644 index 0000000..881ee54 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/view.json new file mode 100644 index 0000000..737a158 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH201c/view.json @@ -0,0 +1,71 @@ +{ + "custom": {}, + "params": {}, + "props": { + "defaultSize": { + "height": 942, + "width": 1668 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "IFrame" + }, + "position": { + "height": 928, + "width": 1356 + }, + "propConfig": { + "props.src": { + "binding": { + "config": { + "struct": { + "pageId": "{page.props.pageId}" + }, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\treturn \"http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/DH201\u0026targetDetailedURL\u003d/DH201\u0026height\u003d175%25\u0026width\u003d175%25\u0026pageId\u003d\" + value[\u0027pageId\u0027]", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "allowFullScreen": true + }, + "type": "ia.display.iframe" + }, + { + "meta": { + "name": "EmbeddedView" + }, + "position": { + "height": 938, + "width": 320, + "x": 1330 + }, + "props": { + "path": "Library/Cards/Card_DH_Control", + "style": { + "classes": "containers/card" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": -90, + "y": -170 + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/resource.json index c304e35..c7e12b7 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "c3e4cc241dec753dca7478d7e4fcd782548690a378e7cfef74ddd985ddce8f9e", + "lastModificationSignature": "297724f0215021d6f5c9a0a624dab6e81dbbcde89774f51f04ae9974b4a98d2a", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T21:11:55Z" + "timestamp": "2026-04-28T23:52:56Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/thumbnail.png index 345949c..5cd6a19 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/view.json index 952b565..f275c31 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Datahall/DH202/view.json @@ -1,6 +1,6 @@ { "custom": { - "global": 75 + "global": null }, "params": { "pageId": "" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/resource.json index d018055..e13f469 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0793ce8810233032ad29416fb4e25dcdd1d0f41432c99443abccb9a33111ad4f", + "lastModificationSignature": "523e330b345b993c29e30e7ea9246fa762a73b10d4ff35e91d7cb1df34b8b614", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T14:22:05Z" + "timestamp": "2026-04-28T19:41:42Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/thumbnail.png index 846076c..9962b79 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Electrical/Oneline_DH201_P2/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/resource.json index 384dc68..5388abc 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "23c8f68d6c6414dd38602c99dbf1670850e20cb6530d4bc3c50b9c91afa94905", + "lastModificationSignature": "48302fed1fa291513e0e3eac6a2791a71c43fcc8e3ea2a387057155bbb00f770", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:36:03Z" + "timestamp": "2026-05-01T20:34:18Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/thumbnail.png index e6f9cd0..7164059 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/FireSystem/FireSystem/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/resource.json index 6fddc7e..6cd5901 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "8db8fa84349b94d61a44ec446afb6f7eb8d4c6daca9af12fe126ec5c6fb73851", + "lastModificationSignature": "514662e7d3c94256bd8af096f34d69a83c7e6d3d0cfd36f647e04f4e520a2211", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T14:51:29Z" + "timestamp": "2026-05-01T14:16:36Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/thumbnail.png index db8e34e..848115c 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/view.json index 7347b30..3215a90 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/CRAH/view.json @@ -167,639 +167,34 @@ }, "props": { "defaultSize": { - "width": 1300 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "path": "view.custom.CRAH_tagPaths[0]" - }, - "enabled": false, - "transforms": [ - { - "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "paddingBottom": 5, - "paddingLeft": 15, - "paddingRight": 15, - "paddingTop": 5 - }, - "text": "ER1242" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.CRAH_tagPaths" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"CRAH\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "direction": "row-reverse", - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "CRAH", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_01" - }, - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "CRAH", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_02" - } - ], - "path": "Library/Diagrams/HVAC/Dgrm_CRAH", - "style": { - "gap": 15, - "overflow": "visible" - } - }, - "type": "ia.display.flex-repeater" - } - ], "meta": { - "name": "Diagrams" + "name": "Label" }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "gap": 15, - "overflow": "visible" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "SecondFloor" - }, - "position": { - "basis": "20%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor" - }, - "position": { - "basis": "20%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\t\n" - }, - "scope": "G", + "propConfig": { + "props.text": { + "binding": { + "config": { + "path": "view.custom.CRAH_tagPaths[0]" + }, + "enabled": false, + "transforms": [ + { + "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", "type": "script" } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "65%" - }, - "propConfig": { - "custom.selectedPaths": { - "binding": { - "config": { - "struct": { - "key": "{view.custom.loading}", - "selectedRow": "{this.props.selection.selectedRow}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selectedRow\"]\n\tif selected is None:\n\t\tselected \u003d 0\n\ttagPath \u003d self.props.data[selected].tagPath\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/CRAH\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "data": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value[\u0027data\u0027]:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\t\n\t\tRAT \u003d system.tag.readBlocking(item + \"/Return Air Temperature\")[0].value\n\t\t#SAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\t#Room \u003d system.tag.readBlocking(item + \"/Meta/Room\")[0].value\n\t\tRoom \u003d item.split(\u0027/\u0027)[0].split(\u0027]\u0027)[1]\n\t\tName \u003d item.rsplit(\u0027_\u0027,2)\n\t\ttagPath \u003d item\n\t\toutput.append({ \"RAT\": RAT,\n\t\t\t\t\t\t#\"SAT\": SAT,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"Name\": Name[1] + Name[2],\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "RAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Return Air Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": false, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } ], - "filter": { - "enabled": true - }, - "pager": { - "activeOption": 14, - "options": [ - 5, - 10, - 14, - 50, - 100 - ] - } - }, - "type": "ia.display.table" + "type": "property" + } } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 }, "props": { - "direction": "column", - "justify": "space-around", "style": { "backgroundColor": "var(--container)", "borderBottomLeftRadius": "var(--borderRadius)", @@ -808,16 +203,72 @@ "borderTopRightRadius": "var(--borderRadius)", "boxShadow": "var(--boxShadow2)", "overflow": "visible", - "padding": 10 + "paddingBottom": 5, + "paddingLeft": 15, + "paddingRight": 15, + "paddingTop": 5 + }, + "text": "ER1242" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "FlexRepeater" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.CRAH_tagPaths" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"CRAH\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", + "type": "script" + } + ], + "type": "property" + } } }, - "type": "ia.container.flex" + "props": { + "direction": "row-reverse", + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "CRAH", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_01" + }, + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "CRAH", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1150/SATB1_M5_6_MPR1150_CRAH_02" + } + ], + "path": "Library/Diagrams/HVAC/Dgrm_CRAH", + "style": { + "gap": 15, + "overflow": "visible" + } + }, + "type": "ia.display.flex-repeater" } ], "meta": { "name": "root" }, "props": { + "direction": "column", "justify": "space-evenly", "style": { "backgroundColor": "var(--containerRoot)", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/resource.json index defab36..4c5ceca 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "13f9b2b8158ed1630ad3ae62be1f9dd52d34af622477a4241be9c895c54a2e3a", + "lastModificationSignature": "068b666dca945b0a3650bcac2691e8fe440bb7555718973be131b5386cd17c12", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:02:04Z" + "timestamp": "2026-05-01T14:07:48Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/thumbnail.png index 793420c..8a09c06 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/view.json index bc8e093..8e9fbd6 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/DOAS/view.json @@ -1,698 +1,45 @@ { - "custom": { - "DOAS_tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03", - "data": [ - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01", - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS02", - "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - ], - "selectedRoom": "SATB1_RF_DOAS03", - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, + "custom": {}, "params": {}, - "propConfig": { - "custom.DOAS_tagPath": { - "binding": { - "config": { - "path": "view.custom.selectedRoom" - }, - "transforms": [ - { - "code": "\treturn self.custom.tagPath +\"Roof/\"+ value", - "type": "script" - } - ], - "type": "property" - }, - "persistent": true - }, - "custom.data": { - "binding": { - "config": { - "struct": { - "tagPath": "{view.custom.tagPath}", - "time": "now(3000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\ttags \u003d system.tag.browse(value[\"tagPath\"],{\"typeId\":\"Objects/Air/DOAS\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\toutput.append(str(item[\"fullPath\"]))\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - }, - "persistent": true - }, - "custom.selectedRoom": { - "persistent": true - }, - "custom.tagPath": { - "persistent": true - } - }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "DOAS_Diagram" - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.custom.DOAS_tagPath" - }, - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": false, - "objectName": "DOAS" - }, - "path": "Library/Diagrams/HVAC/Dgrm_DOAS", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], "meta": { - "name": "Diagram" + "name": "EmbeddedView" }, "position": { - "basis": "70%", - "grow": 1 + "shrink": 0 }, "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center" - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Roof" - }, - "type": "ia.display.label" + "params": { + "detail_view": "Library/Diagrams/HVAC/Dgrm_DOAS", + "nav_view": "Library/Cards/Card_L3_Navigation", + "type": "DOAS" }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_Roof", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_2" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_1" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Tag}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "35%" - }, - "propConfig": { - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tRAT \u003d system.tag.readBlocking(item + \"/Return Air Temperature\")[0].value\n\t\tSAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\tName \u003d item.split(\u0027_\u0027)[5]\n\t\t#Tag \u003d system.tag.readBlocking(item + \"/Meta/Ignition Tag Name\")[0].value\n\t\tTag \u003d item.split(\u0027/\u0027)[1]\n\t\ttagPath \u003d item\n\t\toutput.append({\n\t\t\t\t\t\t\"RAT\": RAT,\n\t\t\t\t\t\t\"SAT\": SAT,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Tag\": Tag,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Supply Air Temperature" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Tag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Tag" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "AlarmSeverity": " ", - "Name": "DOAS01", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS01", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS01" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS02", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS02", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS02" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS03", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS03", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS04", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS04", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - }, - { - "AlarmSeverity": " ", - "Name": "DOAS05", - "RAT": null, - "SAT": null, - "Tag": "SATB1_RF_DOAS05", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_DOAS03" - } - ] - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-around", + "path": "Library/Diagrams/HVAC/Dgrm_DOAS", "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } + "overflow": "visible" + }, + "useDefaultViewHeight": true, + "useDefaultViewWidth": true }, - "type": "ia.container.flex" + "type": "ia.display.view" } ], "meta": { "name": "root" }, "props": { - "justify": "space-evenly", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible", - "padding": 15 - } - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "roomUpdate", - "pageScope": true, - "script": "\t# implement your handler here\n\tself.view.custom.selectedRoom \u003d payload[\"Room\"]", - "sessionScope": false, - "viewScope": false - } - ] + "alignContent": "center", + "alignItems": "center", + "direction": "column", + "justify": "center" }, "type": "ia.container.flex" } diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/resource.json index 353f801..a30bd3c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "d519111dad794ddddee78fd354a2ed6ef1e99e13a0f7f62050f14f01e663de84", + "lastModificationSignature": "18a9d40e187597df2cbd12d692ba839f6cb7dc1406bf3d5157f379818bfd0901", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-25T17:15:09Z" + "timestamp": "2026-05-01T14:07:53Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/thumbnail.png index 8da2b6d..49e84ad 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/view.json index 1914fb3..5643603 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/EF/view.json @@ -82,7 +82,8 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/resource.json index 72b3602..5599b5a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "5a81db77dd43e6e321e9140bbbc362f7e1aaf3d7955fc6e6e30b401ef95f5dba", + "lastModificationSignature": "26d4c2910aa3d69275131bb6d24a09acd3b3e9e7fb6f61185f5aa85ff39c4e9b", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:08:56Z" + "timestamp": "2026-05-01T14:07:59Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/thumbnail.png index c882d93..f3336d4 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/view.json index 5ecbd42..a0a60d1 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/FCU/view.json @@ -101,606 +101,69 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.FCU_tagPath" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"FCU\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "direction": "column", - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "FCU", - "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02" - }, - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "FCU", - "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03" - } - ], - "path": "Library/Diagrams/HVAC/Dgrm_FCU", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], "meta": { - "name": "Diagram" + "name": "FlexRepeater" }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--container)" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"updateRoom\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.FCU_tagPath" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"FCU\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", "type": "script" } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "55%" - }, - "propConfig": { - "custom.selectedData": { - "binding": { - "config": { - "path": "this.props.selection.selectedRow" - }, - "transforms": [ - { - "code": "\tif value is None:\n\t\tvalue \u003d 0\n\ttagPath \u003d self.props.data[value][\"tagPath\"]\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/FCU\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "property" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(3000)" - }, - "waitOnAll": false - }, - "overlayOptOut": true, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\t\n\tAlarmSeverity \u003d \"\"\n\tfor item in data:\n\t\t\n\t\t\"\"\"\n\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\t\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\t\"\"\"\n\t\tST \u003d system.tag.readBlocking(item + \"/Space Temperature\")[0].value\n\t\t#Name \u003d system.tag.readBlocking(item + \"/Meta/EqName\",1000)[0].value\n\t\t#Room \u003d system.tag.readBlocking(item + \"/Meta/Room\",1000)[0].value\n\t\tRoom \u003d item.split(\u0027/\u0027)[0].split(\u0027]\u0027)[1]\n\t\tName \u003d item.split(\u0027_\u0027)[6]\n\t\tpath \u003d item\n\t\toutput.append({ \"ST\": ST,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": path})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Name" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "flex grow" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "ST", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Space Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } ], - "filter": { - "enabled": true - } - }, - "type": "ia.display.table" + "type": "property" + } } - ], - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]" - }, - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 }, "props": { "direction": "column", - "justify": "space-evenly", + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "FCU", + "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU02" + }, + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "FCU", + "tagPath": "[Ignition_Common_IO_Gtwy]MDF1187/SATB1_HS2_MDF1187_FCU03" + } + ], + "path": "Library/Diagrams/HVAC/Dgrm_FCU", "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 - } + "overflow": "visible" + }, + "useDefaultViewWidth": false }, - "type": "ia.container.flex" + "type": "ia.display.flex-repeater" } ], "meta": { "name": "root" }, "props": { + "direction": "column", "justify": "space-evenly", "style": { "backgroundColor": "var(--containerRoot)", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/resource.json index f2af969..0eeda4c 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "47beb42121f112af94d9e2ce2103567f576829cca1690f51efa4cc64068ba528", + "lastModificationSignature": "a56f9deec4bd3f9969260023d08c09ab5aa12b700b1b9c293725c2b0d17f3b46", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T14:51:15Z" + "timestamp": "2026-05-01T14:08:07Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/thumbnail.png index 75a40e4..d45d0f7 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/view.json index dbabcfa..4488cd5 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/HUM/view.json @@ -64,704 +64,64 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.HUM_tagPath" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"HUM\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "direction": "column", - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "HUM", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" - }, - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "HUM", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" - } - ], - "path": "Library/Diagrams/HVAC/Dgrm_HUM", - "style": { - "gap": 100, - "overflow": "visible" - }, - "useDefaultViewHeight": false, - "useDefaultViewWidth": false - }, - "type": "ia.display.flex-repeater" - } - ], "meta": { - "name": "Diagram" + "name": "FlexRepeater" }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)" - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload) " - }, - "scope": "G", + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.HUM_tagPath" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"HUM\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", "type": "script" } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "55%" - }, - "propConfig": { - "custom.current_values": { - "binding": { - "config": { - "struct": { - "data": "{view.custom.data}", - "hb": "now(5000)" - }, - "waitOnAll": true - }, - "type": "expr-struct" - } - }, - "custom.selectedData": { - "binding": { - "config": { - "struct": { - "key": "{view.custom.loading}", - "selectedRow": "{this.props.selection.selectedRow}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selectedRow\"]\n\tif selected is None:\n\t\tselected \u003d 0\n\ttagPath \u003d self.props.data[selected].tagPath\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/HUM\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\t\n\t\tSP \u003d system.tag.readBlocking(item + \"/Config/Relative Humidity Setpoint\")[0].value\n\t\tpathname \u003d item.split(\u0027_\u0027)\n\t\t\n\t\tRoom \u003d pathname[-3]\n\t\tif Room \u003d\u003d \"GAL1261\" or Room \u003d\u003d \"GAL1262\":\n\t\t\tName \u003d \"DH1 \" + pathname[-2] + pathname[-1]\n\t\tif Room \u003d\u003d \"GAL1271\" or Room \u003d\u003d \"GAL1272\":\n\t\t\tName \u003d \"DH2 \" + pathname[-2] + pathname[-1] \n\t\tif Room \u003d\u003d \"GAL1171\" or Room \u003d\u003d \"GAL1172\":\n\t\t\tName \u003d \"DH3 \" + pathname[-2] + pathname[-1] \n\t\tif Room \u003d\u003d \"GAL1281\" or Room \u003d\u003d \"GAL1282\":\n\t\t\tName \u003d \"DH4 \" + pathname[-2] + pathname[-1] \n\t\tif Room \u003d\u003d \"GAL1181\" or Room \u003d\u003d \"GAL1182\":\n\t\t\tName \u003d \"DH5 \" + pathname[-2] + pathname[-1] \n\t\ttagPath \u003d item\n\t\toutput.append({ \"SP\": SP,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": tagPath})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SP", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Setpoint" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } ], - "data": [ - { - "AlarmSeverity": " ", - "Name": "DH3 HUM03", - "Room": "GAL1171", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH3 HUM01", - "Room": "GAL1172", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH3 HUM02", - "Room": "GAL1172", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_HUM_02" - }, - { - "AlarmSeverity": " ", - "Name": "DH1 HUM03", - "Room": "GAL1261", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH1 HUM01", - "Room": "GAL1262", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH1 HUM02", - "Room": "GAL1262", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" - }, - { - "AlarmSeverity": " ", - "Name": "DH2 HUM03", - "Room": "GAL1271", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH2 HUM01", - "Room": "GAL1272", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH2 HUM02", - "Room": "GAL1272", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_HUM_02" - }, - { - "AlarmSeverity": " ", - "Name": "DH4 HUM03", - "Room": "GAL1281", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_HUM_03" - }, - { - "AlarmSeverity": " ", - "Name": "DH4 HUM01", - "Room": "GAL1282", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_01" - }, - { - "AlarmSeverity": " ", - "Name": "DH4 HUM02", - "Room": "GAL1282", - "SP": 50, - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_HUM_02" - } - ], - "filter": { - "enabled": true - } - }, - "type": "ia.display.table" + "type": "property" + } } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 }, "props": { "direction": "column", - "justify": "space-evenly", + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "HUM", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_01" + }, + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "HUM", + "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_HUM_02" + } + ], + "path": "Library/Diagrams/HVAC/Dgrm_HUM", "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "paddingBottom": 10, - "paddingLeft": 10, - "paddingRight": 10, - "paddingTop": 10 - } + "gap": 100, + "overflow": "visible" + }, + "useDefaultViewHeight": false, + "useDefaultViewWidth": false }, - "type": "ia.container.flex" + "type": "ia.display.flex-repeater" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/resource.json index 5218af6..90ad237 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "8133d73df1ec62a8b4a1f5c01f7e1833b94899a62ac07bef7d876663a4c44c94", + "lastModificationSignature": "5b2ad6ff57f8592f96a34cd4ada06828299042ec79638eda8ad1c4bdedd764b9", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:09:02Z" + "timestamp": "2026-05-01T14:08:13Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/thumbnail.png index fd84872..2d771e3 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/view.json index 8db9ed7..284953a 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/RTU/view.json @@ -75,953 +75,65 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "RTU Diagram" - }, - "propConfig": { - "props.params.objectName": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "transforms": [ - { - "code": "\toutput \u003d value.split(\"_\")\n\treturn output[2]", - "type": "script" - } - ], - "type": "property" - } - }, - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.custom.RTU_tagPath" - }, - "type": "property" - } - }, - "props.path": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "enabled": false, - "transforms": [ - { - "code": "\tsplit \u003d value.split(\"_\")\n\treturn \"Pages/Dev/C_AirSystem/Diagrams/\" + split[2]", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": false - }, - "path": "Library/Diagrams/HVAC/Dgrm_RTU", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - } - ], "meta": { - "name": "Diagram" + "name": "RTU Diagram" }, - "position": { - "basis": "70%", - "grow": 1 - }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "overflow": "visible" - }, - "wrap": "wrap" - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Roof" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_Roof", - "style": { - "overflow": "visible" + "propConfig": { + "props.params.objectName": { + "binding": { + "config": { + "path": "view.custom.room" }, - "useDefaultViewHeight": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_2" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_1" - }, - "position": { - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Tag}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_03_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", + "transforms": [ + { + "code": "\toutput \u003d value.split(\"_\")\n\treturn output[2]", "type": "script" } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "grow": 1 - }, - "propConfig": { - "props.data": { - "binding": { - "config": { - "struct": { - "paths": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"paths\"]\n\tfor item in data:\n\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tRAD \u003d system.tag.readBlocking(item + \"/Return Air Damper\")[0].value\n\t\tSAT \u003d system.tag.readBlocking(item + \"/Supply Air Temperature\")[0].value\n\t\tName \u003d system.tag.readBlocking(item + \"/Meta/EqName\")[0].value\n\t\ttag \u003d system.tag.readBlocking(item + \"/Meta/Ignition Tag Name\")[0].value\n\t\toutput.append({ \"RAD\": str(RAD) + \u0027 %\u0027,\n\t\t\t\t\t\t\"SAT\": str(round(SAT,3)) + \u0027 F\u0027,\n\t\t\t\t\t\t\"Tag\": tag,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"Name\": Name})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Device" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "string", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 75 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Supply Air Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "RAD", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Return Air Damper Position" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Tag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - } ], - "data": [ - { - "AlarmSeverity": "Info", - "Name": "RTU_01", - "RAD": "48.0 %", - "SAT": "57.1 F", - "Tag": "SATB1_RF_RTU01" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_02", - "RAD": "68.0 %", - "SAT": "69.8 F", - "Tag": "SATB1_RF_RTU02" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_03", - "RAD": "68.0 %", - "SAT": "69.8 F", - "Tag": "SATB1_RF_RTU02" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_04", - "RAD": "66.0 %", - "SAT": "70.1 F", - "Tag": "SATB1_RF_RTU02" - }, - { - "AlarmSeverity": " ", - "Name": "RTU_05", - "RAD": "69.0 %", - "SAT": "68.8 F", - "Tag": "SATB1_RF_RTU02" - } - ], - "style": { - "overflow": "auto" - } - }, - "type": "ia.display.table" + "type": "property" + } }, - { - "children": [ - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tClosed \u003d True\n\tself.custom.RTU1_Emergency_Override \u003d Closed\n\tself.custom.RTU2_Emergency_Override \u003d Closed" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button" - }, - "position": { - "grow": 1 - }, - "propConfig": { - "custom.RTU1_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[0]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "custom.RTU2_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[1]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.control" - }, - "type": "property" - } - }, - "props.primary": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01/Control/Emergency Override" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "image": { - "style": { - "backgroundColor": "#D5D5D5", - "color": "#2B2B2B" - } - }, - "style": { - "borderColor": "#AAAAAA", - "borderStyle": "solid", - "borderWidth": 1, - "margin": 2 - }, - "text": "Close Outside Dampers", - "textStyle": { - "color": "#2B2B2B" - } - }, - "type": "ia.input.button" + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.custom.RTU_tagPath" }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\tAuto \u003d False\n\tself.custom.RTU1_Emergency_Override \u003d Auto\n\tself.custom.RTU2_Emergency_Override \u003d Auto\n\t" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button_0" - }, - "position": { - "grow": 1 - }, - "propConfig": { - "custom.RTU1_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[0]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "custom.RTU2_Emergency_Override": { - "binding": { - "config": { - "bidirectional": true, - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "0": "{view.custom.data[1]}" - }, - "tagPath": "{0}/Control/Emergency Override" - }, - "type": "tag" - } - }, - "props.enabled": { - "binding": { - "config": { - "path": "view.custom.auth.control" - }, - "type": "property" - } - }, - "props.primary": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]Roof/SATB1_RF_RTU01/Control/Emergency Override" - }, - "enabled": false, - "transforms": [ - { - "fallback": false, - "inputType": "scalar", - "mappings": [ - { - "input": false, - "output": true - }, - { - "input": true, - "output": false - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "tag" - } - } - }, - "props": { - "image": { - "style": { - "backgroundColor": "#D5D5D5", - "color": "#2B2B2B" - } - }, - "style": { - "borderColor": "#AAAAAA", - "borderStyle": "solid", - "borderWidth": 1, - "margin": 2 - }, - "text": "Set Dampers In Auto", - "textStyle": { - "color": "#2B2B2B" - } - }, - "type": "ia.input.button" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "50px", - "grow": 1 - }, - "props": { - "style": { - "gap": "var(--space-sm)", - "margin": 5, - "overflow": "visible" - } - }, - "type": "ia.container.flex" + "type": "property" + } + }, + "props.path": { + "binding": { + "config": { + "path": "view.custom.room" + }, + "enabled": false, + "transforms": [ + { + "code": "\tsplit \u003d value.split(\"_\")\n\treturn \"Pages/Dev/C_AirSystem/Diagrams/\" + split[2]", + "type": "script" + } + ], + "type": "property" + } } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 }, "props": { - "direction": "column", + "params": { + "embedded": false + }, + "path": "Library/Diagrams/HVAC/Dgrm_RTU", "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 10 + "overflow": "visible" } }, - "type": "ia.container.flex" + "type": "ia.display.view" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/resource.json index 5bbcccc..ee55bbd 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "0c84fc48b4926ce0f265b1f270e9a2c69ccb808fe53b54f26f0c2816d509dabd", + "lastModificationSignature": "3973c8fe9d561f60f253540fa079d337972e088d0bb0f7b8ef65c98f9c512e89", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:34:05Z" + "timestamp": "2026-05-01T14:08:19Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/thumbnail.png index 2559ae7..800ae2b 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/view.json index c2aa176..e477b13 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/SP/view.json @@ -71,7 +71,8 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/resource.json index 2147264..f90ab46 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "63e0d661dbf2a2303ba1b2972c789ee7c9eb65082a45e0b27d3397582d82fc94", + "lastModificationSignature": "93ee1fa13f8fe9673603e7068d6f51b00715e547ac1c73d7617551c45941ed31", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:06:39Z" + "timestamp": "2026-05-01T14:08:28Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/thumbnail.png index 0f82a1b..18fce82 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/view.json index 085b7a0..8538409 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/STU/view.json @@ -152,1359 +152,32 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "STU diagram" - }, - "propConfig": { - "props.params.tagPath": { - "binding": { - "config": { - "path": "view.custom.STU_tagPath" - }, - "type": "property" - } - } - }, - "props": { - "params": { - "embedded": false, - "objectName": "STU" - }, - "path": "Library/Diagrams/HVAC/Dgrm_STU", - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "padding": 5 - } - }, - "type": "ia.display.view" - } - ], "meta": { - "name": "FlexContainer" + "name": "STU diagram" }, - "position": { - "basis": "70%", - "grow": 1 + "propConfig": { + "props.params.tagPath": { + "binding": { + "config": { + "path": "view.custom.STU_tagPath" + }, + "type": "property" + } + } }, "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "padding": 10 - } - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "props": { - "text": "Second Floor" - }, - "type": "ia.display.label" + "params": { + "embedded": false, + "objectName": "STU" }, - { - "meta": { - "name": "FirstFloor Percent" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_SecondFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "15%", - "grow": 1 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" - }, - "useDefaultViewHeight": true, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].Room}\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_02_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tpayload \u003d {\t\"Tag\":self.props.selection.data[0].tagPath}\n\tmessageType \u003d \"equipmentUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "50%" - }, - "propConfig": { - "props.data": { - "binding": { - "config": { - "struct": { - "data": "{view.custom.data}", - "time": "now(5000)" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tdata \u003d value[\"data\"]\n\tfor item in data:\n\t\ttry:\n\t\t\tAlmS \u003d alarm.summary.calcMaxPriority(item)\n\t\texcept:\n\t\t\tAlmS \u003d -1\n\t\tif(AlmS \u003d\u003d 1):\n\t\t\tAlarmSeverity \u003d \"Controller\"\n\t\telif(AlmS \u003d\u003d 2):\n\t\t\tAlarmSeverity \u003d \"Info\"\n\t\telif(AlmS \u003d\u003d 3):\n\t\t\tAlarmSeverity \u003d \"Warning\"\n\t\telif(AlmS \u003d\u003d 4):\n\t\t\tAlarmSeverity \u003d \"Critical\"\n\t\telse:\n\t\t\tAlarmSeverity \u003d \" \"\n\t\tinstance \u003d system.tag.readBlocking(item)[0].value\n\t\tRAT \u003d instance[\"Return Air Temperature\"]\n\t\tName \u003d instance[\"Meta\"][\"EqName\"]\n\t\tRoom \u003d instance[\"Meta\"][\"Room\"]\n\t\toutput.append({\"RAT\":RAT ,\n\t\t\t\t\t\t\"Name\": Name,\n\t\t\t\t\t\t\"Room\": Room,\n\t\t\t\t\t\t\"AlarmSeverity\": AlarmSeverity,\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.filter.text": { - "binding": { - "config": { - "path": "view.custom.room" - }, - "type": "property" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "RAT", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Return Air Temperature" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "AlarmSeverity", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm Severity" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "AlarmSeverity": " ", - "Name": " DH3 STU01", - "RAT": 75.5999984741211, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU03", - "RAT": 75.4000015258789, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU05", - "RAT": 76.5, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU07", - "RAT": 76.69999694824219, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU09", - "RAT": 77.19999694824219, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU11", - "RAT": 76, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU13", - "RAT": 75.4000015258789, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU15", - "RAT": 75.5, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU17", - "RAT": 76.5999984741211, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU19", - "RAT": 77.30000305175781, - "Room": "GAL1171", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1171/SATB1_GAL1171_DH3_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU02", - "RAT": 76.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU04", - "RAT": 76.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU06", - "RAT": 76.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU08", - "RAT": 75.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU10", - "RAT": 75.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU12", - "RAT": 75.19999694824219, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU14", - "RAT": 75.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU16", - "RAT": 75.4000015258789, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU18", - "RAT": 75.5, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH3 STU20", - "RAT": 75.69999694824219, - "Room": "GAL1172", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1172/SATB1_GAL1172_DH3_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU01", - "RAT": 73.9000015258789, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU03", - "RAT": 74.80000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU05", - "RAT": 75.19999694824219, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU07", - "RAT": 75.4000015258789, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU09", - "RAT": 75.19999694824219, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU11", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU13", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU15", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU17", - "RAT": 75.30000305175781, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU19", - "RAT": 75.19999694824219, - "Room": "GAL1181", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1181/SATB1_GAL1181_DH5_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU02", - "RAT": 75, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU04", - "RAT": 75, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU06", - "RAT": 75, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU08", - "RAT": 75.0999984741211, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU10", - "RAT": 75.0999984741211, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU12", - "RAT": 75.19999694824219, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU14", - "RAT": 75.30000305175781, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU16", - "RAT": 75.19999694824219, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU18", - "RAT": 75.30000305175781, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH5 STU20", - "RAT": 75.19999694824219, - "Room": "GAL1182", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1182/SATB1_GAL1182_DH5_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU01", - "RAT": 89.69999694824219, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU03", - "RAT": 85.4000015258789, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU05", - "RAT": 82.5999984741211, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU07", - "RAT": 82.69999694824219, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU09", - "RAT": 82.0999984741211, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU11", - "RAT": 82, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU13", - "RAT": 83.5, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU15", - "RAT": 81.80000305175781, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU17", - "RAT": 82.4000015258789, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU19", - "RAT": 81.0999984741211, - "Room": "GAL1261", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1261/SATB1_GAL1261_DH1_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU02", - "RAT": 85, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU04", - "RAT": 81.30000305175781, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU06", - "RAT": 82, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU08", - "RAT": 81.80000305175781, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU10", - "RAT": 82.0999984741211, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU12", - "RAT": 81.19999694824219, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU14", - "RAT": 82.0999984741211, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU16", - "RAT": 81.0999984741211, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU18", - "RAT": 80.19999694824219, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH1 STU20", - "RAT": 82.80000305175781, - "Room": "GAL1262", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1262/SATB1_GAL1262_DH1_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU01", - "RAT": 81.0999984741211, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU03", - "RAT": 82.9000015258789, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU05", - "RAT": 82.80000305175781, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU07", - "RAT": 82.5999984741211, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU09", - "RAT": 82.69999694824219, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU11", - "RAT": 82.4000015258789, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU13", - "RAT": 83.5, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU15", - "RAT": 82.5, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU17", - "RAT": 82.69999694824219, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU19", - "RAT": 82.5999984741211, - "Room": "GAL1271", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1271/SATB1_GAL1271_DH2_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU02", - "RAT": 81.19999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU04", - "RAT": 81.9000015258789, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU06", - "RAT": 81.69999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU08", - "RAT": 81.5, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU10", - "RAT": 81, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU12", - "RAT": 80.5999984741211, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU14", - "RAT": 81.19999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU16", - "RAT": 80.5, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU18", - "RAT": 80.69999694824219, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH2 STU20", - "RAT": 83, - "Room": "GAL1272", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1272/SATB1_GAL1272_DH2_STU20" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU01", - "RAT": 75.5, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU01" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU03", - "RAT": 75.9000015258789, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU03" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU05", - "RAT": 76.0999984741211, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU05" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU07", - "RAT": 76, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU07" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU09", - "RAT": 77.30000305175781, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU09" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU11", - "RAT": 76.5, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU11" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU13", - "RAT": 76.4000015258789, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU13" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU15", - "RAT": 76.5999984741211, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU15" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU17", - "RAT": 76.5999984741211, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU17" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU19", - "RAT": 76.5, - "Room": "GAL1281", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1281/SATB1_GAL1281_DH4_STU19" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU02", - "RAT": 75.19999694824219, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU02" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU04", - "RAT": 75.0999984741211, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU04" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU06", - "RAT": 75.0999984741211, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU06" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU08", - "RAT": 75.19999694824219, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU08" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU10", - "RAT": 75.30000305175781, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU10" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU12", - "RAT": 75.19999694824219, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU12" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU14", - "RAT": 75.4000015258789, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU14" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU16", - "RAT": 75.30000305175781, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU16" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU18", - "RAT": 75.30000305175781, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU18" - }, - { - "AlarmSeverity": " ", - "Name": " DH4 STU20", - "RAT": 75, - "Room": "GAL1282", - "tagPath": "[Ignition_Common_IO_Gtwy]GAL1282/SATB1_GAL1282_DH4_STU20" - } - ], - "filter": { - "enabled": true - } - }, - "type": "ia.display.table" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "450px", - "grow": 1 - }, - "props": { - "direction": "column", - "justify": "space-around", + "path": "Library/Diagrams/HVAC/Dgrm_STU", "style": { "backgroundColor": "var(--container)", "borderBottomLeftRadius": "var(--borderRadius)", @@ -1513,10 +186,10 @@ "borderTopRightRadius": "var(--borderRadius)", "boxShadow": "var(--boxShadow2)", "overflow": "visible", - "padding": 10 + "padding": 5 } }, - "type": "ia.container.flex" + "type": "ia.display.view" } ], "meta": { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/resource.json index 5bf29d4..2697d85 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "d688b07e28ddf103466e00b550d034d68fd3938d0a12e09c22a46b56b2b6da13", + "lastModificationSignature": "ff0e6937093597a4032064c76ed009d074e506cadc42acb942cec06d188bea7f", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-22T15:08:10Z" + "timestamp": "2026-05-01T14:09:28Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/thumbnail.png index 7c909e4..614fdcd 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/view.json index 42456c0..4288a51 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/HVAC/VAV/view.json @@ -92,748 +92,36 @@ }, "props": { "defaultSize": { - "width": 1200 + "height": 1000, + "width": 1276 } }, "root": { "children": [ { - "children": [ - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "32px" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "path": "view.custom.VAV_tagPaths[0]" - }, - "transforms": [ - { - "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": "var(--borderRadius)", - "borderBottomRightRadius": "var(--borderRadius)", - "borderTopLeftRadius": "var(--borderRadius)", - "borderTopRightRadius": "var(--borderRadius)", - "boxShadow": "var(--boxShadow2)", - "overflow": "visible", - "paddingBottom": 5, - "paddingLeft": 15, - "paddingRight": 15, - "paddingTop": 5 - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FlexRepeater" - }, - "propConfig": { - "props.instances": { - "binding": { - "config": { - "path": "view.custom.VAV_tagPaths" - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"VAV v2\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", - "type": "script" - } - ], - "type": "property" - } - } - }, - "props": { - "instances": [ - { - "embedded": false, - "instancePosition": {}, - "instanceStyle": { - "classes": "" - }, - "objectName": "VAV v2", - "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" - } - ], - "justify": "center", - "path": "Library/Diagrams/HVAC/Dgrm_VAV", - "style": { - "backgroundColor": "var(--containerRoot)", - "gap": 50, - "overflow": "visible" - }, - "wrap": "wrap" - }, - "type": "ia.display.flex-repeater" - }, - { - "events": { - "dom": { - "onClick": { - "config": { - "script": "\ttagPath \u003d self.view.custom.tagPath_VAVmaster\n\tobjectName \u003d \"VAVMaster\"\n\tpayload\u003d{\n\t\t\u0027objectName\u0027: objectName,\n\t\t\u0027tagPath\u0027: tagPath,\n\t\t\u0027modal\u0027: False,\n\t\t\u0027resizable\u0027: True,\n\t\t\u0027draggable\u0027: True,\n\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t}\n\t}\n\tutils.nav.eqPopupMsg(self, payload)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "Button" - }, - "position": { - "basis": "34px" - }, - "props": { - "primary": false, - "text": "VAV Global parameters" - }, - "type": "ia.input.button" - } - ], "meta": { - "name": "Diagram" + "name": "Label" }, "position": { - "basis": "70%", - "grow": 1 + "basis": "32px" }, - "props": { - "alignContent": "center", - "alignItems": "center", - "direction": "column", - "justify": "center", - "style": { - "backgroundColor": "var(--containerRoot)", - "gap": 20 - }, - "wrap": "wrap" - }, - "type": "ia.container.flex" - }, - { - "children": [ - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "First Floor" - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "FirstFloor Percent_0" - }, - "position": { - "basis": "30%", - "grow": 1, - "shrink": 0 - }, - "props": { - "path": "Library/Widgets/Layouts/RTU_FirstFloor", - "style": { - "overflow": "visible" + "propConfig": { + "props.text": { + "binding": { + "config": { + "path": "view.custom.VAV_tagPaths[0]" }, - "useDefaultViewHeight": true - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Label_1" - }, - "props": { - "text": "List of devices" - }, - "type": "ia.display.label" - }, - { - "events": { - "component": { - "onRowClick": { - "config": { - "script": "\tpayload \u003d {\"Room\":self.props.selection.data[0].room}\n\tmessageType \u003d \"roomUpdate\"\n\tsystem.perspective.sendMessage(messageType, payload)\n\tmessageType \u003d \"layout_01_Update\"\n\tsystem.perspective.sendMessage(messageType, payload)" - }, - "scope": "G", + "transforms": [ + { + "code": "\timport re\n\ttag_path \u003d value\n\tpattern \u003d r\"]([^/]+)\" # Matches any characters between \u0027]\u0027 and \u0027/\u0027\n\tmatch \u003d re.search(pattern, tag_path)\n\tif match:\n\t\textracted_value \u003d match.group(1)\n\treturn extracted_value", "type": "script" } - } - }, - "meta": { - "name": "Table" - }, - "position": { - "basis": "66%", - "grow": 1, - "shrink": 0 - }, - "propConfig": { - "custom.data": { - "binding": { - "config": { - "struct": { - "p": "{view.custom.data}", - "t": "now(3000)" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tpaths \u003d value[\u0027p\u0027]\n\tsubPaths \u003d [\n\t\t\"/Space Temperature\",\n\t\t\"/Damper Position\"\n\t]\n\tsize \u003d len(subPaths)\n\ttags \u003d []\n\tfor path in paths:\n\t\tfor sub in subPaths:\n\t\t\ttags.append(path+sub)\n\tdata \u003d system.tag.readBlocking(tags)\n\toutput \u003d []\n\tfor vav in paths:\n\t\telement \u003d {}\n\t\trawTag \u003d vav.split(\u0027_\u0027)\n\t\tname \u003d rawTag[-1]\n\t\troom \u003d rawTag[-2]\n\t\t#almS \u003d alarm.summary.calcMaxPriority(vav)\n\t\talmS \u003d 0\n\t\tif almS \u003c\u003d0: alm_lbl \u003d \u0027\u0027\n\t\telif almS \u003d\u003d1: alm_lbl \u003d \u0027Info\u0027\n\t\telif almS \u003d\u003d2: alm_lbl \u003d \u0027Warning\u0027\n\t\telif almS \u003d\u003d3: alm_lbl \u003d \u0027High\u0027\n\t\telif almS \u003d\u003d4: alm_lbl \u003d \u0027Critical\u0027\n\t\telse: alm_lbl \u003d \u0027error\u0027\n\t\t\n\t\tpos \u003d paths.index(vav)\n\t\tidx1 \u003d pos * size\n\t\tidx2 \u003d (pos * size) +1\n\t\telement[\u0027name\u0027] \u003d name\n\t\telement[\u0027room\u0027] \u003d room\n\t\telement[\u0027alarm\u0027] \u003d alm_lbl\n\t\telement[\u0027SpaceTemp\u0027] \u003d data[idx1].value\n\t\telement[\u0027DamperPos\u0027] \u003d data[idx2].value\n\t\t\n\t\toutput.append(element)\n\treturn output", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "custom.selectedData": { - "binding": { - "config": { - "struct": { - "key": "{view.custom.loading}", - "selectedRow": "{this.props.selection.selectedRow}" - }, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\tselected \u003d value[\"selectedRow\"]\n\tif selected is None:\n\t\tselected \u003d 0\n\ttagPath \u003d self.props.data[selected].tagPath\n\ttagPath \u003d tagPath.split(\"/\")\n\ttags \u003d system.tag.browse(tagPath[0],{\"typeId\":\"Objects/Air/VAV v2\", \"recursive\":True ,\"tagType\":\"UdtInstance\"})\n\treturn tags", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.data": { - "binding": { - "config": { - "path": "this.custom.data" - }, - "type": "property" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "name", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Name" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 70 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "room", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Room" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 90 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "SpaceTemp", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Space Temp" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 70 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "DamperPos", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Damper Pos" - }, - "justify": "left", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": false, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 80 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "alarm", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Alarm" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } ], - "dragOrderable": false, - "filter": { - "enabled": true - }, - "headerGroups": [ - [] - ], - "pager": { - "activeOption": 14, - "options": [ - 5, - 10, - 14, - 50, - 100 - ] - }, - "rows": { - "striped": { - "color": { - "even": "#C0C0C0" - } - } - }, - "virtualized": false - }, - "type": "ia.display.table" + "type": "property" + } } - ], - "meta": { - "name": "Location" - }, - "position": { - "basis": "450px", - "grow": 1 }, "props": { - "direction": "column", - "justify": "space-around", "style": { "backgroundColor": "var(--container)", "borderBottomLeftRadius": "var(--borderRadius)", @@ -842,16 +130,88 @@ "borderTopRightRadius": "var(--borderRadius)", "boxShadow": "var(--boxShadow2)", "overflow": "visible", - "padding": 10 + "paddingBottom": 5, + "paddingLeft": 15, + "paddingRight": 15, + "paddingTop": 5 } }, - "type": "ia.container.flex" + "type": "ia.display.label" + }, + { + "meta": { + "name": "FlexRepeater" + }, + "propConfig": { + "props.instances": { + "binding": { + "config": { + "path": "view.custom.VAV_tagPaths" + }, + "enabled": false, + "transforms": [ + { + "code": "\toutput \u003d []\n\tfor item in value:\n\t\toutput.append({\"instanceStyle\":{\"classes\": \"\"},\n\t\t\t\t\t\t\"instancePosition\":{},\n\t\t\t\t\t\t\"embedded\": False,\n\t\t\t\t\t\t\"objectName\": \"VAV v2\",\n\t\t\t\t\t\t\"tagPath\": item})\n\treturn output", + "type": "script" + } + ], + "type": "property" + } + } + }, + "props": { + "instances": [ + { + "embedded": false, + "instancePosition": {}, + "instanceStyle": { + "classes": "" + }, + "objectName": "VAV v2", + "tagPath": "[Ignition_Common_IO_Gtwy]RM1109/SATB1_HS1_RM1109_VAV06" + } + ], + "justify": "center", + "path": "Library/Diagrams/HVAC/Dgrm_VAV", + "style": { + "backgroundColor": "var(--containerRoot)", + "gap": 50, + "overflow": "visible" + }, + "wrap": "wrap" + }, + "type": "ia.display.flex-repeater" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\ttagPath \u003d self.view.custom.tagPath_VAVmaster\n\tobjectName \u003d \"VAVMaster\"\n\tpayload\u003d{\n\t\t\u0027objectName\u0027: objectName,\n\t\t\u0027tagPath\u0027: tagPath,\n\t\t\u0027modal\u0027: False,\n\t\t\u0027resizable\u0027: True,\n\t\t\u0027draggable\u0027: True,\n\t\t\u0027position\u0027: {\n\t#\t\t\t\u0027left\u0027:\u00270\u0027,\n\t#\t\t\t\u0027top\u0027:\u00270\u0027,\n\t\t\u0027width\u0027: \u00271000px\u0027,\n\t\t\u0027height\u0027: \u0027800px\u0027\n\t\t}\n\t}\n\tutils.nav.eqPopupMsg(self, payload)" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "Button" + }, + "position": { + "basis": "34px" + }, + "props": { + "primary": false, + "text": "VAV Global parameters" + }, + "type": "ia.input.button" } ], "meta": { "name": "root" }, "props": { + "direction": "column", "justify": "space-evenly", "style": { "backgroundColor": "var(--containerRoot)", diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/resource.json index 684846b..e1ef4e9 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "853d9ef09fe3379ca87a6cd84397e7e22201575cd0757cf45f150bdeed928116", + "lastModificationSignature": "a1282cfe2a216b3ca95b51cec168087e0839ea890e7e6c329f767188e367174e", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-24T16:02:16Z" + "timestamp": "2026-05-02T02:06:16Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/thumbnail.png index 38d1913..399fb2a 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/view.json index 9390938..8ab3f96 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System/view.json @@ -1,6217 +1,90 @@ { "custom": {}, - "params": { - "pageId": "" - }, - "propConfig": { - "params.pageId": { - "paramDirection": "input", - "persistent": true - } - }, + "params": {}, "props": { "defaultSize": { - "height": 1425, - "width": 2962 + "height": 1000, + "width": 1700 } }, "root": { "children": [ - { - "meta": { - "name": "FlowDiagram" - }, - "position": { - "height": 1040, - "width": 2011, - "x": 87.88, - "y": 15.059999999999999 - }, - "props": { - "elements": [ - { - "d": "M1098.98,0.442l0,102.447l-1096.65,0l0,-102.447l1096.65,-0Zm0,164.608l0,167.653l-1096.65,-0l0,-167.653m0,-3.735l0,-16.744l1096.65,-0l0,16.71m-1096.65,-49.616l0,-8.776m370.552,8.776l-0,-8.776m363.051,8.776l-0,-8.776m363.051,8.776l0,-8.776m-1081.65,58.392l0,-16.756m0,246.597l0,-16.756m370.552,-213.085l-0,-16.756m-223.582,0l-0,37.5l21,0m-5.97,192.341l0,37.5l21,0m327.777,-267.341l0,37.5l21,0m-6.798,192.341l0,37.5l21,0m327.021,-267.341l0,37.5l21,0m-538.448,-20.744l-0,-16.756m363.051,16.756l-0,-16.71m-363.051,20.479l-0,167.653m363.051,-167.653l-0,167.653m15,-171.422l-0,-16.71m-363.051,171.668l-0,16.464m363.051,-16.112l-0,16.112m-733.603,-16.327l0,16.327m0,213.468l0,16.327m146.97,-229.795l-0,-26.25l21,-0m-5.97,256.045l0,-26.25l21,0m327.777,-203.545l0,-26.25l21,-0m-6.798,256.045l0,-26.25l21,0m327.021,-203.545l0,-26.25l21,-0m-894,67.913l733.603,0l-0,16.756m-733.603,171.376l733.603,0l-0,-16.112m-363.051,-155.264l-0,-16.756m-0,172.02l-0,16.112", - "fill": { - "paint": "transparent" - }, - "id": "Supply", - "name": "Supply", - "stroke": { - "paint": "#0005ff", - "width": "0.88px" - }, - "type": "path" - }, - { - "d": "M1091.48,7.942l0,87.447l-1081.65,0l0,-87.447l1081.65,-0Zm-1081.65,103.723l0,-16.276m355.552,16.276l-0,-16.276m363.051,16.276l-0,-16.276m363.051,16.276l0,-16.276m-726.102,69.661l-0,160.153m363.051,-160.153l-0,160.153m-363.051,-163.922l-0,-9.21m363.051,9.21l-0,-9.21m363.051,12.979l0,160.153l-1081.65,-0l0,-160.153m0,-3.723l0,-9.256l1081.65,-0l0,9.21m-1066.65,0l0,-9.21m0,239.051l0,-9.21m355.552,-220.631l-0,-9.256m-190.582,30l21,0l-0,-30m-5.97,259.841l21,0l0,-30m327.777,-199.841l21,0l0,-30m-6.798,259.841l21,0l0,-30m327.021,-199.841l21,0l0,-30m-193.397,9.256l-0,-9.21m-363.051,164.168l-0,8.964m363.051,-8.827l-0,8.827m-718.603,-8.612l0,8.612m0,221.183l0,8.612m164.97,-248.545l21,-0l-0,18.763m-5.97,211.032l21,0l0,18.75m327.777,-248.545l21,-0l0,18.763m-6.798,211.032l21,0l0,18.75m327.021,-248.545l21,-0l0,18.763m-193.397,65.906l-0,-9.256l-718.603,0m718.603,164.52l-0,8.612l-718.603,0m355.552,-163.876l-0,-9.256m-0,164.52l-0,8.612", - "fill": { - "paint": "transparent" - }, - "id": "Return", - "name": "Return", - "stroke": { - "paint": "#f00", - "width": "0.88px" - }, - "type": "path" - }, - { - "d": "M9.826,161.281c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm-1081.65,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm0,229.841c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-741.103,-279.457c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm370.552,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm-718.602,49.616c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-726.103,151.326c1.04,-0 1.885,0.844 1.885,1.884c-0,1.04 -0.845,1.885 -1.885,1.885c-1.04,-0 -1.884,-0.845 -1.884,-1.885c-0,-1.04 0.844,-1.884 1.884,-1.884Zm0,229.795c1.04,-0 1.885,0.844 1.885,1.884c-0,1.041 -0.845,1.885 -1.885,1.885c-1.04,-0 -1.884,-0.844 -1.884,-1.885c-0,-1.04 0.844,-1.884 1.884,-1.884Zm363.052,-0c1.04,-0 1.884,0.844 1.884,1.884c0,1.041 -0.844,1.885 -1.884,1.885c-1.041,-0 -1.885,-0.844 -1.885,-1.885c0,-1.04 0.844,-1.884 1.885,-1.884Zm363.051,-0c1.04,-0 1.884,0.844 1.884,1.884c0,1.041 -0.844,1.885 -1.884,1.885c-1.04,-0 -1.885,-0.844 -1.885,-1.885c0,-1.04 0.845,-1.884 1.885,-1.884Zm-363.051,-229.795c1.04,-0 1.884,0.844 1.884,1.884c0,1.04 -0.844,1.885 -1.884,1.885c-1.041,-0 -1.885,-0.845 -1.885,-1.885c0,-1.04 0.844,-1.884 1.885,-1.884Zm363.051,-0c1.04,-0 1.884,0.844 1.884,1.884c0,1.04 -0.844,1.885 -1.884,1.885c-1.04,-0 -1.885,-0.845 -1.885,-1.885c0,-1.04 0.845,-1.884 1.885,-1.884Zm-718.603,-151.326c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm0,229.841c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-741.103,-279.457c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm355.552,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm-703.602,49.616c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-726.103,151.326c1.04,-0 1.885,0.892 1.885,1.992c-0,1.099 -0.845,1.992 -1.885,1.992c-1.04,-0 -1.884,-0.893 -1.884,-1.992c-0,-1.1 0.844,-1.992 1.884,-1.992Zm0,229.795c1.04,-0 1.885,0.893 1.885,1.992c-0,1.099 -0.845,1.992 -1.885,1.992c-1.04,-0 -1.884,-0.893 -1.884,-1.992c-0,-1.099 0.844,-1.992 1.884,-1.992Zm363.052,-0c1.04,-0 1.884,0.893 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.041,-0 -1.885,-0.893 -1.885,-1.992c0,-1.099 0.844,-1.992 1.885,-1.992Zm363.051,-0c1.04,-0 1.884,0.893 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.04,-0 -1.885,-0.893 -1.885,-1.992c0,-1.099 0.845,-1.992 1.885,-1.992Zm-363.051,-229.795c1.04,-0 1.884,0.892 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.041,-0 -1.885,-0.893 -1.885,-1.992c0,-1.1 0.844,-1.992 1.885,-1.992Zm363.051,-0c1.04,-0 1.884,0.892 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.04,-0 -1.885,-0.893 -1.885,-1.992c0,-1.1 0.845,-1.992 1.885,-1.992Zm-748.603,-151.326c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Z", - "fill": { - "paint": "transparent" - }, - "id": "Connector", - "name": "Connector", - "stroke": { - "paint": "#000", - "width": "0.88px" - }, - "type": "path" - } - ], - "fill": { - "rule": "evenodd" - }, - "stroke": { - "linecap": "round", - "linejoin": "round", - "miterlimit": "1.5" - }, - "style": { - "clipRule": "evenodd" - }, - "viewBox": "0 0 1102 563" - }, - "type": "ia.shapes.svg" - }, - { - "meta": { - "name": "Valve_A" - }, - "position": { - "height": 78, - "width": 100, - "x": 418.4, - "y": 949 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_DH1180_FCV73" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_0" - }, - "position": { - "height": 78, - "width": 100, - "x": 1076.4, - "y": 949 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH1/SATB1_DH1260_FCV69" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_1" - }, - "position": { - "height": 78, - "rotate": { - "anchor": "39% 50%" - }, - "width": 100, - "x": 1076.4, - "y": 722.5 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH4/SATB1_DH1280_FCV72" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_2" - }, - "position": { - "height": 78, - "width": 100, - "x": 1058.4, - "y": 530.4 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH2/SATB1_DH1270_FCV70" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_3" - }, - "position": { - "height": 78, - "width": 100, - "x": 1058.4, - "y": 303.8 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH3/SATB1_DH1170_FCV71" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter" - }, - "position": { - "height": 20, - "width": 80, - "x": 112.97999999999999, - "y": 212.46766030883788 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_TT01" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_3" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_4" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_10" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_11" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_13" - }, - "position": { - "height": 20, - "width": 80, - "x": 782.9296875, - "y": 212.0119375 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "Val": 83, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES05_TT01" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_34" - }, - "position": { - "height": 20, - "width": 80, - "x": 1434, - "y": 212.0119375 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "Val": 83, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES08_TT01" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_48" - }, - "position": { - "height": 20, - "width": 80, - "x": 1993, - "y": 212.0119375 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "Val": 83, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES11_TT01" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, { "children": [ { "children": [ { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/DHDP_AvgObj/Value OUT" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 21.16, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "psi", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], "meta": { - "name": "FlexContainer" + "name": "iFrame" }, "position": { - "basis": "25%" + "height": 744, + "width": 1396 }, "props": { - "justify": "center", - "style": { - "gap": "5px" - } + "src": "http://172.30.47.21:8088/system/webdev/SDC_PHX_A7/pan-zoom-iframe/html?gatewayAddress\u003dhttp://172.30.47.21:8088\u0026projectName\u003dSDC_PHX_A7\u0026targetURL\u003d/CHW_System\u0026targetDetailedURL\u003d/CHW_System\u0026height\u003d160%25\u0026width\u003d160%25" }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "DH DP Avg", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/ChillerDP_AvgObj/Value OUT" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 411.67, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "gpm", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "Chiller Min Flow", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" + "type": "ia.display.iframe" } ], "meta": { - "name": "FlexContainer_0" + "name": "Layout" }, "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "1px" + "grow": 1, + "shrink": 0 }, "props": { "style": { - "backgroundColor": "LightGray" + "overflow": "hidden" } }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Control/PSet_SP" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 25, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "psi", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv PID SP", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/Chiller_MinFlow_SP" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 150, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "GPLM", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "Chiller Min Flow SP", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_2" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" + "type": "ia.container.coord" }, { "meta": { - "name": "Label_1" + "name": "Values" }, "position": { - "basis": "1px" + "basis": "100px", + "shrink": 0 }, "props": { + "path": "Library/Cards/Card_Process_Indicators", "style": { - "backgroundColor": "LightGray" + "classes": "containers/card" } }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1/Out CV" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 0, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv PID 1 OutCV", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2/Out CV" - }, - "enabled": false, - "transforms": [ - { - "formatType": "numeric", - "formatValue": "#.##", - "type": "format" - } - ], - "type": "tag" - } - } - }, - "props": { - "text": 0, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_0" - }, - "position": { - "basis": "25%" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv PID 2 OutCV", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_3" - }, - "position": { - "basis": "40%" - }, - "props": { - "direction": "column" - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label_2" - }, - "position": { - "basis": "1px" - }, - "props": { - "style": { - "backgroundColor": "LightGray" - } - }, - "type": "ia.display.label" - }, - { - "children": [ - { - "children": [ - { - "meta": { - "name": "Label" - }, - "propConfig": { - "props.text": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "direct", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/PLC Tags/CHWBPV_PosSP" - }, - "enabled": false, - "type": "tag" - } - } - }, - "props": { - "text": 0, - "textStyle": { - "color": "var(--tagvalue-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "end" - } - }, - "type": "ia.display.label" - }, - { - "meta": { - "name": "Label_0" - }, - "props": { - "text": "%", - "textStyle": { - "color": "var(--units-color)", - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "start" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer" - }, - "props": { - "justify": "center", - "style": { - "gap": "5px", - "padding": "5px" - } - }, - "type": "ia.container.flex" - }, - { - "meta": { - "name": "Label" - }, - "props": { - "alignVertical": "top", - "text": "CHW Bpv Pos SP", - "textStyle": { - "fontFamily": "inherit", - "fontSize": 12, - "textAlign": "center" - } - }, - "type": "ia.display.label" - } - ], - "meta": { - "name": "FlexContainer_1" - }, - "position": { - "basis": "30%" - }, - "props": { - "direction": "column", - "justify": "center" - }, - "type": "ia.container.flex" + "type": "ia.display.view" } ], "meta": { - "name": "FlexContainer_6" + "name": "Indicators" }, "position": { - "height": 110, - "rotate": { - "anchor": "61% -55%" - }, - "width": 554, - "x": 1524, - "y": 1027.1396014404297 + "grow": 1 }, "props": { + "direction": "column", "style": { - "backgroundColor": "var(--container)", - "borderBottomLeftRadius": 4, - "borderBottomRightRadius": 4, - "borderTopLeftRadius": 4, - "borderTopRightRadius": 4, - "boxShadow": "var(--boxShadow2)", - "gap": "5px", - "overflow": "visible", - "padding": "5px" + "gap": "var(--space-md)", + "overflow": "visible" } }, "type": "ia.container.flex" }, { "meta": { - "name": "EmbeddedView_28" + "name": "Control" }, "position": { - "height": 110, - "width": 130, - "x": 2285, - "y": 1027.2096014404297 - }, - "props": { - "params": { - "embedded": true, - "objectName": "PID_Loop", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_1" - }, - "path": "Library/Widgets/Wdg_PID", - "style": { - "classes": "containers/HoverOver", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_29" - }, - "position": { - "height": 110, - "rotate": { - "anchor": "-22% 0%" - }, - "width": 130, - "x": 2124.16, - "y": 1026.9896014404299 - }, - "props": { - "params": { - "embedded": true, - "objectName": "PID_Loop", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/CHWBPV_PID_2" - }, - "path": "Library/Widgets/Wdg_PID", - "style": { - "classes": "containers/HoverOver", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_2" - }, - "position": { - "height": 120, - "rotate": { - "anchor": "25% 50%" - }, - "width": 290, - "x": 1114, - "y": 818.653 - }, - "props": { - "params": { - "DH": "DH101" - }, - "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", - "style": { - "bxShadow": "var(--boxShadow2)", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_4" - }, - "position": { - "height": 78, - "rotate": { - "anchor": "39% 50%" - }, - "width": 100, - "x": 418.4, - "y": 722.5 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH4/SATB1_DH1280_FCV72" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_5" - }, - "position": { - "height": 78, - "width": 100, - "x": 391.4, - "y": 303.8 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH3/SATB1_DH1170_FCV71" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_6" - }, - "position": { - "height": 78, - "width": 100, - "x": 391.4, - "y": 530.4 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH2/SATB1_DH1270_FCV70" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_7" - }, - "position": { - "height": 78, - "width": 100, - "x": 1715.7, - "y": 530.4 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH2/SATB1_DH1270_FCV70" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Valve_A_8" - }, - "position": { - "height": 78, - "width": 100, - "x": 1715.7, - "y": 303.8 - }, - "props": { - "params": { - "Layout": 1, - "objectName": "ValveC", - "tagPath": "[Ignition_Common_IO_Gtwy]DH3/SATB1_DH1170_FCV71" - }, - "path": "Library/Symbols/Mechanical/Sym_ValveC" - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_12" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_5" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_14" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_6" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_15" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_7" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_16" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_8" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_9" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_17" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_18" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_19" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_20" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_21" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_22" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_23" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_24" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_25" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_26" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 724 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_27" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 680 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_28" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_29" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_30" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_31" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_32" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_33" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_35" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 1054 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_36" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 1011.3 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_37" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_38" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_39" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.012, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_40" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_41" - }, - "position": { - "height": 20, - "width": 80, - "x": 14.6873490234375, - "y": 346.8 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_42" - }, - "position": { - "height": 20, - "width": 80, - "x": 110, - "y": 346.8 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_43" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_44" - }, - "position": { - "height": 20, - "width": 80, - "x": 303.01, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_45" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_46" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_47" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_49" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_50" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_51" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_52" - }, - "position": { - "height": 20, - "width": 80, - "x": 546, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_53" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_54" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_55" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_56" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_57" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_58" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_59" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_60" - }, - "position": { - "height": 20, - "width": 80, - "x": 814, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_61" - }, - "position": { - "height": 20, - "width": 80, - "x": 954, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_63" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_64" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_65" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_66" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_67" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_68" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_69" - }, - "position": { - "height": 20, - "width": 80, - "x": 1212, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_70" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_71" - }, - "position": { - "height": 20, - "width": 80, - "x": 1522, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_72" - }, - "position": { - "height": 20, - "width": 80, - "x": 1522, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_73" - }, - "position": { - "height": 20, - "width": 80, - "x": 1622, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_74" - }, - "position": { - "height": 20, - "width": 80, - "x": 1622, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_75" - }, - "position": { - "height": 20, - "width": 80, - "x": 1522, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_76" - }, - "position": { - "height": 20, - "width": 80, - "x": 1622, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_77" - }, - "position": { - "height": 20, - "width": 80, - "x": 1522, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_78" - }, - "position": { - "height": 20, - "width": 80, - "x": 1622, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_79" - }, - "position": { - "height": 20, - "width": 80, - "x": 1836, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_80" - }, - "position": { - "height": 20, - "width": 80, - "x": 1836, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_81" - }, - "position": { - "height": 20, - "width": 80, - "x": 1936, - "y": 302 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_82" - }, - "position": { - "height": 20, - "width": 80, - "x": 1936, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_83" - }, - "position": { - "height": 20, - "width": 80, - "x": 1836, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_84" - }, - "position": { - "height": 20, - "width": 80, - "x": 1936, - "y": 592 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_85" - }, - "position": { - "height": 20, - "width": 80, - "x": 1836, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "degF", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_86" - }, - "position": { - "height": 20, - "width": 80, - "x": 1936, - "y": 632 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_3" - }, - "position": { - "height": 120, - "rotate": { - "anchor": "25% 50%" - }, - "width": 290, - "x": 453.772, - "y": 818.653 - }, - "props": { - "params": { - "DH": "DH102" - }, - "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", - "style": { - "bxShadow": "var(--boxShadow2)", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_4" - }, - "position": { - "height": 120, - "rotate": { - "anchor": "25% 50%" - }, - "width": 290, - "x": 1096, - "y": 393.4 - }, - "props": { - "params": { - "DH": "DH202" - }, - "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", - "style": { - "bxShadow": "var(--boxShadow2)", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_5" - }, - "position": { - "height": 120, - "rotate": { - "anchor": "25% 50%" - }, - "width": 290, - "x": 427.767, - "y": 393.4 - }, - "props": { - "params": { - "DH": "DH203" - }, - "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", - "style": { - "bxShadow": "var(--boxShadow2)", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_6" - }, - "position": { - "height": 120, - "rotate": { - "anchor": "25% 50%" - }, - "width": 290, - "x": 1754.75, - "y": 393.4 - }, - "props": { - "params": { - "DH": "DH201" - }, - "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", - "style": { - "bxShadow": "var(--boxShadow2)", - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_87" - }, - "position": { - "height": 20, - "width": 80, - "x": 776, - "y": 346.775 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_88" - }, - "position": { - "height": 20, - "width": 80, - "x": 660, - "y": 346.7750085830688 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_89" - }, - "position": { - "height": 20, - "width": 80, - "x": 1434.0027490234374, - "y": 346.7750085830688 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_90" - }, - "position": { - "height": 20, - "width": 80, - "x": 1328, - "y": 346.775 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView" - }, - "position": { - "height": 788, - "width": 311, - "x": 2124.48, - "y": 222.49436804199217 + "basis": "300px", + "shrink": 0 }, "props": { "path": "Library/Cards/Card_Process_Control", "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "meta": { - "name": "VFD Pie Chart" - }, - "position": { - "height": 140, - "width": 150, - "x": 196.6, - "y": 385.7 - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "path": "Library/Widgets/Wgt_EquipmentStatusCount", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "meta": { - "name": "VFD Pie Chart_0" - }, - "position": { - "height": 140, - "width": 150, - "x": 857.7, - "y": 382.7 - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "path": "Library/Widgets/Wgt_EquipmentStatusCount", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "meta": { - "name": "VFD Pie Chart_1" - }, - "position": { - "height": 140, - "width": 150, - "x": 1495.29, - "y": 384.7 - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "path": "Library/Widgets/Wgt_EquipmentStatusCount", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "meta": { - "name": "VFD Pie Chart_2" - }, - "position": { - "height": 140, - "width": 150, - "x": 857.7, - "y": 808.3 - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "path": "Library/Widgets/Wgt_EquipmentStatusCount", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "meta": { - "name": "VFD Pie Chart_3" - }, - "position": { - "height": 140, - "width": 150, - "x": 196.6, - "y": 808.3 - }, - "props": { - "params": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "path": "Library/Widgets/Wgt_EquipmentStatusCount", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" - }, - "meta": { - "name": "VFD Pie Chart_4" - }, - "position": { - "height": 125, - "width": 104, - "x": 119.959, - "y": 56 - }, - "props": { - "params": { - "Tag": "Chillers", - "faulted": 8, - "running": 3, - "standby": 25 - }, - "path": "Library/Widgets/Wgt_EquipmentStatusCount", - "style": { - "overflow": "visible" - }, - "useDefaultViewWidth": true - }, - "type": "ia.display.view" - }, - { - "custom": { - "ChillerTagInfo": { - "chillerLLSPath": "[Ignition_Common_IO_Gtwy]CHWS/Chiller_LLS", - "statusTranslation": [ - { - "index": 0, - "value": [ - "Not Avail", - "Available" - ] - }, - { - "index": 1, - "value": [ - "Stopped", - "Running" - ] - }, - { - "index": 2, - "value": [ - "Good", - "Failed" - ] - } - ] - } - }, - "meta": { - "name": "Chiller LLS Table" - }, - "position": { - "height": 338, - "rotate": { - "anchor": "64% 50%" - }, - "width": 558, - "x": 1526.04, - "y": 676.49 - }, - "propConfig": { - "custom.ChillerTagInfo.nUnits": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "tagPath": "{this.custom.ChillerTagInfo.chillerLLSPath}" - }, - "tagPath": "{tagPath}/Config/Number of Units" - }, - "type": "tag" - } - }, - "custom.ChillerTagInfo.priority": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{this.custom.ChillerTagInfo.chillerLLSPath}" - }, - "tagPath": "{1}/Reference Devices" - }, - "type": "tag" - } - }, - "custom.ChillerTagInfo.status": { - "binding": { - "config": { - "fallbackDelay": 2.5, - "mode": "indirect", - "references": { - "1": "{this.custom.ChillerTagInfo.chillerLLSPath}" - }, - "tagPath": "{1}/Status Devices" - }, - "type": "tag" - } - }, - "custom.ChillerTagInfo.statusBinary": { - "binding": { - "config": { - "path": "this.custom.ChillerTagInfo.status" - }, - "transforms": [ - { - "code": "\t\n\tdef int_to_bits(num):\n\t # Ensure the integer is formatted as a 3-bit binary string and then reversed\n\t binary_str \u003d format(num % 8, \u002703b\u0027) # % 8 ensures only the last 3 bits are considered\n\t return [int(bit) for bit in binary_str[::-1]]\n\t\n\treturn [int_to_bits(num) for num in value]", - "type": "script" - } - ], - "type": "property" - } - }, - "props.data": { - "binding": { - "config": { - "struct": { - "nUnits": "{this.custom.ChillerTagInfo.nUnits}", - "priority": "{this.custom.ChillerTagInfo.priority}", - "status": "{this.custom.ChillerTagInfo.statusBinary}", - "statusTranslation": "{this.custom.ChillerTagInfo.statusTranslation}" - }, - "waitOnAll": false - }, - "enabled": false, - "transforms": [ - { - "code": "\toutput \u003d []\n\tfor i, priority in enumerate(range(value[\u0027nUnits\u0027])):\n\t\tif i\u003c9:\n\t\t\tchillerName \u003d \u0027Chiller 0{}\u0027.format(i+1)\n\t\telse:\n\t\t\tchillerName \u003d \u0027Chiller {}\u0027.format(i+1)\n\t\tstatusTxt \u003d \"Available\"\n\t\tbgColor \u003d \"transparent\"\n\t\tif value[\u0027statusTranslation\u0027][2].value[value[\u0027status\u0027][i][2]] \u003d\u003d \"Failed\":\n\t\t\tstatusTxt\u003d \"Failed\"\n\t\t\tbgColor \u003d \u0027var(--error)\u0027\n\t\telif value[\u0027statusTranslation\u0027][1].value[value[\u0027status\u0027][i][1]]\u003d\u003d\"Running\":\n\t\t\tstatusTxt\u003d \"Running\"\t\t\n\t\t\n\t\t\n\t\tnewRow \u003d {\n\t\t\t\t\u0027index\u0027: i, # index\n\t\t\t\t\u0027chillerName\u0027: {\n\t\t\t\t\t\u0027value\u0027: chillerName, # chillerName\n\t\t\t\t\t\u0027style\u0027: {\n\t\t\t\t\t\t\u0027margin-left\u0027: 10\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\"status\": {\"value\":statusTxt,\n\t\t\t\t\t\t\t\"style\":{\n\t\t\t\t\t\t\t\t\"backgroundColor\":bgColor}\n\t\t\t\t\t\t},\n\t\t\t\t\u0027priority\u0027 : value[\u0027priority\u0027][i],\n\t\t\t\t\u0027priority2\u0027: value[\u0027priority\u0027][i] if value[\u0027priority\u0027][i] \u003e 0 else 999 , # priority\n\t\t\t}\n\t\toutput.append(newRow)\n\t\tif i \u003d\u003d value[\u0027nUnits\u0027]-1:\n\t\t\tbreak\n\treturn self.sortChillerData(output)", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "index", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": false, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "chillerName", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Chiller" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "status", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Status" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "priority2", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "number", - "resizable": true, - "sort": "ascending", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": false, - "width": 0 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "priority", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "Priority" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "data": [ - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 41" - }, - "index": 40, - "priority": 1, - "priority2": 1, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 26" - }, - "index": 25, - "priority": 2, - "priority2": 2, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 29" - }, - "index": 28, - "priority": 3, - "priority2": 3, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 08" - }, - "index": 7, - "priority": 4, - "priority2": 4, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 46" - }, - "index": 45, - "priority": 5, - "priority2": 5, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 44" - }, - "index": 43, - "priority": 6, - "priority2": 6, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 12" - }, - "index": 11, - "priority": 7, - "priority2": 7, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 11" - }, - "index": 10, - "priority": 8, - "priority2": 8, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Running" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 28" - }, - "index": 27, - "priority": 9, - "priority2": 9, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 40" - }, - "index": 39, - "priority": 10, - "priority2": 10, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 13" - }, - "index": 12, - "priority": 11, - "priority2": 11, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 36" - }, - "index": 35, - "priority": 12, - "priority2": 12, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 19" - }, - "index": 18, - "priority": 13, - "priority2": 13, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 24" - }, - "index": 23, - "priority": 14, - "priority2": 14, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 20" - }, - "index": 19, - "priority": 15, - "priority2": 15, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 17" - }, - "index": 16, - "priority": 16, - "priority2": 16, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 47" - }, - "index": 46, - "priority": 17, - "priority2": 17, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 38" - }, - "index": 37, - "priority": 18, - "priority2": 18, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 30" - }, - "index": 29, - "priority": 19, - "priority2": 19, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 07" - }, - "index": 6, - "priority": 20, - "priority2": 20, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 05" - }, - "index": 4, - "priority": 21, - "priority2": 21, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 27" - }, - "index": 26, - "priority": 22, - "priority2": 22, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 15" - }, - "index": 14, - "priority": 23, - "priority2": 23, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 34" - }, - "index": 33, - "priority": 24, - "priority2": 24, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 35" - }, - "index": 34, - "priority": 25, - "priority2": 25, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 22" - }, - "index": 21, - "priority": 26, - "priority2": 26, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 14" - }, - "index": 13, - "priority": 27, - "priority2": 27, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 33" - }, - "index": 32, - "priority": 28, - "priority2": 28, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 45" - }, - "index": 44, - "priority": 29, - "priority2": 29, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 21" - }, - "index": 20, - "priority": 30, - "priority2": 30, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 16" - }, - "index": 15, - "priority": 31, - "priority2": 31, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 48" - }, - "index": 47, - "priority": 32, - "priority2": 32, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 43" - }, - "index": 42, - "priority": 33, - "priority2": 33, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 39" - }, - "index": 38, - "priority": 34, - "priority2": 34, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 23" - }, - "index": 22, - "priority": 35, - "priority2": 35, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 31" - }, - "index": 30, - "priority": 36, - "priority2": 36, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 02" - }, - "index": 1, - "priority": 37, - "priority2": 37, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 03" - }, - "index": 2, - "priority": 38, - "priority2": 38, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 04" - }, - "index": 3, - "priority": 39, - "priority2": 39, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 32" - }, - "index": 31, - "priority": 40, - "priority2": 40, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 09" - }, - "index": 8, - "priority": 41, - "priority2": 41, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 06" - }, - "index": 5, - "priority": 42, - "priority2": 42, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 25" - }, - "index": 24, - "priority": 43, - "priority2": 43, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 42" - }, - "index": 41, - "priority": 44, - "priority2": 44, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 01" - }, - "index": 0, - "priority": 45, - "priority2": 45, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 18" - }, - "index": 17, - "priority": 46, - "priority2": 46, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 10" - }, - "index": 9, - "priority": 47, - "priority2": 47, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - }, - { - "chillerName": { - "style": { - "margin-left": 10 - }, - "value": "Chiller 37" - }, - "index": 36, - "priority": 48, - "priority2": 48, - "status": { - "style": { - "backgroundColor": "transparent" - }, - "value": "Available" - } - } - ], - "pager": { - "bottom": false - } - }, - "scripts": { - "customMethods": [ - { - "name": "sortChillerData", - "params": [ - "arrData" - ], - "script": "\tpriority_rows \u003d sorted([row for row in arrData if row[\"priority2\"] \u003c 999], key\u003dlambda x: x[\"priority2\"])\n\tnewArr \u003d [row for row in arrData if row[\"priority2\"] \u003d\u003d 999]\n\tfor row in priority_rows:\n\t\tif row[\"priority2\"] \u003c 999:\n#\t\t\tsystem.perspective.print(\"%s placed in position %s\"%(row[\"chillerName\"][\"value\"], row[\"priority2\"]-1))\n\t\t\tnewArr.insert(row[\"priority2\"]-1, row)\n\t\n\treturn newArr\n\t\t\t\n\t\n\t" - } - ], - "extensionFunctions": null, - "messageHandlers": [] - }, - "type": "ia.display.table" - }, - { - "custom": { - "tagPath": "[Ignition_Common_IO_Gtwy]Roof" - }, - "meta": { - "name": "Supply Chart" - }, - "position": { - "height": 240, - "rotate": { - "anchor": "57% 50%" - }, - "width": 352, - "x": 2101.97, - "y": -2.959808349609375 - }, - "propConfig": { - "custom.raw": { - "binding": { - "config": { - "aggregate": "MinMax", - "avoidScanClassValidation": true, - "dateRange": { - "mostRecent": "2", - "mostRecentUnits": "HOUR" - }, - "enableValueCache": true, - "ignoreBadQuality": false, - "polling": { - "enabled": true, - "rate": "60" - }, - "preventInterpolation": false, - "returnFormat": "Wide", - "returnSize": { - "numRows": "120", - "type": "FIXED" - }, - "tags": "{this.custom.tags}", - "valueFormat": "DOCUMENT" - }, - "type": "tag-history" - } - }, - "custom.tags": { - "binding": { - "config": { - "struct": {}, - "waitOnAll": true - }, - "transforms": [ - { - "code": "\toutput \u003d []\n\taggregate \u003d \"LastValue\"\n\talias \u003d \"Value\"\n\thistProvider \u003d {\"Ignition_Common_IO_Gtwy\":\"Ignition_Hist/ignition-satb1-io6:default\",\n\t\t\t\t\t\"Ignition_SATB1_IO1_Gtwy\":\"Ignition_Hist/ignition-satb1-io1:default\",\n\t\t\t\t\t\"Ignition_SATB1_IO2_Gtwy\":\"Ignition_Hist/ignition-satb1-io2:default\"}\n\ttags \u003d system.tag.browse(self.custom.tagPath, {\"name\":\"*SYSTEM\",\"typeId\":\"Objects/Mechanical/Chiller\",\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagname \u003d str(item[\"fullPath\"]) + \"/Load\"\n\t\tnameparts \u003d tagname.split(\"]\")\n\t\tprovider\u003d histProvider[nameparts[0][1:]]\n\t\trun_path \u003d \"[{}]{}\".format(provider, nameparts[1])\n\t\toutput.append({\"aggregate\": aggregate, \"alias\": str(item[\"name\"]), \"path\": run_path})\n\t\n\treturn output\n\t\n\t\n\t\t\n\t\t", - "type": "script" - } - ], - "type": "expr-struct" - } - }, - "props.dataSources.Tonnage": { - "binding": { - "config": { - "struct": { - "dataset": "{this.custom.raw}" - }, - "waitOnAll": true - }, - "enabled": false, - "transforms": [ - { - "code": "\t\n\trawHist \u003d value[\u0027dataset\u0027]\n\toutput \u003d []\n\ttotal \u003d 0\n\tfor item in rawHist:\n\t\ttotal \u003d 0\n\t\tfor key in item:\n\t\t\tif key \u003d\u003d \"t_stamp\": \n\t\t\t\tstamp \u003d item[key]\n\t\t\t\tcontinue\n\t\t\tif item[key] is None:\n\t\t\t\ttotal +\u003d 0\n\t\t\telse:\n\t\t\t\ttotal +\u003d item[key]\n\t\toutput.append({\u0027t_stamp\u0027: stamp, \"total\": total})\n\treturn output\n\t\n\t", - "type": "script" - } - ], - "type": "expr-struct" - } - } - }, - "props": { - "background": { - "render": "color" - }, - "dataSources": { - "Tonnage": [ - { - "t_stamp": 1776866263502, - "total": 1673.604373568407 - }, - { - "t_stamp": 1776866323502, - "total": 1668.3232719284033 - }, - { - "t_stamp": 1776866383502, - "total": 1667.7585804841597 - }, - { - "t_stamp": 1776866443502, - "total": 1677.5819018963616 - }, - { - "t_stamp": 1776866503502, - "total": 1685.8205119174413 - }, - { - "t_stamp": 1776866563502, - "total": 1689.8692880042101 - }, - { - "t_stamp": 1776866623502, - "total": 1675.565934076644 - }, - { - "t_stamp": 1776866683502, - "total": 1677.0669210518904 - }, - { - "t_stamp": 1776866743502, - "total": 1677.0423980430648 - }, - { - "t_stamp": 1776866803502, - "total": 1669.4905979078678 - }, - { - "t_stamp": 1776866863502, - "total": 1678.9369594752789 - }, - { - "t_stamp": 1776866923502, - "total": 1687.1916379989912 - }, - { - "t_stamp": 1776866983502, - "total": 1687.3385592680215 - }, - { - "t_stamp": 1776867043502, - "total": 1695.8774153804547 - }, - { - "t_stamp": 1776867103502, - "total": 1700.6212221696458 - }, - { - "t_stamp": 1776867163502, - "total": 1705.2337151708052 - }, - { - "t_stamp": 1776867223502, - "total": 1696.7683863537602 - }, - { - "t_stamp": 1776867283502, - "total": 1692.3688050157184 - }, - { - "t_stamp": 1776867343502, - "total": 1696.0415455735406 - }, - { - "t_stamp": 1776867403502, - "total": 1702.246973531337 - }, - { - "t_stamp": 1776867463502, - "total": 1706.1742175421298 - }, - { - "t_stamp": 1776867523502, - "total": 1695.5927052647216 - }, - { - "t_stamp": 1776867583502, - "total": 1701.3725069511581 - }, - { - "t_stamp": 1776867643502, - "total": 1695.7144239444785 - }, - { - "t_stamp": 1776867703502, - "total": 1702.6068129410028 - }, - { - "t_stamp": 1776867763502, - "total": 1701.0631307816898 - }, - { - "t_stamp": 1776867823502, - "total": 1714.5919484051492 - }, - { - "t_stamp": 1776867883502, - "total": 1711.3600040150939 - }, - { - "t_stamp": 1776867943502, - "total": 1718.5114102340797 - }, - { - "t_stamp": 1776868003502, - "total": 1716.2898490025261 - }, - { - "t_stamp": 1776868063502, - "total": 1724.1854644023742 - }, - { - "t_stamp": 1776868123502, - "total": 1712.9110237981288 - }, - { - "t_stamp": 1776868183502, - "total": 1707.9297555006074 - }, - { - "t_stamp": 1776868243502, - "total": 1712.8940187229937 - }, - { - "t_stamp": 1776868303502, - "total": 1714.1118496792003 - }, - { - "t_stamp": 1776868363502, - "total": 1713.7515206119724 - }, - { - "t_stamp": 1776868423502, - "total": 1720.9529738868714 - }, - { - "t_stamp": 1776868483502, - "total": 1720.0880106587158 - }, - { - "t_stamp": 1776868543502, - "total": 1711.856543937079 - }, - { - "t_stamp": 1776868603502, - "total": 1721.124363350834 - }, - { - "t_stamp": 1776868663502, - "total": 1727.1498985698713 - }, - { - "t_stamp": 1776868723502, - "total": 1728.170471446037 - }, - { - "t_stamp": 1776868783502, - "total": 1723.909578320036 - }, - { - "t_stamp": 1776868843502, - "total": 1729.8520381218805 - }, - { - "t_stamp": 1776868903502, - "total": 1732.097751646726 - }, - { - "t_stamp": 1776868963502, - "total": 1740.9971828180521 - }, - { - "t_stamp": 1776869023502, - "total": 1734.2687255570472 - }, - { - "t_stamp": 1776869083502, - "total": 1734.2929230090335 - }, - { - "t_stamp": 1776869143502, - "total": 1734.6363186037192 - }, - { - "t_stamp": 1776869203502, - "total": 1743.9197004263635 - }, - { - "t_stamp": 1776869263502, - "total": 1737.5756559216577 - }, - { - "t_stamp": 1776869323502, - "total": 1742.9075356864444 - }, - { - "t_stamp": 1776869383502, - "total": 1746.6211894734565 - }, - { - "t_stamp": 1776869443502, - "total": 1740.8419477213345 - }, - { - "t_stamp": 1776869503502, - "total": 1733.2567053044684 - }, - { - "t_stamp": 1776869563502, - "total": 1736.0245853120891 - }, - { - "t_stamp": 1776869623502, - "total": 1739.6241111354132 - }, - { - "t_stamp": 1776869683502, - "total": 1742.343615144019 - }, - { - "t_stamp": 1776869743502, - "total": 1746.5502502787115 - }, - { - "t_stamp": 1776869803502, - "total": 1742.2633506779198 - }, - { - "t_stamp": 1776869863502, - "total": 1743.4050817623797 - }, - { - "t_stamp": 1776869923502, - "total": 1736.8477679900932 - }, - { - "t_stamp": 1776869983502, - "total": 1743.0368428952843 - }, - { - "t_stamp": 1776870043502, - "total": 1747.3324815688302 - }, - { - "t_stamp": 1776870103502, - "total": 1753.0242299943664 - }, - { - "t_stamp": 1776870163502, - "total": 1748.3851890690034 - }, - { - "t_stamp": 1776870223502, - "total": 1749.756959463162 - }, - { - "t_stamp": 1776870283502, - "total": 1752.826580690277 - }, - { - "t_stamp": 1776870343502, - "total": 1750.4432147478196 - }, - { - "t_stamp": 1776870403502, - "total": 1749.9699796187908 - }, - { - "t_stamp": 1776870463502, - "total": 1750.810513435925 - }, - { - "t_stamp": 1776870523502, - "total": 1753.6675424187536 - }, - { - "t_stamp": 1776870583502, - "total": 1753.3575761529119 - }, - { - "t_stamp": 1776870643502, - "total": 1752.998356977879 - }, - { - "t_stamp": 1776870703502, - "total": 1760.0286232986691 - }, - { - "t_stamp": 1776870763502, - "total": 1761.057042654046 - }, - { - "t_stamp": 1776870823502, - "total": 1754.2316664188131 - }, - { - "t_stamp": 1776870883502, - "total": 1760.8681574444565 - }, - { - "t_stamp": 1776870943502, - "total": 1759.0162714942785 - }, - { - "t_stamp": 1776871003502, - "total": 1755.4071409359299 - }, - { - "t_stamp": 1776871063502, - "total": 1759.701700921904 - }, - { - "t_stamp": 1776871123502, - "total": 1761.1063343853061 - }, - { - "t_stamp": 1776871183502, - "total": 1752.4834227853635 - }, - { - "t_stamp": 1776871243502, - "total": 1745.7723498193548 - }, - { - "t_stamp": 1776871303502, - "total": 1752.4357288955077 - }, - { - "t_stamp": 1776871363502, - "total": 1752.483457777643 - }, - { - "t_stamp": 1776871423502, - "total": 1767.0660551786423 - }, - { - "t_stamp": 1776871483502, - "total": 1765.361112868309 - }, - { - "t_stamp": 1776871543502, - "total": 1772.3484557221161 - }, - { - "t_stamp": 1776871603502, - "total": 1769.6380303433157 - }, - { - "t_stamp": 1776871663502, - "total": 1765.1463410465883 - }, - { - "t_stamp": 1776871723502, - "total": 1757.970170917029 - }, - { - "t_stamp": 1776871783502, - "total": 1767.2378848195076 - }, - { - "t_stamp": 1776871843502, - "total": 1765.807411055545 - }, - { - "t_stamp": 1776871903502, - "total": 1763.8420522502504 - }, - { - "t_stamp": 1776871963502, - "total": 1752.3368800322855 - }, - { - "t_stamp": 1776872023502, - "total": 1758.7938743375364 - }, - { - "t_stamp": 1776872083502, - "total": 1764.3227354980754 - }, - { - "t_stamp": 1776872143502, - "total": 1758.534891189733 - }, - { - "t_stamp": 1776872203502, - "total": 1755.7419400599197 - }, - { - "t_stamp": 1776872263502, - "total": 1747.3315513598322 - }, - { - "t_stamp": 1776872323502, - "total": 1748.0340819589003 - }, - { - "t_stamp": 1776872383502, - "total": 1762.0498406014892 - }, - { - "t_stamp": 1776872443502, - "total": 1764.9835695732045 - }, - { - "t_stamp": 1776872503502, - "total": 1760.9265243419136 - }, - { - "t_stamp": 1776872563502, - "total": 1763.0892823015924 - }, - { - "t_stamp": 1776872623502, - "total": 1754.4993179332862 - }, - { - "t_stamp": 1776872683502, - "total": 1756.0587353413346 - }, - { - "t_stamp": 1776872743502, - "total": 1757.1295786965152 - }, - { - "t_stamp": 1776872803502, - "total": 1760.5342755692782 - }, - { - "t_stamp": 1776872863502, - "total": 1769.7505698147313 - }, - { - "t_stamp": 1776872923502, - "total": 1760.3795834155528 - }, - { - "t_stamp": 1776872983502, - "total": 1773.0256561354795 - }, - { - "t_stamp": 1776873043502, - "total": 1767.426040279913 - }, - { - "t_stamp": 1776873103502, - "total": 1768.120054070619 - }, - { - "t_stamp": 1776873163502, - "total": 1769.0735871671823 - }, - { - "t_stamp": 1776873223502, - "total": 1780.5697892264104 - }, - { - "t_stamp": 1776873283502, - "total": 1782.129469384543 - }, - { - "t_stamp": 1776873343502, - "total": 1780.7831728458405 - }, - { - "t_stamp": 1776873403502, - "total": 1780.7831728458405 - } - ] - }, - "legend": { - "enabled": false - }, - "series": [ - { - "candlestick": { - "appearance": { - "deriveFieldsFromData": { - "fill": { - "color": "", - "opacity": "" - }, - "stroke": { - "color": "", - "opacity": "", - "width": "" - } - }, - "fill": { - "color": "", - "opacity": 1 - }, - "heatRules": { - "dataField": "", - "enabled": false, - "max": "", - "min": "" - }, - "stacked": false, - "stroke": { - "color": "", - "opacity": 1, - "width": 1 - } - }, - "high": { - "x": "", - "y": "" - }, - "low": { - "x": "", - "y": "" - }, - "open": { - "x": "", - "y": "" - } - }, - "column": { - "appearance": { - "deriveFieldsFromData": { - "fill": { - "color": "", - "opacity": "" - }, - "stroke": { - "color": "", - "opacity": "", - "width": "" - } - }, - "fill": { - "color": "", - "opacity": 1 - }, - "heatRules": { - "dataField": "", - "enabled": false, - "max": "", - "min": "" - }, - "height": null, - "stacked": false, - "stroke": { - "color": "", - "opacity": 1, - "width": 1 - }, - "width": null - }, - "open": { - "x": "", - "y": "" - } - }, - "data": { - "source": "Tonnage", - "x": "t_stamp", - "y": "total" - }, - "defaultState": { - "visible": true - }, - "hiddenInLegend": false, - "label": { - "text": "Process Temp" - }, - "line": { - "appearance": { - "bullets": [ - { - "deriveFieldsFromData": { - "fill": { - "color": "", - "opacity": "" - }, - "rotation": "", - "stroke": { - "color": "", - "opacity": "", - "width": "" - } - }, - "enabled": false, - "fill": { - "color": "", - "opacity": 1 - }, - "heatRules": { - "dataField": "", - "enabled": false, - "max": 100, - "min": 2 - }, - "height": 10, - "label": { - "position": { - "dx": 0, - "dy": 0 - }, - "text": "{value}" - }, - "render": "circle", - "rotation": 0, - "stroke": { - "color": "", - "opacity": 1, - "width": 1 - }, - "tooltip": { - "background": { - "color": "", - "opacity": 1 - }, - "cornerRadius": 3, - "enabled": true, - "pointerLength": 4, - "text": "{name}: [bold]{valueY}[/]" - }, - "width": 10 - } - ], - "connect": true, - "fill": { - "color": "", - "opacity": 0 - }, - "minDistance": 0.5, - "stroke": { - "color": "", - "dashArray": "", - "opacity": 1, - "width": 3 - }, - "tensionX": 1, - "tensionY": 1 - }, - "open": { - "x": "", - "y": "" - } - }, - "name": "Tonnage", - "render": "line", - "stepLine": { - "appearance": { - "bullets": [ - { - "deriveFieldsFromData": { - "fill": { - "color": "", - "opacity": "" - }, - "rotation": "", - "stroke": { - "color": "", - "opacity": "", - "width": "" - } - }, - "enabled": true, - "fill": { - "color": "", - "opacity": 1 - }, - "heatRules": { - "dataField": "", - "enabled": false, - "max": 100, - "min": 2 - }, - "height": 10, - "label": { - "position": { - "dx": 0, - "dy": 0 - }, - "text": "{value}" - }, - "render": "circle", - "rotation": 0, - "stroke": { - "color": "", - "opacity": 1, - "width": 1 - }, - "tooltip": { - "background": { - "color": "", - "opacity": 1 - }, - "cornerRadius": 3, - "enabled": true, - "pointerLength": 4, - "text": "{name}: [bold]{valueY}[/]" - }, - "width": 10 - } - ], - "connect": true, - "fill": { - "color": "", - "opacity": 0 - }, - "minDistance": 0.5, - "stroke": { - "color": "", - "dashArray": "", - "opacity": 1, - "width": 3 - }, - "tensionX": 1, - "tensionY": 1 - }, - "open": { - "x": "", - "y": "" - } - }, - "tooltip": { - "background": { - "color": "", - "opacity": 1 - }, - "cornerRadius": 3, - "enabled": true, - "pointerLength": 4, - "text": "{name}: [bold]{valueY}[/]" - }, - "visible": true, - "xAxis": "time", - "yAxis": "Tonnage", - "zIndex": 0 - } - ], - "style": { - "overflow": "visible", - "paddingRight": 5 - }, - "title": { - "text": "Supply (Tons)" - }, - "xAxes": [ - { - "appearance": { - "font": { - "size": "", - "weight": 500 - }, - "grid": { - "color": "", - "dashArray": "", - "minDistance": 60, - "opacity": 0.5, - "position": 0.5 - }, - "inside": false, - "labels": { - "color": "", - "horizontalCenter": "middle", - "opacity": 1, - "rotation": 0, - "verticalCenter": "middle" - }, - "opposite": false - }, - "category": { - "break": { - "enabled": false, - "endCategory": "", - "size": 0.05, - "startCategory": "" - } - }, - "date": { - "baseInterval": { - "count": 30, - "enabled": true, - "skipEmptyPeriods": false, - "timeUnit": "second" - }, - "break": { - "enabled": false, - "endDate": "", - "size": 0.05, - "startDate": "" - }, - "format": "HH:mm", - "inputFormat": "HH:mm", - "range": { - "max": "", - "min": "", - "useStrict": false - } - }, - "inversed": false, - "label": { - "color": "", - "enabled": false, - "text": "Time" - }, - "name": "time", - "render": "date", - "tooltip": { - "background": { - "color": "", - "opacity": 1 - }, - "cornerRadius": 3, - "enabled": true, - "pointerLength": 4, - "text": "" - }, - "value": { - "break": { - "enabled": false, - "endValue": 100, - "size": 0.05, - "startValue": 0 - }, - "format": "#,###.##", - "logarithmic": false, - "range": { - "max": "", - "min": "", - "useStrict": false - } - }, - "visible": true - } - ], - "yAxes": [ - { - "appearance": { - "font": { - "size": "", - "weight": 500 - }, - "grid": { - "color": "", - "dashArray": "", - "minDistance": null, - "opacity": 0.5, - "position": 0.5 - }, - "inside": false, - "labels": { - "color": "", - "horizontalCenter": "middle", - "opacity": 1, - "rotation": 0, - "verticalCenter": "middle" - }, - "opposite": false - }, - "category": { - "break": { - "enabled": false, - "endCategory": "", - "size": 0.05, - "startCategory": "" - } - }, - "date": { - "baseInterval": { - "count": 1, - "enabled": false, - "skipEmptyPeriods": false, - "timeUnit": "hour" - }, - "break": { - "enabled": false, - "endDate": "", - "size": 0.05, - "startDate": "" - }, - "format": "M/d/yyyy HH:mm:ss", - "inputFormat": "yyyy-MM-dd kk:mm:ss", - "range": { - "max": 10000, - "min": 0, - "useStrict": false - } - }, - "inversed": false, - "label": { - "color": "", - "enabled": false, - "text": "CHWS" - }, - "name": "Tonnage", - "render": "value", - "tooltip": { - "background": { - "color": "", - "opacity": 1 - }, - "cornerRadius": 3, - "enabled": true, - "pointerLength": 4, - "text": "" - }, - "value": { - "break": { - "enabled": false, - "endValue": 100, - "size": 0.05, - "startValue": 0 - }, - "format": "#,###.##", - "logarithmic": false, - "range": { - "max": "", - "min": "", - "useStrict": false - } - }, - "visible": true - } - ] - }, - "type": "ia.chart.xy" - }, - { - "meta": { - "name": "Transmitter_62" - }, - "position": { - "height": 20, - "width": 80, - "x": 2048, - "y": 240.491 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "gpm", - "EU_Pos": 1, - "Size": 12, - "Val": 83, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES11_TT01" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_91" - }, - "position": { - "height": 20, - "width": 80, - "x": 154, - "y": 260 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "Transmitter_92" - }, - "position": { - "height": 20, - "width": 80, - "x": 152, - "y": 303 - }, - "props": { - "params": { - "Bkgnd_EN": false, - "EU": "psig", - "EU_Pos": 1, - "Size": 12, - "objectName": "AnalogIn", - "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" - }, - "path": "Library/Symbols/Sym_Xmtr", - "style": { - "overflow": "visible" - } - }, - "type": "ia.display.view" - }, - { - "meta": { - "name": "EmbeddedView_0" - }, - "position": { - "height": 153, - "width": 1833, - "x": 229.99, - "y": 39.46 - }, - "props": { - "path": "Library/Cards/Card_CH_Overview", - "style": { - "overflow": "visible" + "classes": "containers/card" } }, "type": "ia.display.view" @@ -6220,23 +93,12 @@ "meta": { "name": "root" }, - "position": { - "x": 1001, - "y": 600 + "props": { + "style": { + "gap": "var(--space-md)", + "padding": "var(--space-md)" + } }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "eqPopupMsg", - "pageScope": true, - "script": "\tutils.nav.eqPopupMsg(self, payload)", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.container.coord" + "type": "ia.container.flex" } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/resource.json new file mode 100644 index 0000000..03779b3 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModificationSignature": "1ea39963b84b892cb3837b662baebb5f0f94bac5ff457421f35077284a9475ee", + "lastModification": { + "actor": "Emmanuel", + "timestamp": "2026-05-01T21:58:10Z" + } + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/thumbnail.png new file mode 100644 index 0000000..fe8b923 Binary files /dev/null and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/view.json new file mode 100644 index 0000000..20b6af9 --- /dev/null +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/CHW_System_Layout/view.json @@ -0,0 +1,4001 @@ +{ + "custom": {}, + "params": { + "pageId": "" + }, + "propConfig": { + "params.pageId": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 1425, + "width": 2962 + } + }, + "root": { + "children": [ + { + "meta": { + "name": "FlowDiagram" + }, + "position": { + "height": 1040, + "width": 2011, + "x": 85.88, + "y": 15.06 + }, + "props": { + "elements": [ + { + "d": "M1098.98,0.442l0,102.447l-1096.65,0l0,-102.447l1096.65,-0Zm0,164.608l0,167.653l-1096.65,-0l0,-167.653m0,-3.735l0,-16.744l1096.65,-0l0,16.71m-1096.65,-49.616l0,-8.776m370.552,8.776l-0,-8.776m363.051,8.776l-0,-8.776m363.051,8.776l0,-8.776m-1081.65,58.392l0,-16.756m0,246.597l0,-16.756m370.552,-213.085l-0,-16.756m-223.582,0l-0,37.5l21,0m-5.97,192.341l0,37.5l21,0m327.777,-267.341l0,37.5l21,0m-6.798,192.341l0,37.5l21,0m327.021,-267.341l0,37.5l21,0m-538.448,-20.744l-0,-16.756m363.051,16.756l-0,-16.71m-363.051,20.479l-0,167.653m363.051,-167.653l-0,167.653m15,-171.422l-0,-16.71m-363.051,171.668l-0,16.464m363.051,-16.112l-0,16.112m-733.603,-16.327l0,16.327m0,213.468l0,16.327m146.97,-229.795l-0,-26.25l21,-0m-5.97,256.045l0,-26.25l21,0m327.777,-203.545l0,-26.25l21,-0m-6.798,256.045l0,-26.25l21,0m327.021,-203.545l0,-26.25l21,-0m-894,67.913l733.603,0l-0,16.756m-733.603,171.376l733.603,0l-0,-16.112m-363.051,-155.264l-0,-16.756m-0,172.02l-0,16.112", + "fill": { + "paint": "transparent" + }, + "id": "Supply", + "name": "Supply", + "stroke": { + "paint": "var(--flow-supply)", + "width": "0.88px" + }, + "type": "path" + }, + { + "d": "M1091.48,7.942l0,87.447l-1081.65,0l0,-87.447l1081.65,-0Zm-1081.65,103.723l0,-16.276m355.552,16.276l-0,-16.276m363.051,16.276l-0,-16.276m363.051,16.276l0,-16.276m-726.102,69.661l-0,160.153m363.051,-160.153l-0,160.153m-363.051,-163.922l-0,-9.21m363.051,9.21l-0,-9.21m363.051,12.979l0,160.153l-1081.65,-0l0,-160.153m0,-3.723l0,-9.256l1081.65,-0l0,9.21m-1066.65,0l0,-9.21m0,239.051l0,-9.21m355.552,-220.631l-0,-9.256m-190.582,30l21,0l-0,-30m-5.97,259.841l21,0l0,-30m327.777,-199.841l21,0l0,-30m-6.798,259.841l21,0l0,-30m327.021,-199.841l21,0l0,-30m-193.397,9.256l-0,-9.21m-363.051,164.168l-0,8.964m363.051,-8.827l-0,8.827m-718.603,-8.612l0,8.612m0,221.183l0,8.612m164.97,-248.545l21,-0l-0,18.763m-5.97,211.032l21,0l0,18.75m327.777,-248.545l21,-0l0,18.763m-6.798,211.032l21,0l0,18.75m327.021,-248.545l21,-0l0,18.763m-193.397,65.906l-0,-9.256l-718.603,0m718.603,164.52l-0,8.612l-718.603,0m355.552,-163.876l-0,-9.256m-0,164.52l-0,8.612", + "fill": { + "paint": "transparent" + }, + "id": "Return", + "name": "Return", + "stroke": { + "paint": "var(--flow-return)", + "width": "0.88px" + }, + "type": "path" + }, + { + "d": "M9.826,161.281c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm-1081.65,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm0,229.841c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-741.103,-279.457c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm370.552,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm-718.602,49.616c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-726.103,151.326c1.04,-0 1.885,0.844 1.885,1.884c-0,1.04 -0.845,1.885 -1.885,1.885c-1.04,-0 -1.884,-0.845 -1.884,-1.885c-0,-1.04 0.844,-1.884 1.884,-1.884Zm0,229.795c1.04,-0 1.885,0.844 1.885,1.884c-0,1.041 -0.845,1.885 -1.885,1.885c-1.04,-0 -1.884,-0.844 -1.884,-1.885c-0,-1.04 0.844,-1.884 1.884,-1.884Zm363.052,-0c1.04,-0 1.884,0.844 1.884,1.884c0,1.041 -0.844,1.885 -1.884,1.885c-1.041,-0 -1.885,-0.844 -1.885,-1.885c0,-1.04 0.844,-1.884 1.885,-1.884Zm363.051,-0c1.04,-0 1.884,0.844 1.884,1.884c0,1.041 -0.844,1.885 -1.884,1.885c-1.04,-0 -1.885,-0.844 -1.885,-1.885c0,-1.04 0.845,-1.884 1.885,-1.884Zm-363.051,-229.795c1.04,-0 1.884,0.844 1.884,1.884c0,1.04 -0.844,1.885 -1.884,1.885c-1.041,-0 -1.885,-0.845 -1.885,-1.885c0,-1.04 0.844,-1.884 1.885,-1.884Zm363.051,-0c1.04,-0 1.884,0.844 1.884,1.884c0,1.04 -0.844,1.885 -1.884,1.885c-1.04,-0 -1.885,-0.845 -1.885,-1.885c0,-1.04 0.845,-1.884 1.885,-1.884Zm-718.603,-151.326c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm0,229.841c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-741.103,-279.457c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm355.552,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm-703.602,49.616c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm-726.103,151.326c1.04,-0 1.885,0.892 1.885,1.992c-0,1.099 -0.845,1.992 -1.885,1.992c-1.04,-0 -1.884,-0.893 -1.884,-1.992c-0,-1.1 0.844,-1.992 1.884,-1.992Zm0,229.795c1.04,-0 1.885,0.893 1.885,1.992c-0,1.099 -0.845,1.992 -1.885,1.992c-1.04,-0 -1.884,-0.893 -1.884,-1.992c-0,-1.099 0.844,-1.992 1.884,-1.992Zm363.052,-0c1.04,-0 1.884,0.893 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.041,-0 -1.885,-0.893 -1.885,-1.992c0,-1.099 0.844,-1.992 1.885,-1.992Zm363.051,-0c1.04,-0 1.884,0.893 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.04,-0 -1.885,-0.893 -1.885,-1.992c0,-1.099 0.845,-1.992 1.885,-1.992Zm-363.051,-229.795c1.04,-0 1.884,0.892 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.041,-0 -1.885,-0.893 -1.885,-1.992c0,-1.1 0.844,-1.992 1.885,-1.992Zm363.051,-0c1.04,-0 1.884,0.892 1.884,1.992c0,1.099 -0.844,1.992 -1.884,1.992c-1.04,-0 -1.885,-0.893 -1.885,-1.992c0,-1.1 0.845,-1.992 1.885,-1.992Zm-748.603,-151.326c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Zm363.052,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.041,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.844,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.884,0.845 1.884,1.885c0,1.04 -0.844,1.884 -1.884,1.884c-1.04,0 -1.885,-0.844 -1.885,-1.884c0,-1.04 0.845,-1.885 1.885,-1.885Zm363.051,0c1.04,0 1.885,0.845 1.885,1.885c-0,1.04 -0.845,1.884 -1.885,1.884c-1.04,0 -1.884,-0.844 -1.884,-1.884c-0,-1.04 0.844,-1.885 1.884,-1.885Z", + "fill": { + "paint": "transparent" + }, + "id": "Connector", + "name": "Connector", + "stroke": { + "paint": "#000", + "width": "0.88px" + }, + "type": "path" + } + ], + "fill": { + "rule": "evenodd" + }, + "stroke": { + "linecap": "round", + "linejoin": "round", + "miterlimit": "1.5" + }, + "style": { + "clipRule": "evenodd" + }, + "viewBox": "0 0 1102 563" + }, + "type": "ia.shapes.svg" + }, + { + "meta": { + "name": "Valve_A" + }, + "position": { + "height": 78, + "width": 100, + "x": 418.4, + "y": 949 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_DH1180_FCV73" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_0" + }, + "position": { + "height": 78, + "width": 100, + "x": 1076.4, + "y": 949 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH1/SATB1_DH1260_FCV69" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_1" + }, + "position": { + "height": 78, + "rotate": { + "anchor": "39% 50%" + }, + "width": 100, + "x": 1076.4, + "y": 722.5 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH4/SATB1_DH1280_FCV72" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_2" + }, + "position": { + "height": 78, + "width": 100, + "x": 1058.4, + "y": 530.4 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH2/SATB1_DH1270_FCV70" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_3" + }, + "position": { + "height": 78, + "width": 100, + "x": 1058.4, + "y": 303.8 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH3/SATB1_DH1170_FCV71" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter" + }, + "position": { + "height": 20, + "width": 80, + "x": 112.97999999999999, + "y": 212.46766030883788 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES02_TT01" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_3" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_4" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_10" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_11" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_13" + }, + "position": { + "height": 20, + "width": 80, + "x": 782.9296875, + "y": 212.0119375 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "Val": 83, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES05_TT01" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_34" + }, + "position": { + "height": 20, + "width": 80, + "x": 1434, + "y": 212.0119375 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "Val": 83, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES08_TT01" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_48" + }, + "position": { + "height": 20, + "width": 80, + "x": 1993, + "y": 212.0119375 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "Val": 83, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES11_TT01" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "EmbeddedView_2" + }, + "position": { + "height": 120, + "rotate": { + "anchor": "25% 50%" + }, + "width": 290, + "x": 1114, + "y": 818.653 + }, + "props": { + "params": { + "DH": "DH101" + }, + "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", + "style": { + "bxShadow": "var(--boxShadow2)", + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_4" + }, + "position": { + "height": 78, + "rotate": { + "anchor": "39% 50%" + }, + "width": 100, + "x": 418.4, + "y": 722.5 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH4/SATB1_DH1280_FCV72" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_5" + }, + "position": { + "height": 78, + "width": 100, + "x": 391.4, + "y": 303.8 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH3/SATB1_DH1170_FCV71" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_6" + }, + "position": { + "height": 78, + "width": 100, + "x": 391.4, + "y": 530.4 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH2/SATB1_DH1270_FCV70" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_7" + }, + "position": { + "height": 78, + "width": 100, + "x": 1715.7, + "y": 530.4 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH2/SATB1_DH1270_FCV70" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Valve_A_8" + }, + "position": { + "height": 78, + "width": 100, + "x": 1715.7, + "y": 303.8 + }, + "props": { + "params": { + "Layout": 1, + "objectName": "ValveC", + "tagPath": "[Ignition_Common_IO_Gtwy]DH3/SATB1_DH1170_FCV71" + }, + "path": "Library/Symbols/Mechanical/Sym_ValveC" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_12" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_5" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_14" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_6" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_15" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_7" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_16" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_8" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_9" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_17" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_18" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_19" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_20" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_21" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_22" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_23" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_24" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_25" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_26" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 724 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_27" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 680 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_28" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_29" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_30" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_31" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_32" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_33" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_35" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 1054 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_36" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 1011.3 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_37" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_38" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_39" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.012, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_40" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_41" + }, + "position": { + "height": 20, + "width": 80, + "x": 14.6873490234375, + "y": 346.8 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_42" + }, + "position": { + "height": 20, + "width": 80, + "x": 110, + "y": 346.8 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_43" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_44" + }, + "position": { + "height": 20, + "width": 80, + "x": 303.01, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_45" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_46" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_47" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_49" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_50" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_51" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_52" + }, + "position": { + "height": 20, + "width": 80, + "x": 546, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_53" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_54" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_55" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_56" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_57" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_58" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_59" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_60" + }, + "position": { + "height": 20, + "width": 80, + "x": 814, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_61" + }, + "position": { + "height": 20, + "width": 80, + "x": 954, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_63" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_64" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_65" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_66" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_67" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_68" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_69" + }, + "position": { + "height": 20, + "width": 80, + "x": 1212, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_70" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_71" + }, + "position": { + "height": 20, + "width": 80, + "x": 1522, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_72" + }, + "position": { + "height": 20, + "width": 80, + "x": 1522, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_73" + }, + "position": { + "height": 20, + "width": 80, + "x": 1622, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_74" + }, + "position": { + "height": 20, + "width": 80, + "x": 1622, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_75" + }, + "position": { + "height": 20, + "width": 80, + "x": 1522, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_76" + }, + "position": { + "height": 20, + "width": 80, + "x": 1622, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_77" + }, + "position": { + "height": 20, + "width": 80, + "x": 1522, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_78" + }, + "position": { + "height": 20, + "width": 80, + "x": 1622, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_79" + }, + "position": { + "height": 20, + "width": 80, + "x": 1836, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_80" + }, + "position": { + "height": 20, + "width": 80, + "x": 1836, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_81" + }, + "position": { + "height": 20, + "width": 80, + "x": 1936, + "y": 302 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_82" + }, + "position": { + "height": 20, + "width": 80, + "x": 1936, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_83" + }, + "position": { + "height": 20, + "width": 80, + "x": 1836, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_84" + }, + "position": { + "height": 20, + "width": 80, + "x": 1936, + "y": 592 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_85" + }, + "position": { + "height": 20, + "width": 80, + "x": 1836, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "degF", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_86" + }, + "position": { + "height": 20, + "width": 80, + "x": 1936, + "y": 632 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "EmbeddedView_3" + }, + "position": { + "height": 120, + "rotate": { + "anchor": "25% 50%" + }, + "width": 290, + "x": 453.772, + "y": 818.653 + }, + "props": { + "params": { + "DH": "DH102" + }, + "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", + "style": { + "bxShadow": "var(--boxShadow2)", + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "EmbeddedView_4" + }, + "position": { + "height": 120, + "rotate": { + "anchor": "25% 50%" + }, + "width": 290, + "x": 1096, + "y": 393.4 + }, + "props": { + "params": { + "DH": "DH202" + }, + "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", + "style": { + "bxShadow": "var(--boxShadow2)", + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "EmbeddedView_5" + }, + "position": { + "height": 120, + "rotate": { + "anchor": "25% 50%" + }, + "width": 290, + "x": 427.767, + "y": 393.4 + }, + "props": { + "params": { + "DH": "DH203" + }, + "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", + "style": { + "bxShadow": "var(--boxShadow2)", + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "EmbeddedView_6" + }, + "position": { + "height": 120, + "rotate": { + "anchor": "25% 50%" + }, + "width": 290, + "x": 1754.75, + "y": 393.4 + }, + "props": { + "params": { + "DH": "DH201" + }, + "path": "Library/Widgets/Mechanical/Wdg_TonnageDemand_sprk", + "style": { + "bxShadow": "var(--boxShadow2)", + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_87" + }, + "position": { + "height": 20, + "width": 80, + "x": 776, + "y": 346.775 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_88" + }, + "position": { + "height": 20, + "width": 80, + "x": 660, + "y": 346.7750085830688 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_89" + }, + "position": { + "height": 20, + "width": 80, + "x": 1434.0027490234374, + "y": 346.7750085830688 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP03" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_90" + }, + "position": { + "height": 20, + "width": 80, + "x": 1328, + "y": 346.775 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]DH5/SATB1_CHW_DH5_DP04" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "meta": { + "name": "VFD Pie Chart" + }, + "position": { + "height": 140, + "width": 150, + "x": 196.6, + "y": 385.7 + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "path": "Library/Widgets/Wgt_EquipmentStatusCount", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "meta": { + "name": "VFD Pie Chart_0" + }, + "position": { + "height": 140, + "width": 150, + "x": 857.7, + "y": 382.7 + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "path": "Library/Widgets/Wgt_EquipmentStatusCount", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "meta": { + "name": "VFD Pie Chart_1" + }, + "position": { + "height": 140, + "width": 150, + "x": 1495.29, + "y": 384.7 + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "path": "Library/Widgets/Wgt_EquipmentStatusCount", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "meta": { + "name": "VFD Pie Chart_2" + }, + "position": { + "height": 140, + "width": 150, + "x": 857.7, + "y": 808.3 + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "path": "Library/Widgets/Wgt_EquipmentStatusCount", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "meta": { + "name": "VFD Pie Chart_3" + }, + "position": { + "height": 140, + "width": 150, + "x": 196.6, + "y": 808.3 + }, + "props": { + "params": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "path": "Library/Widgets/Wgt_EquipmentStatusCount", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140" + }, + "meta": { + "name": "VFD Pie Chart_4" + }, + "position": { + "height": 125, + "width": 104, + "x": 119.959, + "y": 56 + }, + "props": { + "params": { + "Tag": "Chillers", + "faulted": 8, + "running": 3, + "standby": 25 + }, + "path": "Library/Widgets/Wgt_EquipmentStatusCount", + "style": { + "overflow": "visible" + }, + "useDefaultViewWidth": true + }, + "type": "ia.display.view" + }, + { + "custom": { + "tagPath": "[Ignition_Common_IO_Gtwy]Roof" + }, + "meta": { + "name": "Supply Chart" + }, + "position": { + "height": 426, + "rotate": { + "anchor": "57% 50%" + }, + "width": 630, + "x": 1463.97, + "y": 647.54 + }, + "propConfig": { + "custom.raw": { + "binding": { + "config": { + "aggregate": "MinMax", + "avoidScanClassValidation": true, + "dateRange": { + "mostRecent": "2", + "mostRecentUnits": "HOUR" + }, + "enableValueCache": true, + "ignoreBadQuality": false, + "polling": { + "enabled": true, + "rate": "60" + }, + "preventInterpolation": false, + "returnFormat": "Wide", + "returnSize": { + "numRows": "120", + "type": "FIXED" + }, + "tags": "{this.custom.tags}", + "valueFormat": "DOCUMENT" + }, + "type": "tag-history" + } + }, + "custom.tags": { + "binding": { + "config": { + "struct": {}, + "waitOnAll": true + }, + "transforms": [ + { + "code": "\toutput \u003d []\n\taggregate \u003d \"LastValue\"\n\talias \u003d \"Value\"\n\thistProvider \u003d {\"Ignition_Common_IO_Gtwy\":\"Ignition_Hist/ignition-satb1-io6:default\",\n\t\t\t\t\t\"Ignition_SATB1_IO1_Gtwy\":\"Ignition_Hist/ignition-satb1-io1:default\",\n\t\t\t\t\t\"Ignition_SATB1_IO2_Gtwy\":\"Ignition_Hist/ignition-satb1-io2:default\"}\n\ttags \u003d system.tag.browse(self.custom.tagPath, {\"name\":\"*SYSTEM\",\"typeId\":\"Objects/Mechanical/Chiller\",\"tagType\":\"UdtInstance\"})\n\tfor item in tags:\n\t\ttagname \u003d str(item[\"fullPath\"]) + \"/Load\"\n\t\tnameparts \u003d tagname.split(\"]\")\n\t\tprovider\u003d histProvider[nameparts[0][1:]]\n\t\trun_path \u003d \"[{}]{}\".format(provider, nameparts[1])\n\t\toutput.append({\"aggregate\": aggregate, \"alias\": str(item[\"name\"]), \"path\": run_path})\n\t\n\treturn output\n\t\n\t\n\t\t\n\t\t", + "type": "script" + } + ], + "type": "expr-struct" + } + }, + "props.dataSources.Tonnage": { + "binding": { + "config": { + "struct": { + "dataset": "{this.custom.raw}" + }, + "waitOnAll": true + }, + "enabled": false, + "transforms": [ + { + "code": "\t\n\trawHist \u003d value[\u0027dataset\u0027]\n\toutput \u003d []\n\ttotal \u003d 0\n\tfor item in rawHist:\n\t\ttotal \u003d 0\n\t\tfor key in item:\n\t\t\tif key \u003d\u003d \"t_stamp\": \n\t\t\t\tstamp \u003d item[key]\n\t\t\t\tcontinue\n\t\t\tif item[key] is None:\n\t\t\t\ttotal +\u003d 0\n\t\t\telse:\n\t\t\t\ttotal +\u003d item[key]\n\t\toutput.append({\u0027t_stamp\u0027: stamp, \"total\": total})\n\treturn output\n\t\n\t", + "type": "script" + } + ], + "type": "expr-struct" + } + } + }, + "props": { + "background": { + "render": "color" + }, + "dataSources": { + "Tonnage": [ + { + "t_stamp": 1776866263502, + "total": 1673.604373568407 + }, + { + "t_stamp": 1776866323502, + "total": 1668.3232719284033 + }, + { + "t_stamp": 1776866383502, + "total": 1667.7585804841597 + }, + { + "t_stamp": 1776866443502, + "total": 1677.5819018963616 + }, + { + "t_stamp": 1776866503502, + "total": 1685.8205119174413 + }, + { + "t_stamp": 1776866563502, + "total": 1689.8692880042101 + }, + { + "t_stamp": 1776866623502, + "total": 1675.565934076644 + }, + { + "t_stamp": 1776866683502, + "total": 1677.0669210518904 + }, + { + "t_stamp": 1776866743502, + "total": 1677.0423980430648 + }, + { + "t_stamp": 1776866803502, + "total": 1669.4905979078678 + }, + { + "t_stamp": 1776866863502, + "total": 1678.9369594752789 + }, + { + "t_stamp": 1776866923502, + "total": 1687.1916379989912 + }, + { + "t_stamp": 1776866983502, + "total": 1687.3385592680215 + }, + { + "t_stamp": 1776867043502, + "total": 1695.8774153804547 + }, + { + "t_stamp": 1776867103502, + "total": 1700.6212221696458 + }, + { + "t_stamp": 1776867163502, + "total": 1705.2337151708052 + }, + { + "t_stamp": 1776867223502, + "total": 1696.7683863537602 + }, + { + "t_stamp": 1776867283502, + "total": 1692.3688050157184 + }, + { + "t_stamp": 1776867343502, + "total": 1696.0415455735406 + }, + { + "t_stamp": 1776867403502, + "total": 1702.246973531337 + }, + { + "t_stamp": 1776867463502, + "total": 1706.1742175421298 + }, + { + "t_stamp": 1776867523502, + "total": 1695.5927052647216 + }, + { + "t_stamp": 1776867583502, + "total": 1701.3725069511581 + }, + { + "t_stamp": 1776867643502, + "total": 1695.7144239444785 + }, + { + "t_stamp": 1776867703502, + "total": 1702.6068129410028 + }, + { + "t_stamp": 1776867763502, + "total": 1701.0631307816898 + }, + { + "t_stamp": 1776867823502, + "total": 1714.5919484051492 + }, + { + "t_stamp": 1776867883502, + "total": 1711.3600040150939 + }, + { + "t_stamp": 1776867943502, + "total": 1718.5114102340797 + }, + { + "t_stamp": 1776868003502, + "total": 1716.2898490025261 + }, + { + "t_stamp": 1776868063502, + "total": 1724.1854644023742 + }, + { + "t_stamp": 1776868123502, + "total": 1712.9110237981288 + }, + { + "t_stamp": 1776868183502, + "total": 1707.9297555006074 + }, + { + "t_stamp": 1776868243502, + "total": 1712.8940187229937 + }, + { + "t_stamp": 1776868303502, + "total": 1714.1118496792003 + }, + { + "t_stamp": 1776868363502, + "total": 1713.7515206119724 + }, + { + "t_stamp": 1776868423502, + "total": 1720.9529738868714 + }, + { + "t_stamp": 1776868483502, + "total": 1720.0880106587158 + }, + { + "t_stamp": 1776868543502, + "total": 1711.856543937079 + }, + { + "t_stamp": 1776868603502, + "total": 1721.124363350834 + }, + { + "t_stamp": 1776868663502, + "total": 1727.1498985698713 + }, + { + "t_stamp": 1776868723502, + "total": 1728.170471446037 + }, + { + "t_stamp": 1776868783502, + "total": 1723.909578320036 + }, + { + "t_stamp": 1776868843502, + "total": 1729.8520381218805 + }, + { + "t_stamp": 1776868903502, + "total": 1732.097751646726 + }, + { + "t_stamp": 1776868963502, + "total": 1740.9971828180521 + }, + { + "t_stamp": 1776869023502, + "total": 1734.2687255570472 + }, + { + "t_stamp": 1776869083502, + "total": 1734.2929230090335 + }, + { + "t_stamp": 1776869143502, + "total": 1734.6363186037192 + }, + { + "t_stamp": 1776869203502, + "total": 1743.9197004263635 + }, + { + "t_stamp": 1776869263502, + "total": 1737.5756559216577 + }, + { + "t_stamp": 1776869323502, + "total": 1742.9075356864444 + }, + { + "t_stamp": 1776869383502, + "total": 1746.6211894734565 + }, + { + "t_stamp": 1776869443502, + "total": 1740.8419477213345 + }, + { + "t_stamp": 1776869503502, + "total": 1733.2567053044684 + }, + { + "t_stamp": 1776869563502, + "total": 1736.0245853120891 + }, + { + "t_stamp": 1776869623502, + "total": 1739.6241111354132 + }, + { + "t_stamp": 1776869683502, + "total": 1742.343615144019 + }, + { + "t_stamp": 1776869743502, + "total": 1746.5502502787115 + }, + { + "t_stamp": 1776869803502, + "total": 1742.2633506779198 + }, + { + "t_stamp": 1776869863502, + "total": 1743.4050817623797 + }, + { + "t_stamp": 1776869923502, + "total": 1736.8477679900932 + }, + { + "t_stamp": 1776869983502, + "total": 1743.0368428952843 + }, + { + "t_stamp": 1776870043502, + "total": 1747.3324815688302 + }, + { + "t_stamp": 1776870103502, + "total": 1753.0242299943664 + }, + { + "t_stamp": 1776870163502, + "total": 1748.3851890690034 + }, + { + "t_stamp": 1776870223502, + "total": 1749.756959463162 + }, + { + "t_stamp": 1776870283502, + "total": 1752.826580690277 + }, + { + "t_stamp": 1776870343502, + "total": 1750.4432147478196 + }, + { + "t_stamp": 1776870403502, + "total": 1749.9699796187908 + }, + { + "t_stamp": 1776870463502, + "total": 1750.810513435925 + }, + { + "t_stamp": 1776870523502, + "total": 1753.6675424187536 + }, + { + "t_stamp": 1776870583502, + "total": 1753.3575761529119 + }, + { + "t_stamp": 1776870643502, + "total": 1752.998356977879 + }, + { + "t_stamp": 1776870703502, + "total": 1760.0286232986691 + }, + { + "t_stamp": 1776870763502, + "total": 1761.057042654046 + }, + { + "t_stamp": 1776870823502, + "total": 1754.2316664188131 + }, + { + "t_stamp": 1776870883502, + "total": 1760.8681574444565 + }, + { + "t_stamp": 1776870943502, + "total": 1759.0162714942785 + }, + { + "t_stamp": 1776871003502, + "total": 1755.4071409359299 + }, + { + "t_stamp": 1776871063502, + "total": 1759.701700921904 + }, + { + "t_stamp": 1776871123502, + "total": 1761.1063343853061 + }, + { + "t_stamp": 1776871183502, + "total": 1752.4834227853635 + }, + { + "t_stamp": 1776871243502, + "total": 1745.7723498193548 + }, + { + "t_stamp": 1776871303502, + "total": 1752.4357288955077 + }, + { + "t_stamp": 1776871363502, + "total": 1752.483457777643 + }, + { + "t_stamp": 1776871423502, + "total": 1767.0660551786423 + }, + { + "t_stamp": 1776871483502, + "total": 1765.361112868309 + }, + { + "t_stamp": 1776871543502, + "total": 1772.3484557221161 + }, + { + "t_stamp": 1776871603502, + "total": 1769.6380303433157 + }, + { + "t_stamp": 1776871663502, + "total": 1765.1463410465883 + }, + { + "t_stamp": 1776871723502, + "total": 1757.970170917029 + }, + { + "t_stamp": 1776871783502, + "total": 1767.2378848195076 + }, + { + "t_stamp": 1776871843502, + "total": 1765.807411055545 + }, + { + "t_stamp": 1776871903502, + "total": 1763.8420522502504 + }, + { + "t_stamp": 1776871963502, + "total": 1752.3368800322855 + }, + { + "t_stamp": 1776872023502, + "total": 1758.7938743375364 + }, + { + "t_stamp": 1776872083502, + "total": 1764.3227354980754 + }, + { + "t_stamp": 1776872143502, + "total": 1758.534891189733 + }, + { + "t_stamp": 1776872203502, + "total": 1755.7419400599197 + }, + { + "t_stamp": 1776872263502, + "total": 1747.3315513598322 + }, + { + "t_stamp": 1776872323502, + "total": 1748.0340819589003 + }, + { + "t_stamp": 1776872383502, + "total": 1762.0498406014892 + }, + { + "t_stamp": 1776872443502, + "total": 1764.9835695732045 + }, + { + "t_stamp": 1776872503502, + "total": 1760.9265243419136 + }, + { + "t_stamp": 1776872563502, + "total": 1763.0892823015924 + }, + { + "t_stamp": 1776872623502, + "total": 1754.4993179332862 + }, + { + "t_stamp": 1776872683502, + "total": 1756.0587353413346 + }, + { + "t_stamp": 1776872743502, + "total": 1757.1295786965152 + }, + { + "t_stamp": 1776872803502, + "total": 1760.5342755692782 + }, + { + "t_stamp": 1776872863502, + "total": 1769.7505698147313 + }, + { + "t_stamp": 1776872923502, + "total": 1760.3795834155528 + }, + { + "t_stamp": 1776872983502, + "total": 1773.0256561354795 + }, + { + "t_stamp": 1776873043502, + "total": 1767.426040279913 + }, + { + "t_stamp": 1776873103502, + "total": 1768.120054070619 + }, + { + "t_stamp": 1776873163502, + "total": 1769.0735871671823 + }, + { + "t_stamp": 1776873223502, + "total": 1780.5697892264104 + }, + { + "t_stamp": 1776873283502, + "total": 1782.129469384543 + }, + { + "t_stamp": 1776873343502, + "total": 1780.7831728458405 + }, + { + "t_stamp": 1776873403502, + "total": 1780.7831728458405 + } + ] + }, + "legend": { + "enabled": false + }, + "series": [ + { + "candlestick": { + "appearance": { + "deriveFieldsFromData": { + "fill": { + "color": "", + "opacity": "" + }, + "stroke": { + "color": "", + "opacity": "", + "width": "" + } + }, + "fill": { + "color": "", + "opacity": 1 + }, + "heatRules": { + "dataField": "", + "enabled": false, + "max": "", + "min": "" + }, + "stacked": false, + "stroke": { + "color": "", + "opacity": 1, + "width": 1 + } + }, + "high": { + "x": "", + "y": "" + }, + "low": { + "x": "", + "y": "" + }, + "open": { + "x": "", + "y": "" + } + }, + "column": { + "appearance": { + "deriveFieldsFromData": { + "fill": { + "color": "", + "opacity": "" + }, + "stroke": { + "color": "", + "opacity": "", + "width": "" + } + }, + "fill": { + "color": "", + "opacity": 1 + }, + "heatRules": { + "dataField": "", + "enabled": false, + "max": "", + "min": "" + }, + "height": null, + "stacked": false, + "stroke": { + "color": "", + "opacity": 1, + "width": 1 + }, + "width": null + }, + "open": { + "x": "", + "y": "" + } + }, + "data": { + "source": "Tonnage", + "x": "t_stamp", + "y": "total" + }, + "defaultState": { + "visible": true + }, + "hiddenInLegend": false, + "label": { + "text": "Process Temp" + }, + "line": { + "appearance": { + "bullets": [ + { + "deriveFieldsFromData": { + "fill": { + "color": "", + "opacity": "" + }, + "rotation": "", + "stroke": { + "color": "", + "opacity": "", + "width": "" + } + }, + "enabled": false, + "fill": { + "color": "", + "opacity": 1 + }, + "heatRules": { + "dataField": "", + "enabled": false, + "max": 100, + "min": 2 + }, + "height": 10, + "label": { + "position": { + "dx": 0, + "dy": 0 + }, + "text": "{value}" + }, + "render": "circle", + "rotation": 0, + "stroke": { + "color": "", + "opacity": 1, + "width": 1 + }, + "tooltip": { + "background": { + "color": "", + "opacity": 1 + }, + "cornerRadius": 3, + "enabled": true, + "pointerLength": 4, + "text": "{name}: [bold]{valueY}[/]" + }, + "width": 10 + } + ], + "connect": true, + "fill": { + "color": "", + "opacity": 0 + }, + "minDistance": 0.5, + "stroke": { + "color": "", + "dashArray": "", + "opacity": 1, + "width": 3 + }, + "tensionX": 1, + "tensionY": 1 + }, + "open": { + "x": "", + "y": "" + } + }, + "name": "Tonnage", + "render": "line", + "stepLine": { + "appearance": { + "bullets": [ + { + "deriveFieldsFromData": { + "fill": { + "color": "", + "opacity": "" + }, + "rotation": "", + "stroke": { + "color": "", + "opacity": "", + "width": "" + } + }, + "enabled": true, + "fill": { + "color": "", + "opacity": 1 + }, + "heatRules": { + "dataField": "", + "enabled": false, + "max": 100, + "min": 2 + }, + "height": 10, + "label": { + "position": { + "dx": 0, + "dy": 0 + }, + "text": "{value}" + }, + "render": "circle", + "rotation": 0, + "stroke": { + "color": "", + "opacity": 1, + "width": 1 + }, + "tooltip": { + "background": { + "color": "", + "opacity": 1 + }, + "cornerRadius": 3, + "enabled": true, + "pointerLength": 4, + "text": "{name}: [bold]{valueY}[/]" + }, + "width": 10 + } + ], + "connect": true, + "fill": { + "color": "", + "opacity": 0 + }, + "minDistance": 0.5, + "stroke": { + "color": "", + "dashArray": "", + "opacity": 1, + "width": 3 + }, + "tensionX": 1, + "tensionY": 1 + }, + "open": { + "x": "", + "y": "" + } + }, + "tooltip": { + "background": { + "color": "", + "opacity": 1 + }, + "cornerRadius": 3, + "enabled": true, + "pointerLength": 4, + "text": "{name}: [bold]{valueY}[/]" + }, + "visible": true, + "xAxis": "time", + "yAxis": "Tonnage", + "zIndex": 0 + } + ], + "style": { + "overflow": "visible", + "paddingRight": 5 + }, + "title": { + "text": "Supply (Tons)" + }, + "xAxes": [ + { + "appearance": { + "font": { + "size": "", + "weight": 500 + }, + "grid": { + "color": "", + "dashArray": "", + "minDistance": 60, + "opacity": 0.5, + "position": 0.5 + }, + "inside": false, + "labels": { + "color": "", + "horizontalCenter": "middle", + "opacity": 1, + "rotation": 0, + "verticalCenter": "middle" + }, + "opposite": false + }, + "category": { + "break": { + "enabled": false, + "endCategory": "", + "size": 0.05, + "startCategory": "" + } + }, + "date": { + "baseInterval": { + "count": 30, + "enabled": true, + "skipEmptyPeriods": false, + "timeUnit": "second" + }, + "break": { + "enabled": false, + "endDate": "", + "size": 0.05, + "startDate": "" + }, + "format": "HH:mm", + "inputFormat": "HH:mm", + "range": { + "max": "", + "min": "", + "useStrict": false + } + }, + "inversed": false, + "label": { + "color": "", + "enabled": false, + "text": "Time" + }, + "name": "time", + "render": "date", + "tooltip": { + "background": { + "color": "", + "opacity": 1 + }, + "cornerRadius": 3, + "enabled": true, + "pointerLength": 4, + "text": "" + }, + "value": { + "break": { + "enabled": false, + "endValue": 100, + "size": 0.05, + "startValue": 0 + }, + "format": "#,###.##", + "logarithmic": false, + "range": { + "max": "", + "min": "", + "useStrict": false + } + }, + "visible": true + } + ], + "yAxes": [ + { + "appearance": { + "font": { + "size": "", + "weight": 500 + }, + "grid": { + "color": "", + "dashArray": "", + "minDistance": null, + "opacity": 0.5, + "position": 0.5 + }, + "inside": false, + "labels": { + "color": "", + "horizontalCenter": "middle", + "opacity": 1, + "rotation": 0, + "verticalCenter": "middle" + }, + "opposite": false + }, + "category": { + "break": { + "enabled": false, + "endCategory": "", + "size": 0.05, + "startCategory": "" + } + }, + "date": { + "baseInterval": { + "count": 1, + "enabled": false, + "skipEmptyPeriods": false, + "timeUnit": "hour" + }, + "break": { + "enabled": false, + "endDate": "", + "size": 0.05, + "startDate": "" + }, + "format": "M/d/yyyy HH:mm:ss", + "inputFormat": "yyyy-MM-dd kk:mm:ss", + "range": { + "max": 10000, + "min": 0, + "useStrict": false + } + }, + "inversed": false, + "label": { + "color": "", + "enabled": false, + "text": "CHWS" + }, + "name": "Tonnage", + "render": "value", + "tooltip": { + "background": { + "color": "", + "opacity": 1 + }, + "cornerRadius": 3, + "enabled": true, + "pointerLength": 4, + "text": "" + }, + "value": { + "break": { + "enabled": false, + "endValue": 100, + "size": 0.05, + "startValue": 0 + }, + "format": "#,###.##", + "logarithmic": false, + "range": { + "max": "", + "min": "", + "useStrict": false + } + }, + "visible": true + } + ] + }, + "type": "ia.chart.xy" + }, + { + "meta": { + "name": "Transmitter_62" + }, + "position": { + "height": 20, + "width": 80, + "x": 2048, + "y": 240.491 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "gpm", + "EU_Pos": 1, + "Size": 12, + "Val": 83, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TES11_TT01" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_91" + }, + "position": { + "height": 20, + "width": 80, + "x": 154, + "y": 260 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_TT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "Transmitter_92" + }, + "position": { + "height": 20, + "width": 80, + "x": 152, + "y": 303 + }, + "props": { + "params": { + "Bkgnd_EN": false, + "EU": "psig", + "EU_Pos": 1, + "Size": 12, + "objectName": "AnalogIn", + "tagPath": "[Ignition_Common_IO_Gtwy]MPR1140/SATB1_CHW_FT02" + }, + "path": "Library/Symbols/Sym_Xmtr", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "EmbeddedView_0" + }, + "position": { + "height": 153, + "width": 1833, + "x": 229.99, + "y": 39.46 + }, + "props": { + "path": "Library/Cards/Card_CH_Overview", + "style": { + "overflow": "visible" + } + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": 1, + "y": 0 + }, + "scripts": { + "customMethods": [], + "extensionFunctions": null, + "messageHandlers": [ + { + "messageType": "eqPopupMsg", + "pageScope": true, + "script": "\tutils.nav.eqPopupMsg(self, payload)", + "sessionScope": false, + "viewScope": false + } + ] + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/resource.json index b01eba6..9a50a8d 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/resource.json @@ -8,10 +8,10 @@ "thumbnail.png" ], "attributes": { - "lastModificationSignature": "629fe1cb83c30a512c68d52d189fbd1828bff02121a59818223f90be2ea94f6a", + "lastModificationSignature": "1611cc4d2b03e39aba0f5253cf2a8c091659287de25cf4b2f69180dc19bd7b43", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-25T17:16:09Z" + "timestamp": "2026-05-02T02:06:33Z" } } } \ No newline at end of file diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/thumbnail.png b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/thumbnail.png index 20c1f25..c57e5fc 100644 Binary files a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/thumbnail.png and b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/thumbnail.png differ diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/view.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/view.json index 2fedb1d..bfe03c5 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/view.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.perspective/views/Pages/Mechanical/Skid_Details/view.json @@ -18,10 +18,10 @@ "children": [ { "meta": { - "name": "EmbeddedView" + "name": "ChillersCard" }, "position": { - "basis": "166px" + "basis": "170px" }, "props": { "path": "Library/Cards/Card_CH_Overview", @@ -37,7 +37,7 @@ "children": [ { "meta": { - "name": "EmbeddedView" + "name": "Diagram" }, "position": { "grow": 1 @@ -52,7 +52,7 @@ }, { "meta": { - "name": "EmbeddedView_0" + "name": "Indicators" }, "position": { "basis": "200px" @@ -68,7 +68,7 @@ } ], "meta": { - "name": "FlexContainer" + "name": "Status" }, "position": { "grow": 1 @@ -76,7 +76,7 @@ "props": { "direction": "column", "style": { - "gap": "10px", + "gap": "var(--space-md)", "overflow": "visible" } }, @@ -84,10 +84,10 @@ }, { "meta": { - "name": "EmbeddedView" + "name": "Control" }, "position": { - "basis": "400px" + "basis": "300px" }, "props": { "path": "Library/Cards/Card_CH_Control", @@ -99,11 +99,14 @@ } ], "meta": { - "name": "FlexContainer" + "name": "GroupDetails" + }, + "position": { + "grow": 1 }, "props": { "style": { - "gap": "10px", + "gap": "var(--space-md)", "overflow": "visible" } }, @@ -117,8 +120,8 @@ "direction": "column", "style": { "backgroundColor": "var(--containerRoot)", - "gap": "10px", - "padding": "10px" + "gap": "var(--space-md)", + "padding": "var(--space-md)" } }, "type": "ia.container.flex" diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/doGet.py b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/doGet.py index 15b1523..d00e094 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/doGet.py +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/doGet.py @@ -67,8 +67,8 @@ def doGet(request, session): position: absolute; top: 0; left: 0; - width: 100%; - height: 100%; + width: 100vw; + height: 100vh; } #content { @@ -78,8 +78,8 @@ def doGet(request, session): top: 62px; width: 100%; /*replace-width*/ height: 100%; /*replace-height*/ - border: none; + } #overlay { diff --git a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/resource.json b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/resource.json index 163b1d9..2d7657f 100644 --- a/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/resource.json +++ b/Gateways/FE/projects/SDC_PHX_A7/com.inductiveautomation.webdev/resources/pan-zoom-iframe/html/resource.json @@ -15,10 +15,10 @@ "doDelete.py" ], "attributes": { - "lastModificationSignature": "b47406feebd14c16b784658d017d8eba72bbeefe77edeaadd79e601589a2b25a", + "lastModificationSignature": "c6a4fab9a82234c102fbe61ccb97ce951a43c93972a31ce11b2404b97b046363", "lastModification": { "actor": "Emmanuel", - "timestamp": "2026-04-16T21:53:06Z" + "timestamp": "2026-04-28T22:53:58Z" } } } \ No newline at end of file diff --git a/Gateways/FE/themes/stream-light/variables.css b/Gateways/FE/themes/stream-light/variables.css index 357aa9f..d54483c 100755 --- a/Gateways/FE/themes/stream-light/variables.css +++ b/Gateways/FE/themes/stream-light/variables.css @@ -26,9 +26,11 @@ --elec-tripped: var(--goldenyellow); --elec-maintenance: var(--sunsetorange); --elec-disabled: var(--gray); - + /* Flow */ + --flow-supply: #09B858; + --flow-return: #EB9809; /* States Performance */ - --state-running: #ffffff; + --state-running: #E3F2FD; --state-standby: var(--gray); --state-faulted: var(--alarmred); --state-auto: #013d85; @@ -61,9 +63,12 @@ --units-color: var(--gray); /* Texto */ - --text-primary: #161616; - --text-secondary: #5E5E5E; - --text-inverse: #ffffff; + --text-primary: #263367; + --text-primary-inverse: #FFFFFF; + --text-on-dark: #1E1E1E; + --text-on-light: ##F2F2F2: + --text-secondary: #53575a; + --text-eu: #909497; --text-muted: #767676; /* Unidades y detalles */ /* nav styles */