@bitpoolos/edge-bacnet 1.2.4 → 1.2.6
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/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
- package/bacnet_client.js +17 -24
- package/bacnet_gateway.html +828 -601
- package/bacnet_gateway.js +133 -94
- package/bacnet_read.html +39 -5
- package/bacnet_read.js +0 -1
- package/bacnet_server.js +193 -40
- package/bacnet_write.html +52 -11
- package/common.js +139 -134
- package/package.json +1 -2
package/bacnet_gateway.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
module.exports = function (RED) {
|
|
6
|
-
const { BacnetClient } = require(
|
|
7
|
-
const { BacnetClientConfig, getIpAddress
|
|
6
|
+
const { BacnetClient } = require("./bacnet_client");
|
|
7
|
+
const { BacnetClientConfig, getIpAddress } = require("./common");
|
|
8
8
|
const { exec } = require("child_process");
|
|
9
9
|
const { BacnetServer } = require("./bacnet_server.js");
|
|
10
10
|
|
|
@@ -23,12 +23,9 @@ module.exports = function (RED) {
|
|
|
23
23
|
this.broadCastAddr = config.broadCastAddr;
|
|
24
24
|
this.discover_polling_schedule = config.discover_polling_schedule;
|
|
25
25
|
this.device_read_schedule = config.device_read_schedule;
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.manual_instance_range_enabled = config.manual_instance_range_enabled,
|
|
30
|
-
this.manual_instance_range_start = config.manual_instance_range_start,
|
|
31
|
-
this.manual_instance_range_end = config.manual_instance_range_end,
|
|
26
|
+
this.manual_instance_range_enabled = config.manual_instance_range_enabled;
|
|
27
|
+
this.manual_instance_range_start = config.manual_instance_range_start;
|
|
28
|
+
this.manual_instance_range_end = config.manual_instance_range_end;
|
|
32
29
|
this.nodeName = config.name;
|
|
33
30
|
this.toRestartNodeRed = config.toRestartNodeRed;
|
|
34
31
|
this.deviceId = config.deviceId;
|
|
@@ -36,6 +33,7 @@ module.exports = function (RED) {
|
|
|
36
33
|
this.bacnetServerEnabled = config.serverEnabled;
|
|
37
34
|
this.retries = config.retries;
|
|
38
35
|
this.bacnetServer = nodeContext.get("bacnetServer") || null;
|
|
36
|
+
this.deviceRangeRegisters = config.deviceRangeRegisters;
|
|
39
37
|
|
|
40
38
|
//client and config store
|
|
41
39
|
this.bacnetConfig = nodeContext.get("bacnetConfig");
|
|
@@ -56,9 +54,6 @@ module.exports = function (RED) {
|
|
|
56
54
|
node.maxSegments,
|
|
57
55
|
node.broadCastAddr,
|
|
58
56
|
node.discover_polling_schedule,
|
|
59
|
-
node.device_id_range_enabled,
|
|
60
|
-
node.device_id_range_start,
|
|
61
|
-
node.device_id_range_end,
|
|
62
57
|
node.toRestartNodeRed,
|
|
63
58
|
node.deviceId,
|
|
64
59
|
node.manual_instance_range_enabled,
|
|
@@ -70,7 +65,7 @@ module.exports = function (RED) {
|
|
|
70
65
|
|
|
71
66
|
nodeContext.set("bacnetConfig", node.bacnetConfig);
|
|
72
67
|
|
|
73
|
-
if (typeof node.bacnetClient !==
|
|
68
|
+
if (typeof node.bacnetClient !== "undefined") {
|
|
74
69
|
node.bacnetClient.removeAllListeners();
|
|
75
70
|
bindEventListeners();
|
|
76
71
|
node.bacnetClient.reinitializeClient(node.bacnetConfig);
|
|
@@ -79,6 +74,8 @@ module.exports = function (RED) {
|
|
|
79
74
|
nodeContext.set("bacnetClient", node.bacnetClient);
|
|
80
75
|
}
|
|
81
76
|
|
|
77
|
+
node.bacnetClient.scanMatrix = node.deviceRangeRegisters.filter((ele) => ele.enabled === true);
|
|
78
|
+
|
|
82
79
|
if (node.bacnetServerEnabled == true && node.bacnetClient && node.bacnetServer) {
|
|
83
80
|
node.bacnetServer.deviceId = node.deviceId;
|
|
84
81
|
}
|
|
@@ -87,7 +84,6 @@ module.exports = function (RED) {
|
|
|
87
84
|
|
|
88
85
|
if (node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
89
86
|
if (node.bacnetServer == null) {
|
|
90
|
-
|
|
91
87
|
node.bacnetServer = new BacnetServer(node.bacnetClient, node.deviceId, RED.version());
|
|
92
88
|
nodeContext.set("bacnetServer", node.bacnetServer);
|
|
93
89
|
}
|
|
@@ -99,8 +95,8 @@ module.exports = function (RED) {
|
|
|
99
95
|
node.bacnetClient.removeAllListeners();
|
|
100
96
|
|
|
101
97
|
// Value response event handler for READ commands
|
|
102
|
-
node.bacnetClient.on(
|
|
103
|
-
if (typeof values !==
|
|
98
|
+
node.bacnetClient.on("values", (values, outputType, objectPropertyType) => {
|
|
99
|
+
if (typeof values !== "undefined" && Object.keys(values).length) {
|
|
104
100
|
if (outputType.json && !outputType.mqtt) {
|
|
105
101
|
if (objectPropertyType.fullObject && objectPropertyType.simplePayload) {
|
|
106
102
|
sendSimpleJson(values);
|
|
@@ -124,32 +120,35 @@ module.exports = function (RED) {
|
|
|
124
120
|
});
|
|
125
121
|
|
|
126
122
|
// Who Is / Iam event handler
|
|
127
|
-
node.bacnetClient.on(
|
|
123
|
+
node.bacnetClient.on("deviceFound", (device) => {
|
|
128
124
|
if (node.toLogIam) {
|
|
129
125
|
if (device.source) {
|
|
130
|
-
node.warn(
|
|
126
|
+
node.warn(
|
|
127
|
+
`BACnet-MS/TP device found: ${device.deviceId} - ${device.address} - Network Id: ${device.source.net} - Mac: ${device.source.adr[0]}`
|
|
128
|
+
);
|
|
131
129
|
} else {
|
|
132
130
|
node.warn(`BACnet device found: ${device.deviceId} - ${device.address}`);
|
|
133
131
|
}
|
|
134
132
|
}
|
|
135
133
|
});
|
|
136
134
|
|
|
137
|
-
node.bacnetClient.on(
|
|
135
|
+
node.bacnetClient.on("bacnetErrorLog", (param1, param2) => {
|
|
138
136
|
logOut(param1, param2);
|
|
139
137
|
});
|
|
140
138
|
|
|
141
|
-
if (
|
|
139
|
+
if (
|
|
140
|
+
node.nodeName !== "gateway" &&
|
|
142
141
|
node.nodeName !== "" &&
|
|
143
142
|
node.nodeName !== "null" &&
|
|
144
143
|
node.nodeName !== "undefined" &&
|
|
145
|
-
typeof node.nodeName == "string"
|
|
144
|
+
typeof node.nodeName == "string"
|
|
145
|
+
) {
|
|
146
146
|
if (node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
147
147
|
node.bacnetServer.setDeviceName(node.nodeName);
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
node.on(
|
|
152
|
-
|
|
151
|
+
node.on("input", function (msg) {
|
|
153
152
|
if (msg.topic && msg.payload !== null) {
|
|
154
153
|
if (node.bacnetServer) {
|
|
155
154
|
node.bacnetServer.addObject(msg.topic, msg.payload);
|
|
@@ -157,71 +156,76 @@ module.exports = function (RED) {
|
|
|
157
156
|
}
|
|
158
157
|
|
|
159
158
|
if (msg.type == "Read") {
|
|
160
|
-
|
|
161
159
|
node.bacnetClient.doRead(msg.options, msg.outputType, msg.objectPropertyType, msg._msgid);
|
|
162
|
-
|
|
163
160
|
} else if (msg.type == "Write") {
|
|
164
|
-
|
|
165
|
-
node.bacnetClient.doWrite(msg.value, msg.options).then(function (result) {
|
|
166
|
-
});
|
|
167
|
-
|
|
161
|
+
node.bacnetClient.doWrite(msg.value, msg.options).then(function (result) {});
|
|
168
162
|
} else if (msg.doDiscover == true) {
|
|
169
|
-
|
|
170
|
-
node.status({ fill: "blue", shape: "dot", text: "Sending global Who is" })
|
|
163
|
+
node.status({ fill: "blue", shape: "dot", text: "Sending global Who is" });
|
|
171
164
|
|
|
172
165
|
node.bacnetClient.globalWhoIs();
|
|
173
166
|
|
|
174
167
|
setTimeout(() => {
|
|
175
|
-
node.status({})
|
|
168
|
+
node.status({});
|
|
176
169
|
}, 2000);
|
|
177
170
|
} else if (msg.payload == "BindEvents") {
|
|
178
171
|
node.bacnetClient.removeAllListeners();
|
|
179
172
|
bindEventListeners();
|
|
180
173
|
} else if (msg.doUpdatePriorityDevices == true && msg.priorityDevices !== null) {
|
|
181
|
-
node.bacnetClient
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
174
|
+
node.bacnetClient
|
|
175
|
+
.updatePriorityQueue(msg.priorityDevices)
|
|
176
|
+
.then(function (result) {})
|
|
177
|
+
.catch(function (error) {
|
|
178
|
+
logOut("Error updating priorityQueue: ", error);
|
|
179
|
+
});
|
|
185
180
|
}
|
|
181
|
+
});
|
|
186
182
|
|
|
183
|
+
node.on("close", function () {
|
|
184
|
+
//do nothing
|
|
187
185
|
});
|
|
188
186
|
|
|
189
187
|
//route handler for network data
|
|
190
|
-
RED.httpAdmin.get(
|
|
188
|
+
RED.httpAdmin.get("/bitpool-bacnet-data/getNetworkTree", function (req, res) {
|
|
191
189
|
if (!node.bacnetClient) {
|
|
192
190
|
logOut("Issue with the bacnetClient: ", node.bacnetClient);
|
|
193
191
|
//no bacnet client present
|
|
194
192
|
//node.status({fill:"red",shape:"dot",text:"Please define client"});
|
|
195
193
|
res.send(false);
|
|
196
194
|
} else {
|
|
197
|
-
node.bacnetClient
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
195
|
+
node.bacnetClient
|
|
196
|
+
.getNetworkTreeData()
|
|
197
|
+
.then(function (result) {
|
|
198
|
+
res.send(result);
|
|
199
|
+
})
|
|
200
|
+
.catch(function (error) {
|
|
201
|
+
res.send(error);
|
|
202
|
+
logOut("Error getting network data: ", error);
|
|
203
|
+
});
|
|
203
204
|
}
|
|
204
205
|
});
|
|
205
206
|
|
|
206
207
|
//route handler for rebuild data model command
|
|
207
|
-
RED.httpAdmin.get(
|
|
208
|
+
RED.httpAdmin.get("/bitpool-bacnet-data/rebuildDataModel", function (req, res) {
|
|
208
209
|
if (!node.bacnetClient) {
|
|
209
210
|
logOut("Issue with the bacnetClient: ", node.bacnetClient);
|
|
210
211
|
//no bacnet client present
|
|
211
212
|
//node.status({fill:"red",shape:"dot",text:"Please define client"});
|
|
212
213
|
res.send(false);
|
|
213
214
|
} else {
|
|
214
|
-
node.bacnetClient
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
215
|
+
node.bacnetClient
|
|
216
|
+
.rebuildDataModel()
|
|
217
|
+
.then(function (result) {
|
|
218
|
+
res.send(result);
|
|
219
|
+
})
|
|
220
|
+
.catch(function (error) {
|
|
221
|
+
res.send(error);
|
|
222
|
+
logOut("Error getting network data: ", error);
|
|
223
|
+
});
|
|
220
224
|
}
|
|
221
225
|
});
|
|
222
226
|
|
|
223
227
|
//route handler for the clear Bacnet server points function
|
|
224
|
-
RED.httpAdmin.get(
|
|
228
|
+
RED.httpAdmin.get("/bitpool-bacnet-data/clearBacnetServerPoints", function (req, res) {
|
|
225
229
|
if (node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
226
230
|
node.bacnetServer.clearServerPoints();
|
|
227
231
|
res.send(true);
|
|
@@ -230,52 +234,83 @@ module.exports = function (RED) {
|
|
|
230
234
|
}
|
|
231
235
|
});
|
|
232
236
|
|
|
233
|
-
//route handler for
|
|
234
|
-
RED.httpAdmin.
|
|
235
|
-
|
|
237
|
+
//route handler for the clear Bacnet server point function
|
|
238
|
+
RED.httpAdmin.post('/bitpool-bacnet-data/clearBacnetServerPoint', function (req, res) {
|
|
239
|
+
if (node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
240
|
+
node.bacnetServer.clearServerPoint(req).then(function (result) {
|
|
241
|
+
res.send(result);
|
|
242
|
+
}).catch(function (error) {
|
|
243
|
+
res.send(error);
|
|
244
|
+
});
|
|
245
|
+
} else {
|
|
236
246
|
res.send(result);
|
|
237
|
-
}
|
|
238
|
-
logOut("Error getting network interfaces for client: ", error);
|
|
239
|
-
});
|
|
247
|
+
}
|
|
240
248
|
});
|
|
241
249
|
|
|
242
|
-
//route handler for
|
|
243
|
-
RED.httpAdmin.get('/bitpool-bacnet-data/
|
|
244
|
-
if (
|
|
245
|
-
|
|
246
|
-
res.send(false);
|
|
247
|
-
} else {
|
|
248
|
-
node.bacnetClient.getDeviceList().then(function (result) {
|
|
250
|
+
//route handler for the retrieve Bacnet server points function
|
|
251
|
+
RED.httpAdmin.get('/bitpool-bacnet-data/getBacnetServerPoints', function (req, res) {
|
|
252
|
+
if (node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
253
|
+
node.bacnetServer.getServerPoints().then(function (result) {
|
|
249
254
|
res.send(result);
|
|
250
255
|
}).catch(function (error) {
|
|
251
256
|
res.send(error);
|
|
252
|
-
logOut("Error getting
|
|
257
|
+
logOut("Error getting server points: ", error);
|
|
253
258
|
});
|
|
259
|
+
} else {
|
|
260
|
+
res.send([]);
|
|
254
261
|
}
|
|
255
262
|
});
|
|
256
263
|
|
|
257
|
-
//route handler for
|
|
258
|
-
RED.httpAdmin.
|
|
264
|
+
//route handler for network data
|
|
265
|
+
RED.httpAdmin.get("/bitpool-bacnet-data/getNetworkInterfaces", function (req, res) {
|
|
266
|
+
getIpAddress()
|
|
267
|
+
.then(function (result) {
|
|
268
|
+
res.send(result);
|
|
269
|
+
})
|
|
270
|
+
.catch(function (error) {
|
|
271
|
+
logOut("Error getting network interfaces for client: ", error);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
//route handler for getting device list
|
|
276
|
+
RED.httpAdmin.get("/bitpool-bacnet-data/getDeviceList", function (req, res) {
|
|
259
277
|
if (!node.bacnetClient) {
|
|
260
278
|
logOut("Issue with the bacnetClient while getting device list: ", node.bacnetClient);
|
|
261
279
|
res.send(false);
|
|
262
280
|
} else {
|
|
263
|
-
node.bacnetClient
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
281
|
+
node.bacnetClient
|
|
282
|
+
.getDeviceList()
|
|
283
|
+
.then(function (result) {
|
|
284
|
+
res.send(result);
|
|
285
|
+
})
|
|
286
|
+
.catch(function (error) {
|
|
287
|
+
res.send(error);
|
|
288
|
+
logOut("Error getting network data: ", error);
|
|
289
|
+
});
|
|
269
290
|
}
|
|
270
291
|
});
|
|
271
292
|
|
|
272
|
-
|
|
273
|
-
|
|
293
|
+
//route handler for updating device list
|
|
294
|
+
RED.httpAdmin.post("/bitpool-bacnet-data/updateDeviceList", function (req, res) {
|
|
295
|
+
if (!node.bacnetClient) {
|
|
296
|
+
logOut("Issue with the bacnetClient while getting device list: ", node.bacnetClient);
|
|
297
|
+
res.send(false);
|
|
298
|
+
} else {
|
|
299
|
+
node.bacnetClient
|
|
300
|
+
.updateDeviceList(req)
|
|
301
|
+
.then(function (result) {
|
|
302
|
+
res.send(result);
|
|
303
|
+
})
|
|
304
|
+
.catch(function (error) {
|
|
305
|
+
res.send(error);
|
|
306
|
+
logOut("Error getting network data: ", error);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
274
309
|
});
|
|
275
310
|
|
|
276
311
|
function bindEventListeners() {
|
|
277
312
|
// Value response event handler for READ commands
|
|
278
|
-
node.bacnetClient.on(
|
|
313
|
+
node.bacnetClient.on("values", (device, values, outputType, msgId, fullResult) => {
|
|
279
314
|
if (outputType.json && !outputType.mqtt) {
|
|
280
315
|
if (objectPropertyType.fullObject && objectPropertyType.simplePayload) {
|
|
281
316
|
sendSimpleJson(values);
|
|
@@ -296,9 +331,9 @@ module.exports = function (RED) {
|
|
|
296
331
|
}
|
|
297
332
|
}
|
|
298
333
|
});
|
|
299
|
-
|
|
334
|
+
|
|
300
335
|
// Who Is / Iam event handler
|
|
301
|
-
node.bacnetClient.on(
|
|
336
|
+
node.bacnetClient.on("deviceFound", (device) => {
|
|
302
337
|
if (node.toLogIam) node.warn(`BACnet device found: ${device.deviceId} - ${device.address}`);
|
|
303
338
|
});
|
|
304
339
|
}
|
|
@@ -326,11 +361,13 @@ module.exports = function (RED) {
|
|
|
326
361
|
pointProps.forEach(function (prop) {
|
|
327
362
|
let msg = {};
|
|
328
363
|
if (prop == "presentValue") {
|
|
329
|
-
if (
|
|
364
|
+
if (
|
|
365
|
+
node.nodeName !== "gateway" &&
|
|
330
366
|
node.nodeName !== "" &&
|
|
331
367
|
node.nodeName !== "null" &&
|
|
332
368
|
node.nodeName !== "undefined" &&
|
|
333
|
-
typeof node.nodeName == "string"
|
|
369
|
+
typeof node.nodeName == "string"
|
|
370
|
+
) {
|
|
334
371
|
msg.topic = `${node.nodeName}/${device}/${point}`;
|
|
335
372
|
} else {
|
|
336
373
|
msg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${point}`;
|
|
@@ -339,14 +376,12 @@ module.exports = function (RED) {
|
|
|
339
376
|
node.send(msg);
|
|
340
377
|
}
|
|
341
378
|
});
|
|
342
|
-
|
|
343
379
|
}
|
|
344
380
|
}
|
|
345
381
|
}
|
|
346
382
|
});
|
|
347
383
|
};
|
|
348
384
|
|
|
349
|
-
|
|
350
385
|
// Breaks down response JSON object into mqtt topic / payload
|
|
351
386
|
sendAsMqtt = function (values) {
|
|
352
387
|
let devices = Object.keys(values);
|
|
@@ -359,11 +394,13 @@ module.exports = function (RED) {
|
|
|
359
394
|
pointProps.forEach(function (prop) {
|
|
360
395
|
let msg = {};
|
|
361
396
|
if (prop !== "objectName") {
|
|
362
|
-
if (
|
|
397
|
+
if (
|
|
398
|
+
node.nodeName !== "gateway" &&
|
|
363
399
|
node.nodeName !== "" &&
|
|
364
400
|
node.nodeName !== "null" &&
|
|
365
401
|
node.nodeName !== "undefined" &&
|
|
366
|
-
typeof node.nodeName == "string"
|
|
402
|
+
typeof node.nodeName == "string"
|
|
403
|
+
) {
|
|
367
404
|
msg.topic = `${node.nodeName}/${device}/${point}/${prop}`;
|
|
368
405
|
} else {
|
|
369
406
|
msg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${point}/${prop}`;
|
|
@@ -384,7 +421,7 @@ module.exports = function (RED) {
|
|
|
384
421
|
let msgg = {};
|
|
385
422
|
if (device !== "_msgid") {
|
|
386
423
|
let value = {
|
|
387
|
-
[device]: {}
|
|
424
|
+
[device]: {},
|
|
388
425
|
};
|
|
389
426
|
let points = values[device];
|
|
390
427
|
|
|
@@ -394,18 +431,19 @@ module.exports = function (RED) {
|
|
|
394
431
|
pointProps.forEach(function (prop) {
|
|
395
432
|
if (prop == "presentValue") {
|
|
396
433
|
value[device][point] = {
|
|
397
|
-
|
|
434
|
+
presentValue: points[point][prop],
|
|
398
435
|
};
|
|
399
436
|
}
|
|
400
437
|
});
|
|
401
438
|
}
|
|
402
|
-
|
|
403
439
|
}
|
|
404
|
-
if (
|
|
440
|
+
if (
|
|
441
|
+
node.nodeName !== "gateway" &&
|
|
405
442
|
node.nodeName !== "" &&
|
|
406
443
|
node.nodeName !== "null" &&
|
|
407
444
|
node.nodeName !== "undefined" &&
|
|
408
|
-
typeof node.nodeName == "string"
|
|
445
|
+
typeof node.nodeName == "string"
|
|
446
|
+
) {
|
|
409
447
|
msgg.topic = `${node.nodeName}/${device}`;
|
|
410
448
|
} else {
|
|
411
449
|
msgg.topic = `BITPOOL_BACNET_GATEWAY/${device}`;
|
|
@@ -423,11 +461,13 @@ module.exports = function (RED) {
|
|
|
423
461
|
let points = values[key];
|
|
424
462
|
let msgg = {};
|
|
425
463
|
|
|
426
|
-
if (
|
|
464
|
+
if (
|
|
465
|
+
node.nodeName !== "gateway" &&
|
|
427
466
|
node.nodeName !== "" &&
|
|
428
467
|
node.nodeName !== "null" &&
|
|
429
468
|
node.nodeName !== "undefined" &&
|
|
430
|
-
typeof node.nodeName == "string"
|
|
469
|
+
typeof node.nodeName == "string"
|
|
470
|
+
) {
|
|
431
471
|
msgg.topic = `${node.nodeName}/${key}`;
|
|
432
472
|
} else {
|
|
433
473
|
msgg.topic = `BITPOOL_BACNET_GATEWAY/${key}`;
|
|
@@ -437,8 +477,7 @@ module.exports = function (RED) {
|
|
|
437
477
|
});
|
|
438
478
|
}
|
|
439
479
|
};
|
|
480
|
+
}
|
|
440
481
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
RED.nodes.registerType('Bacnet-Gateway', BitpoolBacnetGatewayDevice);
|
|
444
|
-
};
|
|
482
|
+
RED.nodes.registerType("Bacnet-Gateway", BitpoolBacnetGatewayDevice);
|
|
483
|
+
};
|
package/bacnet_read.html
CHANGED
|
@@ -159,7 +159,13 @@
|
|
|
159
159
|
this.$forceUpdate()
|
|
160
160
|
|
|
161
161
|
//update node-red data structure to forward to gateway
|
|
162
|
-
let device = this.deviceList.find(ele =>
|
|
162
|
+
let device = this.deviceList.find(ele => {
|
|
163
|
+
if(ele.address.address) {
|
|
164
|
+
return ele.address.address == slotProps.node.ipAddr && ele.deviceId == slotProps.node.deviceId;
|
|
165
|
+
} else {
|
|
166
|
+
return ele.address == slotProps.node.ipAddr && ele.deviceId == slotProps.node.deviceId;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
163
169
|
let deviceAddress = app.getDeviceAddress(device.address);
|
|
164
170
|
let key = `${deviceAddress}-${device.deviceId}`;
|
|
165
171
|
let points = this.pointList[key];
|
|
@@ -208,7 +214,13 @@
|
|
|
208
214
|
this.$forceUpdate();
|
|
209
215
|
|
|
210
216
|
//update node-red data structure
|
|
211
|
-
let device = this.deviceList.find(ele =>
|
|
217
|
+
let device = this.deviceList.find(ele => {
|
|
218
|
+
if(ele.address.address) {
|
|
219
|
+
return ele.address.address == slotProps.node.ipAddr && ele.deviceId == slotProps.node.deviceId;
|
|
220
|
+
} else{
|
|
221
|
+
return ele.address == slotProps.node.ipAddr && ele.deviceId == slotProps.node.deviceId;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
212
224
|
let deviceAddress = app.getDeviceAddress(device.address);
|
|
213
225
|
let key = `${deviceAddress}-${device.deviceId}`;
|
|
214
226
|
if (this.pointsToRead[key]) {
|
|
@@ -219,7 +231,7 @@
|
|
|
219
231
|
node.hiddenDeployToggle = !node.prevHiddenToggleState;
|
|
220
232
|
|
|
221
233
|
} catch(e) {
|
|
222
|
-
|
|
234
|
+
//do nothing
|
|
223
235
|
}
|
|
224
236
|
|
|
225
237
|
app.$forceUpdate();
|
|
@@ -254,7 +266,13 @@
|
|
|
254
266
|
this.$forceUpdate();
|
|
255
267
|
|
|
256
268
|
//update node-red data structure
|
|
257
|
-
let device = this.deviceList.find(ele =>
|
|
269
|
+
let device = this.deviceList.find(ele => {
|
|
270
|
+
if(ele.address.address) {
|
|
271
|
+
return ele.address.address == parentDevice.ipAddr && ele.deviceId == parentDevice.deviceId;
|
|
272
|
+
} else {
|
|
273
|
+
return ele.address == parentDevice.ipAddr && ele.deviceId == parentDevice.deviceId;
|
|
274
|
+
}
|
|
275
|
+
});
|
|
258
276
|
let deviceAddress = app.getDeviceAddress(device.address);
|
|
259
277
|
let key = `${deviceAddress}-${device.deviceId}`;
|
|
260
278
|
|
|
@@ -292,7 +310,13 @@
|
|
|
292
310
|
this.$forceUpdate();
|
|
293
311
|
|
|
294
312
|
//update node-red data stucture
|
|
295
|
-
let device = this.deviceList.find(ele =>
|
|
313
|
+
let device = this.deviceList.find(ele => {
|
|
314
|
+
if(ele.address.address) {
|
|
315
|
+
return ele.address.address == parentDevice.ipAddr && ele.deviceId == parentDevice.deviceId;
|
|
316
|
+
} else {
|
|
317
|
+
return ele.address == parentDevice.ipAddr && ele.deviceId == parentDevice.deviceId;
|
|
318
|
+
}
|
|
319
|
+
});
|
|
296
320
|
let deviceAddress = app.getDeviceAddress(device.address);
|
|
297
321
|
let key = `${deviceAddress}-${device.deviceId}`;
|
|
298
322
|
let point = this.pointList[key][slotProps.node.pointName];
|
|
@@ -436,12 +460,22 @@
|
|
|
436
460
|
if (node.vm.$data.devices) node.devices = node.vm.$data.devices;
|
|
437
461
|
if (node.vm.$data.readDevices) node.readDevices = node.vm.$data.readDevices;
|
|
438
462
|
if (node.vm.$data.pointsToRead) node.pointsToRead = node.vm.$data.pointsToRead;
|
|
463
|
+
//clear reload data function
|
|
464
|
+
if(node.reloadTimer) {
|
|
465
|
+
clearInterval(node.reloadTimer);
|
|
466
|
+
node.reloadTimer = null;
|
|
467
|
+
}
|
|
439
468
|
},
|
|
440
469
|
oneditcancel: function () {
|
|
441
470
|
let node = this;
|
|
442
471
|
if (node.vm.$data.devices) node.devices = node.vm.$data.devices;
|
|
443
472
|
if (node.vm.$data.readDevices) node.readDevices = node.vm.$data.readDevices;
|
|
444
473
|
if (node.vm.$data.pointsToRead) node.pointsToRead = node.vm.$data.pointsToRead;
|
|
474
|
+
//clear reload data function
|
|
475
|
+
if(node.reloadTimer) {
|
|
476
|
+
clearInterval(node.reloadTimer);
|
|
477
|
+
node.reloadTimer = null;
|
|
478
|
+
}
|
|
445
479
|
}
|
|
446
480
|
});
|
|
447
481
|
|
package/bacnet_read.js
CHANGED