node-red-contrib-knx-ultimate 3.1.1 → 3.1.3
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 +9 -0
- package/nodes/knxUltimate.html +137 -147
- package/package.json +1 -1
- package/resources/KNXFunctionCodeSnippets.js +43 -0
- package/_JS_KNXEngine/CHANGELOG.md +0 -164
- package/_JS_KNXEngine/LICENSE +0 -21
- package/_JS_KNXEngine/README.md +0 -592
- package/_JS_KNXEngine/img/dpt 2.png +0 -0
- package/_JS_KNXEngine/img/dpt.png +0 -0
- package/_JS_KNXEngine/img/logo 2.png +0 -0
- package/_JS_KNXEngine/img/logo-big 2.png +0 -0
- package/_JS_KNXEngine/img/logo-big.png +0 -0
- package/_JS_KNXEngine/img/logo.png +0 -0
- package/_JS_KNXEngine/img/nodered 2.png +0 -0
- package/_JS_KNXEngine/img/nodered.png +0 -0
- package/_JS_KNXEngine/index.js +0 -16
- package/_JS_KNXEngine/package.json +0 -50
- package/_JS_KNXEngine/sample.js +0 -202
- package/_JS_KNXEngine/sampleSecure.js +0 -153
- package/_JS_KNXEngine/simpleSample.js +0 -76
- package/_JS_KNXEngine/src/Curve25519.js +0 -1750
- package/_JS_KNXEngine/src/KNXClient.js +0 -1054
- package/_JS_KNXEngine/src/KNXSocketOptions.js +0 -3
- package/_JS_KNXEngine/src/KNXsecureKeyring.js +0 -543
- package/_JS_KNXEngine/src/KnxLog.js +0 -66
- package/_JS_KNXEngine/src/cur.js +0 -217
- package/_JS_KNXEngine/src/dptlib/dpt1.js +0 -232
- package/_JS_KNXEngine/src/dptlib/dpt10.js +0 -106
- package/_JS_KNXEngine/src/dptlib/dpt11.js +0 -83
- package/_JS_KNXEngine/src/dptlib/dpt12.js +0 -60
- package/_JS_KNXEngine/src/dptlib/dpt13.js +0 -107
- package/_JS_KNXEngine/src/dptlib/dpt14.js +0 -202
- package/_JS_KNXEngine/src/dptlib/dpt15.js +0 -24
- package/_JS_KNXEngine/src/dptlib/dpt16.js +0 -68
- package/_JS_KNXEngine/src/dptlib/dpt17.js +0 -27
- package/_JS_KNXEngine/src/dptlib/dpt18.js +0 -93
- package/_JS_KNXEngine/src/dptlib/dpt19.js +0 -58
- package/_JS_KNXEngine/src/dptlib/dpt2.js +0 -147
- package/_JS_KNXEngine/src/dptlib/dpt20.js +0 -51
- package/_JS_KNXEngine/src/dptlib/dpt21.js +0 -66
- package/_JS_KNXEngine/src/dptlib/dpt213.js +0 -152
- package/_JS_KNXEngine/src/dptlib/dpt22.js +0 -143
- package/_JS_KNXEngine/src/dptlib/dpt222.js +0 -151
- package/_JS_KNXEngine/src/dptlib/dpt232.js +0 -59
- package/_JS_KNXEngine/src/dptlib/dpt235.js +0 -137
- package/_JS_KNXEngine/src/dptlib/dpt237.js +0 -92
- package/_JS_KNXEngine/src/dptlib/dpt238.js +0 -90
- package/_JS_KNXEngine/src/dptlib/dpt242.js +0 -85
- package/_JS_KNXEngine/src/dptlib/dpt249.js +0 -88
- package/_JS_KNXEngine/src/dptlib/dpt251.js +0 -77
- package/_JS_KNXEngine/src/dptlib/dpt275.js +0 -58
- package/_JS_KNXEngine/src/dptlib/dpt28.js +0 -63
- package/_JS_KNXEngine/src/dptlib/dpt29.js +0 -63
- package/_JS_KNXEngine/src/dptlib/dpt3.js +0 -90
- package/_JS_KNXEngine/src/dptlib/dpt4.js +0 -57
- package/_JS_KNXEngine/src/dptlib/dpt5.js +0 -75
- package/_JS_KNXEngine/src/dptlib/dpt6.js +0 -45
- package/_JS_KNXEngine/src/dptlib/dpt60001.js +0 -276
- package/_JS_KNXEngine/src/dptlib/dpt60002.js +0 -101
- package/_JS_KNXEngine/src/dptlib/dpt7.js +0 -147
- package/_JS_KNXEngine/src/dptlib/dpt8.js +0 -94
- package/_JS_KNXEngine/src/dptlib/dpt9.js +0 -273
- package/_JS_KNXEngine/src/dptlib/dpt999.js +0 -62
- package/_JS_KNXEngine/src/dptlib/index.js +0 -177
- package/_JS_KNXEngine/src/errors/BufferLengthError.js +0 -4
- package/_JS_KNXEngine/src/errors/DateFormatError.js +0 -5
- package/_JS_KNXEngine/src/errors/DuplicateRequestError.js +0 -5
- package/_JS_KNXEngine/src/errors/InvalidValueError.js +0 -5
- package/_JS_KNXEngine/src/errors/NotImplementedError.js +0 -5
- package/_JS_KNXEngine/src/errors/RequestTimeoutError.js +0 -3
- package/_JS_KNXEngine/src/errors/index.js +0 -7
- package/_JS_KNXEngine/src/index.js +0 -13
- package/_JS_KNXEngine/src/protocol/CRD.js +0 -65
- package/_JS_KNXEngine/src/protocol/CRI.js +0 -35
- package/_JS_KNXEngine/src/protocol/CRIFactory.js +0 -21
- package/_JS_KNXEngine/src/protocol/DIB.js +0 -3
- package/_JS_KNXEngine/src/protocol/DeviceInfo.js +0 -233
- package/_JS_KNXEngine/src/protocol/HPAI.js +0 -103
- package/_JS_KNXEngine/src/protocol/IPConfig.js +0 -99
- package/_JS_KNXEngine/src/protocol/IPCurrentConfig.js +0 -114
- package/_JS_KNXEngine/src/protocol/KNXAddress.js +0 -119
- package/_JS_KNXEngine/src/protocol/KNXAddresses.js +0 -58
- package/_JS_KNXEngine/src/protocol/KNXConnectRequest.js +0 -41
- package/_JS_KNXEngine/src/protocol/KNXConnectResponse.js +0 -66
- package/_JS_KNXEngine/src/protocol/KNXConnectionStateRequest.js +0 -38
- package/_JS_KNXEngine/src/protocol/KNXConnectionStateResponse.js +0 -53
- package/_JS_KNXEngine/src/protocol/KNXConstants.js +0 -84
- package/_JS_KNXEngine/src/protocol/KNXDataBuffer.js +0 -28
- package/_JS_KNXEngine/src/protocol/KNXDescriptionRequest.js +0 -26
- package/_JS_KNXEngine/src/protocol/KNXDescriptionResponse.js +0 -34
- package/_JS_KNXEngine/src/protocol/KNXDisconnectRequest.js +0 -36
- package/_JS_KNXEngine/src/protocol/KNXDisconnectResponse.js +0 -30
- package/_JS_KNXEngine/src/protocol/KNXHeader.js +0 -66
- package/_JS_KNXEngine/src/protocol/KNXPacket.js +0 -23
- package/_JS_KNXEngine/src/protocol/KNXProtocol.js +0 -116
- package/_JS_KNXEngine/src/protocol/KNXRoutingIndication.js +0 -34
- package/_JS_KNXEngine/src/protocol/KNXSearchRequest.js +0 -26
- package/_JS_KNXEngine/src/protocol/KNXSearchResponse.js +0 -36
- package/_JS_KNXEngine/src/protocol/KNXSecureSessionRequest.js +0 -62
- package/_JS_KNXEngine/src/protocol/KNXTunnelingAck.js +0 -39
- package/_JS_KNXEngine/src/protocol/KNXTunnelingRequest.js +0 -49
- package/_JS_KNXEngine/src/protocol/KNXUtils.js +0 -69
- package/_JS_KNXEngine/src/protocol/ServiceFamilies.js +0 -73
- package/_JS_KNXEngine/src/protocol/TunnelCRI.js +0 -40
- package/_JS_KNXEngine/src/protocol/cEMI/AdditionalInfo.js +0 -37
- package/_JS_KNXEngine/src/protocol/cEMI/CEMIConstants.js +0 -28
- package/_JS_KNXEngine/src/protocol/cEMI/CEMIFactory.js +0 -56
- package/_JS_KNXEngine/src/protocol/cEMI/CEMIMessage.js +0 -33
- package/_JS_KNXEngine/src/protocol/cEMI/ControlField.js +0 -132
- package/_JS_KNXEngine/src/protocol/cEMI/LDataCon.js +0 -54
- package/_JS_KNXEngine/src/protocol/cEMI/LDataInd.js +0 -54
- package/_JS_KNXEngine/src/protocol/cEMI/LDataReq.js +0 -54
- package/_JS_KNXEngine/src/protocol/cEMI/NPDU.js +0 -173
- package/_JS_KNXEngine/src/protocol/cEMI/TLVInfo.js +0 -29
- package/_JS_KNXEngine/src/protocol/index.js +0 -7
- package/_JS_KNXEngine/src/util/ipAddressHelper.js +0 -52
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
+
**Version 3.1.3** - August 2024<br/>
|
|
10
|
+
- KNX Node: now the property page opens directly on KNX Function tab, if js code is present. CAUTION, KNX FUNCTION IS STILL IN BETA AND SUBJECT TO CHANGES.<br/>
|
|
11
|
+
- KNX Node: Universal mode is now selectable in the dropdown list of GA Types.<br/>
|
|
12
|
+
- KNX Node: better UI controls placements.<br/>
|
|
13
|
+
- Updated documentation.<br/>
|
|
14
|
+
|
|
15
|
+
**Version 3.1.2** - August 2024<br/>
|
|
16
|
+
- NEW: KNX Function code editor: minor fixes. CAUTION, KNX FUNCTION IS STILL IN BETA AND SUBJECT TO CHANGES.<br/>
|
|
17
|
+
|
|
9
18
|
**Version 3.1.1** - August 2024<br/>
|
|
10
19
|
- NEW: KNX Function code editor in the device node: you can now write you own script to handle inbound and outboud KNX messages. Added "node" and "RED" object to the function's context. CAUTION, KNX FUNCTION IS STILL IN BETA AND SUBJECT TO CHANGES.<br/>
|
|
11
20
|
|
package/nodes/knxUltimate.html
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
5
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/KNXFunctionCodeSnippets.js"></script>
|
|
5
6
|
|
|
6
7
|
<script type="text/javascript">
|
|
7
8
|
RED.nodes.registerType('knxUltimate', {
|
|
@@ -20,7 +21,6 @@
|
|
|
20
21
|
notifywrite: { value: true },
|
|
21
22
|
notifyreadrequestalsorespondtobus: { value: false },
|
|
22
23
|
notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized: { value: "0" },
|
|
23
|
-
listenallga: { value: false },
|
|
24
24
|
name: { value: "" },
|
|
25
25
|
outputtype: { value: "write" },
|
|
26
26
|
outputRBE: { value: "true" },
|
|
@@ -30,13 +30,16 @@
|
|
|
30
30
|
formatdecimalsvalue: { value: 999 },
|
|
31
31
|
passthrough: { value: "no" },
|
|
32
32
|
sendMsgToKNXCode: { value: "" },
|
|
33
|
-
receiveMsgFromKNXCode: { value: "" }
|
|
33
|
+
receiveMsgFromKNXCode: { value: "" },
|
|
34
|
+
listenallga: { value: "" }
|
|
34
35
|
},
|
|
35
36
|
inputs: 1,
|
|
36
37
|
outputs: 1,
|
|
37
38
|
icon: "node-knx-icon.svg",
|
|
38
39
|
label: function () {
|
|
39
|
-
|
|
40
|
+
const functionSendMsgToKNXCode = (this.sendMsgToKNXCode !== undefined && this.sendMsgToKNXCode !== '') ? "f(x) " : "";
|
|
41
|
+
const functionreceiveMsgFromKNXCode = (this.receiveMsgFromKNXCode !== undefined && this.receiveMsgFromKNXCode !== '') ? " f(x)" : "";
|
|
42
|
+
return ((this.outputRBE === "true" || this.outputRBE === true) ? "|rbe| " : "") + functionSendMsgToKNXCode + (this.name || this.topic || "KNX Device") + (this.setTopicType === 'str' || this.setTopicType === undefined ? '' : ' [' + (this.setTopicType === 'listenAllGA' ? 'Universal' : this.setTopicType) + ']') + functionreceiveMsgFromKNXCode + ((this.inputRBE === "true" || this.inputRBE === true) ? " |rbe|" : "")
|
|
40
43
|
},
|
|
41
44
|
paletteLabel: "KNX DEVICE",
|
|
42
45
|
// button: {
|
|
@@ -105,49 +108,13 @@
|
|
|
105
108
|
});
|
|
106
109
|
// Snippets
|
|
107
110
|
$("#snippetOne").on("click", function (event) {
|
|
108
|
-
node.sendMsgToKNXCodeEditor.session.setValue(
|
|
109
|
-
// Replace 'x/x/x' with the real status group address.
|
|
110
|
-
const statusGA = getGAValue('x/x/x','1.001');
|
|
111
|
-
if (msg.payload !== statusGA){ // " !==" means " not equal"
|
|
112
|
-
return msg;
|
|
113
|
-
}else{
|
|
114
|
-
// Both values are identical, so i don't send the msg.
|
|
115
|
-
return;
|
|
116
|
-
}`);
|
|
111
|
+
node.sendMsgToKNXCodeEditor.session.setValue(KNXFunctionSnippetOne);
|
|
117
112
|
});
|
|
118
113
|
$("#snippetTwo").on("click", function (event) {
|
|
119
|
-
node.receiveMsgFromKNXCodeEditor.session.setValue(
|
|
120
|
-
const inputMSG = {
|
|
121
|
-
topic: '0/0/10',
|
|
122
|
-
devicename: 'Plafoniera soggiorno [switch]',
|
|
123
|
-
payload: false,
|
|
124
|
-
payloadmeasureunit: 'unknown',
|
|
125
|
-
payloadsubtypevalue: 'Off',
|
|
126
|
-
gainfo: {
|
|
127
|
-
maingroupname: 'Attuatori luci',
|
|
128
|
-
middlegroupname: 'Luci primo piano',
|
|
129
|
-
ganame: 'Plafoniera soggiorno [switch]',
|
|
130
|
-
maingroupnumber: '0',
|
|
131
|
-
middlegroupnumber: '0',
|
|
132
|
-
ganumber: '10'
|
|
133
|
-
},
|
|
134
|
-
knx: {
|
|
135
|
-
event: 'GroupValue_Write',
|
|
136
|
-
dpt: '1.001',
|
|
137
|
-
dptdesc: 'Switch',
|
|
138
|
-
source: '15.15.22',
|
|
139
|
-
destination: '0/0/10',
|
|
140
|
-
rawValue: 'bufferValue'
|
|
141
|
-
},
|
|
142
|
-
previouspayload: false
|
|
143
|
-
}
|
|
144
|
-
return msg`);
|
|
114
|
+
node.receiveMsgFromKNXCodeEditor.session.setValue(KNXFunctionSnippetTwo);
|
|
145
115
|
});
|
|
146
116
|
$("#snippetThree").on("click", function (event) {
|
|
147
|
-
node.receiveMsgFromKNXCodeEditor.session.setValue(
|
|
148
|
-
// The current msg contains the internal temperature in the "msg.payload" property, but we want to emit the external temperature as well.
|
|
149
|
-
msg.externalTemperature = getGAValue('0/0/10'); // In case the ETS file is missing, you must specify the dpt as well: getGAValue('0/0/10','9.001')
|
|
150
|
-
return msg;`);
|
|
117
|
+
node.receiveMsgFromKNXCodeEditor.session.setValue(KNXFunctionSnippetThree);
|
|
151
118
|
});
|
|
152
119
|
|
|
153
120
|
function checkUI() {
|
|
@@ -231,7 +198,7 @@ return msg;`);
|
|
|
231
198
|
|
|
232
199
|
$("#node-input-notifyreadrequest").on('change', function () {
|
|
233
200
|
if ($("#node-input-notifyreadrequest").is(":checked")) {
|
|
234
|
-
if ($("#node-input-
|
|
201
|
+
if ($("#node-input-setTopicType").val() === "listenAllGA") {
|
|
235
202
|
} else {
|
|
236
203
|
$("#divnotifyreadrequestautoreact").show();
|
|
237
204
|
}
|
|
@@ -240,47 +207,6 @@ return msg;`);
|
|
|
240
207
|
}
|
|
241
208
|
})
|
|
242
209
|
|
|
243
|
-
$("#node-input-listenallga").on('change', function () {
|
|
244
|
-
if ($("#node-input-listenallga").is(":checked")) {
|
|
245
|
-
$("#GAandDPT").hide()
|
|
246
|
-
$("#divOutputRBE").hide()
|
|
247
|
-
$("#node-input-outputRBE").val("false")
|
|
248
|
-
$("#divInputRBE").hide()
|
|
249
|
-
$("#node-input-inputRBE").val("false")
|
|
250
|
-
$("#divnotifyreadrequestautoreact").hide();
|
|
251
|
-
$("#helpallga").show();
|
|
252
|
-
$("#divTopic").hide()
|
|
253
|
-
|
|
254
|
-
// Call a fake datapoint to load a sample "Universal Node"
|
|
255
|
-
knxUltimateDptsGetHelp("0.000", true); // 15/09/2020 Supergiovane, load sample help
|
|
256
|
-
|
|
257
|
-
if ($("#helpallga").html == "") {
|
|
258
|
-
// There is a ETS csv file, show the init read option
|
|
259
|
-
$("#divNode-input-initialread").show()
|
|
260
|
-
} else {
|
|
261
|
-
// There isn't a ETS csv file, hide and deselect the init read option
|
|
262
|
-
$("#divNode-input-initialread").hide();
|
|
263
|
-
$("#node-input-initialread").val(0);
|
|
264
|
-
}
|
|
265
|
-
} else {
|
|
266
|
-
|
|
267
|
-
// 15/09/2020 Supergiovane, load the help sample of the current datapoint
|
|
268
|
-
knxUltimateDptsGetHelp($("#node-input-dpt").val(), false); // 15/09/2020 Supergiovane, load sample help
|
|
269
|
-
|
|
270
|
-
$("#GAandDPT").show()
|
|
271
|
-
$("#divOutputRBE").show()
|
|
272
|
-
$("#divInputRBE").show()
|
|
273
|
-
$("#divTopic").show()
|
|
274
|
-
if ($("#node-input-notifyreadrequest").is(":checked")) {
|
|
275
|
-
$("#divnotifyreadrequestautoreact").show();
|
|
276
|
-
} else {
|
|
277
|
-
$("#divnotifyreadrequestautoreact").hide();
|
|
278
|
-
}
|
|
279
|
-
$("#helpallga").hide()
|
|
280
|
-
$("#divNode-input-initialread").show();
|
|
281
|
-
}
|
|
282
|
-
})
|
|
283
|
-
|
|
284
210
|
// Set the group address type
|
|
285
211
|
if (node.setTopicType === undefined) {
|
|
286
212
|
node.setTopicType = 'str';
|
|
@@ -300,6 +226,7 @@ return msg;`);
|
|
|
300
226
|
|
|
301
227
|
$("#node-input-setTopicType").on('change', function () {
|
|
302
228
|
try {
|
|
229
|
+
$("#node-input-topic").show();
|
|
303
230
|
$("#node-input-topic").autocomplete('destroy');
|
|
304
231
|
$("#node-input-topic").off(); // Rimuovi tutti gli eventi associati
|
|
305
232
|
$("#node-input-topic").val(''); // Pulisce il valore del campo di input, se necessario
|
|
@@ -343,7 +270,45 @@ return msg;`);
|
|
|
343
270
|
$(this).autocomplete('search', $(this).val() + 'exactmatch');
|
|
344
271
|
});
|
|
345
272
|
$("#divDatapointSelection").show();
|
|
273
|
+
} else if ($("#node-input-setTopicType").val() === 'listenAllGA') {
|
|
274
|
+
$("#node-input-topic").hide();
|
|
275
|
+
$("#GAandDPT").hide()
|
|
276
|
+
$("#divOutputRBE").hide()
|
|
277
|
+
$("#node-input-outputRBE").val("false")
|
|
278
|
+
$("#divInputRBE").hide()
|
|
279
|
+
$("#node-input-inputRBE").val("false")
|
|
280
|
+
$("#divnotifyreadrequestautoreact").hide();
|
|
281
|
+
$("#helpallga").show();
|
|
282
|
+
$("#divTopic").hide()
|
|
283
|
+
|
|
284
|
+
// Call a fake datapoint to load a sample "Universal Node"
|
|
285
|
+
knxUltimateDptsGetHelp("0.000", true); // 15/09/2020 Supergiovane, load sample help
|
|
286
|
+
|
|
287
|
+
if ($("#helpallga").html == "") {
|
|
288
|
+
// There is a ETS csv file, show the init read option
|
|
289
|
+
$("#divNode-input-initialread").show()
|
|
290
|
+
} else {
|
|
291
|
+
// There isn't a ETS csv file, hide and deselect the init read option
|
|
292
|
+
$("#divNode-input-initialread").hide();
|
|
293
|
+
$("#node-input-initialread").val(0);
|
|
294
|
+
}
|
|
346
295
|
} else {
|
|
296
|
+
|
|
297
|
+
// 15/09/2020 Supergiovane, load the help sample of the current datapoint
|
|
298
|
+
knxUltimateDptsGetHelp($("#node-input-dpt").val(), false); // 15/09/2020 Supergiovane, load sample help
|
|
299
|
+
|
|
300
|
+
$("#GAandDPT").show()
|
|
301
|
+
$("#divOutputRBE").show()
|
|
302
|
+
$("#divInputRBE").show()
|
|
303
|
+
$("#divTopic").show()
|
|
304
|
+
if ($("#node-input-notifyreadrequest").is(":checked")) {
|
|
305
|
+
$("#divnotifyreadrequestautoreact").show();
|
|
306
|
+
} else {
|
|
307
|
+
$("#divnotifyreadrequestautoreact").hide();
|
|
308
|
+
}
|
|
309
|
+
$("#helpallga").hide()
|
|
310
|
+
$("#divNode-input-initialread").show();
|
|
311
|
+
|
|
347
312
|
$("#node-input-topic").prop('placeholder', $("#node-input-setTopicType").val());
|
|
348
313
|
if ($("#node-input-topic").val() === '') $("#node-input-topic").val('MyVariable');
|
|
349
314
|
$("#divDatapointSelection").hide();
|
|
@@ -360,7 +325,7 @@ return msg;`);
|
|
|
360
325
|
} else {
|
|
361
326
|
// 25/10/2019 Warn user that the node will node encode/decode datagram, if Listen All GA's if the config node doesn't contain the csv
|
|
362
327
|
$("#helpallga").html("<i> " + node._("knxUltimate.advanced.noETSWarning") + " </i>");
|
|
363
|
-
if ($("#node-input-
|
|
328
|
+
if ($("#node-input-setTopicType").val() === 'listenAllGA') {
|
|
364
329
|
// There isn't a ETS csv file, hide and deselect the init read option
|
|
365
330
|
$("#divNode-input-initialread").hide();
|
|
366
331
|
$("#node-input-initialread").val(0);
|
|
@@ -369,7 +334,7 @@ return msg;`);
|
|
|
369
334
|
}
|
|
370
335
|
}
|
|
371
336
|
} else {
|
|
372
|
-
$("#node-input-
|
|
337
|
+
$("#node-input-setTopicType").val('str')
|
|
373
338
|
$("#divTopic").show()
|
|
374
339
|
$("#GAandDPT").show()
|
|
375
340
|
$("#divOutputRBE").show()
|
|
@@ -381,7 +346,7 @@ return msg;`);
|
|
|
381
346
|
// *****************************
|
|
382
347
|
|
|
383
348
|
setTimeout(() => {
|
|
384
|
-
if (node.
|
|
349
|
+
if ($("#node-input-setTopicType").val() === 'listenAllGA') {
|
|
385
350
|
// Call a fake datapoint to load a sample "Universal Node"
|
|
386
351
|
knxUltimateDptsGetHelp("0.000", true); // 15/09/2020 Supergiovane, load sample help
|
|
387
352
|
}
|
|
@@ -398,6 +363,17 @@ return msg;`);
|
|
|
398
363
|
});
|
|
399
364
|
// ###########################
|
|
400
365
|
|
|
366
|
+
// If KNX Function is populated, set focus on the KNX Function tab.
|
|
367
|
+
if (this.sendMsgToKNXCodeEditor.getValue() !== '' || this.receiveMsgFromKNXCodeEditor.getValue()) {
|
|
368
|
+
$("#tabs").tabs(
|
|
369
|
+
{ active: 1 }
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Backwart compatibility listenAllGA
|
|
374
|
+
if (node.listenallga === true) {
|
|
375
|
+
$("#node-input-setTopicType").val('listenAllGA');
|
|
376
|
+
}
|
|
401
377
|
|
|
402
378
|
// 19/02/2020 Used to alert the user if the CSV file has not been loaded and to get the server sooner als deploy
|
|
403
379
|
// ###########################
|
|
@@ -411,12 +387,17 @@ return msg;`);
|
|
|
411
387
|
var node = this;
|
|
412
388
|
this.sendMsgToKNXCode = this.sendMsgToKNXCodeEditor.getValue();
|
|
413
389
|
this.receiveMsgFromKNXCode = this.receiveMsgFromKNXCodeEditor.getValue();
|
|
390
|
+
if ($("#node-input-setTopicType").val() === "listenAllGA") {
|
|
391
|
+
this.listenallga = true;
|
|
392
|
+
} else {
|
|
393
|
+
this.listenallga = false;
|
|
394
|
+
}
|
|
414
395
|
//this.propertyType = $("#node-input-property").typedInput('type');
|
|
415
396
|
|
|
416
397
|
// 19/02/2020 Warn user that the node will node encode/decode datagram, if Listen All GA's if the config node doesn't contain the csv
|
|
417
398
|
if ($("#isETSFileLoaded").val() === "no") {
|
|
418
399
|
// Notify the user
|
|
419
|
-
if ($("#node-input-
|
|
400
|
+
if ($("#node-input-setTopicType").val() === 'listenAllGA') {
|
|
420
401
|
var checkResult = node._("knxUltimate.advanced.notify-NoETSFile");
|
|
421
402
|
var myNotification = RED.notify(checkResult,
|
|
422
403
|
{
|
|
@@ -491,22 +472,22 @@ return msg;`);
|
|
|
491
472
|
|
|
492
473
|
<div id="divMain">
|
|
493
474
|
|
|
494
|
-
<div
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
<
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
</div>
|
|
475
|
+
<div class="form-row">
|
|
476
|
+
<label for="node-input-topic">
|
|
477
|
+
<img
|
|
478
|
+
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAB7CAAAewgFu0HU+AAAF6WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDMtMjNUMTY6MjE6MDkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAzLTIzVDE2OjI4OjI3KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTIzVDE2OjI4OjI3KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc4M2I5OWIxLTkwMjYtNGQ2OC05N2FmLTRkM2E2ZWY4Zjk2OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4N2E3YTg0NS0xMDljLTRkMTMtOGEzOS04OWVhOTMyMDQ0ZWMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4N2E3YTg0NS0xMDljLTRkMTMtOGEzOS04OWVhOTMyMDQ0ZWMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjg3YTdhODQ1LTEwOWMtNGQxMy04YTM5LTg5ZWE5MzIwNDRlYyIgc3RFdnQ6d2hlbj0iMjAyMC0wMy0yM1QxNjoyMTowOSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc4M2I5OWIxLTkwMjYtNGQ2OC05N2FmLTRkM2E2ZWY4Zjk2OCIgc3RFdnQ6d2hlbj0iMjAyMC0wMy0yM1QxNjoyODoyNyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+DGyPFQAAAE9JREFUKJG1UEEOACAIgub/v2yHalnJVoe4uIEKSgccJ9jroVmjA0+ujZtWku3DgZmgBiT4egN9CmmEAAfA/5HUW0OQu7dKmOCzmM3k9YYKZv8ZEZ/YgNsAAAAASUVORK5CYII="></img>
|
|
479
|
+
Group Addr.</label>
|
|
480
|
+
<select id="node-input-setTopicType" style="width:120px">
|
|
481
|
+
<option value="str">3-Levels</option>
|
|
482
|
+
<option value="listenAllGA">Universal mode (listen to all Group Addresses)</option>
|
|
483
|
+
<option value="flow">Flow</option>
|
|
484
|
+
<option value="global">Gobal</option>
|
|
485
|
+
<option value="env">$Env variable</option>
|
|
486
|
+
</select>
|
|
487
|
+
<input type="text" id="node-input-topic" placeholder="Start typing to search" style="width:180px" />
|
|
488
|
+
</div>
|
|
509
489
|
|
|
490
|
+
<div id="GAandDPT">
|
|
510
491
|
<div class="form-row" id="divDatapointSelection">
|
|
511
492
|
<label for="node-input-dpt">
|
|
512
493
|
<img
|
|
@@ -517,32 +498,7 @@ return msg;`);
|
|
|
517
498
|
<span id="sampleCodeEditor" style="color:red;" />
|
|
518
499
|
</div>
|
|
519
500
|
</div>
|
|
520
|
-
<div class="form-row">
|
|
521
|
-
<label for="node-input-name">
|
|
522
|
-
<i class="fa fa-tag"></i>
|
|
523
|
-
<span data-i18n="knxUltimate.properties.node-input-name"></span>
|
|
524
|
-
</label>
|
|
525
|
-
<input type="text" id="node-input-name" data-i18n="[placeholder]knxUltimate.properties.node-input-name" />
|
|
526
|
-
</div>
|
|
527
|
-
<div class="form-row" id="divTopic">
|
|
528
|
-
<label for="node-input-outputtopic">
|
|
529
|
-
<i class="fa fa-tasks"></i>
|
|
530
|
-
<span data-i18n="knxUltimate.properties.node-input-outputtopic"></span>
|
|
531
|
-
</label>
|
|
532
|
-
<input type="text" id="node-input-outputtopic" data-i18n="[placeholder]knxUltimate.placeholder.leaveempty" />
|
|
533
|
-
</div>
|
|
534
|
-
<div class="form-row">
|
|
535
|
-
<label for="node-input-passthrough">
|
|
536
|
-
<i class="fa fa-long-arrow-right"></i> Passthrough
|
|
537
|
-
</label>
|
|
538
|
-
<select id="node-input-passthrough">
|
|
539
|
-
<option value="no">No</option>
|
|
540
|
-
<option value="yes">Yes, pass the input msg to the output msg</option>
|
|
541
|
-
<option value="yesownprop">Yes, but put the input msg into msg.inputmessage property of the output msg
|
|
542
|
-
</option>
|
|
543
|
-
</select>
|
|
544
|
-
</div>
|
|
545
|
-
<div class="form-row">
|
|
501
|
+
<!-- <div class="form-row">
|
|
546
502
|
<input type="checkbox" id="node-input-listenallga"
|
|
547
503
|
style="display:inline-block; width:auto; vertical-align:top;" />
|
|
548
504
|
<label style="width:auto" for="node-input-listenallga">
|
|
@@ -550,8 +506,7 @@ return msg;`);
|
|
|
550
506
|
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAB7CAAAewgFu0HU+AAAFGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDMtMjNUMTY6MjM6MjMrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAzLTIzVDE2OjI1OjM0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTIzVDE2OjI1OjM0KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmJmNGM3NWVjLTIwNGYtNGY1YS05YTMxLTQ5NTU5YWJmZDE4NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpiZjRjNzVlYy0yMDRmLTRmNWEtOWEzMS00OTU1OWFiZmQxODUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiZjRjNzVlYy0yMDRmLTRmNWEtOWEzMS00OTU1OWFiZmQxODUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJmNGM3NWVjLTIwNGYtNGY1YS05YTMxLTQ5NTU5YWJmZDE4NSIgc3RFdnQ6d2hlbj0iMjAyMC0wMy0yM1QxNjoyMzoyMyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nhtLUgAAAE9JREFUKJG1UMsOACAIgub//7IdqvVQtjrExU1EEQLuiGCvgTNgl5D74MmVZPu4wIxQAgm+/sDec2VhgQPgf0sq1unjMlYJE/3MZrvy+kMFZQkZEWfC7ikAAAAASUVORK5CYII="></img>
|
|
551
507
|
<span data-i18n="knxUltimate.properties.node-input-listenallga"></span>
|
|
552
508
|
</label>
|
|
553
|
-
|
|
554
|
-
</div>
|
|
509
|
+
</div> -->
|
|
555
510
|
<div id="tabs">
|
|
556
511
|
<ul>
|
|
557
512
|
<li><a href="#tabs-1"><i class="fa fa-braille"></i> Advanced options</a></li>
|
|
@@ -562,7 +517,41 @@ return msg;`);
|
|
|
562
517
|
<div class="form-row" style="padding:10px">
|
|
563
518
|
<div class="form-row">
|
|
564
519
|
<dt>
|
|
565
|
-
<i class="fa fa-
|
|
520
|
+
<i class="fa fa-desktop"></i> General properties
|
|
521
|
+
</dt>
|
|
522
|
+
</div>
|
|
523
|
+
<div class="form-row">
|
|
524
|
+
<label for="node-input-name">
|
|
525
|
+
<i class="fa fa-tag"></i>
|
|
526
|
+
<span data-i18n="knxUltimate.properties.node-input-name"></span>
|
|
527
|
+
</label>
|
|
528
|
+
<input type="text" id="node-input-name"
|
|
529
|
+
data-i18n="[placeholder]knxUltimate.properties.node-input-name" />
|
|
530
|
+
</div>
|
|
531
|
+
<div class="form-row" id="divTopic">
|
|
532
|
+
<label for="node-input-outputtopic">
|
|
533
|
+
<i class="fa fa-tasks"></i>
|
|
534
|
+
<span data-i18n="knxUltimate.properties.node-input-outputtopic"></span>
|
|
535
|
+
</label>
|
|
536
|
+
<input type="text" id="node-input-outputtopic"
|
|
537
|
+
data-i18n="[placeholder]knxUltimate.placeholder.leaveempty" />
|
|
538
|
+
</div>
|
|
539
|
+
<div class="form-row">
|
|
540
|
+
<label for="node-input-passthrough">
|
|
541
|
+
<i class="fa fa-long-arrow-right"></i> Passthrough
|
|
542
|
+
</label>
|
|
543
|
+
<select id="node-input-passthrough">
|
|
544
|
+
<option value="no">No</option>
|
|
545
|
+
<option value="yes">Yes, pass the input msg to the output msg</option>
|
|
546
|
+
<option value="yesownprop">Yes, but put the input msg into msg.inputmessage property of the
|
|
547
|
+
output msg
|
|
548
|
+
</option>
|
|
549
|
+
</select>
|
|
550
|
+
</div>
|
|
551
|
+
<hr>
|
|
552
|
+
<div class="form-row">
|
|
553
|
+
<dt>
|
|
554
|
+
<i class="fa fa-arrow-right"></i>| From node's INPUT PIN to KNX BUS
|
|
566
555
|
</dt>
|
|
567
556
|
</div>
|
|
568
557
|
<div class="form-row">
|
|
@@ -588,7 +577,7 @@ return msg;`);
|
|
|
588
577
|
<hr>
|
|
589
578
|
<div class="form-row">
|
|
590
579
|
<dt>
|
|
591
|
-
|<i class="fa fa-arrow-right"></i>
|
|
580
|
+
|<i class="fa fa-arrow-right"></i> From KNX BUS to node's ouput PIN
|
|
592
581
|
</dt>
|
|
593
582
|
</div>
|
|
594
583
|
<div class="form-row" id="divNode-input-initialread">
|
|
@@ -706,7 +695,7 @@ return msg;`);
|
|
|
706
695
|
<div class="form-row" style="padding:10px">
|
|
707
696
|
<div class="form-row">
|
|
708
697
|
<dt>
|
|
709
|
-
<i class="fa fa-arrow-right"></i>|
|
|
698
|
+
<i class="fa fa-arrow-right"></i>| From node's INPUT PIN to KNX BUS
|
|
710
699
|
</dt>
|
|
711
700
|
</div>
|
|
712
701
|
<div style="height:200px;min-height:150px;padding:0px;">
|
|
@@ -718,7 +707,7 @@ return msg;`);
|
|
|
718
707
|
<hr>
|
|
719
708
|
<div class="form-row">
|
|
720
709
|
<dt>
|
|
721
|
-
|<i class="fa fa-arrow-right"></i>
|
|
710
|
+
|<i class="fa fa-arrow-right"></i> From KNX BUS to node's OUTPUT PIN
|
|
722
711
|
</dt>
|
|
723
712
|
</div>
|
|
724
713
|
<div style="height:200px;min-height:150px;padding:0px;">
|
|
@@ -756,13 +745,9 @@ return msg;`);
|
|
|
756
745
|
|Property|Description|
|
|
757
746
|
|--|--|
|
|
758
747
|
| Gateway | Select the KNX gateway to be used |
|
|
759
|
-
| GA Type dropdown list | The group address type. **3-Levels** is the default, where you can type the *3 level group address* or the *group address name* (if you've upload the ETS file), or **Global**, for reading the GA at startup from a global variable, or **Flow** that do the same as the *Global*, but at flow level. Select **$Env variable** to read the group address from an environment variable.
|
|
748
|
+
| GA Type dropdown list | The group address type. **3-Levels** is the default, where you can type the *3 level group address* or the *group address name* (if you've upload the ETS file), or **Global**, for reading the GA at startup from a global variable, or **Flow** that do the same as the *Global*, but at flow level. Select **$Env variable** to read the group address from an environment variable. Select **Universal mode (listen to all Group Addresses)** to react to ALL group addresses.|
|
|
760
749
|
| Group Addr. | The KNX Group Address you want to control. If you've imported the ETS group addresses file, you can just start typing in your device name. You can leave it empty if you wish set it with *msg.setConfig* input message. |
|
|
761
750
|
| Datapoint | The datapoint belonging to your node.|
|
|
762
|
-
| Node name | Self explaining. |
|
|
763
|
-
| Topic | The msg output topic. Leave it blank to have it set to your Group Address. |
|
|
764
|
-
| Passthrough | If set, you can pass the input mgs to the output msg. |
|
|
765
|
-
| Universal mode (listen to all Group Addresses) | By setting this, the node will read and control ALL group addresses. |
|
|
766
751
|
|
|
767
752
|
<br/>
|
|
768
753
|
<br/>
|
|
@@ -770,12 +755,16 @@ return msg;`);
|
|
|
770
755
|
**Advanced options**
|
|
771
756
|
|Property|Description|
|
|
772
757
|
|--|--|
|
|
773
|
-
||**
|
|
758
|
+
||**General properties**|
|
|
759
|
+
| Node name | Self explaining. |
|
|
760
|
+
| Topic | The msg output topic. Leave it blank to have it set to your Group Address. |
|
|
761
|
+
| Passthrough | If set, you can pass the input mgs to the output msg. |
|
|
762
|
+
||**From node's INPUT PIN to KNX BUS**|
|
|
774
763
|
| Telegram type | *write* to send write telegram (usually, you want that), otherwise you can choose the telegram's type to react to. |
|
|
775
|
-
| RBE filter
|
|
776
|
-
||**
|
|
764
|
+
| RBE filter | *Report by change* filter. If set, only the msg input (from the Flow) having different values each time, will be sent to the KNX bus. If you intend to send everytime the same value, turn it off. If enabled, "rbe" indication will be added to node's name.|
|
|
765
|
+
||**From KNX BUS to node's ouput PIN**|
|
|
777
766
|
| Read status on start | Read group address status, every time Node-Red starts and at every reconnection to the KNX Gateway. The node stores all group address values to a file, so you can choose wether to read from file or from the KNX bus. |
|
|
778
|
-
| RBE filter
|
|
767
|
+
| RBE filter | *Report by change* filter. If set, only the msg output (to KNX bus) having different values each time, will be sent to the msg output's flow. If you intend to send everytime the same value, leave it off. If enabled, "rbe" indication will be added to node's name. |
|
|
779
768
|
| React to write telegrams | The node will react (will send a msg to the flow) each time it receives a *write* telegram from the KNX bus. Usually, you want that. |
|
|
780
769
|
| React to response telegrams | The node will react (will send a msg to the flow) each time it receives a *response* telegram from the KNX bus. Usually, you want that for particular scenarios. |
|
|
781
770
|
| React to read telegrams | The node will react (will send a msg to the flow) each time it receives a *read* telegram from the KNX bus. Usually, you want that if you're want to send a custom value to the KNX BUS. |
|
|
@@ -790,9 +779,10 @@ return msg;`);
|
|
|
790
779
|
|
|
791
780
|
You can use Javascript to modify the behaviour of the input msg coming from the flow and the output telegram sent to the KNX bus.
|
|
792
781
|
The embedded code editor provides useful objects and functions to retrieve the value of all group addresses, both with the imported ETS file and without (specifying the datapoint).
|
|
793
|
-
The script is called everytime the node receives a msg from the flow or a telegram from the KNX BUS.
|
|
782
|
+
The script is called everytime the node receives a msg from the flow or a telegram from the KNX BUS.
|
|
783
|
+
If enabled, "f(x)" indication will be added to node's name.
|
|
794
784
|
|
|
795
|
-
###
|
|
785
|
+
### From KNX BUS to node's OUTPUT PIN
|
|
796
786
|
|
|
797
787
|
List of object and functions you can use in the code
|
|
798
788
|
|
|
@@ -814,7 +804,7 @@ if (msg.payload !== statusGA){ // "!==" means "not equal"
|
|
|
814
804
|
}
|
|
815
805
|
```
|
|
816
806
|
|
|
817
|
-
###
|
|
807
|
+
### From KNX BUS to node's ouput PIN
|
|
818
808
|
|
|
819
809
|
List of object and functions you can use in the code
|
|
820
810
|
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"engines": {
|
|
4
4
|
"node": ">=16.0.0"
|
|
5
5
|
},
|
|
6
|
-
"version": "3.1.
|
|
6
|
+
"version": "3.1.3",
|
|
7
7
|
"description": "Control your KNX intallation via Node-Red! A bunch of KNX nodes, with integrated Philips HUE control and ETS group address importer. Easy to use and highly configurable.",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"binary-parser": "2.2.1",
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// 31/03/2020 Search Helper
|
|
2
|
+
|
|
3
|
+
const KNXFunctionSnippetOne = `// @ts-nocheck
|
|
4
|
+
// Replace 'x/x/x' with the real status group address.
|
|
5
|
+
const statusGA = getGAValue('x/x/x','1.001');
|
|
6
|
+
if (msg.payload !== statusGA){ // " !==" means " not equal"
|
|
7
|
+
return msg;
|
|
8
|
+
}else{
|
|
9
|
+
// Both values are identical, so i don't send the msg.
|
|
10
|
+
return;
|
|
11
|
+
}`;
|
|
12
|
+
|
|
13
|
+
const KNXFunctionSnippetTwo = `// This is a sample of the msg received from the KNX BUS
|
|
14
|
+
const inputMSG = {
|
|
15
|
+
topic: '0/0/10',
|
|
16
|
+
devicename: 'Plafoniera soggiorno [switch]',
|
|
17
|
+
payload: false,
|
|
18
|
+
payloadmeasureunit: 'unknown',
|
|
19
|
+
payloadsubtypevalue: 'Off',
|
|
20
|
+
gainfo: {
|
|
21
|
+
maingroupname: 'Attuatori luci',
|
|
22
|
+
middlegroupname: 'Luci primo piano',
|
|
23
|
+
ganame: 'Plafoniera soggiorno [switch]',
|
|
24
|
+
maingroupnumber: '0',
|
|
25
|
+
middlegroupnumber: '0',
|
|
26
|
+
ganumber: '10'
|
|
27
|
+
},
|
|
28
|
+
knx: {
|
|
29
|
+
event: 'GroupValue_Write',
|
|
30
|
+
dpt: '1.001',
|
|
31
|
+
dptdesc: 'Switch',
|
|
32
|
+
source: '15.15.22',
|
|
33
|
+
destination: '0/0/10',
|
|
34
|
+
rawValue: 'bufferValue'
|
|
35
|
+
},
|
|
36
|
+
previouspayload: false
|
|
37
|
+
}
|
|
38
|
+
return msg`;
|
|
39
|
+
|
|
40
|
+
const KNXFunctionSnippetThree = `// @ts-nocheck
|
|
41
|
+
// The current msg contains the internal temperature in the "msg.payload" property, but we want to emit the external temperature as well.
|
|
42
|
+
msg.externalTemperature = getGAValue('0/0/10'); // In case the ETS file is missing, you must specify the dpt as well: getGAValue('0/0/10','9.001')
|
|
43
|
+
return msg;`;
|