@bitpoolos/edge-bacnet 1.1.7 → 1.2.1

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 (123) hide show
  1. package/README.md +2 -2
  2. package/bacnet_client.js +331 -168
  3. package/bacnet_device.js +50 -16
  4. package/bacnet_gateway.html +119 -15
  5. package/bacnet_gateway.js +388 -395
  6. package/bacnet_read.html +32 -11
  7. package/bacnet_read.js +1 -1
  8. package/bacnet_server.js +86 -24
  9. package/common.js +26 -19
  10. package/examples/1-Discover-Read.json +1 -1
  11. package/examples/2-Discover-Write.json +1 -1
  12. package/examples/3-Discover-Read-Write.json +1 -1
  13. package/package.json +3 -3
  14. package/resources/{node-bacnet/LICENSE.md → node-bacstack-ts/LICENSE} +3 -4
  15. package/resources/node-bacstack-ts/README.md +75 -0
  16. package/resources/{node-bacnet → node-bacstack-ts/dist}/index.js +0 -2
  17. package/resources/node-bacstack-ts/dist/lib/apdu.js +193 -0
  18. package/resources/node-bacstack-ts/dist/lib/asn1.js +1660 -0
  19. package/resources/node-bacstack-ts/dist/lib/bvlc.js +47 -0
  20. package/resources/node-bacstack-ts/dist/lib/client.js +1454 -0
  21. package/resources/node-bacstack-ts/dist/lib/enum.js +2114 -0
  22. package/resources/node-bacstack-ts/dist/lib/npdu.js +112 -0
  23. package/resources/node-bacstack-ts/dist/lib/services/add-list-element.js +58 -0
  24. package/resources/node-bacstack-ts/dist/lib/services/alarm-acknowledge.js +93 -0
  25. package/resources/node-bacstack-ts/dist/lib/services/alarm-summary.js +42 -0
  26. package/resources/node-bacstack-ts/dist/lib/services/atomic-read-file.js +157 -0
  27. package/resources/node-bacstack-ts/dist/lib/services/atomic-write-file.js +136 -0
  28. package/resources/node-bacstack-ts/dist/lib/services/cov-notify.js +119 -0
  29. package/resources/node-bacstack-ts/dist/lib/services/create-object.js +104 -0
  30. package/resources/node-bacstack-ts/dist/lib/services/delete-object.js +21 -0
  31. package/resources/node-bacstack-ts/dist/lib/services/device-communication-control.js +46 -0
  32. package/resources/node-bacstack-ts/dist/lib/services/error.js +27 -0
  33. package/resources/node-bacstack-ts/dist/lib/services/event-information.js +100 -0
  34. package/resources/node-bacstack-ts/dist/lib/services/event-notify-data.js +219 -0
  35. package/resources/node-bacstack-ts/dist/lib/services/get-enrollment-summary.js +172 -0
  36. package/resources/node-bacstack-ts/dist/lib/services/get-event-information.js +135 -0
  37. package/resources/node-bacstack-ts/dist/lib/services/i-am-broadcast.js +59 -0
  38. package/resources/node-bacstack-ts/dist/lib/services/i-have-broadcast.js +34 -0
  39. package/resources/node-bacstack-ts/dist/lib/services/index.js +32 -0
  40. package/resources/node-bacstack-ts/dist/lib/services/life-safety-operation.js +40 -0
  41. package/resources/node-bacstack-ts/dist/lib/services/private-transfer.js +43 -0
  42. package/resources/node-bacstack-ts/dist/lib/services/read-property-multiple.js +44 -0
  43. package/resources/node-bacstack-ts/dist/lib/services/read-property.js +122 -0
  44. package/resources/node-bacstack-ts/dist/lib/services/read-range.js +201 -0
  45. package/resources/node-bacstack-ts/dist/lib/services/reinitialize-device.js +35 -0
  46. package/resources/node-bacstack-ts/dist/lib/services/subscribe-cov.js +55 -0
  47. package/resources/node-bacstack-ts/dist/lib/services/subscribe-property.js +93 -0
  48. package/resources/node-bacstack-ts/dist/lib/services/time-sync.js +31 -0
  49. package/resources/node-bacstack-ts/dist/lib/services/who-has.js +56 -0
  50. package/resources/node-bacstack-ts/dist/lib/services/who-is.js +45 -0
  51. package/resources/node-bacstack-ts/dist/lib/services/write-property-multiple.js +105 -0
  52. package/resources/node-bacstack-ts/dist/lib/services/write-property.js +90 -0
  53. package/resources/node-bacstack-ts/dist/lib/transport.js +49 -0
  54. package/resources/node-bacstack-ts/dist/lib/types.js +2 -0
  55. package/resources/node-bacstack-ts/package.json +94 -0
  56. package/resources/node-bacnet/CHANGELOG.md +0 -481
  57. package/resources/node-bacnet/README.md +0 -91
  58. package/resources/node-bacnet/docs/Client.html +0 -4422
  59. package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
  60. package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
  61. package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
  62. package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
  63. package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
  64. package/resources/node-bacnet/docs/bacnet.html +0 -7032
  65. package/resources/node-bacnet/docs/client.js.html +0 -1759
  66. package/resources/node-bacnet/docs/enum.js.html +0 -2530
  67. package/resources/node-bacnet/docs/global.html +0 -2068
  68. package/resources/node-bacnet/docs/images/mocha-logo.svg +0 -65
  69. package/resources/node-bacnet/docs/index.html +0 -283
  70. package/resources/node-bacnet/docs/scripts/collapse.js +0 -11
  71. package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +0 -4
  72. package/resources/node-bacnet/docs/scripts/linenumber.js +0 -26
  73. package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  74. package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +0 -2
  75. package/resources/node-bacnet/docs/scripts/prettify/prettify.js +0 -28
  76. package/resources/node-bacnet/docs/scripts/search.js +0 -47
  77. package/resources/node-bacnet/docs/services_i-am.js.html +0 -157
  78. package/resources/node-bacnet/docs/services_time-sync.js.html +0 -118
  79. package/resources/node-bacnet/docs/services_who-is.js.html +0 -138
  80. package/resources/node-bacnet/docs/styles/jsdoc.css +0 -683
  81. package/resources/node-bacnet/docs/styles/prettify.css +0 -82
  82. package/resources/node-bacnet/examples/discover-devices.js +0 -66
  83. package/resources/node-bacnet/examples/read-device.js +0 -510
  84. package/resources/node-bacnet/examples/subscribe-cov.js +0 -75
  85. package/resources/node-bacnet/lib/apdu.js +0 -209
  86. package/resources/node-bacnet/lib/asn1.js +0 -1733
  87. package/resources/node-bacnet/lib/bvlc.js +0 -90
  88. package/resources/node-bacnet/lib/client.js +0 -1695
  89. package/resources/node-bacnet/lib/enum.js +0 -2463
  90. package/resources/node-bacnet/lib/npdu.js +0 -123
  91. package/resources/node-bacnet/lib/services/add-list-element.js +0 -64
  92. package/resources/node-bacnet/lib/services/alarm-acknowledge.js +0 -90
  93. package/resources/node-bacnet/lib/services/alarm-summary.js +0 -42
  94. package/resources/node-bacnet/lib/services/atomic-read-file.js +0 -162
  95. package/resources/node-bacnet/lib/services/atomic-write-file.js +0 -138
  96. package/resources/node-bacnet/lib/services/cov-notify.js +0 -126
  97. package/resources/node-bacnet/lib/services/create-object.js +0 -106
  98. package/resources/node-bacnet/lib/services/delete-object.js +0 -23
  99. package/resources/node-bacnet/lib/services/device-communication-control.js +0 -48
  100. package/resources/node-bacnet/lib/services/error.js +0 -33
  101. package/resources/node-bacnet/lib/services/event-information.js +0 -99
  102. package/resources/node-bacnet/lib/services/event-notify-data.js +0 -229
  103. package/resources/node-bacnet/lib/services/get-enrollment-summary.js +0 -178
  104. package/resources/node-bacnet/lib/services/get-event-information.js +0 -144
  105. package/resources/node-bacnet/lib/services/i-am.js +0 -90
  106. package/resources/node-bacnet/lib/services/i-have.js +0 -34
  107. package/resources/node-bacnet/lib/services/index.js +0 -34
  108. package/resources/node-bacnet/lib/services/life-safety-operation.js +0 -40
  109. package/resources/node-bacnet/lib/services/private-transfer.js +0 -43
  110. package/resources/node-bacnet/lib/services/read-property-multiple.js +0 -50
  111. package/resources/node-bacnet/lib/services/read-property.js +0 -130
  112. package/resources/node-bacnet/lib/services/read-range.js +0 -201
  113. package/resources/node-bacnet/lib/services/register-foreign-device.js +0 -18
  114. package/resources/node-bacnet/lib/services/reinitialize-device.js +0 -37
  115. package/resources/node-bacnet/lib/services/subscribe-cov.js +0 -57
  116. package/resources/node-bacnet/lib/services/subscribe-property.js +0 -97
  117. package/resources/node-bacnet/lib/services/time-sync.js +0 -51
  118. package/resources/node-bacnet/lib/services/who-has.js +0 -54
  119. package/resources/node-bacnet/lib/services/who-is.js +0 -71
  120. package/resources/node-bacnet/lib/services/write-property-multiple.js +0 -117
  121. package/resources/node-bacnet/lib/services/write-property.js +0 -94
  122. package/resources/node-bacnet/lib/transport.js +0 -82
  123. package/resources/node-bacnet/package.json +0 -92
