node-red-contrib-knx-ultimate 6.2.2 → 6.2.3-beta.1

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 (141) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/nodes/knxUltimateAI.js +7 -1
  3. package/nodes/knxUltimateHueAreaMotion.html +16 -4
  4. package/nodes/knxUltimateHueBattery.html +16 -4
  5. package/nodes/knxUltimateHueButton.html +16 -4
  6. package/nodes/knxUltimateHueCameraMotion.html +16 -4
  7. package/nodes/knxUltimateHueContactSensor.html +16 -4
  8. package/nodes/knxUltimateHueController.html +1259 -0
  9. package/nodes/knxUltimateHueController.js +28 -0
  10. package/nodes/knxUltimateHueHumiditySensor.html +16 -4
  11. package/nodes/knxUltimateHueLight.html +16 -4
  12. package/nodes/knxUltimateHueLightSensor.html +16 -4
  13. package/nodes/knxUltimateHueMotion.html +16 -4
  14. package/nodes/knxUltimateHuePlug.html +16 -4
  15. package/nodes/knxUltimateHueScene.html +19 -7
  16. package/nodes/knxUltimateHueTapDial.html +16 -4
  17. package/nodes/knxUltimateHueTemperatureSensor.html +16 -4
  18. package/nodes/knxUltimateHueZigbeeConnectivity.html +16 -4
  19. package/nodes/knxUltimateHuedevice_software_update.html +16 -4
  20. package/nodes/locales/de/knxUltimateHueAreaMotion.html +1 -1
  21. package/nodes/locales/de/knxUltimateHueBattery.html +1 -0
  22. package/nodes/locales/de/knxUltimateHueButton.html +1 -0
  23. package/nodes/locales/de/knxUltimateHueCameraMotion.html +1 -0
  24. package/nodes/locales/de/knxUltimateHueContactSensor.html +1 -0
  25. package/nodes/locales/de/knxUltimateHueController.html +668 -0
  26. package/nodes/locales/de/knxUltimateHueController.json +47 -0
  27. package/nodes/locales/de/knxUltimateHueHumiditySensor.html +1 -0
  28. package/nodes/locales/de/knxUltimateHueLight.html +1 -0
  29. package/nodes/locales/de/knxUltimateHueLightSensor.html +1 -0
  30. package/nodes/locales/de/knxUltimateHueMotion.html +1 -0
  31. package/nodes/locales/de/knxUltimateHuePlug.html +1 -0
  32. package/nodes/locales/de/knxUltimateHueScene.html +1 -0
  33. package/nodes/locales/de/knxUltimateHueTapDial.html +1 -0
  34. package/nodes/locales/de/knxUltimateHueTemperatureSensor.html +1 -0
  35. package/nodes/locales/de/knxUltimateHueZigbeeConnectivity.html +1 -0
  36. package/nodes/locales/de/knxUltimateHuedevice_software_update.html +1 -0
  37. package/nodes/locales/en/knxUltimateHueAreaMotion.html +1 -1
  38. package/nodes/locales/en/knxUltimateHueBattery.html +1 -0
  39. package/nodes/locales/en/knxUltimateHueButton.html +1 -0
  40. package/nodes/locales/en/knxUltimateHueCameraMotion.html +1 -0
  41. package/nodes/locales/en/knxUltimateHueContactSensor.html +1 -0
  42. package/nodes/locales/en/knxUltimateHueController.html +671 -0
  43. package/nodes/locales/en/knxUltimateHueController.json +47 -0
  44. package/nodes/locales/en/knxUltimateHueHumiditySensor.html +1 -0
  45. package/nodes/locales/en/knxUltimateHueLight.html +1 -0
  46. package/nodes/locales/en/knxUltimateHueLightSensor.html +1 -0
  47. package/nodes/locales/en/knxUltimateHueMotion.html +1 -0
  48. package/nodes/locales/en/knxUltimateHuePlug.html +1 -0
  49. package/nodes/locales/en/knxUltimateHueScene.html +1 -0
  50. package/nodes/locales/en/knxUltimateHueTapDial.html +1 -0
  51. package/nodes/locales/en/knxUltimateHueTemperatureSensor.html +1 -0
  52. package/nodes/locales/en/knxUltimateHueZigbeeConnectivity.html +1 -0
  53. package/nodes/locales/en/knxUltimateHuedevice_software_update.html +1 -0
  54. package/nodes/locales/es/knxUltimateHueAreaMotion.html +1 -1
  55. package/nodes/locales/es/knxUltimateHueBattery.html +1 -0
  56. package/nodes/locales/es/knxUltimateHueButton.html +1 -0
  57. package/nodes/locales/es/knxUltimateHueCameraMotion.html +1 -0
  58. package/nodes/locales/es/knxUltimateHueContactSensor.html +1 -0
  59. package/nodes/locales/es/knxUltimateHueController.html +671 -0
  60. package/nodes/locales/es/knxUltimateHueController.json +47 -0
  61. package/nodes/locales/es/knxUltimateHueHumiditySensor.html +1 -0
  62. package/nodes/locales/es/knxUltimateHueLight.html +1 -0
  63. package/nodes/locales/es/knxUltimateHueLightSensor.html +1 -0
  64. package/nodes/locales/es/knxUltimateHueMotion.html +1 -0
  65. package/nodes/locales/es/knxUltimateHuePlug.html +1 -0
  66. package/nodes/locales/es/knxUltimateHueScene.html +1 -0
  67. package/nodes/locales/es/knxUltimateHueTapDial.html +1 -0
  68. package/nodes/locales/es/knxUltimateHueTemperatureSensor.html +1 -0
  69. package/nodes/locales/es/knxUltimateHueZigbeeConnectivity.html +1 -0
  70. package/nodes/locales/es/knxUltimateHuedevice_software_update.html +1 -0
  71. package/nodes/locales/fr/knxUltimateHueAreaMotion.html +1 -1
  72. package/nodes/locales/fr/knxUltimateHueBattery.html +1 -0
  73. package/nodes/locales/fr/knxUltimateHueButton.html +1 -0
  74. package/nodes/locales/fr/knxUltimateHueCameraMotion.html +1 -0
  75. package/nodes/locales/fr/knxUltimateHueContactSensor.html +1 -0
  76. package/nodes/locales/fr/knxUltimateHueController.html +671 -0
  77. package/nodes/locales/fr/knxUltimateHueController.json +47 -0
  78. package/nodes/locales/fr/knxUltimateHueHumiditySensor.html +1 -0
  79. package/nodes/locales/fr/knxUltimateHueLight.html +1 -0
  80. package/nodes/locales/fr/knxUltimateHueLightSensor.html +1 -0
  81. package/nodes/locales/fr/knxUltimateHueMotion.html +1 -0
  82. package/nodes/locales/fr/knxUltimateHuePlug.html +1 -0
  83. package/nodes/locales/fr/knxUltimateHueScene.html +1 -0
  84. package/nodes/locales/fr/knxUltimateHueTapDial.html +1 -0
  85. package/nodes/locales/fr/knxUltimateHueTemperatureSensor.html +1 -0
  86. package/nodes/locales/fr/knxUltimateHueZigbeeConnectivity.html +1 -0
  87. package/nodes/locales/fr/knxUltimateHuedevice_software_update.html +1 -0
  88. package/nodes/locales/it/knxUltimateHueAreaMotion.html +1 -1
  89. package/nodes/locales/it/knxUltimateHueBattery.html +1 -0
  90. package/nodes/locales/it/knxUltimateHueButton.html +1 -0
  91. package/nodes/locales/it/knxUltimateHueCameraMotion.html +1 -0
  92. package/nodes/locales/it/knxUltimateHueContactSensor.html +1 -0
  93. package/nodes/locales/it/knxUltimateHueController.html +671 -0
  94. package/nodes/locales/it/knxUltimateHueController.json +47 -0
  95. package/nodes/locales/it/knxUltimateHueHumiditySensor.html +1 -0
  96. package/nodes/locales/it/knxUltimateHueLight.html +1 -0
  97. package/nodes/locales/it/knxUltimateHueLightSensor.html +1 -0
  98. package/nodes/locales/it/knxUltimateHueMotion.html +1 -0
  99. package/nodes/locales/it/knxUltimateHuePlug.html +1 -0
  100. package/nodes/locales/it/knxUltimateHueScene.html +1 -0
  101. package/nodes/locales/it/knxUltimateHueTapDial.html +1 -0
  102. package/nodes/locales/it/knxUltimateHueTemperatureSensor.html +1 -0
  103. package/nodes/locales/it/knxUltimateHueZigbeeConnectivity.html +1 -0
  104. package/nodes/locales/it/knxUltimateHuedevice_software_update.html +1 -0
  105. package/nodes/locales/zh-CN/knxUltimateHueAreaMotion.html +1 -1
  106. package/nodes/locales/zh-CN/knxUltimateHueBattery.html +1 -0
  107. package/nodes/locales/zh-CN/knxUltimateHueButton.html +1 -0
  108. package/nodes/locales/zh-CN/knxUltimateHueCameraMotion.html +1 -0
  109. package/nodes/locales/zh-CN/knxUltimateHueContactSensor.html +1 -0
  110. package/nodes/locales/zh-CN/knxUltimateHueController.html +673 -0
  111. package/nodes/locales/zh-CN/knxUltimateHueController.json +47 -0
  112. package/nodes/locales/zh-CN/knxUltimateHueHumiditySensor.html +1 -0
  113. package/nodes/locales/zh-CN/knxUltimateHueLight.html +1 -0
  114. package/nodes/locales/zh-CN/knxUltimateHueLightSensor.html +1 -0
  115. package/nodes/locales/zh-CN/knxUltimateHueMotion.html +1 -0
  116. package/nodes/locales/zh-CN/knxUltimateHuePlug.html +1 -0
  117. package/nodes/locales/zh-CN/knxUltimateHueScene.html +1 -0
  118. package/nodes/locales/zh-CN/knxUltimateHueTapDial.html +1 -0
  119. package/nodes/locales/zh-CN/knxUltimateHueTemperatureSensor.html +1 -0
  120. package/nodes/locales/zh-CN/knxUltimateHueZigbeeConnectivity.html +1 -0
  121. package/nodes/locales/zh-CN/knxUltimateHuedevice_software_update.html +1 -0
  122. package/nodes/utils/hueControllerProfileAdapter.js +104 -0
  123. package/nodes/utils/hueControllerProfiles/runtime/area_motion.js +221 -0
  124. package/nodes/utils/hueControllerProfiles/runtime/button.js +295 -0
  125. package/nodes/utils/hueControllerProfiles/runtime/camera_motion.js +221 -0
  126. package/nodes/utils/hueControllerProfiles/runtime/contact.js +191 -0
  127. package/nodes/utils/hueControllerProfiles/runtime/device_power.js +185 -0
  128. package/nodes/utils/hueControllerProfiles/runtime/device_software_update.js +185 -0
  129. package/nodes/utils/hueControllerProfiles/runtime/humidity.js +204 -0
  130. package/nodes/utils/hueControllerProfiles/runtime/light.js +1583 -0
  131. package/nodes/utils/hueControllerProfiles/runtime/light_level.js +180 -0
  132. package/nodes/utils/hueControllerProfiles/runtime/motion.js +185 -0
  133. package/nodes/utils/hueControllerProfiles/runtime/plug.js +344 -0
  134. package/nodes/utils/hueControllerProfiles/runtime/relative_rotary.js +271 -0
  135. package/nodes/utils/hueControllerProfiles/runtime/scene.js +352 -0
  136. package/nodes/utils/hueControllerProfiles/runtime/temperature.js +187 -0
  137. package/nodes/utils/hueControllerProfiles/runtime/zigbee_connectivity.js +185 -0
  138. package/package.json +5 -2
  139. package/resources/hueControllerMigration.js +338 -0
  140. package/resources/hueControllerMigrationDialog.js +235 -0
  141. package/resources/hueControllerProfiles.js +9290 -0
