@things-factory/integration-opc 6.1.120 → 6.1.123
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/engine/connector/opc-ua-server.js +4 -4
- package/dist-server/engine/connector/opc-ua-server.js.map +1 -1
- package/dist-server/engine/connector/opc-ua.js +15 -12
- package/dist-server/engine/connector/opc-ua.js.map +1 -1
- package/dist-server/engine/task/opc-ua-read.js +6 -1
- package/dist-server/engine/task/opc-ua-read.js.map +1 -1
- package/dist-server/engine/task/opc-ua-start-monitor.js +3 -2
- package/dist-server/engine/task/opc-ua-start-monitor.js.map +1 -1
- package/dist-server/engine/task/opc-ua-stop-monitor.js +4 -1
- package/dist-server/engine/task/opc-ua-stop-monitor.js.map +1 -1
- package/dist-server/engine/task/opc-ua-write.js +45 -3
- package/dist-server/engine/task/opc-ua-write.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/integration/connector/opc-ua-server.ja.md +4 -1
- package/helps/integration/connector/opc-ua-server.ko.md +4 -1
- package/helps/integration/connector/opc-ua-server.md +4 -1
- package/helps/integration/connector/opc-ua-server.ms.md +4 -1
- package/helps/integration/connector/opc-ua-server.zh.md +4 -1
- package/package.json +3 -3
- package/server/engine/connector/opc-ua-server.ts +4 -4
- package/server/engine/connector/opc-ua.ts +19 -13
- package/server/engine/task/opc-ua-read.ts +9 -2
- package/server/engine/task/opc-ua-start-monitor.ts +4 -2
- package/server/engine/task/opc-ua-stop-monitor.ts +7 -1
- package/server/engine/task/opc-ua-write.ts +45 -3
|
@@ -22,7 +22,7 @@ class OPCUAServerConnector {
|
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
await server.initialize();
|
|
25
|
-
integration_base_1.ConnectionManager.logger.
|
|
25
|
+
integration_base_1.ConnectionManager.logger.info('initialized');
|
|
26
26
|
const addressSpace = server.engine.addressSpace;
|
|
27
27
|
const namespace = addressSpace.getOwnNamespace();
|
|
28
28
|
// declare a new object
|
|
@@ -81,10 +81,10 @@ class OPCUAServerConnector {
|
|
|
81
81
|
}
|
|
82
82
|
});
|
|
83
83
|
server.start(function () {
|
|
84
|
-
integration_base_1.ConnectionManager.logger.
|
|
85
|
-
integration_base_1.ConnectionManager.logger.
|
|
84
|
+
integration_base_1.ConnectionManager.logger.info('Server is now listening ... ( press CTRL+C to stop)');
|
|
85
|
+
integration_base_1.ConnectionManager.logger.info('port ', server.endpoints[0].port);
|
|
86
86
|
const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl;
|
|
87
|
-
integration_base_1.ConnectionManager.logger.
|
|
87
|
+
integration_base_1.ConnectionManager.logger.info(' the primary server endpoint url is ', endpointUrl);
|
|
88
88
|
});
|
|
89
89
|
integration_base_1.ConnectionManager.addConnectionInstance(config, server);
|
|
90
90
|
integration_base_1.ConnectionManager.logger.info(`opc-ua-server connection(${config.name}:${port}) is connected`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opc-ua-server.js","sourceRoot":"","sources":["../../../server/engine/connector/opc-ua-server.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AACxE,uEAA2F;AAE3F,MAAa,oBAAoB;IAC/B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEtD,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAM;QAClB,IAAI,EACF,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,IAAI,EAAE,iDAAiD;QACjE,MAAM,EAAE,EACN,YAAY,EAAE,wDAAwD;QACtE,WAAW,EACX,SAAS,EACV,EACF,GAAG,MAAM,CAAA;QAEV,MAAM,MAAM,GAAG,IAAI,wBAAW,CAAC;YAC7B,IAAI;YACJ,YAAY;YACZ,SAAS,EAAE;gBACT,WAAW;gBACX,WAAW;gBACX,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;aACxD;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;QACzB,oCAAiB,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"opc-ua-server.js","sourceRoot":"","sources":["../../../server/engine/connector/opc-ua-server.ts"],"names":[],"mappings":"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","sourcesContent":["import { StatusCodes, OPCUAServer, Variant, DataType } from 'node-opcua'\nimport { ConnectionManager, Connector, Connection } from '@things-factory/integration-base'\n\nexport class OPCUAServerConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('opc-ua-servers are ready')\n }\n\n async connect(config) {\n var {\n name: productName,\n endpoint: port, // the port of the listening socket of the server\n params: {\n resourcePath, // this path will be added to the endpoint resource name\n buildNumber,\n buildDate\n }\n } = config\n\n const server = new OPCUAServer({\n port,\n resourcePath,\n buildInfo: {\n productName,\n buildNumber,\n buildDate: buildDate ? new Date(buildDate) : new Date()\n }\n })\n\n await server.initialize()\n ConnectionManager.logger.info('initialized')\n\n const addressSpace = server.engine.addressSpace\n const namespace = addressSpace.getOwnNamespace()\n\n // declare a new object\n const device = namespace.addObject({\n organizedBy: addressSpace.rootFolder.objects,\n browseName: 'MyDevice'\n })\n\n // add some variables\n // add a variable named MyVariable1 to the newly created folder \"MyDevice\"\n let variable1 = 1\n\n // emulate variable1 changing every 500 ms\n setInterval(() => {\n variable1 += 1\n }, 500)\n\n namespace.addVariable({\n componentOf: device,\n browseName: 'MyVariable1',\n dataType: 'Double',\n value: {\n get: () => new Variant({ dataType: DataType.Double, value: variable1 })\n }\n })\n\n // add a variable named MyVariable2 to the newly created folder \"MyDevice\"\n let variable2 = 10.0\n\n namespace.addVariable({\n componentOf: device,\n nodeId: 'ns=1;b=1020FFAA', // some opaque NodeId in namespace 4\n browseName: 'MyVariable2',\n dataType: 'Double',\n minimumSamplingInterval: 1234, // we need to specify a minimumSamplingInterval when using a getter\n value: {\n get: () => new Variant({ dataType: DataType.Double, value: variable2 }),\n set: variant => {\n variable2 = parseFloat(variant.value)\n return StatusCodes.Good\n }\n }\n })\n const os = require('os')\n /**\n * returns the percentage of free memory on the running machine\n * @return {double}\n */\n function available_memory() {\n // var value = process.memoryUsage().heapUsed / 1000000;\n const percentageMemUsed = (os.freemem() / os.totalmem()) * 100.0\n return percentageMemUsed\n }\n namespace.addVariable({\n componentOf: device,\n\n nodeId: 's=free_memory', // a string nodeID\n browseName: 'FreeMemory',\n dataType: 'Double',\n value: {\n get: () => new Variant({ dataType: DataType.Double, value: available_memory() })\n }\n })\n\n server.start(function () {\n ConnectionManager.logger.info('Server is now listening ... ( press CTRL+C to stop)')\n ConnectionManager.logger.info('port ', server.endpoints[0].port)\n const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl\n ConnectionManager.logger.info(' the primary server endpoint url is ', endpointUrl)\n })\n\n ConnectionManager.addConnectionInstance(config, server)\n\n ConnectionManager.logger.info(`opc-ua-server connection(${config.name}:${port}) is connected`)\n }\n\n async disconnect(connection: Connection) {\n var server = ConnectionManager.removeConnectionInstance(connection)\n server && server._server.close()\n\n ConnectionManager.logger.info(`opc-ua-server connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'port',\n label: 'port'\n },\n {\n type: 'string',\n name: 'productName',\n label: 'product-name'\n },\n {\n type: 'string',\n name: 'buildNumber',\n label: 'build-number'\n },\n {\n type: 'string',\n name: 'buildDate',\n label: 'build-date'\n }\n ]\n }\n}\n\nConnectionManager.registerConnector('opc-ua-server', new OPCUAServerConnector())\n"]}
|
|
@@ -18,11 +18,11 @@ class OPCUAConnector {
|
|
|
18
18
|
maxDelay
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
|
-
client.on('backoff', () => integration_base_1.ConnectionManager.logger.
|
|
21
|
+
client.on('backoff', () => integration_base_1.ConnectionManager.logger.info('retrying connection'));
|
|
22
22
|
await client.connect(endpoint);
|
|
23
23
|
const session = await client.createSession();
|
|
24
24
|
const browseResult = (await session.browse('RootFolder'));
|
|
25
|
-
integration_base_1.ConnectionManager.logger.
|
|
25
|
+
integration_base_1.ConnectionManager.logger.info(browseResult.references.map((r) => r.browseName.toString()).join('\n'));
|
|
26
26
|
const subscription = await session.createSubscription2({
|
|
27
27
|
requestedPublishingInterval,
|
|
28
28
|
requestedLifetimeCount,
|
|
@@ -32,30 +32,32 @@ class OPCUAConnector {
|
|
|
32
32
|
priority
|
|
33
33
|
});
|
|
34
34
|
subscription
|
|
35
|
-
.on('started', () => integration_base_1.ConnectionManager.logger.
|
|
36
|
-
.on('keepalive', () => integration_base_1.ConnectionManager.logger.
|
|
37
|
-
.on('terminated', () => integration_base_1.ConnectionManager.logger.
|
|
35
|
+
.on('started', () => integration_base_1.ConnectionManager.logger.info('subscription started - subscriptionId=', subscription.subscriptionId))
|
|
36
|
+
.on('keepalive', () => integration_base_1.ConnectionManager.logger.info('keepalive'))
|
|
37
|
+
.on('terminated', () => integration_base_1.ConnectionManager.logger.info('subscription terminated'));
|
|
38
38
|
try {
|
|
39
39
|
integration_base_1.ConnectionManager.addConnectionInstance(config, {
|
|
40
40
|
read: async function (node, { logger }) {
|
|
41
41
|
const dataValue = await session.read({ nodeId: node, attributeId: node_opcua_1.AttributeIds.Value });
|
|
42
42
|
if (dataValue.statusCode !== node_opcua_1.StatusCodes.Good) {
|
|
43
|
-
logger.
|
|
43
|
+
logger.info('Could not read ', node);
|
|
44
44
|
}
|
|
45
|
-
logger.
|
|
45
|
+
logger.info(` dataValue = ${dataValue.value.toString()}`);
|
|
46
46
|
return dataValue;
|
|
47
47
|
},
|
|
48
|
-
write: async function (node,
|
|
48
|
+
write: async function (node, dataValue, dataType, { logger }) {
|
|
49
|
+
const resultVariant = new node_opcua_1.Variant({
|
|
50
|
+
dataType,
|
|
51
|
+
value: dataValue
|
|
52
|
+
});
|
|
49
53
|
const statusCode = await session.write({
|
|
50
54
|
nodeId: node,
|
|
51
55
|
attributeId: node_opcua_1.AttributeIds.Value,
|
|
52
56
|
value: {
|
|
53
|
-
|
|
54
|
-
sourceTimestamp: new Date(),
|
|
55
|
-
value
|
|
57
|
+
value: resultVariant
|
|
56
58
|
}
|
|
57
59
|
});
|
|
58
|
-
logger.
|
|
60
|
+
logger.info('statusCode = ', statusCode.name);
|
|
59
61
|
return statusCode;
|
|
60
62
|
},
|
|
61
63
|
startMonitor: async function (node, callback, options, { logger }) {
|
|
@@ -73,6 +75,7 @@ class OPCUAConnector {
|
|
|
73
75
|
},
|
|
74
76
|
stopMonitor: async function (monitoredItem, { logger }) {
|
|
75
77
|
await monitoredItem.terminate();
|
|
78
|
+
return monitoredItem;
|
|
76
79
|
},
|
|
77
80
|
close: async function () {
|
|
78
81
|
await (subscription === null || subscription === void 0 ? void 0 : subscription.terminate());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opc-ua.js","sourceRoot":"","sources":["../../../server/engine/connector/opc-ua.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OPCUAClient,\n BrowseResult,\n ReferenceDescription,\n AttributeIds,\n StatusCodes,\n TimestampsToReturn,\n DataValue,\n StatusCode,\n ClientMonitoredItem\n} from 'node-opcua'\n\nimport { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class OPCUAConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('opc-ua connections are ready')\n }\n\n async connect(config) {\n var {\n name,\n endpoint,\n params: {\n maxRetry = 2,\n initialDelay = 2000,\n maxDelay = 10 * 1000,\n requestedPublishingInterval = 1000,\n requestedLifetimeCount = 100,\n requestedMaxKeepAliveCount = 20,\n maxNotificationsPerPublish = 10,\n publishingEnabled = true,\n priority = 10\n }\n } = config\n\n const client = OPCUAClient.create({\n endpoint_must_exist: false,\n connectionStrategy: {\n maxRetry,\n initialDelay,\n maxDelay\n }\n })\n\n client.on('backoff', () => ConnectionManager.logger.log('retrying connection'))\n\n await client.connect(endpoint)\n\n const session = await client.createSession()\n\n const browseResult: BrowseResult = (await session.browse('RootFolder')) as BrowseResult\n\n ConnectionManager.logger.log(\n browseResult.references.map((r: ReferenceDescription) => r.browseName.toString()).join('\\n')\n )\n\n const subscription = await session.createSubscription2({\n requestedPublishingInterval,\n requestedLifetimeCount,\n requestedMaxKeepAliveCount,\n maxNotificationsPerPublish,\n publishingEnabled,\n priority\n })\n\n subscription\n .on('started', () =>\n ConnectionManager.logger.log('subscription started - subscriptionId=', subscription.subscriptionId)\n )\n .on('keepalive', () => ConnectionManager.logger.log('keepalive'))\n .on('terminated', () => ConnectionManager.logger.log('subscription terminated'))\n\n try {\n ConnectionManager.addConnectionInstance(config, {\n read: async function (node, { logger }): Promise<DataValue> {\n const dataValue = await session.read({ nodeId: node, attributeId: AttributeIds.Value })\n if (dataValue.statusCode !== StatusCodes.Good) {\n logger.log('Could not read ', node)\n }\n logger.log(` dataValue = ${dataValue.value.toString()}`)\n\n return dataValue\n },\n write: async function (node, value, { logger }): Promise<StatusCode> {\n const statusCode = await session.write({\n nodeId: node,\n attributeId: AttributeIds.Value,\n value: {\n statusCode: StatusCodes.Good,\n sourceTimestamp: new Date(),\n value\n }\n })\n\n logger.log('statusCode = ', statusCode.toString())\n return statusCode\n },\n startMonitor: async function (\n node,\n callback: (dataValue: DataValue) => void,\n options: { samplingInterval: number; discardOldest: boolean; queueSize: number },\n { logger }\n ): Promise<ClientMonitoredItem> {\n const { samplingInterval = 100, discardOldest = true, queueSize = 10 } = options || {}\n const monitoredItem = await subscription.monitor(\n {\n nodeId: node,\n attributeId: AttributeIds.Value\n },\n {\n samplingInterval,\n discardOldest,\n queueSize\n },\n TimestampsToReturn.Both\n )\n\n monitoredItem.on('changed', callback)\n return monitoredItem\n },\n stopMonitor: async function (monitoredItem, { logger }): Promise<void> {\n await monitoredItem.terminate()\n },\n close: async function (): Promise<void> {\n await subscription?.terminate()\n await session?.close()\n await client?.disconnect()\n }\n })\n\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) is connected`)\n } catch (error) {\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) failed to connect`)\n }\n }\n\n async disconnect(connection: Connection) {\n var { close } = ConnectionManager.removeConnectionInstance(connection)\n await close()\n\n ConnectionManager.logger.info(`opc-ua connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'maxRetry',\n label: 'max-retry'\n },\n {\n type: 'number',\n name: 'initialDelay',\n label: 'initial-delay'\n },\n {\n type: 'number',\n name: 'maxDelay',\n label: 'max-delay'\n },\n {\n type: 'number',\n name: 'requestedPublishingInterval',\n label: 'requested-publishing-interval'\n },\n {\n type: 'number',\n name: 'requestedLifetimeCount',\n label: 'requested-lifetime-count'\n },\n {\n type: 'number',\n name: 'requestedMaxKeepAliveCount',\n label: 'requested-max-keep-alive-count'\n },\n {\n type: 'number',\n name: 'maxNotificationsPerPublish',\n label: 'max-notifications-per-publish'\n },\n {\n type: 'boolean',\n name: 'publishingEnabled',\n label: 'publishing-enabled'\n },\n {\n type: 'number',\n name: 'priority',\n label: 'priority'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['opc-ua']\n }\n\n get help() {\n return 'integration/connector/opc-ua'\n }\n}\n\nConnectionManager.registerConnector('opc-ua', new OPCUAConnector())\n"]}
|
|
1
|
+
{"version":3,"file":"opc-ua.js","sourceRoot":"","sources":["../../../server/engine/connector/opc-ua.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OPCUAClient,\n BrowseResult,\n ReferenceDescription,\n AttributeIds,\n StatusCodes,\n TimestampsToReturn,\n DataValue,\n DataType,\n StatusCode,\n ClientMonitoredItem,\n Variant\n} from 'node-opcua'\n\nimport { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class OPCUAConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('opc-ua connections are ready')\n }\n\n async connect(config) {\n var {\n name,\n endpoint,\n params: {\n maxRetry = 2,\n initialDelay = 2000,\n maxDelay = 10 * 1000,\n requestedPublishingInterval = 1000,\n requestedLifetimeCount = 100,\n requestedMaxKeepAliveCount = 20,\n maxNotificationsPerPublish = 10,\n publishingEnabled = true,\n priority = 10\n }\n } = config\n\n const client = OPCUAClient.create({\n endpoint_must_exist: false,\n connectionStrategy: {\n maxRetry,\n initialDelay,\n maxDelay\n }\n })\n\n client.on('backoff', () => ConnectionManager.logger.info('retrying connection'))\n\n await client.connect(endpoint)\n\n const session = await client.createSession()\n\n const browseResult: BrowseResult = (await session.browse('RootFolder')) as BrowseResult\n\n ConnectionManager.logger.info(\n browseResult.references.map((r: ReferenceDescription) => r.browseName.toString()).join('\\n')\n )\n\n const subscription = await session.createSubscription2({\n requestedPublishingInterval,\n requestedLifetimeCount,\n requestedMaxKeepAliveCount,\n maxNotificationsPerPublish,\n publishingEnabled,\n priority\n })\n\n subscription\n .on('started', () =>\n ConnectionManager.logger.info('subscription started - subscriptionId=', subscription.subscriptionId)\n )\n .on('keepalive', () => ConnectionManager.logger.info('keepalive'))\n .on('terminated', () => ConnectionManager.logger.info('subscription terminated'))\n\n try {\n ConnectionManager.addConnectionInstance(config, {\n read: async function (node, { logger }): Promise<DataValue> {\n const dataValue = await session.read({ nodeId: node, attributeId: AttributeIds.Value })\n if (dataValue.statusCode !== StatusCodes.Good) {\n logger.info('Could not read ', node)\n }\n logger.info(` dataValue = ${dataValue.value.toString()}`)\n\n return dataValue\n },\n write: async function (node, dataValue, dataType, { logger }): Promise<StatusCode> {\n const resultVariant = new Variant({\n dataType,\n value: dataValue\n })\n\n const statusCode = await session.write({\n nodeId: node,\n attributeId: AttributeIds.Value,\n value: {\n value: resultVariant\n }\n })\n\n logger.info('statusCode = ', statusCode.name)\n return statusCode\n },\n startMonitor: async function (\n node,\n callback: (dataValue: DataValue) => void,\n options: { samplingInterval: number; discardOldest: boolean; queueSize: number },\n { logger }\n ): Promise<ClientMonitoredItem> {\n const { samplingInterval = 100, discardOldest = true, queueSize = 10 } = options || {}\n const monitoredItem = await subscription.monitor(\n {\n nodeId: node,\n attributeId: AttributeIds.Value\n },\n {\n samplingInterval,\n discardOldest,\n queueSize\n },\n TimestampsToReturn.Both\n )\n\n monitoredItem.on('changed', callback)\n return monitoredItem\n },\n stopMonitor: async function (monitoredItem, { logger }): Promise<void> {\n await monitoredItem.terminate()\n return monitoredItem\n },\n close: async function (): Promise<void> {\n await subscription?.terminate()\n await session?.close()\n await client?.disconnect()\n }\n })\n\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) is connected`)\n } catch (error) {\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) failed to connect`)\n }\n }\n\n async disconnect(connection: Connection) {\n var { close } = ConnectionManager.removeConnectionInstance(connection)\n await close()\n\n ConnectionManager.logger.info(`opc-ua connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'maxRetry',\n label: 'max-retry'\n },\n {\n type: 'number',\n name: 'initialDelay',\n label: 'initial-delay'\n },\n {\n type: 'number',\n name: 'maxDelay',\n label: 'max-delay'\n },\n {\n type: 'number',\n name: 'requestedPublishingInterval',\n label: 'requested-publishing-interval'\n },\n {\n type: 'number',\n name: 'requestedLifetimeCount',\n label: 'requested-lifetime-count'\n },\n {\n type: 'number',\n name: 'requestedMaxKeepAliveCount',\n label: 'requested-max-keep-alive-count'\n },\n {\n type: 'number',\n name: 'maxNotificationsPerPublish',\n label: 'max-notifications-per-publish'\n },\n {\n type: 'boolean',\n name: 'publishingEnabled',\n label: 'publishing-enabled'\n },\n {\n type: 'number',\n name: 'priority',\n label: 'priority'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['opc-ua']\n }\n\n get help() {\n return 'integration/connector/opc-ua'\n }\n}\n\nConnectionManager.registerConnector('opc-ua', new OPCUAConnector())\n"]}
|
|
@@ -12,7 +12,12 @@ async function OPCUARead(step, { logger, domain }) {
|
|
|
12
12
|
}
|
|
13
13
|
var { read } = client;
|
|
14
14
|
var content = await read(node, { logger });
|
|
15
|
-
return
|
|
15
|
+
return {
|
|
16
|
+
data: {
|
|
17
|
+
dataType: content === null || content === void 0 ? void 0 : content.value.dataType,
|
|
18
|
+
value: content === null || content === void 0 ? void 0 : content.value.value
|
|
19
|
+
}
|
|
20
|
+
};
|
|
16
21
|
}
|
|
17
22
|
OPCUARead.parameterSpec = [
|
|
18
23
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opc-ua-read.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-read.ts"],"names":[],"mappings":";;AAAA,uEAAkF;
|
|
1
|
+
{"version":3,"file":"opc-ua-read.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-read.ts"],"names":[],"mappings":";;AAAA,uEAAkF;AAGlF,KAAK,UAAU,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAC/C,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,IAAI,EAAE,EACjB,GAAG,IAAI,CAAA;IAER,IAAI,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9E,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;KACpD;IAED,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IACrB,IAAI,OAAO,GAAc,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAErD,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,QAAQ;YACjC,KAAK,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,KAAK;SAC5B;KACF,CAAA;AACH,CAAC;AAED,SAAS,CAAC,aAAa,GAAG;IACxB;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;KACd;CACF,CAAA;AAED,SAAS,CAAC,IAAI,GAAG,8BAA8B,CAAA;AAE/C,+BAAY,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA","sourcesContent":["import { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\nimport { DataValue } from 'node-opcua'\n\nasync function OPCUARead(step, { logger, domain }) {\n var {\n connection,\n params: { node }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n if (!node) {\n throw new Error('node parameter should be defined')\n }\n\n var { read } = client\n var content: DataValue = await read(node, { logger })\n\n return {\n data: {\n dataType: content?.value.dataType,\n value: content?.value.value\n }\n }\n}\n\nOPCUARead.parameterSpec = [\n {\n type: 'string',\n name: 'node',\n label: 'node'\n }\n]\n\nOPCUARead.help = 'integration/task/opc-ua-read'\n\nTaskRegistry.registerTaskHandler('opc-ua-read', OPCUARead)\n"]}
|
|
@@ -8,14 +8,15 @@ async function OPCUAStartMonitor(step, { logger, domain, data }) {
|
|
|
8
8
|
throw new Error(`no connection : ${connection}`);
|
|
9
9
|
}
|
|
10
10
|
const callback = (dataValue) => {
|
|
11
|
-
logger.log('monitored value: %s', dataValue);
|
|
11
|
+
logger.log('monitored value: %s', dataValue === null || dataValue === void 0 ? void 0 : dataValue.value.value);
|
|
12
12
|
};
|
|
13
13
|
var { startMonitor } = client;
|
|
14
|
-
|
|
14
|
+
var monitoredItem = await startMonitor(node, callback, {
|
|
15
15
|
samplingInterval,
|
|
16
16
|
discardOldest,
|
|
17
17
|
queueSize
|
|
18
18
|
}, { logger });
|
|
19
|
+
return { data: monitoredItem };
|
|
19
20
|
}
|
|
20
21
|
OPCUAStartMonitor.parameterSpec = [
|
|
21
22
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opc-ua-start-monitor.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-start-monitor.ts"],"names":[],"mappings":";;AAAA,uEAAkF;AAGlF,KAAK,UAAU,iBAAiB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7D,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,EAC7D,GAAG,IAAI,CAAA;IAER,IAAI,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9E,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,MAAM,QAAQ,GAAG,CAAC,SAAoB,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"opc-ua-start-monitor.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-start-monitor.ts"],"names":[],"mappings":";;AAAA,uEAAkF;AAGlF,KAAK,UAAU,iBAAiB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7D,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,EAC7D,GAAG,IAAI,CAAA;IAER,IAAI,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9E,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,MAAM,QAAQ,GAAG,CAAC,SAAoB,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3D,CAAC,CAAA;IAED,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAC7B,IAAI,aAAa,GAAG,MAAM,YAAY,CACpC,IAAI,EACJ,QAAQ,EACR;QACE,gBAAgB;QAChB,aAAa;QACb,SAAS;KACV,EACD,EAAE,MAAM,EAAE,CACX,CAAA;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;AAChC,CAAC;AAED,iBAAiB,CAAC,aAAa,GAAG;IAChC;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;KACd;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,mBAAmB;KAC3B;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,gBAAgB;KACxB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;KACpB;CACF,CAAA;AAED,iBAAiB,CAAC,IAAI,GAAG,uCAAuC,CAAA;AAEhE,+BAAY,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAA","sourcesContent":["import { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\nimport { DataValue } from 'node-opcua'\n\nasync function OPCUAStartMonitor(step, { logger, domain, data }) {\n var {\n connection,\n params: { node, samplingInterval, discardOldest, queueSize }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n const callback = (dataValue: DataValue) => {\n logger.log('monitored value: %s', dataValue?.value.value)\n }\n\n var { startMonitor } = client\n var monitoredItem = await startMonitor(\n node,\n callback,\n {\n samplingInterval,\n discardOldest,\n queueSize\n },\n { logger }\n )\n\n return { data: monitoredItem }\n}\n\nOPCUAStartMonitor.parameterSpec = [\n {\n type: 'string',\n name: 'node',\n label: 'node'\n },\n {\n type: 'number',\n name: 'samplingInterval',\n label: 'sampling-interval'\n },\n {\n type: 'boolean',\n name: 'discardOldest',\n label: 'discard-oldest'\n },\n {\n type: 'number',\n name: 'queueSize',\n label: 'queue-size'\n }\n]\n\nOPCUAStartMonitor.help = 'integration/task/opc-ua-start-monitor'\n\nTaskRegistry.registerTaskHandler('opc-ua-start-monitor', OPCUAStartMonitor)\n"]}
|
|
@@ -10,7 +10,10 @@ async function OPCUAStopMonitor(step, { logger, domain, data }) {
|
|
|
10
10
|
}
|
|
11
11
|
const item = (0, utils_1.access)(monitorItem, data);
|
|
12
12
|
var { stopMonitor } = client;
|
|
13
|
-
|
|
13
|
+
var monitoredItem = await stopMonitor(item, { logger });
|
|
14
|
+
return {
|
|
15
|
+
data: monitoredItem.statusCode
|
|
16
|
+
};
|
|
14
17
|
}
|
|
15
18
|
OPCUAStopMonitor.parameterSpec = [
|
|
16
19
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opc-ua-stop-monitor.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-stop-monitor.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAC9C,uEAAkF;
|
|
1
|
+
{"version":3,"file":"opc-ua-stop-monitor.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-stop-monitor.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAC9C,uEAAkF;AAIlF,KAAK,UAAU,gBAAgB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5D,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,WAAW,EAAE,EACxB,GAAG,IAAI,CAAA;IAER,IAAI,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9E,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,MAAM,IAAI,GAAG,IAAA,cAAM,EAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAEtC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAC5B,IAAI,aAAa,GAAwB,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAE5E,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,UAAU;KAC/B,CAAA;AACH,CAAC;AAED,gBAAgB,CAAC,aAAa,GAAG;IAC/B;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;KACtB;CACF,CAAA;AAED,gBAAgB,CAAC,IAAI,GAAG,sCAAsC,CAAA;AAE9D,+BAAY,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAA","sourcesContent":["import { access } from '@things-factory/utils'\nimport { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\n\nimport { ClientMonitoredItem } from 'node-opcua'\n\nasync function OPCUAStopMonitor(step, { logger, domain, data }) {\n var {\n connection,\n params: { monitorItem }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n const item = access(monitorItem, data)\n\n var { stopMonitor } = client\n var monitoredItem: ClientMonitoredItem = await stopMonitor(item, { logger })\n\n return {\n data: monitoredItem.statusCode\n }\n}\n\nOPCUAStopMonitor.parameterSpec = [\n {\n type: 'scenario-step-input',\n name: 'monitorItem',\n label: 'monitor-item'\n }\n]\n\nOPCUAStopMonitor.help = 'integration/task/opc-ua-stop-monitor'\n\nTaskRegistry.registerTaskHandler('opc-ua-stop-monitor', OPCUAStopMonitor)\n"]}
|
|
@@ -2,16 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("@things-factory/utils");
|
|
4
4
|
const integration_base_1 = require("@things-factory/integration-base");
|
|
5
|
+
const node_opcua_1 = require("node-opcua");
|
|
5
6
|
async function OPCUAWrite(step, { logger, domain, data }) {
|
|
6
|
-
var { connection, params: { node, accessor } } = step;
|
|
7
|
+
var { connection, params: { node, accessor, type } } = step;
|
|
7
8
|
var client = integration_base_1.ConnectionManager.getConnectionInstanceByName(domain, connection);
|
|
8
9
|
if (!client) {
|
|
9
10
|
throw new Error(`no connection : ${connection}`);
|
|
10
11
|
}
|
|
11
12
|
const value = (0, utils_1.access)(accessor, data);
|
|
12
13
|
var { write } = client;
|
|
13
|
-
var content = await write(node, value, { logger });
|
|
14
|
-
return
|
|
14
|
+
var content = await write(node, value, type, { logger });
|
|
15
|
+
return {
|
|
16
|
+
data: {
|
|
17
|
+
name: content.name,
|
|
18
|
+
description: content.description,
|
|
19
|
+
result: content.isGood()
|
|
20
|
+
}
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
23
|
OPCUAWrite.parameterSpec = [
|
|
17
24
|
{
|
|
@@ -23,6 +30,41 @@ OPCUAWrite.parameterSpec = [
|
|
|
23
30
|
type: 'scenario-step-input',
|
|
24
31
|
name: 'accessor',
|
|
25
32
|
label: 'accessor'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: 'select',
|
|
36
|
+
label: 'type',
|
|
37
|
+
name: 'type',
|
|
38
|
+
property: {
|
|
39
|
+
options: [
|
|
40
|
+
{ display: 'Null', value: node_opcua_1.DataType.Null },
|
|
41
|
+
{ display: 'Boolean', value: node_opcua_1.DataType.Boolean },
|
|
42
|
+
{ display: 'SByte', value: node_opcua_1.DataType.SByte },
|
|
43
|
+
{ display: 'Byte', value: node_opcua_1.DataType.Byte },
|
|
44
|
+
{ display: 'Int16', value: node_opcua_1.DataType.Int16 },
|
|
45
|
+
{ display: 'UInt16', value: node_opcua_1.DataType.UInt16 },
|
|
46
|
+
{ display: 'Int32', value: node_opcua_1.DataType.Int32 },
|
|
47
|
+
{ display: 'UInt32', value: node_opcua_1.DataType.UInt32 },
|
|
48
|
+
{ display: 'Int64', value: node_opcua_1.DataType.Int64 },
|
|
49
|
+
{ display: 'UInt64', value: node_opcua_1.DataType.UInt64 },
|
|
50
|
+
{ display: 'Float', value: node_opcua_1.DataType.Float },
|
|
51
|
+
{ display: 'Double', value: node_opcua_1.DataType.Double },
|
|
52
|
+
{ display: 'String', value: node_opcua_1.DataType.String },
|
|
53
|
+
{ display: 'DateTime', value: node_opcua_1.DataType.DateTime },
|
|
54
|
+
{ display: 'Guid', value: node_opcua_1.DataType.Guid },
|
|
55
|
+
{ display: 'ByteString', value: node_opcua_1.DataType.ByteString },
|
|
56
|
+
{ display: 'XmlElement', value: node_opcua_1.DataType.XmlElement },
|
|
57
|
+
{ display: 'NodeId', value: node_opcua_1.DataType.NodeId },
|
|
58
|
+
{ display: 'ExpandedNodeId', value: node_opcua_1.DataType.ExpandedNodeId },
|
|
59
|
+
{ display: 'StatusCode', value: node_opcua_1.DataType.StatusCode },
|
|
60
|
+
{ display: 'QualifiedName', value: node_opcua_1.DataType.QualifiedName },
|
|
61
|
+
{ display: 'LocalizedText', value: node_opcua_1.DataType.LocalizedText },
|
|
62
|
+
{ display: 'ExtensionObject', value: node_opcua_1.DataType.ExtensionObject },
|
|
63
|
+
{ display: 'Variant', value: node_opcua_1.DataType.Variant },
|
|
64
|
+
{ display: 'DataValue', value: node_opcua_1.DataType.DataValue },
|
|
65
|
+
{ display: 'DiagnosticInfo', value: node_opcua_1.DataType.DiagnosticInfo }
|
|
66
|
+
]
|
|
67
|
+
}
|
|
26
68
|
}
|
|
27
69
|
];
|
|
28
70
|
OPCUAWrite.help = 'integration/task/opc-ua-write';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opc-ua-write.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-write.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAC9C,uEAAkF;
|
|
1
|
+
{"version":3,"file":"opc-ua-write.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-write.ts"],"names":[],"mappings":"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","sourcesContent":["import { access } from '@things-factory/utils'\nimport { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\nimport { StatusCode, DataType } from 'node-opcua'\n\nasync function OPCUAWrite(step, { logger, domain, data }) {\n var {\n connection,\n params: { node, accessor, type }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n const value = access(accessor, data)\n\n var { write } = client\n var content: StatusCode = await write(node, value, type, { logger })\n\n return {\n data: {\n name: content.name,\n description: content.description,\n result: content.isGood()\n }\n }\n}\n\nOPCUAWrite.parameterSpec = [\n {\n type: 'string',\n name: 'node',\n label: 'node'\n },\n {\n type: 'scenario-step-input',\n name: 'accessor',\n label: 'accessor'\n },\n {\n type: 'select',\n label: 'type',\n name: 'type',\n property: {\n options: [\n { display: 'Null', value: DataType.Null },\n { display: 'Boolean', value: DataType.Boolean },\n { display: 'SByte', value: DataType.SByte },\n { display: 'Byte', value: DataType.Byte },\n { display: 'Int16', value: DataType.Int16 },\n { display: 'UInt16', value: DataType.UInt16 },\n { display: 'Int32', value: DataType.Int32 },\n { display: 'UInt32', value: DataType.UInt32 },\n { display: 'Int64', value: DataType.Int64 },\n { display: 'UInt64', value: DataType.UInt64 },\n { display: 'Float', value: DataType.Float },\n { display: 'Double', value: DataType.Double },\n { display: 'String', value: DataType.String },\n { display: 'DateTime', value: DataType.DateTime },\n { display: 'Guid', value: DataType.Guid },\n { display: 'ByteString', value: DataType.ByteString },\n { display: 'XmlElement', value: DataType.XmlElement },\n { display: 'NodeId', value: DataType.NodeId },\n { display: 'ExpandedNodeId', value: DataType.ExpandedNodeId },\n { display: 'StatusCode', value: DataType.StatusCode },\n { display: 'QualifiedName', value: DataType.QualifiedName },\n { display: 'LocalizedText', value: DataType.LocalizedText },\n { display: 'ExtensionObject', value: DataType.ExtensionObject },\n { display: 'Variant', value: DataType.Variant },\n { display: 'DataValue', value: DataType.DataValue },\n { display: 'DiagnosticInfo', value: DataType.DiagnosticInfo }\n ]\n }\n }\n]\n\nOPCUAWrite.help = 'integration/task/opc-ua-write'\n\nTaskRegistry.registerTaskHandler('opc-ua-write', OPCUAWrite)\n"]}
|