@bitpoolos/edge-bacnet 1.0.6 → 1.1.0
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_client.js +650 -233
- package/bacnet_device.js +65 -16
- package/bacnet_gateway.html +242 -99
- package/bacnet_gateway.js +211 -27
- package/bacnet_object.js +1 -1
- package/bacnet_read.html +211 -133
- package/bacnet_read.js +24 -24
- package/bacnet_server.js +321 -0
- package/bacnet_write.html +24 -15
- package/bacnet_write.js +0 -2
- package/common.js +95 -9
- package/edge-bacnet-datastore.cfg +0 -0
- package/package.json +6 -4
- package/resources/confirmationservice.min.js +1 -0
- package/resources/confirmdialog.min.js +1 -0
- package/resources/fonts/primeicons.woff2 +0 -0
- package/resources/node-bacnet/CHANGELOG.md +481 -0
- package/resources/{bacstack → node-bacnet}/LICENSE.md +3 -1
- package/resources/node-bacnet/README.md +91 -0
- package/resources/node-bacnet/docs/Client.html +4422 -0
- package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
- package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
- package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
- package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
- package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
- package/resources/node-bacnet/docs/bacnet.html +7032 -0
- package/resources/node-bacnet/docs/client.js.html +1759 -0
- package/resources/node-bacnet/docs/enum.js.html +2530 -0
- package/resources/node-bacnet/docs/global.html +2068 -0
- package/resources/node-bacnet/docs/images/mocha-logo.svg +65 -0
- package/resources/node-bacnet/docs/index.html +283 -0
- package/resources/node-bacnet/docs/scripts/collapse.js +11 -0
- package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +4 -0
- package/resources/node-bacnet/docs/scripts/linenumber.js +26 -0
- package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +2 -0
- package/resources/node-bacnet/docs/scripts/prettify/prettify.js +28 -0
- package/resources/node-bacnet/docs/scripts/search.js +47 -0
- package/resources/node-bacnet/docs/services_i-am.js.html +157 -0
- package/resources/node-bacnet/docs/services_time-sync.js.html +118 -0
- package/resources/node-bacnet/docs/services_who-is.js.html +138 -0
- package/resources/node-bacnet/docs/styles/jsdoc.css +683 -0
- package/resources/node-bacnet/docs/styles/prettify.css +82 -0
- package/resources/node-bacnet/examples/discover-devices.js +66 -0
- package/resources/node-bacnet/examples/read-device.js +510 -0
- package/resources/node-bacnet/examples/subscribe-cov.js +75 -0
- package/resources/{bacstack → node-bacnet}/index.js +3 -0
- package/resources/{bacstack → node-bacnet}/lib/apdu.js +56 -39
- package/resources/{bacstack → node-bacnet}/lib/asn1.js +550 -532
- package/resources/node-bacnet/lib/bvlc.js +90 -0
- package/resources/node-bacnet/lib/client.js +1695 -0
- package/resources/node-bacnet/lib/enum.js +2463 -0
- package/resources/node-bacnet/lib/npdu.js +123 -0
- package/resources/{bacstack → node-bacnet}/lib/services/add-list-element.js +12 -6
- package/resources/{bacstack → node-bacnet}/lib/services/alarm-acknowledge.js +3 -3
- package/resources/{bacstack → node-bacnet}/lib/services/alarm-summary.js +5 -4
- package/resources/{bacstack → node-bacnet}/lib/services/atomic-read-file.js +49 -26
- package/resources/{bacstack → node-bacnet}/lib/services/atomic-write-file.js +40 -23
- package/resources/{bacstack → node-bacnet}/lib/services/cov-notify.js +33 -17
- package/resources/{bacstack → node-bacnet}/lib/services/create-object.js +23 -13
- package/resources/{bacstack → node-bacnet}/lib/services/delete-object.js +7 -2
- package/resources/{bacstack → node-bacnet}/lib/services/device-communication-control.js +8 -3
- package/resources/{bacstack → node-bacnet}/lib/services/error.js +7 -0
- package/resources/{bacstack → node-bacnet}/lib/services/event-information.js +10 -9
- package/resources/{bacstack → node-bacnet}/lib/services/event-notify-data.js +38 -16
- package/resources/{bacstack → node-bacnet}/lib/services/get-enrollment-summary.js +24 -11
- package/resources/{bacstack → node-bacnet}/lib/services/get-event-information.js +28 -13
- package/resources/node-bacnet/lib/services/i-am.js +90 -0
- package/resources/{bacstack/lib/services/i-have-broadcast.js → node-bacnet/lib/services/i-have.js} +3 -2
- package/resources/{bacstack → node-bacnet}/lib/services/index.js +7 -4
- package/resources/{bacstack → node-bacnet}/lib/services/life-safety-operation.js +3 -2
- package/resources/{bacstack → node-bacnet}/lib/services/private-transfer.js +3 -2
- package/resources/{bacstack → node-bacnet}/lib/services/read-property-multiple.js +11 -6
- package/resources/{bacstack → node-bacnet}/lib/services/read-property.js +42 -24
- package/resources/{bacstack → node-bacnet}/lib/services/read-range.js +37 -27
- package/resources/node-bacnet/lib/services/register-foreign-device.js +18 -0
- package/resources/{bacstack → node-bacnet}/lib/services/reinitialize-device.js +9 -4
- package/resources/{bacstack → node-bacnet}/lib/services/subscribe-cov.js +9 -4
- package/resources/{bacstack → node-bacnet}/lib/services/subscribe-property.js +18 -8
- package/resources/{bacstack → node-bacnet}/lib/services/time-sync.js +28 -5
- package/resources/{bacstack → node-bacnet}/lib/services/who-has.js +3 -3
- package/resources/{bacstack → node-bacnet}/lib/services/who-is.js +42 -9
- package/resources/{bacstack → node-bacnet}/lib/services/write-property-multiple.js +33 -16
- package/resources/{bacstack → node-bacnet}/lib/services/write-property.js +23 -13
- package/resources/node-bacnet/lib/transport.js +82 -0
- package/resources/node-bacnet/package.json +92 -0
- package/resources/primeicons.css +90 -2
- package/resources/bacstack/.codeclimate.yml +0 -15
- package/resources/bacstack/.dockerignore +0 -5
- package/resources/bacstack/.editorconfig +0 -13
- package/resources/bacstack/.eslintrc.yml +0 -13
- package/resources/bacstack/.github/ISSUE_TEMPLATE.md +0 -26
- package/resources/bacstack/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- package/resources/bacstack/.github/workflows/ci.yml +0 -39
- package/resources/bacstack/.jscsrc +0 -8
- package/resources/bacstack/.jshintrc +0 -50
- package/resources/bacstack/.travis.yml +0 -27
- package/resources/bacstack/CHANGELOG.md +0 -232
- package/resources/bacstack/CODE_OF_CONDUCT.md +0 -74
- package/resources/bacstack/CONTRIBUTING.md +0 -77
- package/resources/bacstack/Dockerfile +0 -15
- package/resources/bacstack/FAQ.md +0 -64
- package/resources/bacstack/README.md +0 -157
- package/resources/bacstack/docker-compose.yml +0 -9
- package/resources/bacstack/lib/adpu.js +0 -190
- package/resources/bacstack/lib/bvlc.js +0 -43
- package/resources/bacstack/lib/client.js +0 -1028
- package/resources/bacstack/lib/enum.js +0 -1314
- package/resources/bacstack/lib/npdu.js +0 -119
- package/resources/bacstack/lib/services/i-am-broadcast.js +0 -51
- package/resources/bacstack/lib/services.js +0 -1963
- package/resources/bacstack/lib/transport.js +0 -52
- package/resources/bacstack/package-lock.json +0 -7974
- package/resources/bacstack/package.json +0 -84
- package/resources/bacstack/test/compliance/who-is.spec.js +0 -37
- package/resources/bacstack/test/integration/acknowledge-alarm.spec.js +0 -14
- package/resources/bacstack/test/integration/add-list-element.spec.js +0 -16
- package/resources/bacstack/test/integration/confirmed-event-notification.spec.js +0 -30
- package/resources/bacstack/test/integration/confirmed-private-transfer.spec.js +0 -15
- package/resources/bacstack/test/integration/create-object.spec.js +0 -16
- package/resources/bacstack/test/integration/delete-object.spec.js +0 -14
- package/resources/bacstack/test/integration/device-communication-control.spec.js +0 -14
- package/resources/bacstack/test/integration/get-alarm-summary.spec.js +0 -14
- package/resources/bacstack/test/integration/get-enrollment-summary.spec.js +0 -15
- package/resources/bacstack/test/integration/get-event-information.spec.js +0 -14
- package/resources/bacstack/test/integration/read-file.spec.js +0 -14
- package/resources/bacstack/test/integration/read-property-multiple.spec.js +0 -110
- package/resources/bacstack/test/integration/read-property.spec.js +0 -14
- package/resources/bacstack/test/integration/read-range.spec.js +0 -14
- package/resources/bacstack/test/integration/reinitialize-sevice.spec.js +0 -14
- package/resources/bacstack/test/integration/remove-list-element.spec.js +0 -16
- package/resources/bacstack/test/integration/subscribe-cov.spec.js +0 -14
- package/resources/bacstack/test/integration/subscribe-property.spec.js +0 -14
- package/resources/bacstack/test/integration/time-sync-utc.spec.js +0 -10
- package/resources/bacstack/test/integration/time-sync.spec.js +0 -10
- package/resources/bacstack/test/integration/unconfirmed-event-notification.spec.js +0 -28
- package/resources/bacstack/test/integration/unconfirmed-private-transfer.spec.js +0 -11
- package/resources/bacstack/test/integration/utils.js +0 -30
- package/resources/bacstack/test/integration/who-is.spec.js +0 -17
- package/resources/bacstack/test/integration/write-file.spec.js +0 -14
- package/resources/bacstack/test/integration/write-property-multiple.spec.js +0 -19
- package/resources/bacstack/test/integration/write-property.spec.js +0 -14
- package/resources/bacstack/test/unit/apdu.spec.js +0 -162
- package/resources/bacstack/test/unit/asn1.spec.js +0 -39
- package/resources/bacstack/test/unit/bacnet-apdu.spec.js +0 -161
- package/resources/bacstack/test/unit/bacnet-asn1.spec.js +0 -32
- package/resources/bacstack/test/unit/bacnet-bvlc.spec.js +0 -57
- package/resources/bacstack/test/unit/bacnet-npdu.spec.js +0 -118
- package/resources/bacstack/test/unit/bacnet-services.spec.js +0 -2052
- package/resources/bacstack/test/unit/bvlc.spec.js +0 -58
- package/resources/bacstack/test/unit/npdu.spec.js +0 -119
- package/resources/bacstack/test/unit/service-add-list-element.spec.js +0 -24
- package/resources/bacstack/test/unit/service-alarm-acknowledge.spec.js +0 -71
- package/resources/bacstack/test/unit/service-alarm-summary.spec.js +0 -22
- package/resources/bacstack/test/unit/service-atomic-read-file.spec.js +0 -54
- package/resources/bacstack/test/unit/service-atomic-write-file.spec.js +0 -56
- package/resources/bacstack/test/unit/service-cov-notify.spec.js +0 -98
- package/resources/bacstack/test/unit/service-create-object.spec.js +0 -90
- package/resources/bacstack/test/unit/service-delete-object.spec.js +0 -17
- package/resources/bacstack/test/unit/service-device-communication-control.spec.js +0 -29
- package/resources/bacstack/test/unit/service-error.spec.js +0 -17
- package/resources/bacstack/test/unit/service-event-information.spec.js +0 -48
- package/resources/bacstack/test/unit/service-event-notify-data.spec.js +0 -310
- package/resources/bacstack/test/unit/service-get-enrollment-summary.spec.js +0 -45
- package/resources/bacstack/test/unit/service-get-event-information.spec.js +0 -62
- package/resources/bacstack/test/unit/service-i-am.spec.js +0 -19
- package/resources/bacstack/test/unit/service-i-have-broadcast.spec.js +0 -18
- package/resources/bacstack/test/unit/service-life-safety-operation.spec.js +0 -19
- package/resources/bacstack/test/unit/service-private-transfer.spec.js +0 -18
- package/resources/bacstack/test/unit/service-read-property-multiple.spec.js +0 -131
- package/resources/bacstack/test/unit/service-read-property.spec.js +0 -541
- package/resources/bacstack/test/unit/service-read-range.spec.js +0 -97
- package/resources/bacstack/test/unit/service-reinitialize-device.spec.js +0 -27
- package/resources/bacstack/test/unit/service-subscribe-cov.spec.js +0 -32
- package/resources/bacstack/test/unit/service-subscribe-property.spec.js +0 -50
- package/resources/bacstack/test/unit/service-time-sync.spec.js +0 -18
- package/resources/bacstack/test/unit/service-who-has.spec.js +0 -33
- package/resources/bacstack/test/unit/service-who-is.spec.js +0 -17
- package/resources/bacstack/test/unit/service-write-property-multiple.spec.js +0 -143
- package/resources/bacstack/test/unit/service-write-property.spec.js +0 -198
- package/resources/bacstack/test/unit/utils.js +0 -6
package/bacnet_read.html
CHANGED
|
@@ -20,18 +20,15 @@
|
|
|
20
20
|
pointsToRead: {value: {}},
|
|
21
21
|
readDevices: {value: []},
|
|
22
22
|
devicesToRead: [],
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
object_property_reliability: {value: false},
|
|
27
|
-
object_property_outOfService: {value: false},
|
|
28
|
-
object_property_units: {value: false},
|
|
23
|
+
object_property_simplePayload: {value: false},
|
|
24
|
+
object_property_fullObject: {value: true}
|
|
25
|
+
|
|
29
26
|
},
|
|
30
27
|
inputs: 1,
|
|
31
28
|
outputs: 1,
|
|
32
29
|
icon: "bitpool.svg",
|
|
33
30
|
label: function () {
|
|
34
|
-
return "read";
|
|
31
|
+
return this.name || "read";
|
|
35
32
|
},
|
|
36
33
|
paletteLabel: function () {
|
|
37
34
|
return "read";
|
|
@@ -55,6 +52,7 @@
|
|
|
55
52
|
nodeService: ref(new NodeService()),
|
|
56
53
|
pollFrequency: ref(),
|
|
57
54
|
deviceCount: ref(),
|
|
55
|
+
progressBarValue: ref(),
|
|
58
56
|
}
|
|
59
57
|
},
|
|
60
58
|
setup() {
|
|
@@ -63,7 +61,6 @@
|
|
|
63
61
|
const selectedKeys = ref(null);
|
|
64
62
|
const nodes = ref();
|
|
65
63
|
const expandedKeys = ref({});
|
|
66
|
-
|
|
67
64
|
const expandAll = () => {
|
|
68
65
|
for (let node of devices.value) {
|
|
69
66
|
expandNode(node);
|
|
@@ -108,10 +105,30 @@
|
|
|
108
105
|
app.pointList = result.pointList;
|
|
109
106
|
app.pollFrequency = parseInt(result.pollFrequency);
|
|
110
107
|
app.deviceCount = result.deviceList.length;
|
|
108
|
+
//progress bar percentage
|
|
109
|
+
app.progressBarValue = parseInt((result.renderList.length / result.deviceList.length) * 100);
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
rebuildDataModel() {
|
|
113
|
+
let app = this;
|
|
114
|
+
app.nodeService.rebuildDataModel().then(function (result) {
|
|
115
|
+
if(result == true){
|
|
116
|
+
app.progressBarValue = 0;
|
|
117
|
+
}
|
|
111
118
|
});
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
},
|
|
122
|
+
addAllDevices() {
|
|
123
|
+
let app = this;
|
|
124
|
+
app.devices.forEach(function (device) {
|
|
125
|
+
app.addAllClicked({"node": device});
|
|
126
|
+
});
|
|
127
|
+
|
|
112
128
|
},
|
|
113
129
|
addAllClicked(slotProps) {
|
|
114
130
|
//update UI
|
|
131
|
+
let app = this;
|
|
115
132
|
|
|
116
133
|
let clone = JSON.parse(JSON.stringify(slotProps.node));
|
|
117
134
|
|
|
@@ -135,48 +152,71 @@
|
|
|
135
152
|
|
|
136
153
|
//update node-red data structure to forward to gateway
|
|
137
154
|
let device = this.deviceList.find(ele => ele.deviceName == slotProps.node.label);
|
|
138
|
-
let
|
|
155
|
+
let deviceAddress = app.getDeviceAddress(device.address);
|
|
156
|
+
let key = `${deviceAddress}-${device.deviceId}`;
|
|
157
|
+
let points = this.pointList[key];
|
|
139
158
|
|
|
140
|
-
if (!this.pointsToRead[
|
|
141
|
-
this.pointsToRead[
|
|
159
|
+
if (!this.pointsToRead[key]) {
|
|
160
|
+
this.pointsToRead[key] = {};
|
|
142
161
|
}
|
|
143
162
|
|
|
144
163
|
for (let pointName in points) {
|
|
145
|
-
let point = this.pointList[
|
|
146
|
-
this.pointsToRead[
|
|
164
|
+
let point = this.pointList[key][pointName];
|
|
165
|
+
this.pointsToRead[key][point.objectName] = point;
|
|
147
166
|
}
|
|
148
167
|
|
|
149
168
|
//force a deploy state
|
|
150
169
|
node.hiddenDeployToggle = !node.prevHiddenToggleState;
|
|
151
170
|
},
|
|
171
|
+
removeAllDevices() {
|
|
172
|
+
let app = this;
|
|
173
|
+
|
|
174
|
+
let clone = JSON.parse(JSON.stringify(app.readDevices));
|
|
175
|
+
|
|
176
|
+
clone.forEach(function (device) {
|
|
177
|
+
app.removeAllClicked({"node": device});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
app.$forceUpdate();
|
|
181
|
+
|
|
182
|
+
},
|
|
152
183
|
removeAllClicked(slotProps) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (
|
|
157
|
-
|
|
184
|
+
let app = this;
|
|
185
|
+
try {
|
|
186
|
+
//update UI
|
|
187
|
+
if (this.readDevices.length > 0) {
|
|
188
|
+
let foundIndex = this.readDevices.findIndex(ele => ele.key == slotProps.node.key && ele.label == slotProps.node.label);
|
|
189
|
+
if (foundIndex !== -1) this.readDevices.splice(foundIndex, 1);
|
|
190
|
+
}
|
|
158
191
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
192
|
+
let deviceSlot = this.devices.find(ele => ele.label == slotProps.node.label);
|
|
193
|
+
if(deviceSlot) {
|
|
194
|
+
deviceSlot.showAdded = false;
|
|
195
|
+
deviceSlot.children.forEach(function(child) {
|
|
196
|
+
child.showAdded = false;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
slotProps.node.showAdded = false;
|
|
200
|
+
this.$forceUpdate();
|
|
201
|
+
|
|
202
|
+
//update node-red data structure
|
|
203
|
+
let device = this.deviceList.find(ele => ele.deviceName == slotProps.node.label);
|
|
204
|
+
let deviceAddress = app.getDeviceAddress(device.address);
|
|
205
|
+
let key = `${deviceAddress}-${device.deviceId}`;
|
|
206
|
+
if (this.pointsToRead[key]) {
|
|
207
|
+
delete this.pointsToRead[key];
|
|
208
|
+
}
|
|
168
209
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
210
|
+
//force a deploy state
|
|
211
|
+
node.hiddenDeployToggle = !node.prevHiddenToggleState;
|
|
212
|
+
|
|
213
|
+
} catch(e){
|
|
214
|
+
console.log("removeAllClicked error: ", e);
|
|
173
215
|
}
|
|
174
216
|
|
|
175
|
-
//force a deploy state
|
|
176
|
-
node.hiddenDeployToggle = !node.prevHiddenToggleState;
|
|
177
217
|
},
|
|
178
218
|
addPointClicked(slotProps) {
|
|
179
|
-
|
|
219
|
+
let app = this;
|
|
180
220
|
//update UI
|
|
181
221
|
let parentDeviceName = slotProps.node.parentDevice;
|
|
182
222
|
let foundDeviceIndex = this.readDevices ? this.readDevices.findIndex(ele => ele.label == parentDeviceName) : -1;
|
|
@@ -199,31 +239,35 @@
|
|
|
199
239
|
}
|
|
200
240
|
|
|
201
241
|
//set show added to true
|
|
202
|
-
let slot = parentDevice.children.find(ele => ele.
|
|
242
|
+
let slot = parentDevice.children.find(ele => ele.pointName == slotProps.node.pointName);
|
|
203
243
|
slot.showAdded = true;
|
|
204
244
|
|
|
205
245
|
this.$forceUpdate();
|
|
206
246
|
|
|
207
247
|
//update node-red data structure
|
|
208
248
|
let device = this.deviceList.find(ele => ele.deviceName == parentDeviceName);
|
|
209
|
-
|
|
210
|
-
|
|
249
|
+
let deviceAddress = app.getDeviceAddress(device.address);
|
|
250
|
+
let key = `${deviceAddress}-${device.deviceId}`;
|
|
251
|
+
|
|
252
|
+
if (!this.pointsToRead[key]) {
|
|
253
|
+
this.pointsToRead[key] = {};
|
|
211
254
|
}
|
|
212
255
|
|
|
213
|
-
let point = this.pointList[
|
|
214
|
-
this.pointsToRead[
|
|
256
|
+
let point = this.pointList[key][slotProps.node.pointName];
|
|
257
|
+
this.pointsToRead[key][point.objectName] = point;
|
|
215
258
|
|
|
216
259
|
//force a deploy state
|
|
217
260
|
node.hiddenDeployToggle = !node.prevHiddenToggleState;
|
|
218
261
|
},
|
|
219
262
|
removePointClicked(slotProps) {
|
|
263
|
+
let app = this;
|
|
220
264
|
//update UI
|
|
221
265
|
let parentDeviceName = slotProps.node.parentDevice;
|
|
222
266
|
let foundDeviceIndex = this.readDevices ? this.readDevices.findIndex(ele => ele.label == parentDeviceName) : -1;
|
|
223
267
|
let parentDevice = this.devices.find(ele => ele.label == parentDeviceName);
|
|
224
268
|
|
|
225
269
|
if (foundDeviceIndex !== -1) {
|
|
226
|
-
let foundIndex = this.readDevices[foundDeviceIndex].children.findIndex(ele => ele.key == slotProps.node.key && ele.
|
|
270
|
+
let foundIndex = this.readDevices[foundDeviceIndex].children.findIndex(ele => ele.key == slotProps.node.key && ele.pointName == slotProps.node.pointName);
|
|
227
271
|
if (foundIndex !== -1) this.readDevices[foundDeviceIndex].children.splice(foundIndex, 1);
|
|
228
272
|
if (this.readDevices[foundDeviceIndex].children.length == 0) {
|
|
229
273
|
this.readDevices.splice(foundDeviceIndex, 1);
|
|
@@ -231,19 +275,33 @@
|
|
|
231
275
|
}
|
|
232
276
|
|
|
233
277
|
//set show added to true
|
|
234
|
-
let slot = parentDevice.showAdded ? slotProps.node : parentDevice.children.find(ele => ele.
|
|
278
|
+
let slot = parentDevice.showAdded ? slotProps.node : parentDevice.children.find(ele => ele.pointName == slotProps.node.pointName);
|
|
235
279
|
slot.showAdded = false;
|
|
236
280
|
slotProps.node.showAdded = false;
|
|
237
281
|
this.$forceUpdate();
|
|
238
282
|
|
|
239
283
|
//update node-red data stucture
|
|
240
284
|
let device = this.deviceList.find(ele => ele.deviceName == parentDeviceName);
|
|
241
|
-
let
|
|
242
|
-
|
|
285
|
+
let deviceAddress = app.getDeviceAddress(device.address);
|
|
286
|
+
let key = `${deviceAddress}-${device.deviceId}`;
|
|
287
|
+
let point = this.pointList[key][slotProps.node.pointName];
|
|
288
|
+
if (this.pointsToRead[key][point.objectName]) delete this.pointsToRead[key][point.objectName];
|
|
289
|
+
//if last point is removed, deleted whole entry
|
|
290
|
+
if(Object.keys(this.pointsToRead[key]).length == 0) delete this.pointsToRead[key];
|
|
243
291
|
|
|
244
292
|
//force a deploy state
|
|
245
293
|
node.hiddenDeployToggle = !node.prevHiddenToggleState;
|
|
246
294
|
},
|
|
295
|
+
getDeviceAddress(addr) {
|
|
296
|
+
switch(typeof addr) {
|
|
297
|
+
case "object":
|
|
298
|
+
return addr.address;
|
|
299
|
+
case "string":
|
|
300
|
+
return addr;
|
|
301
|
+
default:
|
|
302
|
+
return addr;
|
|
303
|
+
}
|
|
304
|
+
},
|
|
247
305
|
isDeviceActive(slotProps) {
|
|
248
306
|
let app = this;
|
|
249
307
|
if (((Date.now() - slotProps.node.lastSeen) / 1000) < (app.pollFrequency + 5)) {
|
|
@@ -272,12 +330,14 @@
|
|
|
272
330
|
components: {
|
|
273
331
|
"p-tree": primevue.tree,
|
|
274
332
|
"p-button": primevue.button,
|
|
275
|
-
"p-timeline": primevue.timeline
|
|
333
|
+
"p-timeline": primevue.timeline,
|
|
334
|
+
"p-progressbar": primevue.progressbar
|
|
276
335
|
}
|
|
277
336
|
};
|
|
278
337
|
|
|
279
338
|
let vueapp = createApp(App);
|
|
280
|
-
vueapp.use(primevue.config.default)
|
|
339
|
+
vueapp.use(primevue.config.default);
|
|
340
|
+
vueapp.use(primevue.confirmationservice);
|
|
281
341
|
node.vm = vueapp.mount("#node-input-tabs-content");
|
|
282
342
|
|
|
283
343
|
//reinstate device data
|
|
@@ -290,18 +350,11 @@
|
|
|
290
350
|
}
|
|
291
351
|
|
|
292
352
|
//set checkboxes to config values stored in backend
|
|
293
|
-
|
|
294
|
-
document.getElementById("node-input-
|
|
295
|
-
document.getElementById("node-input-
|
|
296
|
-
document.getElementById("node-input-
|
|
297
|
-
document.getElementById("node-input-
|
|
298
|
-
document.getElementById("node-input-object_property_statusFlag").onclick = handleCheckboxClick;
|
|
299
|
-
document.getElementById("node-input-object_property_reliability").checked = node.object_property_reliability;
|
|
300
|
-
document.getElementById("node-input-object_property_reliability").onclick = handleCheckboxClick;
|
|
301
|
-
document.getElementById("node-input-object_property_outOfService").checked = node.object_property_outOfService;
|
|
302
|
-
document.getElementById("node-input-object_property_outOfService").onclick = handleCheckboxClick;
|
|
303
|
-
document.getElementById("node-input-object_property_units").checked = node.object_property_units;
|
|
304
|
-
document.getElementById("node-input-object_property_units").onclick = handleCheckboxClick;
|
|
353
|
+
|
|
354
|
+
document.getElementById("node-input-object_property_simplePayload").checked = node.object_property_simplePayload;
|
|
355
|
+
document.getElementById("node-input-object_property_simplePayload").onclick = handleCheckboxClick;
|
|
356
|
+
document.getElementById("node-input-object_property_fullObject").checked = node.object_property_fullObject;
|
|
357
|
+
document.getElementById("node-input-object_property_fullObject").onclick = handleCheckboxClick;
|
|
305
358
|
|
|
306
359
|
document.getElementById("node-input-roundDecimal").value = node.roundDecimal;
|
|
307
360
|
document.getElementById("node-input-json").checked = node.json;
|
|
@@ -310,15 +363,12 @@
|
|
|
310
363
|
document.getElementById("node-input-mqtt").onclick = handleMsgTypeClick;
|
|
311
364
|
|
|
312
365
|
function handleCheckboxClick() {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
if (box.checked == true) {
|
|
317
|
-
checkedCount++;
|
|
318
|
-
}
|
|
366
|
+
|
|
367
|
+
if(this.id == "node-input-object_property_simplePayload") {
|
|
368
|
+
document.getElementById("node-input-object_property_fullObject").checked = !document.getElementById("node-input-object_property_fullObject").checked;
|
|
319
369
|
}
|
|
320
|
-
if
|
|
321
|
-
|
|
370
|
+
if(this.id == "node-input-object_property_fullObject") {
|
|
371
|
+
document.getElementById("node-input-object_property_simplePayload").checked = !document.getElementById("node-input-object_property_simplePayload").checked;
|
|
322
372
|
}
|
|
323
373
|
}
|
|
324
374
|
|
|
@@ -389,13 +439,13 @@
|
|
|
389
439
|
<style>
|
|
390
440
|
|
|
391
441
|
.p-treenode-label {
|
|
392
|
-
/* color: white; */
|
|
393
442
|
color: black;
|
|
394
443
|
width: 100%;
|
|
395
444
|
}
|
|
396
445
|
.p-tree {
|
|
397
446
|
background: inherit !important;
|
|
398
447
|
border: inherit !important;
|
|
448
|
+
padding-right: 0px !important;
|
|
399
449
|
}
|
|
400
450
|
.p-button {
|
|
401
451
|
margin-right: .5rem;
|
|
@@ -407,16 +457,14 @@
|
|
|
407
457
|
float: right;
|
|
408
458
|
}
|
|
409
459
|
.addPointButton:hover, .minusPointButton:hover {
|
|
410
|
-
/* background: #282A36 !important; */
|
|
411
460
|
background: #d5d5d5 !important;
|
|
412
461
|
}
|
|
413
462
|
.pointLabel {
|
|
414
463
|
font-weight: 400;
|
|
415
464
|
}
|
|
416
|
-
.p-treenode-children {
|
|
417
|
-
/* background-color: #21232e; */
|
|
465
|
+
/* .p-treenode-children {
|
|
418
466
|
background-color: #f0f0f0;
|
|
419
|
-
}
|
|
467
|
+
} */
|
|
420
468
|
.deviceLabel {
|
|
421
469
|
font-weight: 100;
|
|
422
470
|
}
|
|
@@ -429,12 +477,10 @@
|
|
|
429
477
|
.bacnetbutton {
|
|
430
478
|
background: none;
|
|
431
479
|
border: none;
|
|
432
|
-
/* color: white; */
|
|
433
480
|
color: black;
|
|
434
481
|
font-weight: 400;
|
|
435
482
|
}
|
|
436
483
|
.bacnetbutton:hover {
|
|
437
|
-
/* background: #21232e; */
|
|
438
484
|
background: #f0f0f0;
|
|
439
485
|
border-radius: 10px;
|
|
440
486
|
}
|
|
@@ -454,7 +500,6 @@
|
|
|
454
500
|
padding-bottom: 30px;
|
|
455
501
|
}
|
|
456
502
|
.p-tree-toggler:enabled:hover {
|
|
457
|
-
/* background: #21232e !important; */
|
|
458
503
|
background: #d5d5d5 !important;
|
|
459
504
|
}
|
|
460
505
|
.p-tree-toggler:focus {
|
|
@@ -502,7 +547,7 @@
|
|
|
502
547
|
outline: none !important;
|
|
503
548
|
}
|
|
504
549
|
.p-tree-filter:focus, .p-tree-filter:focus-visible, .p-inputtext:enabled:hover {
|
|
505
|
-
box-shadow: inset 0 0 0 0.15rem #
|
|
550
|
+
box-shadow: inset 0 0 0 0.15rem #dfdcdc !important;
|
|
506
551
|
border-color: transparent !important;
|
|
507
552
|
}
|
|
508
553
|
.bacnetbutton > .pi {
|
|
@@ -514,11 +559,27 @@
|
|
|
514
559
|
.reloadButtonIcon {
|
|
515
560
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
|
|
516
561
|
}
|
|
562
|
+
.removeAllDevicesButton {
|
|
563
|
+
border: none;
|
|
564
|
+
background: none;
|
|
565
|
+
font-size: 14px !important;
|
|
566
|
+
float: right;
|
|
567
|
+
display: flex;
|
|
568
|
+
align-items: center;
|
|
569
|
+
}
|
|
570
|
+
.removeAllDevicesButton:hover {
|
|
571
|
+
background-color: #d5d5d5;
|
|
572
|
+
border-radius: 10px;
|
|
573
|
+
}
|
|
517
574
|
.reloadButton {
|
|
518
575
|
border: none;
|
|
519
576
|
background: none;
|
|
520
|
-
|
|
521
|
-
|
|
577
|
+
font-size: 14px !important;
|
|
578
|
+
float: right;
|
|
579
|
+
}
|
|
580
|
+
.rebuildDataButton {
|
|
581
|
+
border: none;
|
|
582
|
+
background: none;
|
|
522
583
|
font-size: 14px !important;
|
|
523
584
|
float: right;
|
|
524
585
|
}
|
|
@@ -526,9 +587,41 @@
|
|
|
526
587
|
background-color: #d5d5d5;
|
|
527
588
|
border-radius: 10px;
|
|
528
589
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
590
|
+
.rebuildDataButton:hover {
|
|
591
|
+
background-color: #d5d5d5;
|
|
592
|
+
border-radius: 10px;
|
|
593
|
+
}
|
|
594
|
+
.headerDiv {
|
|
595
|
+
display: flex;
|
|
596
|
+
flex-direction: row;
|
|
597
|
+
flex-wrap: nowrap;
|
|
598
|
+
justify-content: space-around;
|
|
599
|
+
height: 20px;
|
|
600
|
+
}
|
|
601
|
+
.msgTypeDiv {
|
|
602
|
+
display: flex;
|
|
603
|
+
align-items: flex-start;
|
|
604
|
+
flex-direction: column;
|
|
605
|
+
}
|
|
606
|
+
.p-progressbar .p-progressbar-value {
|
|
607
|
+
background: #00AEEF !important;
|
|
608
|
+
}
|
|
609
|
+
.p-treenode-label {
|
|
610
|
+
overflow: hidden;
|
|
611
|
+
white-space: nowrap;
|
|
612
|
+
text-overflow: ellipsis;
|
|
613
|
+
}
|
|
614
|
+
.buttonGroup {
|
|
615
|
+
padding-left: 7px;
|
|
616
|
+
}
|
|
617
|
+
#read-readList-tab {
|
|
618
|
+
display: flex;
|
|
619
|
+
flex-direction: column;
|
|
620
|
+
}
|
|
621
|
+
.removeAllDevicesDiv {
|
|
622
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
623
|
+
padding-right: 20px;
|
|
624
|
+
}
|
|
532
625
|
|
|
533
626
|
</style>
|
|
534
627
|
|
|
@@ -554,11 +647,20 @@
|
|
|
554
647
|
|
|
555
648
|
<div id='read-networkTree-tab-content' class="networkTreeContent" style='display:none'>
|
|
556
649
|
|
|
557
|
-
<div>
|
|
650
|
+
<div class="headerDiv">
|
|
558
651
|
<a class="countStatus" style="margin-left: 15px;">Count: {{deviceCount}} device(s)</a>
|
|
559
|
-
<
|
|
560
|
-
|
|
561
|
-
|
|
652
|
+
<p-progressbar :value="progressBarValue" :show-value="true" style="width: 300px; height: 20px;"></p-progressbar>
|
|
653
|
+
<div class="buttonGroup" style="padding-left: 15px;">
|
|
654
|
+
<button @click="rebuildDataModel()" class="rebuildDataButton" title="Rebuild Data Model" >
|
|
655
|
+
<i class="pi pi-wrench" style="color: #ff0000;"></i>
|
|
656
|
+
</button>
|
|
657
|
+
<button @click="getData()" class="reloadButton" title="Reload Data">
|
|
658
|
+
<i class="pi pi-refresh" style="color: #00AEEF;"></i>
|
|
659
|
+
</button>
|
|
660
|
+
<button @click="addAllDevices()" class="reloadButton" title="Add all devices">
|
|
661
|
+
<i class="pi pi-plus" style="color: #00AEEF;"></i>
|
|
662
|
+
</button>
|
|
663
|
+
</div>
|
|
562
664
|
</div>
|
|
563
665
|
|
|
564
666
|
|
|
@@ -625,7 +727,11 @@
|
|
|
625
727
|
*
|
|
626
728
|
-->
|
|
627
729
|
<div id='read-readList-tab' style='display:none'>
|
|
628
|
-
|
|
730
|
+
<div class="removeAllDevicesDiv" >
|
|
731
|
+
<button @click="removeAllDevices()" class="removeAllDevicesButton" title="Remove all devices">
|
|
732
|
+
<i class="pi pi-minus-circle" style="color: #ff0000; padding-right: 5px;"> </i><a style="color: #ff0000;">Remove All Devices</a>
|
|
733
|
+
</button>
|
|
734
|
+
</div>
|
|
629
735
|
|
|
630
736
|
<p-tree :value="readDevices">
|
|
631
737
|
<template #device="slotProps">
|
|
@@ -652,71 +758,43 @@
|
|
|
652
758
|
*
|
|
653
759
|
-->
|
|
654
760
|
<div id='read-properties-tab' style='display:none'>
|
|
655
|
-
<div class="form-row" style="display:
|
|
761
|
+
<div class="form-row" style="display: flex; width: fit-content; flex-wrap: nowrap; flex-direction: column;">
|
|
656
762
|
|
|
657
|
-
<label for="node-input-object_properties_group" style="display: flex; align-items: center; white-space: nowrap;">Object Properties:</label>
|
|
658
|
-
<div id="node-input-object_properties_group" style="display: flex; align-items: flex-end; flex-direction: column; padding-left: 30px;">
|
|
659
|
-
|
|
660
|
-
<div class="objectPropertiesLabel">
|
|
661
|
-
<label for="node-input-object_property_presentVal" style="padding-left: 4px; width: auto;" class="objectPropertiesLabel">
|
|
662
|
-
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.object_property_presentVal"></span>
|
|
663
|
-
<a style="white-space: nowrap;">Present Value</a>
|
|
664
|
-
<input style="margin-left: 5px;" class="checkbox-round objectProp" type="checkbox" id="node-input-object_property_presentVal">
|
|
665
|
-
</label>
|
|
666
|
-
</div>
|
|
667
|
-
|
|
668
|
-
<div class="objectPropertiesLabel">
|
|
669
|
-
<label for="node-input-object_property_objDescription" style="padding-left: 21px; width: auto;" class="objectPropertiesLabel">
|
|
670
|
-
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.object_property_objDescription"></span>
|
|
671
|
-
<a>Description</a>
|
|
672
|
-
<input style="margin-left: 5px;" class="checkbox-round objectProp" type="checkbox" id="node-input-object_property_objDescription">
|
|
673
|
-
</label>
|
|
674
|
-
</div>
|
|
763
|
+
<label for="node-input-object_properties_group" style="display: flex; align-items: center; white-space: nowrap; text-decoration: underline;">Object Properties:</label>
|
|
675
764
|
|
|
676
|
-
<div class="objectPropertiesLabel">
|
|
677
|
-
<label for="node-input-object_property_statusFlag" style="padding-left: 13px; width: auto;" class="objectPropertiesLabel">
|
|
678
|
-
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.object_property_statusFlag"></span>
|
|
679
|
-
<a style="white-space: nowrap;">Status Flags</a>
|
|
680
|
-
<input style="margin-left: 5px;" class="checkbox-round objectProp" type="checkbox" id="node-input-object_property_statusFlag">
|
|
681
|
-
</label>
|
|
682
|
-
</div>
|
|
683
765
|
|
|
766
|
+
<div id="node-input-object_properties_group" style="display: flex; align-items: flex-start; flex-direction: column; padding-left: 50px;">
|
|
684
767
|
<div class="objectPropertiesLabel">
|
|
685
|
-
<label for="node-input-
|
|
686
|
-
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.
|
|
687
|
-
<
|
|
688
|
-
<
|
|
768
|
+
<label for="node-input-object_property_simplePayload" style="padding-left: 4px; width: auto; align-items: start;" class="objectPropertiesLabel">
|
|
769
|
+
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.object_property_simplePayload"></span>
|
|
770
|
+
<input style="margin-left: 5px;" class=" objectProp" type="checkbox" id="node-input-object_property_simplePayload">
|
|
771
|
+
<a style="white-space: nowrap; padding-left: 20px;">Simple Payload</a>
|
|
689
772
|
</label>
|
|
690
773
|
</div>
|
|
691
774
|
|
|
692
775
|
<div class="objectPropertiesLabel">
|
|
693
|
-
<label for="node-input-
|
|
694
|
-
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.
|
|
695
|
-
<
|
|
696
|
-
<
|
|
776
|
+
<label for="node-input-object_property_fullObject" style="padding-left: 4px; width: auto; align-items: start;" class="objectPropertiesLabel">
|
|
777
|
+
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.object_property_fullObject"></span>
|
|
778
|
+
<input style="margin-left: 5px;" class=" objectProp" type="checkbox" id="node-input-object_property_fullObject">
|
|
779
|
+
<a style="white-space: nowrap; padding-left: 20px;">Full Object</a>
|
|
697
780
|
</label>
|
|
698
781
|
</div>
|
|
699
782
|
|
|
700
|
-
|
|
701
|
-
<label for="node-input-object_property_units" style="padding-left: 60px; width: auto;" class="objectPropertiesLabel">
|
|
702
|
-
<i class="icon-tag"></i> <span data-i18n="bitpool-bacnet.label.object_property_units"></span>
|
|
703
|
-
<a style="white-space: nowrap;">Units</a>
|
|
704
|
-
<input style="margin-left: 5px;" class="checkbox-round objectProp" type="checkbox" id="node-input-object_property_units">
|
|
705
|
-
</label>
|
|
706
|
-
</div>
|
|
707
|
-
</div>
|
|
783
|
+
</div>
|
|
708
784
|
</div>
|
|
709
785
|
|
|
710
|
-
<
|
|
711
|
-
<br>
|
|
786
|
+
<hr>
|
|
712
787
|
|
|
713
|
-
<div class="form-row" style="display: flex;">
|
|
714
|
-
<label for="node-input-msgType">
|
|
788
|
+
<div class="form-row msgTypeDiv" style="display: flex;">
|
|
789
|
+
<label for="node-input-msgType" style="text-decoration: underline;">
|
|
715
790
|
Message type:
|
|
716
791
|
</label>
|
|
717
|
-
<div id="node-input-msgType" style="display: flex; align-items: flex-
|
|
718
|
-
|
|
719
|
-
|
|
792
|
+
<div id="node-input-msgType" style="display: flex; align-items: flex-start; flex-direction: column; padding-left: 50px;">
|
|
793
|
+
|
|
794
|
+
<!-- class= checkbox-round -->
|
|
795
|
+
<div style="display: flex; flex-direction: row; align-items: flex-start;"><input class="checkbox-round" type="checkbox" id="node-input-json" style="width: 13px; margin-left: 5px;"/><label for="node-input-json" style="padding-left: 20px; width: fit-content;">Block per device</label> </div>
|
|
796
|
+
<div style="display: flex; flex-direction: row; align-items: flex-start;"><input class="checkbox-round" type="checkbox" id="node-input-mqtt" style="width: 13px; margin-left: 5px;"/><label for="node-input-mqtt" style="padding-left: 20px; width: fit-content;">Individual msgs</label> </div>
|
|
797
|
+
|
|
720
798
|
</div>
|
|
721
799
|
</div>
|
|
722
800
|
|
package/bacnet_read.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
MIT License Copyright 2021, 2022 - Bitpool Pty Ltd
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
|
|
7
7
|
module.exports = function (RED) {
|
|
8
8
|
const { ReadCommandConfig } = require('./common');
|
|
9
|
+
const baEnum = require('./resources/node-bacnet/index.js').enum;
|
|
9
10
|
|
|
10
11
|
function BitpoolBacnetReadDevice (config) {
|
|
11
12
|
RED.nodes.createNode(this, config);
|
|
@@ -18,37 +19,32 @@ module.exports = function (RED) {
|
|
|
18
19
|
this.readDevices = config.readDevices;
|
|
19
20
|
this.id = config.id;
|
|
20
21
|
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this.object_property_units = config.object_property_units;
|
|
22
|
+
this.object_property_simplePayload = config.object_property_simplePayload;
|
|
23
|
+
this.object_property_fullObject = config.object_property_fullObject;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
27
|
this.object_props = getObjectProps(this);
|
|
28
28
|
|
|
29
29
|
function getObjectProps(node) {
|
|
30
30
|
var propArr = [];
|
|
31
|
-
if(node.
|
|
32
|
-
propArr.push({ id: baEnum.
|
|
33
|
-
}
|
|
34
|
-
if(node.object_property_objDescription == true){
|
|
35
|
-
propArr.push({ id: baEnum.PropertyIds.PROP_DESCRIPTION });
|
|
36
|
-
}
|
|
37
|
-
if(node.object_property_statusFlag == true){
|
|
38
|
-
propArr.push({ id: baEnum.PropertyIds.PROP_STATUS_FLAGS });
|
|
39
|
-
}
|
|
40
|
-
if(node.object_property_reliability == true){
|
|
41
|
-
propArr.push({ id: baEnum.PropertyIds.PROP_RELIABILITY });
|
|
42
|
-
}
|
|
43
|
-
if(node.object_property_outOfService == true){
|
|
44
|
-
propArr.push({ id: baEnum.PropertyIds.PROP_OUT_OF_SERVICE });
|
|
31
|
+
if(node.object_property_simplePayload == true){
|
|
32
|
+
propArr.push({ id: baEnum.PropertyIdentifier.PRESENT_VALUE });
|
|
45
33
|
}
|
|
46
|
-
if(node.
|
|
47
|
-
propArr.push(
|
|
34
|
+
if(node.object_property_fullObject == true){
|
|
35
|
+
propArr.push(
|
|
36
|
+
{ id: baEnum.PropertyIdentifier.PRESENT_VALUE },
|
|
37
|
+
{ id: baEnum.PropertyIdentifier.DESCRIPTION },
|
|
38
|
+
{ id: baEnum.PropertyIdentifier.STATUS_FLAGS },
|
|
39
|
+
{ id: baEnum.PropertyIdentifier.RELIABILITY },
|
|
40
|
+
{ id: baEnum.PropertyIdentifier.OUT_OF_SERVICE },
|
|
41
|
+
{ id: baEnum.PropertyIdentifier.UNITS }
|
|
42
|
+
|
|
43
|
+
);
|
|
48
44
|
}
|
|
49
45
|
|
|
50
46
|
//add object name for every request as its used in formatting
|
|
51
|
-
propArr.push({ id: baEnum.
|
|
47
|
+
propArr.push({ id: baEnum.PropertyIdentifier.OBJECT_NAME});
|
|
52
48
|
|
|
53
49
|
return propArr;
|
|
54
50
|
};
|
|
@@ -63,6 +59,10 @@ module.exports = function (RED) {
|
|
|
63
59
|
type: "Read",
|
|
64
60
|
id: node.id,
|
|
65
61
|
options: readConfig,
|
|
62
|
+
objectPropertyType: {
|
|
63
|
+
simplePayload: node.object_property_simplePayload,
|
|
64
|
+
fullObject: node.object_property_fullObject
|
|
65
|
+
},
|
|
66
66
|
outputType: {
|
|
67
67
|
json: node.json,
|
|
68
68
|
mqtt: node.mqtt
|