node-red-contrib-knx-ultimate 5.2.5 → 6.0.0

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 (77) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/nodes/commonFunctions.js +40 -3
  3. package/nodes/knxUltimate-config.js +379 -335
  4. package/nodes/knxUltimate.html +8 -9
  5. package/nodes/knxUltimate.js +5 -5
  6. package/nodes/knxUltimateAI.js +1 -1
  7. package/nodes/knxUltimateHueLight.html +3 -3
  8. package/nodes/knxUltimateHueLight.js +1 -1
  9. package/nodes/knxUltimateMatterBridge.html +321 -247
  10. package/nodes/knxUltimateMatterBridge.js +48 -1
  11. package/nodes/knxUltimateMatterControllerDevice.html +2119 -0
  12. package/nodes/knxUltimateMatterControllerDevice.js +1701 -0
  13. package/nodes/locales/de/knxUltimateMatterBridge.html +6 -2
  14. package/nodes/locales/de/knxUltimateMatterBridge.json +14 -1
  15. package/nodes/locales/de/knxUltimateMatterControllerDevice.html +27 -0
  16. package/nodes/locales/de/knxUltimateMatterControllerDevice.json +97 -0
  17. package/nodes/locales/de/matter-config.json +5 -1
  18. package/nodes/locales/de/matterbridge-config.json +1 -0
  19. package/nodes/locales/en/knxUltimateMatterBridge.html +6 -2
  20. package/nodes/locales/en/knxUltimateMatterBridge.json +14 -1
  21. package/nodes/locales/en/knxUltimateMatterControllerDevice.html +27 -0
  22. package/nodes/locales/en/knxUltimateMatterControllerDevice.json +97 -0
  23. package/nodes/locales/en/matter-config.json +6 -1
  24. package/nodes/locales/en/matterbridge-config.json +1 -0
  25. package/nodes/locales/es/knxUltimateMatterBridge.html +6 -2
  26. package/nodes/locales/es/knxUltimateMatterBridge.json +14 -1
  27. package/nodes/locales/es/knxUltimateMatterControllerDevice.html +27 -0
  28. package/nodes/locales/es/knxUltimateMatterControllerDevice.json +97 -0
  29. package/nodes/locales/es/matter-config.json +5 -1
  30. package/nodes/locales/es/matterbridge-config.json +1 -0
  31. package/nodes/locales/fr/knxUltimateMatterBridge.html +6 -2
  32. package/nodes/locales/fr/knxUltimateMatterBridge.json +14 -1
  33. package/nodes/locales/fr/knxUltimateMatterControllerDevice.html +27 -0
  34. package/nodes/locales/fr/knxUltimateMatterControllerDevice.json +89 -0
  35. package/nodes/locales/fr/matter-config.json +5 -1
  36. package/nodes/locales/fr/matterbridge-config.json +1 -0
  37. package/nodes/locales/it/knxUltimateMatterBridge.html +6 -2
  38. package/nodes/locales/it/knxUltimateMatterBridge.json +14 -1
  39. package/nodes/locales/it/knxUltimateMatterControllerDevice.html +27 -0
  40. package/nodes/locales/it/knxUltimateMatterControllerDevice.json +97 -0
  41. package/nodes/locales/it/matter-config.json +6 -1
  42. package/nodes/locales/it/matterbridge-config.json +1 -0
  43. package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +6 -2
  44. package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +14 -1
  45. package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.html +27 -0
  46. package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.json +89 -0
  47. package/nodes/locales/zh-CN/matter-config.json +5 -1
  48. package/nodes/locales/zh-CN/matterbridge-config.json +1 -0
  49. package/nodes/matter-config.html +58 -6
  50. package/nodes/matter-config.js +7 -2
  51. package/nodes/matterbridge-config.html +1 -0
  52. package/nodes/utils/lightEngines/canonicalLight.js +75 -0
  53. package/nodes/utils/lightEngines/hueLightEngine.js +51 -0
  54. package/nodes/utils/lightEngines/index.js +25 -0
  55. package/nodes/utils/lightEngines/knxLightCommand.js +79 -0
  56. package/nodes/utils/lightEngines/lightEngine.js +46 -0
  57. package/nodes/utils/lightEngines/matterHueShim.js +59 -0
  58. package/nodes/utils/lightEngines/matterLightEngine.js +117 -0
  59. package/nodes/utils/matterEngine.mjs +185 -14
  60. package/nodes/utils/matterKnxConverter.js +1 -1
  61. package/package.json +11 -3
  62. package/resources/KNXSendSnippets.js +53 -53
  63. package/resources/htmlUtils.js +6 -4
  64. package/nodes/knxUltimateMatterDevice.html +0 -632
  65. package/nodes/knxUltimateMatterDevice.js +0 -308
  66. package/nodes/locales/de/knxUltimateMatterDevice.html +0 -56
  67. package/nodes/locales/de/knxUltimateMatterDevice.json +0 -109
  68. package/nodes/locales/en/knxUltimateMatterDevice.html +0 -56
  69. package/nodes/locales/en/knxUltimateMatterDevice.json +0 -109
  70. package/nodes/locales/es/knxUltimateMatterDevice.html +0 -56
  71. package/nodes/locales/es/knxUltimateMatterDevice.json +0 -109
  72. package/nodes/locales/fr/knxUltimateMatterDevice.html +0 -56
  73. package/nodes/locales/fr/knxUltimateMatterDevice.json +0 -109
  74. package/nodes/locales/it/knxUltimateMatterDevice.html +0 -56
  75. package/nodes/locales/it/knxUltimateMatterDevice.json +0 -109
  76. package/nodes/locales/zh-CN/knxUltimateMatterDevice.html +0 -56
  77. package/nodes/locales/zh-CN/knxUltimateMatterDevice.json +0 -109
