node-red-contrib-knx-ultimate 6.2.2 → 6.2.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/nodes/knxUltimateAI.js +7 -1
- package/nodes/knxUltimateHueAreaMotion.html +15 -4
- package/nodes/knxUltimateHueBattery.html +15 -4
- package/nodes/knxUltimateHueButton.html +15 -4
- package/nodes/knxUltimateHueCameraMotion.html +15 -4
- package/nodes/knxUltimateHueContactSensor.html +15 -4
- package/nodes/knxUltimateHueController.html +1386 -0
- package/nodes/knxUltimateHueController.js +28 -0
- package/nodes/knxUltimateHueHumiditySensor.html +15 -4
- package/nodes/knxUltimateHueLight.html +15 -4
- package/nodes/knxUltimateHueLightSensor.html +15 -4
- package/nodes/knxUltimateHueMotion.html +15 -4
- package/nodes/knxUltimateHuePlug.html +15 -4
- package/nodes/knxUltimateHueScene.html +18 -7
- package/nodes/knxUltimateHueTapDial.html +15 -4
- package/nodes/knxUltimateHueTemperatureSensor.html +15 -4
- package/nodes/knxUltimateHueZigbeeConnectivity.html +15 -4
- package/nodes/knxUltimateHuedevice_software_update.html +15 -4
- package/nodes/locales/de/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/de/knxUltimateHueBattery.html +1 -0
- package/nodes/locales/de/knxUltimateHueButton.html +1 -0
- package/nodes/locales/de/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/locales/de/knxUltimateHueContactSensor.html +1 -0
- package/nodes/locales/de/knxUltimateHueController.html +669 -0
- package/nodes/locales/de/knxUltimateHueController.json +48 -0
- package/nodes/locales/de/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/locales/de/knxUltimateHueLight.html +1 -0
- package/nodes/locales/de/knxUltimateHueLightSensor.html +1 -0
- package/nodes/locales/de/knxUltimateHueMotion.html +1 -0
- package/nodes/locales/de/knxUltimateHuePlug.html +1 -0
- package/nodes/locales/de/knxUltimateHueScene.html +1 -0
- package/nodes/locales/de/knxUltimateHueTapDial.html +1 -0
- package/nodes/locales/de/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/locales/de/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/locales/de/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/locales/en/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/en/knxUltimateHueBattery.html +1 -0
- package/nodes/locales/en/knxUltimateHueButton.html +1 -0
- package/nodes/locales/en/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/locales/en/knxUltimateHueContactSensor.html +1 -0
- package/nodes/locales/en/knxUltimateHueController.html +672 -0
- package/nodes/locales/en/knxUltimateHueController.json +48 -0
- package/nodes/locales/en/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/locales/en/knxUltimateHueLight.html +1 -0
- package/nodes/locales/en/knxUltimateHueLightSensor.html +1 -0
- package/nodes/locales/en/knxUltimateHueMotion.html +1 -0
- package/nodes/locales/en/knxUltimateHuePlug.html +1 -0
- package/nodes/locales/en/knxUltimateHueScene.html +1 -0
- package/nodes/locales/en/knxUltimateHueTapDial.html +1 -0
- package/nodes/locales/en/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/locales/en/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/locales/en/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/locales/es/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/es/knxUltimateHueBattery.html +1 -0
- package/nodes/locales/es/knxUltimateHueButton.html +1 -0
- package/nodes/locales/es/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/locales/es/knxUltimateHueContactSensor.html +1 -0
- package/nodes/locales/es/knxUltimateHueController.html +672 -0
- package/nodes/locales/es/knxUltimateHueController.json +48 -0
- package/nodes/locales/es/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/locales/es/knxUltimateHueLight.html +1 -0
- package/nodes/locales/es/knxUltimateHueLightSensor.html +1 -0
- package/nodes/locales/es/knxUltimateHueMotion.html +1 -0
- package/nodes/locales/es/knxUltimateHuePlug.html +1 -0
- package/nodes/locales/es/knxUltimateHueScene.html +1 -0
- package/nodes/locales/es/knxUltimateHueTapDial.html +1 -0
- package/nodes/locales/es/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/locales/es/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/locales/es/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/locales/fr/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/fr/knxUltimateHueBattery.html +1 -0
- package/nodes/locales/fr/knxUltimateHueButton.html +1 -0
- package/nodes/locales/fr/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/locales/fr/knxUltimateHueContactSensor.html +1 -0
- package/nodes/locales/fr/knxUltimateHueController.html +672 -0
- package/nodes/locales/fr/knxUltimateHueController.json +48 -0
- package/nodes/locales/fr/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/locales/fr/knxUltimateHueLight.html +1 -0
- package/nodes/locales/fr/knxUltimateHueLightSensor.html +1 -0
- package/nodes/locales/fr/knxUltimateHueMotion.html +1 -0
- package/nodes/locales/fr/knxUltimateHuePlug.html +1 -0
- package/nodes/locales/fr/knxUltimateHueScene.html +1 -0
- package/nodes/locales/fr/knxUltimateHueTapDial.html +1 -0
- package/nodes/locales/fr/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/locales/fr/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/locales/fr/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/locales/it/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/it/knxUltimateHueBattery.html +1 -0
- package/nodes/locales/it/knxUltimateHueButton.html +1 -0
- package/nodes/locales/it/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/locales/it/knxUltimateHueContactSensor.html +1 -0
- package/nodes/locales/it/knxUltimateHueController.html +672 -0
- package/nodes/locales/it/knxUltimateHueController.json +48 -0
- package/nodes/locales/it/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/locales/it/knxUltimateHueLight.html +1 -0
- package/nodes/locales/it/knxUltimateHueLightSensor.html +1 -0
- package/nodes/locales/it/knxUltimateHueMotion.html +1 -0
- package/nodes/locales/it/knxUltimateHuePlug.html +1 -0
- package/nodes/locales/it/knxUltimateHueScene.html +1 -0
- package/nodes/locales/it/knxUltimateHueTapDial.html +1 -0
- package/nodes/locales/it/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/locales/it/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/locales/it/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueAreaMotion.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateHueBattery.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueButton.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueCameraMotion.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueContactSensor.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueController.html +674 -0
- package/nodes/locales/zh-CN/knxUltimateHueController.json +48 -0
- package/nodes/locales/zh-CN/knxUltimateHueHumiditySensor.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueLight.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueLightSensor.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueMotion.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHuePlug.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueScene.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueTapDial.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueTemperatureSensor.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHueZigbeeConnectivity.html +1 -0
- package/nodes/locales/zh-CN/knxUltimateHuedevice_software_update.html +1 -0
- package/nodes/utils/hueControllerProfileAdapter.js +104 -0
- package/nodes/utils/hueControllerProfiles/runtime/area_motion.js +221 -0
- package/nodes/utils/hueControllerProfiles/runtime/button.js +295 -0
- package/nodes/utils/hueControllerProfiles/runtime/camera_motion.js +221 -0
- package/nodes/utils/hueControllerProfiles/runtime/contact.js +191 -0
- package/nodes/utils/hueControllerProfiles/runtime/device_power.js +185 -0
- package/nodes/utils/hueControllerProfiles/runtime/device_software_update.js +185 -0
- package/nodes/utils/hueControllerProfiles/runtime/humidity.js +204 -0
- package/nodes/utils/hueControllerProfiles/runtime/light.js +1583 -0
- package/nodes/utils/hueControllerProfiles/runtime/light_level.js +180 -0
- package/nodes/utils/hueControllerProfiles/runtime/motion.js +185 -0
- package/nodes/utils/hueControllerProfiles/runtime/plug.js +344 -0
- package/nodes/utils/hueControllerProfiles/runtime/relative_rotary.js +271 -0
- package/nodes/utils/hueControllerProfiles/runtime/scene.js +352 -0
- package/nodes/utils/hueControllerProfiles/runtime/temperature.js +187 -0
- package/nodes/utils/hueControllerProfiles/runtime/zigbee_connectivity.js +185 -0
- package/package.json +5 -2
- package/resources/hueControllerMigration.js +199 -0
- package/resources/hueControllerMigrationDialog.js +189 -0
- package/resources/hueControllerProfiles.js +9290 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
+
**Version 6.2.3-beta.0** - August 2026<br/>
|
|
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/>
|
|
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
|
+
- **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
|
+
- **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
|
+
- **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
|
+
- **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
|
+
- **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/>
|
|
19
|
+
- **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
|
+
- **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
|
+
- **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/>
|
|
22
|
+
|
|
9
23
|
**Version 6.2.2** - July 2026<br/>
|
|
10
24
|
|
|
11
25
|
- Bump KNX Engine to 6.0.2<br/>
|
package/nodes/knxUltimateAI.js
CHANGED
|
@@ -214,7 +214,12 @@ const buildKnxAiPackageNodeCatalog = () => {
|
|
|
214
214
|
const inputsRaw = knxAiMatchAfter(objText, /\binputs\s*:\s*(\d+)/)
|
|
215
215
|
const outputsRaw = knxAiMatchAfter(objText, /\boutputs\s*:\s*(\d+)/)
|
|
216
216
|
let fields = {}
|
|
217
|
-
|
|
217
|
+
let defIdx = objText.search(/\bdefaults\s*:\s*\{/)
|
|
218
|
+
// Profile-driven editors may compose their full Node-RED defaults from
|
|
219
|
+
// already registered node definitions. They can expose a compact static
|
|
220
|
+
// catalogDefaults block so the backend Flow Builder still discovers
|
|
221
|
+
// configuration references and essential persisted fields.
|
|
222
|
+
if (defIdx < 0) defIdx = objText.search(/\bcatalogDefaults\s*:\s*\{/)
|
|
218
223
|
if (defIdx >= 0) {
|
|
219
224
|
const braceIdx = objText.indexOf('{', defIdx)
|
|
220
225
|
const defaultsBlock = knxAiSliceBalanced(objText, braceIdx)
|
|
@@ -10074,6 +10079,7 @@ module.exports = function (RED) {
|
|
|
10074
10079
|
}
|
|
10075
10080
|
|
|
10076
10081
|
module.exports.__test = {
|
|
10082
|
+
buildKnxAiPackageNodeCatalog,
|
|
10077
10083
|
buildKnxAiConfirmationRequest,
|
|
10078
10084
|
buildKnxAiUniversalMessage,
|
|
10079
10085
|
classifyKnxAiConfirmation,
|
|
@@ -375,8 +375,8 @@
|
|
|
375
375
|
};
|
|
376
376
|
|
|
377
377
|
RED.nodes.registerType('knxUltimateHueAreaMotion', {
|
|
378
|
-
category: '
|
|
379
|
-
color: '#
|
|
378
|
+
category: 'deprecated',
|
|
379
|
+
color: '#E7E9F6',
|
|
380
380
|
defaults: {
|
|
381
381
|
server: { type: 'knxUltimate-config', required: false },
|
|
382
382
|
serverHue: { type: 'hue-config', required: true },
|
|
@@ -395,9 +395,9 @@
|
|
|
395
395
|
outputs: 1,
|
|
396
396
|
icon: 'node-hue-icon.svg',
|
|
397
397
|
label() {
|
|
398
|
-
return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueAreaMotion:knxUltimateHueAreaMotion.paletteLabel')
|
|
398
|
+
return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueAreaMotion:knxUltimateHueAreaMotion.paletteLabel')} (deprecated)`;
|
|
399
399
|
},
|
|
400
|
-
paletteLabel: 'Hue Motion Area',
|
|
400
|
+
paletteLabel: 'Hue Motion Area (deprecated)',
|
|
401
401
|
oneditprepare() {
|
|
402
402
|
try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
|
|
403
403
|
const node = this;
|
|
@@ -519,6 +519,15 @@
|
|
|
519
519
|
</script>
|
|
520
520
|
|
|
521
521
|
<script type="text/html" data-template-name="knxUltimateHueAreaMotion">
|
|
522
|
+
<div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
523
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
|
|
524
|
+
<span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
|
|
525
|
+
</div>
|
|
526
|
+
<div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
|
|
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
|
+
<i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
|
|
529
|
+
</button>
|
|
530
|
+
</div>
|
|
522
531
|
<div class="form-row" style="margin-bottom:10px;">
|
|
523
532
|
<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>
|
|
524
533
|
</div>
|
|
@@ -604,6 +613,8 @@
|
|
|
604
613
|
|
|
605
614
|
|
|
606
615
|
<script type="text/markdown" data-help-name="knxUltimateHueAreaMotion">
|
|
616
|
+
> **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
|
|
617
|
+
|
|
607
618
|
<p>The Hue Motion Area node listens to MotionAware area motion events (Hue Bridge Pro) and mirrors the aggregated detected/not-detected state to KNX or your Node-RED flow.</p>
|
|
608
619
|
|
|
609
620
|
Start typing in the GA field (name or Group Address) to link the KNX GA; devices appear while you type.
|
|
@@ -359,8 +359,8 @@
|
|
|
359
359
|
};
|
|
360
360
|
|
|
361
361
|
RED.nodes.registerType('knxUltimateHueBattery', {
|
|
362
|
-
category: '
|
|
363
|
-
color: '#
|
|
362
|
+
category: 'deprecated',
|
|
363
|
+
color: '#E7E9F6',
|
|
364
364
|
defaults: {
|
|
365
365
|
server: { type: 'knxUltimate-config', required: false },
|
|
366
366
|
serverHue: { type: 'hue-config', required: true },
|
|
@@ -377,9 +377,9 @@
|
|
|
377
377
|
outputs: 1,
|
|
378
378
|
icon: 'node-hue-icon.svg',
|
|
379
379
|
label() {
|
|
380
|
-
return this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueBattery:knxUltimateHueBattery.paletteLabel')
|
|
380
|
+
return `${this.name || RED._('node-red-contrib-knx-ultimate/knxUltimateHueBattery:knxUltimateHueBattery.paletteLabel')} (deprecated)`;
|
|
381
381
|
},
|
|
382
|
-
paletteLabel: 'Hue Battery Sensor',
|
|
382
|
+
paletteLabel: 'Hue Battery Sensor (deprecated)',
|
|
383
383
|
oneditprepare() {
|
|
384
384
|
try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
|
|
385
385
|
const node = this;
|
|
@@ -498,6 +498,15 @@
|
|
|
498
498
|
</script>
|
|
499
499
|
|
|
500
500
|
<script type="text/html" data-template-name="knxUltimateHueBattery">
|
|
501
|
+
<div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
502
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
|
|
503
|
+
<span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
|
|
504
|
+
</div>
|
|
505
|
+
<div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
|
|
506
|
+
<button type="button" class="red-ui-button hue-legacy-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff; font-weight:700;" data-i18n="[title]node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button_title">
|
|
507
|
+
<i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
|
|
508
|
+
</button>
|
|
509
|
+
</div>
|
|
501
510
|
<div class="form-row" style="margin-bottom:10px;">
|
|
502
511
|
<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>
|
|
503
512
|
</div>
|
|
@@ -587,6 +596,8 @@
|
|
|
587
596
|
|
|
588
597
|
|
|
589
598
|
<script type="text/markdown" data-help-name="knxUltimateHueBattery">
|
|
599
|
+
> **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
|
|
600
|
+
|
|
590
601
|
<p>This node exposes the battery level of a Hue device to KNX and raises an event whenever the value changes.</p>
|
|
591
602
|
|
|
592
603
|
Start typing the KNX device name or Group Address in the GA field; matching entries appear while you type. Use the refresh icon next to <q>Hue sensor</q> to reload the list from the Hue bridge after adding new devices.
|
|
@@ -405,8 +405,8 @@
|
|
|
405
405
|
};
|
|
406
406
|
|
|
407
407
|
RED.nodes.registerType('knxUltimateHueButton', {
|
|
408
|
-
category: '
|
|
409
|
-
color: '#
|
|
408
|
+
category: 'deprecated',
|
|
409
|
+
color: '#E7E9F6',
|
|
410
410
|
defaults: {
|
|
411
411
|
server: { type: 'knxUltimate-config', required: false },
|
|
412
412
|
serverHue: { type: 'hue-config', required: true },
|
|
@@ -429,9 +429,9 @@
|
|
|
429
429
|
outputs: 1,
|
|
430
430
|
icon: 'node-hue-icon.svg',
|
|
431
431
|
label() {
|
|
432
|
-
return this.name || 'Hue Button'
|
|
432
|
+
return `${this.name || 'Hue Button'} (deprecated)`;
|
|
433
433
|
},
|
|
434
|
-
paletteLabel: 'Hue Button',
|
|
434
|
+
paletteLabel: 'Hue Button (deprecated)',
|
|
435
435
|
oneditprepare() {
|
|
436
436
|
try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
|
|
437
437
|
const node = this;
|
|
@@ -616,6 +616,15 @@
|
|
|
616
616
|
</script>
|
|
617
617
|
|
|
618
618
|
<script type="text/html" data-template-name="knxUltimateHueButton">
|
|
619
|
+
<div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
620
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
|
|
621
|
+
<span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
|
|
622
|
+
</div>
|
|
623
|
+
<div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
|
|
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
|
+
<i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
|
|
626
|
+
</button>
|
|
627
|
+
</div>
|
|
619
628
|
<div class="form-row" style="margin-bottom:10px;">
|
|
620
629
|
<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>
|
|
621
630
|
</div>
|
|
@@ -730,6 +739,8 @@
|
|
|
730
739
|
|
|
731
740
|
|
|
732
741
|
<script type="text/markdown" data-help-name="knxUltimateHueButton">
|
|
742
|
+
> **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
|
|
743
|
+
|
|
733
744
|
<p>The Hue Button node maps Hue button events to KNX group addresses and exposes the same events on its flow output via <code>button.button_report.event</code>.</p>
|
|
734
745
|
|
|
735
746
|
Start typing in the GA field (name or Group Address) to link the KNX GA; devices appear while you type.
|
|
@@ -376,8 +376,8 @@
|
|
|
376
376
|
};
|
|
377
377
|
|
|
378
378
|
RED.nodes.registerType('knxUltimateHueCameraMotion', {
|
|
379
|
-
category: '
|
|
380
|
-
color: '#
|
|
379
|
+
category: 'deprecated',
|
|
380
|
+
color: '#E7E9F6',
|
|
381
381
|
defaults: {
|
|
382
382
|
server: { type: 'knxUltimate-config', required: false },
|
|
383
383
|
serverHue: { type: 'hue-config', required: true },
|
|
@@ -396,9 +396,9 @@
|
|
|
396
396
|
outputs: 1,
|
|
397
397
|
icon: 'node-hue-icon.svg',
|
|
398
398
|
label() {
|
|
399
|
-
return this.name || 'Hue Camera Motion'
|
|
399
|
+
return `${this.name || 'Hue Camera Motion'} (deprecated)`;
|
|
400
400
|
},
|
|
401
|
-
paletteLabel: 'Hue Camera Motion',
|
|
401
|
+
paletteLabel: 'Hue Camera Motion (deprecated)',
|
|
402
402
|
oneditprepare() {
|
|
403
403
|
try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
|
|
404
404
|
const node = this;
|
|
@@ -529,6 +529,15 @@
|
|
|
529
529
|
</script>
|
|
530
530
|
|
|
531
531
|
<script type="text/html" data-template-name="knxUltimateHueCameraMotion">
|
|
532
|
+
<div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
533
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
|
|
534
|
+
<span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
|
|
535
|
+
</div>
|
|
536
|
+
<div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
|
|
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
|
+
<i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
|
|
539
|
+
</button>
|
|
540
|
+
</div>
|
|
532
541
|
<div class="form-row" style="margin-bottom:10px;">
|
|
533
542
|
<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>
|
|
534
543
|
</div>
|
|
@@ -613,6 +622,8 @@
|
|
|
613
622
|
</script>
|
|
614
623
|
|
|
615
624
|
<script type="text/markdown" data-help-name="knxUltimateHueCameraMotion">
|
|
625
|
+
> **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
|
|
626
|
+
|
|
616
627
|
<p>This node listens to motion events reported by a Philips Hue camera and mirrors them to KNX.</p>
|
|
617
628
|
|
|
618
629
|
Start typing in the GA field (name or Group Address) to link the KNX GA; devices appear while you type.
|
|
@@ -357,8 +357,8 @@
|
|
|
357
357
|
};
|
|
358
358
|
|
|
359
359
|
RED.nodes.registerType('knxUltimateHueContactSensor', {
|
|
360
|
-
category: '
|
|
361
|
-
color: '#
|
|
360
|
+
category: 'deprecated',
|
|
361
|
+
color: '#E7E9F6',
|
|
362
362
|
defaults: {
|
|
363
363
|
server: { type: 'knxUltimate-config', required: false },
|
|
364
364
|
serverHue: { type: 'hue-config', required: true },
|
|
@@ -372,9 +372,9 @@
|
|
|
372
372
|
outputs: 1,
|
|
373
373
|
icon: 'node-hue-icon.svg',
|
|
374
374
|
label() {
|
|
375
|
-
return this.name || 'Hue Contact Sensor'
|
|
375
|
+
return `${this.name || 'Hue Contact Sensor'} (deprecated)`;
|
|
376
376
|
},
|
|
377
|
-
paletteLabel: 'Hue Contact Sensor',
|
|
377
|
+
paletteLabel: 'Hue Contact Sensor (deprecated)',
|
|
378
378
|
oneditprepare() {
|
|
379
379
|
try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
|
|
380
380
|
const node = this;
|
|
@@ -489,6 +489,15 @@
|
|
|
489
489
|
</script>
|
|
490
490
|
|
|
491
491
|
<script type="text/html" data-template-name="knxUltimateHueContactSensor">
|
|
492
|
+
<div class="form-row hue-legacy-controller-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:14px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
493
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#a15c00; margin-right:6px;"></i>
|
|
494
|
+
<span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.legacy_node_notice"></span>
|
|
495
|
+
</div>
|
|
496
|
+
<div class="form-row hue-legacy-migration-action" style="margin-top:-6px; margin-bottom:14px;">
|
|
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
|
+
<i class="fa fa-exchange"></i> <span data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_button"></span>
|
|
499
|
+
</button>
|
|
500
|
+
</div>
|
|
492
501
|
<div class="form-row" style="margin-bottom:10px;">
|
|
493
502
|
<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>
|
|
494
503
|
</div>
|
|
@@ -552,6 +561,8 @@
|
|
|
552
561
|
|
|
553
562
|
|
|
554
563
|
<script type="text/markdown" data-help-name="knxUltimateHueContactSensor">
|
|
564
|
+
> **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
|
|
565
|
+
|
|
555
566
|
<p>This node forwards events from a Hue contact sensor and maps them to KNX group addresses.</p>
|
|
556
567
|
|
|
557
568
|
Start typing in the GA field, the name or group address of your KNX device, the avaiable devices start showing up while you're typing.
|