@vitormnm/node-red-simple-opcua 1.0.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/LICENSE +21 -0
  2. package/README.md +128 -0
  3. package/client/lib/opcua-client-browser.js +291 -0
  4. package/client/lib/opcua-client-read-service.js +16 -0
  5. package/client/lib/opcua-client-subscription-id-service.js +25 -0
  6. package/client/lib/opcua-client-subscription-service.js +171 -0
  7. package/client/lib/opcua-client-write-service.js +53 -0
  8. package/client/opcua-client-config.html +80 -0
  9. package/client/opcua-client-config.js +159 -0
  10. package/client/opcua-client-utils.js +320 -0
  11. package/client/opcua-client.html +1225 -0
  12. package/client/opcua-client.js +380 -0
  13. package/object.json +65 -0
  14. package/package.json +38 -0
  15. package/resources/editorClient.PNG +0 -0
  16. package/resources/editorServer.PNG +0 -0
  17. package/server/lib/opcua-address-space-alarm.js +341 -0
  18. package/server/lib/opcua-address-space-builder.js +1456 -0
  19. package/server/lib/opcua-config.js +543 -0
  20. package/server/lib/opcua-constants.js +106 -0
  21. package/server/lib/opcua-server-events-child.js +140 -0
  22. package/server/lib/opcua-server-methods.js +198 -0
  23. package/server/lib/opcua-server-runtime-child.js +729 -0
  24. package/server/lib/opcua-server-runtime.js +311 -0
  25. package/server/lib/opcua-server-status-child.js +188 -0
  26. package/server/lib/server-node-utils.js +16 -0
  27. package/server/opcua-server-io.html +347 -0
  28. package/server/opcua-server-io.js +463 -0
  29. package/server/opcua-server-registry.js +270 -0
  30. package/server/opcua-server.css +265 -0
  31. package/server/opcua-server.html +1548 -0
  32. package/server/opcua-server.js +143 -0
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ module.exports = function (RED) {
4
+ const registry = require("./opcua-server-registry");
5
+ const { OpcUaServerConfigParser } = require("./lib/opcua-config");
6
+ const { OpcUaServerRuntime } = require("./lib/opcua-server-runtime");
7
+
8
+ const { fork } = require("child_process");
9
+ const path = require("path");
10
+
11
+
12
+
13
+
14
+
15
+ function OpcUaServerNode(config) {
16
+ RED.nodes.createNode(this, config);
17
+ const node = this;
18
+ const parser = new OpcUaServerConfigParser(node);
19
+
20
+ const settings = parser.parseNodeConfig(config, this.credentials || {});
21
+
22
+ node.name = settings.name;
23
+ node.serverName = settings.serverName;
24
+ node.server = null;
25
+ node.namespace = null;
26
+
27
+ node.status({ fill: "yellow", shape: "ring", text: "initializing OPC UA server" });
28
+
29
+ // diretório do arquivo atual (mais seguro)
30
+ const workerPath = path.resolve(__dirname, 'lib', "opcua-server-runtime-child.js");
31
+
32
+
33
+ const fork_parameter = {
34
+ "node": node,
35
+ "settings": settings
36
+ }
37
+
38
+ // const child = fork(workerPath, [JSON.stringify(fork_parameter)], {
39
+ // cwd: __dirname, // opcional, mas recomendado
40
+ // });
41
+
42
+ const child = fork(workerPath, {
43
+ cwd: __dirname, // opcional, mas recomendado
44
+ });
45
+
46
+
47
+
48
+ registry.registerChild(node.serverName, child);
49
+
50
+ registry.registerServerNames(node.serverName, node.serverName);
51
+
52
+ child.on("exit", () => {
53
+ registry.unregisterChild(node.serverName, child);
54
+ });
55
+
56
+ child.on("close", () => {
57
+ registry.unregisterChild(node.serverName, child);
58
+ });
59
+
60
+
61
+
62
+ child.send({
63
+ type: "createServer",
64
+ config: config,
65
+ node: node,
66
+ nodeId: node.id,
67
+ settings: settings
68
+ });
69
+
70
+ child.on("message", (msg) => {
71
+ if (msg.nodeId == node.id) {
72
+ if (msg.type === "status") {
73
+
74
+ node.status(msg.data); // aqui sim usa o node
75
+ }
76
+
77
+ if (msg.type === "log") {
78
+ node.log(msg.data);
79
+ }
80
+
81
+ if (msg.type === "errorUpdateServer") {
82
+ reportError(node, "Input processing failed", msg.data);
83
+ }
84
+ }
85
+ });
86
+
87
+
88
+ node.on("input", async function (msg, send, done) {
89
+ send = send || function () {
90
+ node.send.apply(node, arguments);
91
+ };
92
+
93
+ try {
94
+
95
+ if (msg.payload !== undefined) {
96
+ child.send({
97
+ type: "updateServer",
98
+ msg: msg,
99
+ node: node,
100
+ nodeId: node.id,
101
+
102
+ });
103
+ }
104
+
105
+
106
+
107
+ done();
108
+ } catch (error) {
109
+ reportError(node, "Input processing failed", error);
110
+ done(error);
111
+ }
112
+ });
113
+
114
+ node.on("close", async function (removed, done) {
115
+ try {
116
+ registry.unregisterChild(node.serverName, child);
117
+ registry.unregisterServerNames(node.serverName);
118
+ child.kill();
119
+
120
+ done();
121
+ } catch (error) {
122
+ reportError(node, "Failed to stop OPC UA server", error);
123
+ done(error);
124
+ }
125
+ });
126
+ }
127
+
128
+
129
+
130
+
131
+ function reportError(node, message, error) {
132
+ const details = error && error.message ? error.message : String(error);
133
+ node.error(message + ": " + details);
134
+ node.status({ fill: "red", shape: "ring", text: message });
135
+ }
136
+
137
+ RED.nodes.registerType("opc-ua-server", OpcUaServerNode, {
138
+ credentials: {
139
+ username: { type: "text" },
140
+ password: { type: "password" }
141
+ }
142
+ });
143
+ };