node-red-contrib-knx-ultimate 3.2.9 → 3.2.11

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 (38) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/KNXUltimateDebugLog.txt +49 -0
  3. package/nodes/commonFunctions.js +18 -1
  4. package/nodes/hue-config.html +10 -0
  5. package/nodes/hue-config.js +3 -4
  6. package/nodes/knxUltimate-config copy.html +10 -0
  7. package/nodes/knxUltimate-config.html +28 -13
  8. package/nodes/knxUltimate-config.js +55 -63
  9. package/nodes/knxUltimate.html +15 -0
  10. package/nodes/knxUltimate.js +22 -28
  11. package/nodes/knxUltimateAlerter.html +10 -0
  12. package/nodes/knxUltimateAutoResponder.html +15 -0
  13. package/nodes/knxUltimateAutoResponder.js +4 -9
  14. package/nodes/knxUltimateGarageDoorBarrierOpener.html +15 -0
  15. package/nodes/knxUltimateGlobalContext.html +15 -0
  16. package/nodes/knxUltimateHATranslator.html +10 -0
  17. package/nodes/knxUltimateHueBattery.html +15 -0
  18. package/nodes/knxUltimateHueButton.html +15 -0
  19. package/nodes/knxUltimateHueContactSensor.html +15 -0
  20. package/nodes/knxUltimateHueLight.html +19 -0
  21. package/nodes/knxUltimateHueLightSensor.html +15 -0
  22. package/nodes/knxUltimateHueMotion.html +15 -0
  23. package/nodes/knxUltimateHueScene.html +15 -0
  24. package/nodes/knxUltimateHueScene.js +4 -11
  25. package/nodes/knxUltimateHueTapDial.html +15 -0
  26. package/nodes/knxUltimateHueTemperatureSensor.html +15 -0
  27. package/nodes/knxUltimateHueZigbeeConnectivity.html +15 -0
  28. package/nodes/knxUltimateHuedevice_software_update.html +15 -0
  29. package/nodes/knxUltimateLoadControl.html +10 -0
  30. package/nodes/knxUltimateLoadControl.js +4 -8
  31. package/nodes/knxUltimateLogger.html +10 -0
  32. package/nodes/knxUltimateSceneController.html +10 -0
  33. package/nodes/knxUltimateSceneController.js +5 -8
  34. package/nodes/knxUltimateViewer.html +15 -0
  35. package/nodes/knxUltimateWatchDog.html +10 -0
  36. package/nodes/utils/hueEngine.js +11 -22
  37. package/nodes/utils/sysLogger.js +101 -18
  38. package/package.json +1 -1
@@ -10,7 +10,7 @@ const _ = require("lodash");
10
10
  const knx = require("knxultimate");
11
11
  //const dptlib = require('knxultimate').dptlib;
12
12
  const dptlib = require('knxultimate').dptlib;
13
-
13
+ const loggerClass = require('./utils/sysLogger')
14
14
  // const { Server } = require('http')
15
15
  const payloadRounder = require("./utils/payloadManipulation");
16
16
 
@@ -53,14 +53,6 @@ const toConcattedSubtypes = (acc, baseType) => {
53
53
  };
54
54
  // ####################
55
55
 
56
- // 10/09/2024 Setup the color logger
57
- loggerSetup = (options) => {
58
- let clog = require("node-color-log").createNamedLogger(options.setPrefix);
59
- clog.setLevel(options.loglevel);
60
- clog.setDate(() => (new Date()).toLocaleString());
61
- return clog;
62
- }
63
-
64
56
 
