node-red-contrib-knx-ultimate 6.2.3-beta.0 → 6.2.3-beta.2

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 (122) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/nodes/knxUltimateHueAreaMotion.html +1 -0
  3. package/nodes/knxUltimateHueBattery.html +1 -0
  4. package/nodes/knxUltimateHueButton.html +1 -0
  5. package/nodes/knxUltimateHueCameraMotion.html +1 -0
  6. package/nodes/knxUltimateHueContactSensor.html +1 -0
  7. package/nodes/knxUltimateHueController.html +22 -141
  8. package/nodes/knxUltimateHueHumiditySensor.html +1 -0
  9. package/nodes/knxUltimateHueLight.html +1 -0
  10. package/nodes/knxUltimateHueLightSensor.html +1 -0
  11. package/nodes/knxUltimateHueMotion.html +1 -0
  12. package/nodes/knxUltimateHuePlug.html +1 -0
  13. package/nodes/knxUltimateHueScene.html +1 -0
  14. package/nodes/knxUltimateHueTapDial.html +1 -0
  15. package/nodes/knxUltimateHueTemperatureSensor.html +1 -0
  16. package/nodes/knxUltimateHueZigbeeConnectivity.html +1 -0
  17. package/nodes/knxUltimateHuedevice_software_update.html +1 -0
  18. package/nodes/locales/de/knxUltimateHueAreaMotion.html +1 -1
  19. package/nodes/locales/de/knxUltimateHueBattery.html +1 -1
  20. package/nodes/locales/de/knxUltimateHueButton.html +1 -1
  21. package/nodes/locales/de/knxUltimateHueCameraMotion.html +1 -1
  22. package/nodes/locales/de/knxUltimateHueContactSensor.html +1 -1
  23. package/nodes/locales/de/knxUltimateHueController.html +4 -5
  24. package/nodes/locales/de/knxUltimateHueController.json +18 -19
  25. package/nodes/locales/de/knxUltimateHueHumiditySensor.html +1 -1
  26. package/nodes/locales/de/knxUltimateHueLight.html +1 -1
  27. package/nodes/locales/de/knxUltimateHueLightSensor.html +1 -1
  28. package/nodes/locales/de/knxUltimateHueMotion.html +1 -1
  29. package/nodes/locales/de/knxUltimateHuePlug.html +1 -1
  30. package/nodes/locales/de/knxUltimateHueScene.html +1 -1
  31. package/nodes/locales/de/knxUltimateHueTapDial.html +1 -1
  32. package/nodes/locales/de/knxUltimateHueTemperatureSensor.html +1 -1
  33. package/nodes/locales/de/knxUltimateHueZigbeeConnectivity.html +1 -1
  34. package/nodes/locales/de/knxUltimateHuedevice_software_update.html +1 -1
  35. package/nodes/locales/en/knxUltimateHueAreaMotion.html +1 -1
  36. package/nodes/locales/en/knxUltimateHueBattery.html +1 -1
  37. package/nodes/locales/en/knxUltimateHueButton.html +1 -1
  38. package/nodes/locales/en/knxUltimateHueCameraMotion.html +1 -1
  39. package/nodes/locales/en/knxUltimateHueContactSensor.html +1 -1
  40. package/nodes/locales/en/knxUltimateHueController.html +4 -5
  41. package/nodes/locales/en/knxUltimateHueController.json +18 -19
  42. package/nodes/locales/en/knxUltimateHueHumiditySensor.html +1 -1
  43. package/nodes/locales/en/knxUltimateHueLight.html +1 -1
  44. package/nodes/locales/en/knxUltimateHueLightSensor.html +1 -1
  45. package/nodes/locales/en/knxUltimateHueMotion.html +1 -1
  46. package/nodes/locales/en/knxUltimateHuePlug.html +1 -1
  47. package/nodes/locales/en/knxUltimateHueScene.html +1 -1
  48. package/nodes/locales/en/knxUltimateHueTapDial.html +1 -1
  49. package/nodes/locales/en/knxUltimateHueTemperatureSensor.html +1 -1
  50. package/nodes/locales/en/knxUltimateHueZigbeeConnectivity.html +1 -1
  51. package/nodes/locales/en/knxUltimateHuedevice_software_update.html +1 -1
  52. package/nodes/locales/es/knxUltimateHueAreaMotion.html +1 -1
  53. package/nodes/locales/es/knxUltimateHueBattery.html +1 -1
  54. package/nodes/locales/es/knxUltimateHueButton.html +1 -1
  55. package/nodes/locales/es/knxUltimateHueCameraMotion.html +1 -1
  56. package/nodes/locales/es/knxUltimateHueContactSensor.html +1 -1
  57. package/nodes/locales/es/knxUltimateHueController.html +4 -5
  58. package/nodes/locales/es/knxUltimateHueController.json +18 -19
  59. package/nodes/locales/es/knxUltimateHueHumiditySensor.html +1 -1
  60. package/nodes/locales/es/knxUltimateHueLight.html +1 -1
  61. package/nodes/locales/es/knxUltimateHueLightSensor.html +1 -1
  62. package/nodes/locales/es/knxUltimateHueMotion.html +1 -1
  63. package/nodes/locales/es/knxUltimateHuePlug.html +1 -1
  64. package/nodes/locales/es/knxUltimateHueScene.html +1 -1
  65. package/nodes/locales/es/knxUltimateHueTapDial.html +1 -1
  66. package/nodes/locales/es/knxUltimateHueTemperatureSensor.html +1 -1
  67. package/nodes/locales/es/knxUltimateHueZigbeeConnectivity.html +1 -1
  68. package/nodes/locales/es/knxUltimateHuedevice_software_update.html +1 -1
  69. package/nodes/locales/fr/knxUltimateHueAreaMotion.html +1 -1
  70. package/nodes/locales/fr/knxUltimateHueBattery.html +1 -1
  71. package/nodes/locales/fr/knxUltimateHueButton.html +1 -1
  72. package/nodes/locales/fr/knxUltimateHueCameraMotion.html +1 -1
  73. package/nodes/locales/fr/knxUltimateHueContactSensor.html +1 -1
  74. package/nodes/locales/fr/knxUltimateHueController.html +4 -5
  75. package/nodes/locales/fr/knxUltimateHueController.json +18 -19
  76. package/nodes/locales/fr/knxUltimateHueHumiditySensor.html +1 -1
  77. package/nodes/locales/fr/knxUltimateHueLight.html +1 -1
  78. package/nodes/locales/fr/knxUltimateHueLightSensor.html +1 -1
  79. package/nodes/locales/fr/knxUltimateHueMotion.html +1 -1
  80. package/nodes/locales/fr/knxUltimateHuePlug.html +1 -1
  81. package/nodes/locales/fr/knxUltimateHueScene.html +1 -1
  82. package/nodes/locales/fr/knxUltimateHueTapDial.html +1 -1
  83. package/nodes/locales/fr/knxUltimateHueTemperatureSensor.html +1 -1
  84. package/nodes/locales/fr/knxUltimateHueZigbeeConnectivity.html +1 -1
  85. package/nodes/locales/fr/knxUltimateHuedevice_software_update.html +1 -1
  86. package/nodes/locales/it/knxUltimateHueAreaMotion.html +1 -1
  87. package/nodes/locales/it/knxUltimateHueBattery.html +1 -1
  88. package/nodes/locales/it/knxUltimateHueButton.html +1 -1
  89. package/nodes/locales/it/knxUltimateHueCameraMotion.html +1 -1
  90. package/nodes/locales/it/knxUltimateHueContactSensor.html +1 -1
  91. package/nodes/locales/it/knxUltimateHueController.html +4 -5
  92. package/nodes/locales/it/knxUltimateHueController.json +18 -19
  93. package/nodes/locales/it/knxUltimateHueHumiditySensor.html +1 -1
  94. package/nodes/locales/it/knxUltimateHueLight.html +1 -1
  95. package/nodes/locales/it/knxUltimateHueLightSensor.html +1 -1
  96. package/nodes/locales/it/knxUltimateHueMotion.html +1 -1
  97. package/nodes/locales/it/knxUltimateHuePlug.html +1 -1
  98. package/nodes/locales/it/knxUltimateHueScene.html +1 -1
  99. package/nodes/locales/it/knxUltimateHueTapDial.html +1 -1
  100. package/nodes/locales/it/knxUltimateHueTemperatureSensor.html +1 -1
  101. package/nodes/locales/it/knxUltimateHueZigbeeConnectivity.html +1 -1
  102. package/nodes/locales/it/knxUltimateHuedevice_software_update.html +1 -1
  103. package/nodes/locales/zh-CN/knxUltimateHueAreaMotion.html +1 -1
  104. package/nodes/locales/zh-CN/knxUltimateHueBattery.html +1 -1
  105. package/nodes/locales/zh-CN/knxUltimateHueButton.html +1 -1
  106. package/nodes/locales/zh-CN/knxUltimateHueCameraMotion.html +1 -1
  107. package/nodes/locales/zh-CN/knxUltimateHueContactSensor.html +1 -1
  108. package/nodes/locales/zh-CN/knxUltimateHueController.html +4 -5
  109. package/nodes/locales/zh-CN/knxUltimateHueController.json +18 -19
  110. package/nodes/locales/zh-CN/knxUltimateHueHumiditySensor.html +1 -1
  111. package/nodes/locales/zh-CN/knxUltimateHueLight.html +1 -1
  112. package/nodes/locales/zh-CN/knxUltimateHueLightSensor.html +1 -1
  113. package/nodes/locales/zh-CN/knxUltimateHueMotion.html +1 -1
  114. package/nodes/locales/zh-CN/knxUltimateHuePlug.html +1 -1
  115. package/nodes/locales/zh-CN/knxUltimateHueScene.html +1 -1
  116. package/nodes/locales/zh-CN/knxUltimateHueTapDial.html +1 -1
  117. package/nodes/locales/zh-CN/knxUltimateHueTemperatureSensor.html +1 -1
  118. package/nodes/locales/zh-CN/knxUltimateHueZigbeeConnectivity.html +1 -1
  119. package/nodes/locales/zh-CN/knxUltimateHuedevice_software_update.html +1 -1
  120. package/package.json +1 -1
  121. package/resources/hueControllerMigration.js +145 -6
  122. package/resources/hueControllerMigrationDialog.js +157 -111
