UNPKG

node-red-contrib-iiot-opcua

Version:

An Industrial IoT OPC UA toolbox contribution package for Node-RED based on node-opcua.

783 lines 25.1 kB
[ { "id": "45689007.c2c51", "type": "tab", "label": "OPC UA IIoT JWT EFC", "disabled": false, "info": "" }, { "id": "83836f37.817158", "type": "OPCUA-IIoT-Flex-Connector", "z": "45689007.c2c51", "name": "", "showStatusActivities": false, "showErrors": true, "connector": "c441ba33.56b788", "x": 1000, "y": 220, "wires": [ [ "35f9ab6c.f9e5fc" ] ] }, { "id": "9b0e53cf.81f448", "type": "inject", "z": "45689007.c2c51", "name": "Server 86", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"discoveryUrl\":null,\"endpoint\":\"opc.tcp://localhost:55386/\",\"keepSessionAlive\":true,\"securityPolicy\":\"None\",\"securityMode\":\"None\",\"name\":\"LOCAL FLEXIBLE INJECTED SERVER\",\"showErrors\":true,\"publicCertificateFile\":null,\"privateKeyFile\":null,\"defaultSecureTokenLifetime\":0,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false,\"strategyMaxRetry\":0,\"strategyInitialDelay\":0,\"strategyMaxDelay\":0,\"strategyRandomisationFactor\":0,\"requestedSessionTimeout\":0,\"connectionStartDelay\":0,\"reconnectDelay\":0}", "payloadType": "json", "x": 760, "y": 160, "wires": [ [ "83836f37.817158" ] ] }, { "id": "35f9ab6c.f9e5fc", "type": "debug", "z": "45689007.c2c51", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 1170, "y": 220, "wires": [] }, { "id": "c0121b6b.5efed", "type": "inject", "z": "45689007.c2c51", "name": "Server 89", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"endpoint\":\"opc.tcp://localhost:55389/\",\"keepSessionAlive\":true,\"showErrors\":true,\"defaultSecureTokenLifetime\":360000,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false}", "payloadType": "json", "x": 760, "y": 240, "wires": [ [ "83836f37.817158" ] ] }, { "id": "51c6e598.bbb54c", "type": "inject", "z": "45689007.c2c51", "name": "Server 88", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"discoveryUrl\":null,\"endpoint\":\"opc.tcp://localhost:55388/\",\"keepSessionAlive\":true,\"securityPolicy\":\"None\",\"securityMode\":\"None\",\"name\":\"LOCAL FLEXIBLE INJECTED SERVER\",\"showErrors\":true,\"publicCertificateFile\":null,\"privateKeyFile\":null,\"defaultSecureTokenLifetime\":0,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false,\"strategyMaxRetry\":0,\"strategyInitialDelay\":0,\"strategyMaxDelay\":0,\"strategyRandomisationFactor\":0,\"requestedSessionTimeout\":0,\"connectionStartDelay\":0,\"reconnectDelay\":0}", "payloadType": "json", "x": 760, "y": 200, "wires": [ [ "83836f37.817158" ] ] }, { "id": "37eeab5f.7b5204", "type": "OPCUA-IIoT-Server", "z": "45689007.c2c51", "port": "55386", "endpoint": "", "acceptExternalCommands": true, "maxAllowedSessionNumber": "", "maxConnectionsPerEndpoint": "", "maxAllowedSubscriptionNumber": "", "alternateHostname": "", "name": "Demos Server 86", "showStatusActivities": false, "showErrors": true, "asoDemo": true, "allowAnonymous": true, "individualCerts": false, "isAuditing": false, "serverDiscovery": false, "users": [], "xmlsets": [], "publicCertificateFile": "", "privateCertificateFile": "", "registerServerMethod": 1, "discoveryServerEndpointUrl": "", "capabilitiesForMDNS": "", "maxNodesPerRead": 1000, "maxNodesPerBrowse": 2000, "delayToClose": 1000, "x": 270, "y": 580, "wires": [ [] ] }, { "id": "181cf4fa.a57d1b", "type": "OPCUA-IIoT-Flex-Server", "z": "45689007.c2c51", "port": "55378", "endpoint": "", "acceptExternalCommands": true, "maxAllowedSessionNumber": "", "maxConnectionsPerEndpoint": "", "maxAllowedSubscriptionNumber": "", "alternateHostname": "", "name": "Flex Server 78", "showStatusActivities": false, "showErrors": true, "allowAnonymous": true, "individualCerts": false, "isAuditing": false, "serverDiscovery": true, "users": [], "xmlsets": [], "publicCertificateFile": "", "privateCertificateFile": "", "registerServerMethod": 1, "discoveryServerEndpointUrl": "", "capabilitiesForMDNS": "", "maxNodesPerRead": 1000, "maxNodesPerBrowse": 2000, "delayToClose": 1000, "addressSpaceScript": "function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {\n // server = the created node-opcua server\n // addressSpace = script placeholder\n // eventObjects = to hold event variables in memory from this script\n\n // internal global sandbox objects are \n // node = node of the flex server, \n // coreServer = core iiot server object for debug and access to nodeOPCUA,\n // and scriptObjects to hold variables and functions\n const LocalizedText = opcua.LocalizedText\n const namespace = addressSpace.getOwnNamespace()\n\n coreServer.internalDebugLog('init dynamic address space')\n node.warn('construct new address space for OPC UA')\n\n // from here - see the node-opcua docs how to build address sapces\n let tanks = namespace.addObject({\n browseName: 'Tanks',\n description: 'The Object representing some tanks',\n organizedBy: addressSpace.rootFolder.objects,\n notifierOf: addressSpace.rootFolder.objects.server\n })\n\n let oilTankLevel = namespace.addVariable({\n browseName: 'OilTankLevel',\n displayName: [\n new LocalizedText({ text: 'Oil Tank Level', locale: 'en-US' }),\n new LocalizedText({ text: 'Öl Tank Füllstand', locale: 'de-DE' })\n ],\n description: 'Fill level in percentage (0% to 100%) of the oil tank',\n propertyOf: tanks,\n dataType: 'Double',\n eventSourceOf: tanks\n })\n\n // ---------------------------------------------------------------------------------\n // Let's create a exclusive Limit Alarm that automatically raise itself\n // when the tank level is out of limit\n // ---------------------------------------------------------------------------------\n let exclusiveLimitAlarmType = addressSpace.findEventType('ExclusiveLimitAlarmType')\n let oilTankLevelCondition = namespace.instantiateExclusiveLimitAlarm(exclusiveLimitAlarmType, {\n componentOf: tanks,\n conditionSource: oilTankLevel,\n browseName: 'OilTankLevelCondition',\n displayName: [\n new LocalizedText({ text: 'Oil Tank Level Condition', locale: 'en-US' }),\n new LocalizedText({ text: 'Öl Tank Füllstand Bedingung', locale: 'de-DE' })\n ],\n description: 'ExclusiveLimitAlarmType Condition',\n conditionName: 'OilLevelCondition',\n optionals: [\n 'ConfirmedState', 'Confirm' // confirm state and confirm Method\n ],\n inputNode: oilTankLevel, // the letiable that will be monitored for change\n highHighLimit: 0.9,\n highLimit: 0.8,\n lowLimit: 0.2\n })\n\n // --------------------------------------------------------------\n // Let's create a second letiable with no Exclusive alarm\n // --------------------------------------------------------------\n let gasTankLevel = namespace.addVariable({\n browseName: 'GasTankLevel',\n displayName: [\n new LocalizedText({ text: 'Gas Tank Level', locale: 'en-US' }),\n new LocalizedText({ text: 'Gas Tank Füllstand', locale: 'de-DE' })\n ],\n description: 'Fill level in percentage (0% to 100%) of the gas tank',\n propertyOf: tanks,\n dataType: 'Double',\n eventSourceOf: tanks\n })\n\n let nonExclusiveLimitAlarmType = addressSpace.findEventType('NonExclusiveLimitAlarmType')\n let gasTankLevelCondition = namespace.instantiateNonExclusiveLimitAlarm(nonExclusiveLimitAlarmType, {\n componentOf: tanks,\n conditionSource: gasTankLevel,\n browseName: 'GasTankLevelCondition',\n displayName: [\n new LocalizedText({ text: 'Gas Tank Level Condition', locale: 'en-US' }),\n new LocalizedText({ text: 'Gas Tank Füllstand Bedingung', locale: 'de-DE' })\n ],\n description: 'NonExclusiveLimitAlarmType Condition',\n conditionName: 'GasLevelCondition',\n optionals: [\n 'ConfirmedState', 'Confirm' // confirm state and confirm Method\n ],\n inputNode: gasTankLevel, // the letiable that will be monitored for change\n highHighLimit: 0.9,\n highLimit: 0.8,\n lowLimit: 0.2\n })\n\n // variable with value\n if (scriptObjects.testReadWrite === undefined || scriptObjects.testReadWrite === null) {\n scriptObjects.testReadWrite = 1000.0\n }\n\n let myVariables = namespace.addObject({\n browseName: 'MyVariables',\n description: 'The Object representing some variables',\n organizedBy: addressSpace.rootFolder.objects,\n notifierOf: addressSpace.rootFolder.objects.server\n })\n\n if (coreServer.core) {\n namespace.addVariable({\n componentOf: myVariables,\n nodeId: 'ns=1;s=TestReadWrite',\n browseName: 'TestReadWrite',\n displayName: [\n new LocalizedText({ text: 'Test Read and Write', locale: 'en-US' }),\n new LocalizedText({ text: 'Test Lesen Schreiben', locale: 'de-DE' })\n ],\n dataType: 'Double',\n value: {\n get: function () {\n return new opcua.Variant({\n dataType: 'Double',\n value: scriptObjects.testReadWrite\n })\n },\n set: function (variant) {\n scriptObjects.testReadWrite = parseFloat(variant.value)\n return opcua.StatusCodes.Good\n }\n }\n\n })\n\n let memoryVariable = namespace.addVariable({\n componentOf: myVariables,\n nodeId: 'ns=1;s=free_memory',\n browseName: 'FreeMemory',\n displayName: [\n new LocalizedText({ text: 'Free Memory', locale: 'en-US' }),\n new LocalizedText({ text: 'ungenutzer RAM', locale: 'de-DE' })\n ],\n dataType: 'Double',\n\n value: {\n get: function () {\n return new opcua.Variant({\n dataType: 'Double',\n value: coreServer.core.availableMemory()\n })\n }\n }\n })\n addressSpace.installHistoricalDataNode(memoryVariable)\n\n } else {\n coreServer.internalDebugLog('coreServer.core needed for opcua')\n }\n\n // hold event objects in memory \n eventObjects.oilTankLevel = oilTankLevel\n eventObjects.oilTankLevelCondition = oilTankLevelCondition\n\n eventObjects.gasTankLevel = gasTankLevel\n eventObjects.gasTankLevelCondition = gasTankLevelCondition\n\n done()\n}", "x": 260, "y": 520, "wires": [ [] ] }, { "id": "2ec8dabd.dd9246", "type": "comment", "z": "45689007.c2c51", "name": "Server 88 is Default Demo Server", "info": "", "x": 310, "y": 480, "wires": [] }, { "id": "7aabc096.22f898", "type": "OPCUA-IIoT-Browser", "z": "45689007.c2c51", "nodeId": "ns=1;i=1234", "name": "", "justValue": true, "sendNodesToRead": true, "sendNodesToBrowser": true, "sendNodesToListener": true, "multipleOutputs": false, "showStatusActivities": false, "showErrors": true, "recursiveBrowse": false, "recursiveDepth": "", "delayPerMessage": "", "connector": "c441ba33.56b788", "x": 900, "y": 520, "wires": [ [ "3d8e0d88.f3829a", "7c4d582a.9602", "53d8b17b.0c7688", "92b651a5.62441" ] ] }, { "id": "ecc74a99.a94b38", "type": "OPCUA-IIoT-Inject", "z": "45689007.c2c51", "injectType": "inject", "payload": "", "payloadType": "date", "topic": "", "repeat": "", "crontab": "", "once": true, "startDelay": "", "name": "Root", "addressSpaceItems": [], "x": 750, "y": 520, "wires": [ [ "7aabc096.22f898" ] ] }, { "id": "3d8e0d88.f3829a", "type": "debug", "z": "45689007.c2c51", "name": "", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1110, "y": 520, "wires": [] }, { "id": "7c4d582a.9602", "type": "OPCUA-IIoT-Response", "z": "45689007.c2c51", "name": "", "compressStructure": true, "showStatusActivities": false, "showErrors": false, "activateUnsetFilter": false, "activateFilters": false, "negateFilter": false, "filters": [], "x": 1110, "y": 580, "wires": [ [ "75d66df8.232fbc", "ccc15fa3.258c68" ] ] }, { "id": "75d66df8.232fbc", "type": "debug", "z": "45689007.c2c51", "name": "", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1310, "y": 580, "wires": [] }, { "id": "ccc15fa3.258c68", "type": "debug", "z": "45689007.c2c51", "name": "", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 1290, "y": 540, "wires": [] }, { "id": "53d8b17b.0c7688", "type": "debug", "z": "45689007.c2c51", "name": "", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 1090, "y": 480, "wires": [] }, { "id": "bbc9cee9.e4ba1", "type": "inject", "z": "45689007.c2c51", "name": "Server 78", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"discoveryUrl\":null,\"endpoint\":\"opc.tcp://localhost:55378/\",\"keepSessionAlive\":true,\"securityPolicy\":\"None\",\"securityMode\":\"None\",\"name\":\"LOCAL FLEXIBLE INJECTED SERVER\",\"showErrors\":true,\"publicCertificateFile\":null,\"privateKeyFile\":null,\"defaultSecureTokenLifetime\":0,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false,\"strategyMaxRetry\":0,\"strategyInitialDelay\":0,\"strategyMaxDelay\":0,\"strategyRandomisationFactor\":0,\"requestedSessionTimeout\":0,\"connectionStartDelay\":0,\"reconnectDelay\":0}", "payloadType": "json", "x": 760, "y": 280, "wires": [ [ "83836f37.817158" ] ] }, { "id": "23cbf8b0.8d702", "type": "OPCUA-IIoT-Browser", "z": "45689007.c2c51", "nodeId": "ns=1;i=1234", "name": "", "justValue": false, "sendNodesToRead": false, "sendNodesToBrowser": false, "sendNodesToListener": false, "multipleOutputs": false, "showStatusActivities": false, "showErrors": true, "recursiveBrowse": false, "recursiveDepth": "", "delayPerMessage": "", "connector": "c441ba33.56b788", "x": 900, "y": 580, "wires": [ [ "53d8b17b.0c7688", "3d8e0d88.f3829a", "7c4d582a.9602", "92b651a5.62441" ] ] }, { "id": "ddc2a09c.6929e8", "type": "OPCUA-IIoT-Inject", "z": "45689007.c2c51", "injectType": "inject", "payload": "", "payloadType": "date", "topic": "", "repeat": "", "crontab": "", "once": true, "startDelay": "", "name": "Root", "addressSpaceItems": [], "x": 750, "y": 580, "wires": [ [ "23cbf8b0.8d702" ] ] }, { "id": "1f51b891.b195d7", "type": "JWT-OUT", "z": "45689007.c2c51", "name": "", "algoType": "HASH", "signature": "", "algoHash": "HS256", "privateKeyFile": "", "algoFile": "RS256", "tokenPayload": "", "selectedProperty": "", "entireMessage": false, "showErrors": true, "useOptions": false, "issuer": "", "subject": "", "audience": "", "jwtId": "", "tokenExpires": false, "expiresIn": 60, "expiresInUnit": "s", "tokenNotBefore": false, "notBefore": 1, "notBeforeUnit": "s", "x": 380, "y": 380, "wires": [ [ "972dc8a8.6837c", "40186644.91411" ] ] }, { "id": "35357b9f.7e6264", "type": "JWT-IN", "z": "45689007.c2c51", "name": "Correct JWT In", "algoType": "HASH", "signature": "", "publicKeyFile": "", "tokenPayload": "", "selectedProperty": "", "entireMessage": false, "showErrors": true, "useOptions": false, "issuer": "", "subject": "", "audience": "", "jwtId": "", "ignoreExpiration": false, "ignoreNotBefore": false, "clockTolerance": 1, "clockToleranceUnit": "s", "useMaxAge": false, "maxAge": 120, "maxAgeUnit": "s", "x": 760, "y": 380, "wires": [ [ "83836f37.817158", "d55ad35e.bfa44" ] ] }, { "id": "dd30bd0f.d5e8b", "type": "inject", "z": "45689007.c2c51", "name": "Server 86", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"discoveryUrl\":null,\"endpoint\":\"opc.tcp://localhost:55386/\",\"keepSessionAlive\":true,\"securityPolicy\":\"None\",\"securityMode\":\"None\",\"name\":\"LOCAL FLEXIBLE INJECTED SERVER\",\"showErrors\":true,\"publicCertificateFile\":null,\"privateKeyFile\":null,\"defaultSecureTokenLifetime\":0,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false,\"strategyMaxRetry\":0,\"strategyInitialDelay\":0,\"strategyMaxDelay\":0,\"strategyRandomisationFactor\":0,\"requestedSessionTimeout\":0,\"connectionStartDelay\":0,\"reconnectDelay\":0}", "payloadType": "json", "x": 200, "y": 380, "wires": [ [ "1f51b891.b195d7" ] ] }, { "id": "972dc8a8.6837c", "type": "debug", "z": "45689007.c2c51", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 530, "y": 340, "wires": [] }, { "id": "40186644.91411", "type": "delay", "z": "45689007.c2c51", "name": "Network Delay", "pauseType": "delay", "timeout": "5", "timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "allowrate": false, "outputs": 1, "x": 560, "y": 380, "wires": [ [ "35357b9f.7e6264" ] ] }, { "id": "d55ad35e.bfa44", "type": "debug", "z": "45689007.c2c51", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 970, "y": 380, "wires": [] }, { "id": "b4997eda.d58de8", "type": "JWT-IN", "z": "45689007.c2c51", "name": "Wrong JWT In", "algoType": "HASH", "signature": "heh", "publicKeyFile": "", "tokenPayload": "", "selectedProperty": "", "entireMessage": false, "showErrors": true, "useOptions": false, "issuer": "", "subject": "", "audience": "", "jwtId": "", "ignoreExpiration": false, "ignoreNotBefore": false, "clockTolerance": 1, "clockToleranceUnit": "s", "useMaxAge": false, "maxAge": 120, "maxAgeUnit": "s", "x": 760, "y": 80, "wires": [ [ "9a47a373.8aa918", "83836f37.817158" ] ] }, { "id": "9a47a373.8aa918", "type": "debug", "z": "45689007.c2c51", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 970, "y": 80, "wires": [] }, { "id": "53e12b73.1a62f4", "type": "JWT-OUT", "z": "45689007.c2c51", "name": "", "algoType": "HASH", "signature": "", "algoHash": "HS256", "privateKeyFile": "", "algoFile": "RS256", "tokenPayload": "", "selectedProperty": "", "entireMessage": false, "showErrors": true, "useOptions": false, "issuer": "", "subject": "", "audience": "", "jwtId": "", "tokenExpires": false, "expiresIn": 60, "expiresInUnit": "s", "tokenNotBefore": false, "notBefore": 1, "notBeforeUnit": "s", "x": 380, "y": 80, "wires": [ [ "7a4ead94.7b51c4", "b4997eda.d58de8" ] ] }, { "id": "83857d33.c303b8", "type": "inject", "z": "45689007.c2c51", "name": "Server 86", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"discoveryUrl\":null,\"endpoint\":\"opc.tcp://localhost:55386/\",\"keepSessionAlive\":true,\"securityPolicy\":\"None\",\"securityMode\":\"None\",\"name\":\"LOCAL FLEXIBLE INJECTED SERVER\",\"showErrors\":true,\"publicCertificateFile\":null,\"privateKeyFile\":null,\"defaultSecureTokenLifetime\":0,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false,\"strategyMaxRetry\":0,\"strategyInitialDelay\":0,\"strategyMaxDelay\":0,\"strategyRandomisationFactor\":0,\"requestedSessionTimeout\":0,\"connectionStartDelay\":0,\"reconnectDelay\":0}", "payloadType": "json", "x": 200, "y": 80, "wires": [ [ "53e12b73.1a62f4" ] ] }, { "id": "7a4ead94.7b51c4", "type": "debug", "z": "45689007.c2c51", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 530, "y": 40, "wires": [] }, { "id": "92b651a5.62441", "type": "debug", "z": "45689007.c2c51", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload.endpoint", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1140, "y": 640, "wires": [] }, { "id": "d2200982.614e", "type": "inject", "z": "45689007.c2c51", "name": "Server 80", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"discoveryUrl\":null,\"endpoint\":\"opc.tcp://localhost:55380/\",\"keepSessionAlive\":true,\"securityPolicy\":\"None\",\"securityMode\":\"None\",\"name\":\"LOCAL FLEXIBLE INJECTED SERVER\",\"showErrors\":true,\"publicCertificateFile\":null,\"privateKeyFile\":null,\"defaultSecureTokenLifetime\":0,\"endpointMustExist\":false,\"autoSelectRightEndpoint\":false,\"strategyMaxRetry\":0,\"strategyInitialDelay\":0,\"strategyMaxDelay\":0,\"strategyRandomisationFactor\":0,\"requestedSessionTimeout\":0,\"connectionStartDelay\":0,\"reconnectDelay\":0}", "payloadType": "json", "x": 760, "y": 320, "wires": [ [ "83836f37.817158" ] ] }, { "id": "c441ba33.56b788", "type": "OPCUA-IIoT-Connector", "z": "45689007.c2c51", "discoveryUrl": "", "endpoint": "opc.tcp://localhost:55388/", "endpointMustExist": false, "keepSessionAlive": true, "loginEnabled": false, "name": "LOCAL FLEX CONECTOR SERVER", "showErrors": true, "securityPolicy": "None", "securityMode": "None", "publicCertificateFile": "", "privateKeyFile": "", "defaultSecureTokenLifetime": "", "autoSelectRightEndpoint": false, "strategyMaxRetry": "", "strategyInitialDelay": "", "strategyMaxDelay": "", "strategyRandomisationFactor": "", "requestedSessionTimeout": "", "connectionStartDelay": "", "reconnectDelay": "" } ]