package/bacnet_device.js CHANGED
@@ -14,40 +14,74 @@ class BacnetDevice {
14
14
  that.pointsList = config.pointsList;
15
15
  that.pointListUpdateTs = config.pointListUpdateTs;
16
16
  that.manualDiscoveryMode = config.manualDiscoveryMode;
17
+ that.mDiscoverInstanceRange = config.mDiscoverInstanceRange;
18
+ that.pointListRetryCount = config.pointListRetryCount;
17
19
 
18
20
  } else if(fromImport == false) {
19
-
20
- if(config.header.source) {
21
- that.address = {address: config.header.sender.address, net: config.header.source.net, adr: config.header.source.adr};
21
+ if(config.net && config.adr) {
22
+ that.address = {address: config.address, net: config.net, adr: config.adr};
22
23
  that.isMstp = true;
23
24
  } else {
24
- that.address = config.header.sender.address;
25
+ that.address = config.address;
25
26
  that.isMstp = false;
26
27
  }
27
- that.deviceId = config.payload.deviceId;
28
- that.maxApdu = config.payload.maxApdu;
29
- that.segmentation = config.payload.segmentation;
30
- that.vendorId = config.payload.vendorId;
28
+ that.deviceId = config.deviceId;
29
+ that.maxApdu = config.maxApdu;
30
+ that.segmentation = config.segmentation;
31
+ that.vendorId = config.vendorId;
31
32
  that.lastSeen = null;
32
33
  that.deviceName = null;
33
34
  that.pointsList = [];
34
35
  that.pointListUpdateTs = null;
35
36
  that.manualDiscoveryMode = false;
37
+ that.mDiscoverInstanceRange = {start: 0, end: 100};
38
+ that.pointListRetryCount = 0;
36
39
  }
37
40
  }