package/CHANGELOG.md CHANGED
@@ -6,16 +6,17 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
- **Version 6.2.3-beta.0** - August 2026<br/>
9
+ **Version 6.2.3-beta.2** - August 2026<br/>
10
10
 
11
- - **HUE Controller — unified Hue API v2 node**: added one controller node covering the complete set of existing Hue functions: lights and grouped lights, plugs, buttons, Tap dial, motion and camera motion, contacts, light level, temperature, humidity, scenes, battery, Zigbee connectivity and device software update. The compact device-function selector uses one third of the available width and opens the established dedicated editor with its localized labels; KNX mapping fields are hidden whenever no **KNX Gateway** is selected, including `none`, an empty value and **Add new...**. The YouTube tutorial playlist now appears once at the top of the editor, while inline `form-tips` are removed from the unified UI and their useful guidance remains in the multilingual help. A local paste-in migration tool converts a complete exported flow from the dedicated HUE node types to HUE Controller without inspecting or changing the open flow, preserving IDs, configuration references, properties, positions, wires and dynamic pin counts in the copyable JSON output. Because Node-RED excludes credentials from flow exports, same-instance migration now omits the referenced Hue and KNX config-node definitions by default while retaining their IDs, so the imported controllers reuse the existing configurations and their stored credentials; an explicit option keeps config nodes for cross-instance migration with a warning to re-enter credentials. Copying the converted flow now uses the asynchronous browser Clipboard API with a real selected-textarea fallback and selects the visible output for manual copying if the browser blocks both paths. Each profile executes the same mature runtime contract, preserving KNX telegram types, Hue event/status direction, flow pins and loop protection. Runtime implementations, editor definitions, templates and all six translation catalogs are embedded as package-internal HUE Controller profiles; registration order no longer matters, the KNX and Hue gateway fields remain real config-node selectors, and the controller has no runtime or editor dependency on deprecated node types. The original Hue Light node remains unchanged. Existing dedicated Hue nodes remain fully compatible and registered, use Node-RED's special `deprecated` category so they no longer appear in the palette, retain the lighter `#E7E9F6` color and `(deprecated)` canvas suffix without changing saved names, and show a localized HUE Controller migration notice at the top of their editors.<br/>
11
+ - **HUE Controller — unified Hue API v2 node**: added one controller node covering the complete set of existing Hue functions: lights and grouped lights, plugs, buttons, Tap dial, motion and camera motion, contacts, light level, temperature, humidity, scenes, battery, Zigbee connectivity and device software update. The compact device-function selector uses one third of the available width and opens the established dedicated editor with its localized labels; KNX mapping fields are hidden whenever no **KNX Gateway** is selected, including `none`, an empty value and **Add new...**. The YouTube tutorial playlist now appears once at the top of the editor, while routine inline `form-tips` are removed from the unified UI and a compact migration privacy disclaimer remains directly below the conversion button. The migration action runs entirely inside the browser and changes only the legacy HUE nodes requiring conversion, preserving every existing property, config reference, group, position and link; no flow or node data leaves the editor and the workspace remains undeployed for user review. After a successful conversion, an editable email draft addressed to the author opens without navigating the top-level Node-RED page and contains only the converted-node count and space for optional notes, while the PayPal donation page opens in a new browser window without flow data in its URL; the user decides whether to send the email and nothing is sent automatically. Each profile executes the same mature runtime contract, preserving KNX telegram types, Hue event/status direction, flow pins and loop protection. Runtime implementations, editor definitions, templates and all six translation catalogs are embedded as package-internal HUE Controller profiles; registration order no longer matters, the KNX and Hue gateway fields remain real config-node selectors, and the controller has no runtime or editor dependency on deprecated node types. The original Hue Light node remains unchanged. Existing dedicated Hue nodes remain fully compatible and registered, use Node-RED's special `deprecated` category so they no longer appear in the palette, retain the lighter `#E7E9F6` color and `(deprecated)` canvas suffix without changing saved names, and show a localized HUE Controller migration notice at the top of their editors.<br/>
12
12
  - **HUE Controller — complete per-function help**: the established help of every dedicated Hue node is now incorporated under the corresponding HUE Controller function key, with an anchor index and automatic sidebar focus when the function changes. The same 15-section reference is included in the Controller wiki documentation in EN, IT, DE, FR, ES and zh-CN; legacy deprecation notices are deliberately excluded from the embedded copies.<br/>
