@bitpoolos/edge-bacnet 1.1.8 → 1.2.2

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 (122) hide show
  1. package/bacnet_client.js +336 -168
  2. package/bacnet_device.js +50 -16
  3. package/bacnet_gateway.html +119 -15
  4. package/bacnet_gateway.js +388 -395
  5. package/bacnet_read.html +32 -11
  6. package/bacnet_read.js +1 -1
  7. package/bacnet_server.js +16 -12
  8. package/common.js +26 -19
  9. package/examples/1-Discover-Read.json +1 -1
  10. package/examples/2-Discover-Write.json +1 -1
  11. package/examples/3-Discover-Read-Write.json +1 -1
  12. package/package.json +3 -3
  13. package/resources/{node-bacnet/LICENSE.md → node-bacstack-ts/LICENSE} +3 -4
  14. package/resources/node-bacstack-ts/README.md +75 -0
  15. package/resources/{node-bacnet → node-bacstack-ts/dist}/index.js +0 -2
  16. package/resources/node-bacstack-ts/dist/lib/apdu.js +193 -0
  17. package/resources/node-bacstack-ts/dist/lib/asn1.js +1660 -0
  18. package/resources/node-bacstack-ts/dist/lib/bvlc.js +47 -0
  19. package/resources/node-bacstack-ts/dist/lib/client.js +1454 -0
  20. package/resources/node-bacstack-ts/dist/lib/enum.js +2114 -0
  21. package/resources/node-bacstack-ts/dist/lib/npdu.js +112 -0
  22. package/resources/node-bacstack-ts/dist/lib/services/add-list-element.js +58 -0
  23. package/resources/node-bacstack-ts/dist/lib/services/alarm-acknowledge.js +93 -0
  24. package/resources/node-bacstack-ts/dist/lib/services/alarm-summary.js +42 -0
  25. package/resources/node-bacstack-ts/dist/lib/services/atomic-read-file.js +157 -0
  26. package/resources/node-bacstack-ts/dist/lib/services/atomic-write-file.js +136 -0
  27. package/resources/node-bacstack-ts/dist/lib/services/cov-notify.js +119 -0
  28. package/resources/node-bacstack-ts/dist/lib/services/create-object.js +104 -0
  29. package/resources/node-bacstack-ts/dist/lib/services/delete-object.js +21 -0
  30. package/resources/node-bacstack-ts/dist/lib/services/device-communication-control.js +46 -0
  31. package/resources/node-bacstack-ts/dist/lib/services/error.js +27 -0
  32. package/resources/node-bacstack-ts/dist/lib/services/event-information.js +100 -0
  33. package/resources/node-bacstack-ts/dist/lib/services/event-notify-data.js +219 -0
  34. package/resources/node-bacstack-ts/dist/lib/services/get-enrollment-summary.js +172 -0
  35. package/resources/node-bacstack-ts/dist/lib/services/get-event-information.js +135 -0
  36. package/resources/node-bacstack-ts/dist/lib/services/i-am-broadcast.js +59 -0
  37. package/resources/node-bacstack-ts/dist/lib/services/i-have-broadcast.js +34 -0
  38. package/resources/node-bacstack-ts/dist/lib/services/index.js +32 -0
  39. package/resources/node-bacstack-ts/dist/lib/services/life-safety-operation.js +40 -0
  40. package/resources/node-bacstack-ts/dist/lib/services/private-transfer.js +43 -0
  41. package/resources/node-bacstack-ts/dist/lib/services/read-property-multiple.js +44 -0
  42. package/resources/node-bacstack-ts/dist/lib/services/read-property.js +122 -0
  43. package/resources/node-bacstack-ts/dist/lib/services/read-range.js +201 -0
  44. package/resources/node-bacstack-ts/dist/lib/services/reinitialize-device.js +35 -0
  45. package/resources/node-bacstack-ts/dist/lib/services/subscribe-cov.js +55 -0
  46. package/resources/node-bacstack-ts/dist/lib/services/subscribe-property.js +93 -0
  47. package/resources/node-bacstack-ts/dist/lib/services/time-sync.js +31 -0
  48. package/resources/node-bacstack-ts/dist/lib/services/who-has.js +56 -0
  49. package/resources/node-bacstack-ts/dist/lib/services/who-is.js +45 -0
  50. package/resources/node-bacstack-ts/dist/lib/services/write-property-multiple.js +105 -0
  51. package/resources/node-bacstack-ts/dist/lib/services/write-property.js +90 -0
  52. package/resources/node-bacstack-ts/dist/lib/transport.js +49 -0
  53. package/resources/node-bacstack-ts/dist/lib/types.js +2 -0
  54. package/resources/node-bacstack-ts/package.json +94 -0
  55. package/resources/node-bacnet/CHANGELOG.md +0 -481
  56. package/resources/node-bacnet/README.md +0 -91
  57. package/resources/node-bacnet/docs/Client.html +0 -4422
  58. package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
  59. package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
  60. package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
  61. package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
  62. package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
  63. package/resources/node-bacnet/docs/bacnet.html +0 -7032
  64. package/resources/node-bacnet/docs/client.js.html +0 -1759
  65. package/resources/node-bacnet/docs/enum.js.html +0 -2530
  66. package/resources/node-bacnet/docs/global.html +0 -2068
  67. package/resources/node-bacnet/docs/images/mocha-logo.svg +0 -65
  68. package/resources/node-bacnet/docs/index.html +0 -283
  69. package/resources/node-bacnet/docs/scripts/collapse.js +0 -11
  70. package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +0 -4
  71. package/resources/node-bacnet/docs/scripts/linenumber.js +0 -26
  72. package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  73. package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +0 -2
  74. package/resources/node-bacnet/docs/scripts/prettify/prettify.js +0 -28
  75. package/resources/node-bacnet/docs/scripts/search.js +0 -47
  76. package/resources/node-bacnet/docs/services_i-am.js.html +0 -157
  77. package/resources/node-bacnet/docs/services_time-sync.js.html +0 -118
  78. package/resources/node-bacnet/docs/services_who-is.js.html +0 -138
  79. package/resources/node-bacnet/docs/styles/jsdoc.css +0 -683
  80. package/resources/node-bacnet/docs/styles/prettify.css +0 -82
  81. package/resources/node-bacnet/examples/discover-devices.js +0 -66
  82. package/resources/node-bacnet/examples/read-device.js +0 -510
  83. package/resources/node-bacnet/examples/subscribe-cov.js +0 -75
  84. package/resources/node-bacnet/lib/apdu.js +0 -209
  85. package/resources/node-bacnet/lib/asn1.js +0 -1733
  86. package/resources/node-bacnet/lib/bvlc.js +0 -90
  87. package/resources/node-bacnet/lib/client.js +0 -1695
  88. package/resources/node-bacnet/lib/enum.js +0 -2463
  89. package/resources/node-bacnet/lib/npdu.js +0 -123
  90. package/resources/node-bacnet/lib/services/add-list-element.js +0 -64
  91. package/resources/node-bacnet/lib/services/alarm-acknowledge.js +0 -90
  92. package/resources/node-bacnet/lib/services/alarm-summary.js +0 -42
  93. package/resources/node-bacnet/lib/services/atomic-read-file.js +0 -162
  94. package/resources/node-bacnet/lib/services/atomic-write-file.js +0 -138
  95. package/resources/node-bacnet/lib/services/cov-notify.js +0 -126
  96. package/resources/node-bacnet/lib/services/create-object.js +0 -106
  97. package/resources/node-bacnet/lib/services/delete-object.js +0 -23
  98. package/resources/node-bacnet/lib/services/device-communication-control.js +0 -48
  99. package/resources/node-bacnet/lib/services/error.js +0 -33
  100. package/resources/node-bacnet/lib/services/event-information.js +0 -99
  101. package/resources/node-bacnet/lib/services/event-notify-data.js +0 -229
  102. package/resources/node-bacnet/lib/services/get-enrollment-summary.js +0 -178
  103. package/resources/node-bacnet/lib/services/get-event-information.js +0 -144
  104. package/resources/node-bacnet/lib/services/i-am.js +0 -90
  105. package/resources/node-bacnet/lib/services/i-have.js +0 -34
  106. package/resources/node-bacnet/lib/services/index.js +0 -34
  107. package/resources/node-bacnet/lib/services/life-safety-operation.js +0 -40
  108. package/resources/node-bacnet/lib/services/private-transfer.js +0 -43
  109. package/resources/node-bacnet/lib/services/read-property-multiple.js +0 -50
  110. package/resources/node-bacnet/lib/services/read-property.js +0 -130
  111. package/resources/node-bacnet/lib/services/read-range.js +0 -201
  112. package/resources/node-bacnet/lib/services/register-foreign-device.js +0 -18
  113. package/resources/node-bacnet/lib/services/reinitialize-device.js +0 -37
  114. package/resources/node-bacnet/lib/services/subscribe-cov.js +0 -57
  115. package/resources/node-bacnet/lib/services/subscribe-property.js +0 -97
  116. package/resources/node-bacnet/lib/services/time-sync.js +0 -51
  117. package/resources/node-bacnet/lib/services/who-has.js +0 -54
  118. package/resources/node-bacnet/lib/services/who-is.js +0 -71
  119. package/resources/node-bacnet/lib/services/write-property-multiple.js +0 -117
  120. package/resources/node-bacnet/lib/services/write-property.js +0 -94
  121. package/resources/node-bacnet/lib/transport.js +0 -82
  122. package/resources/node-bacnet/package.json +0 -92