@@ -0,0 +1,28 @@
1
+ 'use strict'
2
+
3
+ const { setupHueControllerRuntime } = require('./utils/hueControllerProfileAdapter')
4
+
5
+ module.exports = function (RED) {
6
+ // Keep the public wrapper intentionally boring. Device-specific behavior lives
7
+ // in the Controller-owned private profiles; this file owns only selection,
8
+ // startup containment and the single public Node-RED registration.
9
+ function knxUltimateHueController (config) {
10
+ try {
11
+ // The selected profile performs RED.nodes.createNode itself. Calling it
12
+ // here as a constructor-on-this preserves its complete, proven lifecycle.
13
+ setupHueControllerRuntime(RED, this, config)
14
+ } catch (error) {
15
+ // If a profile cannot start, still create a valid Node-RED node and surface
16
+ // the operational failure without allowing it to stop the runtime.
17
+ // Avoid a second createNode call when the profile failed after creating it.
18
+ if (!this.id) RED.nodes.createNode(this, config)
19
+ const message = error && error.message ? error.message : String(error)
20
+ RED.log.error(`knxUltimateHueController: ${message}`)
21
+ this.status({ fill: 'red', shape: 'dot', text: message })
22
+ this.error(message)
23
+ }
24
+ }
25
+
26
+ // This is the only registration produced by the Controller architecture.
27
+ RED.nodes.registerType('knxUltimateHueController', knxUltimateHueController)
28
+ }
@@ -352,8 +352,8 @@
352
352
  };