38
41
 
39
42
  updateDeviceConfig(config) {
40
- if(config.header.sender.address !== "" && config.header.sender.address !== null && config.header.sender.address !== "undefined") {
41
- if(config.header.source) {
42
- this.address = {address: config.header.sender.address, net: config.header.source.net, adr: config.header.source.adr};
43
+ if(config.address !== "" && config.address !== null && config.address !== "undefined") {
44
+ if(config.net && config.adr) {
45
+ this.address = {address: config.address, net: config.net, adr: config.adr};
43
46
  } else {
44
- this.address = config.header.sender.address;
47
+ this.address = config.address;
45
48
  }
46
49
  }
47
- if(Number.isInteger(config.deviceId)) this.deviceId = config.payload.deviceId;
48
- if(Number.isInteger(config.maxApdu)) this.maxApdu = config.payload.maxApdu;
49
- if(Number.isInteger(config.segmentation)) this.segmentation = config.payload.segmentation;
50
- if(Number.isInteger(config.vendorId)) this.vendorId = config.payload.vendorId;
50
+ if(Number.isInteger(config.deviceId)) this.deviceId = config.deviceId;
51
+ if(Number.isInteger(config.maxApdu)) this.maxApdu = config.maxApdu;
52
+ if(Number.isInteger(config.segmentation)) this.segmentation = config.segmentation;
53
+ if(Number.isInteger(config.vendorId)) this.vendorId = config.vendorId;
54
+ }
55
+
56
+ getPointListRetryCount() {
57
+ return this.pointListRetryCount;
58
+ }
59
+
60
+ incrementPointListRetryCount() {
61
+ this.pointListRetryCount++;
62
+ }
63
+
64
+ clearPointListRetryCount() {
65
+ this.pointListRetryCount = 0;
66
+ }
67
+
68
+ getmDiscoverInstanceRange() {
69
+ return this.mDiscoverInstanceRange;
70
+ }
71
+
72
+ setmDiscoverInstanceRange(range) {
73
+ this.mDiscoverInstanceRange = range;
74
+ }
75
+
76
+ updatemDiscoverInstanceRange(position, value) {
77
+ this.mDiscoverInstanceRange[position] = value;
78
+ }
79
+
80
+ shouldBeInManualMode() {
81
+ if(this.mDiscoverInstanceRange.start >= 1000000 || this.mDiscoverInstanceRange.end >= 1000000) {
82
+ return false;
83
+ }
84
+ return true;
51
85
  }
52
86
 
53
87
  setManualDiscoveryMode(bool) {
@@ -96,6 +96,7 @@
96
96
  local_device_port: {value: 47808, required: true},
97
97
  apduSize: {value: "5", required: true},
98
98
  maxSegments: {value: "0x50", required: true},
99
+ retries: {value: "5", required: true},
99
100
  broadCastAddr: {value: "255.255.255.255", required: true},
100
101
  toLogIam: {value: true},
101
102
  discover_polling_schedule: {value: ""},
@@ -110,9 +111,9 @@
110
111
  manual_instance_range_end: {value: 10000},
111
112
  logErrorToConsole: {value: false},
112
113
  serverEnabled: {value: false},
113
- bacnetServerRebuildSchedule: {value: ""},
114
- bacnetServerRebuildSchedule_value: {value: "1", required: true},
115
- bacnetServerRebuildSchedule_options: {value: "Hours", required: true}
114
+ device_read_schedule: {value: ""},
115
+ device_read_schedule_value: {value: "1", required: true},
116
+ device_read_schedule_options: {value: "Minutes", required: true}
116
117
  },
117
118
  networkInterfaces: [],
118
119
  inputs: 1,
@@ -260,7 +261,8 @@
260
261
  },
261
262
  components: {
262
263
  "p-button": primevue.button,
263
- "p-confirm-dialog": primevue.confirmdialog
264
+ "p-confirm-dialog": primevue.confirmdialog,
265
+ "p-confirm-popup": primevue.confirmpopup
264
266
  }
265
267
  };
