@bitpoolos/edge-bacnet 1.1.4 → 1.1.6
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.
- package/bacnet_gateway.html +79 -33
- package/bacnet_gateway.js +21 -1
- package/bacnet_server.js +47 -24
- package/common.js +31 -1
- package/examples/1-Discover-Read.json +1 -1
- package/examples/2-Discover-Write.json +1 -1
- package/examples/3-Discover-Read-Write.json +1 -1
- package/package.json +1 -1
- package/edge-bacnet-datastore.cfg +0 -0
package/bacnet_gateway.html
CHANGED
|
@@ -81,6 +81,9 @@
|
|
|
81
81
|
rebuildDataModel() {
|
|
82
82
|
return fetch('/bitpool-bacnet-data/rebuildDataModel').then(res => res.json());
|
|
83
83
|
};
|
|
84
|
+
clearBacnetServerPoints() {
|
|
85
|
+
return fetch('/bitpool-bacnet-data/clearBacnetServerPoints').then(res => res.json());
|
|
86
|
+
};
|
|
84
87
|
};
|
|
85
88
|
RED.nodes.registerType('Bacnet-Gateway', {
|
|
86
89
|
category: 'Bitpool BACnet',
|
|
@@ -186,18 +189,6 @@
|
|
|
186
189
|
|
|
187
190
|
queryAdapters();
|
|
188
191
|
|
|
189
|
-
// function setBroadCastAddress() {
|
|
190
|
-
// let nicSelector = document.getElementById("node-input-local_device_address");
|
|
191
|
-
// nicSelector.onchange = function(e) {
|
|
192
|
-
// if(typeof e.target.value == "string" && e.target.value !== ""){
|
|
193
|
-
// let broadcastAddrPrefill = e.target.value.split(".").slice(0, 3).join(".") + ".255";
|
|
194
|
-
// document.getElementById("node-input-broadCastAddr").value = broadcastAddrPrefill;
|
|
195
|
-
// }
|
|
196
|
-
// };
|
|
197
|
-
// }
|
|
198
|
-
|
|
199
|
-
// setBroadCastAddress();
|
|
200
|
-
|
|
201
192
|
function setDeviceIdRangeState(state) {
|
|
202
193
|
let deviceIdRangeStart = $("#node-input-device_id_range_start");
|
|
203
194
|
let deviceIdRangeEnd = $("#node-input-device_id_range_end");
|
|
@@ -234,6 +225,52 @@
|
|
|
234
225
|
setManualInstanceRangeState(this.checked);
|
|
235
226
|
});
|
|
236
227
|
|
|
228
|
+
if(node.vm == undefined) {
|
|
229
|
+
const confirmDialog = document.createElement('p-confirm-dialog');
|
|
230
|
+
document.getElementById("clearServerContainer").appendChild(confirmDialog);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const {createApp, ref, onMounted} = Vue;
|
|
234
|
+
const ConfirmDialog = primevue.confirmdialog;
|
|
235
|
+
const ConfirmationService = primevue.confirmationservice;
|
|
236
|
+
|
|
237
|
+
//prime vue app
|
|
238
|
+
const App = {
|
|
239
|
+
data() {
|
|
240
|
+
return {
|
|
241
|
+
nodeService: ref(new NodeService())
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
methods: {
|
|
245
|
+
confirm(event) {
|
|
246
|
+
this.$confirm.require({
|
|
247
|
+
message: 'Do you want to clear all the BACnet server points? This action is not reversible',
|
|
248
|
+
header: 'Delete Confirmation',
|
|
249
|
+
icon: 'pi pi-info-circle',
|
|
250
|
+
acceptClass: 'p-button-danger',
|
|
251
|
+
accept: () => {
|
|
252
|
+
//handle accept
|
|
253
|
+
this.nodeService.clearBacnetServerPoints();
|
|
254
|
+
},
|
|
255
|
+
reject: () => {
|
|
256
|
+
//handle reject
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
components: {
|
|
262
|
+
"p-button": primevue.button,
|
|
263
|
+
"p-confirm-dialog": primevue.confirmdialog
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
let vueapp = createApp(App);
|
|
268
|
+
vueapp.use(primevue.config.default);
|
|
269
|
+
vueapp.use(primevue.confirmpopup);
|
|
270
|
+
vueapp.use(primevue.confirmationservice);
|
|
271
|
+
node.vm = vueapp.mount("#clearServerContainer");
|
|
272
|
+
|
|
273
|
+
|
|
237
274
|
},
|
|
238
275
|
oneditsave: function (test) {
|
|
239
276
|
let node = this;
|
|
@@ -283,26 +320,39 @@
|
|
|
283
320
|
align-items: center;
|
|
284
321
|
padding-top: 20px;
|
|
285
322
|
}
|
|
286
|
-
|
|
287
323
|
.point {
|
|
288
324
|
padding-left: 50px
|
|
289
325
|
}
|
|
290
|
-
|
|
291
326
|
.pointButton {
|
|
292
327
|
color: inherit;
|
|
293
328
|
border: none;
|
|
294
329
|
display: flex;
|
|
295
330
|
align-items: center;
|
|
296
331
|
}
|
|
297
|
-
|
|
298
332
|
.networkTreeContent {
|
|
299
333
|
margin-top: 20px;
|
|
300
334
|
margin-left: 50px;
|
|
301
335
|
}
|
|
302
|
-
|
|
336
|
+
.p-confirm-dialog-accept > .p-button-label, .bacnetServerRebuildSchedule_clearButton > .p-button-label {
|
|
337
|
+
color: white;
|
|
338
|
+
}
|
|
303
339
|
.red-ui-editor label {
|
|
304
340
|
font-size: 12px;
|
|
305
341
|
}
|
|
342
|
+
.bacnetServerRebuildSchedule_clearButton {
|
|
343
|
+
box-shadow: 0 0 0 0.2rem #edacac !important;
|
|
344
|
+
width: 200px;
|
|
345
|
+
border-radius: 3px;
|
|
346
|
+
margin-left: 140px !important;
|
|
347
|
+
}
|
|
348
|
+
.clear_server_span {
|
|
349
|
+
width: 0px;
|
|
350
|
+
}
|
|
351
|
+
.read_server_parent_div {
|
|
352
|
+
display: flex;
|
|
353
|
+
align-items: center;
|
|
354
|
+
justify-content: space-around;
|
|
355
|
+
}
|
|
306
356
|
|
|
307
357
|
</style>
|
|
308
358
|
|
|
@@ -419,25 +469,21 @@
|
|
|
419
469
|
|
|
420
470
|
</div>
|
|
421
471
|
<div id='read-server-tab' style='display:none'>
|
|
422
|
-
<div class="
|
|
423
|
-
<
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
472
|
+
<div class="read_server_parent_div">
|
|
473
|
+
<div class="form-row">
|
|
474
|
+
<label for="node-input-serverEnabled">
|
|
475
|
+
Enabled:
|
|
476
|
+
</label>
|
|
477
|
+
<input type="checkbox" id="node-input-serverEnabled" style="width: auto;"/>
|
|
478
|
+
</div>
|
|
479
|
+
|
|
480
|
+
<div class="form-row" id="clearServerContainer" style="align-items: center; display: flex;">
|
|
481
|
+
<label for="node-input-bacnetServerRebuildSchedule_value" class="clear_server_span"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.bacnetServerRebuildSchedule"></span> </label>
|
|
482
|
+
<p-button class="bacnetServerRebuildSchedule_clearButton p-button-danger" @click="confirm($event)" label="Reinitialize Server" ></p-button>
|
|
483
|
+
|
|
484
|
+
</div>
|
|
427
485
|
</div>
|
|
428
486
|
|
|
429
|
-
<div class="form-row" style="align-items: center; display: flex;">
|
|
430
|
-
<label for="node-input-bacnetServerRebuildSchedule_value"><i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.bacnetServerRebuildSchedule"></span>Clear Server Points:</label>
|
|
431
|
-
<p style="margin-right: 5px; margin-bottom: 0px; padding-left: 7px;">Every</p>
|
|
432
|
-
<input type="text" id="node-input-bacnetServerRebuildSchedule" style="display: none;">
|
|
433
|
-
<input type="text" id="node-input-bacnetServerRebuildSchedule_value" placeholder="5" style="width: 70px; margin-right: 5px;">
|
|
434
|
-
<select name="timePeriod" id="node-input-bacnetServerRebuildSchedule_options" style="width: 120px; margin-right: 5px;">
|
|
435
|
-
<option value="Seconds">Seconds</option>
|
|
436
|
-
<option value="Minutes">Minutes</option>
|
|
437
|
-
<option value="Hours">Hours</option>
|
|
438
|
-
<option value="Days">Days</option>
|
|
439
|
-
</select>
|
|
440
|
-
</div>
|
|
441
487
|
</div>
|
|
442
488
|
|
|
443
489
|
</script>
|
package/bacnet_gateway.js
CHANGED
|
@@ -153,10 +153,20 @@ module.exports = function (RED) {
|
|
|
153
153
|
// No client information found
|
|
154
154
|
node.status({fill:"red",shape:"dot",text:"Please define client"})
|
|
155
155
|
}
|
|
156
|
+
|
|
157
|
+
if(node.nodeName !== "gateway" &&
|
|
158
|
+
node.nodeName !== "" &&
|
|
159
|
+
node.nodeName !== "null" &&
|
|
160
|
+
node.nodeName !== "undefined" &&
|
|
161
|
+
typeof node.nodeName == "string") {
|
|
162
|
+
if(node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
163
|
+
node.bacnetServer.setDeviceName(node.nodeName);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
156
166
|
|
|
157
167
|
node.on('input', function(msg) {
|
|
158
168
|
|
|
159
|
-
if(msg.topic && msg.payload) {
|
|
169
|
+
if(msg.topic && msg.payload !== null) {
|
|
160
170
|
if(node.bacnetServer) {
|
|
161
171
|
node.bacnetServer.addObject(msg.topic, msg.payload);
|
|
162
172
|
}
|
|
@@ -220,6 +230,16 @@ module.exports = function (RED) {
|
|
|
220
230
|
}
|
|
221
231
|
});
|
|
222
232
|
|
|
233
|
+
//route handler for the clear Bacnet server points function
|
|
234
|
+
RED.httpAdmin.get('/bitpool-bacnet-data/clearBacnetServerPoints', function(req, res) {
|
|
235
|
+
if(node.bacnetServerEnabled == true && node.bacnetClient) {
|
|
236
|
+
node.bacnetServer.clearServerPoints();
|
|
237
|
+
res.send(true);
|
|
238
|
+
} else {
|
|
239
|
+
res.send(false);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
|
|
223
243
|
//route handler for network data
|
|
224
244
|
RED.httpAdmin.get('/bitpool-bacnet-data/getNetworkInterfaces', function(req, res) {
|
|
225
245
|
getIpAddress().then(function(result) {
|
package/bacnet_server.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
const bacnet = require('./resources/node-bacnet/index.js');
|
|
2
2
|
const baEnum = bacnet.enum;
|
|
3
|
-
const {
|
|
3
|
+
const {Store_Config_Server, Read_Config_Sync_Server } = require('./common');
|
|
4
4
|
|
|
5
5
|
class BacnetServer {
|
|
6
6
|
|
|
7
|
-
constructor(client, deviceId, rebuildSchedule, nodeRedVersion){
|
|
7
|
+
constructor(client, deviceId, rebuildSchedule, nodeRedVersion) {
|
|
8
8
|
let that = this;
|
|
9
9
|
that.bacnetClient = client;
|
|
10
|
-
that.rebuildScheduleSeconds = rebuildSchedule;
|
|
11
|
-
that.scheduler = new ToadScheduler();
|
|
12
10
|
that.objectIdNumber = 1;
|
|
13
11
|
that.nodeRedVersion = nodeRedVersion;
|
|
14
12
|
that.deviceId = deviceId;
|
|
@@ -32,6 +30,18 @@ class BacnetServer {
|
|
|
32
30
|
[baEnum.ObjectType.CHARACTERSTRING_VALUE]: []
|
|
33
31
|
};
|
|
34
32
|
|
|
33
|
+
try {
|
|
34
|
+
let cachedData = JSON.parse(Read_Config_Sync_Server());
|
|
35
|
+
if(typeof cachedData == "object") {
|
|
36
|
+
if(cachedData.objectList) that.objectList = cachedData.objectList;
|
|
37
|
+
if(cachedData.objectStore) that.objectStore = cachedData.objectStore;
|
|
38
|
+
}
|
|
39
|
+
} catch (error) {
|
|
40
|
+
//do nothing
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
35
45
|
that.bacnetClient.client.on('whoIs', (device) => {
|
|
36
46
|
that.bacnetClient.client.iAmResponse(that.bacnetClient.broadCastAddr, that.deviceId, baEnum.Segmentation.SEGMENTED_BOTH, 27823);
|
|
37
47
|
});
|
|
@@ -111,28 +121,20 @@ class BacnetServer {
|
|
|
111
121
|
|
|
112
122
|
//do initial iAm broadcast when BACnet server starts
|
|
113
123
|
that.bacnetClient.client.iAmResponse(that.bacnetClient.broadCastAddr, that.deviceId, baEnum.Segmentation.SEGMENTED_BOTH, 27823);
|
|
124
|
+
}
|
|
114
125
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const job = new SimpleIntervalJob({ seconds: parseInt(that.rebuildScheduleSeconds), }, task)
|
|
122
|
-
|
|
123
|
-
that.scheduler.addSimpleIntervalJob(job)
|
|
124
|
-
|
|
125
|
-
} catch (error) {
|
|
126
|
-
|
|
126
|
+
setDeviceName(nodeName) {
|
|
127
|
+
let that = this;
|
|
128
|
+
if(typeof nodeName == "string" && nodeName !== "") {
|
|
129
|
+
that.objectStore[baEnum.ObjectType.DEVICE][baEnum.PropertyIdentifier.OBJECT_NAME][0].value = nodeName;
|
|
127
130
|
}
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
addObject(name, value) {
|
|
131
134
|
let that = this;
|
|
132
|
-
|
|
135
|
+
let objectType = that.getBacnetObjectType(value);
|
|
136
|
+
if(name && objectType) {
|
|
133
137
|
let formattedName = name.replaceAll('.', '');
|
|
134
|
-
let objectType = that.getBacnetObjectType(value);
|
|
135
|
-
|
|
136
138
|
if(objectType == "number") {
|
|
137
139
|
let foundIndex = that.objectStore[baEnum.ObjectType.ANALOG_VALUE].findIndex(ele => ele[baEnum.PropertyIdentifier.OBJECT_NAME][0].value == formattedName);
|
|
138
140
|
if(foundIndex == -1) {
|
|
@@ -155,10 +157,11 @@ class BacnetServer {
|
|
|
155
157
|
});
|
|
156
158
|
|
|
157
159
|
that.objectList.push({value: {type: baEnum.ObjectType.ANALOG_VALUE, instance: objectId}, type: 12})
|
|
160
|
+
that.objectStore[baEnum.ObjectType.DEVICE][baEnum.PropertyIdentifier.OBJECT_LIST] = that.objectList;
|
|
158
161
|
} else if(foundIndex !== -1) {
|
|
159
|
-
|
|
160
162
|
let foundObject = that.objectStore[baEnum.ObjectType.ANALOG_VALUE][foundIndex];
|
|
161
163
|
foundObject[baEnum.PropertyIdentifier.PRESENT_VALUE][0].value = value;
|
|
164
|
+
that.objectStore[baEnum.ObjectType.DEVICE][baEnum.PropertyIdentifier.OBJECT_LIST] = that.objectList;
|
|
162
165
|
}
|
|
163
166
|
} else if(objectType == "string") {
|
|
164
167
|
let foundIndex = that.objectStore[baEnum.ObjectType.CHARACTERSTRING_VALUE].findIndex(ele => ele[baEnum.PropertyIdentifier.OBJECT_NAME][0].value == formattedName);
|
|
@@ -182,12 +185,15 @@ class BacnetServer {
|
|
|
182
185
|
});
|
|
183
186
|
|
|
184
187
|
that.objectList.push({value: {type: baEnum.ObjectType.CHARACTERSTRING_VALUE, instance: objectId}, type: 12})
|
|
188
|
+
that.objectStore[baEnum.ObjectType.DEVICE][baEnum.PropertyIdentifier.OBJECT_LIST] = that.objectList;
|
|
185
189
|
} else if(foundIndex !== -1) {
|
|
186
190
|
let foundObject = that.objectStore[baEnum.ObjectType.CHARACTERSTRING_VALUE][foundIndex];
|
|
187
191
|
foundObject[baEnum.PropertyIdentifier.PRESENT_VALUE][0].value = value;
|
|
192
|
+
that.objectStore[baEnum.ObjectType.DEVICE][baEnum.PropertyIdentifier.OBJECT_LIST] = that.objectList;
|
|
188
193
|
}
|
|
189
194
|
}
|
|
190
195
|
}
|
|
196
|
+
Store_Config_Server(JSON.stringify({objectList: that.objectList, objectStore: that.objectStore}));
|
|
191
197
|
}
|
|
192
198
|
|
|
193
199
|
getObject(objectId, propId, instance) {
|
|
@@ -270,8 +276,8 @@ class BacnetServer {
|
|
|
270
276
|
}
|
|
271
277
|
}
|
|
272
278
|
|
|
273
|
-
} catch(e){
|
|
274
|
-
//
|
|
279
|
+
} catch(e) {
|
|
280
|
+
//do nothing
|
|
275
281
|
}
|
|
276
282
|
|
|
277
283
|
return null;
|
|
@@ -280,14 +286,31 @@ class BacnetServer {
|
|
|
280
286
|
clearServerPoints() {
|
|
281
287
|
let that = this;
|
|
282
288
|
|
|
283
|
-
that.objectStore[baEnum.ObjectType.
|
|
284
|
-
that.objectStore[baEnum.ObjectType.CHARACTERSTRING_VALUE] = [];
|
|
289
|
+
let currentDeviceName = that.objectStore[baEnum.ObjectType.DEVICE][baEnum.PropertyIdentifier.OBJECT_NAME][0].value;
|
|
285
290
|
|
|
286
291
|
that.objectList = [
|
|
287
292
|
{value: {type: baEnum.ObjectType.DEVICE, instance: that.deviceId}, type: 12}
|
|
288
293
|
];
|
|
294
|
+
that.objectStore = {
|
|
295
|
+
[baEnum.ObjectType.DEVICE]: {
|
|
296
|
+
[baEnum.PropertyIdentifier.OBJECT_IDENTIFIER]: [{value: {type: baEnum.ObjectType.DEVICE, instance: that.deviceId}, type: 12}], // OBJECT_IDENTIFIER
|
|
297
|
+
[baEnum.PropertyIdentifier.OBJECT_LIST]: that.objectList, // OBJECT_IDENTIFIER
|
|
298
|
+
[baEnum.PropertyIdentifier.OBJECT_NAME]: [{value: currentDeviceName, type: 7}], // OBJECT_NAME
|
|
299
|
+
[baEnum.PropertyIdentifier.OBJECT_TYPE]: [{value: 8, type: 9}], // OBJECT_TYPE
|
|
300
|
+
[baEnum.PropertyIdentifier.DESCRIPTION]: [{value: 'Bitpool Edge BACnet gateway', type: 7}], // DESCRIPTION
|
|
301
|
+
[baEnum.PropertyIdentifier.SYSTEM_STATUS]: [{value: 0, type: 9}], // SYSTEM_STATUS
|
|
302
|
+
[baEnum.PropertyIdentifier.VENDOR_NAME]: [{value: "Bitpool", type: 7}], //VENDOR_NAME
|
|
303
|
+
[baEnum.PropertyIdentifier.VENDOR_IDENTIFIER]: [{value: 1401, type: 7}], //VENDOR_IDENTIFIER
|
|
304
|
+
[baEnum.PropertyIdentifier.MODEL_NAME]: [{value: "bitpool-edge", type: 7}], //MODEL_NAME
|
|
305
|
+
[baEnum.PropertyIdentifier.FIRMWARE_REVISION]: [{value: "Node-Red " + that.nodeRedVersion, type: 7}], //FIRMWARE_REVISION
|
|
306
|
+
},
|
|
307
|
+
[baEnum.ObjectType.ANALOG_VALUE]: [],
|
|
308
|
+
[baEnum.ObjectType.CHARACTERSTRING_VALUE]: []
|
|
309
|
+
};
|
|
289
310
|
|
|
290
311
|
that.objectIdNumber = 1;
|
|
312
|
+
|
|
313
|
+
Store_Config_Server(JSON.stringify({objectList: that.objectList, objectStore: that.objectStore}));
|
|
291
314
|
}
|
|
292
315
|
|
|
293
316
|
getRandomArbitrary(min, max) {
|
package/common.js
CHANGED
|
@@ -233,6 +233,34 @@ function Read_Config_Sync() {
|
|
|
233
233
|
return data;
|
|
234
234
|
};
|
|
235
235
|
|
|
236
|
+
// STORE CONFIG FUNCTION - BACNET SERVER ==========================================
|
|
237
|
+
//
|
|
238
|
+
// ================================================================================
|
|
239
|
+
async function Store_Config_Server(data) {
|
|
240
|
+
await fs.writeFile("edge-bacnet-server-datastore.cfg", data, (err) => {
|
|
241
|
+
if (err) {
|
|
242
|
+
console.log("Store_Config_Server writeFile error: ", err);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
// READ CONFIG SYNC FUNCTION - BACNET SERVER ======================================
|
|
248
|
+
//
|
|
249
|
+
// ================================================================================
|
|
250
|
+
function Read_Config_Sync_Server() {
|
|
251
|
+
var data = "{}";
|
|
252
|
+
try {
|
|
253
|
+
data = fs.readFileSync("edge-bacnet-server-datastore.cfg", {encoding:'utf8', flag:'r'});
|
|
254
|
+
}
|
|
255
|
+
catch(err) {
|
|
256
|
+
console.log("Read_Config_Sync_Server error:", err);
|
|
257
|
+
if(err.errno == -4058) console.log("Edge-BACnet Server: No save file found, creating new file");
|
|
258
|
+
data = '{}';
|
|
259
|
+
Store_Config_Server(data);
|
|
260
|
+
}
|
|
261
|
+
return data;
|
|
262
|
+
};
|
|
263
|
+
|
|
236
264
|
module.exports = {
|
|
237
265
|
DeviceObjectId,
|
|
238
266
|
DeviceObject,
|
|
@@ -247,5 +275,7 @@ module.exports = {
|
|
|
247
275
|
roundDecimalPlaces,
|
|
248
276
|
doNodeRedRestart,
|
|
249
277
|
Store_Config,
|
|
250
|
-
Read_Config_Sync
|
|
278
|
+
Read_Config_Sync,
|
|
279
|
+
Store_Config_Server,
|
|
280
|
+
Read_Config_Sync_Server
|
|
251
281
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"
|
|
1
|
+
[{"id":"697c8ed4b294882c","type":"Bacnet-Gateway","z":"29e22a8fbd476c06","name":"","local_device_address":"","apduTimeout":6000,"roundDecimal":2,"local_device_port":47808,"apduSize":"5","maxSegments":"0x50","broadCastAddr":"255.255.255.255","toLogIam":true,"discover_polling_schedule":"60","discover_polling_schedule_value":"1","discover_polling_schedule_options":"Minutes","device_id_range_enabled":false,"device_id_range_start":"","device_id_range_end":"","deviceId":"817001","manual_instance_range_enabled":false,"manual_instance_range_start":"","manual_instance_range_end":"","logErrorToConsole":false,"serverEnabled":false,"bacnetServerRebuildSchedule":"604800","bacnetServerRebuildSchedule_value":"7","bacnetServerRebuildSchedule_options":"Days","x":640,"y":380,"wires":[["d78c0f4d2fb9befa"]]},{"id":"d129d123e7eedbca","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Discover","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","doPoll":false,"doDiscover":true,"x":460,"y":380,"wires":[["697c8ed4b294882c"]]},{"id":"2dc599ab69789b27","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Poll","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","doPoll":true,"doDiscover":false,"x":290,"y":320,"wires":[["282edf29720defca"]]},{"id":"d78c0f4d2fb9befa","type":"debug","z":"29e22a8fbd476c06","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":820,"y":380,"wires":[]},{"id":"282edf29720defca","type":"Bacnet-Discovery","z":"29e22a8fbd476c06","name":"","events":true,"json":false,"mqtt":true,"hiddenDeployToggle":false,"prevHiddenToggleState":false,"roundDecimal":2,"pointsToRead":{},"readDevices":[],"object_property_simplePayload":true,"object_property_fullObject":false,"x":470,"y":320,"wires":[["697c8ed4b294882c"]]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"
|
|
1
|
+
[{"id":"e478e80571442399","type":"Bacnet-Gateway","z":"29e22a8fbd476c06","name":"","local_device_address":"","apduTimeout":6000,"roundDecimal":2,"local_device_port":47808,"apduSize":"5","maxSegments":"0x50","broadCastAddr":"255.255.255.255","toLogIam":true,"discover_polling_schedule":"60","discover_polling_schedule_value":"1","discover_polling_schedule_options":"Minutes","device_id_range_enabled":false,"device_id_range_start":"","device_id_range_end":"","deviceId":"817001","manual_instance_range_enabled":false,"manual_instance_range_start":"","manual_instance_range_end":"","logErrorToConsole":false,"serverEnabled":false,"bacnetServerRebuildSchedule":"604800","bacnetServerRebuildSchedule_value":"7","bacnetServerRebuildSchedule_options":"Days","x":620,"y":320,"wires":[["0313b7ee1cfa6b42"]]},{"id":"c2e012301c4a6af4","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Discover","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","doPoll":false,"doDiscover":true,"x":440,"y":320,"wires":[["e478e80571442399"]]},{"id":"8172620e7be7b505","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Poll","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"num","doPoll":true,"doDiscover":false,"x":290,"y":400,"wires":[["b3293195b7c5bd9d"]]},{"id":"0313b7ee1cfa6b42","type":"debug","z":"29e22a8fbd476c06","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":800,"y":320,"wires":[]},{"id":"b3293195b7c5bd9d","type":"Bacnet-Write","z":"29e22a8fbd476c06","name":"","applicationTag":"4","priority":"16","pointsToWrite":[],"writeDevices":[],"hiddenDeployToggle":false,"prevHiddenToggleState":false,"x":450,"y":400,"wires":[["e478e80571442399"]]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"
|
|
1
|
+
[{"id":"e6ef82c5497d2d12","type":"Bacnet-Gateway","z":"29e22a8fbd476c06","name":"","local_device_address":"","apduTimeout":6000,"roundDecimal":2,"local_device_port":47808,"apduSize":"5","maxSegments":"0x50","broadCastAddr":"255.255.255.255","toLogIam":true,"discover_polling_schedule":"60","discover_polling_schedule_value":"1","discover_polling_schedule_options":"Minutes","device_id_range_enabled":false,"device_id_range_start":"","device_id_range_end":"","deviceId":"817001","manual_instance_range_enabled":false,"manual_instance_range_start":"","manual_instance_range_end":"","logErrorToConsole":false,"serverEnabled":false,"bacnetServerRebuildSchedule":"604800","bacnetServerRebuildSchedule_value":"7","bacnetServerRebuildSchedule_options":"Days","x":660,"y":360,"wires":[["13c868a66ecd17df"]]},{"id":"4df39409775f724e","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Discover","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","doPoll":false,"doDiscover":true,"x":480,"y":360,"wires":[["e6ef82c5497d2d12"]]},{"id":"67e4f714757a028e","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Poll","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"num","doPoll":true,"doDiscover":false,"x":330,"y":440,"wires":[["b8931cb1a1c69ffb"]]},{"id":"13c868a66ecd17df","type":"debug","z":"29e22a8fbd476c06","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":840,"y":360,"wires":[]},{"id":"b8931cb1a1c69ffb","type":"Bacnet-Write","z":"29e22a8fbd476c06","name":"","applicationTag":"4","priority":"16","pointsToWrite":[],"writeDevices":[],"hiddenDeployToggle":false,"prevHiddenToggleState":false,"x":490,"y":440,"wires":[["e6ef82c5497d2d12"]]},{"id":"a95e261a4cc2662b","type":"Bitpool-Inject","z":"29e22a8fbd476c06","name":"Poll","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","doPoll":true,"doDiscover":false,"x":330,"y":300,"wires":[["08df19608ade8576"]]},{"id":"08df19608ade8576","type":"Bacnet-Discovery","z":"29e22a8fbd476c06","name":"","events":true,"json":false,"mqtt":true,"hiddenDeployToggle":false,"prevHiddenToggleState":false,"roundDecimal":2,"pointsToRead":{},"readDevices":[],"object_property_simplePayload":true,"object_property_fullObject":false,"x":490,"y":300,"wires":[["e6ef82c5497d2d12"]]}]
|
package/package.json
CHANGED
|
File without changes
|