node-red-contrib-knx-ultimate 2.5.0 → 3.0.0-beta1

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 (150) hide show
  1. package/.eslintrc.json +3 -2
  2. package/CHANGELOG.md +13 -0
  3. package/README.md +2 -1
  4. package/{KNXEngine → _JS_KNXEngine}/README.md +7 -7
  5. package/{KNXEngine → _JS_KNXEngine}/index.js +1 -1
  6. package/{KNXEngine → _JS_KNXEngine}/sample.js +5 -5
  7. package/{KNXEngine → _JS_KNXEngine}/sampleSecure.js +1 -1
  8. package/{KNXEngine → _JS_KNXEngine}/src/KNXClient.js +3 -3
  9. package/_JS_KNXEngine/src/dptlib/dpt60002.js +101 -0
  10. package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXConnectResponse.js +2 -0
  11. package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXConstants.js +1 -0
  12. package/nodes/commonFunctions.js +3 -3
  13. package/nodes/hue-config.html +2 -0
  14. package/nodes/knxUltimate-config.html +2 -0
  15. package/nodes/knxUltimate-config.js +226 -223
  16. package/nodes/knxUltimate.html +123 -56
  17. package/nodes/knxUltimate.js +100 -60
  18. package/nodes/knxUltimateAlerter.html +7 -12
  19. package/nodes/knxUltimateAlerter.js +2 -2
  20. package/nodes/knxUltimateGarageDoorBarrierOpener.html +7 -12
  21. package/nodes/knxUltimateGarageDoorBarrierOpener.js +2 -2
  22. package/nodes/knxUltimateGlobalContext.html +2 -0
  23. package/nodes/knxUltimateHueBattery.html +11 -14
  24. package/nodes/knxUltimateHueButton.html +27 -22
  25. package/nodes/knxUltimateHueButton.js +1 -1
  26. package/nodes/knxUltimateHueContactSensor.html +12 -8
  27. package/nodes/knxUltimateHueLight.html +32 -26
  28. package/nodes/knxUltimateHueLight.js +43 -6
  29. package/nodes/knxUltimateHueLightSensor.html +11 -14
  30. package/nodes/knxUltimateHueMotion.html +11 -14
  31. package/nodes/knxUltimateHueScene.html +24 -19
  32. package/nodes/knxUltimateHueScene.js +2 -1
  33. package/nodes/knxUltimateHueTapDial.html +11 -14
  34. package/nodes/knxUltimateHueTemperatureSensor.html +11 -14
  35. package/nodes/knxUltimateHueZigbeeConnectivity.html +11 -14
  36. package/nodes/knxUltimateLoadControl.html +4 -11
  37. package/nodes/knxUltimateLoadControl.js +1 -1
  38. package/nodes/knxUltimateLogger.html +3 -1
  39. package/nodes/knxUltimateSceneController.html +14 -15
  40. package/nodes/knxUltimateViewer.html +2 -0
  41. package/nodes/knxUltimateViewer.js +1 -1
  42. package/nodes/knxUltimateWatchDog.html +3 -1
  43. package/nodes/utils/payloadManipulation.js +49 -1
  44. package/nodes/utils/utils.js +4 -0
  45. package/package.json +4 -3
  46. package/resources/htmlUtils.js +27 -0
  47. /package/{KNXEngine → _JS_KNXEngine}/CHANGELOG.md +0 -0
  48. /package/{KNXEngine → _JS_KNXEngine}/LICENSE +0 -0
  49. /package/{KNXEngine → _JS_KNXEngine}/img/dpt 2.png +0 -0
  50. /package/{KNXEngine → _JS_KNXEngine}/img/dpt.png +0 -0
  51. /package/{KNXEngine → _JS_KNXEngine}/img/logo 2.png +0 -0
  52. /package/{KNXEngine → _JS_KNXEngine}/img/logo-big 2.png +0 -0
  53. /package/{KNXEngine → _JS_KNXEngine}/img/logo-big.png +0 -0
  54. /package/{KNXEngine → _JS_KNXEngine}/img/logo.png +0 -0
  55. /package/{KNXEngine → _JS_KNXEngine}/img/nodered 2.png +0 -0
  56. /package/{KNXEngine → _JS_KNXEngine}/img/nodered.png +0 -0
  57. /package/{KNXEngine → _JS_KNXEngine}/package.json +0 -0
  58. /package/{KNXEngine → _JS_KNXEngine}/simpleSample.js +0 -0
  59. /package/{KNXEngine → _JS_KNXEngine}/src/Curve25519.js +0 -0
  60. /package/{KNXEngine → _JS_KNXEngine}/src/KNXSocketOptions.js +0 -0
  61. /package/{KNXEngine → _JS_KNXEngine}/src/KNXsecureKeyring.js +0 -0
  62. /package/{KNXEngine → _JS_KNXEngine}/src/KnxLog.js +0 -0
  63. /package/{KNXEngine → _JS_KNXEngine}/src/cur.js +0 -0
  64. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt1.js +0 -0
  65. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt10.js +0 -0
  66. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt11.js +0 -0
  67. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt12.js +0 -0
  68. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt13.js +0 -0
  69. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt14.js +0 -0
  70. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt15.js +0 -0
  71. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt16.js +0 -0
  72. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt17.js +0 -0
  73. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt18.js +0 -0
  74. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt19.js +0 -0
  75. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt2.js +0 -0
  76. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt20.js +0 -0
  77. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt21.js +0 -0
  78. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt213.js +0 -0
  79. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt22.js +0 -0
  80. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt222.js +0 -0
  81. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt232.js +0 -0
  82. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt235.js +0 -0
  83. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt237.js +0 -0
  84. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt238.js +0 -0
  85. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt242.js +0 -0
  86. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt249.js +0 -0
  87. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt251.js +0 -0
  88. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt275.js +0 -0
  89. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt28.js +0 -0
  90. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt29.js +0 -0
  91. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt3.js +0 -0
  92. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt4.js +0 -0
  93. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt5.js +0 -0
  94. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt6.js +0 -0
  95. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt60001.js +0 -0
  96. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt7.js +0 -0
  97. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt8.js +0 -0
  98. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt9.js +0 -0
  99. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/dpt999.js +0 -0
  100. /package/{KNXEngine → _JS_KNXEngine}/src/dptlib/index.js +0 -0
  101. /package/{KNXEngine → _JS_KNXEngine}/src/errors/BufferLengthError.js +0 -0
  102. /package/{KNXEngine → _JS_KNXEngine}/src/errors/DateFormatError.js +0 -0
  103. /package/{KNXEngine → _JS_KNXEngine}/src/errors/DuplicateRequestError.js +0 -0
  104. /package/{KNXEngine → _JS_KNXEngine}/src/errors/InvalidValueError.js +0 -0
  105. /package/{KNXEngine → _JS_KNXEngine}/src/errors/NotImplementedError.js +0 -0
  106. /package/{KNXEngine → _JS_KNXEngine}/src/errors/RequestTimeoutError.js +0 -0
  107. /package/{KNXEngine → _JS_KNXEngine}/src/errors/index.js +0 -0
  108. /package/{KNXEngine → _JS_KNXEngine}/src/index.js +0 -0
  109. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/CRD.js +0 -0
  110. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/CRI.js +0 -0
  111. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/CRIFactory.js +0 -0
  112. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/DIB.js +0 -0
  113. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/DeviceInfo.js +0 -0
  114. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/HPAI.js +0 -0
  115. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/IPConfig.js +0 -0
  116. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/IPCurrentConfig.js +0 -0
  117. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXAddress.js +0 -0
  118. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXAddresses.js +0 -0
  119. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXConnectRequest.js +0 -0
  120. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXConnectionStateRequest.js +0 -0
  121. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXConnectionStateResponse.js +0 -0
  122. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXDataBuffer.js +0 -0
  123. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXDescriptionRequest.js +0 -0
  124. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXDescriptionResponse.js +0 -0
  125. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXDisconnectRequest.js +0 -0
  126. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXDisconnectResponse.js +0 -0
  127. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXHeader.js +0 -0
  128. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXPacket.js +0 -0
  129. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXProtocol.js +0 -0
  130. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXRoutingIndication.js +0 -0
  131. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXSearchRequest.js +0 -0
  132. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXSearchResponse.js +0 -0
  133. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXSecureSessionRequest.js +0 -0
  134. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXTunnelingAck.js +0 -0
  135. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXTunnelingRequest.js +0 -0
  136. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/KNXUtils.js +0 -0
  137. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/ServiceFamilies.js +0 -0
  138. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/TunnelCRI.js +0 -0
  139. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/AdditionalInfo.js +0 -0
  140. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/CEMIConstants.js +0 -0
  141. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/CEMIFactory.js +0 -0
  142. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/CEMIMessage.js +0 -0
  143. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/ControlField.js +0 -0
  144. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/LDataCon.js +0 -0
  145. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/LDataInd.js +0 -0
  146. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/LDataReq.js +0 -0
  147. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/NPDU.js +0 -0
  148. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/cEMI/TLVInfo.js +0 -0
  149. /package/{KNXEngine → _JS_KNXEngine}/src/protocol/index.js +0 -0
  150. /package/{KNXEngine → _JS_KNXEngine}/src/util/ipAddressHelper.js +0 -0
