@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
@@ -1,126 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.encode = (buffer, subscriberProcessId, initiatingDeviceId, monitoredObjectId, timeRemaining, values) => {
7
- baAsn1.encodeContextUnsigned(buffer, 0, subscriberProcessId);
8
- baAsn1.encodeContextObjectId(buffer, 1, baEnum.ObjectType.DEVICE, initiatingDeviceId);
9
- baAsn1.encodeContextObjectId(buffer, 2, monitoredObjectId.type, monitoredObjectId.instance);
10
- baAsn1.encodeContextUnsigned(buffer, 3, timeRemaining);
11
- baAsn1.encodeOpeningTag(buffer, 4);
12
- values.forEach((value) => {
13
- baAsn1.encodeContextEnumerated(buffer, 0, value.property.id);
14
- if (value.property.index === baEnum.ASN1_ARRAY_ALL) {
15
- baAsn1.encodeContextUnsigned(buffer, 1, value.property.index);
16
- }
17
- baAsn1.encodeOpeningTag(buffer, 2);
18
- value.value.forEach((v) => {
19
- baAsn1.bacappEncodeApplicationData(buffer, v);
20
- });
21
- baAsn1.encodeClosingTag(buffer, 2);
22
- if (value.priority === baEnum.ASN1_NO_PRIORITY) {
23
- baAsn1.encodeContextUnsigned(buffer, 3, value.priority);
24
- }
25
- // TODO: Handle to too large telegrams -> APDU limit
26
- });
27
- baAsn1.encodeClosingTag(buffer, 4);
28
- };
29
-
30
- module.exports.decode = (buffer, offset, apduLen) => {
31
- let len = 0;
32
- let result;
33
- let decodedValue;
34
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0)) {
35
- return undefined;
36
- }
37
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
38
- len += result.len;
39
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
40
- len += decodedValue.len;
41
- const subscriberProcessId = decodedValue.value;
42
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1)) {
43
- return undefined;
44
- }
45
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
46
- len += result.len;
47
- decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
48
- len += decodedValue.len;
49
- const initiatingDeviceId = {type: decodedValue.objectType, instance: decodedValue.instance};
50
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
51
- return undefined;
52
- }
53
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
54
- len += result.len;
55
- decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
56
- len += decodedValue.len;
57
- const monitoredObjectId = {type: decodedValue.objectType, instance: decodedValue.instance};
58
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 3)) {
59
- return undefined;
60
- }
61
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
62
- len += result.len;
63
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
64
- len += decodedValue.len;
65
- const timeRemaining = decodedValue.value;
66
- if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 4)) {
67
- return undefined;
68
- }
69
- len++;
70
- const values = [];
71
- while ((apduLen - len) > 1 && !baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 4)) {
72
- let newEntry = {};
73
- newEntry.property = {};
74
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0)) {
75
- return undefined;
76
- }
77
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
78
- len += result.len;
79
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
80
- len += decodedValue.len;
81
- newEntry.property.id = decodedValue.value;
82
- if (baAsn1.decodeIsContextTag(buffer, offset + len, 1)) {
83
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
84
- len += result.len;
85
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
86
- len += decodedValue.len;
87
- newEntry.property.index = decodedValue.value;
88
- } else {
89
- newEntry.property.index = baEnum.ASN1_ARRAY_ALL;
90
- }
91
- if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 2)) {
92
- return undefined;
93
- }
94
- len++;
95
- const properties = [];
96
- while ((apduLen - len) > 1 && !baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 2)) {
97
- decodedValue = baAsn1.bacappDecodeApplicationData(buffer, offset + len, apduLen + offset, monitoredObjectId.type, newEntry.property.id);
98
- if (!decodedValue) {
99
- return undefined;
100
- }
101
- len += decodedValue.len;
102
- delete decodedValue.len;
103
- properties.push(decodedValue);
104
- }
105
- newEntry.value = properties;
106
- len++;
107
- if (baAsn1.decodeIsContextTag(buffer, offset + len, 3)) {
108
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
109
- len += result.len;
110
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
111
- len += decodedValue.len;
112
- newEntry.priority = decodedValue.value;
113
- } else {
114
- newEntry.priority = baEnum.ASN1_NO_PRIORITY;
115
- }
116
- values.push(newEntry);
117
- }
118
- return {
119
- len,
120
- subscriberProcessId,
121
- initiatingDeviceId,
122
- monitoredObjectId,
123
- timeRemaining,
124
- values
125
- };
126
- };
@@ -1,106 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.encode = (buffer, objectId, values) => {
7
- baAsn1.encodeOpeningTag(buffer, 0);
8
- baAsn1.encodeContextObjectId(buffer, 1, objectId.type, objectId.instance);
9
- baAsn1.encodeClosingTag(buffer, 0);
10
- baAsn1.encodeOpeningTag(buffer, 1);
11
- values.forEach((propertyValue) => {
12
- baAsn1.encodeContextEnumerated(buffer, 0, propertyValue.property.id);
13
- if (propertyValue.property.index !== baEnum.ASN1_ARRAY_ALL) {
14
- baAsn1.encodeContextUnsigned(buffer, 1, propertyValue.property.index);
15
- }
16
- baAsn1.encodeOpeningTag(buffer, 2);
17
- propertyValue.value.forEach((value) => {
18
- baAsn1.bacappEncodeApplicationData(buffer, value);
19
- });
20
- baAsn1.encodeClosingTag(buffer, 2);
21
- if (propertyValue.priority !== baEnum.ASN1_NO_PRIORITY) {
22
- baAsn1.encodeContextUnsigned(buffer, 3, propertyValue.priority);
23
- }
24
- });
25
- baAsn1.encodeClosingTag(buffer, 1);
26
- };
27
-
28
- module.exports.decode = (buffer, offset, apduLen) => {
29
- let len = 0;
30
- let result;
31
- let decodedValue;
32
- let objectId;
33
- const valueList = [];
34
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
35
- len += result.len;
36
- if ((result.tagNumber === 0) && (apduLen > len)) {
37
- apduLen -= len;
38
- if (apduLen < 4) {
39
- return undefined;
40
- }
41
- decodedValue = baAsn1.decodeContextObjectId(buffer, offset + len, 1);
42
- len += decodedValue.len;
43
- objectId = {type: decodedValue.objectType, instance: decodedValue.instance};
44
- } else {
45
- return undefined;
46
- }
47
- if (baAsn1.decodeIsClosingTag(buffer, offset + len)) {
48
- len++;
49
- }
50
- if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 1)) {
51
- return undefined;
52
- }
53
- len++;
54
- while ((apduLen - len) > 1) {
55
- let newEntry = {};
56
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
57
- len += result.len;
58
- if (result.tagNumber !== 0) {
59
- return undefined;
60
- }
61
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
62
- len += decodedValue.len;
63
- let propertyId = decodedValue.value;
64
- let arraIndex = baEnum.ASN1_ARRAY_ALL;
65
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
66
- len += result.len;
67
- if (result.tagNumber === 1) {
68
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
69
- len += decodedValue.len;
70
- arraIndex += decodedValue.value;
71
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
72
- len += result.len;
73
- }
74
- newEntry.property = {id: propertyId, index: arraIndex};
75
- if ((result.tagNumber === 2) && (baAsn1.decodeIsOpeningTag(buffer, offset + len - 1))) {
76
- const values = [];
77
- while (!baAsn1.decodeIsClosingTag(buffer, offset + len)) {
78
- decodedValue = baAsn1.bacappDecodeApplicationData(buffer, offset + len, apduLen + offset, objectId.type, propertyId);
79
- if (!decodedValue) {
80
- return undefined;
81
- }
82
- len += decodedValue.len;
83
- delete decodedValue.len;
84
- values.push(decodedValue);
85
- }
86
- len++;
87
- newEntry.value = values;
88
- } else {
89
- return undefined;
90
- }
91
- valueList.push(newEntry);
92
- }
93
- if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 1)) {
94
- return undefined;
95
- }
96
- len++;
97
- return {
98
- len,
99
- objectId,
100
- values: valueList
101
- };
102
- };
103
-
104
- module.exports.encodeAcknowledge = (buffer, objectId) => {
105
- baAsn1.encodeApplicationObjectId(buffer, objectId.type, objectId.instance);
106
- };
@@ -1,23 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.decode = (buffer, offset, apduLen) => {
7
- const result = baAsn1.decodeTagNumberAndValue(buffer, offset);
8
- if (result.tagNumber !== 12) {
9
- return undefined;
10
- }
11
- let len = 1;
12
- const value = baAsn1.decodeObjectId(buffer, offset + len);
13
- len += value.len;
14
- if (len !== apduLen) {
15
- return undefined;
16
- }
17
- value.len = len;
18
- return value;
19
- };
20
-
21
- module.exports.encode = (buffer, objectId) => {
22
- baAsn1.encodeApplicationObjectId(buffer, objectId.type, objectId.instance);
23
- };
@@ -1,48 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.encode = (buffer, timeDuration, enableDisable, password) => {
7
- if (timeDuration > 0) {
8
- baAsn1.encodeContextUnsigned(buffer, 0, timeDuration);
9
- }
10
- baAsn1.encodeContextEnumerated(buffer, 1, enableDisable);
11
- if (password && password !== '') {
12
- baAsn1.encodeContextCharacterString(buffer, 2, password);
13
- }
14
- };
15
-
16
- module.exports.decode = (buffer, offset, apduLen) => {
17
- let len = 0;
18
- let value = {};
19
- let decodedValue;
20
- let result;
21
- if (baAsn1.decodeIsContextTag(buffer, offset + len, 0)) {
22
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
23
- len += result.len;
24
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
25
- value.timeDuration = decodedValue.value;
26
- len += decodedValue.len;
27
- }
28
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1)) {
29
- return undefined;
30
- }
31
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
32
- len += result.len;
33
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
34
- value.enableDisable = decodedValue.value;
35
- len += decodedValue.len;
36
- if (len < apduLen) {
37
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
38
- return undefined;
39
- }
40
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
41
- len += result.len;
42
- decodedValue = baAsn1.decodeCharacterString(buffer, offset + len, apduLen - (offset + len), result.value);
43
- value.password = decodedValue.value;
44
- len += decodedValue.len;
45
- }
46
- value.len = len;
47
- return value;
48
- };
@@ -1,33 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.encode = (buffer, errorClass, errorCode) => {
7
- baAsn1.encodeApplicationEnumerated(buffer, errorClass);
8
- baAsn1.encodeApplicationEnumerated(buffer, errorCode);
9
- };
10
-
11
- module.exports.decode = (buffer, offset) => {
12
- const orgOffset = offset;
13
- let result;
14
- result = baAsn1.decodeTagNumberAndValue(buffer, offset);
15
- offset += result.len;
16
- const errorClass = baAsn1.decodeEnumerated(buffer, offset, result.value);
17
- offset += errorClass.len;
18
- result = baAsn1.decodeTagNumberAndValue(buffer, offset);
19
- offset += result.len;
20
- const errorCode = baAsn1.decodeEnumerated(buffer, offset, result.value);
21
- offset += errorClass.len;
22
- return {
23
- len: offset - orgOffset,
24
- class: errorClass.value,
25
- code: errorCode.value
26
- };
27
- };
28
-
29
- module.exports.buildMessage = function (result) {
30
- return 'BacnetError Class: ' + baEnum.ErrorClassName[result.class] + ' ' +
31
- '(' + result.class + ') ' +
32
- 'Code: ' + baEnum.ErrorCodeName[result.code] + ' (' + result.code + ')';
33
- };
@@ -1,99 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.encode = (buffer, events, moreEvents) => {
7
- baAsn1.encodeOpeningTag(buffer, 0);
8
- events.forEach((event) => {
9
- baAsn1.encodeContextObjectId(buffer, 0, event.objectId.type, event.objectId.instance);
10
- baAsn1.encodeContextEnumerated(buffer, 1, event.eventState);
11
- baAsn1.encodeContextBitstring(buffer, 2, event.acknowledgedTransitions);
12
- baAsn1.encodeOpeningTag(buffer, 3);
13
- for (let i = 0; i < 3; i++) {
14
- baAsn1.encodeApplicationDate(buffer, event.eventTimeStamps[i]);
15
- baAsn1.encodeApplicationTime(buffer, event.eventTimeStamps[i]);
16
- }
17
- baAsn1.encodeClosingTag(buffer, 3);
18
- baAsn1.encodeContextEnumerated(buffer, 4, event.notifyType);
19
- baAsn1.encodeContextBitstring(buffer, 5, event.eventEnable);
20
- baAsn1.encodeOpeningTag(buffer, 6);
21
- for (let i = 0; i < 3; i++) {
22
- baAsn1.encodeApplicationUnsigned(buffer, event.eventPriorities[i]);
23
- }
24
- baAsn1.encodeClosingTag(buffer, 6);
25
- });
26
- baAsn1.encodeClosingTag(buffer, 0);
27
- baAsn1.encodeContextBoolean(buffer, 1, moreEvents);
28
- };
29
-
30
- module.exports.decode = (buffer, offset, apduLen) => {
31
- let len = 0;
32
- let result;
33
- let decodedValue;
34
- len++;
35
- const alarms = [];
36
- let moreEvents;
37
- while ((apduLen - 3 - len) > 0) {
38
- let value = {};
39
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
40
- len += result.len;
41
- decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
42
- len += decodedValue.len;
43
- value.objectId = {type: decodedValue.objectType, instance: decodedValue.instance};
44
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
45
- len += result.len;
46
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
47
- len += decodedValue.len;
48
- value.eventState = decodedValue.value;
49
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
50
- len += result.len;
51
- decodedValue = baAsn1.decodeBitstring(buffer, offset + len, result.value);
52
- len += decodedValue.len;
53
- value.acknowledgedTransitions = decodedValue.value;
54
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
55
- len += result.len;
56
- value.eventTimeStamps = [];
57
- for (let i = 0; i < 3; i++) {
58
- if (result.tagNumber !== baEnum.ApplicationTag.NULL) {
59
- decodedValue = baAsn1.decodeApplicationDate(buffer, offset + len);
60
- len += decodedValue.len;
61
- const date = decodedValue.value.value;
62
- decodedValue = baAsn1.decodeApplicationTime(buffer, offset + len);
63
- len += decodedValue.len;
64
- const time = decodedValue.value.value;
65
- value.eventTimeStamps[i] = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
66
- } else {
67
- len += result.value;
68
- }
69
- }
70
- len++;
71
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
72
- len += result.len;
73
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
74
- len += decodedValue.len;
75
- value.notifyType = decodedValue.value;
76
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
77
- len += result.len;
78
- decodedValue = baAsn1.decodeBitstring(buffer, offset + len, result.value);
79
- len += decodedValue.len;
80
- value.eventEnable = decodedValue.value;
81
- len++;
82
- value.eventPriorities = [];
83
- for (let i = 0; i < 3; i++) {
84
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
85
- len += result.len;
86
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
87
- len += decodedValue.len;
88
- value.eventPriorities[i] = decodedValue.value;
89
- }
90
- len++;
91
- alarms.push(value);
92
- }
93
- moreEvents = (buffer[apduLen - 1] === 1);
94
- return {
95
- len,
96
- alarms,
97
- moreEvents
98
- };
99
- };
@@ -1,229 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('../asn1');
4
- const baEnum = require('../enum');
5
-
6
- module.exports.encode = (buffer, data) => {
7
- baAsn1.encodeContextUnsigned(buffer, 0, data.processId);
8
- baAsn1.encodeContextObjectId(buffer, 1, data.initiatingObjectId.type, data.initiatingObjectId.instance);
9
- baAsn1.encodeContextObjectId(buffer, 2, data.eventObjectId.type, data.eventObjectId.instance);
10
- baAsn1.bacappEncodeContextTimestamp(buffer, 3, data.timeStamp);
11
- baAsn1.encodeContextUnsigned(buffer, 4, data.notificationClass);
12
- baAsn1.encodeContextUnsigned(buffer, 5, data.priority);
13
- baAsn1.encodeContextEnumerated(buffer, 6, data.eventType);
14
- if (data.messageText && data.messageText !== '') {
15
- baAsn1.encodeContextCharacterString(buffer, 7, data.messageText);
16
- }
17
- baAsn1.encodeContextEnumerated(buffer, 8, data.notifyType);
18
- switch (data.notifyType) {
19
- case baEnum.NotifyType.ALARM:
20
- case baEnum.NotifyType.EVENT:
21
- baAsn1.encodeContextBoolean(buffer, 9, data.ackRequired);
22
- baAsn1.encodeContextEnumerated(buffer, 10, data.fromState);
23
- break;
24
- default:
25
- break;
26
- }
27
- baAsn1.encodeContextEnumerated(buffer, 11, data.toState);
28
- switch (data.notifyType) {
29
- case baEnum.NotifyType.ALARM:
30
- case baEnum.NotifyType.EVENT:
31
- baAsn1.encodeOpeningTag(buffer, 12);
32
- switch (data.eventType) {
33
- case baEnum.EventType.CHANGE_OF_BITSTRING:
34
- baAsn1.encodeOpeningTag(buffer, 0);
35
- baAsn1.encodeContextBitstring(buffer, 0, data.changeOfBitstringReferencedBitString);
36
- baAsn1.encodeContextBitstring(buffer, 1, data.changeOfBitstringStatusFlags);
37
- baAsn1.encodeClosingTag(buffer, 0);
38
- break;
39
- case baEnum.EventType.CHANGE_OF_STATE:
40
- baAsn1.encodeOpeningTag(buffer, 1);
41
- baAsn1.encodeOpeningTag(buffer, 0);
42
- baAsn1.bacappEncodePropertyState(buffer, data.changeOfStateNewState);
43
- baAsn1.encodeClosingTag(buffer, 0);
44
- baAsn1.encodeContextBitstring(buffer, 1, data.changeOfStateStatusFlags);
45
- baAsn1.encodeClosingTag(buffer, 1);
46
- break;
47
- case baEnum.EventType.CHANGE_OF_VALUE:
48
- baAsn1.encodeOpeningTag(buffer, 2);
49
- baAsn1.encodeOpeningTag(buffer, 0);
50
- switch (data.changeOfValueTag) {
51
- case baEnum.CovType.REAL:
52
- baAsn1.encodeContextReal(buffer, 1, data.changeOfValueChangeValue);
53
- break;
54
- case baEnum.CovType.BIT_STRING:
55
- baAsn1.encodeContextBitstring(buffer, 0, data.changeOfValueChangedBits);
56
- break;
57
- default:
58
- throw new Error('NotImplemented');
59
- }
60
- baAsn1.encodeClosingTag(buffer, 0);
61
- baAsn1.encodeContextBitstring(buffer, 1, data.changeOfValueStatusFlags);
62
- baAsn1.encodeClosingTag(buffer, 2);
63
- break;
64
- case baEnum.EventType.FLOATING_LIMIT:
65
- baAsn1.encodeOpeningTag(buffer, 4);
66
- baAsn1.encodeContextReal(buffer, 0, data.floatingLimitReferenceValue);
67
- baAsn1.encodeContextBitstring(buffer, 1, data.floatingLimitStatusFlags);
68
- baAsn1.encodeContextReal(buffer, 2, data.floatingLimitSetPointValue);
69
- baAsn1.encodeContextReal(buffer, 3, data.floatingLimitErrorLimit);
70
- baAsn1.encodeClosingTag(buffer, 4);
71
- break;
72
- case baEnum.EventType.OUT_OF_RANGE:
73
- baAsn1.encodeOpeningTag(buffer, 5);
74
- baAsn1.encodeContextReal(buffer, 0, data.outOfRangeExceedingValue);
75
- baAsn1.encodeContextBitstring(buffer, 1, data.outOfRangeStatusFlags);
76
- baAsn1.encodeContextReal(buffer, 2, data.outOfRangeDeadband);
77
- baAsn1.encodeContextReal(buffer, 3, data.outOfRangeExceededLimit);
78
- baAsn1.encodeClosingTag(buffer, 5);
79
- break;
80
- case baEnum.EventType.CHANGE_OF_LIFE_SAFETY:
81
- baAsn1.encodeOpeningTag(buffer, 8);
82
- baAsn1.encodeContextEnumerated(buffer, 0, data.changeOfLifeSafetyNewState);
83
- baAsn1.encodeContextEnumerated(buffer, 1, data.changeOfLifeSafetyNewMode);
84
- baAsn1.encodeContextBitstring(buffer, 2, data.changeOfLifeSafetyStatusFlags);
85
- baAsn1.encodeContextEnumerated(buffer, 3, data.changeOfLifeSafetyOperationExpected);
86
- baAsn1.encodeClosingTag(buffer, 8);
87
- break;
88
- case baEnum.EventType.BUFFER_READY:
89
- baAsn1.encodeOpeningTag(buffer, 10);
90
- baAsn1.bacappEncodeContextDeviceObjPropertyRef(buffer, 0, data.bufferReadyBufferProperty);
91
- baAsn1.encodeContextUnsigned(buffer, 1, data.bufferReadyPreviousNotification);
92
- baAsn1.encodeContextUnsigned(buffer, 2, data.bufferReadyCurrentNotification);
93
- baAsn1.encodeClosingTag(buffer, 10);
94
- break;
95
- case baEnum.EventType.UNSIGNED_RANGE:
96
- baAsn1.encodeOpeningTag(buffer, 11);
97
- baAsn1.encodeContextUnsigned(buffer, 0, data.unsignedRangeExceedingValue);
98
- baAsn1.encodeContextBitstring(buffer, 1, data.unsignedRangeStatusFlags);
99
- baAsn1.encodeContextUnsigned(buffer, 2, data.unsignedRangeExceededLimit);
100
- baAsn1.encodeClosingTag(buffer, 11);
101
- break;
102
- case baEnum.EventType.EXTENDED:
103
- case baEnum.EventType.COMMAND_FAILURE:
104
- throw new Error('NotImplemented');
105
- default:
106
- throw new Error('NotImplemented');
107
- }
108
- baAsn1.encodeClosingTag(buffer, 12);
109
- break;
110
- case baEnum.NotifyType.ACK_NOTIFICATION:
111
- throw new Error('NotImplemented');
112
- default:
113
- break;
114
- }
115
- };
116
-
117
- module.exports.decode = (buffer, offset) => {
118
- let len = 0;
119
- let result;
120
- let decodedValue;
121
- let eventData = {};
122
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0)) {
123
- return undefined;
124
- }
125
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
126
- len += result.len;
127
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
128
- len += decodedValue.len;
129
- eventData.processId = decodedValue.value;
130
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1)) {
131
- return undefined;
132
- }
133
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
134
- len += result.len;
135
- decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
136
- len += decodedValue.len;
137
- eventData.initiatingObjectId = {type: decodedValue.objectType, instance: decodedValue.instance};
138
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
139
- return undefined;
140
- }
141
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
142
- len += result.len;
143
- decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
144
- len += decodedValue.len;
145
- eventData.eventObjectId = {type: decodedValue.objectType, instance: decodedValue.instance};
146
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 3)) {
147
- return undefined;
148
- }
149
- len += 2;
150
- decodedValue = baAsn1.decodeApplicationDate(buffer, offset + len);
151
- len += decodedValue.len;
152
- const date = decodedValue.value.value;
153
- decodedValue = baAsn1.decodeApplicationTime(buffer, offset + len);
154
- len += decodedValue.len;
155
- const time = decodedValue.value.value;
156
- eventData.timeStamp = {};
157
- eventData.timeStamp = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
158
- len += 2;
159
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 4)) {
160
- return undefined;
161
- }
162
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
163
- len += result.len;
164
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
165
- len += decodedValue.len;
166
- eventData.notificationClass = decodedValue.value;
167
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 5)) {
168
- return undefined;
169
- }
170
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
171
- len += result.len;
172
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
173
- len += decodedValue.len;
174
- eventData.priority = decodedValue.value;
175
- if (eventData.priority > 0xFF) {
176
- return undefined;
177
- }
178
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 6)) {
179
- return undefined;
180
- }
181
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
182
- len += result.len;
183
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
184
- len += decodedValue.len;
185
- eventData.eventType = decodedValue.value;
186
- if (baAsn1.decodeIsContextTag(buffer, offset + len, 7)) {
187
- decodedValue = baAsn1.decodeContextCharacterString(buffer, offset + len, 20000, 7);
188
- len += decodedValue.len;
189
- eventData.messageText = decodedValue.value;
190
- }
191
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 8)) {
192
- return undefined;
193
- }
194
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
195
- len += result.len;
196
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
197
- len += decodedValue.len;
198
- eventData.notifyType = decodedValue.value;
199
- switch (eventData.notifyType) {
200
- case baEnum.NotifyType.ALARM:
201
- case baEnum.NotifyType.EVENT:
202
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
203
- len += result.len;
204
- decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, 1);
205
- len += decodedValue.len;
206
- eventData.ackRequired = (decodedValue.value > 0);
207
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 10)) {
208
- return undefined;
209
- }
210
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
211
- len += result.len;
212
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
213
- len += decodedValue.len;
214
- eventData.fromState = decodedValue.value;
215
- break;
216
- default:
217
- break;
218
- }
219
- if (!baAsn1.decodeIsContextTag(buffer, offset + len, 11)) {
220
- return undefined;
221
- }
222
- result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
223
- len += result.len;
224
- decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
225
- len += decodedValue.len;
226
- eventData.toState = decodedValue.value;
227
- eventData.len = len;
228
- return eventData;
229
- };