266
268
 
@@ -268,9 +270,46 @@
268
270
  vueapp.use(primevue.config.default);
269
271
  vueapp.use(primevue.confirmpopup);
270
272
  vueapp.use(primevue.confirmationservice);
271
- node.vm = vueapp.mount("#clearServerContainer");
272
-
273
+ node.vm1 = vueapp.mount("#clearServerContainer");
274
+
275
+ $("#file-upload").on("change", function(event) {
276
+ const input = event.target.files[0];
277
+ const reader = new FileReader();
278
+
279
+ reader.onload = function (e) {
280
+ const text = e.target.result;
281
+
282
+ let jsonPayload = JSON.parse(text);
283
+
284
+ $.ajax({
285
+ type: "POST",
286
+ url: '/bitpool-bacnet-data/updateDeviceList',
287
+ dataType: 'json',
288
+ contentType: 'application/json',
289
+ data: JSON.stringify(jsonPayload),
290
+ success: function (result) {
291
+ },
292
+ timeout: 10000
293
+ });
294
+
295
+ };
273
296
 
297
+ reader.readAsText(input);
298
+ });
299
+
300
+ $("#file-export").click(function(params) {
301
+ $.ajax({
302
+ url: '/bitpool-bacnet-data/getDeviceList',
303
+ success: function (deviceList) {
304
+ let data = "text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(deviceList));
305
+ let aEle = document.getElementById("exportJSON");
306
+ aEle.setAttribute("href", "data:" + data);
307
+ aEle.setAttribute("download", "bitpool-bacnet-devices.json");
308
+ aEle.click();
309
+ },
310
+ timeout: 10000
311
+ });
312
+ });
274
313
  },
