node-red-contrib-knx-ultimate 6.3.11 → 6.3.13
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 +9 -0
- package/examples/Matter Controller - Semantic Flow Input.json +1 -1
- package/nodes/icons/node-matter-bridge-icon.svg +2 -2
- package/nodes/icons/node-matter-controller-icon.svg +2 -2
- package/nodes/icons/node-matter-icon.svg +1 -1
- package/nodes/knxUltimateHueController.html +23 -10
- package/nodes/knxUltimateMatterBridge.html +4 -4
- package/nodes/knxUltimateMatterControllerDevice.html +3 -3
- package/nodes/locales/de/knxUltimateHueController.html +3 -1
- package/nodes/locales/de/knxUltimateHueController.json +3 -0
- package/nodes/locales/de/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/de/knxUltimateMatterBridge.json +1 -1
- package/nodes/locales/de/knxUltimateMatterControllerDevice.html +0 -2
- package/nodes/locales/de/matterbridge-config.html +1 -3
- package/nodes/locales/en/knxUltimateHueController.json +3 -0
- package/nodes/locales/en/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/en/knxUltimateMatterBridge.json +1 -1
- package/nodes/locales/en/knxUltimateMatterControllerDevice.html +0 -2
- package/nodes/locales/en/matterbridge-config.html +1 -3
- package/nodes/locales/es/knxUltimateHueController.html +50 -50
- package/nodes/locales/es/knxUltimateHueController.json +4 -1
- package/nodes/locales/es/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/es/knxUltimateMatterBridge.json +1 -1
- package/nodes/locales/es/knxUltimateMatterControllerDevice.html +0 -2
- package/nodes/locales/es/matterbridge-config.html +1 -3
- package/nodes/locales/fr/knxUltimateHueController.html +45 -45
- package/nodes/locales/fr/knxUltimateHueController.json +4 -1
- package/nodes/locales/fr/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/fr/knxUltimateMatterBridge.json +1 -1
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.html +0 -2
- package/nodes/locales/fr/matterbridge-config.html +1 -3
- package/nodes/locales/it/knxUltimateHueController.html +1 -1
- package/nodes/locales/it/knxUltimateHueController.json +3 -0
- package/nodes/locales/it/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/it/knxUltimateMatterBridge.json +1 -1
- package/nodes/locales/it/knxUltimateMatterControllerDevice.html +0 -2
- package/nodes/locales/it/matterbridge-config.html +1 -3
- package/nodes/locales/zh-CN/knxUltimateHueController.json +3 -0
- package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +1 -1
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.html +0 -2
- package/nodes/locales/zh-CN/matterbridge-config.html +1 -3
- package/package.json +1 -1
- package/resources/hueControllerProfiles.js +33 -17
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
+
**Version 6.3.13** - August 2026<br/>
|
|
10
|
+
|
|
11
|
+
- **Matter**: promoted Matter Controller, Matter Bridge and Expose KNX to Matter from BETA to production-ready status; removed BETA labels and experimental warnings from the palette, editor help, examples and multilingual documentation while retaining pairing, backup and endpoint-structure safety guidance.<br/>
|
|
12
|
+
- **Matter visual identity**: changed the Matter node background to the official Matter Day color (`#F3FFFF`) and the controller/bridge icon artwork to Matter Night (`#131926`) for readable, standards-aligned palette and canvas presentation.<br/>
|
|
13
|
+
|
|
14
|
+
**Version 6.3.12** - August 2026<br/>
|
|
15
|
+
|
|
16
|
+
- **HUE Controller**: completed the EN, IT, DE, FR, ES and zh-CN editor translations, including Light Level, Locate, Light mapping labels, mapping placeholders, error messages and tutorial links; the embedded profiles and dynamic device labels now follow Node-RED's active locale instead of a potentially stale page-language attribute. Corrected French/Spanish Hue and KNX terminology and realigned the localized help and wiki documentation.<br/>
|
|
17
|
+
|
|
9
18
|
**Version 6.3.11** - August 2026<br/>
|
|
10
19
|
|
|
11
20
|
- **Matter Controller**: fixed KNX GA mapping tabs being hidden by transient empty KNX/Matter config-selector values during Node-RED 5 editor initialization; saved gateways now remain selected until the user explicitly changes them.<br/>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"type": "tab",
|
|
5
5
|
"label": "Matter Controller - Flow input",
|
|
6
6
|
"disabled": false,
|
|
7
|
-
"info": "Example of the semantic msg.payload = { function, value } contract for Control Matter from KNX
|
|
7
|
+
"info": "Example of the semantic msg.payload = { function, value } contract for Control Matter from KNX.\n\nAfter importing:\n1. Open the example Matter Controller node.\n2. Select your existing Matter Controller configuration and a commissioned non-light endpoint.\n3. Enable Node Input/Output PINs.\n4. In the Flow input section shown below the PIN selector, use only the Inject nodes matching functions advertised by the device.\n\nThis example creates no matter-config and sends no command automatically."
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"id": "matter_semantic_instructions",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<svg width="40" height="60" viewBox="0 0 40 60" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Matter Bridge">
|
|
3
|
-
<text x="20" y="21" fill="#
|
|
3
|
+
<text x="20" y="21" fill="#131926" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="700" textLength="38" lengthAdjust="spacingAndGlyphs">mat</text>
|
|
4
4
|
<path d="M 37 34 H 12 V 29 L 2 38 L 12 47 V 42 H 25"
|
|
5
|
-
fill="none" stroke="#
|
|
5
|
+
fill="none" stroke="#131926" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"/>
|
|
6
6
|
</svg>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<svg width="40" height="60" viewBox="0 0 40 60" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Matter Controller">
|
|
3
|
-
<text x="20" y="21" fill="#
|
|
3
|
+
<text x="20" y="21" fill="#131926" text-anchor="middle" font-family="Arial, sans-serif" font-size="20" font-weight="700" textLength="38" lengthAdjust="spacingAndGlyphs">mat</text>
|
|
4
4
|
<path d="M 3 34 H 28 V 29 L 38 38 L 28 47 V 42 H 15"
|
|
5
|
-
fill="none" stroke="#
|
|
5
|
+
fill="none" stroke="#131926" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"/>
|
|
6
6
|
</svg>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<svg width="40" height="60" viewBox="0 0 40 60" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
-
<g fill="#
|
|
3
|
+
<g fill="#131926" stroke="none">
|
|
4
4
|
<circle cx="20" cy="30" r="4.5"/>
|
|
5
5
|
<g id="matterArrow">
|
|
6
6
|
<rect x="18.4" y="9" width="3.2" height="11"/>
|
|
@@ -254,11 +254,18 @@
|
|
|
254
254
|
`);
|
|
255
255
|
};
|
|
256
256
|
|
|
257
|
-
const
|
|
257
|
+
const controllerMessage = (key, values) => {
|
|
258
258
|
try {
|
|
259
|
-
const
|
|
260
|
-
|
|
259
|
+
const messageKey = `node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.${key}`;
|
|
260
|
+
const translated = RED._(messageKey, values);
|
|
261
|
+
if (translated && translated !== messageKey) return translated;
|
|
261
262
|
} catch (error) { /* empty */ }
|
|
263
|
+
return undefined;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
const migrationText = (_node, key, fallback, values) => {
|
|
267
|
+
const translated = controllerMessage(key, values);
|
|
268
|
+
if (translated) return translated;
|
|
262
269
|
return fallback;
|
|
263
270
|
};
|
|
264
271
|
|
|
@@ -318,7 +325,13 @@
|
|
|
318
325
|
icon: 'node-hue-icon.svg',
|
|
319
326
|
label() {
|
|
320
327
|
const profile = PROFILE_TYPES[this.hueControllerType] || PROFILE_TYPES.light;
|
|
321
|
-
|
|
328
|
+
let typeLabel = profile.label;
|
|
329
|
+
try {
|
|
330
|
+
const translationKey = `node-red-contrib-knx-ultimate/knxUltimateHueController:knxUltimateHueController.types.${this.hueControllerType || 'light'}`;
|
|
331
|
+
const translated = RED._(translationKey);
|
|
332
|
+
if (translated && translated !== translationKey) typeLabel = translated;
|
|
333
|
+
} catch (error) { /* use catalog fallback */ }
|
|
334
|
+
return this.name || `HUE Controller · ${typeLabel}`;
|
|
322
335
|
},
|
|
323
336
|
paletteLabel: 'HUE Controller',
|
|
324
337
|
oneditprepare() {
|
|
@@ -435,10 +448,8 @@
|
|
|
435
448
|
};
|
|
436
449
|
|
|
437
450
|
const controllerText = (key, fallback) => {
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
if (translated && translated !== `knxUltimateHueController.${key}`) return translated;
|
|
441
|
-
} catch (error) { /* empty */ }
|
|
451
|
+
const translated = controllerMessage(key);
|
|
452
|
+
if (translated) return translated;
|
|
442
453
|
return fallback;
|
|
443
454
|
};
|
|
444
455
|
|
|
@@ -710,7 +721,9 @@
|
|
|
710
721
|
$container.toggleClass('hue-controller-light-profile', controllerType === 'light');
|
|
711
722
|
|
|
712
723
|
if (!definition || !template) {
|
|
713
|
-
$container.html('<div class="hue-controller-editor-error"
|
|
724
|
+
$container.html($('<div class="hue-controller-editor-error"></div>').text(
|
|
725
|
+
controllerText('editor_unavailable', 'The selected Hue editor is unavailable. Restart Node-RED after updating the package.')
|
|
726
|
+
));
|
|
714
727
|
return;
|
|
715
728
|
}
|
|
716
729
|
|
|
@@ -967,7 +980,7 @@
|
|
|
967
980
|
<script type="text/html" data-template-name="knxUltimateHueController">
|
|
968
981
|
<div class="form-row" style="margin-bottom:14px;">
|
|
969
982
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span>
|
|
970
|
-
<a target="_blank" rel="noopener noreferrer" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b
|
|
983
|
+
<a target="_blank" rel="noopener noreferrer" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b data-i18n="knxUltimateHueController.tutorials_link"></b></a>
|
|
971
984
|
</div>
|
|
972
985
|
<div class="form-row" id="hue-controller-migrate-legacy-flow-row" style="display:none; margin-bottom:14px;">
|
|
973
986
|
<a class="hue-legacy-migration-video" href="https://youtu.be/f0Evf2QFI7c" target="_blank" rel="noopener noreferrer" style="display:inline-flex; align-items:center; gap:5px; margin-right:10px;" data-i18n="[title]knxUltimateHueController.migration_video_title">
|
|
@@ -118,15 +118,15 @@
|
|
|
118
118
|
|
|
119
119
|
RED.nodes.registerType('knxUltimateMatterBridge', {
|
|
120
120
|
category: 'KNX Ultimate Matter',
|
|
121
|
-
color: '#
|
|
121
|
+
color: '#F3FFFF',
|
|
122
122
|
defaults: gaDefaults,
|
|
123
123
|
inputs: 0,
|
|
124
124
|
outputs: 0,
|
|
125
125
|
icon: 'node-matter-bridge-icon.svg',
|
|
126
126
|
label() {
|
|
127
|
-
return this.name || 'Expose KNX to Matter
|
|
127
|
+
return this.name || 'Expose KNX to Matter';
|
|
128
128
|
},
|
|
129
|
-
paletteLabel: 'Expose KNX to Matter
|
|
129
|
+
paletteLabel: 'Expose KNX to Matter',
|
|
130
130
|
oneditprepare() {
|
|
131
131
|
try { RED.sidebar.show('help'); } catch (error) { /* empty */ }
|
|
132
132
|
const node = this;
|
|
@@ -632,7 +632,7 @@
|
|
|
632
632
|
</script>
|
|
633
633
|
|
|
634
634
|
<script type="text/markdown" data-help-name="knxUltimateMatterBridge">
|
|
635
|
-
Exposes **one KNX device as a Matter device**.
|
|
635
|
+
Exposes **one KNX device as a Matter device**.
|
|
636
636
|
|
|
637
637
|
Point it to a **Matter Bridge** configuration node (the actual bridge, paired once by Alexa/Google Home/Apple Home), pick the device type, give it the name the assistant will use, and fill the group addresses.
|
|
638
638
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
RED.nodes.registerType("knxUltimateMatterControllerDevice", {
|
|
12
12
|
category: "KNX Ultimate Matter",
|
|
13
|
-
color: "#
|
|
13
|
+
color: "#F3FFFF",
|
|
14
14
|
defaults: {
|
|
15
15
|
//buttonState: {value: true},
|
|
16
16
|
server: { type: "knxUltimate-config", required: false },
|
|
@@ -142,9 +142,9 @@
|
|
|
142
142
|
outputs: 0,
|
|
143
143
|
icon: "node-matter-controller-icon.svg",
|
|
144
144
|
label: function () {
|
|
145
|
-
return this.name || this.matterDeviceName || "Control Matter from KNX
|
|
145
|
+
return this.name || this.matterDeviceName || "Control Matter from KNX";
|
|
146
146
|
},
|
|
147
|
-
paletteLabel: "Control Matter from KNX
|
|
147
|
+
paletteLabel: "Control Matter from KNX",
|
|
148
148
|
oneditprepare: function () {
|
|
149
149
|
// Go to the help panel
|
|
150
150
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateHueController">
|
|
2
|
-
<p><a href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E" target="_blank" rel="noopener noreferrer"><strong>KNX-Ultimate
|
|
2
|
+
<p><a href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E" target="_blank" rel="noopener noreferrer"><strong>KNX-Ultimate-Videotutorials (YouTube-Playlist)</strong></a> Sehen Sie sich vor dem Start die <a href="https://youtu.be/f0Evf2QFI7c" target="_blank" rel="noopener noreferrer">Videoanleitung auf YouTube</a> an.</p>
|
|
3
3
|
<p><strong>HUE Controller</strong> ist der einheitliche Knoten für Hue-API-v2-Ressourcen.</p>
|
|
4
4
|
<p>Wählen Sie ein Hue-Gerät oder eine Hue-Ressource. HUE Controller erkennt den Gerätetyp automatisch und öffnet den passenden Editor für KNX-Zuordnungen, Verhalten und Node-Anschlüsse.</p>
|
|
5
5
|
<p>Geräteauswahl, Aktualisierung und erkannter Typ stehen wie beim Matter Controller in derselben kompakten Zeile.</p>
|
|
@@ -154,6 +154,8 @@ Die Tabelle **Hue-native Effekte** ordnet KNX-Werte den vom Bridge gemeldeten Ef
|
|
|
154
154
|
| Night lighting | Nacht-Profil (Farbe oder Temperatur/Helligkeit) |
|
|
155
155
|
| Day/Night | GA zur Umschaltung Tag/Nacht (_true_ = Tag, _false_ = Nacht) |
|
|
156
156
|
| Invert Day/Night | Wert der Tag/Nacht-GA invertieren |
|
|
157
|
+
| Status beim Start lesen | Status beim Start lesen und bei Start/Wiederverbindung als Ereignis auf den KNX-Bus senden (Standard: „Nein“) |
|
|
158
|
+
| Tagmodus erzwingen | Der Tagmodus kann durch schnelles Aus- und Einschalten dieser Leuchte oder aller Leuchtenknoten aktiviert werden. |
|
|
157
159
|
| Node I/O pins | Ein/Ausblenden der Eingangs/Ausgangs-Pins; Input folgt HUE API v2 (z. B. <code>msg.on = { on: true }</code>) |
|
|
158
160
|
|
|
159
161
|
Hinweis: Start/Stop-Dimmen im KNX-Modus wird über die üblichen Start/Stop-Telegramme gesteuert.
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
"hue_bridge": "Hue Bridge"
|
|
5
5
|
},
|
|
6
6
|
"knxUltimateHueController": {
|
|
7
|
+
"locale": "de",
|
|
8
|
+
"tutorials_link": "KNX-Ultimate-Videotutorials (YouTube-Playlist)",
|
|
9
|
+
"editor_unavailable": "Der ausgewählte Hue-Editor ist nicht verfügbar. Starten Sie Node-RED nach der Paketaktualisierung neu.",
|
|
7
10
|
"device_function": "Gerätefunktion",
|
|
8
11
|
"hue_device": "Hue-Gerät",
|
|
9
12
|
"hue_device_placeholder": "Hue-Gerät oder -Ressource suchen",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateMatterBridge">
|
|
2
|
-
> Dieser Node ist in **BETA**: Er funktioniert, aber Details können sich zwischen Releases noch ändern.
|
|
3
|
-
|
|
4
2
|
## Übersicht
|
|
5
3
|
|
|
6
4
|
Jeder Expose KNX to Matter Node stellt **ein KNX-Gerät als Matter-Gerät** bereit: Die gekoppelten Controller (Alexa, Google Home, Apple Home...) sehen es mit dem von dir vergebenen Namen — bereit für App- und Sprachsteuerung. Verweise ihn auf einen **Matter Bridge**-Konfigurations-Node (die eigentliche Bridge, einmal gekoppelt - der Kopplungs-QR-Code lebt dort) und füge beliebig viele Device-Nodes hinzu, überall in deinen Flows.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"knxUltimateMatterBridge": {
|
|
3
|
-
"title": "Expose KNX to Matter
|
|
3
|
+
"title": "Expose KNX to Matter",
|
|
4
4
|
"bridge_name": "Name der Matter-Bridge",
|
|
5
5
|
"port": "Port",
|
|
6
6
|
"devices_help": "Füge die KNX-Geräte hinzu, die über Matter bereitgestellt werden sollen. Der \"Name\" ist der, den Alexa/Google/Apple anzeigen und für Sprachbefehle verwenden. Befehls-GA = wird geschrieben, wenn der Assistent einen Befehl sendet; Status-GA = wird vom Bus gelesen, um die App aktuell zu halten.",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateMatterControllerDevice">
|
|
2
|
-
> Dieser Knoten ist **BETA**: das Verhalten kann sich ändern, während die Matter-Implementierung weiter verfeinert wird.
|
|
3
|
-
|
|
4
2
|
Dieser Knoten steuert einen bereits gekoppelten Matter-Endpunkt über KNX. Wähle das Matter-Gerät aus; der Editor erkennt die Fähigkeiten des Endpunkts und zeigt nur die passenden KNX-Zuordnungen.
|
|
5
3
|
|
|
6
4
|
Ein Klick oder Fokus auf das Matter-Gerätefeld öffnet immer die vollständige Liste der gekoppelten Endpunkte, auch wenn bereits ein Gerät ausgewählt ist. Beim Tippen wird die Liste weiterhin gefiltert.
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
"hue_bridge": "Hue Bridge"
|
|
5
5
|
},
|
|
6
6
|
"knxUltimateHueController": {
|
|
7
|
+
"locale": "en",
|
|
8
|
+
"tutorials_link": "KNX-Ultimate video tutorials (YouTube playlist)",
|
|
9
|
+
"editor_unavailable": "The selected Hue editor is unavailable. Restart Node-RED after updating the package.",
|
|
7
10
|
"device_function": "Device function",
|
|
8
11
|
"hue_device": "Hue device",
|
|
9
12
|
"hue_device_placeholder": "Search your Hue device or resource",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateMatterBridge">
|
|
2
|
-
> This node is in **BETA**: it works, but details may still change between releases.
|
|
3
|
-
|
|
4
2
|
## Overview
|
|
5
3
|
|
|
6
4
|
Each Expose KNX to Matter node exposes **one KNX device as a Matter device**: the paired controllers (Alexa, Google Home, Apple Home...) see it, with the name you typed, ready for app and voice control. Point it to a **Matter Bridge** configuration node (the actual bridge, paired once - the pairing QR code lives there) and add as many device nodes as you want, anywhere in your flows.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"knxUltimateMatterBridge": {
|
|
3
|
-
"title": "Expose KNX to Matter
|
|
3
|
+
"title": "Expose KNX to Matter",
|
|
4
4
|
"bridge_name": "Matter bridge name",
|
|
5
5
|
"port": "Port",
|
|
6
6
|
"devices_help": "Add the KNX devices to expose on Matter. The \"Name\" is what Alexa/Google/Apple will show and use for voice commands. Command GA = written when the assistant sends a command; Status GA = read from the bus to keep the app updated.",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateMatterControllerDevice">
|
|
2
|
-
> This node is in **BETA**: behaviour can change while the Matter implementation is refined.
|
|
3
|
-
|
|
4
2
|
This node controls a commissioned Matter endpoint from KNX. Select the Matter device and the editor detects its capabilities, then shows only the KNX mappings that make sense for that endpoint.
|
|
5
3
|
|
|
6
4
|
Clicking or focusing the Matter device field always opens the complete commissioned endpoint list, even when a device is already selected. Typing continues to filter it.
|