@@ -2,7 +2,7 @@
2
2
  * @param {object} [_oNode]
3
3
  * @param {any} [jsValue]
4
4
  */
5
- exports.Manipulate = function roundPayload (_oNode, jsValue) {
5
+ exports.Manipulate = function roundPayload(_oNode, jsValue) {
6
6
  // 19/01/2023 FORMATTING THE OUTPUT PAYLOAD BASED ON SINGLE NODE SETUP
7
7
  //* ********************************************************
8
8
  // Formatting the msg output value
@@ -38,3 +38,51 @@ exports.Manipulate = function roundPayload (_oNode, jsValue) {
38
38
  }
39
39
  //* ********************************************************
40
40
  }
41
+
42
+ // KNXULtimate nodes
43
+ module.exports.KNXULtimateChangeConfigByInputMSG = function KNXULtimateChangeConfigByInputMSG(msg, node, config) {
44
+
45
+ if (!msg.setConfig.hasOwnProperty('setGroupAddress') || !msg.setConfig.hasOwnProperty('setDPT')) {
46
+ node.setNodeStatus({
47
+ fill: 'red', shape: 'ring', text: `setGroupAddress and setDPT are mandatory`, payload: '', GA: '', dpt: '', devicename: '',
48
+ });
49
+ return;
50
+ }
51
+
52
+ // Set DPT
53
+ node.dpt = msg.setConfig.setDPT;
54
+ config.dpt = msg.setConfig.setDPT;
55
+
56
+ // SET GORUP ADDRESS
57
+ node.topic = msg.setConfig.setGroupAddress;
58
+ config.topic = msg.setConfig.setGroupAddress
59
+ node.outputtopic = (config.outputtopic === undefined || config.outputtopic === '') ? msg.setConfig.setGroupAddress : config.outputtopic; // 07/02/2020 Importante, per retrocompatibilità
60
+ config.outputtopic = node.outputtopic;
61
+
62
+ // Read from the ETS file, the missing props
63
+ if (node.server.csv !== undefined && node.server.csv !== null) {
64
+ // Read it from ETS File
65
+ const found = node.server.csv.find(item => item.ga === msg.setConfig.setGroupAddress);
66
+ if (found !== undefined) {
67
+ if (msg.setConfig.setDPT === 'auto') {
68
+ node.dpt = found.dpt; // SET THE DPT
69
+ config.dpt = found.dpt;
70
+ }
71
+ node.name = found.devicename;
72
+ config.name = found.devicename;
73
+ }
74
+ }
75
+ // If DPT is still "auto", something has going wrong
76
+ if (node.dpt === 'auto') {
77
+ // Unable to retrieve the datapoint
78
+ node.setNodeStatus({
79
+ fill: 'red', shape: 'ring', text: `Unable to retrieve the datapoint from the ETS file`, payload: '', GA: '', dpt: '', devicename: '',
80
+ });
81
+ if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(`knxUltimate: setConfig: Node.id: ${node.id} error: Unable to retrieve the datapoint from the ETS file`);
82
+ } else {
83
+ node.setNodeStatus({
84
+ fill: 'blue', shape: 'ring', text: `Config changed. Current GA: ${node.topic} DPT: ${node.dpt}`, payload: '', GA: '', dpt: '', devicename: node.name,
85
+ });
86
+ }
87
+
88
+ };
@@ -53,5 +53,9 @@ module.exports.fetchFromObject = function fetchFromObject(
53
53
  if (typeof _msg[_payloadPropName] === "object") return undefined;
54
54
  return _msg[_payloadPropName];
55
55
  };
56
+
57
+
56
58
  const DEFAULTTRANSLATIONINPUT =
57
59
  "on:true\noff:false\nactive:true\ninactive:false\nopen:true\nclosed:false\nclose:false\n1:true\n0:false\ntrue:true\nfalse:false\nhome:true\nnot_home:false\nnormal:false\nviolated:true";
60
+
61
+
package/package.json CHANGED
@@ -3,13 +3,15 @@
3
3
  "engines": {
4
4
  "node": ">=16.0.0"
5
5
  },
6
- "version": "2.5.0",
6
+ "version": "3.0.0-beta1",
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",
10
10
  "crypto-js": "4.2.0",
11
11
  "dns-sync": "0.2.1",
12
12
  "eventsource": "2.0.2",
13
+ "js-yaml": "4.1.0",
14
+ "knxultimate": ">=2.3.3",
13
15
  "lodash": "4.17.21",
14
16
  "log-driver": "1.2.7",
15
17
  "mkdirp": "3.0.1",
@@ -17,8 +19,7 @@
17
19
  "path": "0.12.7",
18
20
  "ping": "0.4.4",
19
21
  "simple-get": "4.0.1",
20
- "xml2js": "0.6.0",
21
- "js-yaml": "4.1.0"
22
+ "xml2js": "0.6.0"
22
23
  },
