@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,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
- };