UNPKG

@opcua/for-node-red

Version:

The Node-RED node to communicate via OPC UA, powered NodeOPCUA and developed by Sterfive's team

312 lines (250 loc) 74.8 kB
<style> .sterfive-combo-box{position:relative;width:100%}.sterfive-online-menu{height:auto;position:fixed;width:auto}.sterfive-input-error{border-color:var(--red-ui-form-input-border-error-color)!important;border-style:solid;border-width:1px}.sterfive-typedInput-options{background:#fff;border-style:solid;border-width:1px;border:1px solid var(--red-ui-primary-border-color);box-sizing:border-box;max-height:350px;overflow-y:auto;position:absolute;white-space:nowrap;z-index:2000}.sterfive-typedInput-options a{align-items:center;border-bottom:1px solid;border-color:var(--red-ui-secondary-border-color);border-style:solid;border-width:1px;color:var(--red-ui-form-text-color);display:flex;font-size:13px;padding:6px 18px 6px 6px;text-decoration:none}.sterfive-typedInput-options a:hover{background:var(--red-ui-workspace-button-background-hover);text-decoration:none}.sterfive-typedInput-options a:focus{outline:none}.sterfive-typedInput-options a:active,.sterfive-typedInput-options a:focus{background:var(--red-ui-workspace-button-background-active);text-decoration:none}.sterfive-typedInput-options a input[type=checkbox]{margin:0 6px 0 0}.sterfive-typedInput-options .sterfive-typedInput-icon{margin-right:6px}.sterfive-typedInput-options .sterfive-typedInput-icon:not(.fa){background-color:var(--red-ui-primary-text-color);height:14px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:cover;mask-size:cover;width:12px}.sterfive-combo-box .sterfive-dropdown{background-color:#fff;border:1px solid #ccc;display:none;left:0;max-height:400px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:1000}.sterfive-combo-box li:before{content:none}.sterfive-tree li.expandable:before,.sterfive-tree li.no-expandable:before{content:"\f0da";cursor:pointer;font-family:FontAwesome;font-size:12pt;font-weight:900;margin-right:5px}.sterfive-tree li.no-expandable:before{opacity:0}.sterfive-tree li.expanded:before{content:"\f0d7";cursor:pointer;font-family:FontAwesome;font-size:12pt;font-weight:900;margin-right:5px}.sterfive-tree li span.selected{border:.5px dotted #33f}.sterfive-tree .fa{color:#333;margin-right:10px}.sterfive-tree ul{list-style:none;padding-inline-start:2%!important}.sterfive-tree li{cursor:pointer;padding:5px}.sterfive-tree{list-style-type:none}.sterfive-tree,.sterfive-tree ol,.sterfive-tree ul{list-style-type:none;margin:0;padding:0}.sterfive-tree li:hover{background-color:#eee}.sterfive-tree li.loading:before{animation:fa-spin 1s linear infinite;content:"\f110";cursor:pointer;font-family:FontAwesome;font-weight:900;margin-right:5px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sterfive-tree .spinner{animation:spin .7s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#666;display:inline-block;height:16px;width:16px}.sterfive-info{background-color:#fafad2;border-radius:10px;border-style:groove;display:block;font-size:10pt;margin:5px 0;padding:5px}.sterfive-info .ok{color:green}.sterfive-info .warning{color:darkred}.input-wrapper{border:0 solid #ccc;border-radius:5px;padding:0}.sterfive-input-group{border:1px solid #ccc;border-radius:5px;display:flex;overflow:hidden}.sterfive-input-group button,.sterfive-input-group input{border:none;outline:none;padding:10px}.sterfive-input-group input{flex:1}.sterfive-input-group button{background-color:var(--red-ui-form-button-background);color:#7b7a7a;cursor:pointer}.sterfive-input-group button:hover{background-color:var(--red-ui-secondary-background-hover)}.sterfive-info-text{color:#777;font-size:12px;margin-left:10px;margin-top:5px}.custom-checkbox{cursor:pointer;display:inline-block;font-family:FontAwesome;font-size:16px;font-weight:900;margin-right:10px;text-align:center;width:1em}.custom-checkbox.unchecked:before{content:"\f096"}.custom-checkbox.checked:before{content:"\f046"}.validate-cancel-buttons{background-color:#fff;position:sticky;right:0;top:0;z-index:1001}.cancel-button,.validate-button{cursor:pointer;font-size:16px;margin:5px}.sterfive-combo-box .sterfive-dropdown{position:relative}.floating-buttons{position:fixed;z-index:1003} /*# sourceMappingURL=OpcUa-Client2-Monitor.css.map */ </style> <!-- HTML CONTENTS --> <script type="text/x-red" data-template-name="OpcUa-Client2-Monitor"> <style> .my-checkbox-label { width: fit-content !important; cursor: pointer; user-select: none; } .my-checkbox-input { visibility: hidden; } .my-checkbox-mark { margin-left: 0px; font-family: "FontAwesome"; font-size: 24px; } .my-checkbox-input:checked ~ .my-checkbox-mark::before { content: "\f205"; /* fa-toggle-on */ } .my-checkbox-input:not(checked) ~ .my-checkbox-mark::before { content: "\f204"; /* fa-toggle-off */ } </style> <!-- name --> <div class="form-row"> <label for="node-input-name"><i class="icon-tasks"></i>Name</label> <input type="text" id="node-input-name" placeholder="enter the friendly name of the node" /> </div> <!-- endpoint --> <div class="form-row"> <label for="node-input-endpoint"><i class="icon-tasks"></i> Endpoint</label> <input type="text" id="node-input-endpoint" placeholder="opc.tcp://localhost:4334" /> </div> <!-- Subscription selector --> <div class="form-row"> <label for="node-input-subscription"><i class="fa fa-rss"></i>&nbsp;subscription</label> <select type="text" id="node-input-subscription" style="width: 250px"></select> </div> <!-- Start Immediately --> <div class="form-row" style="display: flex; align-items: center; width: 250px"> <i class="fa fa-play"></i> &nbsp;<span>start immediately</span> <label for="node-input-startImmediately" style="margin-left: auto; display: flex; align-items: center"> <input type="checkbox" checked class="my-checkbox-input" id="node-input-startImmediately" /> <span class="my-checkbox-mark"></span> </label> </div> <!-- node to monitor --> <div class="form-row"> <label for="node-input-nodeId" style="width: 100%"><i class="fa fa-id-card"></i><span>&nbsp;NodeId</span></label> <input type="text" id="node-input-nodeId" placeholder="ns=2;s=Variable1 or empty" /> </div> <!-- samplingInterval --> <div class="form-row"> <label for="node-input-samplingInterval" style="width: 150px"> <i class="fa fa-hourglass"></i> <span>Sampling Interval</span> </label> <input type="number" step="1" min="-1" max="65535" id="node-input-samplingInterval" placeholder="number" style="max-width: 80px" /> <select id="node-input-timeUnit" style="max-width: 120px"> <option value="ms"><span>millisecond(s)</span></option> <option value="s"><span>second(s)</span></option> <option value="m"><span>minute(s)</span></option> <option value="h"><span>hour(s)</span></option> </select> </div> <!-- queueSize --> <div class="form-row"> <label for="node-input-requestedQueueSize" style="width: 150px"> <i class="fa fa-tag"></i> <span>queue size</span> </label> <input type="number" style="width: 90px" step="1" min="0" max="65535" id="node-input-requestedQueueSize" placeholder="queue size" /> </div> <!-- queueSize AutoButton --> <!-- discard oldest --> <div class="form-row" style="display: flex; align-items: center; width: 250px"> <i class="fa fa-play"></i> &nbsp;<span>discard oldest</span> <label for="node-input-discardOldest" style="margin-left: auto; display: flex; align-items: center"> <input type="checkbox" checked class="my-checkbox-input" id="node-input-discardOldest" /> <span class="my-checkbox-mark"></span> </label> </div> <!-- deadBandType --> <div class="form-row"> <label for="node-input-deadbandlabel" style="width: 150px"> <i class="fa fa-check-square"></i> <span>Deadband type</span> </label> <input type="number" id="node-input-deadbandValue" step="0.01" min="0" max="100000" placeholder="number" style="max-width: 80px" /> <select id="node-input-deadbandType" style="max-width: 120px"> <option value="">Not use</option> <option value="a">Absolute</option> <option value="p">Percent</option> </select> </div> <div class="form-row"> <!-- DataChangeTrigger enum 1 is is the default setting if no filter is set. !--> <label for="node-input-trigger">trigger</label> <select type="text" id="node-input-trigger" style="width: 250px"> <option value="0">Status</option> <option selected value="1">StatusValue</option> <option value="2">StatusValueTimestamp</option> </select> </div> <div class="form-row"> <label for="node-input-outputType">Output type</label> <select type="text" id="node-input-outputType" style="width: 250px"> <option selected value="Value">Value</option> <option value="DataValue">DataValue</option> <option value="Variant">Variant</option> <option value="DataValueReversible">DataValueReversible</option> <option value="StatusCode">StatusCode</option> </select> </div> </script> <!-- MARKDOWN CONTENTS --> <script type="text/markdown" data-help-name="OpcUa-Client2-Monitor"> ## Monitor OPC UA Variables The monitored items are the nodes that are monitored by the client. The client will send a notification when the value of the node changes. You can either specify a nodeId to monitor directly on this node, or inject or more node-id. The output message will contain the current value of the monitored nodes. This node is configured once and then can be forgotten, it will send messages whenever the conditions are met. ### Properties - **Name**: The name of the node - **Endpoint**: The predefined endpoint of the OPC UA server to connect to. - **Subscription** : The subscription to use for monitoring the nodes, Subscriptions are defined in the "Endpoint" node. The frequence at which the server will send a batch of notification is handled by the subscription is specified in this subscription. A subscription can typically hold a large number of monitored items. This node manages a single or a subset of the monitored items handled by the selected subscription. - **Start Immediately**: indicates if the subscription should be launch immediately when the flow starts: If checked, the subscription will start immediately, by automatically monitoring the nodes specified in NodeId field. If unchecked, the subscription will start when the first message arrives, with the nodeId property in the payload (see belows) or with the nodeId property specified in the node configuration. If you want to monitor an array of UAVariable or a JSON structure, you need to unset the `start immediatly' node, clear the NodeId field and inject the NodeId you want to monitor using one of the technics decribed below. - **Sample Interval**: The interval in milliseconds to use for monitoring the nodes. This is the interval at which the client will request the server to sample variable changes. (default: 1000 ms) Sampling is done by the OPC UA Server itself on behalf the cliient. The OPC UA server will only submit data change notificiation if the UAVariable dataValue has actually changed, as [per OPC UA specificiations](https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.1). - **Queue Size**: The maximum number of notifications that the client will store in the queue. If the queue is full, the oldest notification will be removed. (default: 1000) [see OPC UA Specification](https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.1.5) - **Discard Oldest**: If the queue is full, the oldest notification will be removed. If unchecked, the newest notification will be removed. (default: true) - **Deadband**: The deadband value to use for monitoring the nodes. - **Not Use** : No dead band filter - **Absolute** : The deadband is an absolute value. The server will send a notification if the value changes by more than the deadband value. - **Percent** : The deadband is a percentage value. The server will send a notification if the value changes by more than the deadband percentage value. The monitored Value must have a EURange property so that the actual deadband value can be calculated. ### monitoring a single OPC UA node specified in the node configuration simply specify the nodeId of the node you want to monitor in the nodeId field. ### monitoring a single OPC UA node injected in the node If you want to inject the nodeId, you have to unset the "start immediately" checkbox. The subscription will start when the first message arrives, with the nodeId property in the payload. ### monitoring an array of OPC UA nodes ### monitoring a arbitrary structure of OPC UA nodes you can also inject an object with a structure of nodeIds. The output message will contain the same structure with the current values. for instances: ```json { "nodeId1": "ns=1;s=MyVariable1", "nodeId2": "ns=1;s=MyVariable2", "sub": { "nodeId3": "ns=1;s=MyVariable3" } } ``` will be automatically monitoring 3 nodes and produce the following ouput when either node value changes: ```json { "nodeId1": 123, "nodeId2": 456, "sub": { "nodeId3": 789 } } ``` ```json { "nodeId1": { "value": 123, "statusCode": "Good", "sourceTimestamp": "2020-01-01T00:00:00.000Z" }, "nodeId2": { "value": 456, "statusCode": "Good", "sourceTimestamp": "2020-01-01T00:00:00.000Z" }, "sub": { "nodeId3": { "value": 789, "statusCode": "Good", "sourceTimestamp": "2020-01-01T00:00:00.000Z" } } } ``` Note: A JSON structure with nodeId or browse path that represent a complex OPC UA UA can easily be created with the Explore. (see OpcUa-Explore node and monitoring a OPC UA subtree below) Interval is setting for Client `requestedPublishingInterval` (default: 1000 ms). Input `msg.payload.samplingInterval` can bring a specific sampling Interval for monitored Items/Events in the subscription. ### monitoring a OPC UA subtree If you want to monitor a subtree of a OPC UA server, you can conveniently redirect the output of a "OpcUa Explore Node" (with outputType=NodeID) node to the input of this node. As a result, all nodes of the explored subtree will be monitored. and the payload of the output message of this node will contain the exact structure of the subtree with the current values. A new message is sent when the value of one of the nodes changes. ## Tips & Notes - A OPC UA Monitiored Item only notify change if a change has occured. - You will always received a initial change notificiation when the monitored item is originally created. ### msg properties - `msg.outputType`: `undefined | "Value" | "DataValue"` - `msg.samplingInterval`: sampling interval in miliseconds or 0 to use minimumSampling interval of the corresponding monitored variable. When specified, it will override the node configuration for the sampling interval. - `msg.deadbandType`: `undefined | "None" | "Absolute" | "Percent"` When specified, it will override the node configuration for the deadband type. - `msg.deadbandValue`: deadband value to use for monitoring the nodes. - `msg.queueSize`: `<positive number>`The maximum number of notifications that the client will store in the queue. If the queue is full, the oldest notification will be removed. (default: 1000) [see OPC UA Specification](https://reference.opcfoundation.org/Core/Part4/v105/docs/ (default: 1) - `msg.discardOldest`: `true|false` If the queue is full, the oldest notification will be removed. If unchecked, the newest notification will be removed. (default: false) </script> <!-- END OF CONTENTS --> <script type="text/javascript"> function _0x31d3(_0x5b5899,_0x5ae316){_0x5b5899=_0x5b5899-0x15d;const _0x21280e=_0x2128();let _0x31d3dc=_0x21280e[_0x5b5899];return _0x31d3dc;}function _0x2128(){const _0x232a86=['bannerCss','text','PROFESSIONAL','keydown','aliasedBrowsePath','<button\x20type=\x22button\x22\x20tabindex=\x220\x22></button>','#fff3cd','ns=0;i=40','requestedNodeId','#999','appendTo','hide','fa-cog','nodeId','/checkNodeId','30px','statusText','remove','after','json','opacity\x200.2s','<a\x20href=\x22#\x22></a>','Both','replaceWith','reset','sort','15px','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20licence\x20banner','_delay','icon','background-color\x200.2s','.spinner','node_label_italic','Inverse','message','right','/images/small-sterfive.png','browseName','<span>','<ul\x20class=\x22sterfive-tree\x22></ul>','loading','browsePath','VariableType','typeDefinition','#ccc','prop','$inputGroup','throw','addEventListener','/config#buy','stopPropagation',':focus','opcua-for-node-red-fix-me','Organizes','EXPIRED','type','<li><i\x20class=\x22fa\x20fa-error\x22\x20style=\x22color:red;\x22></i>no\x20reference\x20!<ul></ul></li>','mask-image:\x20url(','toggleClass','<div>','relativePath','expandable','references','<p>','catch','View','HasTypeDefinition','NodeClass','3AAqnAg','221817vdaBpk','mouseleave','0\x202px\x208px\x20rgba(0,0,0,0.1)','done','500','18px','isTypeRef','licenceInfo','fetching\x20failed\x20with\x20error','$input','$verifyBtn','licence-prof-expired-banner','position','OpcUa-Client2-Monitor','<button>','rgba(61,\x2060,\x204,\x200.525)','_blank','httpNodeRoot\x20missing\x20trailing\x20slash','Objects','removeEventListener','10px\x2020px','enter\x20a\x20nodeId\x20or\x20a\x20browsePath\x20','nodeBrowser','startImmediately','$selectTrigger',';\x22></i>\x20','pointer-events','Unknown\x20Product','fa-sliders','already\x20loading','<img>','16px','/licenceInfo','empty','12px\x2050px\x2012px\x2015px','rgba(0,\x200,\x200,\x200.05)','#e9ecef','dblclick','endpointNode','indexOf','then','animate','grey','sterfive-combo-box','<i\x20class=\x22fa\x20fa-bookmark\x22/><i\x20class=\x22fa\x20fa-fighter-jet\x22/>&nbsp;','nodes','ns=0;i=47','../../icons/opcuanodeLogo.png','removeClass','filter','1.6','sterfive-input-group','error','space-between','monitor','59586Fkqvqm','20px','next','slice','Failed\x20to\x20check\x20licence\x20status:','buttonHoverCss','body','<div/>','<li\x20key=\x22','translateY(-50%)','#856404','expandable\x20expanded','open','widget','BrowseName','!!failure!!','DodgerBlue','180px','bold','aliasedNodeId',':visible','data','blur(10px)','subscriptions','settings','/walk-backward','<i\x20class=\x22fa\x20fa-font\x22/i>\x20','msg','target','preventDefault','$combo','><i\x20class=\x22fa\x20','blur(20px)','1294192GcxjoV','#495057','120aBdtBE','fa-list-alt','#f44336','css','isSelectable','$tree','httpNodeRoot','label','OpcUa-Endpoint2','<i\x20class=\x22red-ui-typedInput-icon\x20fa\x20fa-caret-down\x22></i>','nsuNodeID','subscription','$dropdown','Get\x20a\x20license\x20now','suppressed','/Server/ServerStatus/CurrentTime','bp_aliased','POST','64px','browseResult','fetched','height','left','displayName','/support-frame.html','HasChild','namespaceAliases','14px','opts','currentParent','<i\x20class=\x22fa\x20fa-tag\x22/>1\x20&nbsp;\x20','browse\x20path:\x20','node','replace','rgba(','reference','Your\x20<strong>Professional\x20License</strong>\x20has\x20expired.\x20Please\x20renew\x20your\x20license\x20to\x20ensure\x20continued\x20access\x20to\x20support\x20and\x20updates.','#node-input-inputs','213813yneFwI','backgroundColor','<div\x20class=\x22spinner\x22></div>','SandyBrown','Upgrade','html','<button\x20title=\x22open\x20OPCUA\x20AddressSpace\x20Browser\x22><i\x20class=\x22fa\x20fa-sitemap\x22></i></button>','toggle','pointer','#node-input-startImmediately','50%','#node-input-nodeId','selected','children','<h2>','err','12px','warn','stringify','expanded','scrollTop','element','5705337NAefqR','#C0DEED','ns=0;i=61','Method','6px\x2012px','location','opcua','focus','<option/>','auto','Forward','mouseenter','li[key=\x22','CadetBlue','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20licence\x20overlay','name','toISOString','center','relative','I\x20accept\x20to\x20switch\x20to\x20the\x20free\x20version\x20(limited\x20features)','application/json','500px','first','blur','buttonCss','show','change','function','msg.','width=1200,height=800','You\x20are\x20using\x20the\x20<strong>Free\x20Version</strong>\x20with\x20limited\x20functionality.\x20','status','trigger','<li>error\x20','true','\x22]\x20is\x20not\x20set,\x20using\x20default\x20API\x20namespace','closest','parentNode','50px','underline','OPCUA\x20Client\x20Monitor\x20','nsu\x20nodeId:\x20','licence-activation-overlay','already\x20fetched','150px','Invalid','2px\x20solid\x20#ffc107','value','10px','$uiSelect','licence-freemium-banner','li\x20>\x20.tree-text','log','8px','href','match','</span>','ReferenceType','startsWith','<span\x20class=\x22red-ui-typedInput-type-label\x22></span>','ns=0;i=45','url','TRIAL','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.3)','find','apply','checked','now','assign','i=61','DarkOrange','messageHtml','input[type=\x22checkbox\x22]','<i\x20class=\x22fa\x20fa-bookmark\x22/>&nbsp;\x20','nodeId_nsu','150ZwIlqN','100%','multiple','40px','bannerClass','.tree-text:first','<i\x20class=\x22fa\x20fa-envelope-open-o\x22/>','TypeDefinition','$selectLabel','none','each','addClass','node-input-startImmediately','val','ns=0;i=34','DisplayName','fadeOut','pageY','nsu','#f8d7da','forEach','append','14xGnqwg','opcUaEndpoint2Config','fa-object-group','[value=\x27','HasProperty','ns=0;i=35','placeholder','BrowsePath','HasComponent','IsForward','</strong>.\x20','mousedown.red-ui-typedInput-focus-block','offset','Unspecified','Your\x20trial\x20license\x20expires\x20in\x20<strong>','Aliased\x20NodeId','red-ui-typedInput-icon','16732lVngoJ','#dc3545','Value\x20is\x20not\x20verified','resolveParentNode','has-node-help-widget','absolute','all\x200.2s','inputs','hasClass','disarmClick','click','options','white','endsWith','$menu','push','top','flex','selectedMenuItem','endpoint','toString','Aliased\x20Browse\x20Path','length','__parentNode','setItem','24px','Get\x20Support\x20&\x20Activate\x20License','mousedown','keyCode',');\x20-webkit-mask-image:\x20url(','mode','aliased\x20browsePath:\x20','_showTypeMenu','.red-ui-tray-content','#node-input-endpoint','prependTo','FAILED','nodeClass','_hideMenu','#1976D2','tabindex','Variable','join','nodeId_aliased','.red-ui-tray-body','setMode','#2196F3','buttonText','$toggleTreeBtn','\x22}><span\x20class=\x22tree-text\x22\x20title=','referenceTypeId','DataType','transparent','sterfive-dropdown','fa-text-width','>&nbsp;\x20','title','15px\x2030px','sterfive-typedInput-options\x20sterfive-online-menu','wrap','docs/','<a\x20href=\x22#\x22\x20target=\x22sterfive_opcua_nodered_doc\x22\x20title=\x22Click\x20to\x20visit\x20documentation\x22\x20style=\x22position:absolute;\x20top:10px;\x20right:10px;\x20z-index:1000;\x20color:#0066cc;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<i\x20class=\x22fa\x20fa-question-circle\x22\x20style=\x22font-size:18px;\x22></i>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</a>','callback','HasSubtype','<a>','node\x20id\x20or\x20\x20browse\x20path\x20comes\x20from\x20injected\x20msg\x20parameter','messageCss','ObjectType','231208EjPPPh','0.0.0','#node-input-subscription','/browse','Good','NodeId','#721c24','1px\x20solid\x20#ced4da','statusCode','\x20day','5px','&times;','attr','_createMenu','red-ui-typedInput-focus','10px\x2015px','opacity','</li>','getTime','bp_indexed','Object','$info','pageX'];_0x2128=function(){return _0x232a86;};return _0x2128();}(function(_0x258688,_0xd88ade){const _0x4eee3d=_0x31d3,_0x1f9016=_0x258688();while(!![]){try{const _0x4037ee=parseInt(_0x4eee3d(0x18e))/0x1+-parseInt(_0x4eee3d(0x2da))/0x2*(-parseInt(_0x4eee3d(0x18d))/0x3)+-parseInt(_0x4eee3d(0x296))/0x4*(parseInt(_0x4eee3d(0x26f))/0x5)+parseInt(_0x4eee3d(0x1c5))/0x6*(parseInt(_0x4eee3d(0x285))/0x7)+parseInt(_0x4eee3d(0x1e6))/0x8+-parseInt(_0x4eee3d(0x20e))/0x9*(-parseInt(_0x4eee3d(0x1e8))/0xa)+-parseInt(_0x4eee3d(0x224))/0xb;if(_0x4037ee===_0xd88ade)break;else _0x1f9016['push'](_0x1f9016['shift']());}catch(_0xba184b){_0x1f9016['push'](_0x1f9016['shift']());}}}(_0x2128,0x270f0),(function(){'use strict';const _0x4043d9=_0x31d3;function _0x35df50(_0x2a278a,_0xb540aa,_0x5b8540,_0x198d19){function _0x3eb315(_0x511fc4){return _0x511fc4 instanceof _0x5b8540?_0x511fc4:new _0x5b8540(function(_0xe5716){_0xe5716(_0x511fc4);});}return new(_0x5b8540||(_0x5b8540=Promise))(function(_0x56a8bc,_0x1ef606){const _0x5d8638=_0x31d3;function _0x165039(_0x3ba3f9){try{_0x403a14(_0x198d19['next'](_0x3ba3f9));}catch(_0x111434){_0x1ef606(_0x111434);}}function _0x45da15(_0x5940cc){const _0x41a23a=_0x31d3;try{_0x403a14(_0x198d19[_0x41a23a(0x178)](_0x5940cc));}catch(_0x296523){_0x1ef606(_0x296523);}}function _0x403a14(_0x3d0117){const _0x1163fe=_0x31d3;_0x3d0117[_0x1163fe(0x191)]?_0x56a8bc(_0x3d0117[_0x1163fe(0x253)]):_0x3eb315(_0x3d0117[_0x1163fe(0x253)])[_0x1163fe(0x1b6)](_0x165039,_0x45da15);}_0x403a14((_0x198d19=_0x198d19[_0x5d8638(0x265)](_0x2a278a,_0xb540aa||[]))[_0x5d8638(0x1c7)]());});}typeof SuppressedError==='function'?SuppressedError:function(_0x40a60f,_0x146955,_0x37debe){const _0x411080=_0x31d3;var _0x2fcd6a=new Error(_0x37debe);return _0x2fcd6a[_0x411080(0x233)]='SuppressedError',_0x2fcd6a[_0x411080(0x1c2)]=_0x40a60f,_0x2fcd6a[_0x411080(0x1f6)]=_0x146955,_0x2fcd6a;};const _0x5c2797=_0x4043d9(0x28a),_0xf2707b=_0x4043d9(0x226),_0x34cc31=_0x4043d9(0x1bc),_0x2b4214='ns=0;i=46',_0x579ecc=_0x4043d9(0x27d),_0x2c77f7=_0x4043d9(0x260),_0x7173d1=_0x4043d9(0x2f8);var _0x2bb166;(function(_0x1b751c){const _0x318480=_0x4043d9;_0x1b751c[_0x1b751c[_0x318480(0x22e)]=0x0]='Forward',_0x1b751c[_0x1b751c[_0x318480(0x16a)]=0x1]=_0x318480(0x16a),_0x1b751c[_0x1b751c[_0x318480(0x15f)]=0x2]='Both',_0x1b751c[_0x1b751c['Invalid']=0x3]=_0x318480(0x251);}(_0x2bb166||(_0x2bb166={})));var _0x3a8811;(function(_0x2ac0b4){const _0x24e948=_0x4043d9;_0x2ac0b4[_0x2ac0b4[_0x24e948(0x292)]=0x0]='Unspecified',_0x2ac0b4[_0x2ac0b4[_0x24e948(0x2ee)]=0x1]='Object',_0x2ac0b4[_0x2ac0b4[_0x24e948(0x2bf)]=0x2]=_0x24e948(0x2bf),_0x2ac0b4[_0x2ac0b4[_0x24e948(0x227)]=0x4]=_0x24e948(0x227),_0x2ac0b4[_0x2ac0b4[_0x24e948(0x2d9)]=0x8]='ObjectType',_0x2ac0b4[_0x2ac0b4['VariableType']=0x10]=_0x24e948(0x173),_0x2ac0b4[_0x2ac0b4[_0x24e948(0x25d)]=0x20]='ReferenceType',_0x2ac0b4[_0x2ac0b4[_0x24e948(0x2c9)]=0x40]=_0x24e948(0x2c9),_0x2ac0b4[_0x2ac0b4[_0x24e948(0x18a)]=0x80]=_0x24e948(0x18a);}(_0x3a8811||(_0x3a8811={})));var _0x416d09;(function(_0x340fdf){const _0x2bf29d=_0x4043d9;_0x340fdf[_0x340fdf[_0x2bf29d(0x2ee)]=0x1]=_0x2bf29d(0x2ee),_0x340fdf[_0x340fdf[_0x2bf29d(0x2bf)]=0x2]=_0x2bf29d(0x2bf),_0x340fdf[_0x340fdf['Method']=0x4]=_0x2bf29d(0x227),_0x340fdf[_0x340fdf[_0x2bf29d(0x2d9)]=0x8]='ObjectType',_0x340fdf[_0x340fdf[_0x2bf29d(0x173)]=0x10]=_0x2bf29d(0x173),_0x340fdf[_0x340fdf['ReferenceType']=0x20]=_0x2bf29d(0x25d),_0x340fdf[_0x340fdf[_0x2bf29d(0x2c9)]=0x40]=_0x2bf29d(0x2c9),_0x340fdf[_0x340fdf[_0x2bf29d(0x18a)]=0x80]='View';}(_0x416d09||(_0x416d09={})));var _0x54ece3;(function(_0x51a337){const _0x279846=_0x4043d9;_0x51a337[_0x51a337[_0x279846(0x25d)]=0x1]=_0x279846(0x25d),_0x51a337[_0x51a337[_0x279846(0x28e)]=0x2]=_0x279846(0x28e),_0x51a337[_0x51a337[_0x279846(0x18c)]=0x4]=_0x279846(0x18c),_0x51a337[_0x51a337[_0x279846(0x1d3)]=0x8]=_0x279846(0x1d3),_0x51a337[_0x51a337['DisplayName']=0x10]=_0x279846(0x27e),_0x51a337[_0x51a337['TypeDefinition']=0x20]=_0x279846(0x276);}(_0x54ece3||(_0x54ece3={})));function _0x46d45c(_0x46a7ff){const _0x112f06=_0x4043d9;switch(_0x46a7ff){case _0x112f06(0x17e):return _0x5c2797;case _0x112f06(0x289):return _0x2b4214;case _0x112f06(0x28d):return _0x34cc31;case _0x112f06(0x201):return _0x579ecc;case _0x112f06(0x2d5):return _0x2c77f7;case _0x112f06(0x18b):return _0x7173d1;}}const _0x3088c3=_0x441579=>{const _0xc9a41e=_0x4043d9;switch(_0x441579[_0xc9a41e(0x2bb)]){case _0xc9a41e(0x2ee):if(_0x441579[_0xc9a41e(0x2c8)]===_0x5c2797);if(_0x441579[_0xc9a41e(0x174)]===_0xf2707b||_0x441579[_0xc9a41e(0x2c8)]===_0xc9a41e(0x269))return{'icon':'fa-folder','color':_0xc9a41e(0x19d)};return{'icon':_0xc9a41e(0x287),'color':'SeaGreen'};case _0xc9a41e(0x2bf):if(_0x441579['referenceTypeId']===_0x34cc31)return{'icon':_0xc9a41e(0x1e9),'color':'SteelBlue'};else return _0x441579['referenceTypeId']===_0x2b4214?{'icon':_0xc9a41e(0x1e9),'color':_0xc9a41e(0x1d5)}:{'icon':_0xc9a41e(0x1e9),'color':'CadetBlue'};case _0xc9a41e(0x227):return{'icon':_0xc9a41e(0x2fd),'color':_0xc9a41e(0x211)};case _0xc9a41e(0x2d9):return{'icon':_0xc9a41e(0x287),'color':_0xc9a41e(0x26a)};case'VariableType':return{'icon':_0xc9a41e(0x1aa),'color':_0xc9a41e(0x26a)};case _0xc9a41e(0x2c9):return{'icon':_0xc9a41e(0x2cc),'color':_0xc9a41e(0x231)};}return{'icon':'fa-question','color':_0xc9a41e(0x1b8)};};function _0xdfc9f3(_0x56492c){const _0x33429f=_0x4043d9;!_0x56492c[_0x33429f(0x25e)]('/')&&(_0x56492c='/'+_0x56492c);const _0x543901=_0x33429f(0x286);let _0x2dba95=RED[_0x33429f(0x1dd)][_0x543901];!_0x2dba95&&(console[_0x33429f(0x21f)]('RED.settings[\x22'+_0x543901+_0x33429f(0x247)),_0x2dba95=_0x33429f(0x17d));!RED[_0x33429f(0x1dd)][_0x33429f(0x1ee)][_0x33429f(0x2a3)]('/')&&console['log'](_0x33429f(0x19f));const _0x35fc2b=_0x3dc2ae(RED['settings'][_0x33429f(0x1ee)]+_0x2dba95+_0x56492c);return console[_0x33429f(0x258)]({'location':window[_0x33429f(0x229)]['pathname'],'apiPath':_0x56492c,'API_NAMESPACE':_0x2dba95,'result':_0x35fc2b}),_0x35fc2b;}function _0x3dc2ae(_0x4ec018){const _0x5cbe4e=_0x4043d9;return _0x4ec018['startsWith']('/')?_0x4ec018[_0x5cbe4e(0x1c8)](0x1):_0x4ec018;}const _0x5d8358=(_0x1980b5,_0x39f93c,_0x2a5f06)=>_0x35df50(void 0x0,[_0x1980b5,_0x39f93c,_0x2a5f06],void 0x0,function*({endpointNode:_0x229a3c,endpoint:_0x361a70},_0x2efe60,_0x160a9b){const _0x588108=_0x4043d9,_0xe70c31=Object[_0x588108(0x268)](Object[_0x588108(0x268)]({},_0x160a9b),{'nodeId':_0x2efe60,'resultMask':0x3f}),_0x16fc50=_0xdfc9f3(_0x588108(0x2dd)),_0xf0cd86=yield fetch(_0x16fc50,{'method':'POST','body':JSON['stringify']({'endpointNode':_0x229a3c,'endpoint':_0x361a70,'browseDescription':_0xe70c31}),'headers':{'Content-Type':_0x588108(0x238)}});if(_0xf0cd86[_0x588108(0x243)]!==0xc8)return console[_0x588108(0x258)](_0x588108(0x196),_0xf0cd86[_0x588108(0x243)],_0xf0cd86[_0x588108(0x301)]),{'references':[]};const _0x34f146=yield _0xf0cd86[_0x588108(0x304)](),_0x321963=_0x34f146[_0x588108(0x1fb)][_0x588108(0x187)]||[];return{'references':_0x321963};}),_0xdfd03a={'referenceTypeId':_0x46d45c(_0x4043d9(0x201)),'includeSubtypes':!![],'browseDirection':_0x2bb166[_0x4043d9(0x22e)],'nodeClassMask':_0x3a8811[_0x4043d9(0x2bf)]|_0x3a8811[_0x4043d9(0x2ee)]|_0x3a8811['Method'],'resultMask':0x3f},_0x3ce887={'referenceTypeId':_0x46d45c(_0x4043d9(0x17e)),'includeSubtypes':!![],'browseDirection':_0x2bb166[_0x4043d9(0x22e)],'nodeClassMask':_0x3a8811[_0x4043d9(0x2bf)]|_0x3a8811[_0x4043d9(0x2ee)]|_0x3a8811[_0x4043d9(0x227)],'resultMask':0x3f},_0x118c16=(_0x47c065,_0x3c4d44)=>_0x35df50(void 0x0,[_0x47c065,_0x3c4d44],void 0x0,function*({endpointNode:_0x63fa58,endpoint:_0xe2a178},{nodeId:_0x4f1810,rootNodeId:_0x2f3fc2,isType:_0x6e98de}){const _0x3bb8e3=_0x4043d9,_0x1b84c1=_0xdfc9f3(_0x3bb8e3(0x1de)),_0x25a086=yield fetch(_0x1b84c1,{'method':_0x3bb8e3(0x1f9),'body':JSON['stringify']({'endpointNode':_0x63fa58,'endpoint':_0xe2a178,'nodeId':_0x4f1810,'rootNodeId':_0x2f3fc2,'isType':_0x6e98de}),'headers':{'Content-Type':_0x3bb8e3(0x238)}});if(_0x25a086['status']!==0xc8)return null;const _0x3aad04=yield _0x25a086['json']();return _0x3aad04['browsePath'];}),_0x36d8e1=(_0x5826e4,_0x3829f2)=>{const _0x12f2f5=_0x4043d9;if(_0x5826e4['statusCode']!==_0x12f2f5(0x2de))return _0x5826e4[_0x12f2f5(0x2f9)];switch(_0x3829f2){case'browsePath':return _0x5826e4[_0x12f2f5(0x2ed)];case _0x12f2f5(0x2f5):return _0x5826e4[_0x12f2f5(0x1f8)]||_0x5826e4[_0x12f2f5(0x2ed)];case _0x12f2f5(0x1d8):return _0x5826e4['nodeId_aliased']||_0x5826e4[_0x12f2f5(0x26e)];case'nsuNodeID':return _0x5826e4[_0x12f2f5(0x26e)];default:case _0x12f2f5(0x2fe):return _0x5826e4[_0x12f2f5(0x2fe)];}},_0x2e4a24=_0x348cfb=>{const _0x205552=_0x4043d9;if(_0x348cfb[_0x205552(0x2e2)]!==_0x205552(0x2de))return'statusCode:\x20'+_0x348cfb[_0x205552(0x2e2)];else{let _0x104d5b=[];return _0x104d5b[_0x205552(0x2a5)]('nodeId:\x20'+_0x348cfb[_0x205552(0x2fe)]),_0x104d5b[_0x205552(0x2a5)](_0x205552(0x207)+_0x348cfb['bp_indexed']),_0x104d5b[_0x205552(0x2a5)]('node\x20class:\x20'+_0x3a8811[_0x348cfb[_0x205552(0x2bb)]]),_0x348cfb[_0x205552(0x26e)]&&_0x104d5b[_0x205552(0x2a5)](_0x205552(0x24d)+_0x348cfb['nodeId_nsu']),_0x348cfb['nodeId_aliased']&&_0x104d5b[_0x205552(0x2a5)]('aliased\x20NodeId:\x20'+_0x348cfb[_0x205552(0x2c1)]),_0x348cfb[_0x205552(0x2ed)]&&_0x104d5b[_0x205552(0x2a5)](_0x205552(0x2b5)+_0x348cfb[_0x205552(0x1f8)]),_0x104d5b[_0x205552(0x2c0)]('\x0a');}};function _0x43f0ec(_0x2be892){const _0x50394d=_0x4043d9;if(_0x2be892[_0x50394d(0x25b)](/^nsu=/))return'nsuNodeID';if(_0x2be892['match'](/^(ns=.*;)?(i|b|s|g)=/))return'nodeId';if(_0x2be892['match'](/^nsa=/))return _0x50394d(0x1d8);if(_0x2be892[_0x50394d(0x25b)](/^(\/|\.)[0-9]+:/))return _0x50394d(0x172);if(_0x2be892[_0x50394d(0x25b)](/^(\/|\.).*:/))return _0x50394d(0x172);}function _0x49e6b8(_0x13cc22){const _0x502568=_0x4043d9,_0x50313f=_0x43f0ec(_0x13cc22);switch(_0x50313f){case'nodeId':return'n';case _0x502568(0x1d8):return'na';case'nsuNodeID':return _0x502568(0x281);case'browsePath':return'b';case _0x502568(0x2f5):return'ab';default:return't';}}function _0x564dd6(_0x5435ba){const _0x58ca8e=_0x4043d9;let _0x438776;switch(_0x5435ba){case'n':_0x438776=_0x58ca8e(0x2fe);break;case'na':_0x438776='aliasedNodeId';break;case _0x58ca8e(0x281):_0x438776=_0x58ca8e(0x1f2);break;case'b':_0x438776=_0x58ca8e(0x172);break;case'ab':_0x438776=_0x58ca8e(0x2f5);break;}return _0x438776;}function _0x21e48c(_0x89c60){const _0x1dd265=_0x4043d9;switch(_0x89c60){case'nodeId':return'n';case _0x1dd265(0x1d8):return'na';case _0x1dd265(0x1f2):return _0x1dd265(0x281);case _0x1dd265(0x172):return'b';case'aliasedBrowsePath':return'ab';default:return't';}}const _0x3131dd=(_0x3249b5,_0x5ca58b)=>_0x35df50(void 0x0,[_0x3249b5,_0x5ca58b],void 0x0,function*({endpointNode:_0x781cd7,endpoint:_0x184a4e},_0x2cee66){const _0x271778=_0x4043d9,_0x4b628f=_0xdfc9f3(_0x271778(0x2ff)),_0x19fada=_0x781cd7['id'],_0x37ffe7=RED['nodes']['node'](_0x19fada);console[_0x271778(0x258)](_0x37ffe7['namespaceAliases']),_0x37ffe7[_0x271778(0x202)];const _0x3eff68=_0x781cd7[_0x271778(0x202)],_0x3d136d=yield fetch(_0x4b628f,{'method':_0x271778(0x1f9),'body':JSON[_0x271778(0x220)]({'endpointNode':_0x781cd7,'endpoint':_0x184a4e,'nodeId':_0x2cee66,'namespaceAliases':_0x3eff68}),'headers':{'Content-Type':'application/json'}}),_0x5324ba=yield _0x3d136d[_0x271778(0x304)]();return{'json':_0x5324ba,'data':_0x3d136d};}),_0x407b3d=(_0x5f39db,_0x162355,_0x183514,_0x2bf24c)=>_0x35df50(void 0x0,[_0x5f39db,_0x162355,_0x183514,_0x2bf24c],void 0x0,function*({endpointNode:_0x172789,endpoint:_0x1abbb7},_0x319c68,_0x2e8d8b,_0x4fedb4){const _0x28a0ee=_0x4043d9,_0x5676d1=_0x2e8d8b['val'](),{json:_0x2ef65b,data:_0x4d704b}=yield _0x3131dd({'endpointNode':_0x172789,'endpoint':_0x1abbb7},_0x5676d1),_0x5e4bc6=(_0x43508d,_0x5efc98)=>{const _0x3ead70=_0x31d3;_0x4fedb4['text'](_0x43508d)[_0x3ead70(0x27a)]('sterfive-info')[_0x3ead70(0x27a)](_0x5efc98),_0x4fedb4['show'](),setTimeout(()=>{const _0xae1330=_0x3ead70;_0x4fedb4[_0xae1330(0x1be)](_0x5efc98),_0x4fedb4[_0xae1330(0x2fc)]();},0xbb8);};if(_0x4d704b[_0x28a0ee(0x243)]!==0xc8)return _0x5e4bc6(_0x28a0ee(0x1d4)+_0x5676d1,'failure'),![];else{if(_0x2ef65b[_0x28a0ee(0x2e2)][_0x28a0ee(0x25b)](/Good/)){const _0x1f7c9d=_0x2e4a24(_0x2ef65b);_0x2e8d8b['attr']('title',_0x1f7c9d);const _0x12882c=_0x36d8e1(_0x2ef65b,_0x319c68);return _0x2e8d8b[_0x28a0ee(0x27c)](_0x12882c),_0x2e8d8b[_0x28a0ee(0x244)](_0x28a0ee(0x23e)),_0x5e4bc6(_0x28a0ee(0x2de),'ok'),!![];}else return _0x2e8d8b[_0x28a0ee(0x27c)](''+_0x5676d1),_0x5e4bc6(_0x2ef65b[_0x28a0ee(0x2e2)]+'\x20'+_0x4d704b[_0x28a0ee(0x301)],'failure'),![];}});function _0x4a80ad(_0x29a33c,_0x104068){return _0x35df50(this,void 0x0,void 0x0,function*(){const _0x5c9c9c=_0x31d3,_0x2b22a3=_0x29a33c[_0x5c9c9c(0x1da)]('value'),_0x5b5759=yield _0x5d8358(_0x104068,_0x2b22a3,_0xdfd03a),_0x9dccd=yield _0x5d8358(_0x104068,_0x2b22a3,_0x3ce887);return{'references':[..._0x5b5759['references'],..._0x9dccd[_0x5c9c9c(0x187)]]};});}const _0x1dcf3c={'referenceTypeId':_0x46d45c(_0x4043d9(0x2d5)),'includeSubtypes':!![],'browseDirection':_0x2bb166[_0x4043d9(0x22e)],'nodeClassMask':_0x3a8811[_0x4043d9(0x25d)]|_0x3a8811[_0x4043d9(0x2d9)]|_0x3a8811['DataType']|_0x3a8811['VariableType'],'resultMask':0x3f};function _0x5998e9(_0x3f4ac5,_0x361f58){return _0x35df50(this,void 0x0,void 0x0,function*(){const _0x41ff31=_0x31d3,_0x144001=_0x3f4ac5[_0x41ff31(0x1da)]('value'),_0x2e8082=yield _0x5d8358(_0x361f58,_0x144001,_0x1dcf3c);return _0x2e8082;});}const _0x167008=_0x2fa9d1=>{const _0x1a4bb7=_0x4043d9;var _0x367230,_0x8b5f1a,_0x2ffb45,_0x2d3eab;if(!_0x2fa9d1||!_0x2fa9d1['nodeId']){const _0x205b47=$(_0x1a4bb7(0x181));return _0x205b47;}const _0x4babec=_0x2fa9d1[_0x1a4bb7(0x2fe)]['toString'](),_0x59eb3a=((_0x367230=_0x2fa9d1[_0x1a4bb7(0x1ff)])===null||_0x367230===void 0x0?void 0x0:_0x367230[_0x1a4bb7(0x2f2)])||((_0x8b5f1a=_0x2fa9d1[_0x1a4bb7(0x16e)])===null||_0x8b5f1a===void 0x0?void 0x0:_0x8b5f1a['name'])||_0x2fa9d1[_0x1a4bb7(0x2fe)][_0x1a4bb7(0x2aa)](),{icon:_0x25550d,color:_0x3ebf58}=_0x3088c3(_0x2fa9d1),_0x577096='('+_0x2fa9d1[_0x1a4bb7(0x2fe)]['toString']()+')\x20'+(((_0x2ffb45=_0x2fa9d1[_0x1a4bb7(0x16e)])===null||_0x2ffb45===void 0x0?void 0x0:_0x2ffb45[_0x1a4bb7(0x233)])||((_0x2d3eab=_0x2fa9d1[_0x1a4bb7(0x1ff)])===null||_0x2d3eab===void 0x0?void 0x0:_0x2d3eab[_0x1a4bb7(0x2f2)])||''),_0x1022f4=$(_0x1a4bb7(0x1cd)+_0x2fa9d1[_0x1a4bb7(0x2fe)][_0x1a4bb7(0x2aa)]()+_0x1a4bb7(0x2c7)+_0x577096+_0x1a4bb7(0x1e4)+_0x25550d+'\x22\x20style=\x22color:'+_0x3ebf58+_0x1a4bb7(0x1a7)+_0x59eb3a+'</span><ul></ul></li>');return _0x1022f4[_0x1a4bb7(0x27a)]('expandable'),_0x1022f4[_0x1a4bb7(0x1da)](_0x1a4bb7(0x253),_0x4babec),_0x1022f4[_0x1a4bb7(0x1da)](_0x1a4bb7(0x20b),_0x2fa9d1),_0x1022f4;},_0xc53f14=(_0x2c7356,_0x46be8c)=>{const _0x2fa5af=_0x4043d9;return _0x46be8c[_0x2fa5af(0x264)](_0x2fa5af(0x230)+_0x2c7356+'\x22]');},_0x452703=(_0x487a6d,_0x181d5d)=>{const _0xddc02b=_0x4043d9;_0x487a6d['$tree'][_0xddc02b(0x264)](_0xddc02b(0x257))[_0xddc02b(0x1be)](_0xddc02b(0x21a)),_0x181d5d[_0xddc02b(0x264)](_0xddc02b(0x274))[_0xddc02b(0x27a)](_0xddc02b(0x21a));},_0x5da462=(_0x2dad5e,_0x24e5ed,_0x3ab2c8)=>_0x35df50(void 0x0,void 0x0,void 0x0,function*(){const _0x4767bf=_0x4043d9;let _0x400ed7=_0x3ab2c8[_0x4767bf(0x21b)](':first');_0x24e5ed[_0x4767bf(0x185)]['elements']||[];const _0xcbd721=_0x24e5ed['nodeIds']||[];if(_0xcbd721['length']===0x0)return;for(const _0x2c9396 of _0xcbd721){_0x400ed7[_0x4767bf(0x29e)]('expandable')&&(yield _0x3cd02c(_0x2dad5e,_0x400ed7));const _0x12e24f=_0xc53f14(_0x2c9396,_0x400ed7);if(_0x12e24f[_0x4767bf(0x2ac)]===0x0)return;_0x400ed7=_0x12e24f;}_0x452703(_0x2dad5e,_0x400ed7),_0x3dd068(_0x2dad5e['$dropdown'],_0x400ed7);});function _0x3dd068(_0x51011a,_0x30b5c1){const _0x21edef=_0x4043d9,_0x444baf=_0x30b5c1['position']()[_0x21edef(0x2a6)],_0x4357b5=_0x51011a[_0x21edef(0x222)]();if(_0x4357b5==undefined)return;const _0x11d7ce=_0x4357b5+_0x444baf-_0x51011a[_0x21edef(0x1fd)]()/0x2+_0x30b5c1[_0x21edef(0x1fd)]()/0x2;_0x51011a[_0x21edef(0x1b7)]({'scrollTop':_0x11d7ce},0x1f4);}const _0x173773=(_0x32f7cd,_0x4be59a)=>_0x35df50(void 0x0,void 0x0,void 0x0,function*(){const _0x23af67=_0x4043d9,_0x527885=_0x32f7cd[_0x23af67(0x197)]['val'](),_0x5ce628={'nodeId':_0x527885,'rootNodeId':_0x4be59a[_0x23af67(0x2fe)],'isType':_0x32f7cd[_0x23af67(0x2a1)][_0x23af67(0x194)]||![]},_0x5cd6c3=_0x2e6bbb(_0x32f7cd),_0x42dbce=yield _0x118c16(_0x5cd6c3,_0x5ce628);if(!_0x42dbce)return;yield _0x5da462(_0x32f7cd,_0x42dbce,_0x32f7cd['$tree']);});function _0x5d5221(_0x37f69c,_0x2b8dd9,_0x47ec42,_0xe4fc2d){return _0x35df50(this,void 0x0,void 0x0,function*(){const _0x385b24=_0x31d3;if(_0x2b8dd9[_0x385b24(0x29e)](_0x385b24(0x1fc))){console[_0x385b24(0x258)](_0x385b24(0x24f));return;}if(_0x2b8dd9[_0x385b24(0x29e)](_0x385b24(0x171))){console[_0x385b24(0x258)](_0x385b24(0x1ab));return;}_0x2b8dd9[_0x385b24(0x27a)](_0x385b24(0x171)),_0x2b8dd9[_0x385b24(0x284)](_0x385b24(0x210));try{_0x2b8dd9[_0x385b24(0x21b)]('ul')[_0x385b24(0x1af)]();const {references:_0xa0e6f}=yield _0x47ec42(_0x2b8dd9,_0xe4fc2d);_0xa0e6f[_0x385b24(0x162)]((_0x344c4e,_0x72b0ee)=>{const _0x3ed4b2=_0x385b24;var _0x16f713,_0x3d9455;return(((_0x16f713=_0x344c4e[_0x3ed4b2(0x16e)])===null||_0x16f713===void 0x0?void 0x0:_0x16f713[_0x3ed4b2(0x233)])||'')['localeCompare'](((_0x3d9455=_0x72b0ee['browseName'])===null||_0x3d9455===void 0x0?void 0x0:_0x3d9455[_0x3ed4b2(0x233)])||'');});for(const _0x3f20b2 of _0xa0e6f){if(_0x37f69c[_0x385b24(0x2a1)][_0x385b24(0x1bf)]&&!_0x37f69c[_0x385b24(0x2a1)][_0x385b24(0x1bf)](_0x3f20b2))continue;const _0x12e32f=_0x167008(_0x3f20b2);_0x2b8dd9[_0x385b24(0x21b)]('ul')[_0x385b24(0x284)](_0x12e32f);}_0x2b8dd9[_0x385b24(0x27a)](_0x385b24(0x1fc));}catch(_0xefb214){_0x2b8dd9['children']('ul')[_0x385b24(0x284)](_0x385b24(0x245)+_0xefb214[_0x385b24(0x16b)]+_0x385b24(0x2eb)),console[_0x385b24(0x258)](_0x385b24(0x21d),_0xefb214);}_0x2b8dd9[_0x385b24(0x264)](_0x385b24(0x168))[_0x385b24(0x302)](),_0x2b8dd9[_0x385b24(0x1be)](_0x385b24(0x171));});}function _0x2e6bbb(_0x1d1cb8){const _0xcc7144=_0x4043d9,_0x4de9d4={'endpointNode':typeof _0x1d1cb8['options'][_0xcc7144(0x1b4)]==='function'?_0x1d1cb8['options'][_0xcc7144(0x1b4)]():_0x1d1cb8[_0xcc7144(0x2a1)][_0xcc7144(0x1b4)],'endpoint':typeof _0x1d1cb8[_0xcc7144(0x2a1)][_0xcc7144(0x2a9)]===_0xcc7144(0x23f)?_0x1d1cb8[_0xcc7144(0x2a1)][_0xcc7144(0x2a9)]():_0x1d1cb8['options']['endpoint']};return _0x4de9d4;}function _0x3cd02c(_0x1bd740,_0x3a7299){return _0x35df50(this,void 0x0,void 0x0,function*(){const _0x243290=_0x31d3;if(_0x3a7299[_0x243290(0x29e)](_0x243290(0x1fc))){_0x3a7299['removeClass'](_0x243290(0x186))[_0x243290(0x27a)]('expanded'),_0x3a7299['children']('ul')[_0x243290(0x215)]();return;}const _0xad1e74=_0x2e6bbb(_0x1bd740),_0x57bc1c=!_0x1bd740['options'][_0x243290(0x194)]?_0x4a80ad:_0x5998e9;try{yield _0x5d5221(_0x1bd740,_0x3a7299,_0x57bc1c,_0xad1e74),_0x3a7299[_0x243290(0x1be)]('expandable')[_0x243290(0x27a)](_0x243290(0x221));}catch(_0x42cc75){_0x3a7299[_0x243290(0x1be)](_0x243290(0x186))[_0x243290(0x27a)](_0x243290(0x221)),console['log'](_0x243290(0x1c2),_0x42cc75);}});}const _0x3b1974={'browseName':{'namespaceIndex':0x0,'name':_0x4043d9(0x1a0)},'nodeClass':_0x4043d9(0x2ee),'nodeId':'ns=0;i=85','displayName':{'text':_0x4043d9(0x1a0)},'typeDefinition':_0xf2707b},_0x154ce6=()=>{const _0x5a731c=_0x4043d9;$[_0x5a731c(0x1d2)]('sterfive.nodeBrowser',{'options':{'endpointNode':()=>({'endpoint':'opc.tcp://opcuademo.sterfive.com:26543'}),'endpoint':()=>undefined,'parentNode':()=>_0x3b1974,'filter':()=>!![],'isTypeRef':![]},'resolveParentNode'(){return _0x35df50(this,void 0x0,void 0x0,function*(){const _0x539a59=_0x31d3,_0x213d73=this;if(_0x213d73['__parentNode']==undefined){const _0x33dc3d=typeof _0x213d73[_0x539a59(0x2a1)][_0x539a59(0x249)]===_0x539a59(0x23f)?_0x213d73[_0x539a59(0x2a1)][_0x539a59(0x249)]['call'](_0x213d73):_0x213d73[_0x539a59(0x2a1)][_0x539a59(0x249)];if(_0x33dc3d instanceof Promise){const _0x318219=yield _0x33dc3d;_0x213d73[_0x539a59(0x2ad)]=_0x318219;}else _0x213d73['__parentNode']=_0x33dc3d;}return _0x213d73['__parentNode']||_0x3b1974;});},'reset'(){return _0x35df50(this,void 0x0,void 0x0,function*(){const _0x3a095d=_0x31d3,_0x1e74e6=this,_0x1fa543=_0x1e74e6;_0x1fa543[_0x3a095d(0x2ad)]=undefined,_0x1e74e6[_0x3a095d(0x1ed)][_0x3a095d(0x1af)]();const _0x46d867=yield this[_0x3a095d(0x299)](),_0x412e66=_0x167008(_0x46d867);_0x1e74e6[_0x3a095d(0x1ed)][_0x3a095d(0x284)](_0x412e66),_0x1e74e6[_0x3a095d(0x205)]=_0x46d867;});},'verify'(_0x4f6306){const _0x56afab=_0x5a731c,_0x18aa62=this,_0x2ce87d=_0x2e6bbb(_0x18aa62);_0x407b3d(_0x2ce87d,_0x4f6306,_0x18aa62[_0x56afab(0x197)],_0x18aa62[_0x56afab(0x2ef)])[_0x56afab(0x1b6)](_0x29aac9=>{const _0x506674=_0x56afab;!_0x29aac9?_0x18aa62[_0x506674(0x1e3)][_0x506674(0x27a)]('sterfive-input-error'):_0x18aa62[_0x506674(0x1e3)]['removeClass']('sterfive-input-error');});},'_hideMenu'(_0x4f6c28){const _0x5e6c69=_0x5a731c,_0x362c3f=this;$(document)['off']('mousedown.red-ui-typedInput-close-property-select'),_0x4f6c28[_0x5e6c69(0x2fc)](),_0x4f6c28[_0x5e6c69(0x1eb)]({'height':_0x5e6c69(0x22d)});if(_0x4f6c28[_0x5e6c69(0x204)][_0x5e6c69(0x271)]){var _0x550919=[];_0x4f6c28[_0x5e6c69(0x264)](_0x5e6c69(0x26c))[_0x5e6c69(0x279)](function(){const _0x279b59=_0x5e6c69;$(this)[_0x279b59(0x176)](_0x279b59(0x266))&&_0x550919['push']($(this)[_0x279b59(0x1da)]('value'));}),_0x4f6c28[_0x5e6c69(0x2d4)](_0x550919);}_0x362c3f['$elementDiv']['is'](':visible')?_0x362c3f[_0x5e6c69(0x197)][_0x5e6c69(0x244)](_0x5e6c69(0x22b)):_0x362c3f[_0x5e6c69(0x1a6)][_0x5e6c69(0x244)]('focus');},'_createMenu'(_0x9d2908,_0x29be0a,_0x4028ec){const _0x4cde31=_0x5a731c;var _0x2f75e4=this;const _0xc50aa4=$(_0x4cde31(0x184))['addClass'](_0x4cde31(0x2d0));return _0xc50aa4['opts']=_0x29be0a,_0xc50aa4['callback']=_0x4028ec,_0x9d2908[_0x4cde31(0x283)](_0x5c4e43=>{const _0x12912c=_0x4cde31;typeof _0x5c4e43==='string'&&(_0x5c4e43={'value':_0x5c4e43,'label':_0x5c4e43});var _0x16081a=$(_0x12912c(0x15e))[_0x12912c(0x2e6)]('value',_0x5c4e43[_0x12912c(0x253)])[_0x12912c(0x2fb)](_0xc50aa4);_0x5c4e43['label']&&_0x16081a['text'](_0x5c4e43[_0x12912c(0x1ef)]);_0x5c4e43['title']&&_0x16081a[_0x12912c(0x176)](_0x12912c(0x2ce),_0x5c4e43[_0x12912c(0x2ce)]);if(_0x5c4e43[_0x12912c(0x166)]){if(_0x5c4e43['icon']['indexOf']('<')===0x0)$(_0x5c4e43[_0x12912c(0x166)])['prependTo'](_0x16081a);else _0x5c4e43[_0x12912c(0x166)][_0x12912c(0x1b5)]('/')!==-0x1?$('<i>',{'class':_0x12912c(0x295),'style':_0x12912c(0x182)+_0x5c4e43[_0x12912c(0x166)]+_0x12912c(0x2b3)+_0x5c4e43[_0x12912c(0x166)]+');'})['prependTo'](_0x16081a):$('<i>',{'class':'red-ui-typedInput-icon\x20'+_0x5c4e43['icon']})[_0x12912c(0x2b9)](_0x16081a);}else _0x16081a[_0x12912c(0x1eb)]({'paddingLeft':_0x12912c(0x193)});!_0x5c4e43[_0x12912c(0x166)]&&!_0x5c4e43[_0x12912c(0x1ef)]&&_0x16081a[_0x12912c(0x2f2)](_0x5c4e43[_0x12912c(0x253)]);var _0x365c71;_0x29be0a[_0x12912c(0x271)]&&(_0x365c71=$('<input\x20type=\x22checkbox\x22>')['css'](_0x12912c(0x1a8),_0x12912c(0x278))['data'](_0x12912c(0x253),_0x5c4e43[_0x12912c(0x253)])[_0x12912c(0x2b9)](_0x16081a)['on'](_0x12912c(0x2b1),function(_0x2afe4a){const _0x5cf1bc=_0x12912c;_0x2afe4a[_0x5cf1bc(0x1e2)]();})),_0x16081a['on'](_0x12912c(0x2a0),function(_0x4f5b95){const _0x5465bb=_0x12912c;_0x4f5b95['preventDefault'](),_0x4f5b95['stopPropagation'](),!_0x29be0a[_0x5465bb(0x271)]?(_0x4028ec(_0x5c4e43[_0x5465bb(0x253)]),_0x2f75e4[_0x5465bb(0x2bc)](_0xc50aa4)):_0x365c71[_0x5465bb(0x176)](_0x5465bb(0x266),!_0x365c71[_0x5465bb(0x176)]('checked'));});}),_0xc50aa4['css']({'display':'none'}),_0xc50aa4['on'](_0x4cde31(0x2f4),function(_0x5c4036){const _0x542f0e=_0x4cde31;if(_0x5c4036[_0x542f0e(0x2b2)]===0x28)_0x5c4036[_0x542f0e(0x1e2)](),$(this)[_0x542f0e(0x21b)](_0x542f0e(0x17c))[_0x542f0e(0x1c7)]()['trigger'](_0x542f0e(0x22b));else{if(_0x5c4036[_0x542f0e(0x2b2)]===0x26)_0x5c4036['preventDefault'](),$(this)[_0x542f0e(0x21b)](':focus')['prev']()[_0x542f0e(0x244)]('focus');else _0x5c4036[_0x542f0e(0x2b2)]===0x1b&&(_0x5c4036[_0x542f0e(0x1e2)](),_0x2f75e4['_hideMenu'](_0xc50aa4));}_0x5c4036[_0x542f0e(0x17b)]();}),_0xc50aa4;},'disarmClick':![],'_showMenu'(_0x7dafea,_0xe6080c){const _0x144022=_0x5a731c;if(this[_0x144022(0x29f)]){this['disarmClick']=![];return;}var _0x1b1444=this,_0x55491c=_0xe6080c[_0x144022(0x291)](),_0x119be1=_0xe6080c[_0x144022(0x1fd)](),_0x403516=_0x7dafea[_0x144022(0x1fd)](),_0x3720b0=_0x119be1+_0x55491c['top'];_0x3720b0+_0x403516-$(document)[_0x144022(0x222)]()>$(window)['height']()&&(_0x3720b0-=_0x3720b0+_0x403516-$(window)[_0x144022(0x1fd)]()+0x5),_0x3720b0<0x0&&(_0x7dafea[_0x144022(0x1fd)](_0x403516+_0x3720b0),_0x3720b0=0x0),_0x7dafea[_0x144022(0x1eb)]({'top':_0x3720b0+'px','left':_0x55491c['left']+'px'}),_0x7dafea['slideDown'](0x64),this[_0x144022(0x165)](function(){const _0x1cfb43=_0x144022;_0x1b1444['$uiSelect'][_0x1cfb43(0x27a)](_0x1cfb43(0x2e8)),$(document)['on']('mousedown.red-ui-typedInput-close-property-select',function(_0x310918){const _0x443193=_0x1cfb43;!$(_0x310918[_0x443193(0x1e1)])[_0x443193(0x248)](_0x7dafea)[_0x443193(0x2ac)]&&_0x1b1444[_0x443193(0x2bc)](_0x7dafea),$(_0x310918[_0x443193(0x1e1)])[_0x443193(0x248)](_0xe6080c)[_0x443193(0x2ac)]&&(_0x1b1444['disarmClick']=!![],_0x310918[_0x443193(0x1e2)]());});});},'_showTypeMenu'(){const _0x1ea37b=_0x5a731c,_0x4c27ad=this;this['_showMenu'](_0x4c27ad[_0x1ea37b(0x2a4)],_0x4c27ad[_0x1ea37b(0x1e3)]),_0x4c27ad[_0x1ea37b(0x1f4)][_0x1ea37b(0x2fc)]();const _0x1f0a92=_0x4c27ad[_0x1ea37b(0x2a8)];var _0x5ecfd7=_0x4c27ad[_0x1ea37b(0x2a4)][_0x1ea37b(0x264)](_0x1ea37b(0x288)+_0x1f0a92+'\x27');setTimeout(function(){const _0x124164=_0x1ea37b;_0x5ecfd7[_0x124164(0x244)](_0x124164(0x22b));},0x78);},'_initMenu'(){const _0x621457=_0x5a731c,_0x1aedcc=this;_0x1aedcc[_0x621457(0x1a6)][_0x621457(0x2e6)](_0x621457(0x2be),-0x1),_0x1aedcc[_0x621457(0x1a6)]['on'](_0x621457(0x290),function(_0x4805a2){_0x4805a2['preventDefault']();});_0x1aedcc[_0x621457(0x2a4)]&&_0x1aedcc['$menu'][_0x621457(0x302)]();const _0x4a909a=[{'label':_0x621457(0x2f2),'value':'t','title':_0x621457(0x298),'icon':_0x621457(0x1df)},{'label':_0x621457(0x240),'value':_0x621457(0x1e0),'title':_0x621457(0x2d7),'icon':_0x621457(0x275)},{'label':_0x621457(0x2df),'value':'n','icon':_0x621457(0x206)},{'label':_0x621457(0x294),'value':'na','icon':_0x621457(0x26d)},{'label':'NodeId\x