275
314
  oneditsave: function (test) {
276
315
  let node = this;
@@ -280,9 +319,9 @@
280
319
  document.getElementById("node-input-discover_polling_schedule_options").value
281
320
  );
282
321
 
283
- document.getElementById("node-input-bacnetServerRebuildSchedule").value = getTimePeriodInSeconds(
284
- document.getElementById("node-input-bacnetServerRebuildSchedule_value").value,
285
- document.getElementById("node-input-bacnetServerRebuildSchedule_options").value
322
+ document.getElementById("node-input-device_read_schedule").value = getTimePeriodInSeconds(
323
+ document.getElementById("node-input-device_read_schedule_value").value,
324
+ document.getElementById("node-input-device_read_schedule_options").value
286
325
  );
287
326
  }
288
327
  });
@@ -353,6 +392,29 @@
353
392
  align-items: center;
354
393
  justify-content: space-around;
355
394
  }
395
+ button {
396
+ height: 34px;
397
+ border-radius: 5px !important;
398
+ }
399
+ .inputStyle {
400
+ color: var(--red-ui-workspace-button-color-hover) !important;
401
+ background: var(--red-ui-workspace-button-background-hover);
402
+ border: 1px solid var(--red-ui-secondary-border-color);
403
+ border-radius: 5px !important;
404
+ }
405
+ input[type="file"] {
406
+ display: none !important;
407
+ }
408
+ .custom-file-upload {
409
+ border: 1px solid var(--red-ui-secondary-border-color);
410
+ border-radius: 5px !important;
411
+ padding: 6px 12px;
412
+ cursor: pointer;
413
+ }
414
+ .uploadButton {
415
+ margin-bottom: 5px !important;
416
+ margin-left: 30px !important;
417
+ }
356
418
 
357
419
  </style>
358
420
 
@@ -401,7 +463,6 @@
401
463
  </div>
402
464
 
403
465
  <div id='read-discover-tab' style='display:none'>
404
-
405
466
  <div class="form-row">
406
467
  <label for="node-input-apduTimeout"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.apduTimeout"></span>Apdu Timeout</label>
407
468
  <input type="text" id="node-input-apduTimeout" placeholder="10000">
@@ -433,8 +494,25 @@
433
494
  </select>
434
495
  </div>
435
496
 
497
+ <div class="form-row">
498
+ <label for="node-input-retries"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.retries"></span>Number of Retries</label>
499
+ <select id="node-input-retries">
500
+ <option value="0">0</option>
501
+ <option value="1">1</option>
502
+ <option value="2">2</option>
503
+ <option value="3">3</option>
504
+ <option value="4">4</option>
505
+ <option value="5">5</option>
506
+ <option value="6">6</option>
507
+ <option value="7">7</option>
508
+ <option value="8">8</option>
509
+ <option value="9">9</option>
510
+ <option value="10">10</option>
511
+ </select>
512
+ </div>
513
+
436
514
  <div class="form-row" style="align-items: center; display: flex;">
