diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/resource.json new file mode 100644 index 0000000..6e26aa2 --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/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-10-13T19:13:50Z" + }, + "lastModificationSignature": "5a32859f2500e344ceafdf82caa7136387e09ee7308abbdfa737f982014723c3" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/thumbnail.png new file mode 100644 index 0000000..44075a0 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3-6/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3-6/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/view.json index 0488e24..1b5ecb5 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3-6/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM01/DPM1_ULC3_6/view.json @@ -833,7 +833,7 @@ }, { "meta": { - "name": "ULC3_06_FIO1" + "name": "ULC3_6_FIO1" }, "position": { "height": 0.1667, @@ -844,7 +844,7 @@ "props": { "params": { "tagProps": [ - "System/MCM01/IO_BLOCK/FIO/ULC3_06_FIO1", + "System/MCM01/IO_BLOCK/FIO/ULC3_6_FIO1", "value", "value", "value", @@ -993,7 +993,7 @@ "y": 0.7583 }, "props": { - "text": "DPM1_ULC3-6", + "text": "DPM1_ULC3_6", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/resource.json new file mode 100644 index 0000000..c6c7c9d --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/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-10-13T19:14:28Z" + }, + "lastModificationSignature": "16ef832b0a6c6d213badb801619f08a70c0fe9870a94d56e54e9adfd8b1054be" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/thumbnail.png new file mode 100644 index 0000000..c57e042 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/view.json index 1ca18fb..ef1a98a 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS1_1/view.json @@ -1046,7 +1046,7 @@ "y": 0.7444 }, "props": { - "text": "DPM1_PS1-1", + "text": "DPM1_PS1_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/resource.json new file mode 100644 index 0000000..90e9e9e --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/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-10-13T19:14:42Z" + }, + "lastModificationSignature": "56a14591a9e4e00dec5410b8b53a661afc65331c03d9d9f82bd8d3b29cabad6f" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/thumbnail.png new file mode 100644 index 0000000..89755c9 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/view.json index be68bee..9b59e25 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM1_PS2_1/view.json @@ -1238,7 +1238,7 @@ "y": 0.749 }, "props": { - "text": "DPM1_PS2-1", + "text": "DPM1_PS2_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/resource.json new file mode 100644 index 0000000..5638191 --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/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-10-13T19:14:51Z" + }, + "lastModificationSignature": "1e3e1b4e5df116d70be27bd5ab387b001496f15c1703ba248a6da9df30751312" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/thumbnail.png new file mode 100644 index 0000000..cb4d550 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/view.json index 8b88a09..4d3808f 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS1_1/view.json @@ -1235,7 +1235,7 @@ "y": 0.7453 }, "props": { - "text": "DPM2_PS1-1", + "text": "DPM2_PS1_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/resource.json new file mode 100644 index 0000000..7cc3395 --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/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-10-13T19:15:15Z" + }, + "lastModificationSignature": "49703d20bf732edf53698773e61ded070bb3831ee6af415ec6c1356f09a3324a" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/thumbnail.png new file mode 100644 index 0000000..22227eb Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/view.json index 6f3c634..7113ea8 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM02/DPM2_PS2_1/view.json @@ -1108,7 +1108,7 @@ "y": 0.736 }, "props": { - "text": "DPM2_PS2-1", + "text": "DPM2_PS2_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/resource.json new file mode 100644 index 0000000..7fac543 --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/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-10-13T19:15:54Z" + }, + "lastModificationSignature": "021c6a8a5ffd7e62575a9f0b50c63e952e98a7c2ec14632ee5a27ee02c50f668" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/thumbnail.png new file mode 100644 index 0000000..1652c15 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/view.json index de2b58d..70637fb 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS3_1/view.json @@ -1117,7 +1117,7 @@ "y": 0.7509 }, "props": { - "text": "DPM1_PS3-1", + "text": "DPM1_PS3_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/resource.json new file mode 100644 index 0000000..05a07ee --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/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-10-13T19:16:02Z" + }, + "lastModificationSignature": "45250a2b4c4cfee45fff9f09128c0df59cc5496084ffb79421e98974f6e2857f" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/thumbnail.png new file mode 100644 index 0000000..9fd3fa0 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/view.json index 0965d13..4e75669 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM1_PS4_1/view.json @@ -1111,7 +1111,7 @@ "y": 0.7398 }, "props": { - "text": "DPM1_PS4-1", + "text": "DPM1_PS4_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/resource.json new file mode 100644 index 0000000..4d1d011 --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/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-10-13T19:16:14Z" + }, + "lastModificationSignature": "990886d902393dfee18f97e6d530415285fbc216c62e707ef93b3a4f1533e344" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/thumbnail.png new file mode 100644 index 0000000..5c259d4 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/view.json index 05177a7..f523199 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS3_1/view.json @@ -1120,7 +1120,7 @@ "y": 0.7435 }, "props": { - "text": "DPM2_PS3-1", + "text": "DPM2_PS3_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/resource.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/resource.json new file mode 100644 index 0000000..fb0fd6a --- /dev/null +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/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-10-13T19:16:26Z" + }, + "lastModificationSignature": "91b980983e967aded2b065feed482c0a30b726970ae60a46d6e091ac926225be" + } +} \ No newline at end of file diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/thumbnail.png b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/thumbnail.png new file mode 100644 index 0000000..2faa019 Binary files /dev/null and b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/thumbnail.png differ diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4-1/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/view.json similarity index 99% rename from CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4-1/view.json rename to CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/view.json index e1e30a7..1d16692 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4-1/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/DPM Devices/MCM03/DPM2_PS4_1/view.json @@ -1297,7 +1297,7 @@ "y": 0.7509 }, "props": { - "text": "DPM2_PS4-1", + "text": "DPM2_PS4_1", "textStyle": { "fontSize": "2vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM01-DPM/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM01-DPM/view.json index ff73e64..5a4a5b3 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM01-DPM/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM01-DPM/view.json @@ -417,7 +417,7 @@ "y": 0.6 }, "props": { - "text": "DPM1_ULC3-6 11.200.1.4", + "text": "DPM1_ULC3_6 11.200.1.4", "textStyle": { "fontSize": "1vmin" } diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM02-DPM/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM02-DPM/view.json index f45e032..0281cc5 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM02-DPM/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM02-DPM/view.json @@ -230,10 +230,10 @@ "name": "MCM" }, "position": { - "height": 0.5, - "width": 0.3333, - "x": 0.6666, - "y": 0.5 + "height": 0.4262, + "width": 0.3839, + "x": 0.6681, + "y": 0.5066 }, "propConfig": { "props.params.communicationFaulted": { @@ -274,9 +274,10 @@ "name": "DPM1_PS1-1" }, "position": { - "height": 0.5, - "width": 0.3333, - "x": 0.6666 + "height": 0.4262, + "width": 0.3839, + "x": 0.6681, + "y": 0.0825 }, "propConfig": { "props.params.communicationFaulted": { @@ -324,9 +325,10 @@ "name": "DPM1_PS2-1" }, "position": { - "height": 0.5, - "width": 0.3333, - "x": 0.3333 + "height": 0.4262, + "width": 0.3839, + "x": 0.3333, + "y": 0.0825 }, "propConfig": { "props.params.communicationFaulted": { @@ -374,8 +376,10 @@ "name": "DPM2_PS1-1" }, "position": { - "height": 0.5, - "width": 0.3333 + "height": 0.4262, + "width": 0.3839, + "x": -0.0055, + "y": 0.082 }, "propConfig": { "props.params.communicationFaulted": { @@ -422,9 +426,10 @@ "name": "DPM2_PS2-1" }, "position": { - "height": 0.5, - "width": 0.3333, - "y": 0.5 + "height": 0.4262, + "width": 0.3839, + "x": -0.0055, + "y": 0.5065 }, "propConfig": { "props.params.communicationFaulted": { @@ -463,11 +468,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.65, - "y": 0.1 + "x": 0.8411, + "y": 0.0783 }, "props": { - "text": "DPM1_PS1-1 11.200.1.2", + "text": "DPM1_PS1_1 11.200.1.2", "textStyle": { "fontSize": "1vmin" } @@ -481,11 +486,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.32, - "y": 0.1 + "x": 0.5044, + "y": 0.0737 }, "props": { - "text": "DPM1_PS2-1 11.200.1.4", + "text": "DPM1_PS2_1 11.200.1.4", "textStyle": { "fontSize": "1vmin" } @@ -499,11 +504,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.005, - "y": 0.1 + "x": 0.1644, + "y": 0.0748 }, "props": { - "text": "DPM2_PS1-1 11.200.1.3", + "text": "DPM2_PS1_1 11.200.1.3", "textStyle": { "fontSize": "1vmin" } @@ -517,11 +522,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.005, - "y": 0.6 + "x": 0.1644, + "y": 0.4981 }, "props": { - "text": "DPM2_PS2-1 11.200.1.5", + "text": "DPM2_PS2_1 11.200.1.5", "textStyle": { "fontSize": "1vmin" } @@ -545,8 +550,8 @@ }, "position": { "height": 0.5, - "width": 0.3333, - "x": 0.3333, + "width": 0.2901, + "x": 0.3785, "y": 0.4999 }, "props": { diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM03-DPM/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM03-DPM/view.json index b1ae991..9b59993 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM03-DPM/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM03-DPM/view.json @@ -230,10 +230,10 @@ "name": "MCM" }, "position": { - "height": 0.5, - "width": 0.3333, + "height": 0.4262, + "width": 0.3839, "x": 0.6666, - "y": 0.5 + "y": 0.5059 }, "propConfig": { "props.params.communicationFaulted": { @@ -274,9 +274,10 @@ "name": "DPM1_PS3-1" }, "position": { - "height": 0.5, - "width": 0.3333, - "x": 0.6666 + "height": 0.4262, + "width": 0.3839, + "x": 0.6666, + "y": 0.0804 }, "propConfig": { "props.params.communicationFaulted": { @@ -324,9 +325,10 @@ "name": "DPM1_PS4-1" }, "position": { - "height": 0.5, - "width": 0.3333, - "x": 0.3333 + "height": 0.4262, + "width": 0.3839, + "x": 0.3333, + "y": 0.0804 }, "propConfig": { "props.params.communicationFaulted": { @@ -374,8 +376,10 @@ "name": "DPM2_PS3-1" }, "position": { - "height": 0.5, - "width": 0.3333 + "height": 0.4262, + "width": 0.3839, + "x": -0.0075, + "y": 0.0804 }, "propConfig": { "props.params.communicationFaulted": { @@ -422,9 +426,10 @@ "name": "DPM2_PS4-1" }, "position": { - "height": 0.5, - "width": 0.3333, - "y": 0.5 + "height": 0.4262, + "width": 0.3839, + "x": -0.0075, + "y": 0.5067 }, "propConfig": { "props.params.communicationFaulted": { @@ -463,11 +468,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.65, - "y": 0.1 + "x": 0.8443, + "y": 0.0731 }, "props": { - "text": "DPM1_PS3-1 11.200.1.2", + "text": "DPM1_PS3_1 11.200.1.2", "textStyle": { "fontSize": "1vmin" } @@ -481,11 +486,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.32, - "y": 0.1 + "x": 0.508, + "y": 0.0776 }, "props": { - "text": "DPM1_PS4-1 11.200.1.4", + "text": "DPM1_PS4_1 11.200.1.4", "textStyle": { "fontSize": "1vmin" } @@ -499,11 +504,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.005, - "y": 0.1 + "x": 0.1826, + "y": 0.072 }, "props": { - "text": "DPM2_PS3-1 11.200.1.3", + "text": "DPM2_PS3_1 11.200.1.3", "textStyle": { "fontSize": "1vmin" } @@ -517,11 +522,11 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.005, - "y": 0.6 + "x": 0.1685, + "y": 0.5004 }, "props": { - "text": "DPM2_PS4-1 11.200.1.5", + "text": "DPM2_PS4_1 11.200.1.5", "textStyle": { "fontSize": "1vmin" } @@ -544,10 +549,10 @@ "name": "DEVICE" }, "position": { - "height": 0.5, - "width": 0.3333, - "x": 0.3333, - "y": 0.4999 + "height": 0.4094, + "width": 0.2953, + "x": 0.3737, + "y": 0.5081 }, "props": { "params": { @@ -574,7 +579,8 @@ "props": { "mode": "percent", "style": { - "backgroundColor": "#ffffff" + "backgroundColor": "#ffffff", + "overflow": "hidden" } }, "type": "ia.container.coord" diff --git a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM04-DPM/view.json b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM04-DPM/view.json index f19218f..5b9a068 100644 --- a/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM04-DPM/view.json +++ b/CNO8_SCADA/com.inductiveautomation.perspective/views/Windows/Tabs/Enternet Windows/DPMs/MCM04-DPM/view.json @@ -764,8 +764,8 @@ "position": { "height": 0.0358, "width": 0.0547, - "x": 0.065, - "y": 0.3 + "x": 0.0077, + "y": 0.1009 }, "props": { "text": "DPM03_VS01A 11.200.1.4", diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/style-classes/Highlight/Pulse/style.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/style-classes/Highlight/Pulse/style.json deleted file mode 100644 index 825d919..0000000 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/style-classes/Highlight/Pulse/style.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "base": { - "animation": { - "duration": "2.5s", - "keyframes": { - "0%": { - "boxShadow": "0 0 12px 5px rgba(255, 255, 0, 0.8)" - }, - "50%": { - "boxShadow": "0 0 20px 8px rgba(255, 255, 0, 1)" - }, - "100%": { - "boxShadow": "0 0 5px 2px rgba(255, 255, 0, 0.3)" - } - } - } - } -} \ No newline at end of file diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/HistoricalAlarms/view.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/HistoricalAlarms/view.json index c9bb3ef..a3ab520 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/HistoricalAlarms/view.json +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/HistoricalAlarms/view.json @@ -106,14 +106,14 @@ } }, "props": { - "formattedValue": "Oct 11, 2025 1:43 AM", + "formattedValue": "Oct 13, 2025 9:20 PM", "value": { "$": [ "ts", 192, - 1760121836384 + 1760365224310 ], - "$ts": 1760132636382 + "$ts": 1760376024303 } }, "type": "ia.input.date-time-input" @@ -156,14 +156,14 @@ "shrink": 0 }, "props": { - "formattedValue": "Oct 11, 2025 2:43 AM", + "formattedValue": "Oct 13, 2025 10:20 PM", "value": { "$": [ "ts", 192, - 1760121836384 + 1760365224308 ], - "$ts": 1760136236382 + "$ts": 1760379624303 } }, "type": "ia.input.date-time-input" diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/RealTime/view.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/RealTime/view.json index 947cb5d..9113260 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/RealTime/view.json +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Alarm-Views/RealTime/view.json @@ -13,6 +13,17 @@ } } }, + "events": { + "system": { + "onStartup": { + "config": { + "script": "\tself.getChild(\"root\").getChild(\"TabContainer\").getChild(\"Hit_List\").getChild(\"FlexContainer\").getChild(\"Time\").getChild(\"Dropdown\").props.value \u003d 30\n\tself.getChild(\"root\").getChild(\"TabContainer\").getChild(\"Historical_tab\").getChild(\"root\").getChild(\"Filters\").getChild(\"Time\").getChild(\"Dropdown\").props.value \u003d 30" + }, + "scope": "G", + "type": "script" + } + } + }, "params": {}, "propConfig": { "custom.activityLogger": { @@ -709,15 +720,8 @@ } }, "custom.query": { - "binding": { - "config": { - "expression": "now(1000)" - }, - "enabled": false, - "type": "expr" - }, "onChange": { - "enabled": null, + "enabled": false, "script": "\tfrom system import date\n\t\n\tdef class_color(cls):\n\t\tm \u003d {\"Error\":\"#FFE5E5\",\"Warning\":\"#FFF7E0\",\"Message\":\"#EAF4FF\"}\n\t\treturn m.get(cls, \"#FFFFFF\")\n\t\n\tdef mk_row(number_id, start_ts, end_ts, duration_hms, cls, area, desc_, tag_):\n\t\treturn {\n\t\t\t\"value\": {\n\t\t\t\t\"NumberID\": number_id,\n\t\t\t\t\"Start Timestamp\": start_ts,\n\t\t\t\t\"End Timestamp\": end_ts,\n\t\t\t\t\"Duration\": duration_hms,\n\t\t\t\t\"Class\": cls,\n\t\t\t\t\"Area\": area,\n\t\t\t\t\"Description\": desc_,\n\t\t\t\t\"Tag\": tag_\n\t\t\t},\n\t\t\t\"style\": {\"backgroundColor\": class_color(cls), \"classes\": \"some-class\"}\n\t\t}\n\t\n\tds_name \u003d \"MariaDB80\"\n\t\n\t# Time window (java.util.Date)\n\tend_dt \u003d getattr(self.custom, \"endTime\", None) or date.now()\n\tstart_dt \u003d getattr(self.custom, \"startTime\", None) or date.addHours(end_dt, -24)\n\t\n\t# Class filter from DropdownMinClass\n\ttry:\n\t\tmin_choice \u003d self.parent.parent.parent.getChild(\"DropdownMinClass\").props.value\n\texcept:\n\t\tmin_choice \u003d \"Message\"\n\t\n\tif min_choice \u003d\u003d \"Error\":\n\t\tclass_list \u003d [\"Error\"]\n\telif min_choice \u003d\u003d \"Warning\":\n\t\tclass_list \u003d [\"Error\",\"Warning\"]\n\telse:\n\t\tclass_list \u003d [\"Error\",\"Warning\",\"Message\"]\n\t\n\tcls1 \u003d class_list[0] if len(class_list)\u003e0 else None\n\tcls2 \u003d class_list[1] if len(class_list)\u003e1 else None\n\tcls3 \u003d class_list[2] if len(class_list)\u003e2 else None\n\t\n\t# Optional priorities CSV from self.custom.priorities\n\tpriorities_csv \u003d getattr(self.custom, \"priorities\", \"\") or \"\"\n\t\n\tsql \u003d u\"\"\"\n\tSELECT\n\t ae.id AS NumberID,\n\t ae.eventtime AS `Start Timestamp`,\n\t clr.eventtime AS `End Timestamp`,\n\t IFNULL(\n\t SEC_TO_TIME(TIMESTAMPDIFF(SECOND, ae.eventtime, clr.eventtime)),\n\t SEC_TO_TIME(TIMESTAMPDIFF(SECOND, ae.eventtime, NOW()))\n\t ) AS Duration,\n\t cls.strvalue AS Class,\n\t loc.strvalue AS Area,\n\t des.strvalue AS Description,\n\t tag.strvalue AS Tag\n\tFROM alarm_events ae\n\tLEFT JOIN alarm_events clr\n\t ON clr.eventid \u003d ae.eventid AND clr.eventtype \u003d 1\n\tLEFT JOIN alarm_event_data cls\n\t ON cls.id \u003d ae.id AND cls.propname \u003d \u0027Class\u0027\n\tLEFT JOIN alarm_event_data loc\n\t ON loc.id \u003d ae.id AND loc.propname \u003d \u0027Area\u0027\n\tLEFT JOIN alarm_event_data des\n\t ON des.id \u003d ae.id AND des.propname \u003d \u0027Description\u0027\n\tLEFT JOIN alarm_event_data tag\n\t ON tag.id \u003d ae.id AND tag.propname \u003d \u0027Tag\u0027\n\tWHERE\n\t ae.eventtype \u003d 0\n\t AND ae.eventtime BETWEEN ? AND ?\n\t AND (\n\t ( ? IS NOT NULL AND cls.strvalue \u003d ? )\n\t OR ( ? IS NOT NULL AND cls.strvalue \u003d ? )\n\t OR ( ? IS NOT NULL AND cls.strvalue \u003d ? )\n\t )\n\t AND ( ? \u003d \u0027\u0027 OR FIND_IN_SET(CAST(ae.priority AS CHAR), ?) \u003e 0 )\n\tORDER BY ae.eventtime DESC\n\t\"\"\"\n\t\n\t# ORDER MATTERS: must match the ? placeholders above\n\tparams \u003d [\n\t\tstart_dt, end_dt,\n\t\tcls1, cls1,\n\t\tcls2, cls2,\n\t\tcls3, cls3,\n\t\tpriorities_csv, priorities_csv\n\t]\n\t\n\trows \u003d system.db.runPrepQuery(sql, params, ds_name)\n\t\n\tdata \u003d []\n\tfor r in rows:\n\t\ttry:\n\t\t\tstart_s \u003d system.date.format(r[\"Start Timestamp\"], \"yyyy-MM-dd HH:mm:ss\") if r[\"Start Timestamp\"] else \"\"\n\t\t\tend_s \u003d system.date.format(r[\"End Timestamp\"], \"yyyy-MM-dd HH:mm:ss\") if r[\"End Timestamp\"] else \"\"\n\t\t\tdur_s \u003d str(r[\"Duration\"]) if r[\"Duration\"] is not None else \"\"\n\t\t\tdata.append(\n\t\t\t\tmk_row(\n\t\t\t\t\tnumber_id \u003d int(r[\"NumberID\"]) + 30000,\n\t\t\t\t\tstart_ts \u003d start_s,\n\t\t\t\t\tend_ts \u003d end_s,\n\t\t\t\t\tduration_hms\u003d dur_s,\n\t\t\t\t\tcls \u003d r[\"Class\"] or \"\",\n\t\t\t\t\tarea \u003d r[\"Area\"] or \"\",\n\t\t\t\t\tdesc_ \u003d r[\"Description\"] or \"\",\n\t\t\t\t\ttag_ \u003d r[\"Tag\"] or \"\"\n\t\t\t\t)\n\t\t\t)\n\t\texcept Exception as ex:\n\t\t\tsystem.perspective.print(\"Row shape error: %s\" % ex)\n\t\n\tself.props.data \u003d data" } }, @@ -1656,17 +1660,17 @@ "$": [ "ts", 192, - 1760194486056 + 1760375320766 ], - "$ts": 1760194486056 + "$ts": 1760375320765 }, "startDate": { "$": [ "ts", 192, - 1760194486056 + 1760375320766 ], - "$ts": 1760192686056 + "$ts": 1760373520765 } }, "meta": { @@ -1840,7 +1844,7 @@ } }, "props": { - "formattedValue": "Oct 11, 2025 6:24 PM", + "formattedValue": "Oct 13, 2025 8:38 PM", "style": { "margin": 15 } @@ -1924,7 +1928,7 @@ } }, "props": { - "formattedValue": "Oct 11, 2025 6:54 PM", + "formattedValue": "Oct 13, 2025 9:08 PM", "style": { "margin": 15 }, @@ -1932,9 +1936,9 @@ "$": [ "ts", 192, - 1760194486056 + 1760375320766 ], - "$ts": 1760194486056 + "$ts": 1760375320765 } }, "scripts": { @@ -1976,6 +1980,10 @@ }, "props": { "options": [ + { + "label": "All", + "value": "" + }, { "label": "MCM01", "value": "MCM01" @@ -1995,6 +2003,10 @@ { "label": "MCM05", "value": "MCM05" + }, + { + "label": "SMC", + "value": "SMC" } ], "placeholder": { @@ -2168,7 +2180,7 @@ }, "polling": { "enabled": true, - "rate": "3" + "rate": "10" }, "queryPath": "GetAlarmsWithCount" }, @@ -2545,7 +2557,7 @@ }, "render": "auto", "resizable": true, - "sort": "descending", + "sort": "none", "sortable": true, "strictWidth": false, "style": { @@ -3132,10 +3144,7 @@ }, "pager": { "activeOption": 100 - }, - "sortOrder": [ - "Priority" - ] + } }, "type": "ia.display.table" } @@ -3150,17 +3159,6 @@ "type": "ia.container.flex" } ], - "events": { - "system": { - "onStartup": { - "config": { - "script": "\t\t# View.onStartup\n\ttry:\n\t timeFlex \u003d self.getChild(\"FlexContainer\").getChild(\"Time\")\n\t dd \u003d timeFlex.getChild(\"Dropdown\")\n\t dtStart \u003d timeFlex.getChild(\"DateTimeInput\")\n\t dtEnd \u003d timeFlex.getChild(\"DateTimeInput_0\")\n\t\n\t # Force \"Past 30 Min\" (this triggers your dropdown onChange -\u003e sets dates)\n\t dd.props.value \u003d 30\n\t\n\t # Apply filters 1 second later (after bindings settle)\n\t def applyFilters():\n\t messaging.message_handler.set_time_from_filters(dtStart)\n\t messaging.message_handler.set_time_to_filters(dtEnd)\n\t\n\t #system.util.invokeLater(applyFilters, 1000)\n\t\n\texcept Exception as ex:\n\t system.util.getLogger(\"Hit_List\").error(\"Init failed: %s\" % ex)" - }, - "scope": "G", - "type": "script" - } - } - }, "meta": { "name": "Hit_List" }, @@ -3284,17 +3282,17 @@ "$": [ "ts", 192, - 1760194491086 + 1760375320767 ], - "$ts": 1760194491085 + "$ts": 1760375320764 }, "startDate": { "$": [ "ts", 192, - 1760194491086 + 1760375320765 ], - "$ts": 1760192691085 + "$ts": 1760373520764 } }, "meta": { @@ -3461,7 +3459,7 @@ } }, "props": { - "formattedValue": "Oct 11, 2025 6:24 PM", + "formattedValue": "Oct 13, 2025 8:38 PM", "minDate": { "$": [ "ts", @@ -3553,7 +3551,7 @@ } }, "props": { - "formattedValue": "Oct 11, 2025 6:54 PM", + "formattedValue": "Oct 13, 2025 9:08 PM", "style": { "margin": 15 }, @@ -3561,9 +3559,9 @@ "$": [ "ts", 192, - 1760194491086 + 1760375320767 ], - "$ts": 1760194491085 + "$ts": 1760375320764 } }, "scripts": { @@ -3635,6 +3633,10 @@ }, "props": { "options": [ + { + "label": "All", + "value": "" + }, { "label": "Diagnostic", "value": "diagnostic" @@ -3650,10 +3652,6 @@ { "label": "High", "value": "high" - }, - { - "label": "All", - "value": "" } ], "style": { @@ -3836,7 +3834,7 @@ "$ts": 1747562336635 }, "page_size": 100, - "record_count": 1, + "record_count": 1701, "source_id_filters": null, "type_filters": null }, @@ -3894,6 +3892,12 @@ "config": { "path": "this.custom.time_from_filter" }, + "transforms": [ + { + "expression": "coalesce({value}, dateArithmetic(now(), -30, \"minute\"))", + "type": "expression" + } + ], "type": "property" } }, @@ -3902,6 +3906,12 @@ "config": { "path": "this.custom.time_to_filter" }, + "transforms": [ + { + "expression": "coalesce({value},NOW())", + "type": "expression" + } + ], "type": "property" } }, @@ -3919,6 +3929,12 @@ "config": { "path": "this.custom.priority_filters" }, + "transforms": [ + { + "expression": "coalesce({value},\"\")", + "type": "expression" + } + ], "type": "property" } }, @@ -3934,18 +3950,19 @@ "binding": { "config": { "parameters": { + "TabIndex": "{....../TabContainer.props.currentTabIndex}", "endtime": "{this.custom.time_to_filter}", "starttime": "{this.custom.time_from_filter}" }, "polling": { "enabled": true, - "rate": "3" + "rate": "10" }, "queryPath": "GetAlarms" }, "transforms": [ { - "code": "\t# Transform (script)\n\tfrom system.dataset import toPyDataSet\n\t\n\t# Handle null/empty input\n\tds \u003d toPyDataSet(value) if value is not None else None\n\tif not ds:\n\t self.custom.loading \u003d False\n\t self.custom.record_count \u003d 0\n\t self.custom.hit_limit \u003d False\n\t return []\n\t\n\t# Priority to style class mapping\n\tPRIORITY_STYLES \u003d {\n\t \"High\": \"Alarms-Styles/High\",\n\t \"Medium\": \"Alarms-Styles/Medium\",\n\t \"Low\": \"Alarms-Styles/Low\",\n\t \"Diagnostic\": \"Alarms-Styles/Diagnostic\",\n\t \"Critical\": \"Alarms-Styles/Critical\"\n\t}\n\tDEFAULT_STYLE \u003d \"Alarms-Styles/NoAlarm\"\n\t\n\t\n\tcols \u003d list(ds.columnNames)\n\tdata \u003d []\n\t\n\tfor row in ds:\n\t # Get priority and map to style class\n\t priority \u003d row.get(\"Priority\", None) if hasattr(row, \"get\") else row[\"Priority\"]\n\t className \u003d PRIORITY_STYLES.get(priority, DEFAULT_STYLE)\n\t \n\t # Build row with transformations\n\t row_dict \u003d {}\n\t for col in cols:\n\t cell_value \u003d row[col]\n\t \n\t # Transform Location: Chute -\u003e SMC\n\t if col \u003d\u003d \"Location\" and cell_value \u003d\u003d \"Chute\":\n\t cell_value \u003d \"SMC\"\n\t \n\t row_dict[col] \u003d {\n\t \"value\": cell_value,\n\t \"style\": {\"classes\": className}\n\t }\n\t \n\t data.append(row_dict)\n\t\n\t# Update component state\n\tself.custom.loading \u003d False\n\tself.custom.record_count \u003d len(data)\n\tself.custom.hit_limit \u003d False\n\t\n\treturn data", + "code": "\t# Transform (script)\n\tfrom system.dataset import toPyDataSet\n\t\n\t# Handle null/empty input\n\tds \u003d toPyDataSet(value) if value is not None else None\n#\tif not ds:\n#\t self.custom.loading \u003d False\n#\t self.custom.record_count \u003d 0\n#\t self.custom.hit_limit \u003d False\n#\t return []\n\t\n\t# Priority to style class mapping\n\tPRIORITY_STYLES \u003d {\n\t \"High\": \"Alarms-Styles/High\",\n\t \"Medium\": \"Alarms-Styles/Medium\",\n\t \"Low\": \"Alarms-Styles/Low\",\n\t \"Diagnostic\": \"Alarms-Styles/Diagnostic\",\n\t \"Critical\": \"Alarms-Styles/Critical\"\n\t}\n\tDEFAULT_STYLE \u003d \"Alarms-Styles/NoAlarm\"\n\t\n\t\n\tcols \u003d list(ds.columnNames)\n\tdata \u003d []\n\t\n\tfor row in ds:\n\t # Get priority and map to style class\n\t priority \u003d row.get(\"Priority\", None) if hasattr(row, \"get\") else row[\"Priority\"]\n\t className \u003d PRIORITY_STYLES.get(priority, DEFAULT_STYLE)\n\t \n\t # Build row with transformations\n\t row_dict \u003d {}\n\t for col in cols:\n\t cell_value \u003d row[col]\n\t \n\t # Transform Location: Chute -\u003e SMC\n\t if col \u003d\u003d \"Location\" and cell_value \u003d\u003d \"Chute\":\n\t cell_value \u003d \"SMC\"\n\t \n\t row_dict[col] \u003d {\n\t \"value\": cell_value,\n\t \"style\": {\"classes\": className}\n\t }\n\t \n\t data.append(row_dict)\n\t\n\t# Update component state\n\tself.custom.loading \u003d False\n\tself.custom.record_count \u003d len(data)\n\tself.custom.hit_limit \u003d False\n\t\n\treturn data", "type": "script" } ], @@ -4981,6 +4998,13 @@ "script": "\tduration \u003d payload[\"data\"]\n\tself.custom.duration_filter \u003d duration", "sessionScope": false, "viewScope": false + }, + { + "messageType": "refreshHistoricalTable", + "pageScope": true, + "script": "\tself.refreshBinding(\"props.data\")", + "sessionScope": false, + "viewScope": true } ] }, @@ -5678,7 +5702,7 @@ "props.currentTabIndex": { "onChange": { "enabled": null, - "script": "\t# Tab Container -\u003e props.currentTabIndex : propertyChange\n\t\n\t# 1) Optional: reset filters whenever leaving the first tab\n\tif self.props.currentTabIndex !\u003d 0:\n\t try:\n\t payload \u003d {\"reset\": \"false\"}\n\t # Active alarms/hit list reset\n\t system.perspective.sendMessage(\"reset-filters\", payload\u003dpayload, scope\u003d\"page\")\n\t # Historical widgets reset (if you want them cleared when switching tabs)\n\t system.perspective.sendMessage(\"reset-historical-filters\", payload\u003d\"reset\", scope\u003d\"page\")\n\t except Exception as ex:\n\t system.util.getLogger(\"TabChange\").warn(\"Reset broadcast failed: %s\" % ex)\n\t\n\t# 2) Hit_List (2nd tab, index \u003d 1) -\u003e force last 30 minutes and apply\n\tif currentValue.value \u003d\u003d 1:\n\t try:\n\t hit \u003d self.getChild(\"Hit_List\")\n\t timeFlex \u003d hit.getChild(\"FlexContainer\").getChild(\"Time\")\n\t dd \u003d timeFlex.getChild(\"Dropdown\")\n\t dtStart \u003d timeFlex.getChild(\"DateTimeInput\")\n\t dtEnd \u003d timeFlex.getChild(\"DateTimeInput_0\")\n\t\n\t # Always set to Past 30 Min on entering Hit_List\n\t dd.custom.customTime \u003d False\n\t dd.props.value \u003d 30 # triggers Dropdown onChange -\u003e sets start/end (now-30m..now)\n\t\n\t # Apply your filters after bindings settle\n\t def applyFilters_HitList():\n\t messaging.message_handler.set_time_from_filters(dtStart)\n\t messaging.message_handler.set_time_to_filters(dtEnd)\n\t\n\t #system.util.invokeLater(applyFilters_HitList, 1000)\n\t\n\t except Exception as ex:\n\t system.util.getLogger(\"Hit_List_Init\").warn(\"Init failed: %s\" % ex)\n\t\n\t # Your existing Hit_List code (shelved alarms collection)\n\t try:\n\t shelved_info \u003d system.alarm.getShelvedPaths()\n\t alarms \u003d system.alarm.queryStatus(includeShelved\u003dTrue)\n\t\n\t tableData \u003d []\n\t for alarm in alarms:\n\t if alarm.isShelved() and not alarm.isAcked() and not alarm.isCleared():\n\t alarm_path \u003d str(alarm.getSource())\n\t activeData \u003d alarm.getActiveData()\n\t startTime \u003d activeData.getTimestamp() if activeData else None\n\t\n\t # Find shelved info for this alarm\n\t shelveEntry \u003d \"\"\n\t for shelved_item in shelved_info:\n\t shelved_str \u003d str(shelved_item)\n\t if alarm_path in shelved_str:\n\t if \",\" in shelved_str:\n\t start_idx \u003d shelved_str.find(\",\")\n\t shelveEntry \u003d shelved_str[start_idx + 1:].rstrip(\"}\")\n\t break\n\t\n\t # Parse expiration\n\t expiration \u003d \"\"\n\t if shelveEntry and \"expiration:\" in shelveEntry:\n\t exp_part \u003d shelveEntry.split(\"expiration:\")[1]\n\t expiration \u003d exp_part.split(\",\")[0].strip() if \",\" in exp_part else exp_part.strip()\n\t\n\t if startTime:\n\t tableData.append({\n\t \"name\": alarm.getName(),\n\t \"path\": alarm_path,\n\t \"activeTime\": system.date.format(system.date.fromMillis(startTime), \"yyyy-MM-dd HH:mm:ss\"),\n\t \"expirationTime\": expiration,\n\t \"priority\": str(alarm.getPriority())\n\t })\n\t\n\t self.custom.shelvedAlarms \u003d tableData\n\t except Exception as ex:\n\t system.util.getLogger(\"Hit_List_Shelved\").warn(\"Shelved collection failed: %s\" % ex)\n\t\n\t# 3) Historical_tab (3rd tab, index \u003d 2) -\u003e force last 30 minutes and apply\n\tif currentValue.value \u003d\u003d 2:\n\t try:\n\t hist \u003d self.getChild(\"Historical_tab\")\n\t timeFlex \u003d hist.getChild(\"root\").getChild(\"Filters\").getChild(\"Time\")\n\t dd \u003d timeFlex.getChild(\"Dropdown\")\n\t dtStart \u003d timeFlex.getChild(\"DateTimeInput\")\n\t dtEnd \u003d timeFlex.getChild(\"DateTimeInput_0\")\n\t\n\t # Always set to Past 30 Min on entering Historical\n\t dd.custom.customTime \u003d False\n\t dd.props.value \u003d 30 # triggers Dropdown onChange -\u003e sets start/end (now-30m..now)\n\t\n\t # Apply the filters after bindings settle (table listens to DateTime inputs)\n\t def applyFilters_Historical():\n\t messaging.message_handler.set_time_from_filters(dtStart)\n\t messaging.message_handler.set_time_to_filters(dtEnd)\n\t\n\t system.util.invokeLater(applyFilters_Historical, 1000)\n\t\n\t except Exception as ex:\n\t system.util.getLogger(\"Historical_Init\").warn(\"Init failed: %s\" % ex)\n\t\n\t# 4) Activity Logger (unchanged)\n\ttry:\n\t pageid \u003d self.view.custom.activityLogger.alt_pageid + \u0027/\u0027 + self.props.tabs[previousValue.value]\n\t pageid \u003d pageid.replace(\u0027 \u0027, \u0027\u0027)\n\t payload \u003d activityLog.productMetrics.createActivityPayload(self.view, \u0027page\u0027, pageid, pageid)\n\t self.view.custom.activityLogger.start_time \u003d system.date.now()\n\t if payload:\n\t system.perspective.sendMessage(\u0027activityLogger-TabChanged\u0027, payload\u003dpayload, scope\u003d\u0027page\u0027)\n\texcept:\n\t pass" + "script": "\tlogger \u003d system.util.getLogger(\"DropdownTimeChange\")\n\n\ttry:\n\t\tif currentValue is None or currentValue.value is None:\n\t\t\tlogger.info(\"No currentValue, exiting.\")\n\t\t\treturn\n\n\t\tval_num \u003d int(currentValue.value)\n\t\tlogger.info(\"Tab index changed to: %d\" % val_num)\n\n\t\t# Get dropdown for each tab\n\t\tif val_num \u003d\u003d 1:\n\t\t\tdd \u003d self.getChild(\"Hit_List\").getChild(\"FlexContainer\").getChild(\"Time\").getChild(\"Dropdown\")\n\t\t\tlogger.info(\"Selected Hit_List Dropdown.\")\n\t\telif val_num \u003d\u003d 2:\n\t\t\tdd \u003d self.getChild(\"Historical_tab\").getChild(\"root\").getChild(\"Filters\").getChild(\"Time\").getChild(\"Dropdown\")\n\t\t\tlogger.info(\"Selected Historical_tab Dropdown.\")\n\t\telse:\n\t\t\tlogger.info(\"Unhandled tab value: %s\" % str(val_num))\n\t\t\treturn\n\n\t\tnow \u003d system.date.now()\n\t\ttoday0 \u003d system.date.setTime(now, 0, 0, 0)\n\t\tyday0 \u003d system.date.addDays(today0, -1)\n\n\t\tval \u003d str(dd.props.value or \u0027\u0027).strip()\n\t\tlogger.info(\"Dropdown value: %s\" % val)\n\n\t\tif val \u003d\u003d \"custom\":\n\t\t\tdd.custom.customTime \u003d True\n\t\t\tlogger.info(\"Custom mode selected — skipping time overwrite.\")\n\t\t\treturn\n\t\tdd.custom.customTime \u003d False\n\n\t\tdef t(day, h, m, s):\n\t\t\treturn system.date.setTime(day, h, m, s)\n\n\t\tif val \u003d\u003d \"currentDay\":\n\t\t\tstart, end \u003d today0, now\n\t\telif val \u003d\u003d \"morning\":\n\t\t\tstart, end \u003d t(today0, 2, 30, 0), t(today0, 7, 30, 0)\n\t\telif val \u003d\u003d \"daylight\":\n\t\t\tstart, end \u003d t(today0, 7, 30, 0), t(today0, 13, 0, 0)\n\t\telif val \u003d\u003d \"twilight\":\n\t\t\tif now \u003e\u003d t(today0, 13, 0, 0):\n\t\t\t\tstart, end \u003d t(today0, 13, 0, 0), now\n\t\t\telse:\n\t\t\t\tstart, end \u003d t(yday0, 13, 0, 0), now\n\t\telif val \u003d\u003d \"night\":\n\t\t\tstart, end \u003d t(yday0, 18, 30, 0), t(yday0, 23, 30, 0)\n\t\telif val \u003d\u003d \"wrapDown\":\n\t\t\tstart, end \u003d t(yday0, 23, 30, 0), t(today0, 2, 30, 0)\n\t\telif val \u003d\u003d \"currentShot\":\n\t\t\tif now \u003e\u003d t(today0, 13, 0, 0):\n\t\t\t\tstart, end \u003d t(today0, 13, 0, 0), now\n\t\t\telse:\n\t\t\t\tstart, end \u003d t(yday0, 13, 0, 0), now\n\t\telse:\n\t\t\ttry:\n\t\t\t\tmins \u003d int(val)\n\t\t\texcept:\n\t\t\t\tmins \u003d 60\n\t\t\t\tlogger.warn(\"Invalid numeric value \u0027%s\u0027, defaulting to 60 min.\" % val)\n\t\t\tend \u003d now\n\t\t\tstart \u003d system.date.addMinutes(end, -mins)\n\n\t\t# Apply to dropdown\n\t\tdd.custom.startDate \u003d start\n\t\tdd.custom.endDate \u003d end\n\n\t\tlogger.info(\"Time range applied successfully: start\u003d%s | end\u003d%s\" %\n\t\t (system.date.format(start, \"yyyy-MM-dd HH:mm:ss\"),\n\t\t system.date.format(end, \"yyyy-MM-dd HH:mm:ss\")))\n\n\texcept Exception as e:\n\t\tlogger.error(\"Error in valueChanged: %s\" % str(e))" } } }, @@ -5686,7 +5710,7 @@ "contentStyle": { "classes": "Background-Styles/Grey-Background" }, - "currentTabIndex": 2, + "currentTabIndex": 1, "menuType": "modern", "style": { "classes": "Background-Styles/Grey-Background" @@ -5734,19 +5758,6 @@ "classes": "Background-Styles/Main-Background" } }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "activityLogger-TabChanged", - "pageScope": true, - "script": "\t# implement your handler here\n\tif payload:\n\t\tactivityLog.productMetrics.callActivityLoggerAPI(payload)", - "sessionScope": false, - "viewScope": false - } - ] - }, "type": "ia.container.flex" } } \ No newline at end of file diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Navigation-Views/Docked-South/view.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Navigation-Views/Docked-South/view.json index 92f5b77..ab90bb7 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Navigation-Views/Docked-South/view.json +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Navigation-Views/Docked-South/view.json @@ -1,7 +1,7 @@ { "custom": { "MCM": "", - "currentTable": "HITLIST", + "currentTable": "ACTIVE", "page": "", "view": "" }, @@ -1020,2125 +1020,6 @@ } }, "type": "ia.display.table" - }, - { - "custom": { - "endTime": "value", - "startTime": "value" - }, - "events": { - "component": { - "onRowDoubleClick": { - "config": { - "script": "\tdata \u003d self.props.selection.data\n\t\n\talarms.alarm_click.handleClick(data)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "hitList-table" - }, - "position": { - "basis": "1080px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "expression": "{view.custom.currentTable} \u003d \"HITLIST\"" - }, - "type": "expr" - } - }, - "props.columns[5].filter.string.value": { - "binding": { - "config": { - "path": "view.custom.MCM" - }, - "type": "property" - } - }, - "props.data": { - "binding": { - "config": { - "polling": { - "enabled": true, - "rate": "3" - }, - "queryPath": "GetAlarmsWithCount" - }, - "transforms": [ - { - "code": "\n\tfrom system.dataset import toPyDataSet\n\n\tds \u003d toPyDataSet(value)\n\tdata \u003d []\n\n\tcolumn_names \u003d list(ds.columnNames)\n\n\tfor row in ds:\n\t\tpriority \u003d row[\"Priority\"]\n\n\t\t# Use style class names from Perspective\n\t\tif priority \u003d\u003d \"High\":\n\t\t\tclassName \u003d \"Alarms-Styles/High\"\n\t\telif priority \u003d\u003d \"Medium\":\n\t\t\tclassName \u003d \"Alarms-Styles/Medium\"\n\t\telif priority \u003d\u003d \"Low\":\n\t\t\tclassName \u003d \"Alarms-Styles/Low\"\n\t\telif priority \u003d\u003d \"Diagnostic\":\n\t\t\tclassName \u003d \"Alarms-Styles/Diagnostic\"\n\t\telse:\n\t\t\tclassName \u003d \"Alarms-Styles/NoAlarm\"\n\n\t\t# Apply the style class to all cells in the row\n\t\trow_dict \u003d {\n\t\t\tcol: {\n\t\t\t\t\"value\": row[col],\n\t\t\t\t\"style\": { \"classes\": className }\n\t\t\t} for col in column_names\n\t\t}\n\t\tdata.append(row_dict)\n\n\treturn data\n", - "type": "script" - } - ], - "type": "query" - } - }, - "props.editingCell": { - "onChange": { - "enabled": null, - "script": "\tall_alarms \u003d system.alarm.queryStatus(includeShelved\u003dTrue)\n\tshelved_alarms \u003d [alarm for alarm in all_alarms if alarm.isShelved()]\n\t\n\t# Build dataset for table\n\theaders \u003d [\u0027ID\u0027, \u0027StartTimestamp\u0027, \u0027EndTimestamp\u0027, \u0027Duration\u0027, \u0027Description\u0027, \u0027Priority\u0027, \u0027Tag\u0027, \u0027MCM\u0027]\n\tdata \u003d []\n\t\n\tfor alarm in shelved_alarms:\n\t # Calculate duration (time since shelved)\n\t if alarm.activeTime:\n\t duration_ms \u003d system.date.now().getTime() - alarm.activeTime.getTime()\n\t duration_seconds \u003d duration_ms / 1000\n\t hours \u003d int(duration_seconds / 3600)\n\t minutes \u003d int((duration_seconds % 3600) / 60)\n\t seconds \u003d int(duration_seconds % 60)\n\t duration \u003d \"%02d:%02d:%02d\" % (hours, minutes, seconds)\n\t else:\n\t duration \u003d \"00:00:00\"\n\t \n\t # Extract tag name from source\n\t tag_name \u003d alarm.source.split(\u0027/\u0027)[-1] if \u0027/\u0027 in alarm.source else alarm.source\n\t \n\t row \u003d [\n\t str(alarm.id) if hasattr(alarm, \u0027id\u0027) else \u0027\u0027,\n\t alarm.activeTime if alarm.activeTime else system.date.now(),\n\t None, # End timestamp (shelved alarms don\u0027t have end time yet)\n\t duration,\n\t alarm.displayPath if alarm.displayPath else alarm.source,\n\t alarm.priority.name if alarm.priority else \u0027Unknown\u0027,\n\t tag_name,\n\t \u0027System\u0027 # Adjust based on your source format\n\t ]\n\t data.append(row)\n\t\n\t# Create dataset and update the custom property\n\tdataset \u003d system.dataset.toDataSet(headers, data)\n\tself.custom.shelvedAlarmsData \u003d dataset" - } - }, - "props.selection": { - "persistent": true - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY HH:mm:ss", - "editable": false, - "field": "FirstTimestamp", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "backgroundColor": "#FFFEFE", - "classes": "" - }, - "title": "First Timestamp" - }, - "justify": "left", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "value", - "dateFormat": "MM-DD-YYYY HH:mm:ss", - "editable": false, - "field": "LastTimestamp", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "Last Timestamp" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "none", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM-DD-YYYY HH:mm:ss", - "editable": false, - "field": "Count", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "none", - "editable": false, - "field": "Duration", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "none", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Priority", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Location", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": true, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "equals" - }, - "visible": "never" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Description", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": 150 - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Tag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "FullTag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "", - "display": "none" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Device", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "", - "display": "none" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "emptyMessage": { - "noData": { - "text": "No Alarms" - }, - "noFilterResults": { - "text": "No Alarms" - } - }, - "filter": { - "results": { - "enabled": true - } - }, - "pager": { - "activeOption": 5, - "bottom": false - } - }, - "type": "ia.display.table" - }, - { - "events": { - "component": { - "onRowDoubleClick": { - "config": { - "script": "\tdata \u003d self.props.selection.data\n\t\n\talarms.alarm_click.handleClick(data)" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "historical-table" - }, - "position": { - "basis": "1080px", - "grow": 1 - }, - "propConfig": { - "position.display": { - "binding": { - "config": { - "expression": "{view.custom.currentTable} \u003d \"HISTORY\"" - }, - "type": "expr" - } - }, - "props.columns[6].filter.string.value": { - "binding": { - "config": { - "path": "view.custom.MCM" - }, - "type": "property" - } - }, - "props.data": { - "binding": { - "config": { - "parameters": { - "endtime": "dateArithmetic(now(1000), 1, \"days\")", - "offset": "100", - "starttime": "now(1000)" - }, - "polling": { - "enabled": true, - "rate": "3" - }, - "queryPath": "GetAlarms" - }, - "transforms": [ - { - "code": "\n\tfrom system.dataset import toPyDataSet\n\n\tds \u003d toPyDataSet(value)\n\tdata \u003d []\n\n\tcolumn_names \u003d list(ds.columnNames)\n\n\tfor row in ds:\n\t\tpriority \u003d row[\"Priority\"]\n\n\t\t# Use style class names from Perspective\n\t\tif priority \u003d\u003d \"High\":\n\t\t\tclassName \u003d \"Alarms-Styles/High\"\n\t\telif priority \u003d\u003d \"Medium\":\n\t\t\tclassName \u003d \"Alarms-Styles/Medium\"\n\t\telif priority \u003d\u003d \"Low\":\n\t\t\tclassName \u003d \"Alarms-Styles/Low\"\n\t\telif priority \u003d\u003d \"Diagnostic\":\n\t\t\tclassName \u003d \"Alarms-Styles/Diagnostic\"\n\t\telse:\n\t\t\tclassName \u003d \"Alarms-Styles/NoAlarm\"\n\n\t\t# Apply the style class to all cells in the row\n\t\trow_dict \u003d {\n\t\t\tcol: {\n\t\t\t\t\"value\": row[col],\n\t\t\t\t\"style\": { \"classes\": className }\n\t\t\t} for col in column_names\n\t\t}\n\t\tdata.append(row_dict)\n\n\treturn data", - "type": "script" - } - ], - "type": "query" - } - } - }, - "props": { - "columns": [ - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "none", - "editable": false, - "field": "ID", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "", - "paddingLeft": 12 - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY HH:mm:ss", - "editable": false, - "field": "StartTimestamp", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": { - "$": [ - "ts", - 201, - 1750755617512 - ], - "$ts": 1750435156149 - } - }, - "enabled": true, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "never" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "Start Timestamp" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "none", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY HH:mm:ss", - "editable": false, - "field": "EndTimestamp", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": { - "$": [ - "ts", - 201, - 1750755617511 - ], - "$ts": 1750436956149 - } - }, - "enabled": true, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "never" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "End Timestamp" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "none", - "editable": false, - "field": "Duration", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "", - "paddingLeft": 12 - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "none", - "editable": false, - "field": "Description", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "ascending", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Priority", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": true, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "contains", - "value": "" - }, - "visible": "never" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "Severity" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Location", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": true, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "equals" - }, - "visible": "never" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Tag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": true, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "contains", - "value": "" - }, - "visible": "never" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "center", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "center", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "FullTag", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "", - "display": "none" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - }, - { - "align": "center", - "boolean": "checkbox", - "dateFormat": "MM/DD/YYYY", - "editable": false, - "field": "Device", - "filter": { - "boolean": { - "condition": "" - }, - "date": { - "condition": "", - "value": "" - }, - "enabled": false, - "number": { - "condition": "", - "value": "" - }, - "string": { - "condition": "", - "value": "" - }, - "visible": "on-hover" - }, - "footer": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "header": { - "align": "center", - "justify": "left", - "style": { - "classes": "" - }, - "title": "" - }, - "justify": "auto", - "nullFormat": { - "includeNullStrings": false, - "nullFormatValue": "", - "strict": false - }, - "number": "value", - "numberFormat": "0,0.##", - "progressBar": { - "bar": { - "color": "", - "style": { - "classes": "" - } - }, - "max": 100, - "min": 0, - "track": { - "color": "", - "style": { - "classes": "" - } - }, - "value": { - "enabled": true, - "format": "0,0.##", - "justify": "center", - "style": { - "classes": "" - } - } - }, - "render": "auto", - "resizable": true, - "sort": "none", - "sortable": true, - "strictWidth": false, - "style": { - "classes": "", - "display": "none" - }, - "toggleSwitch": { - "color": { - "selected": "", - "unselected": "" - } - }, - "viewParams": {}, - "viewPath": "", - "visible": true, - "width": "" - } - ], - "emptyMessage": { - "noData": { - "text": "No Alarms" - }, - "noFilterResults": { - "text": "No Alarms" - } - }, - "enabled": true, - "filter": { - "results": { - "enabled": true - } - }, - "pager": { - "bottom": false - }, - "sortOrder": [ - "Description" - ] - }, - "scripts": { - "customMethods": [], - "extensionFunctions": null, - "messageHandlers": [ - { - "messageType": "update-first-request", - "pageScope": true, - "script": "\tdata \u003d payload[\"data\"]\n\tinitial_data \u003d payload[\"initial_data\"]\n\tself.props.data \u003d data\n\tself.custom.initial_data \u003d initial_data", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "update-historical-data", - "pageScope": true, - "script": "\thistorical_data \u003d payload[\"data\"]\n\tself.props.data \u003d historical_data", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "load_initial_data", - "pageScope": true, - "script": "\trequest \u003d payload[\"data\"]\n\tsystem.perspective.print(\"initial message received\")\n\tif request \u003d\u003d True:\n\t\tself.props.data \u003d self.custom.initial_data", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "reset-historical-filters", - "pageScope": true, - "script": "\treset \u003d payload[\"data\"]\n\tif reset \u003d\u003d \"reset\":\n\t\tself.props.data \u003d []\n\t\tself.custom.device_filters \u003d None\n\t\tself.custom.priority_filters \u003d None\n\t\tself.custom.source_id_filters \u003d None\n\t\tself.custom.time_from_filter \u003d None\n\t\tself.custom.time_to_filter \u003d None\n\t\tself.custom.type_filters \u003d None\n\t\tself.custom.duration_filter \u003d None\n\t\tself.props.enabled \u003dTrue", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-source-filters", - "pageScope": true, - "script": "\tfilters \u003d payload[\"data\"]\n\tself.custom.source_id_filters \u003d filters", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-device-filters", - "pageScope": true, - "script": "\tfilters \u003d payload[\"data\"]\n\tself.custom.device_filters \u003d filters", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-priority-filters", - "pageScope": true, - "script": "\tfilters \u003d payload[\"data\"]\n\tself.custom.priority_filters \u003d filters", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-from-filters", - "pageScope": true, - "script": "\ttime \u003d payload[\"data\"]\n\tself.custom.time_from_filter \u003d time", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-to-filters", - "pageScope": true, - "script": "\ttime \u003d payload[\"data\"]\n\tself.custom.time_to_filter \u003d time", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-type-filters", - "pageScope": true, - "script": "\tfilters \u003d payload[\"data\"]\n\tself.custom.type_filters \u003d filters", - "sessionScope": false, - "viewScope": false - }, - { - "messageType": "set-duration-filters", - "pageScope": true, - "script": "\tduration \u003d payload[\"data\"]\n\tself.custom.duration_filter \u003d duration", - "sessionScope": false, - "viewScope": false - } - ] - }, - "type": "ia.display.table" } ], "meta": { @@ -3149,149 +1030,6 @@ "grow": 1 }, "type": "ia.container.flex" - }, - { - "children": [ - { - "events": { - "component": { - "onActionPerformed": { - "config": { - "script": "\tself.view.custom.currentTable \u003d \"ACTIVE\"" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "ACTIVE" - }, - "position": { - "basis": "150px" - }, - "propConfig": { - "props.style.backgroundColor": { - "binding": { - "config": { - "expression": "if({view.custom.currentTable}\u003d\"ACTIVE\", \"#C3C3C3\", \"#FFFFFF\")" - }, - "type": "expr" - } - } - }, - "props": { - "style": { - "borderStyle": "none", - "color": "#000000" - }, - "text": "ACTIVE" - }, - "type": "ia.input.button" - }, - { - "events": { - "component": { - "onActionPerformed": { - "config": { - "script": "\tself.view.custom.currentTable \u003d \"HITLIST\"" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "HIT LIST" - }, - "position": { - "basis": "150px" - }, - "propConfig": { - "props.style.backgroundColor": { - "binding": { - "config": { - "expression": "if({view.custom.currentTable}\u003d\"HITLIST\", \"#C3C3C3\", \"#FFFFFF\")" - }, - "type": "expr" - } - } - }, - "props": { - "style": { - "borderStyle": "none", - "color": "#000000" - }, - "text": "HIT LIST" - }, - "type": "ia.input.button" - }, - { - "events": { - "component": { - "onActionPerformed": { - "config": { - "script": "\tself.view.custom.currentTable \u003d \"HISTORY\"" - }, - "scope": "G", - "type": "script" - } - } - }, - "meta": { - "name": "HISTORY" - }, - "position": { - "basis": "150px" - }, - "propConfig": { - "props.style.backgroundColor": { - "binding": { - "config": { - "expression": "if({view.custom.currentTable}\u003d\"HISTORY\", \"#C3C3C3\", \"#FFFFFF\")" - }, - "type": "expr" - } - } - }, - "props": { - "style": { - "borderStyle": "none", - "color": "#000000" - }, - "text": "HISTORY" - }, - "type": "ia.input.button" - }, - { - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "852px", - "grow": 1 - }, - "props": { - "style": { - "backgroundColor": "#FFFFFF" - } - }, - "type": "ia.container.flex" - } - ], - "meta": { - "name": "FlexContainer" - }, - "position": { - "basis": "300px", - "grow": 1 - }, - "props": { - "style": { - "gap": 2 - } - }, - "type": "ia.container.flex" } ], "meta": { diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-MCM/view.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-MCM/view.json index 554ec97..128e914 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-MCM/view.json +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-MCM/view.json @@ -6,8 +6,7 @@ "MCM03", "MCM04", "MCM05" - ], - "state": null + ] }, "params": { "tagProps": [ @@ -44,51 +43,6 @@ }, "persistent": true }, - "custom.state": { - "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": "if(isNull({value}), 0, {value})", - "type": "expression" - }, - { - "fallback": null, - "inputType": "scalar", - "mappings": [ - { - "input": 3, - "output": 3 - }, - { - "input": 2, - "output": 2 - }, - { - "input": 1, - "output": 1 - }, - { - "input": 0, - "output": 0 - } - ], - "outputType": "scalar", - "type": "map" - } - ], - "type": "tag" - }, - "persistent": true - }, "params.tagProps": { "paramDirection": "input", "persistent": true diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-VFD/view.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-VFD/view.json index f1e24fc..98a14ac 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-VFD/view.json +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/PopUp-Views/Controller-Equipment/Information-Docked-East-VFD/view.json @@ -7,8 +7,8 @@ "MCM04", "MCM05" ], - "color": "#C2C2C2", - "state": "Closed" + "color": "#FF0000", + "state": "VFD Reset Required" }, "params": { "tagProps": [ @@ -1571,6 +1571,244 @@ "direction": "column" }, "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "NameField" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "props": { + "style": { + "paddingLeft": 20 + }, + "text": "LOCAL MODE" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Last_VFD_Fault_Code" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "path": "this.props.text" + }, + "transforms": [ + { + "fallback": "#D5D5D5", + "inputType": "scalar", + "mappings": [ + { + "input": "UNKNOWN", + "output": "#FFFFFF" + } + ], + "outputType": "color", + "type": "map" + } + ], + "type": "property" + } + }, + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "0": "{view.params.tagProps[0]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Local_Mode_Active" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},\u0027UNKNOWN\u0027)", + "type": "expression" + }, + { + "fallback": "INACTIVE", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "ACTIVE" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "classes": "Text-Styles/Ariel-Bold-12pt", + "paddingLeft": 10 + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "Property" + }, + "position": { + "basis": "35px" + }, + "props": { + "style": { + "classes": "PopUp-Styles/InfoLabel", + "overflow": "hidden" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "Local_Mode_Active" + }, + "position": { + "basis": "35px" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" + }, + { + "children": [ + { + "children": [ + { + "meta": { + "name": "NameField" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "props": { + "style": { + "paddingLeft": 20 + }, + "text": "LOCAL DISCONNECT" + }, + "type": "ia.display.label" + }, + { + "meta": { + "name": "Last_VFD_Fault_Code" + }, + "position": { + "basis": "50%", + "grow": 1 + }, + "propConfig": { + "props.style.backgroundColor": { + "binding": { + "config": { + "path": "this.props.text" + }, + "transforms": [ + { + "fallback": "#D5D5D5", + "inputType": "scalar", + "mappings": [ + { + "input": "UNKNOWN", + "output": "#FFFFFF" + } + ], + "outputType": "color", + "type": "map" + } + ], + "type": "property" + } + }, + "props.text": { + "binding": { + "config": { + "fallbackDelay": 2.5, + "mode": "indirect", + "references": { + "0": "{view.params.tagProps[0]}", + "fc": "{session.custom.fc}" + }, + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Local_Disconnect_Off" + }, + "transforms": [ + { + "expression": "coalesce({value},{view.params.forceFaultStatus},\u0027UNKNOWN\u0027)", + "type": "expression" + }, + { + "fallback": "ON", + "inputType": "scalar", + "mappings": [ + { + "input": true, + "output": "OFF" + } + ], + "outputType": "scalar", + "type": "map" + } + ], + "type": "tag" + } + } + }, + "props": { + "style": { + "classes": "Text-Styles/Ariel-Bold-12pt", + "paddingLeft": 10 + } + }, + "type": "ia.display.label" + } + ], + "meta": { + "name": "Property" + }, + "position": { + "basis": "35px" + }, + "props": { + "style": { + "classes": "PopUp-Styles/InfoLabel", + "overflow": "hidden" + } + }, + "type": "ia.container.flex" + } + ], + "meta": { + "name": "Local_Disconnect_Off" + }, + "position": { + "basis": "35px" + }, + "props": { + "direction": "column" + }, + "type": "ia.container.flex" } ], "meta": { diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Symbol-Views/Equipment-Views/Chute/view.json b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Symbol-Views/Equipment-Views/Chute/view.json index 4eef2c7..cdd6815 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Symbol-Views/Equipment-Views/Chute/view.json +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/com.inductiveautomation.perspective/views/Symbol-Views/Equipment-Views/Chute/view.json @@ -1,12 +1,12 @@ { "custom": { - "color": "#808080", - "priority": "No Active Alarms", - "state": "TagError" + "color": "#FFFF00", + "priority": "Low", + "state": "Half Full" }, "params": { "tagProps": [ - "value", + "Status/Chute/Chute_68", "value", "value", "value", @@ -74,7 +74,7 @@ }, "transforms": [ { - "code": " data \u003d dict(value) if value else {}\n \n if value is None or data.get(\"_quality\") \u003d\u003d \"Bad\" or data.get(\"error\"):\n return \"TagError\"\n \n\tif data.get(\"Jam\"):\n\t return \"Jammed\"\n\telif data.get(\"Full\"):\n\t return \"Full\"\n\telif data.get(\"Half_Full\"):\n\t return \"Half Full\"\n\telif data.get(\"No_Container\"):\n\t return \"No Container\"\n\telif data.get(\"Disabled\") \u003d\u003d False:\n\t return \"Enabled\"\n\telse:\n\t return \"Inactive\" \n return \"Inactive\"", + "code": " data \u003d dict(value) if value else {}\n\n if data.get(\"Jam\"):\n return \"Jammed\"\n elif data.get(\"Full\"):\n return \"Full\"\n elif data.get(\"Half_Full\"):\n return \"Half Full\"\n elif data.get(\"No_Container\"):\n return \"No Container\"\n elif data.get(\"Disabled\") \u003d\u003d False:\n return \"Enabled\"\n else:\n return \"Inactive\"", "type": "script" } ], diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetActiveAlarmsByLocationAndPriority/query.sql b/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetActiveAlarmsByLocationAndPriority/query.sql index eeabaf4..975eb06 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetActiveAlarmsByLocationAndPriority/query.sql +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetActiveAlarmsByLocationAndPriority/query.sql @@ -1,5 +1,5 @@ -- GetActiveAlarmsByLocationAndPriority: Count active alarms grouped by location and priority --- Uses: idx_alarm_events_group, idx_alarm_events_clear, idx_alarm_event_data_lookup +-- Uses: idx_alarm_events_active, idx_alarm_events_clear, idx_alarm_event_data_lookup, idx_alarm_events_priority -- Expected performance: <100ms on 37K rows, <200ms on 1M+ rows SELECT @@ -13,7 +13,7 @@ SELECT ELSE 'Unknown' END AS Priority, COUNT(*) AS Count -FROM alarm_events ae FORCE INDEX (idx_alarm_events_group) +FROM alarm_events ae FORCE INDEX (idx_alarm_events_active) LEFT JOIN alarm_event_data aed FORCE INDEX (idx_alarm_event_data_lookup) ON aed.id = ae.id AND aed.propname = 'myTag' WHERE ae.eventtype = 0 diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarms/query.sql b/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarms/query.sql index 0657675..84e3d95 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarms/query.sql +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarms/query.sql @@ -3,7 +3,6 @@ -- MAXIMUM PERFORMANCE: Optimized for EndTimestamp filtering -- Expected performance: <500ms on 37K rows -- Params: :starttime (DATETIME), :endtime (DATETIME) --- Uses: idx_alarm_events_type_time_id, idx_alarm_events_clear_agg, idx_alarm_events_eventid_only, idx_alarm_events_clear /*+ MAX_EXECUTION_TIME(8000) */ @@ -24,16 +23,15 @@ SELECT WHEN 4 THEN 'Critical' ELSE 'Unknown' END AS Priority, + CONCAT(a.displaypath, '.HMI.Alarm.', SUBSTRING_INDEX(IFNULL(aed.strValue, ''), '/', -1)) AS Tag, SUBSTRING_INDEX(SUBSTRING_INDEX(IFNULL(aed.strValue, ''), '/', 2), '/', -1) AS Location, - IFNULL(aed.strValue, SUBSTRING_INDEX(a.source, ':/tag:', -1)) AS Tag, - IFNULL(aed.strValue, a.source) AS FullTag, + aed.strValue AS FullTag, a.displaypath AS Device FROM alarm_events a FORCE INDEX (idx_alarm_events_type_time_id) LEFT JOIN ( -- Find first clear time for each alarm - -- FORCE INDEX on clear_agg optimizes the MIN(eventtime) GROUP BY SELECT eventid, MIN(eventtime) AS min_clear_time - FROM alarm_events FORCE INDEX (idx_alarm_events_clear_agg) + FROM alarm_events FORCE INDEX (idx_alarm_events_clear) WHERE eventtype = 1 AND eventtime >= :starttime AND eventtime < :endtime @@ -66,6 +64,7 @@ WHERE clr.min_clear_time IS NOT NULL -- Cleared alarms in window OR :endtime >= DATE_SUB(NOW(), INTERVAL 5 MINUTE) -- Active alarms if endtime is recent ) + ORDER BY CASE WHEN clr.min_clear_time IS NULL THEN 0 ELSE 1 END, IFNULL(clr.min_clear_time, a.eventtime) DESC, diff --git a/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarmsWithCount/query.sql b/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarmsWithCount/query.sql index dcbff1f..37ff175 100644 --- a/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarmsWithCount/query.sql +++ b/SCADA_PERSPECTIVE_PARENT_PROJECT/ignition/named-query/GetAlarmsWithCount/query.sql @@ -1,16 +1,16 @@ -- GetAlarmsWithCount: Alarm statistics with activation counts for a time window --- Uses: idx_alarm_events_type_time_id, idx_alarm_events_clear_agg, idx_alarm_events_eventid_only, idx_alarm_event_data_lookup +-- Uses: idx_alarm_events_type_time_id, idx_alarm_events_clear, idx_alarm_event_data_lookup -- Expected performance: <300ms on 37K rows, <800ms on 1M+ rows -- Params: :startTime (DATETIME or NULL/empty), :endTime (DATETIME or NULL/empty) /*+ MAX_EXECUTION_TIME(8000) */ WITH ClearedEvents AS ( - -- Pre-aggregate clear times - FORCED index for MIN(eventtime) GROUP BY optimization + -- Pre-aggregate clear times - FORCED index usage for speed SELECT eventid, MIN(eventtime) AS clear_time - FROM alarm_events FORCE INDEX (idx_alarm_events_clear_agg) + FROM alarm_events FORCE INDEX (idx_alarm_events_clear) WHERE eventtype = 1 GROUP BY eventid ) @@ -18,10 +18,9 @@ SELECT CONCAT(IFNULL(ae.displaypath, 'Unknown'), ' - ', SUBSTRING_INDEX(IFNULL(ae.source, ''), ':/alm:', -1)) AS Description, - SUBSTRING_INDEX(SUBSTRING_INDEX(IFNULL(aed.strValue, ''), '/', 2), '/', -1) AS Location, + CONCAT(ae.displaypath, '.HMI.Alarm.', SUBSTRING_INDEX(IFNULL(aed.strValue, ''), '/', -1)) AS Tag, - CONCAT(IFNULL(ae.displaypath, 'Unknown'), '.HMI.', - SUBSTRING_INDEX(IFNULL(aed.strValue, ''), '/', -1)) AS Tag, + SUBSTRING_INDEX(SUBSTRING_INDEX(IFNULL(aed.strValue, ''), '/', 2), '/', -1) AS Location, CASE ae.priority WHEN 0 THEN 'Diagnostic'