65
57
  module.exports = (RED) => {
66
58
  function knxUltimateConfigNode(config) {
@@ -85,7 +77,7 @@ module.exports = (RED) => {
85
77
  if (node.loglevel === 'silent') node.loglevel = 'disable'; // Backward compatibility
86
78
  node.sysLogger = null; // 20/03/2022 Default
87
79
  try {
88
- node.sysLogger = loggerSetup({ loglevel: node.loglevel, setPrefix: "knxUltimate-config.js" });
80
+ node.sysLogger = new loggerClass({ loglevel: node.loglevel, setPrefix: node.type + " <" + (node.name || node.id || '') + ">" });
89
81
  } catch (error) { console.log(error.stack) }
90
82
  // 12/11/2021 Connect at start delay
91
83
  node.autoReconnect = true; // 20/03/2022 Default
@@ -169,7 +161,7 @@ module.exports = (RED) => {
169
161
  }
170
162
  })();
171
163
  } catch (error) {
172
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: KNX Secure: error parsing the keyring XML: " + error.message);
164
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNX Secure: error parsing the keyring XML: " + error.message);
173
165
  node.jKNXSecureKeyring = null;
174
166
  node.knxSecureSelected = false;
175
167
  const t = setTimeout(() => node.setAllClientsStatus("Error", "red", "KNX Secure " + error.message), 2000); // 21/03/2022 fixed possible memory leak. Previously was setTimeout without "let t = ".
@@ -192,12 +184,12 @@ module.exports = (RED) => {
192
184
  }
193
185
  }
194
186
  if (!setupDirectory(node.userDir)) {
195
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: Unable to set up MAIN directory: " + node.userDir);
187
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("Unable to set up MAIN directory: " + node.userDir);
196
188
  }
197
189
  if (!setupDirectory(path.join(node.userDir, "knxpersistvalues"))) {
198
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: Unable to set up cache directory: " + path.join(node.userDir, "knxpersistvalues"));
190
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("Unable to set up cache directory: " + path.join(node.userDir, "knxpersistvalues"));
199
191
  } else {
200
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: payload cache set to " + path.join(node.userDir, "knxpersistvalues"));
192
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("payload cache set to " + path.join(node.userDir, "knxpersistvalues"));
201
193
  }
202
194
 
203
195
  function saveExposedGAs() {
@@ -205,10 +197,10 @@ module.exports = (RED) => {
205
197
  try {
206
198
  if (node.exposedGAs.length > 0) {
207
199
  fs.writeFileSync(sFile, JSON.stringify(node.exposedGAs));
208
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: wrote peristent values to the file " + sFile);
200
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("wrote peristent values to the file " + sFile);
209
201
  }
210
202
  } catch (err) {
211
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: unable to write peristent values to the file " + sFile + " " + err.message);
203
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("unable to write peristent values to the file " + sFile + " " + err.message);
212
204
  }
213
205
  }
214
206
  function loadExposedGAs() {
@@ -217,7 +209,7 @@ module.exports = (RED) => {
217
209
  node.exposedGAs = JSON.parse(fs.readFileSync(sFile, "utf8"));
218
210
  } catch (err) {
219
211
  node.exposedGAs = [];
220
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: unable to read peristent file " + sFile + " " + err.message);
212
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("unable to read peristent file " + sFile + " " + err.message);
221
213
  }
222
214
  }
223
215
 
@@ -285,9 +277,9 @@ module.exports = (RED) => {
285
277
  if (node.linkStatus !== "connected") return; // 29/08/2019 If not connected, exit
286
278
  loadExposedGAs(); // 04/04/2021 load the current values of GA payload
287
279
  try {
288
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: Loaded saved GA values", node.exposedGAs.length);
280
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Loaded saved GA values", node.exposedGAs.length);
289
281
  } catch (error) { }
290
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: Do DoInitialReadFromKNXBusOrFile");
282
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Do DoInitialReadFromKNXBusOrFile");
291
283
  try {
292
284
  const readHistory = [];
293
285
 
@@ -343,7 +335,7 @@ module.exports = (RED) => {
343
335
  dpt: _oClient.dpt,
344
336
  devicename: _oClient.devicename || "",
345
337
  });
346
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: DoInitialReadFromKNXBusOrFile: Datapoint may have been changed, remove the value from persist file of " + _oClient.topic + " Devicename " + _oClient.name + " Currend DPT " + _oClient.dpt + " Node.id " + _oClient.id);
338
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("DoInitialReadFromKNXBusOrFile: Datapoint may have been changed, remove the value from persist file of " + _oClient.topic + " Devicename " + _oClient.name + " Currend DPT " + _oClient.dpt + " Node.id " + _oClient.id);
347
339
  } else {
348
340
  if (_oClient.notifyresponse) _oClient.handleSend(msg);
349
341
  }
@@ -351,7 +343,7 @@ module.exports = (RED) => {
351
343
  if (_oClient.initialread === 3) {
352
344
  // Not found, issue a READ to the bus
353
345
  if (!readHistory.includes(_oClient.topic)) {
354
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("KNXUltimate-config: DoInitialReadFromKNXBusOrFile 3: sent read request to GA " + _oClient.topic);
346
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("DoInitialReadFromKNXBusOrFile 3: sent read request to GA " + _oClient.topic);
355
347
  _oClient.setNodeStatus({
356
348
  fill: "grey",
357
349
  shape: "dot",
@@ -403,7 +395,7 @@ module.exports = (RED) => {
403
395
  nodecallerid: element.id,
404
396
  });
405
397
  readHistory.push(element.ga);
406
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("KNXUltimate-config: DoInitialReadFromKNXBusOrFile from Universal Node: sent read request to GA " + element.ga);
398
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("DoInitialReadFromKNXBusOrFile from Universal Node: sent read request to GA " + element.ga);
407
399
  }
408
400
  }
409
401
  } else {
@@ -416,7 +408,7 @@ module.exports = (RED) => {
416
408
  nodecallerid: _oClient.id,
417
409
  });
418
410
  readHistory.push(_oClient.topic);
419
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("KNXUltimate-config: DoInitialReadFromKNXBusOrFile: sent read request to GA " + _oClient.topic);
411
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("DoInitialReadFromKNXBusOrFile: sent read request to GA " + _oClient.topic);
420
412
  }
421
413
  }
