@bitpoolos/edge-bacnet 1.0.6 → 1.0.9

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 (179) hide show
  1. package/bacnet_client.js +585 -152
  2. package/bacnet_device.js +34 -11
  3. package/bacnet_gateway.html +189 -92
  4. package/bacnet_gateway.js +152 -21
  5. package/bacnet_object.js +1 -1
  6. package/bacnet_read.html +115 -113
  7. package/bacnet_read.js +24 -24
  8. package/bacnet_write.html +19 -15
  9. package/bacnet_write.js +0 -2
  10. package/common.js +63 -8
  11. package/package.json +6 -4
  12. package/resources/confirmationservice.min.js +1 -0
  13. package/resources/confirmdialog.min.js +1 -0
  14. package/resources/fonts/primeicons.woff2 +0 -0
  15. package/resources/node-bacnet/CHANGELOG.md +481 -0
  16. package/resources/{bacstack → node-bacnet}/LICENSE.md +3 -1
  17. package/resources/node-bacnet/README.md +91 -0
  18. package/resources/node-bacnet/docs/Client.html +4422 -0
  19. package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
  20. package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
  21. package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
  22. package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
  23. package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
  24. package/resources/node-bacnet/docs/bacnet.html +7032 -0
  25. package/resources/node-bacnet/docs/client.js.html +1759 -0
  26. package/resources/node-bacnet/docs/enum.js.html +2530 -0
  27. package/resources/node-bacnet/docs/global.html +2068 -0
  28. package/resources/node-bacnet/docs/images/mocha-logo.svg +65 -0
  29. package/resources/node-bacnet/docs/index.html +283 -0
  30. package/resources/node-bacnet/docs/scripts/collapse.js +11 -0
  31. package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +4 -0
  32. package/resources/node-bacnet/docs/scripts/linenumber.js +26 -0
  33. package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  34. package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +2 -0
  35. package/resources/node-bacnet/docs/scripts/prettify/prettify.js +28 -0
  36. package/resources/node-bacnet/docs/scripts/search.js +47 -0
  37. package/resources/node-bacnet/docs/services_i-am.js.html +157 -0
  38. package/resources/node-bacnet/docs/services_time-sync.js.html +118 -0
  39. package/resources/node-bacnet/docs/services_who-is.js.html +138 -0
  40. package/resources/node-bacnet/docs/styles/jsdoc.css +683 -0
  41. package/resources/node-bacnet/docs/styles/prettify.css +82 -0
  42. package/resources/node-bacnet/examples/discover-devices.js +66 -0
  43. package/resources/node-bacnet/examples/read-device.js +510 -0
  44. package/resources/node-bacnet/examples/subscribe-cov.js +75 -0
  45. package/resources/{bacstack → node-bacnet}/index.js +3 -0
  46. package/resources/{bacstack → node-bacnet}/lib/apdu.js +56 -39
  47. package/resources/{bacstack → node-bacnet}/lib/asn1.js +550 -532
  48. package/resources/node-bacnet/lib/bvlc.js +90 -0
  49. package/resources/node-bacnet/lib/client.js +1695 -0
  50. package/resources/node-bacnet/lib/enum.js +2463 -0
  51. package/resources/node-bacnet/lib/npdu.js +123 -0
  52. package/resources/{bacstack → node-bacnet}/lib/services/add-list-element.js +12 -6
  53. package/resources/{bacstack → node-bacnet}/lib/services/alarm-acknowledge.js +3 -3
  54. package/resources/{bacstack → node-bacnet}/lib/services/alarm-summary.js +5 -4
  55. package/resources/{bacstack → node-bacnet}/lib/services/atomic-read-file.js +49 -26
  56. package/resources/{bacstack → node-bacnet}/lib/services/atomic-write-file.js +40 -23
  57. package/resources/{bacstack → node-bacnet}/lib/services/cov-notify.js +33 -17
  58. package/resources/{bacstack → node-bacnet}/lib/services/create-object.js +23 -13
  59. package/resources/{bacstack → node-bacnet}/lib/services/delete-object.js +7 -2
  60. package/resources/{bacstack → node-bacnet}/lib/services/device-communication-control.js +8 -3
  61. package/resources/{bacstack → node-bacnet}/lib/services/error.js +7 -0
  62. package/resources/{bacstack → node-bacnet}/lib/services/event-information.js +10 -9
  63. package/resources/{bacstack → node-bacnet}/lib/services/event-notify-data.js +38 -16
  64. package/resources/{bacstack → node-bacnet}/lib/services/get-enrollment-summary.js +24 -11
  65. package/resources/{bacstack → node-bacnet}/lib/services/get-event-information.js +28 -13
  66. package/resources/node-bacnet/lib/services/i-am.js +90 -0
  67. package/resources/{bacstack/lib/services/i-have-broadcast.js → node-bacnet/lib/services/i-have.js} +3 -2
  68. package/resources/{bacstack → node-bacnet}/lib/services/index.js +7 -4
  69. package/resources/{bacstack → node-bacnet}/lib/services/life-safety-operation.js +3 -2
  70. package/resources/{bacstack → node-bacnet}/lib/services/private-transfer.js +3 -2
  71. package/resources/{bacstack → node-bacnet}/lib/services/read-property-multiple.js +11 -6
  72. package/resources/{bacstack → node-bacnet}/lib/services/read-property.js +42 -24
  73. package/resources/{bacstack → node-bacnet}/lib/services/read-range.js +37 -27
  74. package/resources/node-bacnet/lib/services/register-foreign-device.js +18 -0
  75. package/resources/{bacstack → node-bacnet}/lib/services/reinitialize-device.js +9 -4
  76. package/resources/{bacstack → node-bacnet}/lib/services/subscribe-cov.js +9 -4
  77. package/resources/{bacstack → node-bacnet}/lib/services/subscribe-property.js +18 -8
  78. package/resources/{bacstack → node-bacnet}/lib/services/time-sync.js +28 -5
  79. package/resources/{bacstack → node-bacnet}/lib/services/who-has.js +3 -3
  80. package/resources/{bacstack → node-bacnet}/lib/services/who-is.js +42 -9
  81. package/resources/{bacstack → node-bacnet}/lib/services/write-property-multiple.js +33 -16
  82. package/resources/{bacstack → node-bacnet}/lib/services/write-property.js +23 -13
  83. package/resources/node-bacnet/lib/transport.js +82 -0
  84. package/resources/node-bacnet/package.json +92 -0
  85. package/resources/primeicons.css +90 -2
  86. package/resources/bacstack/.codeclimate.yml +0 -15
  87. package/resources/bacstack/.dockerignore +0 -5
  88. package/resources/bacstack/.editorconfig +0 -13
  89. package/resources/bacstack/.eslintrc.yml +0 -13
  90. package/resources/bacstack/.github/ISSUE_TEMPLATE.md +0 -26
  91. package/resources/bacstack/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  92. package/resources/bacstack/.github/workflows/ci.yml +0 -39
  93. package/resources/bacstack/.jscsrc +0 -8
  94. package/resources/bacstack/.jshintrc +0 -50
  95. package/resources/bacstack/.travis.yml +0 -27
  96. package/resources/bacstack/CHANGELOG.md +0 -232
  97. package/resources/bacstack/CODE_OF_CONDUCT.md +0 -74
  98. package/resources/bacstack/CONTRIBUTING.md +0 -77
  99. package/resources/bacstack/Dockerfile +0 -15
  100. package/resources/bacstack/FAQ.md +0 -64
  101. package/resources/bacstack/README.md +0 -157
  102. package/resources/bacstack/docker-compose.yml +0 -9
  103. package/resources/bacstack/lib/adpu.js +0 -190
  104. package/resources/bacstack/lib/bvlc.js +0 -43
  105. package/resources/bacstack/lib/client.js +0 -1028
  106. package/resources/bacstack/lib/enum.js +0 -1314
  107. package/resources/bacstack/lib/npdu.js +0 -119
  108. package/resources/bacstack/lib/services/i-am-broadcast.js +0 -51
  109. package/resources/bacstack/lib/services.js +0 -1963
  110. package/resources/bacstack/lib/transport.js +0 -52
  111. package/resources/bacstack/package-lock.json +0 -7974
  112. package/resources/bacstack/package.json +0 -84
  113. package/resources/bacstack/test/compliance/who-is.spec.js +0 -37
  114. package/resources/bacstack/test/integration/acknowledge-alarm.spec.js +0 -14
  115. package/resources/bacstack/test/integration/add-list-element.spec.js +0 -16
  116. package/resources/bacstack/test/integration/confirmed-event-notification.spec.js +0 -30
  117. package/resources/bacstack/test/integration/confirmed-private-transfer.spec.js +0 -15
  118. package/resources/bacstack/test/integration/create-object.spec.js +0 -16
  119. package/resources/bacstack/test/integration/delete-object.spec.js +0 -14
  120. package/resources/bacstack/test/integration/device-communication-control.spec.js +0 -14
  121. package/resources/bacstack/test/integration/get-alarm-summary.spec.js +0 -14
  122. package/resources/bacstack/test/integration/get-enrollment-summary.spec.js +0 -15
  123. package/resources/bacstack/test/integration/get-event-information.spec.js +0 -14
  124. package/resources/bacstack/test/integration/read-file.spec.js +0 -14
  125. package/resources/bacstack/test/integration/read-property-multiple.spec.js +0 -110
  126. package/resources/bacstack/test/integration/read-property.spec.js +0 -14
  127. package/resources/bacstack/test/integration/read-range.spec.js +0 -14
  128. package/resources/bacstack/test/integration/reinitialize-sevice.spec.js +0 -14
  129. package/resources/bacstack/test/integration/remove-list-element.spec.js +0 -16
  130. package/resources/bacstack/test/integration/subscribe-cov.spec.js +0 -14
  131. package/resources/bacstack/test/integration/subscribe-property.spec.js +0 -14
  132. package/resources/bacstack/test/integration/time-sync-utc.spec.js +0 -10
  133. package/resources/bacstack/test/integration/time-sync.spec.js +0 -10
  134. package/resources/bacstack/test/integration/unconfirmed-event-notification.spec.js +0 -28
  135. package/resources/bacstack/test/integration/unconfirmed-private-transfer.spec.js +0 -11
  136. package/resources/bacstack/test/integration/utils.js +0 -30
  137. package/resources/bacstack/test/integration/who-is.spec.js +0 -17
  138. package/resources/bacstack/test/integration/write-file.spec.js +0 -14
  139. package/resources/bacstack/test/integration/write-property-multiple.spec.js +0 -19
  140. package/resources/bacstack/test/integration/write-property.spec.js +0 -14
  141. package/resources/bacstack/test/unit/apdu.spec.js +0 -162
  142. package/resources/bacstack/test/unit/asn1.spec.js +0 -39
  143. package/resources/bacstack/test/unit/bacnet-apdu.spec.js +0 -161
  144. package/resources/bacstack/test/unit/bacnet-asn1.spec.js +0 -32
  145. package/resources/bacstack/test/unit/bacnet-bvlc.spec.js +0 -57
  146. package/resources/bacstack/test/unit/bacnet-npdu.spec.js +0 -118
  147. package/resources/bacstack/test/unit/bacnet-services.spec.js +0 -2052
  148. package/resources/bacstack/test/unit/bvlc.spec.js +0 -58
  149. package/resources/bacstack/test/unit/npdu.spec.js +0 -119
  150. package/resources/bacstack/test/unit/service-add-list-element.spec.js +0 -24
  151. package/resources/bacstack/test/unit/service-alarm-acknowledge.spec.js +0 -71
  152. package/resources/bacstack/test/unit/service-alarm-summary.spec.js +0 -22
  153. package/resources/bacstack/test/unit/service-atomic-read-file.spec.js +0 -54
  154. package/resources/bacstack/test/unit/service-atomic-write-file.spec.js +0 -56
  155. package/resources/bacstack/test/unit/service-cov-notify.spec.js +0 -98
  156. package/resources/bacstack/test/unit/service-create-object.spec.js +0 -90
  157. package/resources/bacstack/test/unit/service-delete-object.spec.js +0 -17
  158. package/resources/bacstack/test/unit/service-device-communication-control.spec.js +0 -29
  159. package/resources/bacstack/test/unit/service-error.spec.js +0 -17
  160. package/resources/bacstack/test/unit/service-event-information.spec.js +0 -48
  161. package/resources/bacstack/test/unit/service-event-notify-data.spec.js +0 -310
  162. package/resources/bacstack/test/unit/service-get-enrollment-summary.spec.js +0 -45
  163. package/resources/bacstack/test/unit/service-get-event-information.spec.js +0 -62
  164. package/resources/bacstack/test/unit/service-i-am.spec.js +0 -19
  165. package/resources/bacstack/test/unit/service-i-have-broadcast.spec.js +0 -18
  166. package/resources/bacstack/test/unit/service-life-safety-operation.spec.js +0 -19
  167. package/resources/bacstack/test/unit/service-private-transfer.spec.js +0 -18
  168. package/resources/bacstack/test/unit/service-read-property-multiple.spec.js +0 -131
  169. package/resources/bacstack/test/unit/service-read-property.spec.js +0 -541
  170. package/resources/bacstack/test/unit/service-read-range.spec.js +0 -97
  171. package/resources/bacstack/test/unit/service-reinitialize-device.spec.js +0 -27
  172. package/resources/bacstack/test/unit/service-subscribe-cov.spec.js +0 -32
  173. package/resources/bacstack/test/unit/service-subscribe-property.spec.js +0 -50
  174. package/resources/bacstack/test/unit/service-time-sync.spec.js +0 -18
  175. package/resources/bacstack/test/unit/service-who-has.spec.js +0 -33
  176. package/resources/bacstack/test/unit/service-who-is.spec.js +0 -17
  177. package/resources/bacstack/test/unit/service-write-property-multiple.spec.js +0 -143
  178. package/resources/bacstack/test/unit/service-write-property.spec.js +0 -198
  179. package/resources/bacstack/test/unit/utils.js +0 -6