package/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ **Version 6.0.0** - July 2026<br/>
10
+
11
+ - **BREAKING CHANGE**: this release intentionally bumps the package to `6.0.0` because the Matter node model changed. The unpublished dedicated Matter controller nodes and the old generic Matter Device node have been replaced by the new single **Control Matter from KNX (BETA)** node, and the KNX-to-Matter bridge/editor behaviour has been reworked. Existing experimental Matter flows created with the previous beta nodes may need to be rebuilt or adjusted.<br/>
12
+ - **Matter nodes are BETA**: all Matter nodes are experimental and may be changed, renamed, removed, or replaced at any time until the Matter integration leaves the BETA phase. Do not treat their editor fields, flow JSON structure, runtime behaviour, storage layout, or exposed APIs as stable yet.<br/>
13
+ - New **Control Matter from KNX (BETA)** node: a single capability-driven Matter controller node. Select a commissioned Matter endpoint and the editor shows only the KNX mappings supported by that endpoint (switch, brightness, color temperature, temperature, humidity, lux, occupancy, contact and battery). Light endpoints keep the familiar light-style tabs and the main KNX light options from the dedicated node, including relative DIM (DPT 3.007), brightness %, tunable-white DIM/Kelvin, switch-on brightness/temperature, dim speed, min/max dim level, tunable-white direction inversion and optional day/night lighting. This replaces the unpublished dedicated Matter controller nodes and the old generic Matter Device node.<br/>
14
+ - **Matter Bridge device (BETA)** is now presented as **Expose KNX to Matter (BETA)** in the editor, with advanced compatibility options for real-world KNX actuators: dimmable devices can ignore brightness commands sent immediately after `On`, and covers/shutters can optimistically update their Matter position while waiting for the real KNX status feedback.<br/>
15
+ - Matter Controller pairing and device list improvements: clearer commissioning errors, persistent error dialogs, better logging, device names shown more consistently, and direct rename support from the associated-devices list.<br/>
16
+ - **Documentation**: added localized editor help and online docs for the new Matter nodes in EN/IT/DE/FR/ES/zh-CN, and expanded the Matter section in the documentation navigation.<br/>
17
+
9
18
  **Version 5.2.5** - July 2026<br/>
10
19
 
11
20
  - Maintenance release.<br/>
@@ -982,10 +982,47 @@ module.exports = (RED) => {
982
982
  res.json({ error: 'PLEASE DEPLOY FIRST: then try again.' })
983
983
  return
984
984
  }
985
- const nodeId = await matterServer.commission(req.query.code)
986
- res.json({ nodeId })
985
+ const nodeId = await matterServer.commission(req.query.code, { targetHost: req.query.targetHost })
986
+ const requestedName = String(req.query.name || '').trim()
987
+ let renameError = null
988
+ if (requestedName !== '') {
989
+ try {
990
+ await matterServer.renameCommissionedNode(nodeId, requestedName)
991
+ } catch (error) {
992
+ renameError = error.message
993
+ RED.log.warn(`Warn KNXUltimateMatterPair rename node ${nodeId}: ${error.message}`)
994
+ }
995
+ }
996
+ let device = null
997
+ try {
998
+ device = matterServer.getCommissionedNodesDetails().find((item) => String(item.nodeId) === String(nodeId)) || null
999
+ } catch (error) { /* empty */ }
1000
+ res.json({ nodeId, name: device?.name, productName: device?.productName, vendorName: device?.vendorName, renameError })
1001
+ } catch (error) {
1002
+ const targetHost = req.query.targetHost ? ` targetHost=${req.query.targetHost}` : ''
1003
+ RED.log.error(`Err KNXUltimateMatterPair:${targetHost} ${error.stack || error.message}`)
1004
+ res.json({ error: error.message })
1005
+ }
1006
+ })
1007
+
1008
+ // MATTER: renames a commissioned Matter device by writing BasicInformation.nodeLabel
1009
+ RED.httpAdmin.get('/KNXUltimateMatterRename', RED.auth.needsPermission('matter-config.write'), async (req, res) => {
1010
+ try {
1011
+ const matterServer = RED.nodes.getNode(req.query.serverId)
1012
+ if (matterServer === null || matterServer === undefined) {
1013
+ res.json({ error: 'PLEASE DEPLOY FIRST: then try again.' })
1014
+ return
1015
+ }
1016
+ const nodeId = String(req.query.nodeId || '').trim()
1017
+ const name = String(req.query.name || '').trim()
1018
+ if (nodeId === '' || name === '') {
1019
+ res.json({ error: 'Missing nodeId or name.' })
1020
+ return
1021
+ }
1022
+ await matterServer.renameCommissionedNode(nodeId, name)
1023
+ res.json({ status: 'ok', nodeId, name })
987
1024
  } catch (error) {
988
- RED.log.error(`Err KNXUltimateMatterPair: ${error.message}`)
1025
+ RED.log.error(`Err KNXUltimateMatterRename: ${error.stack || error.message}`)
989
1026
  res.json({ error: error.message })
990
1027
  }
991
1028
  })