@@ -1,75 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * This script will discover tze devices and tries to register a COV for ANALOG_INPUT 0
5
- * The script works very well when the Yabe Room Simulator exe is running
6
- *
7
- * After 20s the subscription is cancelled by updating it with a lifetime of 1s
8
- */
9
-
10
- const Bacnet = require('../index');
11
-
12
- // you need to run the Weather2 Station of the YABE BACnet package
13
- // https://sourceforge.net/projects/yetanotherbacnetexplorer/
14
-
15
- // create instance of Bacnet
16
- const bacnetClient = new Bacnet({apduTimeout: 10000, interface: '0.0.0.0'});
17
-
18
- // emitted for each new message
19
- bacnetClient.on('message', (msg, rinfo) => {
20
- console.log(msg);
21
- if (rinfo) console.log(rinfo);
22
- });
23
-
24
- // emitted on errors
25
- bacnetClient.on('error', (err) => {
26
- console.error(err);
27
- bacnetClient.close();
28
- });
29
-
30
- // emmitted when Bacnet server listens for incoming UDP packages
31
- bacnetClient.on('listening', () => {
32
- console.log('sent whoIs ' + Date.now());
33
- // discover devices once we are listening
34
- bacnetClient.whoIs();
35
- });
36
-
37
- // emitted when "Change of object" Messages are coming in
38
- bacnetClient.on('covNotifyUnconfirmed', (data) => {
39
- console.log('Received COV: ' + JSON.stringify(data));
40
- });
41
-
42
- // emitted when a new device is discovered in the network
43
- bacnetClient.on('iAm', (device) => {
44
- console.log('Received iAm: ' + JSON.stringify(device, null, 4));
45
- // address object of discovered device,
46
- // just use in subsequent calls that are directed to this device
47
- const address = device.header.sender;
48
-
49
- //discovered device ID
50
- const deviceId = device.payload.deviceId;
51
- console.log('Found Device ' + deviceId + ' on ' + JSON.stringify(address));
52
-
53
- // Subscribe changes for RESENT_VALUE of ANALOG_INPUT,0 object
54
- // lifetime 0 means "for ever"
55
- bacnetClient.subscribeCov(address, {type: 0, instance: 0}, 85, false, false, 0, (err) => {
56
- console.log('subscribeCOV' + err);
57
- });
58
-
59
- // after 20s re-subscribe but with 1s lifetime to stop it
60
- // I had issues with "cancel" call with the simulated device
61
- setTimeout(() => {
62
- bacnetClient.subscribeCov(address, {type: 0, instance: 0}, 85, false, false, 1, (err) => {
63
- console.log('UnsubscribeCOV' + err);
64
- });
65
- }, 20000);
66
-
67
- });
68
-
69
- // after 30s end the connection
70
- setTimeout(() => {
71
-
72
- bacnetClient.close();
73
- console.log('closed transport ' + Date.now());
74
-
75
- }, 30000); // do not close to fast
@@ -1,209 +0,0 @@
1
- 'use strict';
2
-
3
- const baAsn1 = require('./asn1');
4
- const baEnum = require('./enum');
5
- const debug = require('debug')('bacnet:apdu:debug');
6
- const trace = require('debug')('bacnet:apdu:trace');
7
-
8
- const getDecodedType = module.exports.getDecodedType = (buffer, offset) => {
9
- return buffer[offset];
10
- };
11
-
12
- module.exports.setDecodedType = (buffer, offset, type) => {
13
- buffer[offset] = type;
14
- };
15
-
16
- module.exports.getDecodedInvokeId = (buffer, offset) => {
17
- const type = getDecodedType(buffer, offset);
18
- switch (type & baEnum.PDU_TYPE_MASK) {
19
- case baEnum.PduType.SIMPLE_ACK:
20
- case baEnum.PduType.COMPLEX_ACK:
21
- case baEnum.PduType.ERROR:
22
- case baEnum.PduType.REJECT:
23
- case baEnum.PduType.ABORT:
24
- return buffer[offset + 1];
25
- case baEnum.PduType.CONFIRMED_REQUEST:
26
- return buffer[offset + 2];
27
- default:
28
- return undefined;
29
- }
30
- };
31
-
32
- module.exports.encodeConfirmedServiceRequest = (buffer, type, service, maxSegments, maxApdu, invokeId, sequencenumber, proposedWindowSize) => {
33
- buffer.buffer[buffer.offset++] = type;
34
- buffer.buffer[buffer.offset++] = maxSegments | maxApdu;
35
- buffer.buffer[buffer.offset++] = invokeId;
36
- if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
37
- buffer.buffer[buffer.offset++] = sequencenumber;
38
- buffer.buffer[buffer.offset++] = proposedWindowSize;
39
- }
40
- buffer.buffer[buffer.offset++] = service;
41
- };
42
-
43
- module.exports.decodeConfirmedServiceRequest = (buffer, offset) => {
44
- const orgOffset = offset;
45
- const type = buffer[offset++];
46
- const maxSegments = buffer[offset] & 0xF0;
47
- const maxApdu = buffer[offset++] & 0x0F;
48
- const invokeId = buffer[offset++];
49
- let sequencenumber = 0;
50
- let proposedWindowNumber = 0;
51
- if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
52
- sequencenumber = buffer[offset++];
53
- proposedWindowNumber = buffer[offset++];
54
- }
55
- const service = buffer[offset++];
56
- return {
57
- len: offset - orgOffset,
58
- type,
59
- service,
60
- maxSegments,
61
- maxApdu,
62
- invokeId,
63
- sequencenumber,
64
- proposedWindowNumber
65
- };
66
- };
67
-
68
- module.exports.encodeUnconfirmedServiceRequest = (buffer, type, service) => {
69
- buffer.buffer[buffer.offset++] = type;
70
- buffer.buffer[buffer.offset++] = service;
71
- };
72
-
73
- module.exports.decodeUnconfirmedServiceRequest = (buffer, offset) => {
74
- const orgOffset = offset;
75
- const type = buffer[offset++];
76
- const service = buffer[offset++];
77
- return {
78
- len: offset - orgOffset,
79
- type,
80
- service
81
- };
82
- };
83
-
84
- module.exports.encodeSimpleAck = (buffer, type, service, invokeId) => {
85
- buffer.buffer[buffer.offset++] = type;
86
- buffer.buffer[buffer.offset++] = invokeId;
87
- buffer.buffer[buffer.offset++] = service;
88
- };
89
-
90
- module.exports.decodeSimpleAck = (buffer, offset) => {
91
- const orgOffset = offset;
92
- const type = buffer[offset++];
93
- const invokeId = buffer[offset++];
94
- const service = buffer[offset++];
95
- return {
96
- len: offset - orgOffset,
97
- type,
98
- service,
99
- invokeId
100
- };
101
- };
102
-
103
- module.exports.encodeComplexAck = (buffer, type, service, invokeId, sequencenumber, proposedWindowNumber) => {
104
- let len = 3;
105
- buffer.buffer[buffer.offset++] = type;
106
- buffer.buffer[buffer.offset++] = invokeId;
107
- if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
108
- buffer.buffer[buffer.offset++] = sequencenumber;
109
- buffer.buffer[buffer.offset++] = proposedWindowNumber;
110
- len += 2;
111
- }
112
- buffer.buffer[buffer.offset++] = service;
113
- return len;
114
- };
115
-
116
- module.exports.decodeComplexAck = (buffer, offset) => {
117
- const orgOffset = offset;
118
- const type = buffer[offset++];
119
- const invokeId = buffer[offset++];
120
- let sequencenumber = 0;
121
- let proposedWindowNumber = 0;
122
- if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
123
- sequencenumber = buffer[offset++];
124
- proposedWindowNumber = buffer[offset++];
125
- }
126
- const service = buffer[offset++];
127
- return {
128
- len: offset - orgOffset,
129
- type,
130
- service,
131
- invokeId,
132
- sequencenumber,
133
- proposedWindowNumber
134
- };
135
- };
136
-
137
- module.exports.encodeSegmentAck = (buffer, type, originalInvokeId, sequencenumber, actualWindowSize) => {
138
- buffer.buffer[buffer.offset++] = type;
139
- buffer.buffer[buffer.offset++] = originalInvokeId;
140
- buffer.buffer[buffer.offset++] = sequencenumber;
141
- buffer.buffer[buffer.offset++] = actualWindowSize;
142
- };
143
-
144
- module.exports.decodeSegmentAck = (buffer, offset) => {
145
- const orgOffset = offset;
146
- const type = buffer[offset++];
147
- const originalInvokeId = buffer[offset++];
148
- const sequencenumber = buffer[offset++];
149
- const actualWindowSize = buffer[offset++];
150
- return {
151
- len: offset - orgOffset,
152
- type,
153
- originalInvokeId,
154
- sequencenumber,
155
- actualWindowSize
156
- };
157
- };
158
-
159
- module.exports.encodeResult = (buffer, /* BvlcResultFormat */ resultCode) => {
160
- baAsn1.encodeUnsigned(buffer, resultCode, 2);
161
- };
162
-
163
- module.exports.decodeResult = (buffer, offset) => {
164
- const orgOffset = offset;
165
- const decode = baAsn1.decodeUnsigned(buffer, offset, 2);
166
- offset += decode.len;
167
- return {
168
- len: offset - orgOffset,
169
- resultCode: decode.value, // BvlcResultFormat
170
- };
171
- };
172
-
173
- module.exports.encodeError = (buffer, type, service, invokeId) => {
174
- buffer.buffer[buffer.offset++] = type;
175
- buffer.buffer[buffer.offset++] = invokeId;
176
- buffer.buffer[buffer.offset++] = service;
177
- };
178
-
179
- module.exports.decodeError = (buffer, offset) => {
180
- const orgOffset = offset;
181
- const type = buffer[offset++];
182
- const invokeId = buffer[offset++];
183
- const service = buffer[offset++];
184
- return {
185
- len: offset - orgOffset,
186
- type,
187
- service,
188
- invokeId
189
- };
190
- };
191
-
192
- module.exports.encodeAbort = (buffer, type, invokeId, reason) => {
193
- buffer.buffer[buffer.offset++] = type;
194
- buffer.buffer[buffer.offset++] = invokeId;
195
- buffer.buffer[buffer.offset++] = reason;
196
- };
197
-
198
- module.exports.decodeAbort = (buffer, offset) => {
199
- const orgOffset = offset;
200
- const type = buffer[offset++];
201
- const invokeId = buffer[offset++];
202
- const reason = buffer[offset++];
203
- return {
204
- len: offset - orgOffset,
205
- type,
206
- invokeId,
207
- reason
208
- };
209
- };