@vitormnm/node-red-simple-opcua 1.4.1 → 1.4.3

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.
Files changed (32) hide show
  1. package/README.md +5 -0
  2. package/client/icons/opcua.svg +132 -132
  3. package/client/lib/opcua-client-browser.js +330 -330
  4. package/client/lib/opcua-client-method-service.js +88 -88
  5. package/client/lib/opcua-client-read-service.js +15 -15
  6. package/client/lib/opcua-client-subscription-id-service.js +24 -24
  7. package/client/lib/opcua-client-subscription-service.js +170 -170
  8. package/client/lib/opcua-client-write-service.js +146 -146
  9. package/client/opcua-client-config.html +80 -80
  10. package/client/opcua-client.html +140 -140
  11. package/client/opcua-client.js +1 -7
  12. package/client/view/opcua-client.js +1140 -1140
  13. package/icons/opcua.svg +132 -132
  14. package/icons/opcua2.svg +132 -132
  15. package/package.json +42 -42
  16. package/resources/bmc-button.svg +22 -0
  17. package/server/icons/opcua.svg +132 -132
  18. package/server/lib/opcua-address-space-alarm.js +341 -341
  19. package/server/lib/opcua-address-space-builder.js +1484 -1484
  20. package/server/lib/opcua-config.js +546 -546
  21. package/server/lib/opcua-constants.js +109 -109
  22. package/server/lib/opcua-server-events-child.js +139 -139
  23. package/server/lib/opcua-server-runtime-child.js +819 -819
  24. package/server/lib/opcua-server-runtime.js +311 -311
  25. package/server/lib/opcua-server-status-child.js +187 -187
  26. package/server/lib/server-node-utils.js +16 -16
  27. package/server/opcua-server-io.html +346 -346
  28. package/server/opcua-server-io.js +496 -496
  29. package/server/opcua-server-registry.js +270 -270
  30. package/server/opcua-server.css +265 -265
  31. package/server/opcua-server.html +1643 -1643
  32. package/client/testClient.json +0 -18