23
24
  "node-red": {
24
25
  "version": ">=3.1.1",
@@ -0,0 +1,27 @@
1
+ // 31/03/2020 Search Helper
2
+ function htmlUtilsfullCSVSearch(sourceText, searchString) {
3
+ let aSearchWords = [];
4
+ if (searchString.toLowerCase().includes('exactmatch')) {
5
+ // Find only the strict exact match of group address. For example, if the string is 0/0/2exactmatch, i return only the item in the csv having
6
+ // group address 0/0/2 (and not also, for example 0/0/20)
7
+ // I can have also an exact string like '0/0/1exactmatch 1.000', (GA or any text, plus the datapoint) and i must take it into consideration
8
+ let aSearchStrings = searchString.split(' ');
9
+ for (let index = 0; index < aSearchStrings.length; index++) {
10
+ const element = aSearchStrings[index];
11
+ if (element.includes('exactmatch')) {
12
+ aSearchWords.push(element.replace('exactmatch', ' ')); // The last ' ' allow to return the exact match
13
+ } else {
14
+ aSearchWords.push(element); // The last ' ' allow to return the exact match
15
+ }
16
+ }
17
+ } else {
18
+ aSearchWords = searchString.toLowerCase().split(" ");
19
+ }
20
+
21
+ // This searches for all words in a string
22
+ let i = 0;
23
+ for (let index = 0; index < aSearchWords.length; index++) {
24
+ if (sourceText.toLowerCase().indexOf(aSearchWords[index]) > -1) i += 1;
25
+ }
26
+ return i == aSearchWords.length;
27
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes