@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.
@@ -22,7 +22,7 @@ class OPCUAServerConnector {
22
22
  }
23
23
  });
24
24
  await server.initialize();
25
- integration_base_1.ConnectionManager.logger.log('initialized');
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.log('Server is now listening ... ( press CTRL+C to stop)');
85
- integration_base_1.ConnectionManager.logger.log('port ', server.endpoints[0].port);
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.log(' the primary server endpoint url is ', endpointUrl);
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":"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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.log('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.log('Server is now listening ... ( press CTRL+C to stop)')\n ConnectionManager.logger.log('port ', server.endpoints[0].port)\n const endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl\n ConnectionManager.logger.log(' 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"]}
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.log('retrying connection'));
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.log(browseResult.references.map((r) => r.browseName.toString()).join('\n'));
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.log('subscription started - subscriptionId=', subscription.subscriptionId))
36
- .on('keepalive', () => integration_base_1.ConnectionManager.logger.log('keepalive'))
37
- .on('terminated', () => integration_base_1.ConnectionManager.logger.log('subscription terminated'));
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.log('Could not read ', node);
43
+ logger.info('Could not read ', node);
44
44
  }
45
- logger.log(` dataValue = ${dataValue.value.toString()}`);
45
+ logger.info(` dataValue = ${dataValue.value.toString()}`);
46
46
  return dataValue;
47
47
  },
48
- write: async function (node, value, { logger }) {
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
- statusCode: node_opcua_1.StatusCodes.Good,
54
- sourceTimestamp: new Date(),
55
- value
57
+ value: resultVariant
56
58
  }
57
59
  });
58
- logger.log('statusCode = ', statusCode.toString());
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 content;
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;AAElF,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,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,OAAO,OAAO,CAAA;AAChB,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'\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 = await read(node, { logger })\n return content\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"]}
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
- return await startMonitor(node, callback, {
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;IAC9C,CAAC,CAAA;IAED,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAC7B,OAAO,MAAM,YAAY,CACvB,IAAI,EACJ,QAAQ,EACR;QACE,gBAAgB;QAChB,aAAa;QACb,SAAS;KACV,EACD,EAAE,MAAM,EAAE,CACX,CAAA;AACH,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)\n }\n\n var { startMonitor } = client\n return await startMonitor(\n node,\n callback,\n {\n samplingInterval,\n discardOldest,\n queueSize\n },\n { logger }\n )\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"]}
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
- return await stopMonitor(item, { logger });
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;AAElF,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,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAC5C,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\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 return await stopMonitor(item, { logger })\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"]}
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 content;
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;AAElF,KAAK,UAAU,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IACtD,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC3B,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,KAAK,GAAG,IAAA,cAAM,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAEpC,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IACtB,IAAI,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAElD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,UAAU,CAAC,aAAa,GAAG;IACzB;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;KACd;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;KAClB;CACF,CAAA;AAED,UAAU,CAAC,IAAI,GAAG,+BAA+B,CAAA;AAEjD,+BAAY,CAAC,mBAAmB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA","sourcesContent":["import { access } from '@things-factory/utils'\nimport { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\n\nasync function OPCUAWrite(step, { logger, domain, data }) {\n var {\n connection,\n params: { node, accessor }\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 = await write(node, value, { logger })\n\n return content\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\nOPCUAWrite.help = 'integration/task/opc-ua-write'\n\nTaskRegistry.registerTaskHandler('opc-ua-write', OPCUAWrite)\n"]}
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"]}