437
- <label for="node-input-discover_polling_schedule_value"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.bacnet_polling_schedule"></span>Discover Frequency</label>
515
+ <label for="node-input-discover_polling_schedule_value"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.bacnet_polling_schedule"></span>Device Discover Frequency</label>
438
516
  <p style="margin-right: 5px; margin-bottom: 0px; padding-left: 7px;">Every</p>
439
517
  <input type="text" id="node-input-discover_polling_schedule" style="display: none;">
440
518
  <input type="text" id="node-input-discover_polling_schedule_value" placeholder="5" style="width: 70px; margin-right: 5px;">
@@ -452,6 +530,19 @@
452
530
  <a style="padding-left: 60px;">Start: </a><input type="number" id="node-input-manual_instance_range_start" style="width: 125px;" min="0" max="100000"/>
453
531
  <a style="padding-left: 35px;">End: </a><input type="number" id="node-input-manual_instance_range_end" style="width: 125px;" min="1" max="100000"/>
454
532
  </div>
533
+
534
+ <div class="form-row" style="align-items: center; display: flex;">
535
+ <label for="node-input-device_read_schedule_value"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.device_read_schedule"></span>Object Discover Frequency</label>
536
+ <p style="margin-right: 5px; margin-bottom: 0px; padding-left: 7px;">Every</p>
537
+ <input type="text" id="node-input-device_read_schedule" style="display: none;">
538
+ <input type="text" id="node-input-device_read_schedule_value" placeholder="5" style="width: 70px; margin-right: 5px;">
539
+ <select name="timePeriod" id="node-input-device_read_schedule_options" style="width: 120px; margin-right: 5px;">
540
+ <option value="Seconds">Seconds</option>
541
+ <option value="Minutes">Minutes</option>
542
+ <option value="Hours">Hours</option>
543
+ <option value="Days">Days</option>
544
+ </select>
545
+ </div>
455
546
 
456
547
  <div class="form-row">
457
548
  <label for="node-input-toLog">
@@ -462,17 +553,32 @@
462
553
 
463
554
  <div class="form-row">
464
555
  <label for="node-input-logErrorToConsole">
465
- Log BACnet errors to console:
556
+ Log BACnet errors to console:
466
557
  </label>
467
558
  <input type="checkbox" id="node-input-logErrorToConsole" style="width: auto;"/>
468
559
  </div>
469
560
 
561
+ <div class="form-row" id="importDeviceList">
562
+ <label>
563
+ Device List:
564
+ </label>
565
+ <label for="file-upload" class="custom-file-upload">
566
+ <i class="fa fa-cloud-upload" id="fileLabel"></i> <a id="fileLabelText" style="padding-left: 10px;">Import</a>
567
+ </label>
568
+ <input type="file" id="file-upload" accept="application/JSON" class="inputStyle" style="width: 258px;">
569
+ <label for="file-export" class="custom-file-upload" style="margin-left: 30px;">
570
+ <i class="fa fa-cloud-download" id="fileLabel"></i> <a id="fileLabelText" style="padding-left: 10px;">Export</a>
571
+ </label>
572
+ <input id="file-export" class="inputStyle" style="width: 258px; display: none;">
573
+ <a id="exportJSON" style="display: none"></a>
574
+ </div>
470
575
  </div>
576
+
471
577
  <div id='read-server-tab' style='display:none'>
472
578
  <div class="read_server_parent_div">
473
579
  <div class="form-row">
474
580
  <label for="node-input-serverEnabled">
475
- Enabled:
581
+ Enabled:
476
582
  </label>
477
583
  <input type="checkbox" id="node-input-serverEnabled" style="width: auto;"/>
478
584
  </div>
@@ -480,10 +586,8 @@
480
586
  <div class="form-row" id="clearServerContainer" style="align-items: center; display: flex;">
481
587
  <label for="node-input-bacnetServerRebuildSchedule_value" class="clear_server_span"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.bacnetServerRebuildSchedule"></span> </label>
482
588
  <p-button class="bacnetServerRebuildSchedule_clearButton p-button-danger" @click="confirm($event)" label="Reinitialize Server" ></p-button>
483
-
484
589
  </div>
485
590
  </div>
486
-
487
591
  </div>
488
592
 
489
593
  </script>