node-red-contrib-iiot-opcua
Version:
An Industrial IoT OPC UA toolbox contribution package for Node-RED based on node-opcua.
171 lines (156 loc) • 7.55 kB
HTML
<!--
The BSD 3-Clause License
Copyright 2022 - DATATRONiQ GmbH (https://datatroniq.com)
Copyright (c) 2018-2022 Klaus Landsdorf (http://node-red.plus/)
All rights reserved.
node-red-contrib-iiot-opcua
--> <script type='text/javascript'> RED.nodes.registerType('OPCUA-IIoT-Server-ASO', {
category: 'IIoT',
color: '#ABCDEF',
defaults: {
nodeId: {value: "", required: true},
browsename: {value: "", required: true},
displayname: {value: ""},
objecttype: {value: "", required: true},
datatype: {value: ""},
value: {value: null},
referenceNodeId: {value: "", required: true},
referencetype: {value: ""},
name: {value: ""}
},
inputs: 1,
outputs: 1,
align: "left",
icon: "icon.png",
label: function () {
return this.name || "S-ASO";
},
labelStyle: function () {
return this.name ? "node_label_italic" : "";
},
oneditprepare: function () {
let node = this
node.lookupItems = []
let objecttypeLookupButton = $("#node-lookup-objecttype")
let objecttypeInputField = $("#node-input-objecttype")
objecttypeLookupButton.on("click", function () {
objecttypeLookupButton.addClass('disabled')
$.getJSON('/opcuaIIoT/list/InstanceTypeIds', function (data) {
objecttypeLookupButton.removeClass('disabled')
node.lookupItems = []
$.each(data, function (i, entry) {
node.lookupItems.push({value: entry.nodeId, label: entry.label})
})
objecttypeInputField.autocomplete({
source: node.lookupItems,
minLength: 0,
focus: function (event, ui) {
objecttypeInputField.val(ui.item.label);
return false;
},
select: function (event, ui) {
objecttypeInputField.val(ui.item.label)
return false;
},
close: function (event, ui) {
objecttypeInputField.autocomplete("destroy")
}
}).autocomplete("search", "")
})
})
let datatypeLookupButton = $("#node-lookup-datatype")
let datatypeField = $("#node-input-datatype")
datatypeLookupButton.on("click", function () {
datatypeLookupButton.addClass('disabled')
$.getJSON('/opcuaIIoT/list/DataTypeIds', function (data) {
datatypeLookupButton.removeClass('disabled')
node.lookupItems = []
$.each(data, function (i, entry) {
node.lookupItems.push({value: entry.nodeId, label: entry.label})
})
datatypeField.autocomplete({
source: node.lookupItems,
minLength: 0,
focus: function (event, ui) {
datatypeField.val(ui.item.label);
return false;
},
select: function (event, ui) {
datatypeField.val(ui.item.label)
return false;
},
close: function (event, ui) {
datatypeField.autocomplete("destroy")
}
}).autocomplete("search", "")
})
})
let referencetypeLookupButton = $("#node-lookup-referencetype")
let referencetypeField = $("#node-input-referencetype")
referencetypeLookupButton.on("click", function () {
referencetypeLookupButton.addClass('disabled')
$.getJSON('/opcuaIIoT/list/ReferenceTypeIds', function (data) {
referencetypeLookupButton.removeClass('disabled')
node.lookupItems = []
$.each(data, function (i, entry) {
node.lookupItems.push({value: entry.nodeId, label: entry.label})
})
referencetypeField.autocomplete({
source: node.lookupItems,
minLength: 0,
focus: function (event, ui) {
referencetypeField.val(ui.item.label);
return false;
},
select: function (event, ui) {
referencetypeField.val(ui.item.label)
return false;
},
close: function (event, ui) {
referencetypeField.autocomplete("destroy")
}
}).autocomplete("search", "")
})
})
let dataTypeRow = $("#node-input-datatype-row")
let referenceTypeRow = $("#node-input-referencetype-row")
objecttypeInputField.change(function () {
if ($(this).val() !== '61') {
node.datatype.required = true
node.referencetype.required = true
dataTypeRow.show()
referenceTypeRow.show()
} else {
node.datatype.required = false
node.referencetype.required = false
dataTypeRow.hide()
referenceTypeRow.hide()
}
})
}
}); </script> <script type='text/x-red' data-template-name='OPCUA-IIoT-Server-ASO'>
<div class='form-row'> <label for='node-input-nodeId'><i class='icon-tasks'></i> <span
data-i18n='opcua-iiot-contrib.label.nodeId'></span></label> <input type='text' id='node-input-nodeId'
placeholder='ns=1;s=MySwitch or ns=1;i=1234'> </div> <div class='form-row'> <label for='node-input-browsename'><i
class='icon-tag'></i> <span data-i18n='opcua-iiot-contrib.label.browsename'></span></label> <input type='text'
id='node-input-browsename' placeholder=''> </div> <div class='form-row'> <label for='node-input-displayname'><i
class='icon-tag'></i> <span data-i18n='opcua-iiot-contrib.label.displayname'></span></label> <input type='text'
id='node-input-displayname' placeholder=''> </div> <div class='form-row'> <label for='node-input-objecttype'><i
class='icon-search'></i> <span data-i18n='opcua-iiot-contrib.label.objecttype'></span></label> <input type='text'
id='node-input-objecttype' style='width:40%' placeholder=''> <a id='node-lookup-objecttype' class='btn'><i
id='node-lookup-topic-icon' class='fa fa-search'></i></a> </div> <div class='form-row'> <label
for='node-input-datatype'><i class='icon-search'></i> <span data-i18n='opcua-iiot-contrib.label.datatype'></span>
</label> <input type='text' id='node-input-datatype' style='width:40%' placeholder=''> <a id='node-lookup-datatype'
class='btn'><i id='node-lookup-topic-icon' class='fa fa-search'></i></a> </div> <div class='form-row'> <label
for='node-input-value'><i class='icon-tag'></i> <span data-i18n='opcua-iiot-contrib.label.value'></span></label> <input
type='text' id='node-input-value' placeholder=''> </div> <hr> <div class='form-row'> <label
for='node-input-referenceNodeId'><i class='icon-tasks'></i> <span data-i18n='opcua-iiot-contrib.label.referenceNodeId'>
</span></label> <input type='text' id='node-input-referenceNodeId' placeholder='ns=1;s=MySwitch or ns=1;i=1234'> </div>
<div class='form-row'> <label for='node-input-referencetype'><i class='icon-search'></i> <span
data-i18n='opcua-iiot-contrib.label.referencetype'></span></label> <input type='text' id='node-input-referencetype'
style='width:40%' placeholder=''> <a id='node-lookup-referencetype' class='btn'><i id='node-lookup-topic-icon'
class='fa fa-search'></i></a> </div> <hr> <div class='form-row'> <label for='node-input-name'><i class='fa fa-tag'></i>
<span data-i18n='node-red:common.label.name'></span></label> <input type='text' id='node-input-name' placeholder=''>
</div> </script> <script type='text/x-red' data-help-name='OPCUA-IIoT-Server-ASO'>
<h2>OPC UA IIoT Address Space Object</h2> <p>
That nodes is to build event driven Address Space Objects (ASO) injects to the server.</p> </script>