From 532e512b4c83fc40d2ef4d8e656daa0e5b5ec2dc Mon Sep 17 00:00:00 2001 From: bmidf <81828475+bmidf@users.noreply.github.com> Date: Tue, 22 Jul 2025 12:44:17 +0400 Subject: [PATCH] first commit --- .gitignore | 53 + .../CHANGE DPM NAMES TO DEFAULT/main.py | 27 + .../CHANGE DPM NAMES TO DEFAULT/view.json | 1413 ++++++++++ .../dpm_mapping.txt | 17 + .../CHANGE EXISTING DPM VIEW NAMES/main.py | 85 + .../modified_view.json | 1417 ++++++++++ .../CHANGE EXISTING DPM VIEW NAMES/view.json | 1417 ++++++++++ OTHER SCRIPTS/CREATE MCM VIEWS/main.py | 373 +++ PLACE DPM DEVICES/device_mapping.txt | 156 ++ PLACE DPM DEVICES/main.py | 206 ++ PLACE DPM DEVICES/resource.json | 17 + PLACE DPM DEVICES/thumbnail.png | Bin 0 -> 147565 bytes PLACE DPMS/EXAMPLES/DPM10/view.json | 1388 ++++++++++ PLACE DPMS/EXAMPLES/DPM11/view.json | 1440 ++++++++++ PLACE DPMS/EXAMPLES/DPM12/view.json | 1623 +++++++++++ PLACE DPMS/EXAMPLES/DPM13/view.json | 1664 +++++++++++ PLACE DPMS/EXAMPLES/DPM14/view.json | 1834 +++++++++++++ PLACE DPMS/EXAMPLES/DPM15/view.json | 1922 +++++++++++++ PLACE DPMS/EXAMPLES/DPM2/view.json | 418 +++ PLACE DPMS/EXAMPLES/DPM3/view.json | 487 ++++ PLACE DPMS/EXAMPLES/DPM4/view.json | 640 +++++ PLACE DPMS/EXAMPLES/DPM5/view.json | 718 +++++ PLACE DPMS/EXAMPLES/DPM6/view.json | 887 ++++++ PLACE DPMS/EXAMPLES/DPM7/view.json | 970 +++++++ PLACE DPMS/EXAMPLES/DPM8/view.json | 1226 +++++++++ PLACE DPMS/EXAMPLES/DPM9/view.json | 1307 +++++++++ PLACE DPMS/EXAMPLES/RT/resource.json | 17 + PLACE DPMS/EXAMPLES/RT/thumbnail.png | Bin 0 -> 46172 bytes PLACE DPMS/dpm_mapping.txt | 33 + PLACE DPMS/main.py | 118 + README.md | 66 + RESET IGNITION/main.py | 63 + TAGS/MCM01.json | 1804 ++++++++++++ TAGS/MCM02.json | 1570 +++++++++++ TAGS/MCM03.json | 675 +++++ TAGS/MCM04.json | 2434 +++++++++++++++++ TAGS/MCM05.json | 2368 ++++++++++++++++ TAGS/MCM06.json | 1247 +++++++++ TAGS/MCM07.json | 1437 ++++++++++ TAGS/apply-tags.py | 108 + TAGS/generate-tags.py | 296 ++ TAGS/keep-unique.py | 50 + build.py | 271 ++ 43 files changed, 34262 insertions(+) create mode 100644 .gitignore create mode 100644 OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/main.py create mode 100644 OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/view.json create mode 100644 OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/dpm_mapping.txt create mode 100644 OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/main.py create mode 100644 OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/modified_view.json create mode 100644 OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/view.json create mode 100644 OTHER SCRIPTS/CREATE MCM VIEWS/main.py create mode 100644 PLACE DPM DEVICES/device_mapping.txt create mode 100644 PLACE DPM DEVICES/main.py create mode 100644 PLACE DPM DEVICES/resource.json create mode 100644 PLACE DPM DEVICES/thumbnail.png create mode 100644 PLACE DPMS/EXAMPLES/DPM10/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM11/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM12/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM13/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM14/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM15/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM2/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM3/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM4/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM5/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM6/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM7/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM8/view.json create mode 100644 PLACE DPMS/EXAMPLES/DPM9/view.json create mode 100644 PLACE DPMS/EXAMPLES/RT/resource.json create mode 100644 PLACE DPMS/EXAMPLES/RT/thumbnail.png create mode 100644 PLACE DPMS/dpm_mapping.txt create mode 100644 PLACE DPMS/main.py create mode 100644 README.md create mode 100644 RESET IGNITION/main.py create mode 100644 TAGS/MCM01.json create mode 100644 TAGS/MCM02.json create mode 100644 TAGS/MCM03.json create mode 100644 TAGS/MCM04.json create mode 100644 TAGS/MCM05.json create mode 100644 TAGS/MCM06.json create mode 100644 TAGS/MCM07.json create mode 100644 TAGS/apply-tags.py create mode 100644 TAGS/generate-tags.py create mode 100644 TAGS/keep-unique.py create mode 100644 build.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d95bb50 --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +# Build artifacts +dist/ +build/ +*.spec +temp_folders.zip +folder_creator_embedded_final.py + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# PyInstaller +*.manifest +*.spec + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +desktop.ini + +# Temporary files +*.tmp +*.temp +*.log + +# Output folders created by scripts +MCMs/ +MCM/ +OUTPUT/ + +# Backup files +*.bak +*.backup \ No newline at end of file diff --git a/OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/main.py b/OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/main.py new file mode 100644 index 0000000..8bdf5bb --- /dev/null +++ b/OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/main.py @@ -0,0 +1,27 @@ +import json + +def main(): + with open("view.json", "r") as f: + view = json.load(f) + + dpm_device_idx = 1 + dpm_label_idx = 1 + + for child in view["root"]["children"]: + # Update DPM device names (skip MCM, which is usually named 'MCM') + if child.get("type") == "ia.display.view" and child["meta"].get("name") != "MCM": + child["meta"]["name"] = f"DPM{dpm_device_idx}_DEVICE" + dpm_device_idx += 1 + # Update DPM label names and text + elif child.get("type") == "ia.display.label": + child["meta"]["name"] = f"DPM{dpm_label_idx}_label" + child["props"]["text"] = f"DPM{dpm_label_idx}_TEXT" + dpm_label_idx += 1 + + with open("view.json", "w") as f: + json.dump(view, f, indent=2) + + print("DPM device and label names/texts updated and saved to view_renamed.json") + +if __name__ == "__main__": + main() diff --git a/OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/view.json b/OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/view.json new file mode 100644 index 0000000..fe45707 --- /dev/null +++ b/OTHER SCRIPTS/CHANGE DPM NAMES TO DEFAULT/view.json @@ -0,0 +1,1413 @@ +{ + "custom": { + "dpm1-dpm2": false, + "dpm10-dpm11": false, + "dpm11-mcm": false, + "dpm2-dpm3": false, + "dpm3-dpm4": false, + "dpm4-dpm5": false, + "dpm5-dpm6": false, + "dpm6-dpm7": false, + "dpm7-dpm8": false, + "dpm8-dpm9": false, + "dpm9-dpm10": false, + "mcm_dpm1": false + }, + "params": { + "tagProps": [ + "System/MCM04/MCM04", + "System/MCM04/Field_Devices/DPM/PRS3_5_DPM1", + "System/MCM04/Field_Devices/DPM/PS11_7_DPM1", + "System/MCM04/Field_Devices/DPM/VSC_DPM3", + "System/MCM04/Field_Devices/DPM/VSC_DPM2", + "System/MCM04/Field_Devices/DPM/FL3016_2_DPM1", + "System/MCM04/Field_Devices/DPM/VSC_DPM1", + "System/MCM04/Field_Devices/DPM/VSA_DPM1_7", + "System/MCM04/Field_Devices/DPM/FL1034_2_DPM1", + "System/MCM04/Field_Devices/DPM/VSA_DPM2", + "System/MCM04/Field_Devices/DPM/VSA_DPM3", + "System/MCM04/Field_Devices/DPM/PS10_2_DPM1" + ] + }, + "propConfig": { + "custom.dpm1-dpm2": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagProps[1]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{1}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm10-dpm11": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "10": "{view.params.tagProps[10]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{10}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm11-mcm": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "11": "{view.params.tagProps[11]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{11}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm2-dpm3": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "2": "{view.params.tagProps[2]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{2}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm3-dpm4": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "3": "{view.params.tagProps[3]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{3}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 1, + "output": false + }, + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm4-dpm5": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "4": "{view.params.tagProps[4]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{4}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm5-dpm6": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "5": "{view.params.tagProps[5]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{5}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm6-dpm7": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "6": "{view.params.tagProps[6]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{6}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm7-dpm8": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "7": "{view.params.tagProps[7]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{7}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm8-dpm9": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "8": "{view.params.tagProps[8]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{8}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm9-dpm10": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "9": "{view.params.tagProps[9]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{9}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.mcm_dpm1": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "0": "{view.params.tagProps[0]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "params.tagProps": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 894, + "width": 1920 + } + }, + "root": { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM1_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm6-dpm7" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": true, + "Down3": false, + "DownLeft": false, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM2_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm6-dpm7" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM3_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm2-dpm3" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PS11_7_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM4_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": true, + "Down3": false, + "InDown": false, + "InLeft": false, + "InUp": true, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/FL1034_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM5_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": false, + "DownLeft": false, + "DownRight": true, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/FL3016_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM6_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownLeft": true, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM2" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM7_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm9-dpm10" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": true, + "InDown": false, + "InLeft": false, + "InUp": true, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM2" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM8_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm9-dpm10" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm10-dpm11" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": true, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM3" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM9_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm10-dpm11" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm11-mcm" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "tagProps": [ + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value" + ], + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PS10_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "MCM" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75, + "y": 0.6666 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm11-mcm" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true + }, + "path": "Windows/Tabs/Enternet Windows/Components/EN4TR" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "DPM1_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.7302, + "y": 0.4125 + }, + "props": { + "text": "DPM1_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM2_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.7302, + "y": 0.0747 + }, + "props": { + "text": "DPM2_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM3_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4755, + "y": 0.0748 + }, + "props": { + "text": "DPM3_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM4_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4726, + "y": 0.4125 + }, + "props": { + "text": "DPM4_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM5_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4755, + "y": 0.7438 + }, + "props": { + "text": "DPM5_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM6_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2279, + "y": 0.7437 + }, + "props": { + "text": "DPM6_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM7_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0062, + "y": 0.7079 + }, + "props": { + "text": "DPM7_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM8_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2281, + "y": 0.4125 + }, + "props": { + "text": "DPM8_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM9_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2284, + "y": 0.0744 + }, + "props": { + "text": "DPM9_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM10_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0484, + "y": 0.278 + }, + "props": { + "text": "DPM10_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM11_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0064, + "y": 0.3772 + }, + "props": { + "text": "DPM11_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM10_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": true, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "tagProps": [ + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value" + ], + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PRS3_5_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM11_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm2-dpm3" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM3" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": 120, + "y": -723 + }, + "props": { + "mode": "percent", + "style": { + "backgroundColor": "#ffffff" + } + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/dpm_mapping.txt b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/dpm_mapping.txt new file mode 100644 index 0000000..53b8275 --- /dev/null +++ b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/dpm_mapping.txt @@ -0,0 +1,17 @@ +MCM01 +DPM1_UL1_4 11.200.1.2 +UL2_4_DPM1 11.200.1.3 +MCM02 +UL2_4_DPM1 11.200.1.3 +DPM3_UL4_4 11.200.1.4 +DPM4_UL5_4 11.200.1.5 +MCM03 +UL2_4_DPM1 11.200.1.3 +DPM3_UL4_4 11.200.1.4 +DPM4_UL5_4 11.200.1.5 +DPM5_UL7_4 11.200.1.6 +MCM04 +DPM1_UL1_4 11.200.1.2 +UL2_4_DPM1 11.200.1.3 +DPM3_UL4_4 11.200.1.4 +DPM4_UL5_4 11.200.1.5 \ No newline at end of file diff --git a/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/main.py b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/main.py new file mode 100644 index 0000000..5576776 --- /dev/null +++ b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/main.py @@ -0,0 +1,85 @@ +import json +import re +import sys + +def read_mapping(mapping_file): + """ + Read device-to-IP mapping from a text file. + Format: + Returns a dictionary with DPM{number}_DEVICE and DPM{number}_TEXT mappings. + """ + mapping = {} + try: + with open(mapping_file, 'r') as f: + for i, line in enumerate(f, 1): + line = line.strip() + if not line or line.startswith('#'): + continue + try: + device, ip = line.split() + mapping[f"DPM{i}_DEVICE"] = device + mapping[f"DPM{i}_TEXT"] = f"{device} {ip}" + except ValueError: + print(f"Warning: Skipping invalid line {i} in {mapping_file}: '{line}'") + return mapping + except FileNotFoundError: + print(f"Error: Mapping file {mapping_file} not found.") + sys.exit(1) + except Exception as e: + print(f"Error reading mapping file: {str(e)}") + sys.exit(1) + +def replace_placeholders(data, mapping): + """ + Recursively replace placeholders in the data structure with values from mapping. + """ + if isinstance(data, dict): + return {k: replace_placeholders(v, mapping) for k, v in data.items()} + elif isinstance(data, list): + return [replace_placeholders(item, mapping) for item in data] + elif isinstance(data, str): + for placeholder, value in mapping.items(): + data = re.sub(r'\b' + re.escape(placeholder) + r'\b', value, data) + return data + else: + return data + +def process_view_json(input_file, output_file, mapping): + """ + Process view.json, replace placeholders, and save to output_file. + """ + try: + with open(input_file, 'r') as f: + data = json.load(f) + + modified_data = replace_placeholders(data, mapping) + + with open(output_file, 'w') as f: + json.dump(modified_data, f, indent=4) + + print(f"Successfully processed {input_file} and saved to {output_file}") + + except FileNotFoundError: + print(f"Error: The file {input_file} was not found.") + sys.exit(1) + except json.JSONDecodeError: + print(f"Error: The file {input_file} is not a valid JSON file.") + sys.exit(1) + except Exception as e: + print(f"An error occurred: {str(e)}") + sys.exit(1) + +def main(): + if len(sys.argv) != 3: + print("Usage: python replace_placeholders.py ") + sys.exit(1) + + mapping_file = sys.argv[1] + input_json_file = sys.argv[2] + output_json_file = "view.json" + + mapping = read_mapping(mapping_file) + process_view_json(input_json_file, output_json_file, mapping) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/modified_view.json b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/modified_view.json new file mode 100644 index 0000000..9011085 --- /dev/null +++ b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/modified_view.json @@ -0,0 +1,1417 @@ +{ + "custom": { + "dpm1-dpm2": false, + "dpm10-dpm11": false, + "dpm11-mcm": false, + "dpm2-dpm3": false, + "dpm3-dpm4": false, + "dpm4-dpm5": false, + "dpm5-dpm6": true, + "dpm6-dpm7": false, + "dpm7-dpm8": false, + "dpm8-dpm9": false, + "dpm9-dpm10": false, + "mcm_dpm1": false + }, + "params": { + "tagProps": [ + "System/MCM04/MCM04", + "System/MCM04/Field_Devices/DPM/PRS3_5_DPM1", + "System/MCM04/Field_Devices/DPM/PS11_7_DPM1", + "System/MCM04/Field_Devices/DPM/VSC_DPM3", + "System/MCM04/Field_Devices/DPM/VSC_DPM2", + "System/MCM04/Field_Devices/DPM/FL3016_2_DPM1", + "System/MCM04/Field_Devices/DPM/VSC_DPM1", + "System/MCM04/Field_Devices/DPM/VSA_DPM1_7", + "System/MCM04/Field_Devices/DPM/FL1034_2_DPM1", + "System/MCM04/Field_Devices/DPM/VSA_DPM2", + "System/MCM04/Field_Devices/DPM/VSA_DPM3", + "System/MCM04/Field_Devices/DPM/PS10_2_DPM1" + ] + }, + "propConfig": { + "custom.dpm1-dpm2": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagProps[1]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{1}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + }, + { + "input": 1, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm10-dpm11": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "10": "{view.params.tagProps[10]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{10}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm11-mcm": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "11": "{view.params.tagProps[11]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{11}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm2-dpm3": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "2": "{view.params.tagProps[2]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{2}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm3-dpm4": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "3": "{view.params.tagProps[3]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{3}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 1, + "output": false + }, + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm4-dpm5": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "4": "{view.params.tagProps[4]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{4}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm5-dpm6": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "5": "{view.params.tagProps[5]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{5}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm6-dpm7": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "6": "{view.params.tagProps[6]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{6}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm7-dpm8": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "7": "{view.params.tagProps[7]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{7}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm8-dpm9": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "8": "{view.params.tagProps[8]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{8}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm9-dpm10": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "9": "{view.params.tagProps[9]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{9}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.mcm_dpm1": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "0": "{view.params.tagProps[0]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "params.tagProps": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 894, + "width": 1920 + } + }, + "root": { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM1_UL1_4" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": true, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "tagProps": [ + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value" + ], + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PRS3_5_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "UL2_4_DPM1" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm2-dpm3" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PS11_7_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM3_UL4_4" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm2-dpm3" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM3" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM4_UL5_4" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownLeft": true, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM2" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM5_UL7_4" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": false, + "DownLeft": false, + "DownRight": true, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/FL3016_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM6_UL8_3" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm6-dpm7" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM7_UL10_3" + }, + "position": { + "height": 0.3333, + "width": 0.25 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm6-dpm7" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": true, + "Down3": false, + "DownLeft": false, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM8_UL11_4" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": true, + "Down3": false, + "InDown": false, + "InLeft": false, + "InUp": true, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/FL1034_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM9_PS1_4" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm9-dpm10" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": true, + "InDown": false, + "InLeft": false, + "InUp": true, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM2" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM10_PS3_6" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm9-dpm10" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm10-dpm11" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": true, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM3" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM11_PS4_7" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm10-dpm11" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm11-mcm" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "tagProps": [ + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value" + ], + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PS10_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "MCM" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75, + "y": 0.6666 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm11-mcm" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true + }, + "path": "Windows/Tabs/Enternet Windows/Components/EN4TR" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "DPM1_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.7302, + "y": 0.4125 + }, + "props": { + "text": "DPM1_UL1_4 11.200.1.2", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM2_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.7302, + "y": 0.0747 + }, + "props": { + "text": "UL2_4_DPM1 11.200.1.3", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM3_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4755, + "y": 0.0748 + }, + "props": { + "text": "DPM3_UL4_4 11.200.1.4", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM4_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4726, + "y": 0.4125 + }, + "props": { + "text": "DPM4_UL5_4 11.200.1.5", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM5_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2281, + "y": 0.4125 + }, + "props": { + "text": "DPM5_UL7_4 11.200.1.6", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM6_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2284, + "y": 0.0744 + }, + "props": { + "text": "DPM6_UL8_3 11.200.1.7", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM7_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0484, + "y": 0.278 + }, + "props": { + "text": "DPM7_UL10_3 11.200.1.8", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM8_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0064, + "y": 0.3772 + }, + "props": { + "text": "DPM8_UL11_4 11.200.1.9", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM9_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0062, + "y": 0.7079 + }, + "props": { + "text": "DPM9_PS1_4 11.200.1.10", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM10_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2279, + "y": 0.7437 + }, + "props": { + "text": "DPM10_PS3_6 11.200.1.11", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM11_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4755, + "y": 0.7438 + }, + "props": { + "text": "DPM11_PS4_7 11.200.1.12", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": 120, + "y": -723 + }, + "props": { + "mode": "percent", + "style": { + "backgroundColor": "#ffffff" + } + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/view.json b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/view.json new file mode 100644 index 0000000..fe01305 --- /dev/null +++ b/OTHER SCRIPTS/CHANGE EXISTING DPM VIEW NAMES/view.json @@ -0,0 +1,1417 @@ +{ + "custom": { + "dpm1-dpm2": false, + "dpm10-dpm11": false, + "dpm11-mcm": false, + "dpm2-dpm3": false, + "dpm3-dpm4": false, + "dpm4-dpm5": false, + "dpm5-dpm6": true, + "dpm6-dpm7": false, + "dpm7-dpm8": false, + "dpm8-dpm9": false, + "dpm9-dpm10": false, + "mcm_dpm1": false + }, + "params": { + "tagProps": [ + "System/MCM04/MCM04", + "System/MCM04/Field_Devices/DPM/PRS3_5_DPM1", + "System/MCM04/Field_Devices/DPM/PS11_7_DPM1", + "System/MCM04/Field_Devices/DPM/VSC_DPM3", + "System/MCM04/Field_Devices/DPM/VSC_DPM2", + "System/MCM04/Field_Devices/DPM/FL3016_2_DPM1", + "System/MCM04/Field_Devices/DPM/VSC_DPM1", + "System/MCM04/Field_Devices/DPM/VSA_DPM1_7", + "System/MCM04/Field_Devices/DPM/FL1034_2_DPM1", + "System/MCM04/Field_Devices/DPM/VSA_DPM2", + "System/MCM04/Field_Devices/DPM/VSA_DPM3", + "System/MCM04/Field_Devices/DPM/PS10_2_DPM1" + ] + }, + "propConfig": { + "custom.dpm1-dpm2": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "1": "{view.params.tagProps[1]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{1}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + }, + { + "input": 1, + "output": false + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm10-dpm11": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "10": "{view.params.tagProps[10]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{10}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm11-mcm": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "11": "{view.params.tagProps[11]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{11}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm2-dpm3": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "2": "{view.params.tagProps[2]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{2}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm3-dpm4": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "3": "{view.params.tagProps[3]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{3}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 1, + "output": false + }, + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm4-dpm5": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "4": "{view.params.tagProps[4]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{4}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm5-dpm6": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "5": "{view.params.tagProps[5]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{5}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm6-dpm7": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "6": "{view.params.tagProps[6]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{6}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm7-dpm8": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "7": "{view.params.tagProps[7]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{7}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm8-dpm9": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "8": "{view.params.tagProps[8]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{8}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.dpm9-dpm10": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "9": "{view.params.tagProps[9]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{9}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "custom.mcm_dpm1": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "0": "{view.params.tagProps[0]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/STATE" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},1)", + "type": "expression" + }, + { + "fallback": false, + "inputType": "scalar", + "mappings": [ + { + "input": 0, + "output": true + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + }, + "persistent": true + }, + "params.tagProps": { + "paramDirection": "input", + "persistent": true + } + }, + "props": { + "defaultSize": { + "height": 894, + "width": 1920 + } + }, + "root": { + "children": [ + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM1_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": true, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "tagProps": [ + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value" + ], + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PRS3_5_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM2_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm2-dpm3" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm1-dpm2" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PS11_7_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM3_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm2-dpm3" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM3" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM4_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm3-dpm4" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownLeft": true, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM2" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM5_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm4-dpm5" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": false, + "Down3": false, + "DownLeft": false, + "DownRight": true, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/FL3016_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM6_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm6-dpm7" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm5-dpm6" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": true, + "DownLeft": false, + "DownRight": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSC_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM7_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm6-dpm7" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": true, + "Down3": false, + "DownLeft": false, + "DownRight": false, + "InDown": true, + "InLeft": false, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM8_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "y": 0.3333 + }, + "propConfig": { + "props.params.DownOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + }, + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm7-dpm8" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": true, + "Down2": true, + "Down3": false, + "InDown": false, + "InLeft": false, + "InUp": true, + "OutDown": true, + "OutRight": false, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/FL1034_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM9_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm8-dpm9" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm9-dpm10" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": true, + "InDown": false, + "InLeft": false, + "InUp": true, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM2" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM10_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.2503, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm9-dpm10" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm10-dpm11" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": true, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/VSA_DPM3" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "events": { + "dom": { + "onClick": { + "config": { + "script": "\tself.session.custom.dpm_view_path \u003d self.props.params.view\n\tself.session.custom.show_dpm_device_view \u003d True" + }, + "scope": "G", + "type": "script" + } + } + }, + "meta": { + "name": "DPM11_DEVICE" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.5, + "y": 0.6667 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm10-dpm11" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.dpm11-mcm" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "Down1": false, + "Down2": false, + "Down3": false, + "DownOn": false, + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": true, + "OutUp": false, + "tagProps": [ + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value", + "value" + ], + "view": "Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM04/PS10_2_DPM1" + }, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "MCM" + }, + "position": { + "height": 0.3333, + "width": 0.25, + "x": 0.75, + "y": 0.6666 + }, + "propConfig": { + "props.params.InOn": { + "binding": { + "config": { + "path": "view.custom.dpm11-mcm" + }, + "type": "property" + } + }, + "props.params.OutOn": { + "binding": { + "config": { + "path": "view.custom.mcm_dpm1" + }, + "type": "property" + } + } + }, + "props": { + "params": { + "InDown": false, + "InLeft": true, + "InUp": false, + "OutDown": false, + "OutRight": false, + "OutUp": true + }, + "path": "Windows/Tabs/Enternet Windows/Components/EN4TR" + }, + "type": "ia.display.view" + }, + { + "meta": { + "name": "DPM1_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.7302, + "y": 0.4125 + }, + "props": { + "text": "DPM1_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM2_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.7302, + "y": 0.0747 + }, + "props": { + "text": "DPM2_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM3_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4755, + "y": 0.0748 + }, + "props": { + "text": "DPM3_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM4_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4726, + "y": 0.4125 + }, + "props": { + "text": "DPM4_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM5_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2281, + "y": 0.4125 + }, + "props": { + "text": "DPM5_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM6_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2284, + "y": 0.0744 + }, + "props": { + "text": "DPM6_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM7_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0484, + "y": 0.278 + }, + "props": { + "text": "DPM7_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM8_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0064, + "y": 0.3772 + }, + "props": { + "text": "DPM8_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM9_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.0062, + "y": 0.7079 + }, + "props": { + "text": "DPM9_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM10_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.2279, + "y": 0.7437 + }, + "props": { + "text": "DPM10_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "DPM11_label" + }, + "position": { + "height": 0.0358, + "width": 0.0547, + "x": 0.4755, + "y": 0.7438 + }, + "props": { + "text": "DPM11_TEXT", + "textStyle": { + "fontSize": "1vmin" + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "root" + }, + "position": { + "x": 120, + "y": -723 + }, + "props": { + "mode": "percent", + "style": { + "backgroundColor": "#ffffff" + } + }, + "type": "ia.container.coord" + } +} \ No newline at end of file diff --git a/OTHER SCRIPTS/CREATE MCM VIEWS/main.py b/OTHER SCRIPTS/CREATE MCM VIEWS/main.py new file mode 100644 index 0000000..8d21d6f --- /dev/null +++ b/OTHER SCRIPTS/CREATE MCM VIEWS/main.py @@ -0,0 +1,373 @@ +import json + +def get_dpm_positions(dpm_count): + """ + Return a list of position dictionaries for DPM_DEVICE and DPM_label entries. + Uses positions from fourth view.json for 1-4 DPMs, third view.json for 5-6 DPMs, + second view.json for 7-8 DPMs, first view.json (updated) for 9-11 DPMs, and + first view.json with DPM12 and placeholders for 12+. For 7 DPMs, skips the first + position and uses positions 2-8 from second view.json. + """ + # Positions from fourth view.json (for 1-4 DPMs) + device_positions_4 = [ + {"x": 0.5, "y": 0.5, "width": 0.5, "height": 0.5}, # DPM1 + {"x": 0.5, "y": 0, "width": 0.5, "height": 0.5}, # DPM2 + {"x": 0, "y": 0, "width": 0.5, "height": 0.5}, # DPM3 + {"x": 0, "y": 0.5, "width": 0.5, "height": 0.5} # DPM4 + ] + + label_positions_4 = [ + {"x": 0.5, "y": 0.6, "width": 0.0547, "height": 0.0358}, # DPM1_label + {"x": 0.5, "y": 0.1, "width": 0.0547, "height": 0.0358}, # DPM2_label + {"x": 0.01, "y": 0.1, "width": 0.0547, "height": 0.0358}, # DPM3_label + {"x": 0.01, "y": 0.6, "width": 0.0547, "height": 0.0358} # DPM4_label + ] + + # Positions from third view.json (for 5-6 DPMs) + device_positions_3 = [ + {"x": 0.6666, "y": 0.5, "width": 0.3333, "height": 0.5}, # DPM1 + {"x": 0.6666, "y": 0, "width": 0.3333, "height": 0.5}, # DPM2 + {"x": 0.3333, "y": 0, "width": 0.3333, "height": 0.5}, # DPM3 + {"x": 0, "y": 0, "width": 0.3333, "height": 0.5}, # DPM4 + {"x": 0, "y": 0.5, "width": 0.3333, "height": 0.5}, # DPM5 + {"x": 0.3333, "y": 0.5, "width": 0.3333, "height": 0.5} # DPM6 + ] + + label_positions_3 = [ + {"x": 0.65, "y": 0.6, "width": 0.0547, "height": 0.0358}, # DPM1_label + {"x": 0.65, "y": 0.1, "width": 0.0547, "height": 0.0358}, # DPM2_label + {"x": 0.32, "y": 0.1, "width": 0.0547, "height": 0.0358}, # DPM3_label + {"x": 0.005, "y": 0.1, "width": 0.0547, "height": 0.0358}, # DPM4_label + {"x": 0.005, "y": 0.6, "width": 0.0547, "height": 0.0358}, # DPM5_label + {"x": 0.32, "y": 0.6, "width": 0.0547, "height": 0.0358} # DPM6_label + ] + + # Positions from second view.json (for 7-8 DPMs) + device_positions_2 = [ + {"x": 0.6666, "y": 0.3333, "width": 0.3333, "height": 0.3333}, # DPM1 + {"x": 0.6666, "y": 0, "width": 0.3333, "height": 0.3333}, # DPM2 + {"x": 0.3333, "y": 0, "width": 0.3333, "height": 0.3333}, # DPM3 + {"x": 0, "y": 0, "width": 0.3333, "height": 0.3333}, # DPM4 + {"x": 0, "y": 0.3333, "width": 0.3333, "height": 0.3333}, # DPM5 + {"x": 0, "y": 0.6666, "width": 0.3333, "height": 0.3333}, # DPM6 + {"x": 0.3333, "y": 0.6666, "width": 0.3333, "height": 0.3333}, # DPM7 + {"x": 0.3333, "y": 0.3333, "width": 0.3333, "height": 0.3333} # DPM8 + ] + + label_positions_2 = [ + {"x": 0.65, "y": 0.4, "width": 0.0547, "height": 0.0358}, # DPM1_label + {"x": 0.65, "y": 0.07, "width": 0.0547, "height": 0.0358}, # DPM2_label + {"x": 0.32, "y": 0.07, "width": 0.0547, "height": 0.0358}, # DPM3_label + {"x": 0.065, "y": 0.3, "width": 0.0547, "height": 0.0358}, # DPM4_label + {"x": 0.005, "y": 0.4, "width": 0.0547, "height": 0.0358}, # DPM5_label + {"x": 0.005, "y": 0.75, "width": 0.0547, "height": 0.0358}, # DPM6_label + {"x": 0.32, "y": 0.75, "width": 0.0547, "height": 0.0358}, # DPM7_label + {"x": 0.32, "y": 0.4, "width": 0.0547, "height": 0.0358} # DPM8_label + ] + + # Positions from first view.json (for 9-11 DPMs, updated with new DPM10-DPM12) + device_positions_1 = [ + {"x": 0.75, "y": 0.3333, "width": 0.25, "height": 0.3333}, # DPM1 + {"x": 0.75, "y": 0, "width": 0.25, "height": 0.3333}, # DPM2 + {"x": 0.5, "y": 0, "width": 0.25, "height": 0.3333}, # DPM3 + {"x": 0.5, "y": 0.3333, "width": 0.25, "height": 0.3333}, # DPM4 + {"x": 0.2503, "y": 0.3333, "width": 0.25, "height": 0.3333},# DPM5 + {"x": 0.2503, "y": 0, "width": 0.25, "height": 0.3333}, # DPM6 + {"x": 0, "y": 0, "width": 0.25, "height": 0.3333}, # DPM7 + {"x": 0, "y": 0.3333, "width": 0.25, "height": 0.3333}, # DPM8 + {"x": 0, "y": 0.6667, "width": 0.25, "height": 0.3333}, # DPM9 + {"x": 0.2503, "y": 0.6667, "width": 0.25, "height": 0.3333},# DPM10 + {"x": 0.5, "y": 0.6667, "width": 0.25, "height": 0.3333}, # DPM11 + {"x": 0.75, "y": 0.6667, "width": 0.25, "height": 0.3333} # DPM12 + ] + + label_positions_1 = [ + {"x": 0.7302, "y": 0.4125, "width": 0.0547, "height": 0.0358}, # DPM1_label + {"x": 0.7302, "y": 0.0747, "width": 0.0547, "height": 0.0358}, # DPM2_label + {"x": 0.4755, "y": 0.0748, "width": 0.0547, "height": 0.0358}, # DPM3_label + {"x": 0.4726, "y": 0.4125, "width": 0.0547, "height": 0.0358}, # DPM4_label + {"x": 0.2281, "y": 0.4125, "width": 0.0547, "height": 0.0358}, # DPM5_label + {"x": 0.2284, "y": 0.0744, "width": 0.0547, "height": 0.0358}, # DPM6_label + {"x": 0.0484, "y": 0.278, "width": 0.0547, "height": 0.0358}, # DPM7_label + {"x": 0.0064, "y": 0.3772, "width": 0.0547, "height": 0.0358}, # DPM8_label + {"x": 0.0062, "y": 0.7079, "width": 0.0547, "height": 0.0358}, # DPM9_label + {"x": 0.2279, "y": 0.7437, "width": 0.0547, "height": 0.0358}, # DPM10_label + {"x": 0.4755, "y": 0.7438, "width": 0.0547, "height": 0.0358}, # DPM11_label + {"x": 0.7302, "y": 0.7438, "width": 0.0547, "height": 0.0358} # DPM12_label + ] + + # Positions from first view.json (for 9-11 DPMs, updated with new DPM12-DPM15) + device_positions_6 = [ + {"x": 0.75, "y": 0.5, "width": 0.25, "height": 0.25}, # DPM1 + {"x": 0.75, "y": 0.25, "width": 0.25, "height": 0.25}, # DPM2 + {"x": 0.75, "y": 0, "width": 0.25, "height": 0.25}, # DPM3 + {"x": 0.5, "y": 0, "width": 0.25, "height": 0.25}, # DPM4 + {"x": 0.5, "y": 0.25, "width": 0.25, "height": 0.25},# DPM5 + {"x": 0.25, "y": 0.25, "width": 0.25, "height": 0.25}, # DPM6 + {"x": 0.25, "y": 0, "width": 0.25, "height": 0.25}, # DPM7 + {"x": 0, "y": 0, "width": 0.25, "height": 0.25}, # DPM8 + {"x": 0, "y": 0.25, "width": 0.25, "height": 0.25}, # DPM9 + {"x": 0, "y": 0.5, "width": 0.25, "height": 0.25},# DPM10 + {"x": 0, "y": 0.75, "width": 0.25, "height": 0.25}, # DPM11 + {"x": 0.25, "y": 0.75, "width": 0.25, "height": 0.25}, # DPM12 + {"x": 0.25, "y": 0.5, "width": 0.25, "height": 0.25},# DPM13 + {"x": 0.5, "y": 0.5, "width": 0.25, "height": 0.25}, # DPM14 + {"x": 0.5, "y": 0.75, "width": 0.25, "height": 0.25} # DPM15 + ] + + label_positions_6 = [ + {"x": 0.7302, "y": 0.5421, "width": 0.0547, "height": 0.0358}, # DPM1_label + {"x": 0.7302, "y": 0.3005, "width": 0.0547, "height": 0.0358}, # DPM2_label + {"x": 0.7302, "y": 0.0744, "width": 0.0547, "height": 0.0358}, # DPM3_label + {"x": 0.4755, "y": 0.0744, "width": 0.0547, "height": 0.0358}, # DPM4_label + {"x": 0.4755, "y": 0.3005, "width": 0.0547, "height": 0.0358}, # DPM5_label + {"x": 0.2284, "y": 0.3005, "width": 0.0547, "height": 0.0358}, # DPM6_label + {"x": 0.2284, "y": 0.0744, "width": 0.0547, "height": 0.0358}, # DPM7_label + {"x": 0.0442, "y": 0.2109, "width": 0.0547, "height": 0.0358}, # DPM8_label + {"x": 0.0054, "y": 0.2855, "width": 0.0547, "height": 0.0358}, # DPM9_label + {"x": 0.0054, "y": 0.5399, "width": 0.0547, "height": 0.0358}, # DPM10_label + {"x": 0.0054, "y": 0.7863, "width": 0.0547, "height": 0.0358}, # DPM11_label + {"x": 0.2284, "y": 0.7885, "width": 0.0547, "height": 0.0358}, # DPM12_label + {"x": 0.2284, "y": 0.5421, "width": 0.0547, "height": 0.0358}, # DPM13_label + {"x": 0.4755, "y": 0.5421, "width": 0.0547, "height": 0.0358}, # DPM14_label + {"x": 0.4755, "y": 0.7885, "width": 0.0547, "height": 0.0358}, # DPM15_label + ] + + # Select positions based on dpm_count + if dpm_count in [1, 2, 3, 4]: + device_positions = device_positions_4[:dpm_count] + label_positions = label_positions_4[:dpm_count] + elif dpm_count in [5, 6]: + device_positions = device_positions_3[:dpm_count] + label_positions = label_positions_3[:dpm_count] + elif dpm_count == 7: + # For 7 DPMs, use positions 2-8 from second view.json + device_positions = device_positions_2[1:8] + label_positions = label_positions_2[1:8] + elif dpm_count == 8: + # For 8 DPMs, use all positions from second view.json + device_positions = device_positions_2[:8] + label_positions = label_positions_2[:8] + elif dpm_count >= 13: + # For 13-15 DPMs + 1 MCM, use device_positions_6 and label_positions_6 + # MCM is always at the last position + device_positions = device_positions_6[:dpm_count] + label_positions = label_positions_6[:dpm_count] + elif dpm_count == 13: + # For 12 DPMs + 1 MCM, use all 13 positions from device_positions_6 + device_positions = device_positions_6[:13] + label_positions = label_positions_6[:13] + else: + # For 9-12, use first view.json (updated) up to DPM12, then placeholders + device_positions = device_positions_1[:min(dpm_count, 12)] + label_positions = label_positions_1[:min(dpm_count, 12)] + # Extend for DPM13+ with placeholders (should not be used now) + for i in range(12, dpm_count): + device_positions.append({"x": 0.1 * (i % 5), "y": 0.3333 * (i // 5), "width": 0.25, "height": 0.3333}) + label_positions.append({"x": 0.1 * (i % 5), "y": 0.3333 * (i // 5) + 0.1, "width": 0.0547, "height": 0.0358}) + + return device_positions, label_positions + +def make_binding(path): + return {"binding": {"config": {"path": path}, "type": "property"}} + +def make_connection(view, name, tag_index): + view["custom"][name] = False + view["propConfig"][f"custom.{name}"] = { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + str(tag_index): f"{{view.params.tagProps[{tag_index}]}}", + "fc": "{session.custom.fc}", + }, + "tagPath": f"[{{fc}}_SCADA_TAG_PROVIDER]{{{tag_index}}}/STATE" + }, + "transforms": [ + {"expression": "coalesce({value},{view.params.forceFaultStatus},1)", "type": "expression"}, + {"fallback": False, "inputType": "scalar", "mappings": [{"input": 0, "output": True}, {"input": 1, "output": False}], "outputType": "scalar", "type": "map"} + ], + "type": "tag" + }, + "persistent": True + } + +def generate_view_json(dpm_count, dpm_texts, dpm_device_names, mcm_name): + device_positions, label_positions = get_dpm_positions(dpm_count) + mcm_last = (dpm_count == 12) + view = { + "custom": {}, + "params": {"tagProps": [f"DPM{i}_TAG" for i in range(dpm_count)]}, + "propConfig": {}, + "props": {"defaultSize": {"height": 894, "width": 1920}}, + "root": {"children": [], "meta": {"name": "root"}, "position": {"x": 120, "y": -723}, "props": {"mode": "percent", "style": {"backgroundColor": "#ffffff"}}, "type": "ia.container.coord"} + } + # Connections + # mcm-dpm1 + make_connection(view, "mcm-dpm1", 0) + # dpm1-dpm2, dpm2-dpm3, ..., dpm{max-1}-dpm{max} + for i in range(1, dpm_count - 1): + make_connection(view, f"dpm{i}-dpm{i+1}", i) + # dpm{max}-mcm + make_connection(view, f"dpm{dpm_count-1}-mcm", dpm_count-1) + view["propConfig"]["params.tagProps"] = {"paramDirection": "input", "persistent": True} + + default_params = { + "InDown": False, "InLeft": False, "InUp": False, + "OutDown": False, "OutRight": False, "OutUp": False, + "Down1": False, "Down2": False, "Down3": False, + "DownLeft": False, "DownOn": False, "DownRight": False + } + + # Devices + for i in range(dpm_count): + if mcm_last: + # MCM last: DPMs 0-10, MCM 11 + if i == dpm_count - 1: + # MCM + device_name = "MCM" + label_text = "MCM" + entry = { + "events": {"dom": {"onClick": {"config": {"script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True"}, "scope": "G", "type": "script"}}}, + "meta": {"name": device_name}, + "position": device_positions[i], + "propConfig": {}, + "props": {"params": {"InDown": False, "InLeft": False, "InOn": False, "InUp": False, "OutDown": False, "OutRight": False, "OutUp": False}, + "path": "Windows/Tabs/Enternet Windows/Components/EN4TR"}, + "type": "ia.display.view" + } + entry["propConfig"]["props.params.InOn"] = make_binding("view.custom.dpm11-mcm") + entry["propConfig"]["props.params.OutOn"] = make_binding("view.custom.mcm-dpm1") + else: + device_name = dpm_device_names[i] + label_text = dpm_texts[i] + params = default_params.copy() + params["view"] = f"Windows/Tabs/Enternet Windows/DPMs/DPM Devices/{mcm_name}/{device_name}" + entry = { + "events": {"dom": {"onClick": {"config": {"script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True"}, "scope": "G", "type": "script"}}}, + "meta": {"name": device_name}, + "position": device_positions[i], + "propConfig": {}, + "props": { + "params": params, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + } + # DPM1 + if i == 0: + entry["propConfig"]["props.params.InOn"] = make_binding("view.custom.dpm1-dpm2") + entry["propConfig"]["props.params.OutOn"] = make_binding("view.custom.mcm-dpm1") + # DPM2..DPM10 + elif 1 <= i <= 9: + entry["propConfig"]["props.params.InOn"] = make_binding(f"view.custom.dpm{i+1}-dpm{i+2}") + entry["propConfig"]["props.params.OutOn"] = make_binding(f"view.custom.dpm{i}-dpm{i+1}") + # DPM11 + elif i == 10: + entry["propConfig"]["props.params.InOn"] = make_binding("view.custom.dpm10-dpm11") + entry["propConfig"]["props.params.OutOn"] = make_binding("view.custom.dpm11-mcm") + view["root"]["children"].append(entry) + else: + # Default: MCM is first + is_mcm = (i == 0) + if is_mcm: + device_name = "MCM" + label_text = "MCM" + entry = { + "events": {"dom": {"onClick": {"config": {"script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True"}, "scope": "G", "type": "script"}}}, + "meta": {"name": device_name}, + "position": device_positions[i], + "propConfig": {}, + "props": {"params": {"InDown": False, "InLeft": False, "InOn": False, "InUp": False, "OutDown": False, "OutRight": False, "OutUp": False}, + "path": "Windows/Tabs/Enternet Windows/Components/EN4TR"}, + "type": "ia.display.view" + } + entry["propConfig"]["props.params.InOn"] = make_binding(f"view.custom.dpm{dpm_count-1}-mcm") + entry["propConfig"]["props.params.OutOn"] = make_binding("view.custom.mcm-dpm1") + else: + device_name = dpm_device_names[i-1] + label_text = dpm_texts[i-1] + params = default_params.copy() + params["view"] = f"Windows/Tabs/Enternet Windows/DPMs/DPM Devices/{mcm_name}/{device_name}" + entry = { + "events": {"dom": {"onClick": {"config": {"script": "\tself.session.custom.dpm_view_path = self.props.params.view\n\tself.session.custom.show_dpm_device_view = True"}, "scope": "G", "type": "script"}}}, + "meta": {"name": device_name}, + "position": device_positions[i], + "propConfig": {}, + "props": { + "params": params, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_BLOCK" + }, + "type": "ia.display.view" + } + # DPM1 + if i == 1: + entry["propConfig"]["props.params.InOn"] = make_binding("view.custom.dpm1-dpm2") + entry["propConfig"]["props.params.OutOn"] = make_binding("view.custom.mcm-dpm1") + # Last DPM + elif i == dpm_count - 1: + entry["propConfig"]["props.params.InOn"] = make_binding(f"view.custom.dpm{dpm_count-2}-dpm{dpm_count-1}") + entry["propConfig"]["props.params.OutOn"] = make_binding(f"view.custom.dpm{dpm_count-1}-mcm") + # Middle DPMs + else: + entry["propConfig"]["props.params.InOn"] = make_binding(f"view.custom.dpm{i}-dpm{i+1}") + entry["propConfig"]["props.params.OutOn"] = make_binding(f"view.custom.dpm{i-1}-dpm{i}") + view["root"]["children"].append(entry) + # Labels + if mcm_last: + for i in range(dpm_count - 1): # 0 to 10 for 11 DPMs + view["root"]["children"].append({ + "meta": {"name": f"DPM{i+1}_label"}, + "position": label_positions[i], + "props": {"text": dpm_texts[i], "textStyle": {"fontSize": "1vmin"}}, + "type": "ia.display.label" + }) + else: + for i in range(1, dpm_count): + view["root"]["children"].append({ + "meta": {"name": f"DPM{i}_label"}, + "position": label_positions[i], + "props": {"text": dpm_texts[i-1], "textStyle": {"fontSize": "1vmin"}}, + "type": "ia.display.label" + }) + return view + +def main(): + try: + mcm_name = input("Enter MCM name [Ex. MCM01]: ").strip() + if not mcm_name: + print("Error: MCM name cannot be empty.") + return + print("Enter DPMs (one per line, format: ). Leave blank line to finish.") + lines = [] + while True: + line = input() + if not line.strip(): + break + lines.append(line.strip()) + dpm_count = len(lines) + 1 + if dpm_count < 2: + print("Error: You must enter at least one DPM.") + return + dpm_device_names, dpm_texts = [], [] + for entry in lines: + if '\t' in entry: + device_name, _ = entry.split('\t', 1) + elif ' ' in entry: + device_name, _ = entry.split(' ', 1) + else: + print(f"Error: '{entry}' is missing a separator (tab or space) between device name and full text.") + return + dpm_device_names.append(device_name) + dpm_texts.append(entry) + view = generate_view_json(dpm_count, dpm_texts, dpm_device_names, mcm_name) + with open("view.json", "w") as f: + json.dump(view, f, indent=2) + print(f"Successfully generated view.json with {dpm_count-1} DPMs + 1 MCM") + except Exception as e: + print(f"An error occurred: {str(e)}") + +if __name__ == "__main__": + main() + diff --git a/PLACE DPM DEVICES/device_mapping.txt b/PLACE DPM DEVICES/device_mapping.txt new file mode 100644 index 0000000..7f04f07 --- /dev/null +++ b/PLACE DPM DEVICES/device_mapping.txt @@ -0,0 +1,156 @@ +UL13_8_DPM1 +UL13_1_VFD1 11.200.1.30 +UL13_2_VFD1 11.200.1.31 +UL13_3_VFD1 11.200.1.32 +UL13_4_VFD1 11.200.1.33 +UL13_5_VFD1 11.200.1.34 +UL13_6_VFD1 11.200.1.35 +UL13_7_VFD1 11.200.1.36 +UL13_8A_VFD1 11.200.1.37 +UL13_8B_VFD1 11.200.1.38 +UL13_9_VFD1 11.200.1.39 +UL13_10_VFD1 11.200.1.40 +UL13_11_VFD1 11.200.1.41 +UL14_1_EX1 11.200.1.42 +UL14_3_VFD1 11.200.1.43 +UL14_4_VFD1 11.200.1.44 +UL14_5_VFD1 11.200.1.45 +UL14_6_VFD1 11.200.1.46 +UL14_7_VFD1 11.200.1.47 +UL14_8_VFD1 11.200.1.48 +UL14_9_VFD1 11.200.1.49 +UL14_10_VFD1 11.200.1.50 +UL13_1_FIO1 11.200.1.51 +UL14_1_FIO1 11.200.1.52 +UL15_4_DPM1 +UL15_1_EX1 11.200.1.53 +UL15_3_VFD1 11.200.1.54 +UL15_4_VFD1 11.200.1.55 +UL15_5_VFD1 11.200.1.56 +UL15_6_VFD1 11.200.1.57 +UL15_7_VFD1 11.200.1.58 +UL15_8_VFD1 11.200.1.59 +UL15_9_VFD1 11.200.1.60 +UL15_10_VFD1 11.200.1.61 +UL15_11_VFD1 11.200.1.62 +UL15_1_FIO1 11.200.1.63 +UL16_2_DPM1 +UL16_1_VFD1 11.200.1.64 +UL16_2_VFD1 11.200.1.65 +UL16_4_VFD1 11.200.1.66 +UL16_5_VFD1 11.200.1.67 +UL16_6_VFD1 11.200.1.68 +UL16_7_VFD1 11.200.1.69 +UL16_8_VFD1 11.200.1.70 +UL16_9_VFD1 11.200.1.71 +UL17_1_EX1 11.200.1.72 +UL17_3_VFD1 11.200.1.73 +UL17_4_VFD1 11.200.1.74 +UL17_5_VFD1 11.200.1.75 +UL17_6_VFD1 11.200.1.76 +UL17_7_VFD1 11.200.1.77 +UL17_8_VFD1 11.200.1.78 +UL17_9_VFD1 11.200.1.79 +UL17_10_VFD1 11.200.1.80 +UL16_1_FIO1 11.200.1.81 +UL17_1_FIO1 11.200.1.82 +UL18_4_DPM1 +UL18_1_EX1 11.200.1.83 +UL18_3_VFD1 11.200.1.84 +UL18_4_VFD1 11.200.1.85 +UL18_5_VFD1 11.200.1.86 +UL18_6_VFD1 11.200.1.87 +UL18_7_VFD1 11.200.1.88 +UL18_8_VFD1 11.200.1.89 +UL18_9_VFD1 11.200.1.90 +UL18_10_VFD1 11.200.1.91 +UL18_11_VFD1 11.200.1.92 +UL18_12_VFD1 11.200.1.93 +UL18_13A_VFD1 11.200.1.94 +UL18_13B_VFD1 11.200.1.95 +UL18_14_VFD1 11.200.1.96 +UL18_15_VFD1 11.200.1.97 +UL18_16_VFD1 11.200.1.98 +UL18_1_FIO1 11.200.1.99 +UL19_2_DPM1 +UL19_1_VFD1 11.200.1.100 +UL19_2_VFD1 11.200.1.101 +UL19_3_VFD1 11.200.1.102 +UL19_4_VFD1 11.200.1.103 +UL19_5_VFD1 11.200.1.104 +UL19_6_VFD1 11.200.1.105 +UL19_7_VFD1 11.200.1.106 +UL19_8_VFD1 11.200.1.107 +UL19_9_VFD1 11.200.1.108 +UL20_1_EX1 11.200.1.109 +UL20_3_VFD1 11.200.1.110 +UL20_4_VFD1 11.200.1.111 +UL20_5_VFD1 11.200.1.112 +UL20_6_VFD1 11.200.1.113 +UL20_7_VFD1 11.200.1.114 +UL20_8_VFD1 11.200.1.115 +UL20_9_VFD1 11.200.1.116 +UL19_1_FIO1 11.200.1.117 +UL20_1_FIO1 11.200.1.118 +UL21_11_DPM1 +UL21_1_EX1 11.200.1.119 +UL21_3_VFD1 11.200.1.120 +UL21_4_VFD1 11.200.1.121 +UL21_5_VFD1 11.200.1.122 +UL21_6_VFD1 11.200.1.123 +UL21_7_VFD1 11.200.1.124 +UL21_8_VFD1 11.200.1.125 +UL21_9_VFD1 11.200.1.126 +UL21_10_VFD1 11.200.1.127 +UL21_11_VFD1 11.200.1.128 +UL21_12_VFD1 11.200.1.129 +UL21_13_VFD1 11.200.1.130 +UL21_14A_VFD1 11.200.1.131 +UL21_14B_VFD1 11.200.1.132 +UL21_15_VFD1 11.200.1.133 +UL21_16_VFD1 11.200.1.134 +UL21_17_VFD1 11.200.1.135 +UL21_1_FIO1 11.200.1.136 +PS5_7_DPM1 +PS5_1_VFD1 11.200.1.137 +PS5_2_VFD1 11.200.1.138 +PS5_3_VFD1 11.200.1.139 +PS5_4_VFD1 11.200.1.140 +PS5_5_VFD1 11.200.1.141 +PS5_6_VFD1 11.200.1.142 +PS5_7_VFD1 11.200.1.143 +PS5_8_VFD1 11.200.1.144 +PS5_9_VFD1 11.200.1.145 +PS5_10_VFD1 11.200.1.146 +PS5_11_VFD1 11.200.1.147 +PS5_12_VFD1 11.200.1.148 +PS5_13_VFD1 11.200.1.149 +PS6_7_DPM1 +PS6_1_VFD1 11.200.1.150 +PS6_2_VFD1 11.200.1.151 +PS6_3_VFD1 11.200.1.152 +PS6_4_VFD1 11.200.1.153 +PS6_5_VFD1 11.200.1.154 +PS6_6_VFD1 11.200.1.155 +PS6_7_VFD1 11.200.1.156 +PS6_8_VFD1 11.200.1.157 +PS6_9_VFD1 11.200.1.158 +PS6_10_VFD1 11.200.1.159 +PS6_11_VFD1 11.200.1.160 +PS6_12_VFD1 11.200.1.161 +PS6_13_VFD1 11.200.1.162 +PS7_7_DPM1 +PS7_1_VFD1 11.200.1.163 +PS7_2_VFD1 11.200.1.164 +PS7_3_VFD1 11.200.1.165 +PS7_4_VFD1 11.200.1.166 +PS7_5_VFD1 11.200.1.167 +PS7_6_VFD1 11.200.1.168 +PS7_7_VFD1 11.200.1.169 +PS7_8_VFD1 11.200.1.170 +PS7_9_VFD1 11.200.1.171 +PS7_10_VFD1 11.200.1.172 +PS7_11_VFD1 11.200.1.173 +PS7_12_VFD1 11.200.1.174 +PS7_13_VFD1 11.200.1.175 +PS7_14_VFD1 11.200.1.176 \ No newline at end of file diff --git a/PLACE DPM DEVICES/main.py b/PLACE DPM DEVICES/main.py new file mode 100644 index 0000000..22df5c1 --- /dev/null +++ b/PLACE DPM DEVICES/main.py @@ -0,0 +1,206 @@ +""" + !!! CHANGE THE INPUT_FILE VARIABLE TO THE PATH OF THE TEXT FILE! LINE 17 !!! + + IF YOU WANT TO RUN THIS SCRIPT, YOU NEED TO HAVE A TXT FILE WITH THE FOLLOWING FORMAT: + DPM_NAME + DEVICE_NAME1 DEVICE_IP1 + DEVICE_NAME2 DEVICE_IP2 + ... + DEVICE_NAMEN DEVICE_IPN + DPM_NAMEN + ... +""" + +import json +import os +import shutil + +# Get the directory where this script is located +script_dir = os.path.dirname(os.path.abspath(__file__)) + +input_file = os.path.join(script_dir, "device_mapping.txt") +mcm_folder_name = "MCM" + +def generate_config(num_vfds, num_fios, device_list, dpm_label): + if num_vfds + num_fios > 24: + raise ValueError("Error: Total number of VFDs and FIOs/SIOs cannot exceed 24 slots.") + if len(device_list) != num_vfds + num_fios: + raise ValueError(f"Error: Expected {num_vfds + num_fios} device names, but got {len(device_list)}.") + + # Predefined positions and labels for devices (up to 24) + positions = [ + {"x": 0.0232, "y": 0.4991}, {"x": 0.0230, "y": 0.6677}, {"x": 0.0216, "y": 0.8333}, # 3 + {"x": 0.0229, "y": 0.3333}, {"x": 0.0229, "y": 0.1667}, {"x": 0.0244, "y": 0.0000}, # 6 + {"x": 0.5000, "y": 0.0000}, {"x": 0.6250, "y": 0.0000}, {"x": 0.7500, "y": 0.0000}, # 9 + {"x": 0.3750, "y": 0.0000}, {"x": 0.2516, "y": 0.0019}, {"x": 0.1245, "y": 0.0000}, # 12 + {"x": 0.8509, "y": 0.3332}, {"x": 0.8514, "y": 0.1667}, {"x": 0.8528, "y": 0.0000}, # 15 + {"x": 0.8509, "y": 0.4988}, {"x": 0.8501, "y": 0.6639}, {"x": 0.8515, "y": 0.8329}, # 18 + {"x": 0.3740, "y": 0.8324}, {"x": 0.2481, "y": 0.8324}, {"x": 0.1222, "y": 0.8333}, # 21 + {"x": 0.5026, "y": 0.8314}, {"x": 0.6245, "y": 0.8314}, {"x": 0.7536, "y": 0.8351} # 24 + ] + + label_positions = [ + {"x": 0.0094, "y": 0.5394}, {"x": 0.0068, "y": 0.7315}, {"x": 0.0068, "y": 0.8981}, # 3 + {"x": 0.0068, "y": 0.3986}, {"x": 0.0068, "y": 0.2324}, {"x": 0.0068, "y": 0.0653}, # 6 + {"x": 0.5117, "y": 0.1662}, {"x": 0.6312, "y": 0.1664}, {"x": 0.7500, "y": 0.1664}, # 9 + {"x": 0.3864, "y": 0.1664}, {"x": 0.3150, "y": 0.1682}, {"x": 0.2072, "y": 0.1646}, # 12 + {"x": 0.9470, "y": 0.3943}, {"x": 0.9470, "y": 0.2276}, {"x": 0.9470, "y": 0.0619}, # 15 + {"x": 0.9470, "y": 0.5610}, {"x": 0.9470, "y": 0.7257}, {"x": 0.9470, "y": 0.8927}, # 18 + {"x": 0.4587, "y": 0.8896}, {"x": 0.3311, "y": 0.8887}, {"x": 0.2071, "y": 0.8886}, # 21 + {"x": 0.5887, "y": 0.8886}, {"x": 0.7106, "y": 0.8886}, {"x": 0.8344, "y": 0.9247} # 24 + ] + + total_devices = num_vfds + num_fios + tag_props = [f"TAG{i}" for i in range(total_devices)] + con_lines_visible = [True] * total_devices + [False] * (24 - total_devices) + + # Generate propConfig for con_lines bindings + prop_config = {} + for i in range(total_devices): + prop_config[f"props.params.con_lines[{i}]"] = { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": {"0": f"{{view.params.tagProps[{i}]}}", "fc": "{session.custom.fc}"}, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Alarms/Communication_Faulted" + }, + "transforms": [ + {"expression": "coalesce({value},{view.params.forceFaultStatus},false)", "type": "expression"}, + {"fallback": False, "inputType": "scalar", "mappings": [{"input": False, "output": True}], "outputType": "scalar", "type": "map"} + ], + "type": "tag" + } + } + + # Base configuration + config = { + "custom": {}, + "params": {"tagProps": tag_props}, + "props": {"defaultSize": {"height": 1080, "width": 1920}}, + "root": { + "children": [], + "meta": {"name": "root"}, + "position": {"x": 0.6348, "y": -0.1546}, + "props": {"mode": "percent"}, + "type": "ia.container.coord" + } + } + + # Add DPM component + config["root"]["children"].append({ + "meta": {"name": "DPM"}, + "position": {"x": 0, "y": 0, "height": 1, "width": 1}, + "propConfig": prop_config, + "props": { + "params": {"con_lines": [False] * 24, "con_lines_visible": con_lines_visible, "in": False, "out": False}, + "path": "Windows/Tabs/Enternet Windows/Components/DPM_TO_HUB" + }, + "type": "ia.display.view" + }) + + # Process all devices + for i, device_data in enumerate(device_list): + name, ip = device_data.split() + is_vfd = '_VFD' in name or '_EX' in name + component_name = name.replace("_VFD1", "").replace("_EX1", "") if is_vfd else name + + # Adjust X position for FIO/SIO at positions 13-18 + component_x = positions[i]["x"] + label_x = label_positions[i]["x"] + if not is_vfd and 12 <= i <= 17: + component_x -= 0.012 + label_x -= 0.012 + + # Add device component + config["root"]["children"].append({ + "meta": {"name": component_name}, + "position": {"height": 0.1667, "width": 0.125, "x": component_x, "y": positions[i]["y"]}, + "props": {"path": f"Windows/Tabs/Enternet Windows/Components/{'APF' if is_vfd else 'FIO_SIO'}"}, + "type": "ia.display.view" + }) + + # Add device label + config["root"]["children"].append({ + "meta": {"name": f"{component_name}_label"}, + "position": {"height": 0.0358, "width": 0.0547 if is_vfd else 0.0427, "x": label_x, "y": label_positions[i]["y"]}, + "props": {"text": f"{name} {ip}", "textStyle": {"fontSize": "1vmin", "key": "value"}}, + "type": "ia.display.label" + }) + + # Add DPM label + config["root"]["children"].append({ + "meta": {"name": "DPM_label"}, + "position": {"height": 0.0694, "width": 0.101, "x": 0.5831, "y": 0.6342}, + "props": {"text": dpm_label, "textStyle": {"fontSize": "2vmin"}}, + "type": "ia.display.label" + }) + + return config + +def parse_dpm_data(file_path): + dpms = {} + current_dpm = None + with open(file_path, 'r') as f: + for line in f: + line = line.strip() + if not line: + continue + if not ('\t' in line and len(line.split('\t')) == 2) and not (' ' in line and len(line.split(' ')) == 2): + current_dpm = line + dpms[current_dpm] = [] + elif current_dpm: + parts = line.split('\t') if '\t' in line else line.split(' ') + dpms[current_dpm].append((parts[0].strip(), parts[1].strip())) + return dpms + +def copy_files_to_dpm_folder(dpm_folder): + script_dir = os.path.dirname(os.path.abspath(__file__)) + for file_name in ["resource.json", "thumbnail.png"]: + source = os.path.join(script_dir, file_name) + if os.path.exists(source): + shutil.copy2(source, os.path.join(dpm_folder, file_name)) + +def create_dpm_folders(dpms, mcm_folder): + os.makedirs(mcm_folder, exist_ok=True) + for dpm_name, devices in dpms.items(): + print(f"Processing {dpm_name} with {len(devices)} devices...") + dpm_folder = os.path.join(mcm_folder, dpm_name) + os.makedirs(dpm_folder, exist_ok=True) + + try: + # Count device types and create config + num_vfds = sum(1 for name, _ in devices if '_VFD' in name or '_EX' in name) + num_fios = len(devices) - num_vfds + device_list = [f"{name} {ip}" for name, ip in devices] + + config = generate_config(num_vfds, num_fios, device_list, dpm_name) + + # Save view.json and copy files + with open(os.path.join(dpm_folder, "view.json"), 'w') as f: + json.dump(config, f, indent=2) + copy_files_to_dpm_folder(dpm_folder) + + except Exception as e: + print(f"Error processing {dpm_name}: {e}") + +def main(): + try: + if not input_file or not os.path.exists(input_file): + print(f"Error: File '{input_file}' not found.") + return + + dpms = parse_dpm_data(input_file) + if not dpms: + print("No DPM data found in the input file.") + return + + print(f"Found {len(dpms)} DPMs. Creating MCM folder '{mcm_folder_name}'...") + create_dpm_folders(dpms, mcm_folder_name) + print("Completed successfully, check the MCM folder!") + + except Exception as e: + print(f"An error occurred: {str(e)}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/PLACE DPM DEVICES/resource.json b/PLACE DPM DEVICES/resource.json new file mode 100644 index 0000000..b4876b1 --- /dev/null +++ b/PLACE DPM DEVICES/resource.json @@ -0,0 +1,17 @@ +{ + "scope": "G", + "version": 1, + "restricted": false, + "overridable": true, + "files": [ + "view.json", + "thumbnail.png" + ], + "attributes": { + "lastModification": { + "actor": "admin", + "timestamp": "2025-07-17T07:45:56Z" + }, + "lastModificationSignature": "39daee1537a141d2a6c70dab9fa8c4cc90b4e23e31420e0222122b62ee315c3a" + } +} \ No newline at end of file diff --git a/PLACE DPM DEVICES/thumbnail.png b/PLACE DPM DEVICES/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3248054506026a65baf70b67dbd8e7eaaf6b59 GIT binary patch literal 147565 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