13
13
  - **HUE Controller — legacy-independent maintenance boundary**: private runtime profiles and the private editor/template/translation sources are now the canonical implementation of HUE Controller. Its generator and consistency check read only those private sources and never inspect the frozen legacy nodes, so future Controller fixes remain isolated and the dedicated deprecated nodes can eventually be removed without breaking either runtime or UI. Added detailed architecture and lifecycle comments around runtime constructor capture, RED facades, editor mounting, profile drafts, dynamic pins, translations and the Hue Light bootstrap path.<br/>
14
14
  - **HUE Controller — consolidated documentation**: removed all dedicated legacy Hue nodes from the multilingual documentation home cards and HUE navigation, leaving only Hue Bridge configuration and HUE Controller. Reworked the Controller page in EN, IT, DE, FR, ES and zh-CN with a responsive visual overview, the complete 15-function capability map, common Controller behavior, a four-step setup path, optional-KNX guidance, migration details and the full per-function reference inherited from the former dedicated nodes.<br/>
15
15
  - **HUE Controller — visible migration action**: highlighted the legacy-flow migration button with a high-contrast orange treatment, darker hover/active states and an accessible keyboard focus ring so it is immediately recognizable in light and dark Node-RED editor themes.<br/>
16
16
  - **HUE Controller documentation routing**: added canonical Jekyll front matter and localized permalinks to every HUE Controller wiki page, fixing the GitHub Pages `404` and restoring correct links between EN, IT, DE, FR, ES and zh-CN.<br/>
17
17
  - **Matter documentation visual refresh**: redesigned the Matter Controller, Matter Bridge configuration and Expose KNX to Matter wiki introductions in EN, IT, DE, FR, ES and zh-CN. The responsive visual overviews now surface the controller lifecycle, commissioning and backup workflow, persistent multi-fabric bridge identity, live endpoint reconciliation, the complete 17-profile device map and concise setup paths while retaining the established technical reference below.<br/>
18
- - **HUE Controller — contextual migration action**: the highlighted legacy-flow migration button now appears in HUE Controller only when the Node-RED editor finds at least one registered legacy HUE node in the current flows, and the same orange action is available directly below the deprecation notice in every dedicated legacy HUE editor. All 15 legacy editors share one delegated dialog implementation and the canonical converter; the read-only Controller scan affects visibility only, while conversion remains isolated from editor state and processes exclusively the flow JSON pasted by the user.<br/>
18
+ - **HUE Controller — contextual migration action**: the highlighted legacy-flow migration button now appears in HUE Controller only when the Node-RED editor finds at least one registered legacy HUE node in the current flows, and the same orange action is available directly below the deprecation notice in every dedicated legacy HUE editor. All 15 legacy editors share one delegated confirmation dialog with the original pale-yellow backup warning before the fully local conversion and a separate safety notice requiring users to inspect every modified HUE node—function, configuration references, pins and wiring—before Deploy. Locked or changed flows and local conversion errors leave the workspace untouched; successful conversion creates one undoable editor change, opens an editable usage email draft without navigating away from Node-RED plus the PayPal donation page in a new browser window, and never deploys or sends email automatically. When these steps finish, a fixed modal Node-RED success message remains visible until the user clicks **OK**.<br/>
19
+ - **HUE Controller — legacy KNX mapping preservation**: fixed asynchronous DPT selectors overwriting an existing value when a converted node was inspected and saved before their options had finished loading. Conversion now treats every GA and DPT already stored by all 15 legacy HUE node types as authoritative and preserves those values unchanged; it does not infer, replace or recover missing DPTs.<br/>
19
20
  - **HUE Controller — light capability discovery**: fixed single lights losing their Dim, Tunable White, RGB/HSV and native-effects KNX sections while the embedded Light editor was bootstrapping. Capability discovery now resolves the persisted Hue Bridge configuration instead of Node-RED's temporary `_ADD_` selector sentinel, so Hue API v2 `dimming`, `color_temperature`, `color` and `effects` capabilities enable the corresponding mappings correctly. The legacy Hue Light node remains unchanged.<br/>
20
21
  - **HUE Controller — bounded Hue Bridge wait**: restored the Light editor's spinning-hourglass dialog while the selected Hue Bridge is still loading resources. Readiness is polled every 500 ms and the editor is always released after about 10 seconds with a localized error; Save, Cancel, Close and function changes cancel the timer. Removed the Controller wrapper overrides that had forced the wait icon hidden, and replaced the legacy global-`this` timer with strict-mode-safe private state. The legacy Hue Light node remains unchanged.<br/>
21
22
  - **HUE Controller — compact KNX rows**: reduced the DPT selector to 90–105 px and the Name field to 70–115 px within Controller mapping rows, keeping GA, DPT and Name on one line instead of wrapping on narrower editor trays. Rows are identified from their strict DPT field IDs after the private profile is mounted, so the scoped layout applies consistently without changing any frozen legacy template or persisted value.<br/>