422
414
  });
@@ -548,12 +540,12 @@ module.exports = (RED) => {
548
540
  if (resolvedIP === null || net.isIP(resolvedIP) === 0) {
549
541
  // Error in resolving DNS Name
550
542
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
551
- "knxUltimate-config: net.isIP: INVALID IP OR DNS NAME. Check the Gateway Host in Config node " + node.name + " " + node.host,
543
+ "net.isIP: INVALID IP OR DNS NAME. Check the Gateway Host in Config node " + node.name + " " + node.host,
552
544
  );
553
545
  throw new Error("net.isIP: INVALID IP OR DNS NAME. Check the Gateway Host in Config node.");
554
546
  }
555
547
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info(
556
- "knxUltimate-config: net.isIP: The gateway is not specified as IP. The DNS resolver pointed me to the IP " +
548
+ "net.isIP: The gateway is not specified as IP. The DNS resolver pointed me to the IP " +
557
549
  node.host +
558
550
  ", in Config node " +
559
551
  node.name,
@@ -573,11 +565,11 @@ module.exports = (RED) => {
573
565
  let sIfaceName = "";
574
566
  if (node.KNXEthInterface === "Manual") {
575
567
  sIfaceName = node.KNXEthInterfaceManuallyInput;
576
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: Bind KNX Bus to interface : " + sIfaceName + " (Interface's name entered by hand). Node " + node.name);
568
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Bind KNX Bus to interface : " + sIfaceName + " (Interface's name entered by hand). Node " + node.name);
577
569
  } else {
578
570
  sIfaceName = node.KNXEthInterface;
579
571
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info(
580
- "KNXUltimate-config: Bind KNX Bus to interface : " + sIfaceName + " (Interface's name selected from dropdown list). Node " + node.name,
572
+ "Bind KNX Bus to interface : " + sIfaceName + " (Interface's name selected from dropdown list). Node " + node.name,
581
573
  );
582
574
  }
583
575
  node.knxConnectionProperties.interface = sIfaceName;
@@ -586,7 +578,7 @@ module.exports = (RED) => {
586
578
  try {
587
579
  delete node.knxConnectionProperties.interface;
588
580
  } catch (error) { }
589
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: Bind KNX Bus to interface (Auto). Node " + node.name);
581
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Bind KNX Bus to interface (Auto). Node " + node.name);
590
582
  }
591
583
  };
592
584
  // node.setKnxConnectionProperties(); 28/12/2021 Commented
@@ -595,7 +587,7 @@ module.exports = (RED) => {
595
587
  try {
596
588
  node.setKnxConnectionProperties(); // 28/12/2021 Added
597
589
  } catch (error) {
598
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: setKnxConnectionProperties: " + error.message);
590
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("setKnxConnectionProperties: " + error.message);
599
591
  if (node.linkStatus !== "disconnected") await node.Disconnect();
600
592
  return;
601
593
  }
@@ -604,7 +596,7 @@ module.exports = (RED) => {
604
596
  // 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.
605
597
  if (node.nodeClients.length === 0) {
606
598
  try {
607
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("knxUltimate-config: No nodes linked to this gateway " + node.name);
599
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("No nodes linked to this gateway " + node.name);
608
600
  try {
609
601
  if (node.linkStatus !== "disconnected") await node.Disconnect();
610
602
  } catch (error) { }
@@ -624,7 +616,7 @@ module.exports = (RED) => {
624
616
  try {
625
617
  if (node.knxConnection !== null && node.knxConnection !== undefined) {
626
618
  await node.knxConnection.Disconnect();
627
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("knxUltimate-config: removing old handlers. Node " + node.name);
619
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("removing old handlers. Node " + node.name);
628
620
  node.knxConnection.removeAllListeners();
629
621
  }
630
622
  } catch (error) {
@@ -639,20 +631,20 @@ module.exports = (RED) => {
639
631
  node.knxConnection.on(knx.KNXClientEvents.indication, handleBusEvents);
640
632
  node.knxConnection.on(knx.KNXClientEvents.error, (err) => {
641
633
  try {
642
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: received KNXClientEvents.error: " + (err.message === undefined ? err : err.message));
634
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("received KNXClientEvents.error: " + (err.message === undefined ? err : err.message));
643
635
  } catch (error) {
644
636
  }
645
637
  // 31/03/2022 Don't care about some errors
646
638
  if (err.message !== undefined && (err.message === "ROUTING_LOST_MESSAGE" || err.message === "ROUTING_BUSY")) {
647
639
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
648
- "knxUltimate-config: KNXClientEvents.error: " +
640
+ "KNXClientEvents.error: " +
649
641
  (err.message === undefined ? err : err.message) +
650
642
  " consider DECREASING the transmission speed, by increasing the telegram's DELAY in the gateway configuration node!",
651
643
  );
652
644
  return;
653
645
  }
654
646
  node.Disconnect("Disconnected by error " + (err.message === undefined ? err : err.message), "red");
655
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: Disconnected by: " + (err.message === undefined ? err : err.message));
647
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("Disconnected by: " + (err.message === undefined ? err : err.message));
656
648
  });
657
649
  // Call discoverCB when a knx gateway has been discovered.
658
650
  // node.knxConnection.on(knx.KNXClientEvents.discover, info => {
@@ -662,12 +654,12 @@ module.exports = (RED) => {
662
654
  node.knxConnection.on(knx.KNXClientEvents.disconnected, (info) => {
663
655
  if (node.linkStatus !== "disconnected") {
664
656
  node.linkStatus = "disconnected";
665
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.warn("knxUltimate-config: Disconnected event %s", info);
657
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.warn("Disconnected event %s", info);
666
658
  node.Disconnect("Disconnected by event: " + info || "", "red"); // 11/03/2022
667
659
  }
668
660
  });
669
661
  node.knxConnection.on(knx.KNXClientEvents.close, (info) => {
670
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("knxUltimate-config: KNXClient socket closed.");
662
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("KNXClient socket closed.");
671
663
  node.linkStatus = "disconnected";
672
664
  });
673
665
  node.knxConnection.on(knx.KNXClientEvents.connected, (info) => {
@@ -680,35 +672,35 @@ module.exports = (RED) => {
680
672
  try {
681
673
  DoInitialReadFromKNXBusOrFile();
682
674
  } catch (error) {
683
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: DoInitialReadFromKNXBusOrFile " + error.stack);
675
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("DoInitialReadFromKNXBusOrFile " + error.stack);
684
676
  }
685
677
  }, 1000); // 17/02/2020 Do initial read of all nodes requesting initial read
686
678
  const t = setTimeout(() => {
687
679
  // 21/03/2022 fixed possible memory leak. Previously was setTimeout without "let t = ".
688
680
  node.setAllClientsStatus("Connected.", "green", "On duty.");
689
681
  }, 500);
690
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("knxUltimate-config: Connected to %o", info);
682
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Connected to %o", info);
691
683
  });
692
684
  node.knxConnection.on(knx.KNXClientEvents.connecting, (info) => {
693
685
  node.linkStatus = "connecting";
694
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("knxUltimate-config: Connecting to" + info.ipAddr || "");
686
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("Connecting to" + info.ipAddr || "");
695
687
  node.setAllClientsStatus(info.ipAddr || "", "grey", "Connecting...");
696
688
  });
697
689
  // ######################################
698
690
 
699
691
  node.setAllClientsStatus("Connecting... ", "grey", "");
700
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("knxUltimate-config: perform websocket connection on " + node.name);
692
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("perform websocket connection on " + node.name);
701
693
  try {
702
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: Connecting... " + node.name);
694
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Connecting... " + node.name);
703
695
  node.knxConnection.Connect();
704
696
  } catch (error) {
705
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: node.knxConnection.Connect() " + node.name + ": " + error.message);
697
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("node.knxConnection.Connect() " + node.name + ": " + error.message);
706
698
  node.linkStatus = "disconnected";
707
699
  throw error;
708
700
  }
709
701
  } catch (error) {
710
702
  if (node.sysLogger !== undefined && node.sysLogger !== null) {
711
- node.sysLogger.error("KNXUltimate-config: Error in instantiating knxConnection " + error.stack + " Node " + node.name);
703
+ node.sysLogger.error("Error in instantiating knxConnection " + error.stack + " Node " + node.name);
712
704
  node.error("KNXUltimate-config: Error in instantiating knxConnection " + error.message + " Node " + node.name);
713
705
  }
714
706
  node.linkStatus = "disconnected";
@@ -745,7 +737,7 @@ module.exports = (RED) => {
745
737
  const isRepeated = _datagram.cEMIMessage.control.repeat !== 1;
746
738
  // 06/06/2021 Supergiovane: check if i can handle the telegrams with "Repeated" flag
747
739
  if (node.ignoreTelegramsWithRepeatedFlag === true && isRepeated) {
748
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.warn("KNXUltimate-config: Ignored telegram with Repeated Flag " + _evt + " Src:" + _src + " Dest:" + _dest);
740
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.warn("Ignored telegram with Repeated Flag " + _evt + " Src:" + _src + " Dest:" + _dest);
749
741
  return;
750
742
  }
751
743
 
@@ -1164,7 +1156,7 @@ module.exports = (RED) => {
1164
1156
  // 26/12/2021 The KNXEngine is busy waiting for telegram's ACK. Strange.
1165
1157
  if (!node.knxConnection.clearToSend) {
1166
1158
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.warn(
1167
- "knxUltimate-config: handleTelegramQueue: the KNXEngine is busy or is waiting for a telegram ACK with seqNumner " +
1159
+ "handleTelegramQueue: the KNXEngine is busy or is waiting for a telegram ACK with seqNumner " +
1168
1160
  node.knxConnection.getSeqNumber() +
1169
1161
  ". Delay handling queue. YOUR COMPUTER COULD BE TOO SLOW OR BUSY TO KEEP UP ADDED TELEGRAM TO COMMANDQUEUE. Len: 3",
1170
1162
  );
@@ -1263,7 +1255,7 @@ module.exports = (RED) => {
1263
1255
  try {
1264
1256
  const oNode = RED.nodes.getNode(_oKNXMessage.nodecallerid); // 05/04/2022 Get the real node
1265
1257
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
1266
- "knxUltimate-config: node.knxConnection.write: Payload: " + _oKNXMessage.payload + " GA:" + _oKNXMessage.grpaddr + " DPT:" + _oKNXMessage.dpt + " " + error.stack
1258
+ "node.knxConnection.write: Payload: " + _oKNXMessage.payload + " GA:" + _oKNXMessage.grpaddr + " DPT:" + _oKNXMessage.dpt + " " + error.stack
1267
1259
  );
1268
1260
  oNode.setNodeStatus({
1269
1261
  fill: "red",
@@ -1398,7 +1390,7 @@ module.exports = (RED) => {
1398
1390
  } catch (error) {
1399
1391
  // Here comes if no datapoint has beeen found
1400
1392
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
1401
- "knxUltimate-config: buildInputMessage: Error returning from tryToFigureOutDataPointFromRawValue. Device " +
1393
+ "buildInputMessage: Error returning from tryToFigureOutDataPointFromRawValue. Device " +
1402
1394
  _srcGA +
1403
1395
  " Destination " +
1404
1396
  _destGA +
@@ -1423,7 +1415,7 @@ module.exports = (RED) => {
1423
1415
  var dpt = dptlib.resolve(sInputDpt);
1424
1416
  } catch (error) {
1425
1417
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
1426
- "knxUltimate-config: buildInputMessage: Error returning from dptlib.resolve(sInputDpt). Device " +
1418
+ "buildInputMessage: Error returning from dptlib.resolve(sInputDpt). Device " +
1427
1419
  _srcGA +
1428
1420
  " Destination " +
1429
1421
  _destGA +
@@ -1449,7 +1441,7 @@ module.exports = (RED) => {
1449
1441
  jsValue = dptlib.fromBuffer(_Rawvalue, dpt);
1450
1442
  if (jsValue === null) {
1451
1443
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
1452
- "knxUltimate-config: buildInputMessage: received a wrong datagram form KNX BUS, from device " +
1444
+ "buildInputMessage: received a wrong datagram form KNX BUS, from device " +
1453
1445
  _srcGA +
1454
1446
  " Destination " +
1455
1447
  _destGA +
@@ -1469,7 +1461,7 @@ module.exports = (RED) => {
1469
1461
  }
1470
1462
  } catch (error) {
1471
1463
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(
1472
- "knxUltimate-config: buildInputMessage: Error returning from DPT decoding. Device " +
1464
+ "buildInputMessage: Error returning from DPT decoding. Device " +
1473
1465
  _srcGA +
1474
1466
  " Destination " +
1475
1467
  _destGA +
@@ -1539,7 +1531,7 @@ module.exports = (RED) => {
1539
1531
 
1540
1532
  return finalMessage;
1541
1533
  } catch (error) {
1542
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("knxUltimate-config: buildInputMessage error: " + error.message);
1534
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("buildInputMessage error: " + error.message);
1543
1535
  return errorMessage;
1544
1536
  }
1545
1537
  }
@@ -1552,8 +1544,8 @@ module.exports = (RED) => {
1552
1544
  try {
1553
1545
  _csvText = fs.readFileSync(sFileName, { encoding: "utf8" });
1554
1546
  } catch (error) {
1555
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("KNXUltimate-config: ERROR: reading ETS file " + error.message);
1556
- node.error("KNXUltimate-config: ERROR: reading ETS file " + error.message);
1547
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error("ERROR: reading ETS file " + error.message);
1548
+ node.error("ERROR: reading ETS file " + error.message);
1557
1549
  return;
1558
1550
  }
1559
1551
  }
@@ -1564,9 +1556,9 @@ module.exports = (RED) => {
1564
1556
  const ajsonOutput = new Array(); // Array: qui va l'output totale con i nodi per node-red
1565
1557
 
1566
1558
  if (_csvText == "") {
1567
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: no csv ETS found");
1559
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("no csv ETS found");
1568
1560
  } else {
1569
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: csv ETS found !");
1561
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("csv ETS found !");
1570
1562
  // 23/08/2019 Delete inwanted CRLF in the GA description
1571
1563
  const sTemp = correctCRLFInCSV(_csvText);
1572
1564
 
@@ -1676,10 +1668,10 @@ module.exports = (RED) => {
1676
1668
  const ajsonOutput = new Array(); // Array: qui va l'output totale con i nodi per node-red
1677
1669
 
1678
1670
  if (_esfText === "") {
1679
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: no ESF found");
1671
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("no ESF found");
1680
1672
  return;
1681
1673
  } else {
1682
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: esf ETS found !");
1674
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("esf ETS found !");
1683
1675
  // Read and decode the CSV in an Array containing: "group address", "DPT", "Device Name"
1684
1676
  const fileGA = _esfText.split("\n");
1685
1677
  let sGA = "";
@@ -1797,7 +1789,7 @@ module.exports = (RED) => {
1797
1789
  }
1798
1790
 
1799
1791
  // 08/10/2021 Every xx seconds, i check if the connection is up and running
1800
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("KNXUltimate-config: Autoconnection: " + (node.autoReconnect === false ? "no." : "yes") + " Node " + node.name);
1792
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.info("Autoconnection: " + (node.autoReconnect === false ? "no." : "yes") + " Node " + node.name);
1801
1793
  if (node.timerKNXUltimateCheckState !== null) clearInterval(node.timerKNXUltimateCheckState);
1802
1794
  node.timerKNXUltimateCheckState = setInterval(() => {
1803
1795
  // If the node is disconnected, wait another cycle, then reconnects
@@ -1808,7 +1800,7 @@ module.exports = (RED) => {
1808
1800
  node.setAllClientsStatus("Auto reconnect in progress...", "grey", "");
1809
1801
  }, 100);
1810
1802
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug(
1811
- "knxUltimate-config: Auto Reconect by timerKNXUltimateCheckState in progress. node.LinkStatus: " +
1803
+ "Auto Reconect by timerKNXUltimateCheckState in progress. node.LinkStatus: " +
1812
1804
  node.linkStatus +
1813
1805
  ", node.autoReconnect:" +
1814
1806
  node.autoReconnect,
@@ -1823,7 +1815,7 @@ module.exports = (RED) => {
1823
1815
  node.setAllClientsStatus("Retry connection", "grey", "");
1824
1816
  }, 1000);
1825
1817
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug(
1826
- "knxUltimate-config: Waiting next cycle to reconect. node.LinkStatus: " + node.linkStatus + ", node.autoReconnect:" + node.autoReconnect,
1818
+ "Waiting next cycle to reconect. node.LinkStatus: " + node.linkStatus + ", node.autoReconnect:" + node.autoReconnect,
1827
1819
  );
1828
1820
  // node.initKNXConnection();
1829
1821
  }
@@ -1831,7 +1823,7 @@ module.exports = (RED) => {
1831
1823
 
1832
1824
  node.Disconnect = async (_sNodeStatus = "", _sColor = "grey") => {
1833
1825
  if (node.linkStatus === "disconnected") {
1834
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("knxUltimate-config: Disconnect: already not connected:" + node.linkStatus + ", node.autoReconnect:" + node.autoReconnect);
1826
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("Disconnect: already not connected:" + node.linkStatus + ", node.autoReconnect:" + node.autoReconnect);
1835
1827
  return;
1836
1828
  }
1837
1829
  node.linkStatus = "disconnected"; // 29/08/2019 signal disconnection
@@ -1840,12 +1832,12 @@ module.exports = (RED) => {
1840
1832
  if (node.knxConnection !== null) await node.knxConnection.Disconnect();
1841
1833
  } catch (error) {
1842
1834
  if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug(
1843
- "knxUltimate-config: Disconnected: node.knxConnection.Disconnect() " + (error.message || "") + " , node.autoReconnect:" + node.autoReconnect,
1835
+ "Disconnected: node.knxConnection.Disconnect() " + (error.message || "") + " , node.autoReconnect:" + node.autoReconnect,
1844
1836
  );
1845
1837
  }
1846
1838
  node.setAllClientsStatus("Disconnected", _sColor, _sNodeStatus);
1847
1839
  saveExposedGAs(); // 04/04/2021 save the current values of GA payload
1848
- if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("knxUltimate-config: Disconnected, node.autoReconnect:" + node.autoReconnect);
1840
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.debug("Disconnected, node.autoReconnect:" + node.autoReconnect);
1849
1841
  };
1850
1842
 
1851
1843
  node.on("close", async function (done) {
@@ -57,6 +57,11 @@
57
57
  // onclick: function() {}
58
58
  // },
59
59
  oneditprepare: function () {
60
+ // Go to the help panel
61
+ try {
62
+ RED.sidebar.show("help");
63
+ } catch (error) { }
64
+
60
65
 
61
66
  var node = this;
62
67
  var oNodeServer = RED.nodes.node($("#node-input-server").val()); // Store the config-node
@@ -398,6 +403,11 @@
398
403
 
399
404
  },
400
405
  oneditsave: function () {
406
+ // Return to the info tab
407
+ try {
408
+ RED.sidebar.show("info");
409
+ } catch (error) { }
410
+
401
411
  var node = this;
402
412
  this.sendMsgToKNXCode = this.sendMsgToKNXCodeEditor.getValue();
403
413
  this.receiveMsgFromKNXCode = this.receiveMsgFromKNXCodeEditor.getValue();
@@ -445,6 +455,11 @@
445
455
 
446
456
  },
447
457
  oneditcancel: function () {
458
+ // Return to the info tab
459
+ try {
460
+ RED.sidebar.show("info");
461
+ } catch (error) { }
462
+
448
463
  // 15/09/2020 Supergiovane, Detele the sample help editor
449
464
  try {
450
465
  node.sampleEditor.destroy();