@bitpoolos/edge-bacnet 1.4.2 → 1.4.4
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/CHANGELOG.md +38 -0
- package/bacnet_client.js +60 -10
- package/bacnet_gateway.js +149 -227
- package/bacnet_read.html +27 -2
- package/bacnet_read.js +71 -54
- package/bacnet_server.js +77 -106
- package/bitpool_inject.html +23 -0
- package/bitpool_inject.js +5 -0
- package/package.json +1 -1
- package/resources/style.css +12 -1
- package/treeBuilder.js +0 -1
package/bacnet_gateway.js
CHANGED
|
@@ -107,41 +107,42 @@ module.exports = function (RED) {
|
|
|
107
107
|
node.status({});
|
|
108
108
|
}, 3000);
|
|
109
109
|
}
|
|
110
|
+
let useDeviceName = outputType.useDeviceName;
|
|
110
111
|
if (outputType.json && !outputType.mqtt && !outputType.pointJson) {
|
|
111
112
|
//json
|
|
112
113
|
if (objectPropertyType.simpleWithStatus && !objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
|
|
113
114
|
//simpleWithStatus
|
|
114
|
-
sendSimpleWithStatus(values, readNodeName, true);
|
|
115
|
+
sendSimpleWithStatus(values, readNodeName, true, useDeviceName);
|
|
115
116
|
} else if (objectPropertyType.fullObject && !objectPropertyType.simplePayload && !objectPropertyType.simpleWithStatus) {
|
|
116
117
|
//fullObject
|
|
117
|
-
sendJsonAsMqtt(values, readNodeName);
|
|
118
|
+
sendJsonAsMqtt(values, readNodeName, useDeviceName);
|
|
118
119
|
} else if (objectPropertyType.simplePayload && !objectPropertyType.fullObject && !objectPropertyType.simpleWithStatus) {
|
|
119
120
|
//simplePayload
|
|
120
|
-
sendSimpleJson(values, readNodeName);
|
|
121
|
+
sendSimpleJson(values, readNodeName, useDeviceName);
|
|
121
122
|
}
|
|
122
123
|
} else if (outputType.mqtt && !outputType.json && !outputType.pointJson) {
|
|
123
124
|
//mqtt
|
|
124
125
|
if (objectPropertyType.simpleWithStatus && !objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
|
|
125
126
|
//simpleWithStatus
|
|
126
|
-
sendSimpleWithStatus(values, readNodeName, false);
|
|
127
|
+
sendSimpleWithStatus(values, readNodeName, false, useDeviceName);
|
|
127
128
|
} else if (objectPropertyType.fullObject && !objectPropertyType.simplePayload && !objectPropertyType.simpleWithStatus) {
|
|
128
129
|
//fullObject
|
|
129
|
-
sendAsMqtt(values, readNodeName);
|
|
130
|
+
sendAsMqtt(values, readNodeName, useDeviceName);
|
|
130
131
|
} else if (objectPropertyType.simplePayload && !objectPropertyType.fullObject && !objectPropertyType.simpleWithStatus) {
|
|
131
132
|
//simplePayload
|
|
132
|
-
sendSimpleMqtt(values, readNodeName);
|
|
133
|
+
sendSimpleMqtt(values, readNodeName, useDeviceName);
|
|
133
134
|
}
|
|
134
135
|
} else if (outputType.pointJson && !outputType.json && !outputType.mqtt) {
|
|
135
136
|
//pointJson
|
|
136
137
|
if (objectPropertyType.simpleWithStatus && !objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
|
|
137
138
|
//simpleWithStatus
|
|
138
|
-
sendSimpleWithStatus(values, readNodeName, false);
|
|
139
|
+
sendSimpleWithStatus(values, readNodeName, false, useDeviceName);
|
|
139
140
|
} else if (objectPropertyType.fullObject && !objectPropertyType.simplePayload && !objectPropertyType.simpleWithStatus) {
|
|
140
141
|
//fullObject
|
|
141
|
-
sendIndividualMsgJson(values, readNodeName);
|
|
142
|
+
sendIndividualMsgJson(values, readNodeName, useDeviceName);
|
|
142
143
|
} else if (objectPropertyType.simplePayload && !objectPropertyType.fullObject && !objectPropertyType.simpleWithStatus) {
|
|
143
144
|
//simplePayload
|
|
144
|
-
sendSimpleJsonPerPoint(values, readNodeName);
|
|
145
|
+
sendSimpleJsonPerPoint(values, readNodeName, useDeviceName);
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
148
|
}
|
|
@@ -225,6 +226,21 @@ module.exports = function (RED) {
|
|
|
225
226
|
});
|
|
226
227
|
} else if (msg.testFunc == true) {
|
|
227
228
|
node.bacnetClient.testFunction(msg.address, msg.type, msg.instance, msg.property);
|
|
229
|
+
} else if (msg.applyDisplayNames) {
|
|
230
|
+
|
|
231
|
+
node.status({ fill: "blue", shape: "dot", text: "Updating display names" });
|
|
232
|
+
|
|
233
|
+
setTimeout(() => {
|
|
234
|
+
node.status({});
|
|
235
|
+
}, 2000);
|
|
236
|
+
|
|
237
|
+
node.bacnetClient
|
|
238
|
+
.applyDisplayNames(msg.pointsToRead)
|
|
239
|
+
.then(function (result) {
|
|
240
|
+
}).catch(function (error) {
|
|
241
|
+
logOut("Error in applyDisplayNames: ", error);
|
|
242
|
+
});
|
|
243
|
+
|
|
228
244
|
}
|
|
229
245
|
});
|
|
230
246
|
|
|
@@ -456,41 +472,42 @@ module.exports = function (RED) {
|
|
|
456
472
|
node.status({});
|
|
457
473
|
}, 3000);
|
|
458
474
|
}
|
|
475
|
+
let useDeviceName = outputType.useDeviceName;
|
|
459
476
|
if (outputType.json && !outputType.mqtt && !outputType.pointJson) {
|
|
460
477
|
//json
|
|
461
478
|
if (objectPropertyType.simpleWithStatus && !objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
|
|
462
479
|
//simpleWithStatus
|
|
463
|
-
sendSimpleWithStatus(values, readNodeName, true);
|
|
480
|
+
sendSimpleWithStatus(values, readNodeName, true, useDeviceName);
|
|
464
481
|
} else if (objectPropertyType.fullObject && !objectPropertyType.simplePayload && !objectPropertyType.simpleWithStatus) {
|
|
465
482
|
//fullObject
|
|
466
|
-
sendJsonAsMqtt(values, readNodeName);
|
|
483
|
+
sendJsonAsMqtt(values, readNodeName, useDeviceName);
|
|
467
484
|
} else if (objectPropertyType.simplePayload && !objectPropertyType.fullObject && !objectPropertyType.simpleWithStatus) {
|
|
468
485
|
//simplePayload
|
|
469
|
-
sendSimpleJson(values, readNodeName);
|
|
486
|
+
sendSimpleJson(values, readNodeName, useDeviceName);
|
|
470
487
|
}
|
|
471
488
|
} else if (outputType.mqtt && !outputType.json && !outputType.pointJson) {
|
|
472
489
|
//mqtt
|
|
473
490
|
if (objectPropertyType.simpleWithStatus && !objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
|
|
474
491
|
//simpleWithStatus
|
|
475
|
-
sendSimpleWithStatus(values, readNodeName, false);
|
|
492
|
+
sendSimpleWithStatus(values, readNodeName, false, useDeviceName);
|
|
476
493
|
} else if (objectPropertyType.fullObject && !objectPropertyType.simplePayload && !objectPropertyType.simpleWithStatus) {
|
|
477
494
|
//fullObject
|
|
478
|
-
sendAsMqtt(values, readNodeName);
|
|
495
|
+
sendAsMqtt(values, readNodeName, useDeviceName);
|
|
479
496
|
} else if (objectPropertyType.simplePayload && !objectPropertyType.fullObject && !objectPropertyType.simpleWithStatus) {
|
|
480
497
|
//simplePayload
|
|
481
|
-
sendSimpleMqtt(values, readNodeName);
|
|
498
|
+
sendSimpleMqtt(values, readNodeName, useDeviceName);
|
|
482
499
|
}
|
|
483
500
|
} else if (outputType.pointJson && !outputType.json && !outputType.mqtt) {
|
|
484
501
|
//pointJson
|
|
485
502
|
if (objectPropertyType.simpleWithStatus && !objectPropertyType.fullObject && !objectPropertyType.simplePayload) {
|
|
486
503
|
//simpleWithStatus
|
|
487
|
-
sendSimpleWithStatus(values, readNodeName, false);
|
|
504
|
+
sendSimpleWithStatus(values, readNodeName, false, useDeviceName);
|
|
488
505
|
} else if (objectPropertyType.fullObject && !objectPropertyType.simplePayload && !objectPropertyType.simpleWithStatus) {
|
|
489
506
|
//fullObject
|
|
490
|
-
sendIndividualMsgJson(values, readNodeName);
|
|
507
|
+
sendIndividualMsgJson(values, readNodeName, useDeviceName);
|
|
491
508
|
} else if (objectPropertyType.simplePayload && !objectPropertyType.fullObject && !objectPropertyType.simpleWithStatus) {
|
|
492
509
|
//simplePayload
|
|
493
|
-
sendSimpleJsonPerPoint(values, readNodeName);
|
|
510
|
+
sendSimpleJsonPerPoint(values, readNodeName, useDeviceName);
|
|
494
511
|
}
|
|
495
512
|
}
|
|
496
513
|
}
|
|
@@ -514,7 +531,94 @@ module.exports = function (RED) {
|
|
|
514
531
|
}
|
|
515
532
|
}
|
|
516
533
|
|
|
517
|
-
|
|
534
|
+
function getTopicString(type, useDeviceName, readNodeName, device, pointName, prop) {
|
|
535
|
+
let topic = "";
|
|
536
|
+
if (
|
|
537
|
+
node.nodeName !== "gateway" &&
|
|
538
|
+
node.nodeName !== "" &&
|
|
539
|
+
node.nodeName !== "null" &&
|
|
540
|
+
node.nodeName !== "undefined" &&
|
|
541
|
+
typeof node.nodeName == "string"
|
|
542
|
+
) {
|
|
543
|
+
if (readNodeName !== '' &&
|
|
544
|
+
readNodeName !== null &&
|
|
545
|
+
readNodeName !== undefined
|
|
546
|
+
) {
|
|
547
|
+
if (useDeviceName) {
|
|
548
|
+
topic = `${node.nodeName}/${readNodeName}/${device}`;
|
|
549
|
+
} else {
|
|
550
|
+
topic = `${node.nodeName}/${readNodeName}`;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
} else {
|
|
554
|
+
if (useDeviceName) {
|
|
555
|
+
topic = `${node.nodeName}/${device}`;
|
|
556
|
+
} else {
|
|
557
|
+
topic = `${node.nodeName}`;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
} else {
|
|
561
|
+
if (readNodeName !== '' &&
|
|
562
|
+
readNodeName !== null &&
|
|
563
|
+
readNodeName !== undefined
|
|
564
|
+
) {
|
|
565
|
+
if (useDeviceName) {
|
|
566
|
+
topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}`;
|
|
567
|
+
} else {
|
|
568
|
+
topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}`;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
} else {
|
|
572
|
+
if (useDeviceName) {
|
|
573
|
+
topic = `BITPOOL_BACNET_GATEWAY/${device}`;
|
|
574
|
+
} else {
|
|
575
|
+
topic = `BITPOOL_BACNET_GATEWAY`;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
switch (type) {
|
|
581
|
+
case "sendSimpleWithStatus":
|
|
582
|
+
topic += `/${pointName}`;
|
|
583
|
+
break;
|
|
584
|
+
|
|
585
|
+
case "sendSimpleWithStatusJson":
|
|
586
|
+
//do nothing
|
|
587
|
+
break;
|
|
588
|
+
|
|
589
|
+
case "sendSimpleMqtt":
|
|
590
|
+
topic += `/${pointName}`;
|
|
591
|
+
break;
|
|
592
|
+
|
|
593
|
+
case "sendAsMqtt":
|
|
594
|
+
topic += `/${pointName}/${prop}`;
|
|
595
|
+
break;
|
|
596
|
+
|
|
597
|
+
case "sendSimpleJson":
|
|
598
|
+
//do nothing
|
|
599
|
+
break;
|
|
600
|
+
|
|
601
|
+
case "sendJsonAsMqtt":
|
|
602
|
+
//do nothing
|
|
603
|
+
break;
|
|
604
|
+
|
|
605
|
+
case "sendIndividualMsgJson":
|
|
606
|
+
topic += `/${pointName}`;
|
|
607
|
+
break;
|
|
608
|
+
|
|
609
|
+
case "sendSimpleJsonPerPoint":
|
|
610
|
+
topic += `/${pointName}`;
|
|
611
|
+
break;
|
|
612
|
+
|
|
613
|
+
default:
|
|
614
|
+
break;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
return topic;
|
|
618
|
+
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
sendSimpleWithStatus = function (values, readNodeName, isJson, useDeviceName) {
|
|
518
622
|
let devices = Object.keys(values);
|
|
519
623
|
devices.forEach(function (device) {
|
|
520
624
|
if (device !== "_msgid") {
|
|
@@ -524,31 +628,9 @@ module.exports = function (RED) {
|
|
|
524
628
|
for (let point in points) {
|
|
525
629
|
if (points[point] && "presentValue" in points[point]) {
|
|
526
630
|
let pointName = getPointName(points[point], point);
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
node.nodeName !== "null" &&
|
|
531
|
-
node.nodeName !== "undefined" &&
|
|
532
|
-
typeof node.nodeName == "string"
|
|
533
|
-
) {
|
|
534
|
-
if (readNodeName !== '' &&
|
|
535
|
-
readNodeName !== null &&
|
|
536
|
-
readNodeName !== undefined
|
|
537
|
-
) {
|
|
538
|
-
msgg.topic = `${node.nodeName}/${readNodeName}/${device}/${pointName}`;
|
|
539
|
-
} else {
|
|
540
|
-
msgg.topic = `${node.nodeName}/${device}/${pointName}`;
|
|
541
|
-
}
|
|
542
|
-
} else {
|
|
543
|
-
if (readNodeName !== '' &&
|
|
544
|
-
readNodeName !== null &&
|
|
545
|
-
readNodeName !== undefined
|
|
546
|
-
) {
|
|
547
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}/${pointName}`;
|
|
548
|
-
} else {
|
|
549
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${pointName}`;
|
|
550
|
-
}
|
|
551
|
-
}
|
|
631
|
+
let topic = getTopicString("sendSimpleWithStatus", useDeviceName, readNodeName, device, pointName);
|
|
632
|
+
|
|
633
|
+
msgg.topic = topic;
|
|
552
634
|
let payload = {
|
|
553
635
|
presentValue: points[point]["presentValue"],
|
|
554
636
|
timestamp: points[point]["timestamp"],
|
|
@@ -569,32 +651,7 @@ module.exports = function (RED) {
|
|
|
569
651
|
|
|
570
652
|
if (isJson) {
|
|
571
653
|
//json payload
|
|
572
|
-
let topic = "";
|
|
573
|
-
if (
|
|
574
|
-
node.nodeName !== "gateway" &&
|
|
575
|
-
node.nodeName !== "" &&
|
|
576
|
-
node.nodeName !== "null" &&
|
|
577
|
-
node.nodeName !== "undefined" &&
|
|
578
|
-
typeof node.nodeName == "string"
|
|
579
|
-
) {
|
|
580
|
-
if (readNodeName !== '' &&
|
|
581
|
-
readNodeName !== null &&
|
|
582
|
-
readNodeName !== undefined
|
|
583
|
-
) {
|
|
584
|
-
topic = `${node.nodeName}/${readNodeName}/${device}`;
|
|
585
|
-
} else {
|
|
586
|
-
topic = `${node.nodeName}/${device}`;
|
|
587
|
-
}
|
|
588
|
-
} else {
|
|
589
|
-
if (readNodeName !== '' &&
|
|
590
|
-
readNodeName !== null &&
|
|
591
|
-
readNodeName !== undefined
|
|
592
|
-
) {
|
|
593
|
-
topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}`;
|
|
594
|
-
} else {
|
|
595
|
-
topic = `BITPOOL_BACNET_GATEWAY/${device}`;
|
|
596
|
-
}
|
|
597
|
-
}
|
|
654
|
+
let topic = getTopicString("sendSimpleWithStatusJson", useDeviceName, readNodeName, device);
|
|
598
655
|
|
|
599
656
|
msgg.topic = topic;
|
|
600
657
|
msgg.payload = structuredObject;
|
|
@@ -605,7 +662,7 @@ module.exports = function (RED) {
|
|
|
605
662
|
});
|
|
606
663
|
}
|
|
607
664
|
|
|
608
|
-
sendSimpleMqtt = function (values, readNodeName) {
|
|
665
|
+
sendSimpleMqtt = function (values, readNodeName, useDeviceName) {
|
|
609
666
|
let devices = Object.keys(values);
|
|
610
667
|
devices.forEach(function (device) {
|
|
611
668
|
if (device !== "_msgid") {
|
|
@@ -617,31 +674,9 @@ module.exports = function (RED) {
|
|
|
617
674
|
pointProps.forEach(function (prop) {
|
|
618
675
|
let msg = {};
|
|
619
676
|
if (prop == "presentValue") {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
node.nodeName !== "null" &&
|
|
624
|
-
node.nodeName !== "undefined" &&
|
|
625
|
-
typeof node.nodeName == "string"
|
|
626
|
-
) {
|
|
627
|
-
if (readNodeName !== '' &&
|
|
628
|
-
readNodeName !== null &&
|
|
629
|
-
readNodeName !== undefined
|
|
630
|
-
) {
|
|
631
|
-
msg.topic = `${node.nodeName}/${readNodeName}/${device}/${pointName}`;
|
|
632
|
-
} else {
|
|
633
|
-
msg.topic = `${node.nodeName}/${device}/${pointName}`;
|
|
634
|
-
}
|
|
635
|
-
} else {
|
|
636
|
-
if (readNodeName !== '' &&
|
|
637
|
-
readNodeName !== null &&
|
|
638
|
-
readNodeName !== undefined
|
|
639
|
-
) {
|
|
640
|
-
msg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}/${pointName}`;
|
|
641
|
-
} else {
|
|
642
|
-
msg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${pointName}`;
|
|
643
|
-
}
|
|
644
|
-
}
|
|
677
|
+
let topic = getTopicString("sendSimpleMqtt", useDeviceName, readNodeName, device, pointName);
|
|
678
|
+
|
|
679
|
+
msg.topic = topic;
|
|
645
680
|
msg.payload = points[point][prop];
|
|
646
681
|
node.send(msg);
|
|
647
682
|
}
|
|
@@ -653,7 +688,7 @@ module.exports = function (RED) {
|
|
|
653
688
|
};
|
|
654
689
|
|
|
655
690
|
// Breaks down response JSON object into mqtt topic / payload
|
|
656
|
-
sendAsMqtt = function (values, readNodeName) {
|
|
691
|
+
sendAsMqtt = function (values, readNodeName, useDeviceName) {
|
|
657
692
|
let devices = Object.keys(values);
|
|
658
693
|
devices.forEach(function (device) {
|
|
659
694
|
if (device !== "_msgid") {
|
|
@@ -665,31 +700,8 @@ module.exports = function (RED) {
|
|
|
665
700
|
pointProps.forEach(function (prop) {
|
|
666
701
|
let msg = {};
|
|
667
702
|
if (prop !== "objectName") {
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
node.nodeName !== "" &&
|
|
671
|
-
node.nodeName !== "null" &&
|
|
672
|
-
node.nodeName !== "undefined" &&
|
|
673
|
-
typeof node.nodeName == "string"
|
|
674
|
-
) {
|
|
675
|
-
if (readNodeName !== '' &&
|
|
676
|
-
readNodeName !== null &&
|
|
677
|
-
readNodeName !== undefined
|
|
678
|
-
) {
|
|
679
|
-
msg.topic = `${node.nodeName}/${readNodeName}/${device}/${pointName}/${prop}`;
|
|
680
|
-
} else {
|
|
681
|
-
msg.topic = `${node.nodeName}/${device}/${pointName}/${prop}`;
|
|
682
|
-
}
|
|
683
|
-
} else {
|
|
684
|
-
if (readNodeName !== '' &&
|
|
685
|
-
readNodeName !== null &&
|
|
686
|
-
readNodeName !== undefined
|
|
687
|
-
) {
|
|
688
|
-
msg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}/${pointName}/${prop}`;
|
|
689
|
-
} else {
|
|
690
|
-
msg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${pointName}/${prop}`;
|
|
691
|
-
}
|
|
692
|
-
}
|
|
703
|
+
let topic = getTopicString("sendAsMqtt", useDeviceName, readNodeName, device, pointName, prop);
|
|
704
|
+
msg.topic = topic;
|
|
693
705
|
msg.payload = points[point][prop];
|
|
694
706
|
node.send(msg);
|
|
695
707
|
}
|
|
@@ -700,7 +712,7 @@ module.exports = function (RED) {
|
|
|
700
712
|
});
|
|
701
713
|
};
|
|
702
714
|
|
|
703
|
-
sendSimpleJson = function (values, readNodeName) {
|
|
715
|
+
sendSimpleJson = function (values, readNodeName, useDeviceName) {
|
|
704
716
|
let devices = Object.keys(values);
|
|
705
717
|
devices.forEach(function (device) {
|
|
706
718
|
let msgg = {};
|
|
@@ -722,81 +734,36 @@ module.exports = function (RED) {
|
|
|
722
734
|
});
|
|
723
735
|
}
|
|
724
736
|
}
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
node.nodeName !== "" &&
|
|
728
|
-
node.nodeName !== "null" &&
|
|
729
|
-
node.nodeName !== "undefined" &&
|
|
730
|
-
typeof node.nodeName == "string"
|
|
731
|
-
) {
|
|
732
|
-
if (readNodeName !== '' &&
|
|
733
|
-
readNodeName !== null &&
|
|
734
|
-
readNodeName !== undefined
|
|
735
|
-
) {
|
|
736
|
-
msgg.topic = `${node.nodeName}/${readNodeName}/${device}`;
|
|
737
|
-
} else {
|
|
738
|
-
msgg.topic = `${node.nodeName}/${device}`;
|
|
739
|
-
}
|
|
740
|
-
} else {
|
|
741
|
-
if (readNodeName !== '' &&
|
|
742
|
-
readNodeName !== null &&
|
|
743
|
-
readNodeName !== undefined
|
|
744
|
-
) {
|
|
745
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}`;
|
|
746
|
-
} else {
|
|
747
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${device}`;
|
|
748
|
-
}
|
|
749
|
-
}
|
|
737
|
+
let topic = getTopicString("sendSimpleJson", useDeviceName, readNodeName, device);
|
|
738
|
+
msgg.topic = topic;
|
|
750
739
|
msgg.payload = value[device];
|
|
751
740
|
node.send(msgg);
|
|
752
741
|
}
|
|
753
742
|
});
|
|
754
743
|
};
|
|
755
744
|
|
|
756
|
-
sendJsonAsMqtt = function (values, readNodeName) {
|
|
745
|
+
sendJsonAsMqtt = function (values, readNodeName, useDeviceName) {
|
|
757
746
|
if (typeof values == "object") {
|
|
758
747
|
let keys = Object.keys(values);
|
|
759
748
|
keys.forEach(function (key) {
|
|
760
749
|
let points = values[key];
|
|
761
750
|
let msgg = {};
|
|
762
751
|
let structuredObject = {};
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
node.nodeName !== "undefined" &&
|
|
768
|
-
typeof node.nodeName == "string"
|
|
769
|
-
) {
|
|
770
|
-
if (readNodeName !== '' &&
|
|
771
|
-
readNodeName !== null &&
|
|
772
|
-
readNodeName !== undefined
|
|
773
|
-
) {
|
|
774
|
-
msgg.topic = `${node.nodeName}/${readNodeName}/${key}`;
|
|
775
|
-
} else {
|
|
776
|
-
msgg.topic = `${node.nodeName}/${key}`;
|
|
777
|
-
}
|
|
778
|
-
} else {
|
|
779
|
-
if (readNodeName !== '' &&
|
|
780
|
-
readNodeName !== null &&
|
|
781
|
-
readNodeName !== undefined
|
|
782
|
-
) {
|
|
783
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${key}`;
|
|
784
|
-
} else {
|
|
785
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${key}`;
|
|
786
|
-
}
|
|
787
|
-
}
|
|
752
|
+
|
|
753
|
+
let topic = getTopicString("sendJsonAsMqtt", useDeviceName, readNodeName, key);
|
|
754
|
+
msgg.topic = topic;
|
|
755
|
+
|
|
788
756
|
for (let point in points) {
|
|
789
757
|
let pointName = getPointName(points[point], point);
|
|
790
758
|
structuredObject[pointName] = points[point];
|
|
791
759
|
}
|
|
792
|
-
|
|
793
760
|
msgg.payload = structuredObject;
|
|
794
761
|
node.send(msgg);
|
|
795
762
|
});
|
|
796
763
|
}
|
|
797
764
|
};
|
|
798
765
|
|
|
799
|
-
sendIndividualMsgJson = function (values, readNodeName) {
|
|
766
|
+
sendIndividualMsgJson = function (values, readNodeName, useDeviceName) {
|
|
800
767
|
if (typeof values == "object") {
|
|
801
768
|
let keys = Object.keys(values);
|
|
802
769
|
keys.forEach(function (key) {
|
|
@@ -804,31 +771,8 @@ module.exports = function (RED) {
|
|
|
804
771
|
let msgg = {};
|
|
805
772
|
for (let point in points) {
|
|
806
773
|
let pointName = getPointName(points[point], point);
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
node.nodeName !== "" &&
|
|
810
|
-
node.nodeName !== "null" &&
|
|
811
|
-
node.nodeName !== "undefined" &&
|
|
812
|
-
typeof node.nodeName == "string"
|
|
813
|
-
) {
|
|
814
|
-
if (readNodeName !== '' &&
|
|
815
|
-
readNodeName !== null &&
|
|
816
|
-
readNodeName !== undefined
|
|
817
|
-
) {
|
|
818
|
-
msgg.topic = `${node.nodeName}/${readNodeName}/${key}/${pointName}`;
|
|
819
|
-
} else {
|
|
820
|
-
msgg.topic = `${node.nodeName}/${key}/${pointName}`;
|
|
821
|
-
}
|
|
822
|
-
} else {
|
|
823
|
-
if (readNodeName !== '' &&
|
|
824
|
-
readNodeName !== null &&
|
|
825
|
-
readNodeName !== undefined
|
|
826
|
-
) {
|
|
827
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${key}/${pointName}`;
|
|
828
|
-
} else {
|
|
829
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${key}/${pointName}`;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
774
|
+
let topic = getTopicString("sendIndividualMsgJson", useDeviceName, readNodeName, key, pointName);
|
|
775
|
+
msgg.topic = topic;
|
|
832
776
|
|
|
833
777
|
msgg.payload = points[point];
|
|
834
778
|
node.send(msgg);
|
|
@@ -838,7 +782,7 @@ module.exports = function (RED) {
|
|
|
838
782
|
}
|
|
839
783
|
}
|
|
840
784
|
|
|
841
|
-
sendSimpleJsonPerPoint = function (values, readNodeName) {
|
|
785
|
+
sendSimpleJsonPerPoint = function (values, readNodeName, useDeviceName) {
|
|
842
786
|
let devices = Object.keys(values);
|
|
843
787
|
devices.forEach(function (device) {
|
|
844
788
|
if (device !== "_msgid") {
|
|
@@ -847,31 +791,9 @@ module.exports = function (RED) {
|
|
|
847
791
|
for (let point in points) {
|
|
848
792
|
if (points[point] && "presentValue" in points[point]) {
|
|
849
793
|
let pointName = getPointName(points[point], point);
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
node.nodeName !== "null" &&
|
|
854
|
-
node.nodeName !== "undefined" &&
|
|
855
|
-
typeof node.nodeName == "string"
|
|
856
|
-
) {
|
|
857
|
-
if (readNodeName !== '' &&
|
|
858
|
-
readNodeName !== null &&
|
|
859
|
-
readNodeName !== undefined
|
|
860
|
-
) {
|
|
861
|
-
msgg.topic = `${node.nodeName}/${readNodeName}/${device}/${pointName}`;
|
|
862
|
-
} else {
|
|
863
|
-
msgg.topic = `${node.nodeName}/${device}/${pointName}`;
|
|
864
|
-
}
|
|
865
|
-
} else {
|
|
866
|
-
if (readNodeName !== '' &&
|
|
867
|
-
readNodeName !== null &&
|
|
868
|
-
readNodeName !== undefined
|
|
869
|
-
) {
|
|
870
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${readNodeName}/${device}/${pointName}`;
|
|
871
|
-
} else {
|
|
872
|
-
msgg.topic = `BITPOOL_BACNET_GATEWAY/${device}/${pointName}`;
|
|
873
|
-
}
|
|
874
|
-
}
|
|
794
|
+
let topic = getTopicString("sendSimpleJsonPerPoint", useDeviceName, readNodeName, device, pointName);
|
|
795
|
+
|
|
796
|
+
msgg.topic = topic;
|
|
875
797
|
let payload = {
|
|
876
798
|
presentValue: points[point]["presentValue"]
|
|
877
799
|
};
|
package/bacnet_read.html
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
object_property_simplePayload: { value: false },
|
|
23
23
|
object_property_simpleWithStatus: { value: false },
|
|
24
24
|
object_property_fullObject: { value: true },
|
|
25
|
+
useDeviceName: { value: true },
|
|
25
26
|
},
|
|
26
27
|
inputs: 1,
|
|
27
28
|
outputs: 1,
|
|
@@ -838,6 +839,9 @@
|
|
|
838
839
|
|
|
839
840
|
app.$forceUpdate();
|
|
840
841
|
},
|
|
842
|
+
refreshReadListTree() {
|
|
843
|
+
this.addToReadDevices(this.pointsToRead);
|
|
844
|
+
},
|
|
841
845
|
calculateMstpCount(slotProps) {
|
|
842
846
|
let count = 0;
|
|
843
847
|
slotProps.node.children.forEach(function (child) {
|
|
@@ -894,6 +898,8 @@
|
|
|
894
898
|
document.getElementById("node-input-pointJson").checked = node.pointJson;
|
|
895
899
|
document.getElementById("node-input-pointJson").onclick = handleMsgTypeClick;
|
|
896
900
|
|
|
901
|
+
document.getElementById("node-input-useDeviceName").checked = node.useDeviceName;
|
|
902
|
+
|
|
897
903
|
var menu = document.querySelector(".context-menu");
|
|
898
904
|
window.addEventListener("click", (event) => {
|
|
899
905
|
menu.style.display = "none";
|
|
@@ -1218,8 +1224,11 @@
|
|
|
1218
1224
|
<input type="file" id="readlist-file-upload" accept="application/JSON" class="inputStyle" style="display: none;" />
|
|
1219
1225
|
|
|
1220
1226
|
<button @click="removeAllDevices()" class="removeAllDevicesButton" title="Remove all devices">
|
|
1221
|
-
<
|
|
1222
|
-
|
|
1227
|
+
<a style="color: #ff0000;">Remove All Devices</a>
|
|
1228
|
+
</button>
|
|
1229
|
+
|
|
1230
|
+
<button @click="refreshReadListTree()" class="refreshReadListButton" title="Refresh tree">
|
|
1231
|
+
<i class="pi pi-refresh" style="color: #00AEEF;"> </i>
|
|
1223
1232
|
</button>
|
|
1224
1233
|
</div>
|
|
1225
1234
|
|
|
@@ -1349,6 +1358,22 @@
|
|
|
1349
1358
|
</div>
|
|
1350
1359
|
</div>
|
|
1351
1360
|
|
|
1361
|
+
<hr />
|
|
1362
|
+
|
|
1363
|
+
<div class="objectPropertiesLabel" style="margin-top: 20px; margin-bottom: 20px;">
|
|
1364
|
+
<label
|
|
1365
|
+
for="node-input-useDeviceName"
|
|
1366
|
+
style="width: auto; align-items: start;"
|
|
1367
|
+
class="objectPropertiesLabel">
|
|
1368
|
+
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.useDeviceName"></span>
|
|
1369
|
+
<input
|
|
1370
|
+
class=" objectProp"
|
|
1371
|
+
type="checkbox"
|
|
1372
|
+
id="node-input-useDeviceName" />
|
|
1373
|
+
<a style="white-space: nowrap; padding-left: 20px;">Use device name in topic</a>
|
|
1374
|
+
</label>
|
|
1375
|
+
</div>
|
|
1376
|
+
|
|
1352
1377
|
<div class="form-row">
|
|
1353
1378
|
<label for="node-input-roundDecimal"> Decimal place precision </label>
|
|
1354
1379
|
<input type="number" id="node-input-roundDecimal" placeholder="None" />
|