@@ -527,6 +527,7 @@
527
527
  <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">
528
528
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
529
529
  </button>
530
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
530
531
  </div>
531
532
  <div class="form-row" style="margin-bottom:10px;">
532
533
  <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>
@@ -506,6 +506,7 @@
506
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
507
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
508
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>
509
510
  </div>
510
511
  <div class="form-row" style="margin-bottom:10px;">
511
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>
@@ -624,6 +624,7 @@
624
624
  <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">
625
625
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
626
626
  </button>
627
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
627
628
  </div>
628
629
  <div class="form-row" style="margin-bottom:10px;">
629
630
  <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>
@@ -537,6 +537,7 @@
537
537
  <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">
538
538
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
539
539
  </button>
540
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
540
541
  </div>
541
542
  <div class="form-row" style="margin-bottom:10px;">
542
543
  <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>
@@ -497,6 +497,7 @@
497
497
  <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">
498
498
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
499
499
  </button>
500
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
500
501
  </div>
501
502
  <div class="form-row" style="margin-bottom:10px;">
502
503
  <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>
@@ -113,7 +113,15 @@
113
113
  if (!$field.length) return currentValue;
114
114
  if ($field.is(':checkbox')) return $field.prop('checked');
115
115
  if ($field.is(':radio')) return $field.filter(':checked').val();
116
- return $field.val();
116
+ const value = $field.val();
117
+ // DPT options are loaded asynchronously by the mounted profile. A select
118
+ // can therefore temporarily have no selected option even though the node
119
+ // has a valid saved value. Preserve that value when Save is pressed while
120
+ // the request is still in flight instead of persisting null.
121
+ if ($field.is('select') && (value === undefined || value === null)) {
122
+ return currentValue;
123
+ }
124
+ return value;
117
125
  };
118
126
 
119
127
  const translateProfileEditor = ($container, controllerType, nodeType) => {
@@ -217,9 +225,8 @@
217
225
  };
218
226
 
219
227
  const editorContainsLegacyHueNodes = () => {
220
- // This read-only scan controls visibility only. The converter itself
221
- // remains deliberately isolated from the open editor and still accepts
222
- // only JSON explicitly pasted by the user.
228
+ // This read-only scan controls visibility. The shared migration resource
229
+ // later converts each matching node entirely inside the editor.
223
230
  const migrationApi = window.KNXUltimateHueControllerMigration;
224
231
  if (!migrationApi || typeof migrationApi.isLegacyHueNode !== 'function') return false;
225
232
  if (!RED.nodes || typeof RED.nodes.eachNode !== 'function') return false;
@@ -237,145 +244,18 @@
237
244
  };
238
245
 
