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.
Files changed (116) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/nodes/knxUltimate.html +137 -147
  3. package/package.json +1 -1
  4. package/resources/KNXFunctionCodeSnippets.js +43 -0
  5. package/_JS_KNXEngine/CHANGELOG.md +0 -164
  6. package/_JS_KNXEngine/LICENSE +0 -21
  7. package/_JS_KNXEngine/README.md +0 -592
  8. package/_JS_KNXEngine/img/dpt 2.png +0 -0
  9. package/_JS_KNXEngine/img/dpt.png +0 -0
  10. package/_JS_KNXEngine/img/logo 2.png +0 -0
  11. package/_JS_KNXEngine/img/logo-big 2.png +0 -0
  12. package/_JS_KNXEngine/img/logo-big.png +0 -0
  13. package/_JS_KNXEngine/img/logo.png +0 -0
  14. package/_JS_KNXEngine/img/nodered 2.png +0 -0
  15. package/_JS_KNXEngine/img/nodered.png +0 -0
  16. package/_JS_KNXEngine/index.js +0 -16
  17. package/_JS_KNXEngine/package.json +0 -50
  18. package/_JS_KNXEngine/sample.js +0 -202
  19. package/_JS_KNXEngine/sampleSecure.js +0 -153
  20. package/_JS_KNXEngine/simpleSample.js +0 -76
  21. package/_JS_KNXEngine/src/Curve25519.js +0 -1750
  22. package/_JS_KNXEngine/src/KNXClient.js +0 -1054
  23. package/_JS_KNXEngine/src/KNXSocketOptions.js +0 -3
  24. package/_JS_KNXEngine/src/KNXsecureKeyring.js +0 -543
  25. package/_JS_KNXEngine/src/KnxLog.js +0 -66
  26. package/_JS_KNXEngine/src/cur.js +0 -217
  27. package/_JS_KNXEngine/src/dptlib/dpt1.js +0 -232
  28. package/_JS_KNXEngine/src/dptlib/dpt10.js +0 -106
  29. package/_JS_KNXEngine/src/dptlib/dpt11.js +0 -83
  30. package/_JS_KNXEngine/src/dptlib/dpt12.js +0 -60
  31. package/_JS_KNXEngine/src/dptlib/dpt13.js +0 -107
  32. package/_JS_KNXEngine/src/dptlib/dpt14.js +0 -202
  33. package/_JS_KNXEngine/src/dptlib/dpt15.js +0 -24
  34. package/_JS_KNXEngine/src/dptlib/dpt16.js +0 -68
  35. package/_JS_KNXEngine/src/dptlib/dpt17.js +0 -27
  36. package/_JS_KNXEngine/src/dptlib/dpt18.js +0 -93
  37. package/_JS_KNXEngine/src/dptlib/dpt19.js +0 -58
  38. package/_JS_KNXEngine/src/dptlib/dpt2.js +0 -147
  39. package/_JS_KNXEngine/src/dptlib/dpt20.js +0 -51
  40. package/_JS_KNXEngine/src/dptlib/dpt21.js +0 -66
  41. package/_JS_KNXEngine/src/dptlib/dpt213.js +0 -152
  42. package/_JS_KNXEngine/src/dptlib/dpt22.js +0 -143
  43. package/_JS_KNXEngine/src/dptlib/dpt222.js +0 -151
  44. package/_JS_KNXEngine/src/dptlib/dpt232.js +0 -59
  45. package/_JS_KNXEngine/src/dptlib/dpt235.js +0 -137
  46. package/_JS_KNXEngine/src/dptlib/dpt237.js +0 -92
  47. package/_JS_KNXEngine/src/dptlib/dpt238.js +0 -90
  48. package/_JS_KNXEngine/src/dptlib/dpt242.js +0 -85
  49. package/_JS_KNXEngine/src/dptlib/dpt249.js +0 -88
  50. package/_JS_KNXEngine/src/dptlib/dpt251.js +0 -77
  51. package/_JS_KNXEngine/src/dptlib/dpt275.js +0 -58
  52. package/_JS_KNXEngine/src/dptlib/dpt28.js +0 -63
  53. package/_JS_KNXEngine/src/dptlib/dpt29.js +0 -63
  54. package/_JS_KNXEngine/src/dptlib/dpt3.js +0 -90
  55. package/_JS_KNXEngine/src/dptlib/dpt4.js +0 -57
  56. package/_JS_KNXEngine/src/dptlib/dpt5.js +0 -75
  57. package/_JS_KNXEngine/src/dptlib/dpt6.js +0 -45
  58. package/_JS_KNXEngine/src/dptlib/dpt60001.js +0 -276
  59. package/_JS_KNXEngine/src/dptlib/dpt60002.js +0 -101
  60. package/_JS_KNXEngine/src/dptlib/dpt7.js +0 -147
  61. package/_JS_KNXEngine/src/dptlib/dpt8.js +0 -94
  62. package/_JS_KNXEngine/src/dptlib/dpt9.js +0 -273
  63. package/_JS_KNXEngine/src/dptlib/dpt999.js +0 -62
  64. package/_JS_KNXEngine/src/dptlib/index.js +0 -177
  65. package/_JS_KNXEngine/src/errors/BufferLengthError.js +0 -4
  66. package/_JS_KNXEngine/src/errors/DateFormatError.js +0 -5
  67. package/_JS_KNXEngine/src/errors/DuplicateRequestError.js +0 -5
  68. package/_JS_KNXEngine/src/errors/InvalidValueError.js +0 -5
  69. package/_JS_KNXEngine/src/errors/NotImplementedError.js +0 -5
  70. package/_JS_KNXEngine/src/errors/RequestTimeoutError.js +0 -3
  71. package/_JS_KNXEngine/src/errors/index.js +0 -7
  72. package/_JS_KNXEngine/src/index.js +0 -13
  73. package/_JS_KNXEngine/src/protocol/CRD.js +0 -65
  74. package/_JS_KNXEngine/src/protocol/CRI.js +0 -35
  75. package/_JS_KNXEngine/src/protocol/CRIFactory.js +0 -21
  76. package/_JS_KNXEngine/src/protocol/DIB.js +0 -3
  77. package/_JS_KNXEngine/src/protocol/DeviceInfo.js +0 -233
  78. package/_JS_KNXEngine/src/protocol/HPAI.js +0 -103
  79. package/_JS_KNXEngine/src/protocol/IPConfig.js +0 -99
  80. package/_JS_KNXEngine/src/protocol/IPCurrentConfig.js +0 -114
  81. package/_JS_KNXEngine/src/protocol/KNXAddress.js +0 -119
  82. package/_JS_KNXEngine/src/protocol/KNXAddresses.js +0 -58
  83. package/_JS_KNXEngine/src/protocol/KNXConnectRequest.js +0 -41
  84. package/_JS_KNXEngine/src/protocol/KNXConnectResponse.js +0 -66
  85. package/_JS_KNXEngine/src/protocol/KNXConnectionStateRequest.js +0 -38
  86. package/_JS_KNXEngine/src/protocol/KNXConnectionStateResponse.js +0 -53
  87. package/_JS_KNXEngine/src/protocol/KNXConstants.js +0 -84
  88. package/_JS_KNXEngine/src/protocol/KNXDataBuffer.js +0 -28
  89. package/_JS_KNXEngine/src/protocol/KNXDescriptionRequest.js +0 -26
  90. package/_JS_KNXEngine/src/protocol/KNXDescriptionResponse.js +0 -34
  91. package/_JS_KNXEngine/src/protocol/KNXDisconnectRequest.js +0 -36
  92. package/_JS_KNXEngine/src/protocol/KNXDisconnectResponse.js +0 -30
  93. package/_JS_KNXEngine/src/protocol/KNXHeader.js +0 -66
  94. package/_JS_KNXEngine/src/protocol/KNXPacket.js +0 -23
  95. package/_JS_KNXEngine/src/protocol/KNXProtocol.js +0 -116
  96. package/_JS_KNXEngine/src/protocol/KNXRoutingIndication.js +0 -34
  97. package/_JS_KNXEngine/src/protocol/KNXSearchRequest.js +0 -26
  98. package/_JS_KNXEngine/src/protocol/KNXSearchResponse.js +0 -36
  99. package/_JS_KNXEngine/src/protocol/KNXSecureSessionRequest.js +0 -62
  100. package/_JS_KNXEngine/src/protocol/KNXTunnelingAck.js +0 -39
  101. package/_JS_KNXEngine/src/protocol/KNXTunnelingRequest.js +0 -49
  102. package/_JS_KNXEngine/src/protocol/KNXUtils.js +0 -69
  103. package/_JS_KNXEngine/src/protocol/ServiceFamilies.js +0 -73
  104. package/_JS_KNXEngine/src/protocol/TunnelCRI.js +0 -40
  105. package/_JS_KNXEngine/src/protocol/cEMI/AdditionalInfo.js +0 -37
  106. package/_JS_KNXEngine/src/protocol/cEMI/CEMIConstants.js +0 -28
  107. package/_JS_KNXEngine/src/protocol/cEMI/CEMIFactory.js +0 -56
  108. package/_JS_KNXEngine/src/protocol/cEMI/CEMIMessage.js +0 -33
  109. package/_JS_KNXEngine/src/protocol/cEMI/ControlField.js +0 -132
  110. package/_JS_KNXEngine/src/protocol/cEMI/LDataCon.js +0 -54
  111. package/_JS_KNXEngine/src/protocol/cEMI/LDataInd.js +0 -54
  112. package/_JS_KNXEngine/src/protocol/cEMI/LDataReq.js +0 -54
  113. package/_JS_KNXEngine/src/protocol/cEMI/NPDU.js +0 -173
  114. package/_JS_KNXEngine/src/protocol/cEMI/TLVInfo.js +0 -29
  115. package/_JS_KNXEngine/src/protocol/index.js +0 -7
  116. 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
 
