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.
- package/CHANGELOG.md +4 -3
- package/nodes/knxUltimateHueAreaMotion.html +1 -0
- package/nodes/knxUltimateHueBattery.html +1 -0
- package/nodes/knxUltimateHueButton.html +1 -0
- package/nodes/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/knxUltimateHueContactSensor.html +1 -0
- package/nodes/knxUltimateHueController.html +22 -141
- package/nodes/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/knxUltimateHueLight.html +1 -0
- package/nodes/knxUltimateHueLightSensor.html +1 -0
- package/nodes/knxUltimateHueMotion.html +1 -0
- package/nodes/knxUltimateHuePlug.html +1 -0
- package/nodes/knxUltimateHueScene.html +1 -0
- package/nodes/knxUltimateHueTapDial.html +1 -0
- package/nodes/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/locales/de/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/de/knxUltimateHueBattery.html +1 -1
- package/nodes/locales/de/knxUltimateHueButton.html +1 -1
- package/nodes/locales/de/knxUltimateHueCameraMotion.html +1 -1
- package/nodes/locales/de/knxUltimateHueContactSensor.html +1 -1
- package/nodes/locales/de/knxUltimateHueController.html +4 -5
- package/nodes/locales/de/knxUltimateHueController.json +18 -19
- package/nodes/locales/de/knxUltimateHueHumiditySensor.html +1 -1
- package/nodes/locales/de/knxUltimateHueLight.html +1 -1
- package/nodes/locales/de/knxUltimateHueLightSensor.html +1 -1
- package/nodes/locales/de/knxUltimateHueMotion.html +1 -1
- package/nodes/locales/de/knxUltimateHuePlug.html +1 -1
- package/nodes/locales/de/knxUltimateHueScene.html +1 -1
- package/nodes/locales/de/knxUltimateHueTapDial.html +1 -1
- package/nodes/locales/de/knxUltimateHueTemperatureSensor.html +1 -1
- package/nodes/locales/de/knxUltimateHueZigbeeConnectivity.html +1 -1
- package/nodes/locales/de/knxUltimateHuedevice_software_update.html +1 -1
- package/nodes/locales/en/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/en/knxUltimateHueBattery.html +1 -1
- package/nodes/locales/en/knxUltimateHueButton.html +1 -1
- package/nodes/locales/en/knxUltimateHueCameraMotion.html +1 -1
- package/nodes/locales/en/knxUltimateHueContactSensor.html +1 -1
- package/nodes/locales/en/knxUltimateHueController.html +4 -5
- package/nodes/locales/en/knxUltimateHueController.json +18 -19
- package/nodes/locales/en/knxUltimateHueHumiditySensor.html +1 -1
- package/nodes/locales/en/knxUltimateHueLight.html +1 -1
- package/nodes/locales/en/knxUltimateHueLightSensor.html +1 -1
- package/nodes/locales/en/knxUltimateHueMotion.html +1 -1
- package/nodes/locales/en/knxUltimateHuePlug.html +1 -1
- package/nodes/locales/en/knxUltimateHueScene.html +1 -1
- package/nodes/locales/en/knxUltimateHueTapDial.html +1 -1
- package/nodes/locales/en/knxUltimateHueTemperatureSensor.html +1 -1
- package/nodes/locales/en/knxUltimateHueZigbeeConnectivity.html +1 -1
- package/nodes/locales/en/knxUltimateHuedevice_software_update.html +1 -1
- package/nodes/locales/es/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/es/knxUltimateHueBattery.html +1 -1
- package/nodes/locales/es/knxUltimateHueButton.html +1 -1
- package/nodes/locales/es/knxUltimateHueCameraMotion.html +1 -1
- package/nodes/locales/es/knxUltimateHueContactSensor.html +1 -1
- package/nodes/locales/es/knxUltimateHueController.html +4 -5
- package/nodes/locales/es/knxUltimateHueController.json +18 -19
- package/nodes/locales/es/knxUltimateHueHumiditySensor.html +1 -1
- package/nodes/locales/es/knxUltimateHueLight.html +1 -1
- package/nodes/locales/es/knxUltimateHueLightSensor.html +1 -1
- package/nodes/locales/es/knxUltimateHueMotion.html +1 -1
- package/nodes/locales/es/knxUltimateHuePlug.html +1 -1
- package/nodes/locales/es/knxUltimateHueScene.html +1 -1
- package/nodes/locales/es/knxUltimateHueTapDial.html +1 -1
- package/nodes/locales/es/knxUltimateHueTemperatureSensor.html +1 -1
- package/nodes/locales/es/knxUltimateHueZigbeeConnectivity.html +1 -1
- package/nodes/locales/es/knxUltimateHuedevice_software_update.html +1 -1
- package/nodes/locales/fr/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/fr/knxUltimateHueBattery.html +1 -1
- package/nodes/locales/fr/knxUltimateHueButton.html +1 -1
- package/nodes/locales/fr/knxUltimateHueCameraMotion.html +1 -1
- package/nodes/locales/fr/knxUltimateHueContactSensor.html +1 -1
- package/nodes/locales/fr/knxUltimateHueController.html +4 -5
- package/nodes/locales/fr/knxUltimateHueController.json +18 -19
- package/nodes/locales/fr/knxUltimateHueHumiditySensor.html +1 -1
- package/nodes/locales/fr/knxUltimateHueLight.html +1 -1
- package/nodes/locales/fr/knxUltimateHueLightSensor.html +1 -1
- package/nodes/locales/fr/knxUltimateHueMotion.html +1 -1
- package/nodes/locales/fr/knxUltimateHuePlug.html +1 -1
- package/nodes/locales/fr/knxUltimateHueScene.html +1 -1
- package/nodes/locales/fr/knxUltimateHueTapDial.html +1 -1
- package/nodes/locales/fr/knxUltimateHueTemperatureSensor.html +1 -1
- package/nodes/locales/fr/knxUltimateHueZigbeeConnectivity.html +1 -1
- package/nodes/locales/fr/knxUltimateHuedevice_software_update.html +1 -1
- package/nodes/locales/it/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/it/knxUltimateHueBattery.html +1 -1
- package/nodes/locales/it/knxUltimateHueButton.html +1 -1
- package/nodes/locales/it/knxUltimateHueCameraMotion.html +1 -1
- package/nodes/locales/it/knxUltimateHueContactSensor.html +1 -1
- package/nodes/locales/it/knxUltimateHueController.html +4 -5
- package/nodes/locales/it/knxUltimateHueController.json +18 -19
- package/nodes/locales/it/knxUltimateHueHumiditySensor.html +1 -1
- package/nodes/locales/it/knxUltimateHueLight.html +1 -1
- package/nodes/locales/it/knxUltimateHueLightSensor.html +1 -1
- package/nodes/locales/it/knxUltimateHueMotion.html +1 -1
- package/nodes/locales/it/knxUltimateHuePlug.html +1 -1
- package/nodes/locales/it/knxUltimateHueScene.html +1 -1
- package/nodes/locales/it/knxUltimateHueTapDial.html +1 -1
- package/nodes/locales/it/knxUltimateHueTemperatureSensor.html +1 -1
- package/nodes/locales/it/knxUltimateHueZigbeeConnectivity.html +1 -1
- package/nodes/locales/it/knxUltimateHuedevice_software_update.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueBattery.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueButton.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueCameraMotion.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueContactSensor.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueController.html +4 -5
- package/nodes/locales/zh-CN/knxUltimateHueController.json +18 -19
- package/nodes/locales/zh-CN/knxUltimateHueHumiditySensor.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueLight.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueLightSensor.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueMotion.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHuePlug.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueScene.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueTapDial.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueTemperatureSensor.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueZigbeeConnectivity.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHuedevice_software_update.html +1 -1
- package/package.json +1 -1
- package/resources/hueControllerMigration.js +145 -6
- 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.
|
|
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
|
|
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
|
|
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> <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> <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> <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> <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> <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
|
-
|
|
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
|
|
221
|
-
//
|
|
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
|
|
241
|
-
if (!
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
|
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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
13
|
-
<p><strong>Legacy-HUE-
|
|
14
|
-
<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-
|
|
10
|
-
"migration_button_title": "
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
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
|
|
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
|
|
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
|
|
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.
|