node-red-contrib-knx-ultimate 6.2.2 → 6.2.3-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/nodes/knxUltimateAI.js +7 -1
- package/nodes/knxUltimateHueAreaMotion.html +16 -4
- package/nodes/knxUltimateHueBattery.html +16 -4
- package/nodes/knxUltimateHueButton.html +16 -4
- package/nodes/knxUltimateHueCameraMotion.html +16 -4
- package/nodes/knxUltimateHueContactSensor.html +16 -4
- package/nodes/knxUltimateHueController.html +1259 -0
- package/nodes/knxUltimateHueController.js +28 -0
- package/nodes/knxUltimateHueHumiditySensor.html +16 -4
- package/nodes/knxUltimateHueLight.html +16 -4
- package/nodes/knxUltimateHueLightSensor.html +16 -4
- package/nodes/knxUltimateHueMotion.html +16 -4
- package/nodes/knxUltimateHuePlug.html +16 -4
- package/nodes/knxUltimateHueScene.html +19 -7
- package/nodes/knxUltimateHueTapDial.html +16 -4
- package/nodes/knxUltimateHueTemperatureSensor.html +16 -4
- package/nodes/knxUltimateHueZigbeeConnectivity.html +16 -4
- package/nodes/knxUltimateHuedevice_software_update.html +16 -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 +668 -0
- package/nodes/locales/de/knxUltimateHueController.json +47 -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 +671 -0
- package/nodes/locales/en/knxUltimateHueController.json +47 -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 +671 -0
- package/nodes/locales/es/knxUltimateHueController.json +47 -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 +671 -0
- package/nodes/locales/fr/knxUltimateHueController.json +47 -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 +671 -0
- package/nodes/locales/it/knxUltimateHueController.json +47 -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 +673 -0
- package/nodes/locales/zh-CN/knxUltimateHueController.json +47 -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 +338 -0
- package/resources/hueControllerMigrationDialog.js +235 -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.1** - 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 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
|
+
- **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 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 — 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,16 @@
|
|
|
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 class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
|
|
531
|
+
</div>
|
|
522
532
|
<div class="form-row" style="margin-bottom:10px;">
|
|
523
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>
|
|
524
534
|
</div>
|
|
@@ -604,6 +614,8 @@
|
|
|
604
614
|
|
|
605
615
|
|
|
606
616
|
<script type="text/markdown" data-help-name="knxUltimateHueAreaMotion">
|
|
617
|
+
> **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.
|
|
618
|
+
|
|
607
619
|
<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
620
|
|
|
609
621
|
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,16 @@
|
|
|
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 class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
|
|
510
|
+
</div>
|
|
501
511
|
<div class="form-row" style="margin-bottom:10px;">
|
|
502
512
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
503
513
|
</div>
|
|
@@ -587,6 +597,8 @@
|
|
|
587
597
|
|
|
588
598
|
|
|
589
599
|
<script type="text/markdown" data-help-name="knxUltimateHueBattery">
|
|
600
|
+
> **Deprecated:** This dedicated HUE node remains available for existing flows. Use **HUE Controller** for new work. The legacy node is marked `(deprecated)` in the palette and on the canvas, uses a lighter color than HUE Controller, and its editor opens with a migration notice.
|
|
601
|
+
|
|
590
602
|
<p>This node exposes the battery level of a Hue device to KNX and raises an event whenever the value changes.</p>
|
|
591
603
|
|
|
592
604
|
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,16 @@
|
|
|
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 class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
|
|
628
|
+
</div>
|
|
619
629
|
<div class="form-row" style="margin-bottom:10px;">
|
|
620
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>
|
|
621
631
|
</div>
|
|
@@ -730,6 +740,8 @@
|
|
|
730
740
|
|
|
731
741
|
|
|
732
742
|
<script type="text/markdown" data-help-name="knxUltimateHueButton">
|
|
743
|
+
> **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.
|
|
744
|
+
|
|
733
745
|
<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
746
|
|
|
735
747
|
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,16 @@
|
|
|
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 class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
|
|
541
|
+
</div>
|
|
532
542
|
<div class="form-row" style="margin-bottom:10px;">
|
|
533
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>
|
|
534
544
|
</div>
|
|
@@ -613,6 +623,8 @@
|
|
|
613
623
|
</script>
|
|
614
624
|
|
|
615
625
|
<script type="text/markdown" data-help-name="knxUltimateHueCameraMotion">
|
|
626
|
+
> **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.
|
|
627
|
+
|
|
616
628
|
<p>This node listens to motion events reported by a Philips Hue camera and mirrors them to KNX.</p>
|
|
617
629
|
|
|
618
630
|
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,16 @@
|
|
|
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 class="form-tips hue-controller-migration-disclaimer" style="margin-top:8px;" data-i18n="node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.migration_disclaimer"></div>
|
|
501
|
+
</div>
|
|
492
502
|
<div class="form-row" style="margin-bottom:10px;">
|
|
493
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>
|
|
494
504
|
</div>
|
|
@@ -552,6 +562,8 @@
|
|
|
552
562
|
|
|
553
563
|
|
|
554
564
|
<script type="text/markdown" data-help-name="knxUltimateHueContactSensor">
|
|
565
|
+
> **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.
|
|
566
|
+
|
|
555
567
|
<p>This node forwards events from a Hue contact sensor and maps them to KNX group addresses.</p>
|
|
556
568
|
|
|
557
569
|
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.
|