@@ -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
- return ((this.outputRBE === "true" || this.outputRBE === true) ? "|rbe| " : "") + (this.name || this.topic || "KNX Device") + (this.setTopicType === 'str' || this.setTopicType === undefined ? '' : ' [' + this.setTopicType + ']') + ((this.inputRBE === "true" || this.inputRBE === true) ? " |rbe|" : "")
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(`// @ts-nocheck
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(`// This is a sample of the msg received from the KNX BUS
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(`// @ts-nocheck
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-listenallga").is(":checked")) {
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-listenallga").is(":checked")) {
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-listenallga").prop("checked", false)
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.listenallga === true) {
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-listenallga").is(":checked")) {
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 id="GAandDPT">
495
-
496
- <div class="form-row">
497
- <label for="node-input-topic">
498
- <img
499
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAB7CAAAewgFu0HU+AAAF6WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDMtMjNUMTY6MjE6MDkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAzLTIzVDE2OjI4OjI3KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTIzVDE2OjI4OjI3KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc4M2I5OWIxLTkwMjYtNGQ2OC05N2FmLTRkM2E2ZWY4Zjk2OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4N2E3YTg0NS0xMDljLTRkMTMtOGEzOS04OWVhOTMyMDQ0ZWMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4N2E3YTg0NS0xMDljLTRkMTMtOGEzOS04OWVhOTMyMDQ0ZWMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjg3YTdhODQ1LTEwOWMtNGQxMy04YTM5LTg5ZWE5MzIwNDRlYyIgc3RFdnQ6d2hlbj0iMjAyMC0wMy0yM1QxNjoyMTowOSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc4M2I5OWIxLTkwMjYtNGQ2OC05N2FmLTRkM2E2ZWY4Zjk2OCIgc3RFdnQ6d2hlbj0iMjAyMC0wMy0yM1QxNjoyODoyNyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+DGyPFQAAAE9JREFUKJG1UEEOACAIgub/v2yHalnJVoe4uIEKSgccJ9jroVmjA0+ujZtWku3DgZmgBiT4egN9CmmEAAfA/5HUW0OQu7dKmOCzmM3k9YYKZv8ZEZ/YgNsAAAAASUVORK5CYII="></img>
500
- Group Addr.</label>
501
- <select id="node-input-setTopicType" style="width:120px">
502
- <option value="str">3-Levels</option>
503
- <option value="flow">Flow</option>
504
- <option value="global">Gobal</option>
505
- <option value="env">$Env variable</option>
506
- </select>
507
- <input type="text" id="node-input-topic" placeholder="Start typing to search" style="width:180px" />
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
- <!-- <div id="helpallga">Some Content Here</div> -->
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-arrow-right"></i>| SEND msg to KNX BUS
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> RECEIVE msg from KNX BUS
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>| SEND msg to KNX BUS
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> RECEIVE msg from KNX BUS
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
- ||**SEND msg to KNX BUS**|
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 (in the CONTROL section) | *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. |
776
- ||**RECEIVE msg from KNX BUS**|
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 (in the STATUS section)| *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. |
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
- ### SEND msg to KNX BUS
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
- ### RECEIVE msg from KNX BUS
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.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;`;