{ "custom": { "OCmd": { "Occupied": null, "sEND": null }, "tagPaths": [ "[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" ] }, "params": { "auth": { "almAck": true, "almShelve": true, "config": true, "control": true }, "tagPath": "[Ignition_Common_IO_Gtwy]VAV/SATB1_VAV_Master" }, "propConfig": { "custom.OCmd": { "persistent": true }, "custom.OCmd.Send": { "binding": { "config": { "bidirectional": true, "fallbackDelay": 2.5, "mode": "indirect", "references": { "tagPath": "{view.params.tagPath}" }, "tagPath": "{tagPath}/Control/OCmd_SendALL" }, "type": "tag" } }, "custom.tagPaths": { "binding": { "config": { "struct": { "hb": "now(3000)" }, "waitOnAll": true }, "enabled": false, "transforms": [ { "code": "\tIO_Gateways \u003d [\"[Ignition_Common_IO_Gtwy]\"]\n\t\t\t\t\n\t#Change manually the gateway to search through\n\tpath \u003d IO_Gateways[0]\n\t\n\ttagType \u003d {\"tagType\":\"UdtInstance\"}\n\t#Look for this udt type\n\ttypeId \u003d \"Objects/Air/VAV v2\"\n\tdef recursive_browser(base_path, type_id):\n\t\tfound_udt_paths \u003d []\n\t\tbrowse_results \u003d system.tag.browse(base_path)\n\t\tfor item in browse_results:\n\t\t\titem_fullPath \u003d item.get(\u0027fullPath\u0027, \u0027N/A\u0027)\n\t\t\titem_tag_type \u003d item.get(\u0027tagType\u0027, \u0027N/A\u0027)\n\t\t\titem_type_id \u003d item.get(\u0027typeId\u0027, \u0027N/A\u0027)\n\t\t\t\n\t\t\tif str(item_type_id) \u003d\u003d type_id:\n\t\t\t\tfound_udt_paths.append(item_fullPath)\n\t\t\tif str(item_tag_type) \u003d\u003d \"Folder\":\n\t\t\t\tfound_udt_paths.extend(recursive_browser(item_fullPath, type_id))\n\t\treturn found_udt_paths\n\treturn recursive_browser(path, typeId)\n", "type": "script" } ], "type": "expr-struct" }, "persistent": true }, "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.Send \u003d True" }, "scope": "G", "type": "script" } } }, "meta": { "name": "AutoBtn" }, "position": { "basis": "100%" }, "propConfig": { "props.enabled": { "binding": { "config": { "path": "view.params.auth.control" }, "type": "property" } } }, "props": { "primary": false, "text": "Send to all VAV" }, "type": "ia.input.button" } ], "meta": { "name": "Row1" }, "position": { "basis": "50px" }, "props": { "style": { "gap": "10px", "overflow": "visible" } }, "type": "ia.container.flex" } ], "meta": { "name": "Left control Container" }, "position": { "basis": "50%" }, "props": { "direction": "column", "style": { "gap": "10px", "overflow": "visible" } }, "type": "ia.container.flex" }, { "children": [ { "children": [ { "meta": { "name": "Label" }, "position": { "basis": "50%" }, "props": { "text": "Occupied Temperature Setpoint", "textStyle": { "textAlign": "right" } }, "type": "ia.display.label" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tpaths \u003d self.view.custom.tagPaths\n\ttags \u003d []\n\tvalues \u003d []\n\tfor path in paths:\n\t\ttags.append(\"{}/Control/Occupied Temp Setpoint\".format(path))\n\t\tvalues.append(self.props.value)\n\tsystem.tag.writeBlocking(tags, values) " }, "scope": "G", "type": "script" } } }, "meta": { "name": "NumericEntryField" }, "position": { "basis": "50%", "grow": 1 }, "propConfig": { "props.enabled": { "binding": { "config": { "path": "view.params.auth.control" }, "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/OCmd_OccTempSP" }, "type": "tag" } } }, "props": { "inputBounds": { "maximum": 104, "minimum": 50 }, "style": { "fontWeight": "bold", "min-height": "30px" } }, "type": "ia.input.numeric-entry-field" } ], "meta": { "name": "Row2" }, "position": { "basis": "58px" }, "props": { "style": { "gap": "10px" } }, "type": "ia.container.flex" }, { "children": [ { "meta": { "name": "Label" }, "position": { "basis": "50%" }, "props": { "text": "Unoccupied Temperature Setpoint", "textStyle": { "textAlign": "right" } }, "type": "ia.display.label" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tpaths \u003d self.view.custom.tagPaths\n\ttags \u003d []\n\tvalues \u003d []\n\tfor path in paths:\n\t\ttags.append(\"{}/Control/Unoccupied Temperature SP\".format(path))\n\t\tvalues.append(self.props.value)\n\tsystem.tag.writeBlocking(tags, values) " }, "scope": "G", "type": "script" } } }, "meta": { "name": "NumericEntryField" }, "position": { "basis": "50%", "grow": 1 }, "propConfig": { "props.enabled": { "binding": { "config": { "path": "view.params.auth.control" }, "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/OCmd_UnOccModeTempSP" }, "type": "tag" } } }, "props": { "inputBounds": { "maximum": 82, "minimum": 65 }, "style": { "fontWeight": "bold", "min-height": "30px" } }, "type": "ia.input.numeric-entry-field" } ], "meta": { "name": "Row3" }, "position": { "basis": "58px" }, "props": { "style": { "gap": "10px" } }, "type": "ia.container.flex" }, { "children": [ { "meta": { "name": "Label" }, "position": { "basis": "50%" }, "props": { "text": "Occupied Mode Start Hour", "textStyle": { "textAlign": "right" } }, "type": "ia.display.label" }, { "meta": { "name": "NumericEntryField" }, "position": { "basis": "50%", "grow": 1 }, "propConfig": { "props.enabled": { "binding": { "config": { "path": "view.params.auth.control" }, "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/OCmd_OccModeStartHR" }, "type": "tag" } } }, "props": { "style": { "fontWeight": "bold", "min-height": "30px" } }, "type": "ia.input.numeric-entry-field" } ], "meta": { "name": "Row5" }, "position": { "basis": "58px" }, "props": { "style": { "gap": "10px" } }, "type": "ia.container.flex" }, { "children": [ { "meta": { "name": "Label" }, "position": { "basis": "50%" }, "props": { "text": "Unoccupied Mode Start Hour", "textStyle": { "textAlign": "right" } }, "type": "ia.display.label" }, { "meta": { "name": "NumericEntryField" }, "position": { "basis": "50%", "grow": 1 }, "propConfig": { "props.enabled": { "binding": { "config": { "path": "view.params.auth.control" }, "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/OCmd_UnOccModeStartHR" }, "type": "tag" } } }, "props": { "style": { "fontWeight": "bold", "min-height": "30px" } }, "type": "ia.input.numeric-entry-field" } ], "meta": { "name": "Row6" }, "position": { "basis": "58px" }, "props": { "style": { "gap": "10px" } }, "type": "ia.container.flex" } ], "meta": { "name": "Right control Container" }, "position": { "basis": "50%" }, "props": { "direction": "column", "style": { "gap": "10px" } }, "type": "ia.container.flex" } ], "meta": { "name": "root" }, "props": { "style": { "classes": "containers/padded-container", "gap": "10px" } }, "type": "ia.container.flex" } }