node-red-contrib-knx-ultimate 1.3.45 → 1.3.48

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 CHANGED
@@ -6,6 +6,20 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ <p>
10
+ <b>Version 1.3.48</b> - August 2022<br/>
11
+ - Fixed old "new Buffer" call. It's deprecated and may not work with new node.js versions.<br/>
12
+ </p>
13
+ <p>
14
+ <b>Version 1.3.47</b> - August 2022<br/>
15
+ - Temporary hide KNX Secure TAB from the config window. It will appear again when KNX Secure will be ready.<br/>
16
+ </p>
17
+ <p>
18
+ <b>Version 1.3.46</b> - July 2022<br/>
19
+ - NEW: Added hostname DNS resolution in Config Gateway IP. Now you can put an IP or an hostname in the IP gateway's field.<br />
20
+ - NEW: Added Datapoint 1.024 Day/Night.<br />
21
+ - Now the procol in the config node gateways is only suggested. You can choose the protocol by yourself.<br />
22
+ </p>
9
23
  <p>
10
24
  <b>Version 1.3.45</b> - June 2022<br/>
11
25
  - NEW: pass msg.resetRBE = true to a device node, to reset both input and output RBE filter on that particular node.<br />
@@ -9,10 +9,10 @@ exports.formatAPDU = function(value) {
9
9
  var f = parseFloat(value);
10
10
  if (!isNaN(f) && isFinite(value)) {
11
11
  // numeric values (in native and string form) are truthy if NOT zero
12
- return new Buffer.from([Boolean(f) ? 1 : 0]);
12
+ return Buffer.from([Boolean(f) ? 1 : 0]);
13
13
  } else {
14
14
  // non-numeric value truthiness is Boolean true or the string 'true'.
15
- return new Buffer.from([(value == true || value == 'true') ? 1 : 0]);
15
+ return Buffer.from([(value == true || value == 'true') ? 1 : 0]);
16
16
  }
17
17
  }
18
18
 
@@ -192,6 +192,13 @@ exports.subtypes = {
192
192
  "enc" : { 0 : "only move Up/Down mode (shutter)", 1 : "move Up/Down + StepStop mode (blind)" }
193
193
  },
194
194
 
195
+ // 1.024 day/night
196
+ "024" : { "use" : "G",
197
+ "name" : "Day/Night",
198
+ "desc" : "day/night",
199
+ "enc" : { 0 : "Day", 1 : "Night" }
200
+ },
201
+
195
202
  // 1.100 cooling/heating ---FIXME---
