diff --git a/.resources/3d80b1645688fcca17fb3059d99323ee4d761a947251d3ca3682e5874ced0c7c b/.resources/37bfb5baa73f0ee9c4099fb61aa1d5f27a89b539d98b63e7d582cec9048f6585 similarity index 95% rename from .resources/3d80b1645688fcca17fb3059d99323ee4d761a947251d3ca3682e5874ced0c7c rename to .resources/37bfb5baa73f0ee9c4099fb61aa1d5f27a89b539d98b63e7d582cec9048f6585 index 270b0384..8e12c572 100644 --- a/.resources/3d80b1645688fcca17fb3059d99323ee4d761a947251d3ca3682e5874ced0c7c +++ b/.resources/37bfb5baa73f0ee9c4099fb61aa1d5f27a89b539d98b63e7d582cec9048f6585 @@ -1,7 +1,7 @@ { "custom": {}, "params": { - "Tab_ID": 2, + "Tab_ID": 1, "Table": "Status_tab" }, "propConfig": { @@ -1271,7 +1271,7 @@ }, "justify": "center", "number": "value", - "numberFormat": "none", + "numberFormat": "00:00:00", "progressBar": { "bar": { "color": "", @@ -1641,7 +1641,7 @@ "width": 1.0016 }, "props": { - "currentTabIndex": 2, + "currentTabIndex": 1, "tabSize": { "width": 130 }, @@ -3108,7 +3108,7 @@ "component": { "onActionPerformed": { "config": { - "script": "\tdata \u003d []\n\ttable \u003d []\n\n\n\tif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 0:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Ethernet\").getChild(\"Ethernet\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Device Type\", \"Device\", \"IP Address\",\"Status\",\"Current (Amps)\",\"Speed (FPM)\",\"Status Code\", \"Last Status Code\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027DeviceType\u0027],result[\u0027Device\u0027],result[\u0027IPAddress\u0027],result[\u0027Status\u0027],result[\u0027CurrentAmps\u0027],result[\u0027SpeedFPM\u0027],result[\u0027StatusCode\u0027],result[\u0027LastStatusCode\u0027]])\n\t\n\t\telse:\n\t\t\ttest_table \u003d system.dataset.toPyDataSet(self.parent.getChild(\"Status_tab\").getChild(\"Ethernet\").getChild(\"Ethernet\").props.data)\n\t\t\theaders \u003d [\"Device Type\", \"Device\", \"IP Address\",\"Status\",\"Current (Amps)\",\"Speed (FPM)\",\"Status Code\", \"Last Status Code\"]\n\t\t\tfor result in test_table:\n\t\t\t\tdata.append([result[\u0027DeviceType\u0027],result[\u0027Device\u0027],result[\u0027IPAddress\u0027],result[\u0027Status\u0027],result[\u0027CurrentAmps\u0027],result[\u0027SpeedFPM\u0027],result[\u0027StatusCode\u0027],result[\u0027LastStatusCode\u0027]])\n\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Ethernet.csv\u0027, data \u003d csv)\t\n\n\t\n\telif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 1:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027t_stamp\u0027],result[\u0027SorterName\u0027],result[\u0027ParcelID\u0027],result[\u0027ScannerName\u0027],result[\u0027IMGID\u0027],result[\u0027ScanLabel\u0027],result[\u0027ScanStatus\u0027],result[\u0027Length\u0027],result[\u0027Tray\u0027],result[\u0027AssignmentScanHist\u0027],result[\u0027DivertStatus\u0027],result[\u0027DEST_REQ\u0027],result[\u0027ACTUAL_DEST\u0027],result[\u0027SortCode\u0027]])\n\t\t\t\n\t\telse:\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor row in self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.data:\n\t\t\t\tdata.append([row[\u0027value\u0027][\u0027t_stamp\u0027],row[\u0027value\u0027][\u0027SorterName\u0027],row[\u0027value\u0027][\u0027ParcelID\u0027],row[\u0027value\u0027][\u0027ScannerName\u0027],row[\u0027value\u0027][\u0027IMGID\u0027],row[\u0027value\u0027][\u0027ScanLabel\u0027],row[\u0027value\u0027][\u0027ScanStatus\u0027],row[\u0027value\u0027][\u0027Length\u0027],row[\u0027value\u0027][\u0027Tray\u0027],row[\u0027value\u0027][\u0027AssignmentScanHist\u0027],row[\u0027value\u0027][\u0027DivertStatus\u0027],row[\u0027value\u0027][\u0027DEST_REQ\u0027],row[\u0027value\u0027][\u0027ACTUAL_DEST\u0027],row[\u0027value\u0027][\u0027SortCode\u0027]])\n\t\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Scanner History.csv\u0027, data \u003d csv)\n\t\n\t\n\telif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 2:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Start Timestamp\", \"End Timestamp\", \"Lane\",\"Full (#)\",\"Jam (#)\",\"Full Duration\",\"Jam Duration\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027StartTime\u0027],result[\u0027EndTime\u0027],result[\u0027Lane\u0027],result[\u0027Full_\u0027],result[\u0027Jam_\u0027],result[\u0027FullDuration\u0027],result[\u0027JamDuration\u0027]])\n\t\n\t\telse:\n\t\t\ttest_table \u003d system.dataset.toPyDataSet(self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.data)\n\t\t\theaders \u003d [\"Start Timestamp\", \"End Timestamp\", \"Lane\",\"Full (#)\",\"Jam (#)\",\"Full Duration\",\"Jam Duration\"]\n\t\t\tfor result in test_table:\n\t\t\t\tdata.append([result[\u0027StartTime\u0027],result[\u0027EndTime\u0027],result[\u0027Lane\u0027],result[\u0027Full_\u0027],result[\u0027Jam_\u0027],result[\u0027FullDuration\u0027],result[\u0027JamDuration\u0027]])\n\t\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Lane Status.csv\u0027, data \u003d csv)" + "script": "\tdata \u003d []\n\ttable \u003d []\n\t\n\tif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 2:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027t_stamp\u0027],result[\u0027SorterName\u0027],result[\u0027ParcelID\u0027],result[\u0027ScannerName\u0027],result[\u0027IMGID\u0027],result[\u0027ScanLabel\u0027],result[\u0027ScanStatus\u0027],result[\u0027Length\u0027],result[\u0027Tray\u0027],result[\u0027AssignmentScanHist\u0027],result[\u0027DivertStatus\u0027],result[\u0027DEST_REQ\u0027],result[\u0027ACTUAL_DEST\u0027],result[\u0027SortCode\u0027]])\n\t\t\t\n\t\telse:\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor row in self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.data:\n\t\t\t\tdata.append([row[\u0027value\u0027][\u0027t_stamp\u0027],row[\u0027value\u0027][\u0027SorterName\u0027],row[\u0027value\u0027][\u0027ParcelID\u0027],row[\u0027value\u0027][\u0027ScannerName\u0027],row[\u0027value\u0027][\u0027IMGID\u0027],row[\u0027value\u0027][\u0027ScanLabel\u0027],row[\u0027value\u0027][\u0027ScanStatus\u0027],row[\u0027value\u0027][\u0027Length\u0027],row[\u0027value\u0027][\u0027Tray\u0027],row[\u0027value\u0027][\u0027AssignmentScanHist\u0027],row[\u0027value\u0027][\u0027DivertStatus\u0027],row[\u0027value\u0027][\u0027DEST_REQ\u0027],row[\u0027value\u0027][\u0027ACTUAL_DEST\u0027],row[\u0027value\u0027][\u0027SortCode\u0027]])\n\t\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Scanner History.csv\u0027, data \u003d csv)\n\t\n\t\n\telif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 1:\n\t results \u003d self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.filter.results.data\n\t headers \u003d [\"Lane\",\"Full (#)\",\"Jam (#)\",\"Full Duration\",\"Jam Duration\"]\n\t data \u003d []\n\t\n\t if len(results) \u003e 0:\n\t for result in results:\n\t data.append([\n\t result[\u0027Lane\u0027],\n\t result[\u0027FullCount\u0027],\n\t result[\u0027JamCount\u0027],\n\t result[\u0027FullDuration\u0027],\n\t result[\u0027JamDuration\u0027]\n\t ])\n\t else:\n\t test_table \u003d system.dataset.toPyDataSet(\n\t self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.data\n\t )\n\t for row in test_table:\n\t data.append([\n\t row[\u0027Lane\u0027],\n\t row[\u0027FullCount\u0027],\n\t row[\u0027JamCount\u0027],\n\t row[\u0027FullDuration\u0027],\n\t row[\u0027JamDuration\u0027]\n\t ])\n\t\n\t table \u003d system.dataset.toDataSet(headers, data)\t\n\t csv \u003d system.dataset.toCSV(table, 1, 0, 1)\n\t system.perspective.download(filename\u003d\u0027Lane Status.csv\u0027, data\u003dcsv)\n\t\t\n\t\t\n\t\t" }, "scope": "G", "type": "script" @@ -3124,6 +3124,16 @@ "x": 0.9072, "y": 0.0041 }, + "propConfig": { + "props.style.display": { + "binding": { + "config": { + "expression": "if({../Status_tab.props.currentTabIndex} \u003d 0, \"none\", \"block\")\r\n" + }, + "type": "expr" + } + } + }, "props": { "mode": "percent", "style": { @@ -3216,7 +3226,7 @@ "value": "Custom" } ], - "value": "Past 30 Min" + "value": "Past 2 Hour" }, "type": "ia.input.dropdown" }, @@ -3362,7 +3372,7 @@ }, "props": { "dismissOnSelect": false, - "formattedValue": "Sep 26, 2025 1:49 PM", + "formattedValue": "Sep 29, 2025 3:12 PM", "formattedValues": { "date": "Mar 26, 2021", "datetime": "Mar 26, 2021 12:00 AM", @@ -3372,9 +3382,9 @@ "$": [ "ts", 192, - 1758881990509 + 1759151556791 ], - "$ts": 1758880190000 + "$ts": 1759144356000 } }, "type": "ia.input.date-time-input" @@ -3522,7 +3532,7 @@ }, "props": { "dismissOnSelect": false, - "formattedValue": "Sep 26, 2025 2:19 PM", + "formattedValue": "Sep 29, 2025 5:12 PM", "formattedValues": { "date": "Mar 29, 2021", "datetime": "Mar 29, 2021 1:37 PM", @@ -3532,9 +3542,9 @@ "$": [ "ts", 192, - 1758881990509 + 1759151556791 ], - "$ts": 1758881990000 + "$ts": 1759151556000 } }, "type": "ia.input.date-time-input" diff --git a/.resources/450bf5c90a1d4a3ec56c70d57330854c5d773d601939959a2a951c41bae6d2b7 b/.resources/450bf5c90a1d4a3ec56c70d57330854c5d773d601939959a2a951c41bae6d2b7 deleted file mode 100644 index 918a824e..00000000 Binary files a/.resources/450bf5c90a1d4a3ec56c70d57330854c5d773d601939959a2a951c41bae6d2b7 and /dev/null differ diff --git a/.resources/65f858d3f08d4bc4bfba74eefbe3e7ac0631b6f457cd89aa184eb53bd5523080 b/.resources/65f858d3f08d4bc4bfba74eefbe3e7ac0631b6f457cd89aa184eb53bd5523080 deleted file mode 100644 index 281a9360..00000000 Binary files a/.resources/65f858d3f08d4bc4bfba74eefbe3e7ac0631b6f457cd89aa184eb53bd5523080 and /dev/null differ diff --git a/.resources/74a180921b6636b39f498774de464a7b394b8e41a35aff1df78cd8dadbf3bb43 b/.resources/74a180921b6636b39f498774de464a7b394b8e41a35aff1df78cd8dadbf3bb43 new file mode 100644 index 00000000..2d0e7010 Binary files /dev/null and b/.resources/74a180921b6636b39f498774de464a7b394b8e41a35aff1df78cd8dadbf3bb43 differ diff --git a/.resources/857ffcc55b106734029016248051a6b56f863422f1e6f0f65d4c39ff9d8a2c09 b/.resources/857ffcc55b106734029016248051a6b56f863422f1e6f0f65d4c39ff9d8a2c09 new file mode 100644 index 00000000..76d55b8d Binary files /dev/null and b/.resources/857ffcc55b106734029016248051a6b56f863422f1e6f0f65d4c39ff9d8a2c09 differ diff --git a/.resources/c769799fe6ecfad8391ea7c4b424fde2399f2d393f1969b876381270b593281a b/.resources/93e8397024064ec7682f9308143395f74fc1d268d081d8a53528fac1ff3fbf69 similarity index 99% rename from .resources/c769799fe6ecfad8391ea7c4b424fde2399f2d393f1969b876381270b593281a rename to .resources/93e8397024064ec7682f9308143395f74fc1d268d081d8a53528fac1ff3fbf69 index 3857f2e8..9f81e6a0 100644 --- a/.resources/c769799fe6ecfad8391ea7c4b424fde2399f2d393f1969b876381270b593281a +++ b/.resources/93e8397024064ec7682f9308143395f74fc1d268d081d8a53528fac1ff3fbf69 @@ -633,7 +633,7 @@ "enabled": true, "rate": "3" }, - "queryPath": "Alarms-autStand/GetActiveAlarms" + "queryPath": "autStand/Alarms/GetActiveAlarms" }, "transforms": [ { @@ -1611,7 +1611,7 @@ "enabled": true, "rate": "3" }, - "queryPath": "Alarms-autStand/GetAlarmsWithCount" + "queryPath": "autStand/Alarms/GetAlarmsWithCount" }, "transforms": [ { @@ -3184,7 +3184,7 @@ "$": [ "ts", 192, - 1759044922618 + 1759143973125 ], "$ts": 1755606669646 }, @@ -3192,7 +3192,7 @@ "$": [ "ts", 192, - 1759044922618 + 1759143973125 ], "$ts": 1755608469646 } @@ -3256,7 +3256,7 @@ "enabled": true, "rate": "3" }, - "queryPath": "Alarms-autStand/GetAlarms" + "queryPath": "autStand/Alarms/GetAlarms" }, "transforms": [ { @@ -4334,7 +4334,7 @@ "$": [ "ts", 192, - 1759044922619 + 1759143973124 ], "$ts": 1755606669646 }, @@ -4342,7 +4342,7 @@ "$": [ "ts", 192, - 1759044922618 + 1759143973124 ], "$ts": 1755608469646 }, @@ -4601,6 +4601,7 @@ "contentStyle": { "classes": "Background-Styles/Grey-Background" }, + "currentTabIndex": 2, "menuType": "modern", "style": { "classes": "Background-Styles/Grey-Background" diff --git a/.resources/97523261a181c3ed46d416e8ea8a1cab30e35a38193d6201d4779de3e7e4314d b/.resources/97523261a181c3ed46d416e8ea8a1cab30e35a38193d6201d4779de3e7e4314d new file mode 100644 index 00000000..5406125c Binary files /dev/null and b/.resources/97523261a181c3ed46d416e8ea8a1cab30e35a38193d6201d4779de3e7e4314d differ diff --git a/.resources/9ebf3ff9e093d900be488af02b629dbd0986dc25c7229ed9516509e6ca0f358d b/.resources/9ebf3ff9e093d900be488af02b629dbd0986dc25c7229ed9516509e6ca0f358d new file mode 100644 index 00000000..5cf70238 --- /dev/null +++ b/.resources/9ebf3ff9e093d900be488af02b629dbd0986dc25c7229ed9516509e6ca0f358d @@ -0,0 +1,66 @@ +-- Generate all lanes 101-124 excluding 102, 104, 106 +WITH DesiredLanes AS ( + SELECT 101 + n AS lane_number + FROM ( + SELECT a.N + b.N * 10 AS n + FROM (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 + UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a, + (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2) b + ) numbers + WHERE n <= 23 -- 101 to 124 + AND (101 + n) NOT IN (102, 104, 106) +), +-- Aggregate Full alarms per lane +FullAlarms AS ( + SELECT + aed.strValue AS myLocation, + COUNT(*) AS FullCount, + SUM(TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW()))) AS FullDuration + FROM alarm_events ae + LEFT JOIN alarm_events ae_clear + ON ae.eventid = ae_clear.eventid AND ae_clear.eventtype = 1 + JOIN alarm_event_data aed + ON aed.id = ae.id AND aed.propname = 'myLocation' + WHERE ae.eventtype = 0 + AND ae.source LIKE '%Full%' + AND ae.source LIKE '%Chute%' + AND ae.eventtime BETWEEN :startDate AND :endDate + GROUP BY aed.strValue +), +-- Aggregate Jammed alarms per lane +JammedAlarms AS ( + SELECT + aed.strValue AS myLocation, + COUNT(*) AS JamCount, + SUM(TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW()))) AS JamDuration + FROM alarm_events ae + LEFT JOIN alarm_events ae_clear + ON ae.eventid = ae_clear.eventid AND ae_clear.eventtype = 1 + JOIN alarm_event_data aed + ON aed.id = ae.id AND aed.propname = 'myLocation' + WHERE ae.eventtype = 0 + AND ae.source LIKE '%Jammed%' + AND ae.source LIKE '%Chute%' + AND ae.eventtime BETWEEN :startDate AND :endDate + GROUP BY aed.strValue +), +-- Combine Full and Jammed +Aggregated AS ( + SELECT + dl.lane_number, + COALESCE(f.FullCount, 0) AS FullCount, + COALESCE(j.JamCount, 0) AS JamCount, + COALESCE(f.FullDuration, 0) AS FullDuration, + COALESCE(j.JamDuration, 0) AS JamDuration + FROM DesiredLanes dl + LEFT JOIN FullAlarms f ON f.myLocation = CONCAT('S03_CH', dl.lane_number) + LEFT JOIN JammedAlarms j ON j.myLocation = CONCAT('S03_CH', dl.lane_number) +) +SELECT + CONCAT('S03_CH', lane_number) AS Lane, + FullCount, + JamCount, + FullDuration, + JamDuration +FROM Aggregated +ORDER BY lane_number; diff --git a/.resources/b1753196e0431f5ec6590fc1e9edd2bf13e9a66772176905693260c077178ead b/.resources/f62c3d8bf33a66ae8e37d3f7de5b1e4d0235250214ddb1ec127ca9d4ee84bb43 similarity index 52% rename from .resources/b1753196e0431f5ec6590fc1e9edd2bf13e9a66772176905693260c077178ead rename to .resources/f62c3d8bf33a66ae8e37d3f7de5b1e4d0235250214ddb1ec127ca9d4ee84bb43 index b1d492b4..898a1a60 100644 Binary files a/.resources/b1753196e0431f5ec6590fc1e9edd2bf13e9a66772176905693260c077178ead and b/.resources/f62c3d8bf33a66ae8e37d3f7de5b1e4d0235250214ddb1ec127ca9d4ee84bb43 differ diff --git a/.resources/fbbbbcd6e927ef0f1c41038f18e73ffb74a47fc724265f33fda4f2f29fd4facd b/.resources/fbbbbcd6e927ef0f1c41038f18e73ffb74a47fc724265f33fda4f2f29fd4facd deleted file mode 100644 index 63c600b3..00000000 Binary files a/.resources/fbbbbcd6e927ef0f1c41038f18e73ffb74a47fc724265f33fda4f2f29fd4facd and /dev/null differ diff --git a/BNA8/com.inductiveautomation.perspective/session-props/resource.json b/BNA8/com.inductiveautomation.perspective/session-props/resource.json index dc80b1c0..ef56658b 100644 --- a/BNA8/com.inductiveautomation.perspective/session-props/resource.json +++ b/BNA8/com.inductiveautomation.perspective/session-props/resource.json @@ -9,8 +9,8 @@ "attributes": { "lastModification": { "actor": "admin", - "timestamp": "2025-09-29T10:28:18Z" + "timestamp": "2025-09-29T13:03:45Z" }, - "lastModificationSignature": "f815df1ccfa23f21cd859c691d61cc83643a3654a1c4c8c6d88be701b5c474b0" + "lastModificationSignature": "1522202a7aeaaf110b164a96f656d592f4442a5c03bb5ab1239eeb2cc0f6bfd9" } } \ No newline at end of file diff --git a/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/resource.json b/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/resource.json index 1225f078..da43c7f7 100644 --- a/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/resource.json +++ b/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/resource.json @@ -10,8 +10,8 @@ "attributes": { "lastModification": { "actor": "admin", - "timestamp": "2025-09-29T08:46:06Z" + "timestamp": "2025-09-29T11:07:41Z" }, - "lastModificationSignature": "2496b5edaafb62e00cd54e902bafb4e30c13ce2dc47d8831c096df8da00ae2c4" + "lastModificationSignature": "7ba1e0d93bca5f2069f3880599875d9738c62805928c301a075c7a15802b6dd9" } } \ No newline at end of file diff --git a/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/thumbnail.png b/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/thumbnail.png index 63c600b3..76d55b8d 100644 Binary files a/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/thumbnail.png and b/BNA8/com.inductiveautomation.perspective/views/autStand/Alarms/RealTime/thumbnail.png differ diff --git a/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/resource.json b/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/resource.json index ab356935..263de320 100644 --- a/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/resource.json +++ b/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/resource.json @@ -10,8 +10,8 @@ "attributes": { "lastModification": { "actor": "admin", - "timestamp": "2025-09-26T10:19:50Z" + "timestamp": "2025-09-29T13:12:37Z" }, - "lastModificationSignature": "93c63fd63638a67f140721b81f3f89b2009184c2083eae7ae4b8951b5e51e5c6" + "lastModificationSignature": "389f01fd13a9dafc5f002b77858a2fd7e170339f81d14bd17047549c9ad04f40" } } \ No newline at end of file diff --git a/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/thumbnail.png b/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/thumbnail.png index 281a9360..5406125c 100644 Binary files a/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/thumbnail.png and b/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/thumbnail.png differ diff --git a/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/view.json b/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/view.json index 270b0384..8e12c572 100644 --- a/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/view.json +++ b/BNA8/com.inductiveautomation.perspective/views/autStand/Windows/Status/view.json @@ -1,7 +1,7 @@ { "custom": {}, "params": { - "Tab_ID": 2, + "Tab_ID": 1, "Table": "Status_tab" }, "propConfig": { @@ -1271,7 +1271,7 @@ }, "justify": "center", "number": "value", - "numberFormat": "none", + "numberFormat": "00:00:00", "progressBar": { "bar": { "color": "", @@ -1641,7 +1641,7 @@ "width": 1.0016 }, "props": { - "currentTabIndex": 2, + "currentTabIndex": 1, "tabSize": { "width": 130 }, @@ -3108,7 +3108,7 @@ "component": { "onActionPerformed": { "config": { - "script": "\tdata \u003d []\n\ttable \u003d []\n\n\n\tif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 0:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Ethernet\").getChild(\"Ethernet\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Device Type\", \"Device\", \"IP Address\",\"Status\",\"Current (Amps)\",\"Speed (FPM)\",\"Status Code\", \"Last Status Code\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027DeviceType\u0027],result[\u0027Device\u0027],result[\u0027IPAddress\u0027],result[\u0027Status\u0027],result[\u0027CurrentAmps\u0027],result[\u0027SpeedFPM\u0027],result[\u0027StatusCode\u0027],result[\u0027LastStatusCode\u0027]])\n\t\n\t\telse:\n\t\t\ttest_table \u003d system.dataset.toPyDataSet(self.parent.getChild(\"Status_tab\").getChild(\"Ethernet\").getChild(\"Ethernet\").props.data)\n\t\t\theaders \u003d [\"Device Type\", \"Device\", \"IP Address\",\"Status\",\"Current (Amps)\",\"Speed (FPM)\",\"Status Code\", \"Last Status Code\"]\n\t\t\tfor result in test_table:\n\t\t\t\tdata.append([result[\u0027DeviceType\u0027],result[\u0027Device\u0027],result[\u0027IPAddress\u0027],result[\u0027Status\u0027],result[\u0027CurrentAmps\u0027],result[\u0027SpeedFPM\u0027],result[\u0027StatusCode\u0027],result[\u0027LastStatusCode\u0027]])\n\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Ethernet.csv\u0027, data \u003d csv)\t\n\n\t\n\telif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 1:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027t_stamp\u0027],result[\u0027SorterName\u0027],result[\u0027ParcelID\u0027],result[\u0027ScannerName\u0027],result[\u0027IMGID\u0027],result[\u0027ScanLabel\u0027],result[\u0027ScanStatus\u0027],result[\u0027Length\u0027],result[\u0027Tray\u0027],result[\u0027AssignmentScanHist\u0027],result[\u0027DivertStatus\u0027],result[\u0027DEST_REQ\u0027],result[\u0027ACTUAL_DEST\u0027],result[\u0027SortCode\u0027]])\n\t\t\t\n\t\telse:\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor row in self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.data:\n\t\t\t\tdata.append([row[\u0027value\u0027][\u0027t_stamp\u0027],row[\u0027value\u0027][\u0027SorterName\u0027],row[\u0027value\u0027][\u0027ParcelID\u0027],row[\u0027value\u0027][\u0027ScannerName\u0027],row[\u0027value\u0027][\u0027IMGID\u0027],row[\u0027value\u0027][\u0027ScanLabel\u0027],row[\u0027value\u0027][\u0027ScanStatus\u0027],row[\u0027value\u0027][\u0027Length\u0027],row[\u0027value\u0027][\u0027Tray\u0027],row[\u0027value\u0027][\u0027AssignmentScanHist\u0027],row[\u0027value\u0027][\u0027DivertStatus\u0027],row[\u0027value\u0027][\u0027DEST_REQ\u0027],row[\u0027value\u0027][\u0027ACTUAL_DEST\u0027],row[\u0027value\u0027][\u0027SortCode\u0027]])\n\t\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Scanner History.csv\u0027, data \u003d csv)\n\t\n\t\n\telif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 2:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Start Timestamp\", \"End Timestamp\", \"Lane\",\"Full (#)\",\"Jam (#)\",\"Full Duration\",\"Jam Duration\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027StartTime\u0027],result[\u0027EndTime\u0027],result[\u0027Lane\u0027],result[\u0027Full_\u0027],result[\u0027Jam_\u0027],result[\u0027FullDuration\u0027],result[\u0027JamDuration\u0027]])\n\t\n\t\telse:\n\t\t\ttest_table \u003d system.dataset.toPyDataSet(self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.data)\n\t\t\theaders \u003d [\"Start Timestamp\", \"End Timestamp\", \"Lane\",\"Full (#)\",\"Jam (#)\",\"Full Duration\",\"Jam Duration\"]\n\t\t\tfor result in test_table:\n\t\t\t\tdata.append([result[\u0027StartTime\u0027],result[\u0027EndTime\u0027],result[\u0027Lane\u0027],result[\u0027Full_\u0027],result[\u0027Jam_\u0027],result[\u0027FullDuration\u0027],result[\u0027JamDuration\u0027]])\n\t\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Lane Status.csv\u0027, data \u003d csv)" + "script": "\tdata \u003d []\n\ttable \u003d []\n\t\n\tif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 2:\n\t\tresults \u003d self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.filter.results.data\n\t\tif(len(results) \u003e 0):\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor result in results:\n\t\t\t\tdata.append([result[\u0027t_stamp\u0027],result[\u0027SorterName\u0027],result[\u0027ParcelID\u0027],result[\u0027ScannerName\u0027],result[\u0027IMGID\u0027],result[\u0027ScanLabel\u0027],result[\u0027ScanStatus\u0027],result[\u0027Length\u0027],result[\u0027Tray\u0027],result[\u0027AssignmentScanHist\u0027],result[\u0027DivertStatus\u0027],result[\u0027DEST_REQ\u0027],result[\u0027ACTUAL_DEST\u0027],result[\u0027SortCode\u0027]])\n\t\t\t\n\t\telse:\n\t\t\theaders \u003d [\"Date\", \"Sorter\", \"Parcel ID\",\"Scanner\",\"Img ID\",\"Scan Label\",\"Scan Status\",\"Length (in)\",\"Trays (#)\",\"Assigment\",\"Divert Status\",\"Req Dest\",\"Actual Dest\",\"Sort Code\"]\n\t\t\tfor row in self.parent.getChild(\"Status_tab\").getChild(\"Scanner History\").getChild(\"Scanner History\").props.data:\n\t\t\t\tdata.append([row[\u0027value\u0027][\u0027t_stamp\u0027],row[\u0027value\u0027][\u0027SorterName\u0027],row[\u0027value\u0027][\u0027ParcelID\u0027],row[\u0027value\u0027][\u0027ScannerName\u0027],row[\u0027value\u0027][\u0027IMGID\u0027],row[\u0027value\u0027][\u0027ScanLabel\u0027],row[\u0027value\u0027][\u0027ScanStatus\u0027],row[\u0027value\u0027][\u0027Length\u0027],row[\u0027value\u0027][\u0027Tray\u0027],row[\u0027value\u0027][\u0027AssignmentScanHist\u0027],row[\u0027value\u0027][\u0027DivertStatus\u0027],row[\u0027value\u0027][\u0027DEST_REQ\u0027],row[\u0027value\u0027][\u0027ACTUAL_DEST\u0027],row[\u0027value\u0027][\u0027SortCode\u0027]])\n\t\t\t\n\t\ttable \u003d system.dataset.toDataSet(headers, data)\t\n\t\tcsv \u003d system.dataset.toCSV(table,1,0,1)\n\t\tsystem.perspective.download(filename \u003d \u0027Scanner History.csv\u0027, data \u003d csv)\n\t\n\t\n\telif self.getSibling(\"Status_tab\").props.currentTabIndex \u003d\u003d 1:\n\t results \u003d self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.filter.results.data\n\t headers \u003d [\"Lane\",\"Full (#)\",\"Jam (#)\",\"Full Duration\",\"Jam Duration\"]\n\t data \u003d []\n\t\n\t if len(results) \u003e 0:\n\t for result in results:\n\t data.append([\n\t result[\u0027Lane\u0027],\n\t result[\u0027FullCount\u0027],\n\t result[\u0027JamCount\u0027],\n\t result[\u0027FullDuration\u0027],\n\t result[\u0027JamDuration\u0027]\n\t ])\n\t else:\n\t test_table \u003d system.dataset.toPyDataSet(\n\t self.parent.getChild(\"Status_tab\").getChild(\"Lane Status\").getChild(\"Lane Status\").props.data\n\t )\n\t for row in test_table:\n\t data.append([\n\t row[\u0027Lane\u0027],\n\t row[\u0027FullCount\u0027],\n\t row[\u0027JamCount\u0027],\n\t row[\u0027FullDuration\u0027],\n\t row[\u0027JamDuration\u0027]\n\t ])\n\t\n\t table \u003d system.dataset.toDataSet(headers, data)\t\n\t csv \u003d system.dataset.toCSV(table, 1, 0, 1)\n\t system.perspective.download(filename\u003d\u0027Lane Status.csv\u0027, data\u003dcsv)\n\t\t\n\t\t\n\t\t" }, "scope": "G", "type": "script" @@ -3124,6 +3124,16 @@ "x": 0.9072, "y": 0.0041 }, + "propConfig": { + "props.style.display": { + "binding": { + "config": { + "expression": "if({../Status_tab.props.currentTabIndex} \u003d 0, \"none\", \"block\")\r\n" + }, + "type": "expr" + } + } + }, "props": { "mode": "percent", "style": { @@ -3216,7 +3226,7 @@ "value": "Custom" } ], - "value": "Past 30 Min" + "value": "Past 2 Hour" }, "type": "ia.input.dropdown" }, @@ -3362,7 +3372,7 @@ }, "props": { "dismissOnSelect": false, - "formattedValue": "Sep 26, 2025 1:49 PM", + "formattedValue": "Sep 29, 2025 3:12 PM", "formattedValues": { "date": "Mar 26, 2021", "datetime": "Mar 26, 2021 12:00 AM", @@ -3372,9 +3382,9 @@ "$": [ "ts", 192, - 1758881990509 + 1759151556791 ], - "$ts": 1758880190000 + "$ts": 1759144356000 } }, "type": "ia.input.date-time-input" @@ -3522,7 +3532,7 @@ }, "props": { "dismissOnSelect": false, - "formattedValue": "Sep 26, 2025 2:19 PM", + "formattedValue": "Sep 29, 2025 5:12 PM", "formattedValues": { "date": "Mar 29, 2021", "datetime": "Mar 29, 2021 1:37 PM", @@ -3532,9 +3542,9 @@ "$": [ "ts", 192, - 1758881990509 + 1759151556791 ], - "$ts": 1758881990000 + "$ts": 1759151556000 } }, "type": "ia.input.date-time-input" diff --git a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/data.bin b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/data.bin index 918a824e..2d0e7010 100644 Binary files a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/data.bin and b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/data.bin differ diff --git a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/resource.json b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/resource.json index d9395d43..29c28d6f 100644 --- a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/resource.json +++ b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Lane Divert vs Full/resource.json @@ -9,8 +9,8 @@ "attributes": { "lastModification": { "actor": "admin", - "timestamp": "2025-09-29T10:28:28Z" + "timestamp": "2025-09-29T13:12:37Z" }, - "lastModificationSignature": "28f5b01c63c3194c6ff55c5f3f35965b921daf960e232e3b77ea707a36736d98" + "lastModificationSignature": "a69ec02dca3e11e6e956ab40df1d3b03738d7acdcf3e912d7000e7b86107c67e" } } \ No newline at end of file diff --git a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/data.bin b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/data.bin index b1d492b4..898a1a60 100644 Binary files a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/data.bin and b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/data.bin differ diff --git a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/resource.json b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/resource.json index 923e237c..840846b1 100644 --- a/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/resource.json +++ b/BNA8/com.inductiveautomation.reporting/reports/Statistics/Shipping Sorter Statistics/resource.json @@ -9,8 +9,8 @@ "attributes": { "lastModification": { "actor": "admin", - "timestamp": "2025-09-29T10:28:28Z" + "timestamp": "2025-09-29T13:12:37Z" }, - "lastModificationSignature": "99cafe4619a9a2da252e3d2debb1fc8a7ca3f4f343f1f1734891608cd8c85b47" + "lastModificationSignature": "417448126696558992635ed6e66340279b255b794c7b15c249bc3318e19437b0" } } \ No newline at end of file diff --git a/BNA8/ignition/named-query/autStand/Alarms/GetActiveAlarms/resource.json b/BNA8/ignition/named-query/autStand/Alarms/GetActiveAlarms/resource.json index 5710ee83..ff6749c4 100644 --- a/BNA8/ignition/named-query/autStand/Alarms/GetActiveAlarms/resource.json +++ b/BNA8/ignition/named-query/autStand/Alarms/GetActiveAlarms/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "22697fcb07aba0cc8e56b7f3628c108f5ff13f9ea2bf5ceb062d7869b4a812e8", + "lastModificationSignature": "e21931e78403e7d61d02415d95a07521861f1a620abea231875105f77528507f", "permissions": [ { "zone": "default", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-09-26T09:30:18Z" + "timestamp": "2025-09-29T11:23:02Z" }, "parameters": [ { diff --git a/BNA8/ignition/named-query/autStand/Status/LaneStatus/resource.json b/BNA8/ignition/named-query/autStand/Status/LaneStatus/resource.json index 2f851d50..9eb0c54a 100644 --- a/BNA8/ignition/named-query/autStand/Status/LaneStatus/resource.json +++ b/BNA8/ignition/named-query/autStand/Status/LaneStatus/resource.json @@ -18,7 +18,7 @@ "cacheEnabled": false, "database": "MariaDB", "fallbackEnabled": false, - "lastModificationSignature": "1418025101fbcc1f57385c728f9c585bd7372f06d38259e15e0d88e31f626211", + "lastModificationSignature": "01d12d7223e2fef498ff9a0521f8b104af97f9f0ab3e55a6a415fd262b85eccb", "permissions": [ { "zone": "", @@ -27,7 +27,7 @@ ], "lastModification": { "actor": "admin", - "timestamp": "2025-09-26T09:30:10Z" + "timestamp": "2025-09-29T11:58:58Z" }, "parameters": [ {