239
246
  const openLegacyMigrationDialog = (node) => {
240
- const migrationApi = window.KNXUltimateHueControllerMigration;
241
- if (!migrationApi || typeof migrationApi.convertLegacyHueFlowJson !== 'function') {
247
+ const dialogApi = window.KNXUltimateHueControllerMigrationDialog;
248
+ if (!dialogApi || typeof dialogApi.open !== 'function') {
242
249
  RED.notify(migrationText(node, 'migration_unavailable', 'The HUE migration tool is unavailable. Restart Node-RED after updating the package.'), 'error');
243
250
  return () => { };
244
251
  }
245
-
246
- const $dialog = $('<div class="hue-controller-migration-dialog"></div>').appendTo('body');
247
- $('<div class="hue-controller-migration-note"></div>')
248
- .text(migrationText(node, 'migration_privacy', 'Paste an exported Node-RED flow. Conversion happens locally and does not modify the open flow.'))
249
- .css({ marginBottom: '8px' })
250
- .appendTo($dialog);
251
- $('<div class="hue-controller-migration-credentials"></div>')
252
- .text(migrationText(node, 'migration_credentials_notice', 'Node-RED deliberately excludes keys and passwords from exported flows. The converter cannot read or recreate them.'))
253
- .css({ marginBottom: '12px', padding: '8px 10px', borderLeft: '4px solid #d79b00', background: '#fff8df' })
254
- .appendTo($dialog);
255
- $('<label for="hue-controller-migration-input"></label>')
256
- .text(migrationText(node, 'migration_input', 'Original flow JSON'))
257
- .css({ display: 'block', fontWeight: 'bold', marginBottom: '4px' })
258
- .appendTo($dialog);
259
- const $input = $('<textarea id="hue-controller-migration-input"></textarea>')
260
- .attr('placeholder', migrationText(node, 'migration_input_placeholder', 'Paste the complete Node-RED flow export here'))
261
- .css({ width: '100%', height: '190px', boxSizing: 'border-box', fontFamily: 'monospace', resize: 'vertical' })
262
- .appendTo($dialog);
263
- const $reuseConfigsRow = $('<div></div>')
264
- .css({ margin: '10px 0' })
265
- .appendTo($dialog);
266
- const $reuseConfigs = $('<input type="checkbox" id="hue-controller-migration-reuse-configs">')
267
- .prop('checked', true)
268
- .appendTo($reuseConfigsRow);
269
- $('<label for="hue-controller-migration-reuse-configs"></label>')
270
- .text(` ${migrationText(node, 'migration_reuse_configs', 'Reuse existing Hue and KNX config nodes (recommended)')}`)
271
- .css({ display: 'inline', fontWeight: 'bold' })
272
- .appendTo($reuseConfigsRow);
273
- $('<div></div>')
274
- .text(migrationText(node, 'migration_reuse_configs_help', 'Keep this selected when importing back into the same Node-RED installation. Referenced config nodes are omitted from the result, so their stored credentials remain untouched.'))
275
- .css({ margin: '4px 0 0 22px', color: '#666' })
276
- .appendTo($reuseConfigsRow);
277
- const $toolbar = $('<div></div>')
278
- .css({ display: 'flex', gap: '8px', alignItems: 'center', margin: '10px 0' })
279
- .appendTo($dialog);
280
- const $convert = $('<button type="button" class="red-ui-button"></button>')
281
- .append($('<i class="fa fa-exchange"></i>'))
282
- .append(document.createTextNode(` ${migrationText(node, 'migration_convert', 'Convert')}`))
283
- .appendTo($toolbar);
284
- const $copy = $('<button type="button" class="red-ui-button"></button>')
285
- .append($('<i class="fa fa-clipboard"></i>'))
286
- .append(document.createTextNode(` ${migrationText(node, 'migration_copy', 'Copy converted flow')}`))
287
- .prop('disabled', true)
288
- .appendTo($toolbar);
289
- const $status = $('<span class="hue-controller-migration-status"></span>')
290
- .css({ marginLeft: '4px' })
291
- .appendTo($toolbar);
292
- $('<label for="hue-controller-migration-output"></label>')
293
- .text(migrationText(node, 'migration_output', 'Converted flow JSON'))
294
- .css({ display: 'block', fontWeight: 'bold', marginBottom: '4px' })
295
- .appendTo($dialog);
296
- const $output = $('<textarea id="hue-controller-migration-output" readonly></textarea>')
297
- .css({ width: '100%', height: '230px', boxSizing: 'border-box', fontFamily: 'monospace', resize: 'vertical' })
298
- .appendTo($dialog);
299
-
300
- $convert.on('click.knxUltimateHueControllerMigration', () => {
301
- try {
302
- const result = migrationApi.convertLegacyHueFlowJson($input.val(), {
303
- reuseConfigNodes: $reuseConfigs.prop('checked')
304
- });
305
- $output.val(result.json).scrollTop(0);
306
- $copy.prop('disabled', false);
307
- if (result.convertedCount === 0) {
308
- $status.text(migrationText(node, 'migration_none', 'No legacy HUE nodes were found.')).css('color', '#a15c00');
309
- } else {
310
- let summary = migrationText(node, 'migration_summary', '{{count}} legacy HUE nodes converted.')
311
- .replace('{{count}}', String(result.convertedCount));
312
- let statusColor = '#1b7d33';
313
- if (result.omittedConfigCount > 0) {
314
- summary += ` ${migrationText(node, 'migration_summary_reused', '{{count}} referenced config nodes will be reused with their existing credentials.')
315
- .replace('{{count}}', String(result.omittedConfigCount))}`;
316
- } else if (!$reuseConfigs.prop('checked')) {
317
- summary += ` ${migrationText(node, 'migration_configs_included_warning', 'Config nodes are included without exported credentials; enter their keys and passwords after import.')}`;
318
- statusColor = '#a15c00';
319
- }
320
- $status.text(summary).css('color', statusColor);
321
- }
322
- } catch (error) {
323
- $output.val('');
324
- $copy.prop('disabled', true);
325
- const message = error && error.message ? error.message : String(error);
326
- $status
327
- .text(`${migrationText(node, 'migration_invalid', 'Invalid flow JSON:')} ${message}`)
328
- .css('color', '#b00020');
329
- }
330
- });
331
-
332
- $copy.on('click.knxUltimateHueControllerMigration', () => {
333
- const convertedJson = $output.val();
334
- if (!convertedJson) return;
335
- $copy.prop('disabled', true);
336
- migrationApi.copyTextToClipboard(convertedJson, {
337
- navigator: window.navigator,
338
- document: window.document
339
- }).then(() => {
340
- RED.notify(migrationText(node, 'migration_copy_success', 'Converted flow copied.'), 'success');
341
- }).catch(() => {
342
- const outputElement = $output.get(0);
343
- if (outputElement) {
344
- outputElement.focus();
345
- outputElement.select();
346
- if (typeof outputElement.setSelectionRange === 'function') {
347
- outputElement.setSelectionRange(0, convertedJson.length);
348
- }
349
- }
350
- RED.notify(migrationText(node, 'migration_copy_failed', 'Clipboard access was blocked. The converted JSON has been selected; copy it manually.'), 'error');
351
- }).finally(() => {
352
- $copy.prop('disabled', false);
353
- });
354
- });
355
-
356
- let closed = false;
357
- const closeDialog = () => {
358
- if (closed) return;
359
- closed = true;
360
- $convert.off('.knxUltimateHueControllerMigration');
361
- $copy.off('.knxUltimateHueControllerMigration');
362
- try { $dialog.dialog('destroy'); } catch (error) { /* empty */ }
363
- $dialog.remove();
364
- };
365
-
366
- $dialog.dialog({
367
- modal: true,
368
- width: Math.min(920, Math.max(620, $(window).width() - 80)),
369
- height: Math.min(760, Math.max(600, $(window).height() - 60)),
370
- title: migrationText(node, 'migration_title', 'Convert legacy HUE flow'),
371
- close: closeDialog,
372
- buttons: [{
373
- text: migrationText(node, 'migration_close', 'Close'),
374
- click() { $(this).dialog('close'); }
375
- }]
252
+ return dialogApi.open({
253
+ RED,
254
+ $,
255
+ windowObject: window,
256
+ documentObject: document,
257
+ translate: (key, fallback, values) => migrationText(node, key, fallback, values)
376
258
  });
377
- setTimeout(() => $input.trigger('focus'), 0);
378
- return closeDialog;
379
259
  };
380
260
 
381
261
  RED.nodes.registerType('knxUltimateHueController', {
@@ -651,6 +531,7 @@
651
531
  <i class="fa fa-exchange"></i>
652
532
  <span data-i18n="knxUltimateHueController.migration_button"></span>
653
533
  </button>
534
+ <div class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="knxUltimateHueController.migration_disclaimer"></div>
654
535
  </div>
655
536
  <div class="form-row">
656
537
  <label for="node-input-server">
@@ -717,7 +598,7 @@ Node-RED intentionally excludes credentials from flow exports. When importing in
717
598
 
718
599
  Each function uses its private mature runtime contract. Hue events remain status updates and are never reflected to Hue or KNX as new commands unless the selected function explicitly maps them to a KNX output. The Controller owns its Light implementation without modifying the original legacy Hue Light node.
719
600
 
720
- Dedicated legacy HUE nodes remain registered for existing flows, but are frozen and receive no new features or maintenance updates. Node-RED hides their special `deprecated` category from the palette, while existing instances remain editable, deployable, lighter than HUE Controller and visibly marked `(deprecated)` on the canvas. They also show a migration notice at the top of their editor. Use HUE Controller for new work or migrate them with the paste-in converter.
601
+ Dedicated legacy HUE nodes remain registered for existing flows, but are frozen and receive no new features or maintenance updates. Node-RED hides their special `deprecated` category from the palette, while existing instances remain editable, deployable, lighter than HUE Controller and visibly marked `(deprecated)` on the canvas. They also show a migration notice at the top of their editor. Use HUE Controller for new work or migrate them with the fully local conversion button; afterwards, the browser opens an editable usage email draft without navigating away from Node-RED and opens the donation page in a new browser window. The email is never sent automatically. Before Deploy, inspect every modified HUE node and verify its function, configuration references, pins and wiring. A fixed Node-RED completion message remains visible until you click **OK**.
721
602
 
722
603
  When no **KNX Gateway** is selected (including **none** and **Add new...**), the KNX mapping fields are hidden. Hue resource selection and flow-only options remain available.
723
604
 
@@ -727,7 +608,7 @@ While the Hue Bridge is still loading its resources, the Light editor displays a
727
608
 
728
609
  Changing **Device function** changes the visible editor and the node pin layout. After saving, reopen the node to verify the selected resource and mappings.
729
610
 
730
- KNX mapping rows keep GA, DPT and Name on one line. DPT selectors use a compact fixed range, while Name fields are shorter and may contract further on a narrow editor tray without changing their stored text.
611
+ KNX mapping rows keep GA, DPT and Name on one line. DPT selectors use a compact fixed range, while Name fields are shorter and may contract further on a narrow editor tray without changing their stored text. Saved DPT values are retained while selector options load asynchronously.
731
612
 
732
613
  <!-- HUE_CONTROLLER_PROFILE_HELP_START -->
733
614
 
@@ -507,6 +507,7 @@
507
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
508
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
509
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>
510
511
  </div>
511
512
  <div class="form-row" style="margin-bottom:10px;">
512
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>
@@ -1769,6 +1769,7 @@
1769
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
1770
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
1771
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>
1772
1773
  </div>
1773
1774
  <div class="form-row" style="margin-bottom:10px;">
1774
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>
@@ -495,6 +495,7 @@
495
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
496
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
497
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>
498
499
  </div>
499
500
  <div class="form-row" style="margin-bottom:10px;">
500
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>
@@ -499,6 +499,7 @@
499
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
500
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
501
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>
502
503
  </div>
503
504
  <div class="form-row" style="margin-bottom:10px;">
504
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>
@@ -437,6 +437,7 @@
437
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
438
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
439
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>
440
441
  </div>
441
442
  <div class="form-row" style="margin-bottom:10px;">
442
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>
@@ -778,6 +778,7 @@
778
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
779
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
780
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>
781
782
  </div>
782
783
  <div class="form-row" style="margin-bottom:10px;">
783
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>
@@ -506,6 +506,7 @@
506
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
507
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
508
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>
509
510
  </div>
510
511
  <div class="form-row" style="margin-bottom:10px;">
511
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>
@@ -498,6 +498,7 @@
498
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
499
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
500
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>
501
502
  </div>
502
503
  <div class="form-row" style="margin-bottom:10px;">
503
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>
@@ -506,6 +506,7 @@
506
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
507
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
508
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>
509
510
  </div>
510
511
  <div class="form-row" style="margin-bottom:10px;">
511
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>
@@ -511,6 +511,7 @@
511
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
512
  <i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
513
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>
514
515
  </div>
515
516
  <div class="form-row" style="margin-bottom:10px;">
516
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>
@@ -1,5 +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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
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>
4
4
 
5
5
  Geben Sie im GA-Feld (Name oder Gruppenadresse) die gewünschte KNX-GA ein; passende Einträge werden während der Eingabe vorgeschlagen.
@@ -1,5 +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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
3
  <p>Dieser Node spiegelt den Batteriestand eines Hue-Geräts nach KNX und löst Ereignisse aus, sobald sich der Wert ändert.</p>
4
4
 
5
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,5 +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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
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>
4
4
 
5
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,5 +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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
3
  <p>Der Hue Camera Motion Node lauscht auf Bewegungsereignisse der Philips-Hue-Kameras und spiegelt den erkannt/nicht-erkannt-Status in KNX.</p>
4
4
 
5
5
  Geben Sie im GA-Feld (Name oder Gruppenadresse) den gewünschten Wert ein; passende Geräte werden während der Eingabe vorgeschlagen.
@@ -1,5 +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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
3
  <p>Dieser Node leitet Ereignisse eines HUE-Kontaktsensors weiter und ordnet sie KNX-Gruppenadressen zu.</p>
4
4
 
5
5
  Tippen Sie in das Feld GA, die Name oder die Gruppenadresse Ihres KNX -Geräts, die avabaren Geräte werden beim Eingeben angezeigt.
@@ -3,16 +3,15 @@
3
3
  <p><strong>HUE Controller</strong> ist der einheitliche Knoten für Hue-API-v2-Ressourcen.</p>
4
4
  <p>Wählen Sie die Gerätefunktion und konfigurieren Sie anschließend dieselbe KNX-Zuordnung und dasselbe Verhalten wie im bewährten dedizierten Hue-Knoten.</p>
5
5
  <p>Die Auswahl der Gerätefunktion verwendet ein Drittel der verfügbaren Breite, damit der Editor kompakt bleibt.</p>
6
- <p>KNX-Zuordnungszeilen halten GA, DPT und Name in einer Zeile. DPT-Auswahl und Namensfeld verwenden kompakte Breiten; das Namensfeld kann sich in schmalen Editoren weiter verkleinern, ohne den gespeicherten Text zu ändern.</p>
6
+ <p>KNX-Zuordnungszeilen halten GA, DPT und Name in einer Zeile. DPT-Auswahl und Namensfeld verwenden kompakte Breiten; das Namensfeld kann sich in schmalen Editoren weiter verkleinern, ohne den gespeicherten Text zu ändern. Gespeicherte DPT-Werte bleiben erhalten, während die Auswahloptionen asynchron geladen werden.</p>
7
7
  <p>Unterstützt werden Leuchten und Leuchtengruppen, Steckdosen, Taster, Tap dial, Bewegungs- und Kamerabewegungsressourcen, Kontakte, Lichtstärke, Temperatur, Luftfeuchtigkeit, Szenen, Batterie, Zigbee-Verbindung und Softwareupdate.</p>
8
8
  <p>Wenn kein <strong>KNX-Gateway</strong> ausgewählt ist (einschließlich <code>none</code> und <em>Neu hinzufügen...</em>), werden die KNX-Zuordnungsfelder ausgeblendet; die Auswahl der Hue-Ressource und reine Flow-Optionen bleiben verfügbar.</p>
9
9
  <p>Bei einer einzelnen Leuchte richten sich die Bereiche <strong>Dimmen</strong>, <strong>Abstimmbares Weiß</strong>, <strong>RGB/HSV</strong> und native Effekte nach den Live-Fähigkeiten der ausgewählten Hue-API-v2-Ressource. Die zugehörigen KNX-Zuordnungen erscheinen automatisch, wenn die Leuchte <code>dimming</code>, <code>color_temperature</code> oder <code>color</code> bereitstellt.</p>
10
10
  <p>Während die Hue Bridge ihre Ressourcen lädt, zeigt der Leuchteneditor eine animierte Sanduhr und prüft die Bereitschaft alle 500 ms. Nach etwa 10 Sekunden wird der Editor freigegeben, die Zuordnungsregister bleiben verborgen und ein lokalisierter Fehler wird angezeigt. Speichern, Schließen oder ein Funktionswechsel beendet die ausstehende Wartezeit.</p>
11
11
  <p>Wenn ein Gateway ausgewählt ist, akzeptieren die Zuordnungsfelder eine KNX-Gruppenadresse oder einen importierten ETS-Namen; passende Datenpunkte werden von diesem Gateway geladen.</p>
12
- <p>Der Migrationsbutton wird nur angezeigt, wenn der Node-RED-Editor mindestens einen Legacy-HUE-Knoten in den aktuellen Flows erkennt. Derselbe orange Button steht auch direkt unter dem Deprecated-Hinweis in jedem Legacy-HUE-Editor bereit. Diese Prüfung ist schreibgeschützt; die Konvertierung verwendet weiterhin ausschließlich das vom Benutzer eingefügte JSON.</p>
13
- <p><strong>Legacy-HUE-Flow konvertieren</strong> akzeptiert einen vollständigen Node-RED-Flow-Export und liefert kopierbares JSON, in dem jeder unterstützte Legacy-HUE-Knoten durch HUE Controller ersetzt ist. Die Konvertierung erfolgt lokal und behält IDs, Konfigurationsreferenzen, Eigenschaften, Positionen und Verbindungen bei; der geöffnete Flow wird nicht verändert.</p>
14
- <p>Node-RED schließt Zugangsdaten absichtlich aus Flow-Exporten aus. Lassen Sie beim Import in dieselbe Installation <strong>Vorhandene Hue- und KNX-Konfigurationsknoten wiederverwenden</strong> aktiviert: Die referenzierten Konfigurationsobjekte werden ausgelassen, ihre IDs bleiben jedoch in den konvertierten Knoten erhalten, sodass vorhandene Schlüssel und Passwörter unverändert bleiben. Deaktivieren Sie die Option nur für eine andere Installation und geben Sie dort die Zugangsdaten nach dem Import erneut ein.</p>
15
- <p><strong>Konvertierten Flow kopieren</strong> verwendet die Clipboard API des Browsers und als Fallback ein temporäres Textfeld. Wenn beide Methoden blockiert werden, wird das Ausgabe-JSON für das manuelle Kopieren markiert.</p>
12
+ <p>Der Migrationsbutton wird nur angezeigt, wenn der Node-RED-Editor mindestens einen Legacy-HUE-Knoten in den aktuellen Flows erkennt. Derselbe orange Button steht unter dem Deprecated-Hinweis in jedem Legacy-HUE-Editor bereit.</p>
13
+ <p><strong>Legacy-HUE-Knoten konvertieren</strong> führt die gesamte Konvertierung im Browser aus und sendet keinerlei Flow- oder Knotendaten. Nach erfolgreicher lokaler Konvertierung öffnet der Browser einen bearbeitbaren E-Mail-Entwurf an den Autor, ohne Node-RED zu verlassen, und die Spendenseite in einem neuen Browserfenster. Der Entwurf enthält nur die Anzahl konvertierter Knoten und Platz für optionale Hinweise; er wird niemals automatisch gesendet und dem PayPal-Link werden keine Flow-Daten hinzugefügt.</p>
14
+ <p>Exportieren Sie vor dem Start eine Sicherung Ihrer Flows. Der Editor ändert ausschließlich die erkannten Legacy-HUE-Knoten in HUE-Controller-Instanzen. Vorhandene Eigenschaften, Konfigurationsreferenzen, Positionen, Gruppen und Verbindungen bleiben unverändert. Der Flow wird als geändert markiert, aber nicht automatisch deployt: Prüfen Sie ihn und klicken Sie selbst auf <strong>Deploy</strong>. Bei einem geänderten Knoten, einem gesperrten Flow oder einem lokalen Konvertierungsfehler bleibt der Flow unverändert. <strong>Sicherheitsprüfung:</strong> Prüfen Sie vor dem Deploy jeden geänderten HUE-Knoten einschließlich Funktion, Konfigurationsreferenzen, Ein-/Ausgangsanschlüssen und Verbindungen. Nach Abschluss bleibt eine feste Node-RED-Meldung sichtbar, bis Sie auf <strong>OK</strong> klicken.</p>
16
15
  <p>Hue-Ereignisse bleiben Statusaktualisierungen und werden nicht zu neuen Hue-Befehlen. HUE Controller enthält private Profile für Runtime, Editor, Vorlagen und Übersetzungen und ist daher nicht vom Laden der veralteten Knotentypen abhängig. Der ursprüngliche Hue-Light-Knoten bleibt unverändert. Die dedizierten Hue-Knoten bleiben für bestehende Flows registriert, sind jedoch eingefroren und erhalten keine neuen Funktionen oder Wartungsupdates. Node-RED blendet ihre spezielle Kategorie <code>deprecated</code> aus der Palette aus; vorhandene Instanzen bleiben bearbeitbar und einsatzfähig, verwenden eine hellere Farbe als HUE Controller, sind auf der Arbeitsfläche mit <code>(deprecated)</code> gekennzeichnet und zeigen oben im Editor einen Migrationshinweis.</p>
17
16
 
18
17
  <!-- HUE_CONTROLLER_PROFILE_HELP_START -->
@@ -6,26 +6,25 @@
6
6
  "knxUltimateHueController": {
7
7
  "device_function": "Gerätefunktion",
8
8
  "legacy_node_notice": "Dieser Legacy-HUE-Knoten ist veraltet. Verwenden Sie für neue Flows den neuen HUE Controller-Knoten.",
9
- "migration_button": "Legacy-HUE-Flow konvertieren",
10
- "migration_button_title": "Einen Node-RED-Flow einfügen und seine Legacy-HUE-Knoten konvertieren",
11
- "migration_title": "Legacy-HUE-Flow konvertieren",
12
- "migration_privacy": "Fügen Sie einen exportierten Node-RED-Flow ein. Die Konvertierung erfolgt lokal und ändert den geöffneten Flow nicht.",
13
- "migration_credentials_notice": "Node-RED schließt Schlüssel und Passwörter absichtlich aus exportierten Flows aus. Der Konverter kann sie weder lesen noch wiederherstellen.",
14
- "migration_reuse_configs": "Vorhandene Hue- und KNX-Konfigurationsknoten wiederverwenden (empfohlen)",
15
- "migration_reuse_configs_help": "Lassen Sie diese Option aktiviert, wenn Sie in dieselbe Node-RED-Installation importieren. Referenzierte Konfigurationsknoten werden aus dem Ergebnis entfernt, sodass ihre gespeicherten Zugangsdaten unverändert bleiben.",
16
- "migration_input": "JSON des ursprünglichen Flows",
17
- "migration_input_placeholder": "Vollständigen Node-RED-Flow-Export hier einfügen",
18
- "migration_convert": "Konvertieren",
19
- "migration_copy": "Konvertierten Flow kopieren",
20
- "migration_output": "JSON des konvertierten Flows",
21
- "migration_close": "Schließen",
22
- "migration_summary": "{{count}} Legacy-HUE-Knoten konvertiert.",
23
- "migration_summary_reused": "{{count}} referenzierte Konfigurationsknoten werden mit ihren vorhandenen Zugangsdaten wiederverwendet.",
24
- "migration_configs_included_warning": "Konfigurationsknoten sind ohne exportierte Zugangsdaten enthalten; geben Sie Schlüssel und Passwörter nach dem Import erneut ein.",
9
+ "migration_button": "Legacy-HUE-Knoten konvertieren",
10
+ "migration_button_title": "Alle Legacy-HUE-Knoten im Editor konvertieren",
11
+ "migration_disclaimer": "Die Konvertierung erfolgt vollständig im Browser. Es werden keinerlei Flow- oder Knotendaten versendet. Anschließend öffnen sich ein bearbeitbarer E-Mail-Entwurf und die Spendenseite in einem neuen Fenster; nichts wird automatisch gesendet und dem PayPal-Link werden keine Flow-Daten hinzugefügt.",
12
+ "migration_title": "Legacy-HUE-Knoten konvertieren",
13
+ "migration_confirm": "{{count}} Legacy-HUE-Knoten werden direkt im Editor konvertiert.",
14
+ "migration_privacy": "Die Konvertierung erfolgt vollständig in diesem Browser. Es werden keine Flow-, Knoten-, Konfigurations-, Zugangs-, Gruppenadress- oder Verbindungsdaten übertragen oder gespeichert.",
15
+ "migration_email_notice": "Nach der Konvertierung öffnet Ihre E-Mail-Anwendung einen bearbeitbaren Entwurf an den Autor, ohne die Node-RED-Seite zu verlassen, und ein neues Browserfenster öffnet die Spendenseite. Der Entwurf enthält nur die Anzahl der konvertierten Knoten und Platz für optionale Hinweise; nichts wird automatisch gesendet und dem PayPal-Link werden keine Flow-Daten hinzugefügt.",
16
+ "migration_email_subject": "KNX Ultimate - Legacy-HUE-Konvertierung verwendet",
17
+ "migration_email_body": "Hallo Massimo,\n\nich habe die Konvertierungsschaltfläche für Legacy-HUE-Knoten verwendet.\nKonvertierte Legacy-HUE-Knoten: {{count}}.\n\nOptionale Hinweise:\n",
18
+ "migration_email_failed": "Die Knoten wurden konvertiert, aber der E-Mail-Entwurf konnte nicht geöffnet werden.",
19
+ "migration_donation_failed": "Die Knoten wurden konvertiert, aber die Spendenseite konnte nicht geöffnet werden.",
20
+ "migration_deploy_notice": "Exportieren Sie vor dem Fortfahren eine Sicherung Ihrer Flows. Der aktuelle Editor wird geschlossen. Nur Legacy-HUE-Knoten werden geändert; Konfigurationsknoten und Verbindungen bleiben unverändert. Prüfen Sie das Ergebnis und klicken Sie anschließend selbst auf Deploy.",
21
+ "migration_review_notice": "Sicherheitsprüfung: Prüfen Sie nach der Konvertierung jeden geänderten HUE-Knoten im Flow. Kontrollieren Sie vor dem Deploy die gewählte Funktion, Konfigurationsreferenzen, Ein-/Ausgangsanschlüsse und Verbindungen.",
22
+ "migration_convert": "HUE-Knoten konvertieren",
23
+ "migration_close": "Abbrechen",
24
+ "migration_ok": "OK",
25
+ "migration_success": "Vorgang abgeschlossen. {{count}} Legacy-HUE-Knoten wurden konvertiert. Prüfen Sie vor dem Deploy jeden geänderten Knoten einschließlich Funktion, Konfiguration, Anschlüssen und Verbindungen.",
26
+ "migration_failed": "Lokale HUE-Migration fehlgeschlagen; der Flow wurde nicht geändert:",
25
27
  "migration_none": "Keine Legacy-HUE-Knoten gefunden.",
26
- "migration_invalid": "Ungültiges Flow-JSON:",
27
- "migration_copy_success": "Konvertierter Flow kopiert.",
28
- "migration_copy_failed": "Der Zugriff auf die Zwischenablage wurde blockiert. Das konvertierte JSON wurde markiert; kopieren Sie es manuell.",
29
28
  "migration_unavailable": "Das HUE-Migrationswerkzeug ist nicht verfügbar. Starten Sie Node-RED nach der Paketaktualisierung neu.",
30
29
  "types": {
31
30
  "light": "Leuchte / Leuchtengruppe",
@@ -1,5 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueHumiditySensor">
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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
3
  <p>Dieser Knoten liest die relative Luftfeuchtigkeit (%) von einem HUE-Sensor und überträgt sie auf KNX.</p>
4
4
 
5
5
  Beginne im GA-Feld (Name oder Gruppenadresse) zu tippen, um die KNX-GA zu verknüpfen; während der Eingabe werden passende Geräte angezeigt.
@@ -1,5 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueLight">
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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
3
  <p>Dieser Node steuert HUE-Leuchten (einzeln oder gruppiert) und ordnet Befehle/Zustände KNX-Gruppenadressen zu.</p>
4
4
 
5
5
  **Allgemein**
@@ -1,5 +1,5 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateHueLightSensor">
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 in diesem Editor öffnet denselben vollständigen Flow-Konverter wie HUE Controller.</p>
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>
3
3
  <p>Dieser Node liest Lux-Ereignisse eines HUE-Lichtsensors und spiegelt sie nach KNX.</p>
4
4
 
5
5
  Es wird die Umgebungshelligkeit (Lux) bei Änderungen ausgegeben. Im GA-Feld den KNX-Gerätenamen oder die GA eingeben (Autocomplete), um die GA zu verknüpfen.