package/bacnet_gateway.js CHANGED
@@ -4,7 +4,8 @@
4
4
 
5
5
  module.exports = function (RED) {
6
6
  const { BacnetClient } = require('./bacnet_client');
7
- const { BacnetClientConfig, getIpAddress } = require('./common');
7
+ const { BacnetClientConfig, getIpAddress, doNodeRedRestart } = require('./common');
8
+ const { exec } = require("child_process");
8
9
 
9
10
  function BitpoolBacnetGatewayDevice (config) {
10
11
  RED.nodes.createNode(this, config);
@@ -23,6 +24,12 @@ module.exports = function (RED) {
23
24
  this.device_id_range_enabled = config.device_id_range_enabled;
24
25
  this.device_id_range_start = config.device_id_range_start;
25
26
  this.device_id_range_end = config.device_id_range_end;
27
+ this.manual_instance_range_enabled = config.manual_instance_range_enabled,
28
+ this.manual_instance_range_start = config.manual_instance_range_start,
29
+ this.manual_instance_range_end = config.manual_instance_range_end,
30
+ this.nodeName = config.name;
31
+ this.toRestartNodeRed = config.toRestartNodeRed;
32
+ this.deviceId = config.deviceId;
26
33
 
27
34
  //client and config store
28
35
  this.bacnetConfig = nodeContext.get("bacnetConfig");
@@ -56,42 +63,76 @@ module.exports = function (RED) {
56
63
  node.discover_polling_schedule,
57
64
  node.device_id_range_enabled,
58
65
  node.device_id_range_start,
59
- node.device_id_range_end
66
+ node.device_id_range_end,
67
+ node.toRestartNodeRed,
68
+ node.deviceId,
69
+ node.manual_instance_range_enabled,
70
+ node.manual_instance_range_start,
71
+ node.manual_instance_range_end
60
72
  );
61
73
  nodeContext.set("bacnetConfig", node.bacnetConfig);
62
74
 
75
+ //console.log("toRestartNodeRed: ", node.toRestartNodeRed);
76
+
77
+ // if(node.toRestartNodeRed == true) {
78
+
79
+ // doNodeRedRestart().then(function(result) {
80
+ // console.log("restart result: ", result);
81
+ // }).catch(function(error) {
82
+ // console.log("restart error: ", error);
83
+ // });
84
+
85
+ // node.toRestartNodeRed = false;
86
+ // }
87
+
63
88
  if(typeof node.bacnetClient !== 'undefined') {
64
- node.bacnetClient.reinitializeClient(node.bacnetConfig);
65
89
  node.bacnetClient.removeAllListeners();
66
90
  bindEventListeners();
91
+ node.bacnetClient.reinitializeClient(node.bacnetConfig);
67
92
  } else {
68
93
  node.bacnetClient = new BacnetClient(node.bacnetConfig);
69
94
  nodeContext.set("bacnetClient", node.bacnetClient);
70
95
  }
96
+
71
97
  }
72
98
 
73
99
  // Clears event handlers of all listeners, avoiding memory leak
74
100
  node.bacnetClient.removeAllListeners();
75
101
 
76
- //bindEventListeners();
77
-
78
102
  // Value response event handler for READ commands
79
- node.bacnetClient.on('values', (device, values, outputType, msgId, fullResult) => {
103
+ node.bacnetClient.on('values', (values, outputType, objectPropertyType) => {
80
104
  if(typeof values !== 'undefined' && Object.keys(values).length) {
81
105
  if (outputType.json && !outputType.mqtt) {
82
- node.send(values);
106
+ if(objectPropertyType.fullObject && objectPropertyType.simplePayload) {
107
+ sendSimpleJson(values);
108
+ node.send(values);
109
+ } else if(objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
110
+ node.send(values);
111
+ } else if(!objectPropertyType.fullObject && objectPropertyType.simplePayload) {
112
+ sendSimpleJson(values);
113
+ }
83
114
  } else if(!outputType.json && outputType.mqtt) {
84
- sendAsMqtt(values);
85
- } else if(outputType.json && outputType.mqtt) {
86
- node.send(values);
87
- sendAsMqtt(values);
115
+ if(objectPropertyType.fullObject && objectPropertyType.simplePayload) {
116
+ sendAsMqtt(values);
117
+ sendSimpleMqtt(values);
118
+ } else if(objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
119
+ sendAsMqtt(values);
120
+ } else if(!objectPropertyType.fullObject && objectPropertyType.simplePayload) {
121
+ sendSimpleMqtt(values);
122
+ }
88
123
  }
89
124
  }
90
125
  });
91
126
 
92
127
  // Who Is / Iam event handler
93
128
  node.bacnetClient.on('deviceFound', (device) => {
94
- if(node.toLogIam) node.warn(`Device found: ${device.address}`);
129
+ if(node.toLogIam) {
130
+ if(device.header.source) {
131
+ node.warn(`BACnet-MS/TP device found: ${device.payload.deviceId} - ${device.header.sender.address} - Network Id: ${device.header.source.net} - Mac: ${device.header.source.adr[0]}`);
132
+ } else {
133
+ node.warn(`BACnet device found: ${device.payload.deviceId} - ${device.header.sender.address}`);
134
+ }
135
+ }
95
136
  });
96
137
 
97
138
  node.status({});
@@ -105,7 +146,7 @@ module.exports = function (RED) {
105
146
  node.on('input', function(msg) {
106
147
  if(msg.type == "Read") {
107
148
 
108
- node.bacnetClient.doRead(msg.options, msg.outputType, msg._msgid);
149
+ node.bacnetClient.doRead(msg.options, msg.outputType, msg.objectPropertyType, msg._msgid);
109
150
 
110
151
  } else if(msg.type == "Write") {
111
152
 
@@ -144,6 +185,23 @@ module.exports = function (RED) {
144
185
  }
145
186
  });
146
187
 
188
+ //route handler for rebuild data model command
189
+ RED.httpAdmin.get('/bitpool-bacnet-data/rebuildDataModel', function(req, res) {
190
+ if(!node.bacnetClient) {
191
+ console.log("Issue with the bacnetClient: ", node.bacnetClient);
192
+ //no bacnet client present
193
+ node.status({fill:"red",shape:"dot",text:"Please define client"});
194
+ res.send(false);
195
+ } else {
196
+ node.bacnetClient.rebuildDataModel().then(function(result) {
197
+ res.send(result);
198
+ }).catch(function(error) {
199
+ res.send(error);
200
+ console.log("Error getting network data: ", error);
201
+ });
202
+ }
203
+ });
204
+
147
205
  //route handler for network data
148
206
  RED.httpAdmin.get('/bitpool-bacnet-data/getNetworkInterfaces', function(req, res) {
149
207
  getIpAddress().then(function(result) {
@@ -160,21 +218,30 @@ module.exports = function (RED) {
160
218
  function bindEventListeners() {
161
219
  // Value response event handler for READ commands
162
220
  node.bacnetClient.on('values', (device, values, outputType, msgId, fullResult) => {
163
- if(typeof values !== 'undefined' && Object.keys(values).length) {
164
- if (outputType.json && !outputType.mqtt) {
221
+ if (outputType.json && !outputType.mqtt) {
222
+ if(objectPropertyType.fullObject && objectPropertyType.simplePayload) {
223
+ sendSimpleJson(values);
165
224
  node.send(values);
166
- } else if(!outputType.json && outputType.mqtt) {
167
- sendAsMqtt(values);
168
- } else if(outputType.json && outputType.mqtt) {
225
+ } else if(objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
169
226
  node.send(values);
227
+ } else if(!objectPropertyType.fullObject && objectPropertyType.simplePayload) {
228
+ sendSimpleJson(values);
229
+ }
230
+ } else if(!outputType.json && outputType.mqtt) {
231
+ if(objectPropertyType.fullObject && objectPropertyType.simplePayload) {
232
+ sendAsMqtt(values);
233
+ sendSimpleMqtt(values);
234
+ } else if(objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
170
235
  sendAsMqtt(values);
236
+ } else if(!objectPropertyType.fullObject && objectPropertyType.simplePayload) {
237
+ sendSimpleMqtt(values);
171
238
  }
172
239
  }
173
240
  });
174
241
 
175
242
  // Who Is / Iam event handler
176
243
  node.bacnetClient.on('deviceFound', (device) => {
177
- if(node.toLogIam) node.warn(`Device found: ${device.address}`);
244
+ if(node.toLogIam) node.warn(`BACnet device found: ${device.deviceId} - ${device.address}`);
178
245
  });
179
246
  }
180
247
 
@@ -191,10 +258,43 @@ module.exports = function (RED) {
191
258
  if(node.device_id_range_enabled !== node.bacnetConfig.device_id_range_enabled){ return true;}
192
259
  if(node.device_id_range_start !== node.bacnetConfig.device_id_range_start){ return true;}
193
260
  if(node.device_id_range_end !== node.bacnetConfig.device_id_range_end){ return true;}
194
-
261
+ if(node.toRestartNodeRed !== node.bacnetConfig.toRestartNodeRed){ return true;}
262
+ if(node.manual_instance_range_enabled !== node.bacnetConfig.manual_instance_range_enabled){ return true;}
263
+ if(node.manual_instance_range_start !== node.bacnetConfig.manual_instance_range_start){ return true;}
264
+ if(node.manual_instance_range_end !== node.bacnetConfig.manual_instance_range_end){ return true;}
265
+
195
266
  return false;
196
267
  };
197
268
 
269
+ sendSimpleMqtt = function(values){
270
+ let devices = Object.keys(values);
271
+ devices.forEach(function(device) {
272
+ if(device !== "_msgid") {
273
+ let points = values[device];
274
+ for(var point in points) {
275
+ let pointProps = Object.keys(points[point]);
276
+ pointProps.forEach(function(prop) {
277
+ let msg = {};
278
+ if(prop == "presentValue") {
279
+ if(node.nodeName !== "gateway" &&
280
+ node.nodeName !== "" &&
281
+ node.nodeName !== "null" &&
282
+ node.nodeName !== "undefined" &&
283
+ typeof node.nodeName == "string") {
284
+ msg.topic = `${node.nodeName}/${device}/${point}`;
285
+ } else {
286
+ msg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${point}`;
287
+ }
288
+ msg.payload = points[point][prop];
289
+ node.send(msg);
290
+ }
291
+ });
292
+ }
293
+ }
294
+ });
295
+ };
296
+
297
+
198
298
  // Breaks down response JSON object into mqtt topic / payload
199
299
  sendAsMqtt = function(values) {
200
300
  let devices = Object.keys(values);
@@ -206,7 +306,15 @@ module.exports = function (RED) {
206
306
  pointProps.forEach(function(prop) {
207
307
  let msg = {};
208
308
  if(prop !== "objectName") {
209
- msg.topic = `BITPOOL_EDGE_BACNET/${device}/${point}/${prop}`;
309
+ if(node.nodeName !== "gateway" &&
310
+ node.nodeName !== "" &&
311
+ node.nodeName !== "null" &&
312
+ node.nodeName !== "undefined" &&
313
+ typeof node.nodeName == "string") {
314
+ msg.topic = `${node.nodeName}/${device}/${point}/${prop}`;
315
+ } else {
316
+ msg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${point}/${prop}`;
317
+ }
210
318
  msg.payload = points[point][prop];
211
319
  node.send(msg);
212
320
  }
@@ -216,6 +324,29 @@ module.exports = function (RED) {
216
324
  });
217
325
  };
218
326
 
327
+ sendSimpleJson = function(values) {
328
+ let devices = Object.keys(values);
329
+ devices.forEach(function(device) {
330
+ if(device !== "_msgid") {
331
+ let value = {
332
+ [device]: {}
333
+ };
334
+ let points = values[device];
335
+ for(var point in points) {
336
+ let pointProps = Object.keys(points[point]);
337
+ pointProps.forEach(function(prop) {
338
+ if(prop == "presentValue") {
339
+ value[device][point] = {
340
+ "presentValue": points[point][prop]
341
+ };
342
+ }
343
+ });
344
+ }
345
+ node.send(value);
346
+ }
347
+ });
348
+ };
349
+
219
350
  };
220
351
 
221
352
  RED.nodes.registerType('Bacnet-Gateway', BitpoolBacnetGatewayDevice);
package/bacnet_object.js CHANGED
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  module.exports = function (RED) {
6
- const baEnum = require('./resources/bacstack/lib/enum');
6
+ const baEnum = require('./resources/node-bacnet/index.js').enum;
7
7
  function BitpoolBacnetObject (config) {
8
8
  RED.nodes.createNode(this, config)
9
9