modifid search fucntionality, added zoom feature and added glowing effect on specifig devices

This commit is contained in:
Salijoghli 2025-10-09 18:45:12 +04:00
parent f38f97fee0
commit c94ea5a32d
79 changed files with 2808 additions and 1580 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

View File

@ -309,6 +309,9 @@
"fontFamily": "Arial",
"fontWeight": "bold",
"textAlign": "center"
},
"textStyle": {
"fontSize": "2vmin"
}
},
"type": "ia.display.label"

View File

@ -5,8 +5,8 @@
"panZoomScale": 1
},
"scale": 1,
"x": -10,
"y": -7
"x": 0,
"y": 0
},
"params": {
"controls": {
@ -583,10 +583,6 @@
"meta": {
"name": "root"
},
"position": {
"x": 0.175,
"y": 0.038
},
"props": {
"mode": "percent",
"style": {
@ -595,6 +591,19 @@
"overflowY": "hidden"
}
},
"scripts": {
"customMethods": [],
"extensionFunctions": null,
"messageHandlers": [
{
"messageType": "focusDevice",
"pageScope": false,
"script": "\tself.view.custom.x \u003d payload[\"x\"]\n\tself.view.custom.y \u003d payload[\"y\"]\n\tself.view.custom.scale \u003d payload[\"scale\"]",
"sessionScope": true,
"viewScope": false
}
]
},
"type": "ia.container.coord"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -107,4 +107,11 @@ div[data-component="ia.input.fileupload"] .ia_button--primary {
}
@keyframes conveyor {
0% { opacity: 0.3; filter: blur(0.5px); }
50% { opacity: 1; filter: blur(1.4px); }
100% { opacity: 0.3; filter: blur(0.5px); }
}

View File

@ -1,12 +1,15 @@
{
"custom": {
"color": "#C2C2C2",
"isHighlited": false,
"overlayColor": "#ffffff",
"priority": "No Active Alarms",
"state": "Closed"
},
"params": {
"highlight": "",
"tagProps": [
"System/MCM01/Conveyors/Ul15_1",
"System/MCM01/Conveyor/Ul15_1",
"value",
"value",
"value",
@ -136,6 +139,50 @@
},
"persistent": true
},
"custom.isHighlited": {
"binding": {
"config": {
"expression": "{view.params.highlight} !\u003d \"\""
},
"type": "expr"
},
"persistent": true
},
"custom.overlayColor": {
"binding": {
"config": {
"path": "view.params.highlight"
},
"transforms": [
{
"fallback": "#ffffff",
"inputType": "scalar",
"mappings": [
{
"input": "Diagnostic",
"output": "rgb(88, 158, 249)"
},
{
"input": "Low",
"output": "rgb(255, 255, 0)"
},
{
"input": "Medium",
"output": "rgb(247, 160, 96)"
},
{
"input": "High",
"output": "rgb(245, 95, 89)"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "property"
},
"persistent": true
},
"custom.priority": {
"binding": {
"config": {
@ -414,6 +461,10 @@
},
"persistent": true
},
"params.highlight": {
"paramDirection": "input",
"persistent": true
},
"params.tagProps": {
"paramDirection": "input",
"persistent": true
@ -421,24 +472,46 @@
},
"props": {
"defaultSize": {
"height": 272,
"width": 207
"height": 69,
"width": 49
}
},
"root": {
"children": [
{
"meta": {
"name": "Conveyor_Left90"
"name": "Conveyor45"
},
"position": {
"height": 1.3652,
"width": 1,
"x": 0.0069,
"y": -0.1685
"height": 1,
"width": 1
},
"propConfig": {
"props.elements[1].elements[0].fill.paint": {
"props.elements[0].fill.opacity": {
"binding": {
"config": {
"expression": "if({view.custom.isHighlited}, 1, 0)"
},
"type": "expr"
}
},
"props.elements[0].fill.paint": {
"binding": {
"config": {
"path": "view.custom.overlayColor"
},
"type": "property"
}
},
"props.elements[0].style.animation": {
"binding": {
"config": {
"expression": "if ({view.custom.isHighlited}, \"2.5s linear infinite both conveyor\", \"\")"
},
"type": "expr"
}
},
"props.elements[1].fill.paint": {
"binding": {
"config": {
"path": "view.custom.color"
@ -450,34 +523,46 @@
"props": {
"elements": [
{
"id": "defs1",
"name": "defs1",
"type": "defs"
"d": "m -0.86795047,19.664401 0.24823006,-8.9351 C 1.4141638,5.1674347 4.2395046,2.4376861 9.9814841,-0.49166894 L 15.036661,7.9157199 C 11.035373,9.451617 10.840679,10.658485 9.8085725,14.305329 l -0.1172109,5.383077 z",
"fill": {},
"id": "path9",
"name": "path9",
"stroke": {
"dasharray": "none",
"opacity": 0,
"paint": "#000000",
"width": "0.558889"
},
"style": {
"opacity": 1,
"transition": "opacity 2.5s linear"
},
"type": "path"
},
{
"elements": [
{
"d": "M 16.890047,19.897888 C 4.1781605,20.036878 -0.11241603,13.922713 0.16340637,0.16060852 L 8.2822031,0.16091303 C 8.3924473,8.3148192 8.5268195,11.434975 16.856526,11.653146 Z",
"fill": {
"opacity": "1"
},
"id": "path27089",
"name": "path27089",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#000000",
"width": 0.45
},
"type": "path"
}
],
"id": "layer1",
"name": "layer1",
"type": "group"
"d": "m 0.3823775,18.9146 0.185181,-7.76481 C 2.0848475,6.3164005 5.1481255,3.3505165 9.4316745,0.80483942 L 13.3462,7.7400105 C 10.361215,9.0747405 9.1170805,11.08825 8.3471235,14.25744 l -0.08744,4.67802 z",
"fill": {
"opacity": 1
},
"id": "path26615",
"name": "path26615",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#000000",
"width": "0.45"
},
"style": {
"opacity": "1"
},
"type": "path"
}
],
"viewBox": "0 0 17 20"
"preserveAspectRatio": "none",
"style": {
"overflow": "visible"
},
"viewBox": "0 0 14 19"
},
"type": "ia.shapes.svg"
}
@ -513,8 +598,7 @@
"mode": "percent",
"style": {
"cursor": "pointer",
"overflow": "hidden",
"overflowX": "hidden"
"overflow": "visible"
}
},
"type": "ia.container.coord"

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

View File

@ -1,7 +1,7 @@
{
"custom": {},
"params": {
"Tab_ID": 2,
"Tab_ID": 0,
"Table": "Status_tab"
},
"propConfig": {
@ -1641,7 +1641,6 @@
"width": 1.0016
},
"props": {
"currentTabIndex": 2,
"tabSize": {
"width": 130
},
@ -3372,7 +3371,7 @@
},
"props": {
"dismissOnSelect": false,
"formattedValue": "Oct 6, 2025 4:39 PM",
"formattedValue": "Oct 9, 2025 4:44 PM",
"formattedValues": {
"date": "Mar 26, 2021",
"datetime": "Mar 26, 2021 12:00 AM",
@ -3382,9 +3381,9 @@
"$": [
"ts",
192,
1759761548778
1760021059065
],
"$ts": 1759754348000
"$ts": 1760013859000
}
},
"type": "ia.input.date-time-input"
@ -3532,7 +3531,7 @@
},
"props": {
"dismissOnSelect": false,
"formattedValue": "Oct 6, 2025 6:39 PM",
"formattedValue": "Oct 9, 2025 6:44 PM",
"formattedValues": {
"date": "Mar 29, 2021",
"datetime": "Mar 29, 2021 1:37 PM",
@ -3542,9 +3541,9 @@
"$": [
"ts",
192,
1759761548778
1760021059065
],
"$ts": 1759761548000
"$ts": 1760021059000
}
},
"type": "ia.input.date-time-input"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,10 +1,14 @@
{
"custom": {
"color": "#C2C2C2",
"isHighlight": false,
"isHighlighted": false,
"overlayColor": "#ffffff",
"priority": "No Active Alarms",
"state": "Closed"
},
"params": {
"highlight": "",
"tagProps": [
"System/MCM01/Conveyors/Ul15_1",
"value",
@ -136,6 +140,50 @@
},
"persistent": true
},
"custom.isHighlighted": {
"binding": {
"config": {
"expression": "{view.params.highlight} !\u003d \"\""
},
"type": "expr"
},
"persistent": true
},
"custom.overlayColor": {
"binding": {
"config": {
"path": "view.params.highlight"
},
"transforms": [
{
"fallback": "#ffffff",
"inputType": "scalar",
"mappings": [
{
"input": "Diagnostic",
"output": "rgb(88, 158, 249)"
},
{
"input": "Low",
"output": "rgb(255, 255, 0)"
},
{
"input": "Medium",
"output": "rgb(247, 160, 96)"
},
{
"input": "High",
"output": "rgb(245, 95, 89)"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "property"
},
"persistent": true
},
"custom.priority": {
"binding": {
"config": {
@ -414,6 +462,10 @@
},
"persistent": true
},
"params.highlight": {
"paramDirection": "input",
"persistent": true
},
"params.tagProps": {
"paramDirection": "input",
"persistent": true
@ -421,21 +473,45 @@
},
"props": {
"defaultSize": {
"height": 69,
"width": 49
"height": 215,
"width": 316
}
},
"root": {
"children": [
{
"meta": {
"name": "Conveyor45"
"name": "right90"
},
"position": {
"height": 0.9855,
"width": 0.9796
"height": 0.9926,
"width": 1
},
"propConfig": {
"props.elements[0].fill.opacity": {
"binding": {
"config": {
"expression": "if({view.custom.isHighlighted}, 1, 0)"
},
"type": "expr"
}
},
"props.elements[0].fill.paint": {
"binding": {
"config": {
"path": "view.custom.overlayColor"
},
"type": "property"
}
},
"props.elements[0].style.animation": {
"binding": {
"config": {
"expression": "if ({view.custom.isHighlighted}, \"2.5s linear infinite both conveyor\", \"\")"
},
"type": "expr"
}
},
"props.elements[1].elements[0].fill.paint": {
"binding": {
"config": {
@ -448,19 +524,31 @@
"props": {
"elements": [
{
"id": "defs1",
"name": "defs1",
"type": "defs"
"d": "M -0.99615567,-0.27371826\nC 4.682782,-0.24453426 8.3230212,-0.57477286 13.1432,1.9696924\nc 1.86631,1.0899955 3.092008,2.3401525 4.215123,3.6159412 2.092225,3.2039959 3.549251,6.6079254 3.439801,12.1559524\nl -10.260441,0.03496\nC 10.447132,15.609351 11.084607,14.065453 9.2893059,11.837379 6.5990039,8.8078661 2.7496313,9.3602273 -0.9326727,9.2352489\nZ",
"fill": {},
"id": "path1",
"name": "path1",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#BE0000",
"width": 0
},
"style": {
"classes": "",
"transition": "opacity 2.5s linear"
},
"type": "path"
},
{
"elements": [
{
"d": "m 0.61872656,19.047242 0.185181,-7.76481 C 2.3211966,6.4490419 5.3844746,3.4831579 9.6680236,0.93748089 L 13.582549,7.8726519 c -2.984985,1.33473 -4.2291194,3.3482401 -4.9990764,6.5174301 l -0.08744,4.67802 z",
"d": "m 0.48408946,0.63336539 c 5.03604004,0.02588 7.95928004,-0.266973 12.23377954,1.98944001 1.65503,0.9666 2.74197,2.07523 3.73794,3.20659 1.85537,2.84128 3.14745,5.8598596 3.05039,10.7798096 l -8.06562,0.031 c -0.0803,-1.92185 0.0446,-3.79913 -1.5474595,-5.77497 -2.38574,-2.6865496 -6.13811,-2.3322296 -9.40355004,-2.4430596 z",
"fill": {
"opacity": "1"
},
"id": "path26615",
"name": "path26615",
"id": "path27086",
"name": "path27086",
"stroke": {
"dasharray": "none",
"opacity": "1",
@ -475,7 +563,10 @@
"type": "group"
}
],
"viewBox": "0 0 14 19"
"style": {
"overflow": "visible"
},
"viewBox": "0 0 20 17"
},
"type": "ia.shapes.svg"
}

View File

@ -1,3 +1,51 @@
def calculateFocus(child, scale=1.7, OFFSET_Y=350):
DEVICE_VIEW_WIDTH = 1850
DEVICE_VIEW_HEIGHT = 1080
ZOOM_VIEW_WIDTH = 1920
ZOOM_VIEW_HEIGHT = 1080
# Device percent coordinates
percentX = child.position.x
percentY = child.position.y
# Convert to device view pixels
devicePixelX = percentX * DEVICE_VIEW_WIDTH
devicePixelY = percentY * DEVICE_VIEW_HEIGHT
# Scale to zoom view
zoomPixelX = devicePixelX * (ZOOM_VIEW_WIDTH / DEVICE_VIEW_WIDTH)
zoomPixelY = devicePixelY * (ZOOM_VIEW_HEIGHT / DEVICE_VIEW_HEIGHT)
# Device width scaling
deviceWidthPixels = child.position.width * DEVICE_VIEW_WIDTH
zoomDeviceWidth = deviceWidthPixels * (ZOOM_VIEW_WIDTH / DEVICE_VIEW_WIDTH)
# X offset (account for width)
dx = (ZOOM_VIEW_WIDTH / 2 - zoomPixelX) - (zoomDeviceWidth / 2)
# Rotation-aware vertical offset
rotation = getattr(child.position.rotate, "angle", "0deg")
if rotation == "90deg" and percentY> 0.3:
adjustedOffsetY = zoomDeviceWidth
else:
adjustedOffsetY = OFFSET_Y
# Dynamic Y offset zones
if percentY < 0.5:
dy = (zoomPixelY - ZOOM_VIEW_HEIGHT / 2) + adjustedOffsetY
elif 0.5 <= percentY < 0.6:
dy = (zoomPixelY - ZOOM_VIEW_HEIGHT / 2)
else:
dy = (zoomPixelY - ZOOM_VIEW_HEIGHT / 2) - adjustedOffsetY
if deviceWidthPixels > 1200 :
scale = 1.8
dy -= 100
return {"x": dx, "y": dy, "scale": scale}
def deviceType(self, path, props):
try:
docked_view = "Docked-East-"
@ -28,10 +76,10 @@ def deviceType(self, path, props):
def handleTagHighlight(view, currentValue):
tag_priority = currentValue.value
tag_priority = str(currentValue.value or "")
# --- CASE 1: Remove all highlights by applying CLEAR class ---
if str(tag_priority).upper() == "CLEAR":
if tag_priority.upper() == "CLEAR":
for child in view.rootContainer.getChildren()[0].getChildren():
try:
currentClasses = child.props.style['classes'].split(" ")
@ -46,7 +94,7 @@ def handleTagHighlight(view, currentValue):
if "||" not in tag_priority:
return
parts = str(tag_priority).split("||")
parts = tag_priority.split("||")
tag = parts[0]
@ -69,24 +117,29 @@ def handleTagHighlight(view, currentValue):
continue
# child.props.style.classes = ""
currentClasses = child.props.style['classes'].split(" ")
currentClasses = child.props.style.get('classes', '').split(" ")
# strip only highlight-related classes
filtered = [c for c in currentClasses if not c.startswith("Highlight/")]
child.props.style["classes"] = " ".join(filtered)
child.props.style.classes = " ".join(filtered)
child.props.params.highlight = ""
tagPath = tagsList[0]
if tag == tagPath:
path = child.props.get("path")
if "Photoeye" in path:
child.props.params.highlight = priority
else:
child.props.style["classes"] += " Highlight/Pulse-" + priority
device = str(path).split("/")[-1].lower()
child.props.params.highlight = priority
if "photoeye" not in device and not device.startswith("conveyor_"):
child.props.style.classes += " Highlight/Pulse-" + priority
docked_view = deviceType(view, path, tagProps)
system.perspective.openDock(docked_view[0], params = {'tagProps':tagProps, 'tags': docked_view[1], 'devices':docked_view[2]})
system.perspective.openDock(docked_view[0], params = {'tagProps':tagProps, 'tags': docked_view[1], 'devices':docked_view[2]})
system.perspective.sendMessage(
"focusDevice",
payload = calculateFocus(child),
scope="session"
)
foundMatch = True
return foundMatch

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,629 @@
{
"custom": {
"color": "#C2C2C2",
"isHighlighted": false,
"overlayColor": "#ffffff",
"priority": "No Active Alarms",
"state": "Closed"
},
"params": {
"highlight": "",
"tagProps": [
"System/MCM01/Conveyors/Ul15_1",
"value",
"value",
"value",
"value",
"value",
"value",
"value",
"value",
"value"
]
},
"propConfig": {
"custom.color": {
"binding": {
"config": {
"fallbackDelay": 2.5,
"mode": "indirect",
"references": {
"0": "{view.params.tagProps[0]}",
"fc": "{session.custom.fc}"
},
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Color"
},
"transforms": [
{
"expression": "coalesce({value},0)",
"type": "expression"
},
{
"fallback": "#000000",
"inputType": "scalar",
"mappings": [
{
"input": 0,
"output": "#C2C2C2"
},
{
"input": 1,
"output": "#FF0000"
},
{
"input": 2,
"output": "#FFA500"
},
{
"input": 3,
"output": "#0008FF"
},
{
"input": 4,
"output": "#00FF00"
},
{
"input": 5,
"output": "#FFF700"
},
{
"input": 6,
"output": "#87CEEB"
},
{
"input": 7,
"output": "#90EE90"
},
{
"input": 8,
"output": "#964B00"
},
{
"input": 9,
"output": "#FFFFFF"
},
{
"input": 10,
"output": "#000000"
},
{
"input": 11,
"output": "#8B0000"
},
{
"input": 12,
"output": "#808080"
},
{
"input": 13,
"output": "#8B8000"
},
{
"input": 14,
"output": "#006400"
},
{
"input": 15,
"output": "#FFFFC5"
},
{
"input": 16,
"output": "#00008B"
},
{
"input": 17,
"output": "#FF7276"
},
{
"input": 18,
"output": "#556B2F"
},
{
"input": 19,
"output": "#B43434"
},
{
"input": 20,
"output": "#4682B4"
},
{
"input": 21,
"output": "#FFD700"
}
],
"outputType": "color",
"type": "map"
}
],
"type": "tag"
},
"persistent": true
},
"custom.isHighlighted": {
"binding": {
"config": {
"expression": "{view.params.highlight} !\u003d \"\""
},
"type": "expr"
},
"persistent": true
},
"custom.overlayColor": {
"binding": {
"config": {
"path": "view.params.highlight"
},
"transforms": [
{
"fallback": "#ffffff",
"inputType": "scalar",
"mappings": [
{
"input": "Diagnostic",
"output": "rgb(88, 158, 249)"
},
{
"input": "Low",
"output": "rgb(255, 255, 0)"
},
{
"input": "Medium",
"output": "rgb(247, 160, 96)"
},
{
"input": "High",
"output": "rgb(245, 95, 89)"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "property"
},
"persistent": true
},
"custom.priority": {
"binding": {
"config": {
"fallbackDelay": 2.5,
"mode": "indirect",
"references": {
"0": "{view.params.tagProps[0]}",
"fc": "{session.custom.fc}"
},
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Priority"
},
"transforms": [
{
"expression": "coalesce({value},0)",
"type": "expression"
},
{
"fallback": null,
"inputType": "scalar",
"mappings": [
{
"input": 0,
"output": "No Active Alarms"
},
{
"input": 1,
"output": "High"
},
{
"input": 2,
"output": "Medium"
},
{
"input": 3,
"output": "Low"
},
{
"input": 4,
"output": "Diagnostic"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "tag"
},
"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": "coalesce({value},0)",
"type": "expression"
},
{
"fallback": "Unknown",
"inputType": "scalar",
"mappings": [
{
"input": 0,
"output": "Closed"
},
{
"input": 1,
"output": "Actuated"
},
{
"input": 2,
"output": "Communication Faulted"
},
{
"input": 3,
"output": "Conveyor Running In Maintenance Mode"
},
{
"input": 4,
"output": "Disabled"
},
{
"input": 5,
"output": "Disconnected"
},
{
"input": 6,
"output": "Stopped"
},
{
"input": 7,
"output": "Enabled Not Running"
},
{
"input": 8,
"output": "Encoder Fault"
},
{
"input": 9,
"output": "Energy Management"
},
{
"input": 10,
"output": "ESTOP Was Actuated"
},
{
"input": 11,
"output": "EStopped"
},
{
"input": 12,
"output": "EStopped Locally"
},
{
"input": 13,
"output": "Extended Faulted"
},
{
"input": 14,
"output": "Full"
},
{
"input": 15,
"output": "Gaylord Start Pressed"
},
{
"input": 16,
"output": "Jam Fault"
},
{
"input": 17,
"output": "Jammed"
},
{
"input": 18,
"output": "Loading Allowed"
},
{
"input": 19,
"output": "Loading Not Allowed"
},
{
"input": 20,
"output": "Low Air Pressure Fault Was Present"
},
{
"input": 21,
"output": "Maintenance Mode"
},
{
"input": 22,
"output": "Conveyor Stopped In Maintenance Mode"
},
{
"input": 23,
"output": "Motor Faulted"
},
{
"input": 24,
"output": "Motor Was Faulted"
},
{
"input": 25,
"output": "Normal"
},
{
"input": 26,
"output": "Off Inactive"
},
{
"input": 27,
"output": "Open"
},
{
"input": 28,
"output": "PLC Ready To Run"
},
{
"input": 29,
"output": "Package Release Pressed"
},
{
"input": 30,
"output": "Power Branch Was Faulted"
},
{
"input": 31,
"output": "Pressed"
},
{
"input": 32,
"output": "Ready To Receive"
},
{
"input": 33,
"output": "Running"
},
{
"input": 34,
"output": "Started"
},
{
"input": 35,
"output": "Stopped"
},
{
"input": 36,
"output": "System Started"
},
{
"input": 37,
"output": "Unknown"
},
{
"input": 38,
"output": "VFD Fault"
},
{
"input": 39,
"output": "Conveyor Running In Power Saving Mode"
},
{
"input": 40,
"output": "Conveyor Jogging In Maintenance Mode"
},
{
"input": 41,
"output": "VFD Reset Required"
},
{
"input": 42,
"output": "Jam Reset Push Button Pressed"
},
{
"input": 43,
"output": "Start Push Button Pressed"
},
{
"input": 44,
"output": "Stop Push Button Pressed"
},
{
"input": 45,
"output": "No Container"
},
{
"input": 46,
"output": "Ready To Be Enabled"
},
{
"input": 47,
"output": "Half Full"
},
{
"input": 48,
"output": "Enabled"
},
{
"input": 49,
"output": "Tipper Faulted"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "tag"
},
"persistent": true
},
"params.highlight": {
"paramDirection": "input",
"persistent": true
},
"params.tagProps": {
"paramDirection": "input",
"persistent": true
}
},
"props": {
"defaultSize": {
"height": 229,
"width": 181
}
},
"root": {
"children": [
{
"meta": {
"name": "Conveyor_Left90"
},
"position": {
"height": 1,
"width": 1
},
"propConfig": {
"props.elements[1].fill.opacity": {
"binding": {
"config": {
"expression": "if({view.custom.isHighlighted} , 1 , 0)"
},
"type": "expr"
}
},
"props.elements[1].fill.paint": {
"binding": {
"config": {
"path": "view.custom.overlayColor"
},
"type": "property"
}
},
"props.elements[1].style.animation": {
"binding": {
"config": {
"expression": "if ({view.custom.isHighlighted}, \"2.5s linear infinite both conveyor\", \"\")"
},
"type": "expr"
}
},
"props.elements[2].fill.paint": {
"binding": {
"config": {
"path": "view.custom.color"
},
"type": "property"
}
}
},
"props": {
"elements": [
{
"elements": [
{
"elements": [
{
"id": "feGaussianBlur1",
"name": "feGaussianBlur1",
"stdDeviation": "2.1301424",
"type": "feGaussianBlur"
}
],
"height": "1.453317",
"id": "filter1",
"name": "filter1",
"style": {
"colorInterpolationFilters": "sRGB"
},
"type": "filter",
"width": "1.523762",
"x": 0,
"y": 0
}
],
"id": "defs1",
"name": "defs1",
"type": "defs"
},
{
"d": "M 19.795541,24.053407 C 4.8690768,24.621849 -0.26264835,18.334911 0.32257209,1.5332384 L 11.358047,1.5616638 C 11.484424,11.30713 10.25124,13.183695 19.799798,13.487969 Z",
"fill": {},
"id": "path27089",
"name": "path27089",
"stroke": {
"dasharray": "none",
"opacity": 0,
"paint": "#000000",
"width": 0
},
"style": {
"filter": "",
"opacity": 1
},
"type": "path"
},
{
"d": "M 18.6878,22.684405 C 5.9759133,22.823395 1.6853368,16.70923 1.9611592,2.9471254 l 8.1187968,3.045e-4 C 10.1902,11.101336 10.324572,14.221492 18.654279,14.439663 Z",
"fill": {
"opacity": "1"
},
"id": "path1",
"name": "path1",
"stroke": {
"dasharray": "none",
"opacity": 1,
"paint": "#000000",
"width": 0.45
},
"type": "path"
}
],
"style": {
"overflow": "visible"
},
"viewBox": "0 0 20 25"
},
"type": "ia.shapes.svg"
}
],
"events": {
"dom": {
"onClick": {
"config": {
"script": "\t#create devices and tags lists for the conveyor\n\tprops \u003d self.view.params.tagProps[0]\n\tautStand.devices.build_device_mapping(props)\n\tdevice_table_dataset \u003d autStand.devices.build_device_table(self)\n\ttags_table_dataset \u003d autStand.devices.getAllTags(self, props)\n\tsystem.perspective.openDock(\u0027Docked-East-Conv\u0027,params\u003d{\u0027tagProps\u0027:self.view.params.tagProps, \"devices\": device_table_dataset, \"tags\":tags_table_dataset})"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "root",
"tooltip": {
"enabled": true
}
},
"propConfig": {
"meta.tooltip.text": {
"binding": {
"config": {
"expression": "if(\n {view.custom.state} !\u003d \"Closed\",\n \"Source Id: \" + {view.params.tagProps[0]} + \", Priority: \" + {view.custom.priority} + \", State: \" + {view.custom.state},\n \"Device Disconnected\"\n)\n"
},
"type": "expr"
}
}
},
"props": {
"mode": "percent",
"style": {
"cursor": "pointer",
"overflow": "hidden"
}
},
"type": "ia.container.coord"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -7875,9 +7875,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.3004,
"y": 0.3981
"width": 0.011,
"x": 0.302,
"y": 0.3972
},
"props": {
"params": {
@ -7908,9 +7908,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.3376,
"y": 0.3981
"width": 0.011,
"x": 0.3392,
"y": 0.3972
},
"props": {
"params": {
@ -7941,9 +7941,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.407,
"y": 0.3981
"width": 0.011,
"x": 0.4086,
"y": 0.3972
},
"props": {
"params": {
@ -7974,9 +7974,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4437,
"y": 0.3981
"width": 0.011,
"x": 0.4453,
"y": 0.3972
},
"props": {
"params": {
@ -8007,9 +8007,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4805,
"y": 0.3981
"width": 0.011,
"x": 0.4821,
"y": 0.3972
},
"props": {
"params": {
@ -8040,9 +8040,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5492,
"y": 0.3981
"width": 0.011,
"x": 0.5508,
"y": 0.3972
},
"props": {
"params": {
@ -8073,9 +8073,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5887,
"y": 0.3981
"width": 0.011,
"x": 0.5903,
"y": 0.3972
},
"props": {
"params": {
@ -8106,9 +8106,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6269,
"y": 0.3981
"width": 0.011,
"x": 0.6285,
"y": 0.3972
},
"props": {
"params": {
@ -8139,9 +8139,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6989,
"y": 0.3981
"width": 0.011,
"x": 0.7005,
"y": 0.3972
},
"props": {
"params": {
@ -8172,9 +8172,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7373,
"y": 0.3981
"width": 0.011,
"x": 0.7389,
"y": 0.3972
},
"props": {
"params": {
@ -8205,9 +8205,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.775,
"y": 0.3981
"width": 0.011,
"x": 0.7766,
"y": 0.3972
},
"props": {
"params": {
@ -8238,9 +8238,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4065,
"y": 0.5092
"width": 0.011,
"x": 0.4081,
"y": 0.5083
},
"props": {
"params": {
@ -8271,9 +8271,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4432,
"y": 0.5092
"width": 0.011,
"x": 0.4448,
"y": 0.5083
},
"props": {
"params": {
@ -8304,9 +8304,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4805,
"y": 0.5092
"width": 0.011,
"x": 0.4821,
"y": 0.5083
},
"props": {
"params": {
@ -8337,9 +8337,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5503,
"y": 0.5101
"width": 0.011,
"x": 0.5519,
"y": 0.5092
},
"props": {
"params": {
@ -8370,9 +8370,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5887,
"y": 0.5101
"width": 0.011,
"x": 0.5903,
"y": 0.5092
},
"props": {
"params": {
@ -8403,9 +8403,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6248,
"y": 0.5101
"width": 0.011,
"x": 0.6264,
"y": 0.5092
},
"props": {
"params": {
@ -8436,9 +8436,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6989,
"y": 0.5092
"width": 0.011,
"x": 0.7005,
"y": 0.5083
},
"props": {
"params": {
@ -8469,9 +8469,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7357,
"y": 0.5092
"width": 0.011,
"x": 0.7373,
"y": 0.5083
},
"props": {
"params": {
@ -8502,9 +8502,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7741,
"y": 0.5092
"width": 0.011,
"x": 0.7757,
"y": 0.5083
},
"props": {
"params": {
@ -9099,9 +9099,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7913,
"y": 0.3981
"width": 0.011,
"x": 0.7926,
"y": 0.3972
},
"props": {
"params": {

View File

@ -114,7 +114,7 @@
},
"rotation": "0deg",
"show_dpm_device_view": false,
"show_dpm_view": true,
"show_dpm_view": false,
"timewidget": {
"endDate": {
"$": [

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -114,7 +114,7 @@
},
"rotation": "0deg",
"show_dpm_device_view": false,
"show_dpm_view": true,
"show_dpm_view": false,
"timewidget": {
"endDate": {
"$": [

View File

@ -9,8 +9,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-06T07:49:48Z"
"timestamp": "2025-10-09T13:18:52Z"
},
"lastModificationSignature": "2f38ce959813b723f441c14a085aff2ba988c9ee238b898eb987106b615665e7"
"lastModificationSignature": "5bc273d843eb9193d20d5f0c6f3ea41148befd1589f6a3757874207ff65c1ea3"
}
}

View File

@ -9,8 +9,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T12:56:42Z"
"timestamp": "2025-10-09T13:39:01Z"
},
"lastModificationSignature": "3744872bd4bb157a82c1817211618d8f70f642d586550f31adb306470634f937"
"lastModificationSignature": "af7a0c7bf4009daca7465af7739629d4f6a11f4d29a4751095fc37fa40dd93fd"
}
}

View File

@ -107,4 +107,11 @@ div[data-component="ia.input.fileupload"] .ia_button--primary {
}
@keyframes conveyor {
0% { opacity: 0.3; filter: blur(0.5px); }
50% { opacity: 1; filter: blur(1.4px); }
100% { opacity: 0.3; filter: blur(0.5px); }
}

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-02T12:31:55Z"
"timestamp": "2025-10-09T12:11:33Z"
},
"lastModificationSignature": "fd3d1b73716681c0df7fac573efcd06c26bca974aa9cc9073a46e695aea0e82a"
"lastModificationSignature": "40b290cbd1dd7ee8d7d17f9e934ccc5c67c0ed4aa60514e3edff8daec56e7572"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-09-23T15:13:12Z"
"timestamp": "2025-10-09T12:11:32Z"
},
"lastModificationSignature": "dc7df49574b4ed385de866aa598bb540398d2ae3bcedba7bc8990a32b9f18b51"
"lastModificationSignature": "8d9611d3b2920e4ece6ae15892e8ee792f58496a4946ef7142093e0819d7db23"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:56:18Z"
"timestamp": "2025-10-09T14:43:22Z"
},
"lastModificationSignature": "5bc425b9b78e86bd1dafc6ef4d5c74008c5e65ba0b41a1e2d2c314a210bebac4"
"lastModificationSignature": "7aa2a68dcc45ecf04718563699e917faf496bf001f9bdc1323337a152b718e46"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -5,8 +5,8 @@
"panZoomScale": 1
},
"scale": 1,
"x": -10,
"y": -7
"x": 0,
"y": 0
},
"params": {
"controls": {
@ -583,10 +583,6 @@
"meta": {
"name": "root"
},
"position": {
"x": 0.175,
"y": 0.038
},
"props": {
"mode": "percent",
"style": {
@ -595,6 +591,19 @@
"overflowY": "hidden"
}
},
"scripts": {
"customMethods": [],
"extensionFunctions": null,
"messageHandlers": [
{
"messageType": "focusDevice",
"pageScope": false,
"script": "\tself.view.custom.x \u003d payload[\"x\"]\n\tself.view.custom.y \u003d payload[\"y\"]\n\tself.view.custom.scale \u003d payload[\"scale\"]",
"sessionScope": true,
"viewScope": false
}
]
},
"type": "ia.container.coord"
}
}

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:54:34Z"
"timestamp": "2025-10-09T14:40:42Z"
},
"lastModificationSignature": "eed7f13fee99ba3d26b65815fcbe3abb135fd0a2c894d37688c088ce37da5797"
"lastModificationSignature": "f5dc1059c8ecbaa504852f8cfc8b9be5ecc80032eeeca69b61ce7c8d36445d19"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:54:34Z"
"timestamp": "2025-10-08T14:50:52Z"
},
"lastModificationSignature": "ec61b785b14257040fd1a8025f88d626537322edc086c4c88fa0efb14e356b72"
"lastModificationSignature": "b2a6a51605fb4f79f3f881e59b0b223c6f09cb177cb87359661faea8bb7422b3"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -7875,9 +7875,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.3004,
"y": 0.3981
"width": 0.011,
"x": 0.302,
"y": 0.3972
},
"props": {
"params": {
@ -7908,9 +7908,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.3376,
"y": 0.3981
"width": 0.011,
"x": 0.3392,
"y": 0.3972
},
"props": {
"params": {
@ -7941,9 +7941,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.407,
"y": 0.3981
"width": 0.011,
"x": 0.4086,
"y": 0.3972
},
"props": {
"params": {
@ -7974,9 +7974,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4437,
"y": 0.3981
"width": 0.011,
"x": 0.4453,
"y": 0.3972
},
"props": {
"params": {
@ -8007,9 +8007,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4805,
"y": 0.3981
"width": 0.011,
"x": 0.4821,
"y": 0.3972
},
"props": {
"params": {
@ -8040,9 +8040,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5492,
"y": 0.3981
"width": 0.011,
"x": 0.5508,
"y": 0.3972
},
"props": {
"params": {
@ -8073,9 +8073,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5887,
"y": 0.3981
"width": 0.011,
"x": 0.5903,
"y": 0.3972
},
"props": {
"params": {
@ -8106,9 +8106,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6269,
"y": 0.3981
"width": 0.011,
"x": 0.6285,
"y": 0.3972
},
"props": {
"params": {
@ -8139,9 +8139,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6989,
"y": 0.3981
"width": 0.011,
"x": 0.7005,
"y": 0.3972
},
"props": {
"params": {
@ -8172,9 +8172,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7373,
"y": 0.3981
"width": 0.011,
"x": 0.7389,
"y": 0.3972
},
"props": {
"params": {
@ -8205,9 +8205,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.775,
"y": 0.3981
"width": 0.011,
"x": 0.7766,
"y": 0.3972
},
"props": {
"params": {
@ -8238,9 +8238,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4065,
"y": 0.5092
"width": 0.011,
"x": 0.4081,
"y": 0.5083
},
"props": {
"params": {
@ -8271,9 +8271,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4432,
"y": 0.5092
"width": 0.011,
"x": 0.4448,
"y": 0.5083
},
"props": {
"params": {
@ -8304,9 +8304,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.4805,
"y": 0.5092
"width": 0.011,
"x": 0.4821,
"y": 0.5083
},
"props": {
"params": {
@ -8337,9 +8337,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5503,
"y": 0.5101
"width": 0.011,
"x": 0.5519,
"y": 0.5092
},
"props": {
"params": {
@ -8370,9 +8370,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.5887,
"y": 0.5101
"width": 0.011,
"x": 0.5903,
"y": 0.5092
},
"props": {
"params": {
@ -8403,9 +8403,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6248,
"y": 0.5101
"width": 0.011,
"x": 0.6264,
"y": 0.5092
},
"props": {
"params": {
@ -8436,9 +8436,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.6989,
"y": 0.5092
"width": 0.011,
"x": 0.7005,
"y": 0.5083
},
"props": {
"params": {
@ -8469,9 +8469,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7357,
"y": 0.5092
"width": 0.011,
"x": 0.7373,
"y": 0.5083
},
"props": {
"params": {
@ -8502,9 +8502,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7741,
"y": 0.5092
"width": 0.011,
"x": 0.7757,
"y": 0.5083
},
"props": {
"params": {
@ -9099,9 +9099,9 @@
},
"position": {
"height": 0.0185,
"width": 0.0157,
"x": 0.7913,
"y": 0.3981
"width": 0.011,
"x": 0.7926,
"y": 0.3972
},
"props": {
"params": {

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:54:36Z"
"timestamp": "2025-10-08T14:57:25Z"
},
"lastModificationSignature": "dd7b3f518c003720bd33a75f90d63e47b13eb69669e455e2921db1465c8ea9c6"
"lastModificationSignature": "e600bc2f9b64853a1c1b3477ac60ce6ff4d180ad42576e1c07cade39b3f144b7"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-03T16:31:56Z"
"timestamp": "2025-10-08T14:53:45Z"
},
"lastModificationSignature": "d8bca84d0665714ed1d6cc4db35443130236411430810ba154f49fb1f4223001"
"lastModificationSignature": "f4980cfd53a7c08ab7c2df64e319417201b8885440931da744f49c85ee8e0a8c"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 879 B

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -309,6 +309,9 @@
"fontFamily": "Arial",
"fontWeight": "bold",
"textAlign": "center"
},
"textStyle": {
"fontSize": "2vmin"
}
},
"type": "ia.display.label"

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-03T13:05:52Z"
"timestamp": "2025-10-09T11:35:04Z"
},
"lastModificationSignature": "302ab90555d4932736168ad463d71eebb72322ba26990b37c9cf32fc5d3d8d5b"
"lastModificationSignature": "4b28c09ec718e36a4c553ca72e08566c360acd46acf23637d87534d5b01373bb"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

After

Width:  |  Height:  |  Size: 413 B

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-09-30T09:39:40Z"
"timestamp": "2025-10-09T12:47:30Z"
},
"lastModificationSignature": "3a3128cc2c6b6f5d1fc777df643566ca0c89ca671781429b5d6e3f44d2be30f6"
"lastModificationSignature": "c1da7d6b010e9b55e048ece4b8d96d9b281d822b56d2ca14d0ff8712e7785240"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 95 B

View File

@ -1,12 +1,15 @@
{
"custom": {
"color": "#C2C2C2",
"isHighlited": false,
"overlayColor": "#ffffff",
"priority": "No Active Alarms",
"state": "Closed"
},
"params": {
"highlight": "",
"tagProps": [
"System/MCM01/Conveyors/Ul15_1",
"System/MCM01/Conveyor/Ul15_1",
"value",
"value",
"value",
@ -136,6 +139,50 @@
},
"persistent": true
},
"custom.isHighlited": {
"binding": {
"config": {
"expression": "{view.params.highlight} !\u003d \"\""
},
"type": "expr"
},
"persistent": true
},
"custom.overlayColor": {
"binding": {
"config": {
"path": "view.params.highlight"
},
"transforms": [
{
"fallback": "#ffffff",
"inputType": "scalar",
"mappings": [
{
"input": "Diagnostic",
"output": "rgb(88, 158, 249)"
},
{
"input": "Low",
"output": "rgb(255, 255, 0)"
},
{
"input": "Medium",
"output": "rgb(247, 160, 96)"
},
{
"input": "High",
"output": "rgb(245, 95, 89)"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "property"
},
"persistent": true
},
"custom.priority": {
"binding": {
"config": {
@ -414,6 +461,10 @@
},
"persistent": true
},
"params.highlight": {
"paramDirection": "input",
"persistent": true
},
"params.tagProps": {
"paramDirection": "input",
"persistent": true
@ -432,11 +483,35 @@
"name": "Conveyor45"
},
"position": {
"height": 0.9855,
"width": 0.9796
"height": 1,
"width": 1
},
"propConfig": {
"props.elements[1].elements[0].fill.paint": {
"props.elements[0].fill.opacity": {
"binding": {
"config": {
"expression": "if({view.custom.isHighlited}, 1, 0)"
},
"type": "expr"
}
},
"props.elements[0].fill.paint": {
"binding": {
"config": {
"path": "view.custom.overlayColor"
},
"type": "property"
}
},
"props.elements[0].style.animation": {
"binding": {
"config": {
"expression": "if ({view.custom.isHighlited}, \"2.5s linear infinite both conveyor\", \"\")"
},
"type": "expr"
}
},
"props.elements[1].fill.paint": {
"binding": {
"config": {
"path": "view.custom.color"
@ -448,33 +523,45 @@
"props": {
"elements": [
{
"id": "defs1",
"name": "defs1",
"type": "defs"
"d": "m -0.86795047,19.664401 0.24823006,-8.9351 C 1.4141638,5.1674347 4.2395046,2.4376861 9.9814841,-0.49166894 L 15.036661,7.9157199 C 11.035373,9.451617 10.840679,10.658485 9.8085725,14.305329 l -0.1172109,5.383077 z",
"fill": {},
"id": "path9",
"name": "path9",
"stroke": {
"dasharray": "none",
"opacity": 0,
"paint": "#000000",
"width": "0.558889"
},
"style": {
"opacity": 1,
"transition": "opacity 2.5s linear"
},
"type": "path"
},
{
"elements": [
{
"d": "m 0.61872656,19.047242 0.185181,-7.76481 C 2.3211966,6.4490419 5.3844746,3.4831579 9.6680236,0.93748089 L 13.582549,7.8726519 c -2.984985,1.33473 -4.2291194,3.3482401 -4.9990764,6.5174301 l -0.08744,4.67802 z",
"fill": {
"opacity": "1"
},
"id": "path26615",
"name": "path26615",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#000000",
"width": 0.45
},
"type": "path"
}
],
"id": "layer1",
"name": "layer1",
"type": "group"
"d": "m 0.3823775,18.9146 0.185181,-7.76481 C 2.0848475,6.3164005 5.1481255,3.3505165 9.4316745,0.80483942 L 13.3462,7.7400105 C 10.361215,9.0747405 9.1170805,11.08825 8.3471235,14.25744 l -0.08744,4.67802 z",
"fill": {
"opacity": 1
},
"id": "path26615",
"name": "path26615",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#000000",
"width": "0.45"
},
"style": {
"opacity": "1"
},
"type": "path"
}
],
"preserveAspectRatio": "none",
"style": {
"overflow": "visible"
},
"viewBox": "0 0 14 19"
},
"type": "ia.shapes.svg"
@ -510,7 +597,8 @@
"props": {
"mode": "percent",
"style": {
"cursor": "pointer"
"cursor": "pointer",
"overflow": "visible"
}
},
"type": "ia.container.coord"

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-03T11:07:41Z"
"timestamp": "2025-10-09T13:38:40Z"
},
"lastModificationSignature": "3f80f02128c13e200e0cebc76e19e0f5a0ff8fc09d899e972815599ef5424927"
"lastModificationSignature": "88adb00d4c80be8e44fd48b15a0b5f146a15ae45ba6821a614227fe390043e8a"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -1,10 +1,13 @@
{
"custom": {
"color": "#C2C2C2",
"isHighlighted": false,
"overlayColor": "#ffffff",
"priority": "No Active Alarms",
"state": "Closed"
},
"params": {
"highlight": "",
"tagProps": [
"System/MCM01/Conveyors/Ul15_1",
"value",
@ -136,6 +139,50 @@
},
"persistent": true
},
"custom.isHighlighted": {
"binding": {
"config": {
"expression": "{view.params.highlight} !\u003d \"\""
},
"type": "expr"
},
"persistent": true
},
"custom.overlayColor": {
"binding": {
"config": {
"path": "view.params.highlight"
},
"transforms": [
{
"fallback": "#ffffff",
"inputType": "scalar",
"mappings": [
{
"input": "Diagnostic",
"output": "rgb(88, 158, 249)"
},
{
"input": "Low",
"output": "rgb(255, 255, 0)"
},
{
"input": "Medium",
"output": "rgb(247, 160, 96)"
},
{
"input": "High",
"output": "rgb(245, 95, 89)"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "property"
},
"persistent": true
},
"custom.priority": {
"binding": {
"config": {
@ -414,6 +461,10 @@
},
"persistent": true
},
"params.highlight": {
"paramDirection": "input",
"persistent": true
},
"params.tagProps": {
"paramDirection": "input",
"persistent": true
@ -421,8 +472,8 @@
},
"props": {
"defaultSize": {
"height": 272,
"width": 207
"height": 229,
"width": 181
}
},
"root": {
@ -432,13 +483,35 @@
"name": "Conveyor_Left90"
},
"position": {
"height": 1.3652,
"width": 1,
"x": 0.0069,
"y": -0.1685
"height": 1,
"width": 1
},
"propConfig": {
"props.elements[1].elements[0].fill.paint": {
"props.elements[1].fill.opacity": {
"binding": {
"config": {
"expression": "if({view.custom.isHighlighted} , 1 , 0)"
},
"type": "expr"
}
},
"props.elements[1].fill.paint": {
"binding": {
"config": {
"path": "view.custom.overlayColor"
},
"type": "property"
}
},
"props.elements[1].style.animation": {
"binding": {
"config": {
"expression": "if ({view.custom.isHighlighted}, \"2.5s linear infinite both conveyor\", \"\")"
},
"type": "expr"
}
},
"props.elements[2].fill.paint": {
"binding": {
"config": {
"path": "view.custom.color"
@ -450,34 +523,69 @@
"props": {
"elements": [
{
"elements": [
{
"elements": [
{
"id": "feGaussianBlur1",
"name": "feGaussianBlur1",
"stdDeviation": "2.1301424",
"type": "feGaussianBlur"
}
],
"height": "1.453317",
"id": "filter1",
"name": "filter1",
"style": {
"colorInterpolationFilters": "sRGB"
},
"type": "filter",
"width": "1.523762",
"x": 0,
"y": 0
}
],
"id": "defs1",
"name": "defs1",
"type": "defs"
},
{
"elements": [
{
"d": "M 16.890047,19.897888 C 4.1781605,20.036878 -0.11241603,13.922713 0.16340637,0.16060852 L 8.2822031,0.16091303 C 8.3924473,8.3148192 8.5268195,11.434975 16.856526,11.653146 Z",
"fill": {
"opacity": "1"
},
"id": "path27089",
"name": "path27089",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#000000",
"width": 0.45
},
"type": "path"
}
],
"id": "layer1",
"name": "layer1",
"type": "group"
"d": "M 19.795541,24.053407 C 4.8690768,24.621849 -0.26264835,18.334911 0.32257209,1.5332384 L 11.358047,1.5616638 C 11.484424,11.30713 10.25124,13.183695 19.799798,13.487969 Z",
"fill": {},
"id": "path27089",
"name": "path27089",
"stroke": {
"dasharray": "none",
"opacity": 0,
"paint": "#000000",
"width": 0
},
"style": {
"filter": "",
"opacity": 1
},
"type": "path"
},
{
"d": "M 18.6878,22.684405 C 5.9759133,22.823395 1.6853368,16.70923 1.9611592,2.9471254 l 8.1187968,3.045e-4 C 10.1902,11.101336 10.324572,14.221492 18.654279,14.439663 Z",
"fill": {
"opacity": "1"
},
"id": "path1",
"name": "path1",
"stroke": {
"dasharray": "none",
"opacity": 1,
"paint": "#000000",
"width": 0.45
},
"type": "path"
}
],
"viewBox": "0 0 17 20"
"style": {
"overflow": "visible"
},
"viewBox": "0 0 20 25"
},
"type": "ia.shapes.svg"
}
@ -513,8 +621,7 @@
"mode": "percent",
"style": {
"cursor": "pointer",
"overflow": "hidden",
"overflowX": "hidden"
"overflow": "hidden"
}
},
"type": "ia.container.coord"

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-09-26T13:14:19Z"
"timestamp": "2025-10-09T13:47:39Z"
},
"lastModificationSignature": "5ace2efb9c4ccf46b247f479e067d32124deae5e0f125926b10a333f760c9b5e"
"lastModificationSignature": "a4ecee4b4d2f093cc6603f3b7fe167047949c799bafbec363a48845ee87466d9"
}
}

View File

@ -1,10 +1,14 @@
{
"custom": {
"color": "#C2C2C2",
"isHighlight": false,
"isHighlighted": false,
"overlayColor": "#ffffff",
"priority": "No Active Alarms",
"state": "Closed"
},
"params": {
"highlight": "",
"tagProps": [
"System/MCM01/Conveyors/Ul15_1",
"value",
@ -136,6 +140,50 @@
},
"persistent": true
},
"custom.isHighlighted": {
"binding": {
"config": {
"expression": "{view.params.highlight} !\u003d \"\""
},
"type": "expr"
},
"persistent": true
},
"custom.overlayColor": {
"binding": {
"config": {
"path": "view.params.highlight"
},
"transforms": [
{
"fallback": "#ffffff",
"inputType": "scalar",
"mappings": [
{
"input": "Diagnostic",
"output": "rgb(88, 158, 249)"
},
{
"input": "Low",
"output": "rgb(255, 255, 0)"
},
{
"input": "Medium",
"output": "rgb(247, 160, 96)"
},
{
"input": "High",
"output": "rgb(245, 95, 89)"
}
],
"outputType": "scalar",
"type": "map"
}
],
"type": "property"
},
"persistent": true
},
"custom.priority": {
"binding": {
"config": {
@ -414,6 +462,10 @@
},
"persistent": true
},
"params.highlight": {
"paramDirection": "input",
"persistent": true
},
"params.tagProps": {
"paramDirection": "input",
"persistent": true
@ -436,6 +488,30 @@
"width": 1
},
"propConfig": {
"props.elements[0].fill.opacity": {
"binding": {
"config": {
"expression": "if({view.custom.isHighlighted}, 1, 0)"
},
"type": "expr"
}
},
"props.elements[0].fill.paint": {
"binding": {
"config": {
"path": "view.custom.overlayColor"
},
"type": "property"
}
},
"props.elements[0].style.animation": {
"binding": {
"config": {
"expression": "if ({view.custom.isHighlighted}, \"2.5s linear infinite both conveyor\", \"\")"
},
"type": "expr"
}
},
"props.elements[1].elements[0].fill.paint": {
"binding": {
"config": {
@ -448,9 +524,21 @@
"props": {
"elements": [
{
"id": "defs1",
"name": "defs1",
"type": "defs"
"d": "M -0.99615567,-0.27371826\nC 4.682782,-0.24453426 8.3230212,-0.57477286 13.1432,1.9696924\nc 1.86631,1.0899955 3.092008,2.3401525 4.215123,3.6159412 2.092225,3.2039959 3.549251,6.6079254 3.439801,12.1559524\nl -10.260441,0.03496\nC 10.447132,15.609351 11.084607,14.065453 9.2893059,11.837379 6.5990039,8.8078661 2.7496313,9.3602273 -0.9326727,9.2352489\nZ",
"fill": {},
"id": "path1",
"name": "path1",
"stroke": {
"dasharray": "none",
"opacity": "1",
"paint": "#BE0000",
"width": 0
},
"style": {
"classes": "",
"transition": "opacity 2.5s linear"
},
"type": "path"
},
{
"elements": [
@ -475,6 +563,9 @@
"type": "group"
}
],
"style": {
"overflow": "visible"
},
"viewBox": "0 0 20 17"
},
"type": "ia.shapes.svg"

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-09-29T10:00:57Z"
"timestamp": "2025-10-09T10:03:35Z"
},
"lastModificationSignature": "76d767c51379b519d23c16f9df088907b9b6142d9aa72e6d3bd5d115242b22e5"
"lastModificationSignature": "375e597109a2a628e034075884262b41df8cbe9744cf9ca242f108979794a349"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 77 B

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:50:25Z"
"timestamp": "2025-10-08T16:11:19Z"
},
"lastModificationSignature": "da2875ac0bb0c8a9d7178905c0ea9313bccb8dbbf1daf1db140f5e1091b8e2d9"
"lastModificationSignature": "9b8bedd721b2dd15d852870a38d35d51643986194a1005cd120d84919cc0a770"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 B

After

Width:  |  Height:  |  Size: 105 B

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:50:35Z"
"timestamp": "2025-10-08T16:09:40Z"
},
"lastModificationSignature": "e2045f23cefce6db7315b2a7f0d8b68095749d09168efd1e17a9ee31cbf87c8a"
"lastModificationSignature": "c03186da3b398e62e4d039c1adc22d09923815339585ac96d36b54b41ddafe18"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 252 B

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:50:11Z"
"timestamp": "2025-10-09T10:44:12Z"
},
"lastModificationSignature": "fc67cee87b6d5049d83e1fd0b79505d3b8bb7accd05ec948e9cb8654cea260e5"
"lastModificationSignature": "a9de3ab7f190b5d4113ddd0b4019b2536df1d8cb957037e9f2d9aa0566ec4e40"
}
}

View File

@ -10,8 +10,8 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-06T14:39:09Z"
"timestamp": "2025-10-09T14:44:19Z"
},
"lastModificationSignature": "c10141c57b90eac3ea5f7988a614f70e0b6d090d3d92728f1b2772c4945c132e"
"lastModificationSignature": "6dcdeb8edafd35ff55105fad330cd914ca70676dd1d49bff4289ef518d7cce34"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -1,7 +1,7 @@
{
"custom": {},
"params": {
"Tab_ID": 2,
"Tab_ID": 0,
"Table": "Status_tab"
},
"propConfig": {
@ -1641,7 +1641,6 @@
"width": 1.0016
},
"props": {
"currentTabIndex": 2,
"tabSize": {
"width": 130
},
@ -3372,7 +3371,7 @@
},
"props": {
"dismissOnSelect": false,
"formattedValue": "Oct 6, 2025 4:39 PM",
"formattedValue": "Oct 9, 2025 4:44 PM",
"formattedValues": {
"date": "Mar 26, 2021",
"datetime": "Mar 26, 2021 12:00 AM",
@ -3382,9 +3381,9 @@
"$": [
"ts",
192,
1759761548778
1760021059065
],
"$ts": 1759754348000
"$ts": 1760013859000
}
},
"type": "ia.input.date-time-input"
@ -3532,7 +3531,7 @@
},
"props": {
"dismissOnSelect": false,
"formattedValue": "Oct 6, 2025 6:39 PM",
"formattedValue": "Oct 9, 2025 6:44 PM",
"formattedValues": {
"date": "Mar 29, 2021",
"datetime": "Mar 29, 2021 1:37 PM",
@ -3542,9 +3541,9 @@
"$": [
"ts",
192,
1759761548778
1760021059065
],
"$ts": 1759761548000
"$ts": 1760021059000
}
},
"type": "ia.input.date-time-input"

View File

@ -1,3 +1,51 @@
def calculateFocus(child, scale=1.7, OFFSET_Y=350):
DEVICE_VIEW_WIDTH = 1850
DEVICE_VIEW_HEIGHT = 1080
ZOOM_VIEW_WIDTH = 1920
ZOOM_VIEW_HEIGHT = 1080
# Device percent coordinates
percentX = child.position.x
percentY = child.position.y
# Convert to device view pixels
devicePixelX = percentX * DEVICE_VIEW_WIDTH
devicePixelY = percentY * DEVICE_VIEW_HEIGHT
# Scale to zoom view
zoomPixelX = devicePixelX * (ZOOM_VIEW_WIDTH / DEVICE_VIEW_WIDTH)
zoomPixelY = devicePixelY * (ZOOM_VIEW_HEIGHT / DEVICE_VIEW_HEIGHT)
# Device width scaling
deviceWidthPixels = child.position.width * DEVICE_VIEW_WIDTH
zoomDeviceWidth = deviceWidthPixels * (ZOOM_VIEW_WIDTH / DEVICE_VIEW_WIDTH)
# X offset (account for width)
dx = (ZOOM_VIEW_WIDTH / 2 - zoomPixelX) - (zoomDeviceWidth / 2)
# Rotation-aware vertical offset
rotation = getattr(child.position.rotate, "angle", "0deg")
if rotation == "90deg" and percentY> 0.3:
adjustedOffsetY = zoomDeviceWidth
else:
adjustedOffsetY = OFFSET_Y
# Dynamic Y offset zones
if percentY < 0.5:
dy = (zoomPixelY - ZOOM_VIEW_HEIGHT / 2) + adjustedOffsetY
elif 0.5 <= percentY < 0.6:
dy = (zoomPixelY - ZOOM_VIEW_HEIGHT / 2)
else:
dy = (zoomPixelY - ZOOM_VIEW_HEIGHT / 2) - adjustedOffsetY
if deviceWidthPixels > 1200 :
scale = 1.8
dy -= 100
return {"x": dx, "y": dy, "scale": scale}
def deviceType(self, path, props):
try:
docked_view = "Docked-East-"
@ -28,10 +76,10 @@ def deviceType(self, path, props):
def handleTagHighlight(view, currentValue):
tag_priority = currentValue.value
tag_priority = str(currentValue.value or "")
# --- CASE 1: Remove all highlights by applying CLEAR class ---
if str(tag_priority).upper() == "CLEAR":
if tag_priority.upper() == "CLEAR":
for child in view.rootContainer.getChildren()[0].getChildren():
try:
currentClasses = child.props.style['classes'].split(" ")
@ -46,7 +94,7 @@ def handleTagHighlight(view, currentValue):
if "||" not in tag_priority:
return
parts = str(tag_priority).split("||")
parts = tag_priority.split("||")
tag = parts[0]
@ -69,24 +117,29 @@ def handleTagHighlight(view, currentValue):
continue
# child.props.style.classes = ""
currentClasses = child.props.style['classes'].split(" ")
currentClasses = child.props.style.get('classes', '').split(" ")
# strip only highlight-related classes
filtered = [c for c in currentClasses if not c.startswith("Highlight/")]
child.props.style["classes"] = " ".join(filtered)
child.props.style.classes = " ".join(filtered)
child.props.params.highlight = ""
tagPath = tagsList[0]
if tag == tagPath:
path = child.props.get("path")
if "Photoeye" in path:
child.props.params.highlight = priority
else:
child.props.style["classes"] += " Highlight/Pulse-" + priority
device = str(path).split("/")[-1].lower()
child.props.params.highlight = priority
if "photoeye" not in device and not device.startswith("conveyor_"):
child.props.style.classes += " Highlight/Pulse-" + priority
docked_view = deviceType(view, path, tagProps)
system.perspective.openDock(docked_view[0], params = {'tagProps':tagProps, 'tags': docked_view[1], 'devices':docked_view[2]})
system.perspective.openDock(docked_view[0], params = {'tagProps':tagProps, 'tags': docked_view[1], 'devices':docked_view[2]})
system.perspective.sendMessage(
"focusDevice",
payload = calculateFocus(child),
scope="session"
)
foundMatch = True
return foundMatch

View File

@ -9,9 +9,9 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-07T14:20:44Z"
"timestamp": "2025-10-09T14:38:52Z"
},
"hintScope": 2,
"lastModificationSignature": "2af263d6366d10c7e6321d92d44303526bba94840055a70a788c79972700db55"
"lastModificationSignature": "ca50f56b98e46e034ace9af74fdf42eead76808743376e9496e211d8ff41b4e4"
}
}

View File

@ -9,9 +9,9 @@
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-10-03T16:37:24Z"
"timestamp": "2025-10-08T10:51:05Z"
},
"hintScope": 2,
"lastModificationSignature": "a47dcd5da42891f568038f50617b3ef894540b8e6d30d2a3211a5c161e638dfd"
"lastModificationSignature": "0713955596283da970de1e084881b8d9b96057c74c46ef4881c2d071e4e7460c"
}
}