353
353
 
354
354
  RED.nodes.registerType('knxUltimateHueHumiditySensor', {
355
- category: 'KNX Ultimate HUE',
356
- color: '#C0C7E9',
355
+ category: 'deprecated',
356
+ color: '#E7E9F6',
357
357
  defaults: {
358
358
  server: { type: 'knxUltimate-config', required: false },
359
359
  serverHue: { type: 'hue-config', required: true },
@@ -372,9 +372,9 @@
372
372
  outputs: 1,
373
373
  icon: 'node-hue-icon.svg',
374
374
  label() {
375
- return this.name || 'Hue Humidity Sensor';
375
+ return `${this.name || 'Hue Humidity Sensor'} (deprecated)`;
376
376
  },
377
- paletteLabel: 'Hue Humidity Sensor',
377
+ paletteLabel: 'Hue Humidity Sensor (deprecated)',
378
378
  oneditprepare() {
379
379
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
380
380
  const node = this;
@@ -499,6 +499,16 @@
499
499
  </script>
500
500
 
501
501
  <script type="text/html" data-template-name="knxUltimateHueHumiditySensor">
502
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
503
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
504
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
505
+ </div>
506
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
507
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
508
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
509
+ </button>
510
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
511
+ </div>
502
512
  <div class="form-row" style="margin-bottom:10px;">
503
513
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
504
514
  </div>
@@ -583,6 +593,8 @@
583
593
  </script>
584
594
 
585
595
  <script type="text/markdown" data-help-name="knxUltimateHueHumiditySensor">
596
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
597
+
586
598
  <p>This node reads relative humidity (%) from a HUE humidity sensor and maps it to KNX.</p>
587
599
 
588
600
  Start typing in the GA field (name or Group Address) to link the KNX GA; devices appear while you type.
@@ -8,8 +8,8 @@
8
8
  (function () {
9
9
 
10
10
  RED.nodes.registerType("knxUltimateHueLight", {
11
- category: "KNX Ultimate HUE",
12
- color: "#C0C7E9",
11
+ category: "deprecated",
12
+ color: "#E7E9F6",
13
13
  defaults: {
14
14
  //buttonState: {value: true},
15
15
  server: { type: "knxUltimate-config", required: false },
@@ -136,9 +136,9 @@
136
136
  outputs: 0,
137
137
  icon: "node-hue-icon.svg",
138
138
  label: function () {
139
- return this.name || "Hue Light/Outlet";
139
+ return `${this.name || "Hue Light/Outlet"} (deprecated)`;
140
140
  },
141
- paletteLabel: "Hue Light/Outlet",
141
+ paletteLabel: "Hue Light/Outlet (deprecated)",
142
142
  oneditprepare: function () {
143
143
  // Go to the help panel
144
144
  try {
@@ -1761,6 +1761,16 @@
1761
1761
 
1762
1762
 
1763
1763
  <script type="text/html" data-template-name="knxUltimateHueLight">
1764
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
1765
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
1766
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
1767
+ </div>
1768
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
1769
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
1770
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
1771
+ </button>
1772
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
1773
+ </div>
1764
1774
  <div class="form-row" style="margin-bottom:10px;">
1765
1775
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
1766
1776
  </div>
@@ -2370,6 +2380,8 @@
2370
2380
 
2371
2381
 
2372
2382
  <script type="text/markdown" data-help-name="knxUltimateHueLight">
2383
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
2384
+
2373
2385
  <p>This node controls Philips Hue lights (single or grouped) and maps their commands/states to KNX.</p>
2374
2386
 
2375
2387
  **General**
@@ -347,8 +347,8 @@
347
347
  };
348
348
 
349
349
  RED.nodes.registerType('knxUltimateHueLightSensor', {
350
- category: 'KNX Ultimate HUE',
351
- color: '#C0C7E9',
350
+ category: 'deprecated',
351
+ color: '#E7E9F6',
352
352
  defaults: {
353
353
  server: { type: 'knxUltimate-config', required: false },
354
354
  serverHue: { type: 'hue-config', required: true },
@@ -365,9 +365,9 @@
365
365
  outputs: 1,
366
366
  icon: 'node-hue-icon.svg',
367
367
  label() {
368
- return this.name || 'Hue Light Sensor';
368
+ return `${this.name || 'Hue Light Sensor'} (deprecated)`;
369
369
  },
370
- paletteLabel: 'Hue Light Sensor',
370
+ paletteLabel: 'Hue Light Sensor (deprecated)',
371
371
  oneditprepare() {
372
372
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
373
373
  const node = this;
@@ -487,6 +487,16 @@
487
487
  </script>
488
488
 
489
489
  <script type="text/html" data-template-name="knxUltimateHueLightSensor">
490
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
491
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
492
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
493
+ </div>
494
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
495
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
496
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
497
+ </button>
498
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
499
+ </div>
490
500
  <div class="form-row" style="margin-bottom:10px;">
491
501
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
492
502
  </div>
@@ -576,6 +586,8 @@
576
586
 
577
587
 
578
588
  <script type="text/markdown" data-help-name="knxUltimateHueLightSensor">
589
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
590
+
579
591
  <p>This node reads lux events from a Hue Light Sensor and maps them to KNX.</p>
580
592
 
581
593
  It emits the ambient illuminance (lux) each time it changes. Start typing in the GA field (name or Group Address) to link the KNX GA; devices appear while you type.
@@ -358,8 +358,8 @@
358
358
  };
359
359
 
360
360
  RED.nodes.registerType('knxUltimateHueMotion', {
361
- category: 'KNX Ultimate HUE',
362
- color: '#C0C7E9',
361
+ category: 'deprecated',
362
+ color: '#E7E9F6',
363
363
  defaults: {
364
364
  server: { type: 'knxUltimate-config', required: false },
365
365
  serverHue: { type: 'hue-config', required: true },
@@ -375,9 +375,9 @@
375
375
  outputs: 1,
376
376
  icon: 'node-hue-icon.svg',
377
377
  label() {
378
- return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueMotion:knxUltimateHueMotion.paletteLabel');
378
+ return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueMotion:knxUltimateHueMotion.paletteLabel')} (deprecated)`;
379
379
  },
380
- paletteLabel: 'Hue Motion',
380
+ paletteLabel: 'Hue Motion (deprecated)',
381
381
  oneditprepare() {
382
382
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
383
383
  const node = this;
@@ -491,6 +491,16 @@
491
491
  </script>
492
492
 
493
493
  <script type="text/html" data-template-name="knxUltimateHueMotion">
494
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
495
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
496
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
497
+ </div>
498
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
499
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
500
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
501
+ </button>
502
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
503
+ </div>
494
504
  <div class="form-row" style="margin-bottom:10px;">
495
505
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
496
506
  </div>
@@ -571,6 +581,8 @@
571
581
 
572
582
 
573
583
  <script type="text/markdown" data-help-name="knxUltimateHueMotion">
584
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
585
+
574
586
  <p>This node listens to a Hue motion sensor and mirrors the events to KNX and/or your Node-RED flow.</p>
575
587
 
576
588
  Start typing the KNX device name or Group Address in the GA field; suggestions appear while you type. Hit the refresh button next to "Hue sensor” to reload the device list from the bridge if you add new sensors.
@@ -119,8 +119,8 @@
119
119
  };
120
120
 
121
121
  RED.nodes.registerType('knxUltimateHuePlug', {
122
- category: 'KNX Ultimate HUE',
123
- color: '#C0C7E9',
122
+ category: 'deprecated',
123
+ color: '#E7E9F6',
124
124
  defaults: {
125
125
  server: { type: 'knxUltimate-config', required: false },
126
126
  serverHue: { type: 'hue-config', required: true },
@@ -151,9 +151,9 @@
151
151
  outputs: 0,
152
152
  icon: 'node-hue-icon.svg',
153
153
  label() {
154
- return this.name || 'Hue Plug/Outlet';
154
+ return `${this.name || 'Hue Plug/Outlet'} (deprecated)`;
155
155
  },
156
- paletteLabel: 'Hue Plug/Outlet',
156
+ paletteLabel: 'Hue Plug/Outlet (deprecated)',
157
157
  oneditprepare() {
158
158
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
159
159
  const node = this;
@@ -429,6 +429,16 @@
429
429
  </script>
430
430
 
431
431
  <script type="text/html" data-template-name="knxUltimateHuePlug">
432
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
433
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
434
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
435
+ </div>
436
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
437
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
438
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
439
+ </button>
440
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
441
+ </div>
432
442
  <div class="form-row" style="margin-bottom:10px;">
433
443
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
434
444
  </div>
@@ -543,4 +553,6 @@
543
553
  </script>
544
554
 
545
555
  <script type="text/markdown" data-help-name="knxUltimateHuePlug">
556
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
557
+
546
558
  </script>
@@ -512,8 +512,8 @@
512
512
  };
513
513
 
514
514
  RED.nodes.registerType('knxUltimateHueScene', {
515
- category: 'KNX Ultimate HUE',
516
- color: '#C0C7E9',
515
+ category: 'deprecated',
516
+ color: '#E7E9F6',
517
517
  defaults: {
518
518
  server: { type: 'knxUltimate-config', required: false },
519
519
  serverHue: { type: 'hue-config', required: true },
@@ -540,12 +540,12 @@
540
540
  outputs: 0,
541
541
  icon: 'node-hue-icon.svg',
542
542
  label() {
543
- if (this.selectedModeTabNumber === undefined) return this.name;
544
- if (Number(this.selectedModeTabNumber) === 0) return this.name || this.namescene || 'Hue Scene';
545
- if (Number(this.selectedModeTabNumber) === 1) return this.namesceneMulti || this.name || 'Hue Scene';
546
- return this.name || 'Hue Scene';
543
+ let nodeLabel = this.name;
544
+ if (Number(this.selectedModeTabNumber) === 0) nodeLabel = this.name || this.namescene || 'Hue Scene';
545
+ if (Number(this.selectedModeTabNumber) === 1) nodeLabel = this.namesceneMulti || this.name || 'Hue Scene';
546
+ return `${nodeLabel || 'Hue Scene'} (deprecated)`;
547
547
  },
548
- paletteLabel: 'Hue Scene',
548
+ paletteLabel: 'Hue Scene (deprecated)',
549
549
  oneditprepare() {
550
550
  const node = this;
551
551
  try {
@@ -770,6 +770,16 @@
770
770
  </script>
771
771
 
772
772
  <script type="text/html" data-template-name="knxUltimateHueScene">
773
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
774
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
775
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
776
+ </div>
777
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
778
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
779
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
780
+ </button>
781
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
782
+ </div>
773
783
  <div class="form-row" style="margin-bottom:10px;">
774
784
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
775
785
  </div>
@@ -900,6 +910,8 @@
900
910
 
901
911
 
902
912
  <script type="text/markdown" data-help-name="knxUltimateHueScene">
913
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
914
+
903
915
  The **Hue Scene** node exposes Hue scenes to KNX and can forward the raw Hue events to a Node-RED flow. The scene field supports autocomplete; use the refresh icon after adding scenes on the bridge so the list stays up to date.
904
916
 
905
917
  ### Tabs at a glance
@@ -365,8 +365,8 @@
365
365
  };
366
366
 
367
367
  RED.nodes.registerType('knxUltimateHueTapDial', {
368
- category: 'KNX Ultimate HUE',
369
- color: '#C0C7E9',
368
+ category: 'deprecated',
369
+ color: '#E7E9F6',
370
370
  defaults: {
371
371
  server: { type: 'knxUltimate-config', required: false },
372
372
  serverHue: { type: 'hue-config', required: true },
@@ -382,9 +382,9 @@
382
382
  outputs: 1,
383
383
  icon: 'node-hue-icon.svg',
384
384
  label() {
385
- return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueTapDial:knxUltimateHueTapDial.paletteLabel');
385
+ return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueTapDial:knxUltimateHueTapDial.paletteLabel')} (deprecated)`;
386
386
  },
387
- paletteLabel: 'Hue Tap Dial',
387
+ paletteLabel: 'Hue Tap Dial (deprecated)',
388
388
  oneditprepare() {
389
389
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
390
390
  const node = this;
@@ -498,6 +498,16 @@
498
498
  </script>
499
499
 
500
500
  <script type="text/html" data-template-name="knxUltimateHueTapDial">
501
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
502
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
503
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
504
+ </div>
505
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
506
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
507
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
508
+ </button>
509
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
510
+ </div>
501
511
  <div class="form-row" style="margin-bottom:10px;">
502
512
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
503
513
  </div>
@@ -578,6 +588,8 @@
578
588
 
579
589
 
580
590
  <script type="text/markdown" data-help-name="knxUltimateHueTapDial">
591
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
592
+
581
593
  The **Hue Tap Dial** node maps the rotary service of the Hue Tap Dial to KNX and forwards the raw Hue events to your flow. Use the refresh icon beside the device field after pairing a new dial on the bridge.
582
594
 
583
595
  ### Tabs
@@ -350,8 +350,8 @@
350
350
  };
351
351
 
352
352
  RED.nodes.registerType('knxUltimateHueTemperatureSensor', {
353
- category: 'KNX Ultimate HUE',
354
- color: '#C0C7E9',
353
+ category: 'deprecated',
354
+ color: '#E7E9F6',
355
355
  defaults: {
356
356
  server: { type: 'knxUltimate-config', required: false },
357
357
  serverHue: { type: 'hue-config', required: true },
@@ -368,9 +368,9 @@
368
368
  outputs: 1,
369
369
  icon: 'node-hue-icon.svg',
370
370
  label() {
371
- return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueTemperatureSensor:knxUltimateHueTemperatureSensor.paletteLabel');
371
+ return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueTemperatureSensor:knxUltimateHueTemperatureSensor.paletteLabel')} (deprecated)`;
372
372
  },
373
- paletteLabel: 'Hue Temperature Sensor',
373
+ paletteLabel: 'Hue Temperature Sensor (deprecated)',
374
374
  oneditprepare() {
375
375
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
376
376
  const node = this;
@@ -490,6 +490,16 @@
490
490
  </script>
491
491
 
492
492
  <script type="text/html" data-template-name="knxUltimateHueTemperatureSensor">
493
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
494
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
495
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
496
+ </div>
497
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
498
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
499
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
500
+ </button>
501
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
502
+ </div>
493
503
  <div class="form-row" style="margin-bottom:10px;">
494
504
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
495
505
  </div>
@@ -579,6 +589,8 @@
579
589
 
580
590
 
581
591
  <script type="text/markdown" data-help-name="knxUltimateHueTemperatureSensor">
592
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
593
+
582
594
  <p>This node reads temperature (°C) from a Hue temperature sensor and maps it to KNX.</p>
583
595
 
584
596
  Start typing in the GA field (name or Group Address) to link the KNX GA; devices appear while you type.
@@ -359,8 +359,8 @@
359
359
  };
360
360
 
361
361
  RED.nodes.registerType('knxUltimateHueZigbeeConnectivity', {
362
- category: 'KNX Ultimate HUE',
363
- color: '#C0C7E9',
362
+ category: 'deprecated',
363
+ color: '#E7E9F6',
364
364
  defaults: {
365
365
  server: { type: 'knxUltimate-config', required: false },
366
366
  serverHue: { type: 'hue-config', required: true },
@@ -377,9 +377,9 @@
377
377
  outputs: 1,
378
378
  icon: 'node-hue-icon.svg',
379
379
  label() {
380
- return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueZigbeeConnectivity:knxUltimateHueZigbeeConnectivity.paletteLabel');
380
+ return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueZigbeeConnectivity:knxUltimateHueZigbeeConnectivity.paletteLabel')} (deprecated)`;
381
381
  },
382
- paletteLabel: 'Hue Zigbee Connectivity',
382
+ paletteLabel: 'Hue Zigbee Connectivity (deprecated)',
383
383
  oneditprepare() {
384
384
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
385
385
  const node = this;
@@ -498,6 +498,16 @@
498
498
  </script>
499
499
 
500
500
  <script type="text/html" data-template-name="knxUltimateHueZigbeeConnectivity">
501
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
502
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
503
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
504
+ </div>
505
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
506
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
507
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
508
+ </button>
509
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
510
+ </div>
501
511
  <div class="form-row" style="margin-bottom:10px;">
502
512
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
503
513
  </div>
@@ -587,6 +597,8 @@
587
597
 
588
598
 
589
599
  <script type="text/markdown" data-help-name="knxUltimateHueZigbeeConnectivity">
600
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
601
+
590
602
  <p>This node retrieves the Zigbee connectivity status from a Hue device and exposes it to KNX.</p>
591
603
 
592
604
  Start typing the KNX device name or Group Address in the GA field; suggestions appear while you type.
@@ -364,8 +364,8 @@
364
364
  };
365
365
 
366
366
  RED.nodes.registerType('knxUltimateHuedevice_software_update', {
367
- category: 'KNX Ultimate HUE',
368
- color: '#C0C7E9',
367
+ category: 'deprecated',
368
+ color: '#E7E9F6',
369
369
  defaults: {
370
370
  server: { type: 'knxUltimate-config', required: false },
371
371
  serverHue: { type: 'hue-config', required: true },
@@ -382,9 +382,9 @@
382
382
  outputs: 1,
383
383
  icon: 'node-hue-icon.svg',
384
384
  label() {
385
- return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHuedevice_software_update:knxUltimateHuedevice_software_update.paletteLabel');
385
+ return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHuedevice_software_update:knxUltimateHuedevice_software_update.paletteLabel')} (deprecated)`;
386
386
  },
387
- paletteLabel: 'Hue Software Update',
387
+ paletteLabel: 'Hue Software Update (deprecated)',
388
388
  oneditprepare() {
389
389
  try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
390
390
  const node = this;
@@ -503,6 +503,16 @@
503
503
  </script>
504
504
 
505
505
  <script type="text/html" data-template-name="knxUltimateHuedevice_software_update">
506
+ <div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
507
+ <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
508
+ <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
509
+ </div>
510
+ <div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
511
+ <button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
512
+ <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
513
+ </button>
514
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
515
+ </div>
506
516
  <div class="form-row" style="margin-bottom:10px;">
507
517
  <span style="color:#ff0000"><i class="fa fa-youtube"></i></span>&nbsp;<a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
508
518
  </div>
@@ -592,6 +602,8 @@
592
602
 
593
603
 
594
604
  <script type="text/markdown" data-help-name="knxUltimateHuedevice_software_update">
605
+ > **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
606
+
595
607
  <p>This node monitors whether a selected Hue device has a software update available and publishes the status to KNX.</p>
596
608
 
597
609
  Start typing the name or group address of your KNX device in the GA field, the avaiable devices start showing up while
@@ -1,4 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueAreaMotion">
2
+ <p><strong>Veraltet:</strong> Dieser dedizierte HUE-Knoten bleibt für bestehende Flows verfügbar. Verwenden Sie <strong>HUE Controller</strong> für neue Projekte. Der Legacy-Knoten ist in der Palette und auf der Arbeitsfläche mit <code>(deprecated)</code> gekennzeichnet, verwendet eine hellere Farbe als HUE Controller und sein Editor zeigt oben einen Migrationshinweis. Der orange Migrationsbutton konvertiert alle Legacy-HUE-Knoten lokal; anschließend öffnet er einen bearbeitbaren E-Mail-Entwurf und die Spendenseite in einem neuen Browserfenster. Die E-Mail wird niemals automatisch gesendet. Nach Abschluss des Vorgangs bleibt eine feste Node-RED-Meldung sichtbar, bis Sie auf OK klicken.</p>
2
3
  <p>Der Hue Bewegungsbereich-Node lauscht auf MotionAware-Bereichsereignisse (Hue Bridge Pro) und spiegelt den aggregierten Bewegung / keine-Bewegung-Status nach KNX bzw. in Ihren Node-RED-Flow.</p>
3
4
 
4
5
  Geben Sie im GA-Feld (Name oder Gruppenadresse) die gewünschte KNX-GA ein; passende Einträge werden während der Eingabe vorgeschlagen.
@@ -33,4 +34,3 @@ Geben Sie im GA-Feld (Name oder Gruppenadresse) die gewünschte KNX-GA ein; pass
33
34
 
34
35
  `msg.payload` enthält den von MotionAware gelieferten, aggregierten Bewegungsstatus des ausgewählten Bereichs.
35
36
  </script>
36
-
@@ -1,4 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueBattery">
2
+ <p><strong>Veraltet:</strong> Dieser dedizierte HUE-Knoten bleibt für bestehende Flows verfügbar. Verwenden Sie <strong>HUE Controller</strong> für neue Projekte. Der Legacy-Knoten ist in der Palette und auf der Arbeitsfläche mit <code>(deprecated)</code> gekennzeichnet, verwendet eine hellere Farbe als HUE Controller und sein Editor zeigt oben einen Migrationshinweis. Der orange Migrationsbutton konvertiert alle Legacy-HUE-Knoten lokal; anschließend öffnet er einen bearbeitbaren E-Mail-Entwurf und die Spendenseite in einem neuen Browserfenster. Die E-Mail wird niemals automatisch gesendet. Nach Abschluss des Vorgangs bleibt eine feste Node-RED-Meldung sichtbar, bis Sie auf OK klicken.</p>
2
3
  <p>Dieser Node spiegelt den Batteriestand eines Hue-Geräts nach KNX und löst Ereignisse aus, sobald sich der Wert ändert.</p>
3
4
 
4
5
  Im GA-Feld den KNX-Gerätenamen oder die Gruppenadresse eingeben; beim Tippen erscheinen Vorschläge. Über das Aktualisieren-Symbol neben "Hue Sensor" lässt sich die Geräteliste der Hue-Bridge neu laden.
@@ -1,4 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueButton">
2
+ <p><strong>Veraltet:</strong> Dieser dedizierte HUE-Knoten bleibt für bestehende Flows verfügbar. Verwenden Sie <strong>HUE Controller</strong> für neue Projekte. Der Legacy-Knoten ist in der Palette und auf der Arbeitsfläche mit <code>(deprecated)</code> gekennzeichnet, verwendet eine hellere Farbe als HUE Controller und sein Editor zeigt oben einen Migrationshinweis. Der orange Migrationsbutton konvertiert alle Legacy-HUE-Knoten lokal; anschließend öffnet er einen bearbeitbaren E-Mail-Entwurf und die Spendenseite in einem neuen Browserfenster. Die E-Mail wird niemals automatisch gesendet. Nach Abschluss des Vorgangs bleibt eine feste Node-RED-Meldung sichtbar, bis Sie auf OK klicken.</p>
2
3
  <p>Der Hue-Taster-Node spiegelt Hue-Taster-Ereignisse auf KNX und den Flow-Ausgang und nutzt das Attribut <code>button.button_report.event</code>.</p>
3
4
 
4
5
  Tippen Sie im GA-Feld (Name oder Gruppenadresse), um die KNX-GA zu verknüpfen; passende Einträge erscheinen während der Eingabe.
@@ -1,4 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueCameraMotion">
2
+ <p><strong>Veraltet:</strong> Dieser dedizierte HUE-Knoten bleibt für bestehende Flows verfügbar. Verwenden Sie <strong>HUE Controller</strong> für neue Projekte. Der Legacy-Knoten ist in der Palette und auf der Arbeitsfläche mit <code>(deprecated)</code> gekennzeichnet, verwendet eine hellere Farbe als HUE Controller und sein Editor zeigt oben einen Migrationshinweis. Der orange Migrationsbutton konvertiert alle Legacy-HUE-Knoten lokal; anschließend öffnet er einen bearbeitbaren E-Mail-Entwurf und die Spendenseite in einem neuen Browserfenster. Die E-Mail wird niemals automatisch gesendet. Nach Abschluss des Vorgangs bleibt eine feste Node-RED-Meldung sichtbar, bis Sie auf OK klicken.</p>
2
3
  <p>Der Hue Camera Motion Node lauscht auf Bewegungsereignisse der Philips-Hue-Kameras und spiegelt den erkannt/nicht-erkannt-Status in KNX.</p>
3
4
 
4
5
  Geben Sie im GA-Feld (Name oder Gruppenadresse) den gewünschten Wert ein; passende Geräte werden während der Eingabe vorgeschlagen.
@@ -1,4 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueContactSensor">
2
+ <p><strong>Veraltet:</strong> Dieser dedizierte HUE-Knoten bleibt für bestehende Flows verfügbar. Verwenden Sie <strong>HUE Controller</strong> für neue Projekte. Der Legacy-Knoten ist in der Palette und auf der Arbeitsfläche mit <code>(deprecated)</code> gekennzeichnet, verwendet eine hellere Farbe als HUE Controller und sein Editor zeigt oben einen Migrationshinweis. Der orange Migrationsbutton konvertiert alle Legacy-HUE-Knoten lokal; anschließend öffnet er einen bearbeitbaren E-Mail-Entwurf und die Spendenseite in einem neuen Browserfenster. Die E-Mail wird niemals automatisch gesendet. Nach Abschluss des Vorgangs bleibt eine feste Node-RED-Meldung sichtbar, bis Sie auf OK klicken.</p>
2
3
  <p>Dieser Node leitet Ereignisse eines HUE-Kontaktsensors weiter und ordnet sie KNX-Gruppenadressen zu.</p>
3
4
 
4
5
  Tippen Sie in das Feld GA, die Name oder die Gruppenadresse Ihres KNX -Geräts, die avabaren Geräte werden beim Eingeben angezeigt.