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

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/client/icons/opcua.svg +132 -132
  2. package/client/lib/opcua-client-browser.js +368 -330
  3. package/client/lib/opcua-client-method-service.js +88 -88
  4. package/client/lib/opcua-client-read-service.js +15 -15
  5. package/client/lib/opcua-client-subscription-id-service.js +24 -24
  6. package/client/lib/opcua-client-subscription-service.js +170 -170
  7. package/client/lib/opcua-client-write-service.js +146 -146
  8. package/client/opcua-client-config.html +80 -80
  9. package/client/opcua-client-utils.js +12 -11
  10. package/client/opcua-client.html +140 -140
  11. package/client/view/opcua-client.js +1144 -1140
  12. package/icons/opcua.svg +132 -132
  13. package/icons/opcua2.svg +132 -132
  14. package/package.json +3 -3
  15. package/server/icons/opcua.svg +132 -132
  16. package/server/lib/opcua-address-space-alarm.js +341 -341
  17. package/server/lib/opcua-address-space-builder.js +1603 -1485
  18. package/server/lib/opcua-config.js +677 -546
  19. package/server/lib/opcua-constants.js +119 -109
  20. package/server/lib/opcua-server-events-child.js +139 -139
  21. package/server/lib/opcua-server-runtime-child.js +873 -819
  22. package/server/lib/opcua-server-runtime.js +376 -311
  23. package/server/lib/opcua-server-status-child.js +187 -187
  24. package/server/lib/server-node-utils.js +16 -16
  25. package/server/opcua-server-io.html +346 -346
  26. package/server/opcua-server-io.js +497 -496
  27. package/server/opcua-server-registry.js +270 -270
  28. package/server/opcua-server.css +265 -265
  29. package/server/opcua-server.html +155 -1643
  30. package/server/opcua-server.js +24 -13
  31. package/server/view/opcua-server.css +492 -0
  32. package/server/view/opcua-server.js +1435 -0
@@ -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
+ };