@@ -1,188 +1,188 @@
1
- "use strict";
2
-
3
-
4
- const registry = require("../opcua-server-registry");
5
- const { resolveRegisteredServer } = require("./server-node-utils");
6
-
7
- function OpcUaServerStatusNode(node, msg, nodeId) {
8
-
9
- try {
10
- const serverNode = resolveRegisteredServer(node, msg, registry);
11
- const snapshot = buildServerSnapshot(serverNode);
12
-
13
- msg.payload = snapshot;
14
- msg.opcua = msg.opcua || {};
15
- msg.opcua.server = snapshot.identity.serverRef;
16
- msg.opcua.endpointUrl = snapshot.endpointUrl;
17
-
18
-
19
-
20
- process.send({
21
- type: "status",
22
- data: {
23
- fill: "green",
24
- shape: "dot",
25
- text: "sessions " + snapshot.counters.currentSessionCount
26
- },
27
- nodeId: nodeId
28
- });
29
-
30
- process.send({
31
- type: "send",
32
- data: msg,
33
- nodeId: nodeId
34
- });
35
-
36
-
37
- } catch (error) {
38
- //console.error("function OpcUaServerStatusNode" + error);
39
- //console.error({ fill: "red", shape: "ring", text: "status failed" });
40
-
41
- process.send({
42
- type: "status",
43
- data: {
44
- fill: "red",
45
- shape: "ring",
46
- text: "Status: " + error
47
- },
48
- nodeId: nodeId
49
- });
50
- // done(error);
51
- }
52
-
53
- }
54
-
55
- function buildServerSnapshot(serverNode) {
56
-
57
- const server = serverNode.server;
58
- const primaryEndpoint = Array.isArray(server.endpoints) && server.endpoints.length
59
- ? server.endpoints[0]
60
- : null;
61
-
62
- return {
63
- identity: {
64
- id: serverNode.id || "",
65
- name: serverNode.name || "",
66
- serverName: serverNode.serverName || "",
67
- serverRef: serverNode.name || serverNode.serverName || serverNode.id || ""
68
- },
69
- state: safeCall(server, "getServerState", ""),
70
- endpointUrl: resolveEndpointUrl(serverNode),
71
- counters: {
72
- currentChannelCount: safeNumber(server.currentChannelCount, 0),
73
- currentSessionCount: safeNumber(server.currentSessionCount, 0),
74
- currentSubscriptionCount: safeNumber(server.currentSubscriptionCount, 0),
75
- bytesRead: safeNumber(server.bytesRead, 0),
76
- bytesWritten: safeNumber(server.bytesWritten, 0),
77
- transactionsCount: safeNumber(server.transactionsCount, 0),
78
- rejectedRequestsCount: safeNumber(server.rejectedRequestsCount, 0),
79
- rejectedSessionCount: safeNumber(server.rejectedSessionCount, 0),
80
- sessionAbortCount: safeNumber(server.sessionAbortCount, 0),
81
- publishingIntervalCount: safeNumber(server.publishingIntervalCount, 0),
82
- securityTokenCount: primaryEndpoint ? safeNumber(primaryEndpoint.securityTokenCount, 0) : 0,
83
- activeChannelCount: primaryEndpoint ? safeNumber(primaryEndpoint.activeChannelCount, 0) : 0
84
- },
85
- capabilities: {
86
- maxAllowedSessionNumber: safeNumber(server.maxAllowedSessionNumber, 0),
87
- initialized: Boolean(server.initialized),
88
- auditing: Boolean(server.isAuditing)
89
- },
90
- buildInfo: {
91
- productName: extractText(server.buildInfo && server.buildInfo.productName),
92
- buildNumber: extractText(server.buildInfo && server.buildInfo.buildNumber),
93
- buildDate: extractDate(server.buildInfo && server.buildInfo.buildDate)
94
- },
95
- serverInfo: {
96
- applicationUri: extractText(server.serverInfo && server.serverInfo.applicationUri),
97
- productUri: extractText(server.serverInfo && server.serverInfo.productUri),
98
- applicationName: extractLocalizedText(server.serverInfo && server.serverInfo.applicationName)
99
- },
100
- endpoints: Array.isArray(server.endpoints)
101
- ? server.endpoints.map((endpoint) => buildEndpointSnapshot(endpoint))
102
- : []
103
- };
104
- }
105
-
106
- function buildEndpointSnapshot(endpoint) {
107
- const descriptions = typeof endpoint.endpointDescriptions === "function"
108
- ? endpoint.endpointDescriptions()
109
- : [];
110
-
111
- return {
112
- port: safeNumber(endpoint.port, 0),
113
- currentChannelCount: safeNumber(endpoint.currentChannelCount, 0),
114
- activeChannelCount: safeNumber(endpoint.activeChannelCount, 0),
115
- bytesRead: safeNumber(endpoint.bytesRead, 0),
116
- bytesWritten: safeNumber(endpoint.bytesWritten, 0),
117
- transactionsCount: safeNumber(endpoint.transactionsCount, 0),
118
- securityTokenCount: safeNumber(endpoint.securityTokenCount, 0),
119
- endpointUrls: Array.isArray(descriptions)
120
- ? descriptions.map((description) => extractText(description && description.endpointUrl)).filter(Boolean)
121
- : []
122
- };
123
- }
124
-
125
- function resolveEndpointUrl(serverNode) {
126
- if (serverNode.runtime && typeof serverNode.runtime.getEndpointUrl === "function") {
127
- return serverNode.runtime.getEndpointUrl();
128
- }
129
-
130
- const server = serverNode.server;
131
- if (!server || !Array.isArray(server.endpoints)) {
132
- return "";
133
- }
134
-
135
- for (let index = 0; index < server.endpoints.length; index += 1) {
136
- const endpoint = server.endpoints[index];
137
- if (!endpoint || typeof endpoint.endpointDescriptions !== "function") {
138
- continue;
139
- }
140
-
141
- const descriptions = endpoint.endpointDescriptions();
142
- if (Array.isArray(descriptions) && descriptions.length && descriptions[0].endpointUrl) {
143
- return descriptions[0].endpointUrl;
144
- }
145
- }
146
-
147
- return "";
148
- }
149
-
150
- function safeCall(target, methodName, fallback) {
151
- try {
152
- if (target && typeof target[methodName] === "function") {
153
- return target[methodName]();
154
- }
155
- } catch (error) {
156
- // Ignore and use fallback.
157
- }
158
-
159
- return fallback;
160
- }
161
-
162
- function safeNumber(value, fallback) {
163
- return Number.isFinite(Number(value)) ? Number(value) : fallback;
164
- }
165
-
166
- function extractText(value) {
167
- return value === undefined || value === null ? "" : String(value);
168
- }
169
-
170
- function extractLocalizedText(value) {
171
- if (value && typeof value.text === "string") {
172
- return value.text;
173
- }
174
-
175
- return extractText(value);
176
- }
177
-
178
- function extractDate(value) {
179
- if (value instanceof Date && !Number.isNaN(value.getTime())) {
180
- return value.toISOString();
181
- }
182
-
183
- return "";
184
- }
185
-
186
- module.exports = {
187
- "OpcUaServerStatusNode": OpcUaServerStatusNode
1
+ "use strict";
2
+
3
+
4
+ const registry = require("../opcua-server-registry");
5
+ const { resolveRegisteredServer } = require("./server-node-utils");
6
+
7
+ function OpcUaServerStatusNode(node, msg, nodeId) {
8
+
9
+ try {
10
+ const serverNode = resolveRegisteredServer(node, msg, registry);
11
+ const snapshot = buildServerSnapshot(serverNode);
12
+
13
+ msg.payload = snapshot;
14
+ msg.opcua = msg.opcua || {};
15
+ msg.opcua.server = snapshot.identity.serverRef;
16
+ msg.opcua.endpointUrl = snapshot.endpointUrl;
17
+
18
+
19
+
20
+ process.send({
21
+ type: "status",
22
+ data: {
23
+ fill: "green",
24
+ shape: "dot",
25
+ text: "sessions " + snapshot.counters.currentSessionCount
26
+ },
27
+ nodeId: nodeId
28
+ });
29
+
30
+ process.send({
31
+ type: "send",
32
+ data: msg,
33
+ nodeId: nodeId
34
+ });
35
+
36
+
37
+ } catch (error) {
38
+ //console.error("function OpcUaServerStatusNode" + error);
39
+ //console.error({ fill: "red", shape: "ring", text: "status failed" });
40
+
41
+ process.send({
42
+ type: "status",
43
+ data: {
44
+ fill: "red",
45
+ shape: "ring",
46
+ text: "Status: " + error
47
+ },
48
+ nodeId: nodeId
49
+ });
50
+ // done(error);
51
+ }
52
+
53
+ }
54
+
55
+ function buildServerSnapshot(serverNode) {
56
+
57
+ const server = serverNode.server;
58
+ const primaryEndpoint = Array.isArray(server.endpoints) && server.endpoints.length
59
+ ? server.endpoints[0]
60
+ : null;
61
+
62
+ return {
63
+ identity: {
64
+ id: serverNode.id || "",
65
+ name: serverNode.name || "",
66
+ serverName: serverNode.serverName || "",
67
+ serverRef: serverNode.name || serverNode.serverName || serverNode.id || ""
68
+ },
69
+ state: safeCall(server, "getServerState", ""),
70
+ endpointUrl: resolveEndpointUrl(serverNode),
71
+ counters: {
72
+ currentChannelCount: safeNumber(server.currentChannelCount, 0),
73
+ currentSessionCount: safeNumber(server.currentSessionCount, 0),
74
+ currentSubscriptionCount: safeNumber(server.currentSubscriptionCount, 0),
75
+ bytesRead: safeNumber(server.bytesRead, 0),
76
+ bytesWritten: safeNumber(server.bytesWritten, 0),
77
+ transactionsCount: safeNumber(server.transactionsCount, 0),
78
+ rejectedRequestsCount: safeNumber(server.rejectedRequestsCount, 0),
79
+ rejectedSessionCount: safeNumber(server.rejectedSessionCount, 0),
80
+ sessionAbortCount: safeNumber(server.sessionAbortCount, 0),
81
+ publishingIntervalCount: safeNumber(server.publishingIntervalCount, 0),
82
+ securityTokenCount: primaryEndpoint ? safeNumber(primaryEndpoint.securityTokenCount, 0) : 0,
83
+ activeChannelCount: primaryEndpoint ? safeNumber(primaryEndpoint.activeChannelCount, 0) : 0
84
+ },
85
+ capabilities: {
86
+ maxAllowedSessionNumber: safeNumber(server.maxAllowedSessionNumber, 0),
87
+ initialized: Boolean(server.initialized),
88
+ auditing: Boolean(server.isAuditing)
89
+ },
90
+ buildInfo: {
91
+ productName: extractText(server.buildInfo && server.buildInfo.productName),
92
+ buildNumber: extractText(server.buildInfo && server.buildInfo.buildNumber),
93
+ buildDate: extractDate(server.buildInfo && server.buildInfo.buildDate)
94
+ },
95
+ serverInfo: {
96
+ applicationUri: extractText(server.serverInfo && server.serverInfo.applicationUri),
97
+ productUri: extractText(server.serverInfo && server.serverInfo.productUri),
98
+ applicationName: extractLocalizedText(server.serverInfo && server.serverInfo.applicationName)
99
+ },
100
+ endpoints: Array.isArray(server.endpoints)
101
+ ? server.endpoints.map((endpoint) => buildEndpointSnapshot(endpoint))
102
+ : []
103
+ };
104
+ }
105
+
106
+ function buildEndpointSnapshot(endpoint) {
107
+ const descriptions = typeof endpoint.endpointDescriptions === "function"
108
+ ? endpoint.endpointDescriptions()
109
+ : [];
110
+
111
+ return {
112
+ port: safeNumber(endpoint.port, 0),
113
+ currentChannelCount: safeNumber(endpoint.currentChannelCount, 0),
114
+ activeChannelCount: safeNumber(endpoint.activeChannelCount, 0),
115
+ bytesRead: safeNumber(endpoint.bytesRead, 0),
116
+ bytesWritten: safeNumber(endpoint.bytesWritten, 0),
117
+ transactionsCount: safeNumber(endpoint.transactionsCount, 0),
118
+ securityTokenCount: safeNumber(endpoint.securityTokenCount, 0),
119
+ endpointUrls: Array.isArray(descriptions)
120
+ ? descriptions.map((description) => extractText(description && description.endpointUrl)).filter(Boolean)
121
+ : []
122
+ };
123
+ }
124
+
125
+ function resolveEndpointUrl(serverNode) {
126
+ if (serverNode.runtime && typeof serverNode.runtime.getEndpointUrl === "function") {
127
+ return serverNode.runtime.getEndpointUrl();
128
+ }
129
+
130
+ const server = serverNode.server;
131
+ if (!server || !Array.isArray(server.endpoints)) {
132
+ return "";
133
+ }
134
+
135
+ for (let index = 0; index < server.endpoints.length; index += 1) {
136
+ const endpoint = server.endpoints[index];
137
+ if (!endpoint || typeof endpoint.endpointDescriptions !== "function") {
138
+ continue;
139
+ }
140
+
141
+ const descriptions = endpoint.endpointDescriptions();
142
+ if (Array.isArray(descriptions) && descriptions.length && descriptions[0].endpointUrl) {
143
+ return descriptions[0].endpointUrl;
144
+ }
145
+ }
146
+
147
+ return "";
148
+ }
149
+
150
+ function safeCall(target, methodName, fallback) {
151
+ try {
152
+ if (target && typeof target[methodName] === "function") {
153
+ return target[methodName]();
154
+ }
155
+ } catch (error) {
156
+ // Ignore and use fallback.
157
+ }
158
+
159
+ return fallback;
160
+ }
161
+
162
+ function safeNumber(value, fallback) {
163
+ return Number.isFinite(Number(value)) ? Number(value) : fallback;
164
+ }
165
+
166
+ function extractText(value) {
167
+ return value === undefined || value === null ? "" : String(value);
168
+ }
169
+
170
+ function extractLocalizedText(value) {
171
+ if (value && typeof value.text === "string") {
172
+ return value.text;
173
+ }
174
+
175
+ return extractText(value);
176
+ }
177
+
178
+ function extractDate(value) {
179
+ if (value instanceof Date && !Number.isNaN(value.getTime())) {
180
+ return value.toISOString();
181
+ }
182
+
183
+ return "";
184
+ }
185
+
186
+ module.exports = {
187
+ "OpcUaServerStatusNode": OpcUaServerStatusNode
188
188
  }
@@ -1,16 +1,16 @@
1
- "use strict";
2
-
3
- function resolveRegisteredServer(node, msg, registry) {
4
- const msgReference = msg && msg.opcua && msg.opcua.server ? msg.opcua.server : "";
5
- const server = registry.resolveServer(msgReference || node.serverRef);
6
-
7
- if (!server) {
8
- throw new Error("No OPC UA server matched the configured reference");
9
- }
10
-
11
- return server;
12
- }
13
-
14
- module.exports = {
15
- resolveRegisteredServer
16
- };
1
+ "use strict";
2
+
3
+ function resolveRegisteredServer(node, msg, registry) {
4
+ const msgReference = msg && msg.opcua && msg.opcua.server ? msg.opcua.server : "";
5
+ const server = registry.resolveServer(msgReference || node.serverRef);
6
+
7
+ if (!server) {
8
+ throw new Error("No OPC UA server matched the configured reference");
9
+ }
10
+
11
+ return server;
12
+ }
13
+
14
+ module.exports = {
15
+ resolveRegisteredServer
16
+ };