@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/bacnet_gateway.js CHANGED
@@ -3,8 +3,8 @@
3
3
  */
4
4
 
5
5
  module.exports = function (RED) {
6
- const { BacnetClient } = require('./bacnet_client');
7
- const { BacnetClientConfig, getIpAddress, doNodeRedRestart } = require('./common');
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.device_id_range_enabled = config.device_id_range_enabled;
27
- this.device_id_range_start = config.device_id_range_start;
28
- this.device_id_range_end = config.device_id_range_end;
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 !== 'undefined') {
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('values', (values, outputType, objectPropertyType) => {
103
- if (typeof values !== 'undefined' && Object.keys(values).length) {
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('deviceFound', (device) => {
123
+ node.bacnetClient.on("deviceFound", (device) => {
128
124
  if (node.toLogIam) {
129
125
  if (device.source) {
130
- node.warn(`BACnet-MS/TP device found: ${device.deviceId} - ${device.address} - Network Id: ${device.source.net} - Mac: ${device.source.adr[0]}`);
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('bacnetErrorLog', (param1, param2) => {
135
+ node.bacnetClient.on("bacnetErrorLog", (param1, param2) => {
138
136
  logOut(param1, param2);
139
137
  });
140
138
 
141
- if (node.nodeName !== "gateway" &&
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('input', function (msg) {
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.updatePriorityQueue(msg.priorityDevices).then(function (result) {
182
- }).catch(function (error) {
183
- logOut("Error updating priorityQueue: ", error);
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('/bitpool-bacnet-data/getNetworkTree', function (req, res) {
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.getNetworkTreeData().then(function (result) {
198
- res.send(result);
199
- }).catch(function (error) {
200
- res.send(error);
201
- logOut("Error getting network data: ", error);
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('/bitpool-bacnet-data/rebuildDataModel', function (req, res) {
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.rebuildDataModel().then(function (result) {
215
- res.send(result);
216
- }).catch(function (error) {
217
- res.send(error);
218
- logOut("Error getting network data: ", error);
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('/bitpool-bacnet-data/clearBacnetServerPoints', function (req, res) {
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 network data
234
- RED.httpAdmin.get('/bitpool-bacnet-data/getNetworkInterfaces', function (req, res) {
235
- getIpAddress().then(function (result) {
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
- }).catch(function (error) {
238
- logOut("Error getting network interfaces for client: ", error);
239
- });
247
+ }
240
248
  });
241
249
 
242
- //route handler for getting device list
243
- RED.httpAdmin.get('/bitpool-bacnet-data/getDeviceList', function (req, res) {
244
- if (!node.bacnetClient) {
245
- logOut("Issue with the bacnetClient while getting device list: ", node.bacnetClient);
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 network data: ", error);
257
+ logOut("Error getting server points: ", error);
253
258
  });
259
+ } else {
260
+ res.send([]);
254
261
  }
255
262
  });
256
263
 
257
- //route handler for updating device list
258
- RED.httpAdmin.post('/bitpool-bacnet-data/updateDeviceList', function (req, res) {
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.updateDeviceList(req).then(function (result) {
264
- res.send(result);
265
- }).catch(function (error) {
266
- res.send(error);
267
- logOut("Error getting network data: ", error);
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
- node.on('close', function () {
273
- //do nothing
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('values', (device, values, outputType, msgId, fullResult) => {
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('deviceFound', (device) => {
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 (node.nodeName !== "gateway" &&
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 (node.nodeName !== "gateway" &&
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
- "presentValue": points[point][prop]
434
+ presentValue: points[point][prop],
398
435
  };
399
436
  }
400
437
  });
401
438
  }
402
-
403
439
  }
404
- if (node.nodeName !== "gateway" &&
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 (node.nodeName !== "gateway" &&
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 => ele.address == slotProps.node.ipAddr && ele.deviceId == slotProps.node.deviceId);
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 => ele.address == slotProps.node.ipAddr && ele.deviceId == slotProps.node.deviceId);
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
- console.log("removeAllClicked error: ", e);
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 => ele.address == parentDevice.ipAddr && ele.deviceId == parentDevice.deviceId);
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 => ele.address == parentDevice.ipAddr && ele.deviceId == parentDevice.deviceId);
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
@@ -5,7 +5,6 @@
5
5
 
6
6
 
7
7
  module.exports = function (RED) {
8
- const fetch = require('node-fetch');
9
8
  const http = require("http");
10
9
  const { ReadCommandConfig } = require('./common');
11
10
  const baEnum = require('./resources/node-bacstack-ts/dist/index.js').enum;