196
203
  "100" : { "use" : "???",
197
204
  "name" : "Heat/Cool",
@@ -15,7 +15,7 @@ var timeRegexp = /(\d{1,2}):(\d{1,2}):(\d{1,2})/;
15
15
  // Always 8-bit aligned.
16
16
 
17
17
  exports.formatAPDU = function (value) {
18
- var apdu_data = new Buffer.alloc(3);
18
+ var apdu_data = Buffer.alloc(3);
19
19
  var dow, hour, minute, second;
20
20
  // day of week. NOTE: JS Sunday = 0
21
21
  switch (typeof value) {
@@ -12,7 +12,7 @@ exports.formatAPDU = function (value) {
12
12
 
13
13
  if (!value) knxLog.get().error("cannot write null value for DPT11")
14
14
  else {
15
- var apdu_data = new Buffer.alloc(3);
15
+ var apdu_data = Buffer.alloc(3);
16
16
 
17
17
  switch (typeof value) {
18
18
  case 'string':
@@ -13,7 +13,7 @@ const knxLog = require('./../KnxLog');
13
13
  exports.formatAPDU = function (value) {
14
14
  if (!value || typeof value != 'number')
15
15
  knxLog.get().error('DPT12: Must supply a number value');
16
- var apdu_data = new Buffer.alloc(4);
16
+ var apdu_data = Buffer.alloc(4);
17
17
  apdu_data.writeUIntBE(value, 0, 4);
18
18
  return apdu_data;
19
19
  }
@@ -19,7 +19,7 @@ exports.formatAPDU = function (value) {
19
19
  value = 0;
20
20
  }
21
21
 
22
- var apdu_data = new Buffer.alloc(4);
22
+ var apdu_data = Buffer.alloc(4);
23
23
  apdu_data.writeFloatBE(value, 0);
24
24
  return apdu_data;
25
25
  }
@@ -21,7 +21,7 @@ exports.formatAPDU = function (value) {
21
21
 
22
22
  }
23
23
 
24
- var buf = new Buffer.alloc(14);
24
+ var buf = Buffer.alloc(14);
25
25
  if (this.subtypeid === "001") buf.write(value, 'latin1');
26
26
  if (this.subtypeid === "000") buf.write(value, 'ascii');
27
27
  return buf;
@@ -27,7 +27,7 @@ const knxLog = require('./../KnxLog');
27
27
  exports.formatAPDU = function (value) {
28
28
  if (!value) knxLog.get().warn("DPT18: cannot write null value");
29
29
  else {
30
- var apdu_data = new Buffer.alloc(1);
30
+ var apdu_data = Buffer.alloc(1);
31
31
  if (typeof value == 'object' &&
32
32
  value.hasOwnProperty("save_recall") &&
33
33
  value.hasOwnProperty("scenenumber")) {
@@ -18,7 +18,7 @@ exports.formatAPDU = function (value) {
18
18
  else {
19
19
  // Sunday is 0 in Javascript, but 7 in KNX.
20
20
  var day = (value.getDay() === 0) ? 7 : value.getDay();
21
- var apdu_data = new Buffer.alloc(8);
21
+ var apdu_data = Buffer.alloc(8);
22
22
  apdu_data[0] = value.getFullYear() - 1900;
23
23
  apdu_data[1] = value.getMonth() + 1;
24
24
  apdu_data[2] = value.getDate();
@@ -19,7 +19,7 @@ exports.formatAPDU = function(value) {
19
19
  } else {
20
20
  knxLog.get().error("DPT2: Must supply an value {priority:<bool>, data:<bool>}");
21
21
  }
22
- return new Buffer.from([apdu_data]);
22
+ return Buffer.from([apdu_data]);
23
23
  }
24
24
  }
25
25
 
@@ -10,7 +10,7 @@ const knxLog = require('./../KnxLog');
10
10
  //
11
11
  // FIXME: help needed
12
12
  exports.formatAPDU = function (value) {
13
- var apdu_data = new Buffer.alloc(1);
13
+ var apdu_data = Buffer.alloc(1);
14
14
  apdu_data[0] = value;
15
15
  knxLog.get().debug('./knx/src/dpt20.js : input value = ' + value + ' apdu_data = ' + apdu_data);
16
16
  return apdu_data;
@@ -69,7 +69,7 @@ function GetFloat(_value0, _value1) {
69
69
  // 07/01/2021 Supergiovane
70
70
  // Send to BUS
71
71
  exports.formatAPDU = function (value) {
72
- var apdu_data = new Buffer.alloc(8); // 4 x 2 bytes
72
+ var apdu_data = Buffer.alloc(8); // 4 x 2 bytes
73
73
 
74
74
  if (typeof value == 'object' &&
75
75
  value.hasOwnProperty('Comfort') && value.Comfort >= -272 && value.Comfort <= 655.34 &&
@@ -19,7 +19,7 @@ function reverseString(str) {
19
19
 
20
20
  exports.formatAPDU = function (value) {
21
21
  // Send to BUS
22
- var apdu_data = new Buffer.alloc(2);
22
+ var apdu_data = Buffer.alloc(2);
23
23
  if (!value) {
24
24
  knxLog.get().error("DPT232: cannot write null value");
25
25
  } else {
@@ -81,7 +81,7 @@ function GetFloat(_value0, _value1) {
81
81
  // 08/09/2020 Supergiovane
82
82
  // Send to BUS
83
83
  exports.formatAPDU = function (value) {
84
- var apdu_data = new Buffer.alloc(6); // 3 x 2 bytes
84
+ var apdu_data = Buffer.alloc(6); // 3 x 2 bytes
85
85
 
86
86
  if (typeof value == 'object' &&
87
87
  value.hasOwnProperty('Comfort') && value.Comfort >= -273 && value.Comfort <= 670760 &&
@@ -21,7 +21,7 @@ exports.formatAPDU = function (value) {
21
21
  } else {
22
22
  knxLog.get().error("DPT232: Must supply an value {red:0-255, green:0-255, blue:0-255}");
23
23
  }
24
- return new Buffer.from([
24
+ return Buffer.from([
25
25
  Math.floor(value.red),
26
26
  Math.floor(value.green),
27
27
  Math.floor(value.blue)]);
@@ -35,7 +35,7 @@ exports.formatAPDU = function (value) {
35
35
  // MSB
36
36
  let MSB = "00000" + (value.convertorError === false ? "0" : "1") + (value.ballastFailure === false ? "0" : "1") + (value.lampFailure === false ? "0" : "1");
37
37
 
38
- var bufferTotal = new Buffer.alloc(2)
38
+ var bufferTotal = Buffer.alloc(2)
39
39
  bufferTotal[0] = parseInt(MSB, 2);
40
40
  bufferTotal[1] = parseInt(LSB, 2);
41
41
  return bufferTotal;
@@ -10,7 +10,7 @@ const knxLog = require('./../KnxLog');
10
10
  //
11
11
  // DPT5 is the only (AFAIK) DPT with scalar datatypes (5.001 and 5.003)
12
12
  exports.formatAPDU = function(value) {
13
- var apdu_data = new Buffer.alloc(1);
13
+ var apdu_data = Buffer.alloc(1);
14
14
  apdu_data[0] = value;
15
15
  knxLog.get().trace('dpt238.js : input value = ' + value + ' apdu_data = ' + apdu_data);
16
16
  return apdu_data;
@@ -34,7 +34,7 @@ exports.formatAPDU = function (value) {
34
34
  }
35
35
  var bitVal= parseInt("0000" + value.mR + value.mG + value.mB + value.mW, 2) ;
36
36
 
37
- return new Buffer.from([
37
+ return Buffer.from([
38
38
  Math.floor(value.red),
39
39
  Math.floor(value.green),
40
40
  Math.floor(value.blue),
@@ -11,7 +11,7 @@ const knxLog = require('./../KnxLog');
11
11
  exports.formatAPDU = function(value) {
12
12
  if (!value) knxLog.get().warn("DPT3: cannot write null value");
13
13
  else {
14
- var apdu_data = new Buffer.alloc(1);
14
+ var apdu_data = Buffer.alloc(1);
15
15
  if (typeof value == 'object' &&
16
16
  value.hasOwnProperty('decr_incr') &&
17
17
  value.hasOwnProperty('data')) {
@@ -15,7 +15,7 @@ exports.formatAPDU = function (value) {
15
15
  if (typeof value == 'string') {
16
16
  var apdu_data = value.charCodeAt(0);
17
17
  if (apdu_data > 255) knxLog.get().warn("DPT4: must supply an ASCII character");
18
- return new Buffer.from([apdu_data]);
18
+ return Buffer.from([apdu_data]);
19
19
  }
20
20
  else knxLog.get().warn("DPT4: Must supply a character or string");
21
21
  }
@@ -12,7 +12,7 @@ const util = require('util');
12
12
  const knxLog = require('./../KnxLog');
13
13
 
14
14
  exports.formatAPDU = function (value) {
15
- var apdu_data = new Buffer.alloc(2);
15
+ var apdu_data = Buffer.alloc(2);
16
16
  if (!isFinite(value)) {
17
17
  knxLog.get().warn("DPT7: cannot write non-numeric or undefined value");
18
18
  } else {
@@ -34,7 +34,7 @@ function frexp(value) {
34
34
  }
35
35
 
36
36
  exports.formatAPDU = function (value) {
37
- var apdu_data = new Buffer.alloc(2);
37
+ var apdu_data = Buffer.alloc(2);
38
38
  if (!isFinite(value)) {
39
39
  knxLog.get().warn("DPT9: cannot write non-numeric or undefined value");
40
40
  } else {
@@ -22,7 +22,7 @@ exports.formatAPDU = function (value) {
22
22
  if (typeof value != 'string' || value.length < 10) knxLog.get().warn("Must supply an HEX string value of 10 bytes. Please don't add '$' nor '0x' Example 12340000000000000000")
23
23
  else {
24
24
  value = value.toUpperCase().replace(/\$/g, "").replace(/0X/g, "").replace(/ /g, ""); // Remove the $ and 0x
25
- var apdu_data = new Buffer.alloc(10);
25
+ var apdu_data = Buffer.alloc(10);
26
26
  var i = 0;
27
27
  var iSlice = 2;
28
28
  for (let index = 0; index < value.length; index += iSlice) {
@@ -55,7 +55,7 @@ dpts.populateAPDU = function (value, apdu, dptid) {
55
55
  var dpt = dpts.resolve(dptid || 'DPT1');
56
56
  var nbytes = Math.ceil(dpt.basetype.bitlength / 8);
57
57
  //apdu.data = new Buffer(nbytes); // 14/09/2020 Supregiovane: Deprecated. Replaced with below.
58
- apdu.data = new Buffer.alloc(nbytes);
58
+ apdu.data = Buffer.alloc(nbytes);
59
59
  apdu.bitlength = dpt.basetype && dpt.basetype.bitlength || 1;
60
60
  var tgtvalue = value;
61
61
  // get the raw APDU data for the given JS value
@@ -15,7 +15,7 @@ class KNXSecureSessionRequest extends KNXPacket.KNXPacket {
15
15
  super(KNXConstants.KNX_CONSTANTS.SECURE_SESSION_REQUEST, hpaiData.length + 32);
16
16
  this.cri = cri;
17
17
  this.hpaiData = hpaiData;
18
- this.diffieHellmanClientPublicValue = new Buffer.alloc(32);
18
+ this.diffieHellmanClientPublicValue = Buffer.alloc(32);
19
19
 
20
20
  // Send the DH curve as well
21
21
  // 02/01/2022 SONO ARRIVATO QUI get the authentication password from the first tunnel of the interface
package/README.md CHANGED
@@ -49,7 +49,7 @@ msg.payload = {red:255, green:200, blue:30} // Put some colors in our life
49
49
  ## VOLUNTEER NEEDED FOR KNX SECURE
50
50
 
51
51
  **************************************************
52
- KNX-Secure is under development and **should** be ready by mid 2022.<br/>
52
+ KNX-Secure is under development.<br/>
53
53
  I need volunteer helping in development of KNX Secure.<br/>
54
54
  High knowledge of cryptography and KNX is needed.
55
55
  **************************************************
@@ -55,7 +55,10 @@
55
55
  }
56
56
 
57
57
  // Auto set protocol based on IP
58
+
58
59
  $("#node-config-input-host").on('focusout', function () {
60
+ let suggestedProtocol = "";
61
+ // 11/07/2022 only if the previous value was undefined, automatic set the protocol
59
62
  if ($("#node-config-input-host").val().startsWith("224.") ||
60
63
  $("#node-config-input-host").val().startsWith("225.") ||
61
64
  $("#node-config-input-host").val().startsWith("232.") ||
@@ -63,10 +66,24 @@
63
66
  $("#node-config-input-host").val().startsWith("234.") ||
64
67
  $("#node-config-input-host").val().startsWith("235.") ||
65
68
  $("#node-config-input-host").val().startsWith("239.")) {
66
- $("#node-config-input-hostProtocol").val("Multicast");
69
+ suggestedProtocol = "Multicast.";
67
70
  } else {
68
- $("#node-config-input-hostProtocol").val("TunnelUDP");
71
+ suggestedProtocol = "TunnelUDP or TunnelTCP (if the interface is KNX-Secure).";
69
72
  }
73
+ var myNotification = RED.notify("The suggested protocol based on your input, is " + suggestedProtocol,
74
+ {
75
+ modal: false,
76
+ fixed: false,
77
+ type: 'info',
78
+ buttons: [
79
+ {
80
+ text: "Ok",
81
+ click: function (e) {
82
+ myNotification.close();
83
+ }
84
+ }]
85
+ })
86
+
70
87
  });
71
88
 
72
89
  $.getJSON('knxUltimateETHInterfaces', (data) => {
@@ -216,11 +233,11 @@
216
233
  </div>
217
234
 
218
235
  <div class="form-row">
219
- <label for="node-config-input-host" style="width: 50px">
236
+ <label for="node-config-input-host" style="width: 110px">
220
237
  <i class="fa fa-server"></i>
221
238
  <span data-i18n="knxUltimate-config.properties.host"></span>
222
239
  </label>
223
- <input type="text" id="node-config-input-host" style="width: 128px"><data-i18n="[Title]knxUltimate-config.properties.host_info" style="margin-left:5px;">
240
+ <input type="text" id="node-config-input-host" style="width: 120px"><data-i18n="[Title]knxUltimate-config.properties.host_info" style="margin-left:5px;">
224
241
 
225
242
  <label for="node-config-input-port" style="margin-left:5px; width:35px;">
226
243
  <span data-i18n="knxUltimate-config.properties.port"></span>
@@ -236,7 +253,7 @@
236
253
 
237
254
  <!-- KNX Secure / Unsecure tabbed selector-->
238
255
  <!-- <div id="tabsMain" style="display: none;"> -->
239
- <div id="tabsMain">
256
+ <!-- <div id="tabsMain">
240
257
  <ul>
241
258
  <li><a href="#unsecureKNX"><i class="fa fa-circle-o"></i>&nbsp;<span data-i18n="knxUltimate-config.properties.unsecureKNX"></span></a></li>
242
259
  <li><a href="#SecureKNX"><i class="fa fa-shield"></i>&nbsp;<span data-i18n="knxUltimate-config.properties.secureKNX"></span></a></li>
@@ -247,7 +264,7 @@
247
264
  </div>
248
265
  <div id="SecureKNX" style="margin: 5px 5px 5px 5px;" >
249
266
  <p>
250
- <p>WARNING: FUNCTION NOT ENABLED. KNX SECURE SHOULD BE READY ON MID 2022</p>
267
+ <p>WARNING: KNX SECURE IS STILL UNDER DEVELOPMENT</p>
251
268
  <div class="form-row">
252
269
  <i class="fa fa-youtube"></i>
253
270
  <a href="https://youtu.be/OpR7ZQTlMRU" target="_blank">
@@ -264,7 +281,7 @@
264
281
  </div>
265
282
  </p>
266
283
  </div>
267
- </div>
284
+ </div> -->
268
285
 
269
286
  <div class="form-tips" style="margin-top:11px">
270
287
  <span data-i18n="knxUltimate-config.advanced.tiphost"></span>
@@ -164,7 +164,9 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
164
164
  node.hostProtocol = "TunnelUDP"; // 20/03/2022 Default
165
165
  node.knxConnection = null; // 20/03/2022 Default
166
166
  // 15/12/2021
167
- node.adaptProtocolBasedOnIP = () => {
167
+
168
+ // 05/12/2021 Set the protocol (this is undefined if coming from ild versions
169
+ if (config.hostProtocol === undefined) {
168
170
  // Auto set protocol based on IP
169
171
  if (node.host.startsWith("224.") ||
170
172
  node.host.startsWith("225.") ||
@@ -175,14 +177,10 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
175
177
  node.host.startsWith("239.")) {
176
178
  node.hostProtocol = "Multicast";
177
179
  } else {
180
+ // 11/07/2022
178
181
  node.hostProtocol = "TunnelUDP";
179
182
  }
180
183
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("IP Protocol auto adapded to " + node.hostProtocol + ", based on IP " + node.host);
181
- }
182
-
183
- // 05/12/2021 Set the protocol (this is undefined if coming from ild versions
184
- if (config.hostProtocol === undefined) {
185
- node.adaptProtocolBasedOnIP();
186
184
  } else {
187
185
  node.hostProtocol = config.hostProtocol;
188
186
  }
@@ -609,9 +607,7 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
609
607
  if (typeof _iPort !== "undefined" && _iPort !== 0) node.port = _iPort;
610
608
  if (typeof _sPhysicalAddress !== "undefined" && _sPhysicalAddress !== "") node.physAddr = _sPhysicalAddress;
611
609
  if (typeof _sBindToEthernetInterface !== "undefined") node.KNXEthInterface = _sBindToEthernetInterface;
612
- if (_Protocol === undefined) {
613
- node.adaptProtocolBasedOnIP();
614
- } else { node.hostProtocol = _Protocol; }
610
+ if (typeof _Protocol !== "undefined") node.hostProtocol = _Protocol;
615
611
 
616
612
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Node's main config setting has been changed. New config: IP " + node.host + " Port " + node.port + " PhysicalAddress " + node.physAddr + " BindToInterface " + node.KNXEthInterface);
617
613
 
@@ -682,6 +678,35 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
682
678
  jKNXSecureKeyring: node.jKNXSecureKeyring,
683
679
  localIPAddress: "" // Riempito da KNXEngine
684
680
  };
681
+ // 11/07/2022 Test if the IP is a valid one or is a DNS Name
682
+ if (node.host.toUpperCase() !== "EMULATE") {
683
+ switch (net.isIP(node.host)) {
684
+ case 0:
685
+ // Invalid IP, resolve the DNS name.
686
+ let dns = require("dns-sync");
687
+ let resolvedIP = null;
688
+ try {
689
+ resolvedIP = dns.resolve(node.host);
690
+ } catch (error) {
691
+ throw new Error("net.isIP: INVALID IP OR DNS NAME. Error checking the Gateway Host in Config node. " + error.message);
692
+ }
693
+ if (resolvedIP === null || net.isIP(resolvedIP) === 0) {
694
+ // Error in resolving DNS Name
695
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: net.isIP: INVALID IP OR DNS NAME. Check the Gateway Host in Config node " + node.name + " " + node.host);
696
+ throw new Error("net.isIP: INVALID IP OR DNS NAME. Check the Gateway Host in Config node.");
697
+ }
698
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("knxUltimate-config: net.isIP: The gateway is not specified as IP. The DNS resolver pointed me to the IP " + node.host + ", in Config node " + node.name);
699
+ node.knxConnectionProperties.ipAddr = resolvedIP;
700
+ case 4:
701
+ // It's an IPv4
702
+ break;
703
+ case 6:
704
+ // It's an IPv6
705
+ break;
706
+ default:
707
+ break;
708
+ }
709
+ }
685
710
 
686
711
  if (node.KNXEthInterface !== "Auto") {
687
712
  var sIfaceName = "";
@@ -706,7 +731,13 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
706
731
 
707
732
  node.initKNXConnection = () => {
708
733
 
709
- node.setKnxConnectionProperties(); //28/12/2021 Added
734
+ try {
735
+ node.setKnxConnectionProperties(); //28/12/2021 Added
736
+ } catch (error) {
737
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: setKnxConnectionProperties: " + error.message);
738
+ if (node.linkStatus !== "disconnected") node.Disconnect();
739
+ return;
740
+ }
710
741
 
711
742
  // 12/08/2021 Avoid start connection if there are no knx-ultimate nodes linked to this gateway
712
743
  // At start, initKNXConnection is already called only if the gateway has clients, but in the successive calls from the error handler, this check is not done.
@@ -742,22 +773,6 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
742
773
 
743
774
 
744
775
  try {
745
- // 01/12/2020 Test if the IP is a valid one
746
- switch (net.isIP(node.host)) {
747
- case 0:
748
- // Invalid IP
749
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: net.isIP: INVALID IP. Check the IP in Config node " + node.name);
750
- throw ("INVALID IP. Check the IP in Config node.");
751
- case 4:
752
- // It's an IPv4
753
- break;
754
- case 6:
755
- // It's an IPv6
756
- break;
757
- default:
758
- break;
759
- }
760
-
761
776
  // Unsetting handlers if node.knxConnection was existing
762
777
  try {
763
778
  if (node.knxConnection !== null && node.knxConnection !== undefined) {
@@ -839,10 +854,10 @@ return msg;`, "helplink": "https://github.com/Supergiovane/node-red-contrib-knx-
839
854
  }
840
855
 
841
856
  } catch (error) {
842
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: Error in instantiating knxConnection " + error.message + ". Node " + node.name);
857
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: Error in instantiating knxConnection " + error.message + " Node " + node.name);
843
858
  node.linkStatus = "disconnected";
844
859
  // 21/03/2022 fixed possible memory leak. Previously was setTimeout without "let t = ".
845
- let t = setTimeout(() => node.setAllClientsStatus("Error in instantiating knxConnection " + error, "red", "Error"), 200);
860
+ let t = setTimeout(() => node.setAllClientsStatus("Error in instantiating knxConnection " + error.message, "red", "Error"), 200);
846
861
  }
847
862
 
848
863
  };
@@ -3,7 +3,7 @@
3
3
  "properties": {
4
4
  "helplink" : "&nbsp<i class=\"fa fa-question-circle\"></i>&nbsp<a target=\"_blank\" href=\"https://github.com/Supergiovane/node-red-contrib-knx-ultimate/wiki/de-1.-Gateway-configuration\"><u>Hilfe Konfiguration</u></a>",
5
5
  "title": "KNX/IP Gateway Konfiguration",
6
- "host": "IP",
6
+ "host": "IP/Hostname",
7
7
  "host_info": "Als Standard IP wird die Multicast Addresse von KNX/IP verwendet (224.0.23.12)",
8
8
  "port": "Port",
9
9
  "port_info": "Als Standard Port wird der Port von KNX/IP verwendet (3671)",
@@ -3,7 +3,7 @@
3
3
  "properties": {
4
4
  "helplink" : "&nbsp<i class=\"fa fa-question-circle\"></i>&nbsp<a target=\"_blank\" href=\"https://github.com/Supergiovane/node-red-contrib-knx-ultimate/wiki/1.-Gateway-configuration\"><u>Help for configuration</u></a>",
5
5
  "title": "KNX/IP Gateway Configuration",
6
- "host": "IP",
6
+ "host": "IP/Hostname",
7
7
  "host_info": "Default setting is the Multicast address of KNX/IP (224.0.23.12)",
8
8
  "port": "Port",
9
9
  "port_info": "Default Setting is the Port of KNX/IP (3671)",
@@ -3,7 +3,7 @@
3
3
  "properties": {
4
4
  "helplink" : "&nbsp<i class=\"fa fa-question-circle\"></i>&nbsp<a target=\"_blank\" href=\"https://github.com/Supergiovane/node-red-contrib-knx-ultimate/wiki/it-1.-Gateway-configuration\"><u>Aiuto per configurazione</u></a>",
5
5
  "title": "Interfaccia KNX/IP",
6
- "host": "IP",
6
+ "host": "IP/Hostname",
7
7
  "host_info": "Di default è impostato l'indirizzo multicast del router KNX/IP (224.0.23.12)",
8
8
  "port": "Porta",
9
9
  "port_info": "Di default è impostata la porta de router KNX/IP (3671)",
@@ -3,7 +3,7 @@
3
3
  "properties": {
4
4
  "helplink" : "&nbsp<i class=\"fa fa-question-circle\"></i>&nbsp<a target=\"_blank\" href=\"https://github.com/Supergiovane/node-red-contrib-knx-ultimate/wiki/cn-1.-Gateway-configuration\"><u>配置帮助文档</u></a>",
5
5
  "title": "KNX/IP 网关配置",
6
- "host": "网关 IP",
6
+ "host": "网关 IP/Hostname",
7
7
  "host_info": "默认设置为 KNX/IP 的组播地址 (224.0.23.12)",
8
8
  "port": "端口号",
9
9
  "port_info": "默认设置为 KNX/IP (3671)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-knx-ultimate",
3
- "version": "1.3.45",
3
+ "version": "1.3.48",
4
4
  "description": "Control your KNX intallation via Node-Red! Single Node KNX IN/OUT with optional ETS group address importer. Easy to use and highly configurable.",
5
5
  "dependencies": {
6
6
  "mkdirp": "1.0.4",
@@ -9,9 +9,10 @@
9
9
  "binary-protocol": "0.0.0",
10
10
  "log-driver": "1.2.7",
11
11
  "lodash": "4.17.21",
12
- "path": ">=0.12.7",
13
- "crypto-js": ">=4.1.1",
14
- "xml2js": ">=0.4.23"
12
+ "path": "0.12.7",
13
+ "crypto-js": "4.1.1",
14
+ "xml2js": "0.4.23",
15
+ "dns-sync":"0.2.1"
15
16
  },
16
17
  "node-red": {
17
18
  "nodes": {