I7la*@&GN!LR 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 z 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 ").strip() + + # Get parent folder name and use first 5 characters as MCM + parent_folder = os.path.basename(os.path.dirname(view_path)) + mcm = parent_folder[:5] + + with open(view_path, encoding="utf-8") as f: + view = json.load(f) + + children = view.get("root", {}).get("children", []) + for child in children: + meta = child.get("meta", {}) + name = meta.get("name") + if not name: + continue + # Skip if name contains Button or Camera + if "Button" in name or "Camera" in name: + continue + props = child.setdefault("props", {}) + params = props.setdefault("params", {}) + tagProps = params.setdefault("tagProps", []) + # If name ends with _Line, _Line_{number}, or _END, clean it and assign to Station + if re.search(r'(_Line(_\d+)?|_END)$', name): + cleaned = clean_line_end(name) + folder = "Station" + tag_path = f"System/{mcm}/{folder}/{cleaned}" + elif is_ioblock(name): + folder = "IO_BLOCK" + tag_path = f"System/{mcm}/{folder}/{name}" + elif "ERSC" in name: + folder = "Conveyor" + tag_path = f"System/{mcm}/{folder}/{name}" + elif name.startswith("S01") and (re.search(r'GS\d+$', name) or re.search(r'PR\d+$', name)): + folder = "Station" + tag_path = f"System/{mcm}/{folder}/{name}" + elif "CH" in name: + if is_station(name): + folder = "Station" + tag_path = f"System/{mcm}/{folder}/{name}" + else: + folder = "Chute" + tag_path = f"System/{mcm}/{folder}/{name}" + elif name.startswith("S01"): + folder = "Chute" + tag_path = f"System/{mcm}/{folder}/{name}" + elif is_station(name): + folder = "Station" + tag_path = f"System/{mcm}/{folder}/{name}" + else: + folder = "Conveyor" + tag_path = f"System/{mcm}/{folder}/{name}_VFD1" + # Set tagProps at first place + if tagProps: + tagProps[0] = tag_path + else: + tagProps.append(tag_path) + + # Save as view.json (overwrite) + out_path = os.path.join(os.path.dirname(view_path), "view.json") + with open(out_path, "w", encoding="utf-8") as f: + json.dump(view, f, indent=2) + print(f"Updated view saved to {out_path}") + +if __name__ == "__main__": + main() diff --git a/TAGS/generate-tags.py b/TAGS/generate-tags.py new file mode 100644 index 0000000..4356a4d --- /dev/null +++ b/TAGS/generate-tags.py @@ -0,0 +1,296 @@ +""" + !!! YOU MUST DELETE THE EXISTING {MCM_NUMBER}.JSON FILES BEFORE RUNNING THE SCRIPT !!! + This script is used to generate tags.json files for each MCM folder in the Detailed-Views folder. +""" + +import json +import os +import re +import copy + +default_view_path = r"c:\Program Files\Inductive Automation\Ignition\data\projects\MTN6_SCADA\com.inductiveautomation.perspective\views\Detailed-Views" + +def merge_tags(t1, t2): + """ + Merge two tag folder trees, deduplicating tags by name within each folder, preserving folder structure. + """ + if not (isinstance(t1, dict) and isinstance(t2, dict)): + return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2) + + # If both are folders (tagType == 'Folder'), merge their children + if t1.get('tagType') == 'Folder' and t2.get('tagType') == 'Folder': + merged = {k: v for k, v in t1.items() if k != 'tags'} + merged['tags'] = [] + tags1 = {tag['name']: tag for tag in t1.get('tags', [])} + tags2 = {tag['name']: tag for tag in t2.get('tags', [])} + all_names = set(tags1) | set(tags2) + for name in sorted(all_names): + tag1 = tags1.get(name) + tag2 = tags2.get(name) + if tag1 and tag2: + merged['tags'].append(merge_tags(tag1, tag2)) + elif tag1: + merged['tags'].append(copy.deepcopy(tag1)) + elif tag2: + merged['tags'].append(copy.deepcopy(tag2)) + return merged + else: + # Not a folder, just pick one (they should be identical if both exist) + return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2) + +# Filtering and classification rules +def classify_device(name): + skip_keywords = ["Line", "Image", "Button", "Camera", "END", "_S1", "_S2", "image", "PR", "GS", "ERSC", "DIV"] + # Always IO_BLOCK if ends with FIO{num}, SIO{num}, DPM{num} + if any(re.search(rf'{kw}\d+$', name) for kw in ["FIO", "SIO", "DPM"]): + for kw in ["FIO", "SIO", "DPM"]: + if re.search(rf'{kw}\d+$', name): + return {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} + # Skip if PR is in name (unless above rule matched) + if "PR" in name: + return None + if any(kw in name for kw in skip_keywords): + return None + # EPC goes to Station/EPC + if "EPC" in name: + return {"folder": "Station/EPC", "typeId": "Station/EPC", "tagType": "UdtInstance", "name": name} + # SS1 and SS2 go to Station/SS_PB + if "SS1" in name or "SS2" in name: + return {"folder": "Station/SS_PB", "typeId": "Station/SS_PB", "tagType": "UdtInstance", "name": name} + # S01...JR is Station/Chute_JR + if name.startswith("S01") and "JR" in name: + return {"folder": "Station/Chute_JR", "typeId": "Station/Chute_JR", "tagType": "UdtInstance", "name": name} + # JR always goes to Station/JR + if "JR" in name: + return {"folder": "Station/JR", "typeId": "Station/JR", "tagType": "UdtInstance", "name": name} + # IO_BLOCK (priority over CH) + if any(kw in name for kw in ["DPM", "FIO", "SIO", "HUB"]): + for kw in ["DPM", "FIO", "SIO", "HUB"]: + if kw in name: + return {"folder": f"IO_BLOCK/{kw}", "typeId": "IO_BLOCK", "tagType": "UdtInstance", "name": name} + # New rules for Chute (only if not PR or JR) + if "FL" in name and "CH" in name: + return {"folder": "Chute/FL_CHUTE", "typeId": "Chute/FL_CHUTE", "tagType": "UdtInstance", "name": name} + if "CH" in name: + return {"folder": "Chute/Chute", "typeId": "Chute/Chute", "tagType": "UdtInstance", "name": name} + if name.startswith("S01") and name[-1].isdigit(): + if int(name[-1]) % 2 == 0: + return {"folder": "Chute/PalletBuild", "typeId": "Chute/PalletBuild", "tagType": "UdtInstance", "name": name} + else: + return {"folder": "Chute/D2C", "typeId": "Chute/D2C", "tagType": "UdtInstance", "name": name} + # Conveyor rules - everything else is VFD + return {"folder": "Conveyor/VFD", "typeId": "Conveyor/VFD", "tagType": "UdtInstance", "name": name + "_VFD1"} + +def main(): + # Iterate through all subfolders in the default_view_path + if not os.path.isdir(default_view_path): + print(f"Directory not found: {default_view_path}") + return + + for folder_name in os.listdir(default_view_path): + folder_path = os.path.join(default_view_path, folder_name) + if not os.path.isdir(folder_path): + continue + view_json_path = os.path.join(folder_path, "view.json") + if not os.path.isfile(view_json_path): + print(f"No view.json in {folder_path}, skipping.") + continue + + # Read view.json + with open(view_json_path, encoding="utf-8") as f: + view = json.load(f) + + # Extract device names from children + children = view.get("root", {}).get("children", []) + devices = [] + mcm_device_name = None + seen_names = set() # Track seen names to avoid duplicates + + for child in children: + meta = child.get("meta", {}) + name = meta.get("name") + if name and name not in seen_names: # Only process if not seen before + seen_names.add(name) + if mcm_device_name is None and "MCM" in name: + mcm_device_name = name + classified = classify_device(name) + if classified: + devices.append(classified) + + if not mcm_device_name: + mcm_device_name = folder_name # fallback to folder name if not found + + # Initialize folder structure + folders = { + "IO_BLOCK": { + "FIO": [], + "SIO": [], + "DPM": [], + "HUB": [] + }, + "Station": { + "JR": [], + "Chute_JR": [], + "SS_PB": [], + "EPC": [] + }, + "Chute": { + "Chute": [], + "PalletBuild": [], + "D2C": [], + "FL_CHUTE": [] + }, + "Conveyor": { + "VFD": [], + "APF": [] + } + } + + # Organize devices into folders + for dev in devices: + folder_path = dev["folder"].split("/") + if folder_path[0] == "IO_BLOCK": + folders["IO_BLOCK"][folder_path[1]].append(dev) + elif folder_path[0] == "Station": + folders["Station"][folder_path[1]].append(dev) + elif folder_path[0] == "Chute": + folders["Chute"][folder_path[1]].append(dev) + elif folder_path[0] == "Conveyor": + folders["Conveyor"][folder_path[1]].append(dev) + else: + folders[folder_path[0]].append(dev) + + # Build output structure + output = { + "name": mcm_device_name, + "tagType": "Folder", + "tags": [ + { + "name": mcm_device_name, + "typeId": "MCM", + "tagType": "UdtInstance", + "tags": [] + }, + { + "name": "IO_BLOCK", + "tagType": "Folder", + "tags": [ + { + "name": "FIO", + "tagType": "Folder", + "tags": folders["IO_BLOCK"]["FIO"] + }, + { + "name": "SIO", + "tagType": "Folder", + "tags": folders["IO_BLOCK"]["SIO"] + }, + { + "name": "DPM", + "tagType": "Folder", + "tags": folders["IO_BLOCK"]["DPM"] + }, + { + "name": "HUB", + "tagType": "Folder", + "tags": folders["IO_BLOCK"]["HUB"] + } + ] + }, + { + "name": "Station", + "tagType": "Folder", + "tags": [ + { + "name": "JR", + "tagType": "Folder", + "tags": folders["Station"]["JR"] + }, + { + "name": "Chute_JR", + "tagType": "Folder", + "tags": folders["Station"]["Chute_JR"] + }, + { + "name": "SS_PB", + "tagType": "Folder", + "tags": folders["Station"]["SS_PB"] + }, + { + "name": "EPC", + "tagType": "Folder", + "tags": folders["Station"]["EPC"] + } + ] + }, + { + "name": "Chute", + "tagType": "Folder", + "tags": [ + { + "name": "Chute", + "tagType": "Folder", + "tags": folders["Chute"]["Chute"] + }, + { + "name": "PalletBuild", + "tagType": "Folder", + "tags": folders["Chute"]["PalletBuild"] + }, + { + "name": "D2C", + "tagType": "Folder", + "tags": folders["Chute"]["D2C"] + }, + { + "name": "FL_CHUTE", + "tagType": "Folder", + "tags": folders["Chute"]["FL_CHUTE"] + } + ] + }, + { + "name": "Conveyor", + "tagType": "Folder", + "tags": [ + { + "name": "VFD", + "tagType": "Folder", + "tags": folders["Conveyor"]["VFD"] + }, + { + "name": "APF", + "tagType": "Folder", + "tags": folders["Conveyor"]["APF"] + } + ] + } + ] + } + + # Extract MCM number from folder name (e.g., "MCM04" from "MCM04 Chutes") + mcm_match = re.match(r'^(MCM\d+)', folder_name) + if mcm_match: + mcm_name = mcm_match.group(1) + else: + mcm_name = folder_name # fallback to full folder name if no MCM pattern found + + # Write output for each MCM folder + output_json_path = os.path.join(os.path.dirname(__file__), f"{mcm_name}.json") + + # Check if file already exists and merge if it does + if os.path.isfile(output_json_path): + print(f"Existing file found for {mcm_name}, merging data from folder '{folder_name}'...") + with open(output_json_path, "r", encoding="utf-8") as f: + existing_data = json.load(f) + merged_output = merge_tags(existing_data, output) + with open(output_json_path, "w", encoding="utf-8") as f: + json.dump(merged_output, f, indent=2) + print(f"Merged tags JSON updated at: {output_json_path}") + else: + with open(output_json_path, "w", encoding="utf-8") as f: + json.dump(output, f, indent=2) + print(f"New tags JSON generated for {mcm_name} from folder '{folder_name}' at: {output_json_path}") + +if __name__ == "__main__": + main() diff --git a/TAGS/keep-unique.py b/TAGS/keep-unique.py new file mode 100644 index 0000000..57ede57 --- /dev/null +++ b/TAGS/keep-unique.py @@ -0,0 +1,50 @@ +import json +import copy + +def merge_tags(t1, t2): + """ + Merge two tag folder trees, deduplicating tags by name within each folder, preserving folder structure. + """ + if not (isinstance(t1, dict) and isinstance(t2, dict)): + return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2) + + # If both are folders (tagType == 'Folder'), merge their children + if t1.get('tagType') == 'Folder' and t2.get('tagType') == 'Folder': + merged = {k: v for k, v in t1.items() if k != 'tags'} + merged['tags'] = [] + tags1 = {tag['name']: tag for tag in t1.get('tags', [])} + tags2 = {tag['name']: tag for tag in t2.get('tags', [])} + all_names = set(tags1) | set(tags2) + for name in sorted(all_names): + tag1 = tags1.get(name) + tag2 = tags2.get(name) + if tag1 and tag2: + merged['tags'].append(merge_tags(tag1, tag2)) + elif tag1: + merged['tags'].append(copy.deepcopy(tag1)) + elif tag2: + merged['tags'].append(copy.deepcopy(tag2)) + return merged + else: + # Not a folder, just pick one (they should be identical if both exist) + return copy.deepcopy(t1) if t2 is None else copy.deepcopy(t2) + +def main(): + print("Enter path to first tags.json:") + path1 = input(" >>> ").strip() + print("Enter path to second tags.json:") + path2 = input(" >>> ").strip() + + with open(path1, encoding="utf-8") as f: + data1 = json.load(f) + with open(path2, encoding="utf-8") as f: + data2 = json.load(f) + + merged = merge_tags(data1, data2) + + with open("unique-tags.json", "w", encoding="utf-8") as f: + json.dump(merged, f, indent=2) + print("Merged tags written to tags.json") + +if __name__ == "__main__": + main() diff --git a/build.py b/build.py new file mode 100644 index 0000000..1926701 --- /dev/null +++ b/build.py @@ -0,0 +1,271 @@ +import os +import zipfile +import base64 +import subprocess +import tempfile +import shutil + +def create_folders_zip(): + """Create a zip file containing all folders in a single SCRIPTS folder""" + # Folders to include + folders_to_include = [ + "PLACE DPMS", + "PLACE DPM DEVICES", + "OTHER SCRIPTS", + "RESET IGNITION", + "TAGS" + ] + + # Create temporary zip file + temp_zip = "temp_folders.zip" + + with zipfile.ZipFile(temp_zip, 'w', zipfile.ZIP_DEFLATED) as zipf: + for folder in folders_to_include: + if os.path.exists(folder): + print(f"Adding folder: {folder}") + # Walk through the folder and add all files with SCRIPTS prefix + for root, dirs, files in os.walk(folder): + for file in files: + file_path = os.path.join(root, file) + # Create arc_name with SCRIPTS prefix + arc_name = os.path.join("SCRIPTS", os.path.relpath(file_path, '.')) + zipf.write(file_path, arc_name) + print(f" - Added: {arc_name}") + else: + print(f"Warning: Folder '{folder}' not found, skipping...") + + return temp_zip + +def encode_zip_to_base64(zip_file): + """Encode zip file to base64 string""" + with open(zip_file, 'rb') as f: + zip_data = f.read() + + return base64.b64encode(zip_data).decode('utf-8') + +def update_script_with_embedded_data(base64_data): + """Update the script with embedded data""" + script_content = """import os +import shutil +import tkinter as tk +from tkinter import filedialog, messagebox +import sys +import tempfile +import zipfile +import base64 + +# Embedded folder data - this will be populated by the build script +EMBEDDED_FOLDERS_DATA = \"\"\" +{embedded_data} +\"\"\" + +def extract_embedded_folders(): + \"\"\"Extract embedded folders to a temporary location\"\"\" + try: + # Create temporary directory + temp_dir = tempfile.mkdtemp(prefix="folder_creator_") + + # Decode the embedded data + if EMBEDDED_FOLDERS_DATA.strip() == "# This will be replaced with actual base64 encoded zip data during build": + messagebox.showerror("Error", "No embedded folders found in executable!") + return None + + # Decode base64 data + zip_data = base64.b64decode(EMBEDDED_FOLDERS_DATA) + + # Write to temporary zip file + temp_zip = os.path.join(temp_dir, "folders.zip") + with open(temp_zip, 'wb') as f: + f.write(zip_data) + + # Extract zip file + with zipfile.ZipFile(temp_zip, 'r') as zip_ref: + zip_ref.extractall(temp_dir) + + # Remove the zip file + os.remove(temp_zip) + + return temp_dir + + except Exception as e: + messagebox.showerror("Error", f"Failed to extract embedded folders:\\n{{str(e)}}") + return None + +def select_destination_folder(): + \"\"\"Open a dialog for user to select destination folder\"\"\" + root = tk.Tk() + root.withdraw() # Hide the main window + + # Show folder selection dialog + destination = filedialog.askdirectory( + title="Select destination folder for installing folders" + ) + + return destination + +def copy_folders_to_destination(source_path, destination_path): + \"\"\"Copy all folders from source to destination\"\"\" + try: + # Get all items in the source directory + items = os.listdir(source_path) + + # Filter only directories + folders = [item for item in items if os.path.isdir(os.path.join(source_path, item))] + + if not folders: + messagebox.showwarning("Warning", "No folders found in the embedded data!") + return False + + # Create destination if it doesn't exist + if not os.path.exists(destination_path): + os.makedirs(destination_path) + + copied_folders = [] + + # Copy each folder + for folder in folders: + source_folder = os.path.join(source_path, folder) + dest_folder = os.path.join(destination_path, folder) + + # Copy the folder and its contents + shutil.copytree(source_folder, dest_folder) + copied_folders.append(folder) + print(f"Installed: {{folder}}") + + # Show success message + messagebox.showinfo( + "Success", + f"Successfully installed {{len(copied_folders)}} folders to:\\n{{destination_path}}\\n\\nInstalled folders:\\n" + + "\\n".join(copied_folders) + ) + + return True + + except Exception as e: + messagebox.showerror("Error", f"An error occurred while installing folders:\\n{{str(e)}}") + return False + +def cleanup_temp_files(temp_dir): + \"\"\"Clean up temporary files\"\"\" + try: + if temp_dir and os.path.exists(temp_dir): + shutil.rmtree(temp_dir) + except: + pass # Ignore cleanup errors + +def main(): + \"\"\"Main function\"\"\" + print("Folder Installer Tool") + print("=" * 50) + + temp_dir = None + try: + # Extract embedded folders + print("Extracting embedded folders...") + temp_dir = extract_embedded_folders() + + if not temp_dir: + return + + print(f"Extracted to temporary location: {{temp_dir}}") + + # Select destination folder + destination = select_destination_folder() + + if not destination: + print("No destination folder selected. Exiting...") + return + + print(f"Destination directory: {{destination}}") + + # Confirm with user + confirm = messagebox.askyesno( + "Confirm Installation", + f"Install all folders to:\\n{{destination}}\\n\\nProceed?" + ) + + if confirm: + # Copy the folders + success = copy_folders_to_destination(temp_dir, destination) + + if success: + print("Installation completed successfully!") + else: + print("Installation failed!") + else: + print("Installation cancelled by user.") + + finally: + # Clean up temporary files + cleanup_temp_files(temp_dir) + +if __name__ == "__main__": + main() +""".format(embedded_data=base64_data) + + with open("folder_creator_embedded_final.py", "w") as f: + f.write(script_content) + +def build_executable(): + """Build the executable using PyInstaller""" + try: + print("Building executable with embedded folders...") + + # PyInstaller command + cmd = [ + "pyinstaller", + "--onefile", # Create a single executable file + "--windowed", # Don't show console window (optional) + "--name=ScriptsInstaller", # Name of the executable + "folder_creator_embedded_final.py" + ] + + # Run PyInstaller + result = subprocess.run(cmd, capture_output=True, text=True) + + if result.returncode == 0: + print("✅ Executable built successfully!") + print(f"Executable location: {os.path.join('dist', 'ScriptsInstaller.exe')}") + else: + print("❌ Error building executable:") + print(result.stderr) + + except FileNotFoundError: + print("❌ PyInstaller not found. Please install it first:") + print("pip install pyinstaller") + except Exception as e: + print(f"❌ Error: {str(e)}") + +def main(): + """Main build process""" + print("Building Folder Installer with Embedded Folders") + print("=" * 60) + + # Step 1: Create zip file with all folders + print("Step 1: Creating zip file with all folders...") + zip_file = create_folders_zip() + + # Step 2: Encode zip to base64 + print("Step 2: Encoding zip file to base64...") + base64_data = encode_zip_to_base64(zip_file) + print(f"Base64 data length: {len(base64_data)} characters") + + # Step 3: Update script with embedded data + print("Step 3: Updating script with embedded data...") + update_script_with_embedded_data(base64_data) + + # Step 4: Build executable + print("Step 4: Building executable...") + build_executable() + + # Step 5: Cleanup + print("Step 5: Cleaning up temporary files...") + if os.path.exists(zip_file): + os.remove(zip_file) + if os.path.exists("folder_creator_embedded_final.py"): + os.remove("folder_creator_embedded_final.py") + + print("✅ Build process completed!") + +if __name__ == "__main__": + main() \ No newline at end of file