node-red-contrib-knx-ultimate 5.2.2 → 5.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/img/readmemain.png +0 -0
  3. package/nodes/knxUltimateIoTBridge.html +59 -2
  4. package/nodes/knxUltimateIoTBridge.js +4 -0
  5. package/nodes/lib/mqtt-bridge.js +43 -1
  6. package/nodes/locales/de/knxUltimateIoTBridge.html +1 -0
  7. package/nodes/locales/de/knxUltimateIoTBridge.json +6 -0
  8. package/nodes/locales/de/matterbridge-config.html +2 -1
  9. package/nodes/locales/de/matterbridge-config.json +1 -0
  10. package/nodes/locales/en/knxUltimateIoTBridge.html +1 -0
  11. package/nodes/locales/en/knxUltimateIoTBridge.json +6 -0
  12. package/nodes/locales/en/matterbridge-config.html +2 -1
  13. package/nodes/locales/en/matterbridge-config.json +1 -0
  14. package/nodes/locales/es/knxUltimateIoTBridge.html +1 -0
  15. package/nodes/locales/es/knxUltimateIoTBridge.json +6 -0
  16. package/nodes/locales/es/matterbridge-config.html +2 -1
  17. package/nodes/locales/es/matterbridge-config.json +1 -0
  18. package/nodes/locales/fr/knxUltimateIoTBridge.html +1 -0
  19. package/nodes/locales/fr/knxUltimateIoTBridge.json +6 -0
  20. package/nodes/locales/fr/matterbridge-config.html +2 -1
  21. package/nodes/locales/fr/matterbridge-config.json +1 -0
  22. package/nodes/locales/it/knxUltimateIoTBridge.html +1 -0
  23. package/nodes/locales/it/knxUltimateIoTBridge.json +6 -0
  24. package/nodes/locales/it/matterbridge-config.html +2 -1
  25. package/nodes/locales/it/matterbridge-config.json +1 -0
  26. package/nodes/locales/zh-CN/knxUltimateIoTBridge.html +1 -0
  27. package/nodes/locales/zh-CN/knxUltimateIoTBridge.json +6 -0
  28. package/nodes/locales/zh-CN/matterbridge-config.html +2 -1
  29. package/nodes/locales/zh-CN/matterbridge-config.json +1 -0
  30. package/nodes/matterbridge-config.html +2 -2
  31. package/nodes/matterbridge-config.js +3 -1
  32. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ **Version 5.2.4** - July 2026<br/>
10
+
11
+ - **Matter Bridge — bridge name**: the *Matter bridge name* field (the name Alexa/Google/Apple show for the bridge itself) now falls back to the configuration node's own **Name** when left empty, instead of the generic `KNX-Ultimate Bridge`. The field is empty by default with a placeholder hint, so a freshly named bridge is never anonymous during pairing.<br/>
12
+ - **Naming clarification**: Alexa and Google Home honor the names set on the bridge and on the device nodes, so they appear automatically in the apps. **Apple Home deliberately ignores the provided names and asks you to name each accessory manually during setup** — this is an Apple/HomeKit limitation, not a bridge issue. Node help and the online docs now document this difference in all six languages (EN/IT/DE/FR/ES/zh-CN).<br/>
13
+
14
+ **Version 5.2.3** - July 2026<br/>
15
+
16
+ - **MQTT / Home Assistant bridge — Entity name format**: new selector to reshape the names exposed to Home Assistant. The ETS import builds each name with the group-address path first (e.g. `(Lights->Ground floor) Living room`); now you can choose *As imported from ETS* (default), *Name first* (`Living room (Lights->Ground floor)`), *Name only* (`Living room`) or *Name + group address* (`Living room (0/1/2)`). Changing it only updates the friendly name (the `unique_id`/`object_id` stay stable, so existing entities are not duplicated).<br/>
17
+ - The group-address list in the editor now previews the chosen format **live**: pick a format and every row is re-labelled instantly, exactly as it will appear in Home Assistant, without reloading the list or losing the expose / read-only ticks.<br/>
18
+ - Entity names are sanitized before publishing: ASCII control characters are stripped and runs of whitespace collapsed (ETS exports sometimes lose an accented character and leave a double space, e.g. `Velocità vento` → `Velocit vento`), and a name that would be empty falls back to the group address.<br/>
19
+ - **Documentation**: node help and the online IoT-Bridge page updated for the new option in all six languages (EN/IT/DE/FR/ES/zh-CN).<br/>
20
+
9
21
  **Version 5.2.2** - July 2026<br/>
10
22
 
11
23
  - New **Matter Bridge (BETA)**: exposes **KNX group addresses as Matter devices**. Alexa, Google Home, Apple Home (or any Matter controller) commission the bridge once — via QR code or 11-digit manual code shown in the editor — and see all your KNX devices with the names you typed, ready for app and voice control. It is the opposite direction of the Matter Device node introduced in 5.1.0.<br/>
Binary file
@@ -12,7 +12,7 @@
12
12
  readOnDeploy: { value: true },
13
13
  acceptFlowInput: { value: true },
14
14
  mappings: { value: [] },
15
- nodeMode: { value: 'iot' },
15
+ nodeMode: { value: 'homeassistant' },
16
16
  haBusMode: { value: 'standalone' },
17
17
  inputs: { value: 1 },
18
18
  outputs: { value: 2 },
@@ -20,6 +20,7 @@
20
20
  mqttBaseTopic: { value: 'knx-ultimate' },
21
21
  mqttDiscovery: { value: true },
22
22
  mqttDiscoveryPrefix: { value: 'homeassistant' },
23
+ mqttNameFormat: { value: 'full' },
23
24
  mqttCustomEntities: { value: [] },
24
25
  mqttExposedGAs: { value: [] },
25
26
  mqttReadOnlyGAs: { value: [] },
@@ -327,6 +328,41 @@
327
328
  const readOnlySet = new Set(Array.isArray(node.mqttReadOnlyGAs) ? node.mqttReadOnlyGAs : []);
328
329
  const exposeConfigured = node.mqttExposeConfigured === true;
329
330
 
331
+ // Mirror of formatEntityName() in lib/mqtt-bridge.js so the preview here matches
332
+ // exactly what gets published to Home Assistant (control chars stripped, whitespace
333
+ // collapsed, ETS path reshaped per the chosen format).
334
+ function sanitizeGaName(value) {
335
+ return String(value == null ? '' : value)
336
+ .replace(/[\u0000-\u001f\u007f]/g, ' ')
337
+ .replace(/\s+/g, ' ')
338
+ .trim();
339
+ }
340
+ function formatGaName(raw, ga, format) {
341
+ const full = sanitizeGaName(raw);
342
+ if (full === '') return ga;
343
+ if (!format || format === 'full') return full;
344
+ const m = full.match(/^\(([^)]*)\)\s*(.*)$/);
345
+ const path = m ? m[1].trim() : '';
346
+ const name = m ? (m[2].trim() || ga) : full;
347
+ let result;
348
+ switch (format) {
349
+ case 'name-first': result = path ? (name + ' (' + path + ')') : name; break;
350
+ case 'name-only': result = name; break;
351
+ case 'name-ga': result = name + ' (' + ga + ')'; break;
352
+ default: result = full;
353
+ }
354
+ return sanitizeGaName(result) || ga;
355
+ }
356
+ // Re-label every GA row from its stored raw name using the currently selected format.
357
+ function applyGaNameFormat() {
358
+ const fmt = $('#node-input-mqttNameFormat').val() || 'full';
359
+ $('#mqtt-ga-list .mqtt-ga-name').each(function () {
360
+ const span = $(this);
361
+ const text = formatGaName(span.data('raw'), span.data('ga'), fmt);
362
+ span.text(text).attr('title', text);
363
+ });
364
+ }
365
+
330
366
  function updateGaCount() {
331
367
  const total = $('#mqtt-ga-list input.mqtt-ga-cb').length;
332
368
  const sel = $('#mqtt-ga-list input.mqtt-ga-cb:checked').length;
@@ -359,7 +395,9 @@
359
395
  const cb = $('<input/>', { type: 'checkbox', class: 'mqtt-ga-cb', value: item.ga, style: 'width:auto; margin:0; flex:0 0 auto;' }).appendTo(row);
360
396
  cb.prop('checked', exposeConfigured ? savedSet.has(item.ga) : true);
361
397
  $('<span/>').css({ flex: '0 0 auto', fontFamily: 'monospace', minWidth: '64px' }).text(item.ga).appendTo(row);
362
- $('<span/>').css({ flex: '1 1 auto', minWidth: '0', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', color: '#444' }).attr('title', item.devicename || '').text(item.devicename || '').appendTo(row);
398
+ // Keep the raw ETS name + GA on the element so applyGaNameFormat() can
399
+ // re-label it live when the "Entity name format" select changes.
400
+ $('<span/>').addClass('mqtt-ga-name').css({ flex: '1 1 auto', minWidth: '0', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', color: '#444' }).data('raw', item.devicename || '').data('ga', item.ga).appendTo(row);
363
401
  $('<span/>').css({ flex: '0 0 auto', color: '#888', fontSize: '11px' }).text('DPT' + (item.dpt || '')).appendTo(row);
364
402
  // Read-only toggle: expose the GA to HA but never accept commands back to KNX.
365
403
  const roLabel = $('<label/>').css({ flex: '0 0 auto', display: 'flex', alignItems: 'center', gap: '3px', margin: '0', fontSize: '11px', color: '#888', cursor: 'pointer' }).appendTo(row);
@@ -374,6 +412,7 @@
374
412
  });
375
413
  });
376
414
  $('#mqtt-ga-list input.mqtt-ga-cb').on('change', updateGaCount);
415
+ applyGaNameFormat();
377
416
  updateGaCount();
378
417
  }).fail(function () {
379
418
  list.empty().append($('<div/>').css('color', '#c0392b').text(node._('knxUltimateIoTBridge.ha.csv_error')));
@@ -395,6 +434,8 @@
395
434
 
396
435
  buildGaList();
397
436
  $('#node-input-server').on('change', buildGaList);
437
+ // Live-preview the entity naming: re-label the list when the format select changes.
438
+ $('#node-input-mqttNameFormat').on('change', applyGaNameFormat);
398
439
  } catch (error) { }
399
440
 
400
441
  // Home Assistant composite entities (cover / climate): editable list.
@@ -675,6 +716,19 @@
675
716
  <label for="node-input-mqttDiscoveryPrefix" data-i18n="knxUltimateIoTBridge.ha.discovery_prefix"></label>
676
717
  <input type="text" id="node-input-mqttDiscoveryPrefix" placeholder="homeassistant" />
677
718
  </div>
719
+ <div class="form-row ha-mode-row">
720
+ <label for="node-input-mqttNameFormat" data-i18n="knxUltimateIoTBridge.ha.name_format"></label>
721
+ <select id="node-input-mqttNameFormat" style="width:70%;">
722
+ <option value="full" data-i18n="knxUltimateIoTBridge.ha.name_format_full"></option>
723
+ <option value="name-first" data-i18n="knxUltimateIoTBridge.ha.name_format_name_first"></option>
724
+ <option value="name-only" data-i18n="knxUltimateIoTBridge.ha.name_format_name_only"></option>
725
+ <option value="name-ga" data-i18n="knxUltimateIoTBridge.ha.name_format_name_ga"></option>
726
+ </select>
727
+ </div>
728
+ <div class="form-row ha-mode-row" style="margin-top:-4px;">
729
+ <label style="width:auto;">&nbsp;</label>
730
+ <span style="font-size:11px; color:#888;" data-i18n="knxUltimateIoTBridge.ha.name_format_hint"></span>
731
+ </div>
678
732
  <div class="form-row ha-mode-row" id="rowMqttGaSelect">
679
733
  <label style="width:auto; font-weight:600;" data-i18n="knxUltimateIoTBridge.ha.exposed_gas"></label>
680
734
  <div style="margin:4px 0; display:flex; gap:6px; align-items:center;">
@@ -733,6 +787,9 @@ Native MQTT bridge with Home Assistant discovery. Every group address imported i
733
787
 
734
788
  Requires an MQTT broker reachable by both Node-RED and Home Assistant, with the MQTT integration enabled in HA. Entities appear under a device named after this node.
735
789
 
790
+ ### Entity name format
791
+ The ETS import builds each name with the group-address path first, e.g. `(Lights->Ground floor) Living room`. The **Entity name format** selector controls how the Home Assistant entity names are built: *As imported from ETS* (default), *Name first* (`Living room (Lights->Ground floor)`), *Name only* (`Living room`) or *Name + group address* (`Living room (0/1/2)`).
792
+
736
793
  ### KNX bus connection
737
794
  Choose how the node exchanges telegrams with KNX:
738
795
 
@@ -51,6 +51,9 @@ module.exports = function (RED) {
51
51
  node.mqttBaseTopic = typeof config.mqttBaseTopic === 'string' && config.mqttBaseTopic.trim() !== '' ? config.mqttBaseTopic.trim() : 'knx-ultimate'
52
52
  node.mqttDiscovery = config.mqttDiscovery !== false && config.mqttDiscovery !== 'false'
53
53
  node.mqttDiscoveryPrefix = typeof config.mqttDiscoveryPrefix === 'string' && config.mqttDiscoveryPrefix.trim() !== '' ? config.mqttDiscoveryPrefix.trim() : 'homeassistant'
54
+ // Entity name format for the exposed GAs: 'full' (ETS path + name, as imported),
55
+ // 'name-first' (name first, path after), 'name-only' (path removed), 'name-ga' (name + GA).
56
+ node.mqttNameFormat = typeof config.mqttNameFormat === 'string' && config.mqttNameFormat.trim() !== '' ? config.mqttNameFormat.trim() : 'full'
54
57
  node.mqttCustomEntities = Array.isArray(config.mqttCustomEntities) ? config.mqttCustomEntities : []
55
58
  // Group addresses to expose as simple entities. Once the user curates the list
56
59
  // (mqttExposeConfigured), only the listed GAs are exposed; otherwise all imported GAs are.
@@ -180,6 +183,7 @@ module.exports = function (RED) {
180
183
  baseTopic: node.mqttBaseTopic,
181
184
  discovery: node.mqttDiscovery,
182
185
  discoveryPrefix: node.mqttDiscoveryPrefix,
186
+ nameFormat: node.mqttNameFormat,
183
187
  username: node.credentials ? node.credentials.mqttUsername : undefined,
184
188
  password: node.credentials ? node.credentials.mqttPassword : undefined,
185
189
  groupAddresses: (node.serverKNX && Array.isArray(node.serverKNX.csv)) ? node.serverKNX.csv : [],
@@ -48,6 +48,45 @@ function normalizeGa (ga) {
48
48
  return typeof ga === 'string' ? ga.trim() : ''
49
49
  }
50
50
 
51
+ // Clean up an entity name for Home Assistant: strip ASCII control characters and collapse
52
+ // runs of whitespace (ETS exports sometimes lose an accented char and leave a double space,
53
+ // e.g. "Velocità vento" -> "Velocit vento"). This keeps the friendly name and the entity_id
54
+ // HA derives from it tidy, and never lets an all-blank/control-only string through.
55
+ function sanitizeEntityName (value) {
56
+ return String(value == null ? '' : value)
57
+ // eslint-disable-next-line no-control-regex
58
+ .replace(/[\u0000-\u001f\u007f]/g, ' ')
59
+ .replace(/\s+/g, ' ')
60
+ .trim()
61
+ }
62
+
63
+ // ETS imports (CSV and ESF) build devicename as "(Main group->Middle group) GA name":
64
+ // the group-address path first, then the actual GA name. Reshape it according to the
65
+ // entity-name format chosen by the user for Home Assistant.
66
+ function formatEntityName (raw, ga, format) {
67
+ const full = sanitizeEntityName(raw)
68
+ if (full === '') return ga
69
+ if (!format || format === 'full') return full
70
+ const match = full.match(/^\(([^)]*)\)\s*(.*)$/)
71
+ const path = match ? match[1].trim() : ''
72
+ const name = match ? (match[2].trim() || ga) : full
73
+ let result
74
+ switch (format) {
75
+ case 'name-first':
76
+ result = path ? `${name} (${path})` : name
77
+ break
78
+ case 'name-only':
79
+ result = name
80
+ break
81
+ case 'name-ga':
82
+ result = `${name} (${ga})`
83
+ break
84
+ default:
85
+ result = full
86
+ }
87
+ return sanitizeEntityName(result) || ga
88
+ }
89
+
51
90
  function toFiniteNumber (value, fallback) {
52
91
  const n = Number(value)
53
92
  return Number.isFinite(n) ? n : fallback
@@ -69,6 +108,9 @@ function createMqttBridge (options) {
69
108
  const discoveryPrefix = (typeof opts.discoveryPrefix === 'string' && opts.discoveryPrefix.trim()) || 'homeassistant'
70
109
  const username = typeof opts.username === 'string' && opts.username ? opts.username : undefined
71
110
  const password = typeof opts.password === 'string' && opts.password ? opts.password : undefined
111
+ // How simple per-GA entity names are built from the ETS devicename: 'full' (as imported),
112
+ // 'name-first' (GA name first, path after), 'name-only' (path stripped), 'name-ga' (name + GA).
113
+ const nameFormat = typeof opts.nameFormat === 'string' && opts.nameFormat ? opts.nameFormat : 'full'
72
114
 
73
115
  // Source per-GA entities: [{ ga, dpt, devicename }]
74
116
  const sourceGAs = Array.isArray(opts.groupAddresses) ? opts.groupAddresses : []
@@ -325,7 +367,7 @@ function createMqttBridge (options) {
325
367
  : map.domain
326
368
  const slug = uniqueSlug(baseSlug)
327
369
  const uniqueId = `${deviceId}_${slug}`
328
- const name = (typeof entry.devicename === 'string' && entry.devicename.trim()) ? entry.devicename.trim() : ga
370
+ const name = formatEntityName(entry.devicename, ga, nameFormat)
329
371
  const stateTopic = `${root}/${slug}/state`
330
372
  const commandTopic = `${root}/${slug}/set`
331
373
 
@@ -16,6 +16,7 @@ Eine native MQTT-Bridge mit Home-Assistant-Discovery. Benötigt einen MQTT-Broke
16
16
  - *Flow-Nachrichten* — der Knoten zeigt einen Eingangs- und einen Ausgangs-Pin. Verbinden Sie den Ausgang eines KNXUltimate-Knotens im **Universal**-Modus mit dem Eingangs-Pin (KNX-Bus → MQTT) und den Ausgangs-Pin mit dem Eingang eines weiteren KNXUltimate-Knotens im **Universal**-Modus (MQTT → KNX-Bus).
17
17
  - **Broker-URL / Benutzername / Passwort** — Verbindung zu Ihrem MQTT-Broker.
18
18
  - **Basis-Topic / Discovery-Präfix** — Root-Topic für Status-/Befehls-Topics und das HA-Discovery-Präfix (Standard `homeassistant`).
19
+ - **Format des Entitätsnamens** — wie die Namen der Home-Assistant-Entitäten aus dem ETS-Import gebildet werden, dessen Namen mit dem Gruppenpfad beginnen, z. B. `(Licht->Erdgeschoss) Wohnzimmer`. Wählen Sie *Wie aus ETS importiert* (Standard), *Name zuerst* (`Wohnzimmer (Licht->Erdgeschoss)`), *Nur der Name* (`Wohnzimmer`) oder *Name + Gruppenadresse* (`Wohnzimmer (0/1/2)`).
19
20
  - **Bereitzustellende Gruppenadressen** — jede im KNX-Gateway importierte Adresse (ETS-Liste) wird mit einem Kontrollkästchen angezeigt. Angehakte Adressen werden als Home-Assistant-Entitäten veröffentlicht, automatisch nach dem DPT typisiert (switch, sensor, binary_sensor, number, text). Verwenden Sie das Filterfeld und die Schaltflächen *Alle auswählen* / *Keine auswählen*. Standardmäßig sind alle Adressen ausgewählt. Jede Zeile hat zudem eine Option **Nur lesen**: eine schreibgeschützte Adresse wird weiterhin an Home Assistant veröffentlicht (ihr Status bleibt sichtbar), akzeptiert aber nie Befehle zurück auf den KNX-Bus (switch werden zu binary_sensor, number zu sensor). Die Schaltflächen *Nur lesen setzen* / *Nur lesen entfernen* wenden dies auf alle aktuell angezeigten Adressen an.
20
21
  - **Rollläden & Thermostate** — fassen mehrere Adressen zu einer Entität zusammen:
21
22
  - *Rollladen*: Auf/Ab-GA (1.008), optionale Stopp-GA (1.007), optionale Positions-GA Befehl/Status (5.001). *Position invertieren* bildet die KNX-Konvention (0% = offen) auf Home Assistant (100% = offen) ab.
@@ -22,6 +22,12 @@
22
22
  "base_topic": "Basis-Topic",
23
23
  "discovery": "Home-Assistant-Discovery veröffentlichen",
24
24
  "discovery_prefix": "Discovery-Präfix",
25
+ "name_format": "Format des Entitätsnamens",
26
+ "name_format_full": "Wie aus ETS importiert: (Hauptgruppe->Mittelgruppe) Name",
27
+ "name_format_name_first": "Name zuerst: Name (Hauptgruppe->Mittelgruppe)",
28
+ "name_format_name_only": "Nur der Name (ETS-Gruppenpfad entfernen)",
29
+ "name_format_name_ga": "Name + Gruppenadresse: Name (1/2/3)",
30
+ "name_format_hint": "Wie die Namen der Home-Assistant-Entitäten aus den importierten ETS-Namen gebildet werden, die mit dem Gruppenpfad beginnen.",
25
31
  "hint": "Erfordert einen MQTT-Broker, der sowohl von Node-RED als auch von Home Assistant erreichbar ist, mit aktivierter MQTT-Integration in HA. Die Entitäten erscheinen unter einem Gerät mit dem Namen dieses Knotens. KNX-Buswerte werden an MQTT veröffentlicht und beschreibbare Datenpunkte akzeptieren Befehle von Home Assistant.",
26
32
  "exposed_gas": "Bereitzustellende Gruppenadressen",
27
33
  "exposed_gas_hint": "Wähle die Gruppenadressen aus, die an Home Assistant veröffentlicht werden sollen. Standardmäßig sind alle importierten Adressen ausgewählt. Von einem Rollladen/Thermostat (unten) verwendete Adressen werden dort behandelt und müssen hier nicht ausgewählt werden.",
@@ -12,7 +12,7 @@ Dieser Konfigurations-Node ist die **Matter-Bridge selbst**: Er betreibt den Mat
12
12
  |Feld|Beschreibung|
13
13
  |--|--|
14
14
  | Name | Der Name dieses Konfigurations-Nodes in Node-RED |
15
- | Name der Matter-Bridge | Wie die Bridge selbst in den Matter-Apps heißt |
15
+ | Name der Matter-Bridge | Wie die Bridge selbst in den Matter-Apps heißt. **Leer lassen, um den Namen dieses Nodes zu verwenden.** |
16
16
  | Port | UDP-Port des Matter-Servers (Standard 5540). Jede Bridge braucht ihren eigenen Port, daher sind **mehrere unabhängige Bridges** möglich |
17
17
 
18
18
  ## Kopplung
@@ -31,4 +31,5 @@ Die Bridge-Identität ist an diesen Konfigurations-Node gebunden und wird in `kn
31
31
 
32
32
  - Der Node-RED-Host muss **IPv6 link-local** aktiviert haben (Standard-Matter-Anforderung) und von den Controllern im lokalen Netzwerk erreichbar sein.
33
33
  - Hinzugefügte/umbenannte/entfernte Device-Nodes werden von den gekoppelten Controllern innerhalb von Sekunden übernommen, ohne neue Kopplung.
34
+ - **Namen:** Alexa und Google Home übernehmen die hier gesetzten Namen (Bridge-Name und Device-Node-Namen). **Apple Home ignoriert sie und verlangt, jedes Zubehör bei der Einrichtung manuell zu benennen** — eine Einschränkung von Apple, nicht der Bridge.
34
35
  </script>
@@ -5,6 +5,7 @@
5
5
  "intro": "Dieser Konfigurations-Node ist die Matter-Bridge selbst: Alexa, Google Home, Apple Home (oder jeder Matter-Controller) koppeln sie einmal und sehen alle KNX-Geräte, die du ihr zuweist. Füge \"Matter Bridge device\"-Nodes in deinen Flows hinzu und verweise sie hierher. Zuerst deployen, dann erneut öffnen für den Kopplungscode.",
6
6
  "node-config-input-name": "Name",
7
7
  "bridge_name": "Name der Matter-Bridge",
8
+ "bridge_name_ph": "Leer lassen, um den Node-Namen zu verwenden",
8
9
  "port": "Port",
9
10
  "pairing_title": "Kopplung (Alexa, Google Home, Apple Home...)",
10
11
  "not_running": "Die Matter-Bridge läuft noch nicht. Deployen, ein paar Sekunden warten und dann auf Aktualisieren klicken.",
@@ -16,6 +16,7 @@ A native MQTT bridge with Home Assistant discovery. It needs an MQTT broker reac
16
16
  - *Flow messages* — the node exposes an input pin and an output pin. Wire the output of a KNXUltimate node in **Universal** mode to the input (KNX bus → MQTT) and the output pin to the input of another KNXUltimate node in **Universal** mode (MQTT → KNX bus).
17
17
  - **Broker URL / Username / Password** — connection to your MQTT broker.
18
18
  - **Base topic / Discovery prefix** — root topic for state/command topics and the HA discovery prefix (default `homeassistant`).
19
+ - **Entity name format** — how the Home Assistant entity names are built from the ETS import, whose names start with the group-address path, e.g. `(Lights->Ground floor) Living room`. Choose *As imported from ETS* (default), *Name first* (`Living room (Lights->Ground floor)`), *Name only* (`Living room`) or *Name + group address* (`Living room (0/1/2)`).
19
20
  - **Group addresses to expose** — every address imported in the KNX gateway (ETS list) is shown with a checkbox. Ticked addresses are published as Home Assistant entities, typed automatically from the DPT (switch, sensor, binary_sensor, number, text). Use the filter box and the *Select all* / *Select none* buttons. By default all addresses are selected. Each row also has a **Read only** toggle: a read-only address is still published to Home Assistant (its state stays visible) but never accepts commands back to the KNX bus (switches become binary_sensors, numbers become sensors). The *Set read only* / *Clear read only* buttons apply it to all currently shown addresses.
20
21
  - **Covers & Thermostats** — group several addresses into one entity:
21
22
  - *Cover*: Up/Down GA (1.008), optional Stop GA (1.007), optional Set/Status position GA (5.001). *Invert position* maps the KNX convention (0% = open) to Home Assistant (100% = open).
@@ -22,6 +22,12 @@
22
22
  "base_topic": "Base topic",
23
23
  "discovery": "Publish Home Assistant discovery",
24
24
  "discovery_prefix": "Discovery prefix",
25
+ "name_format": "Entity name format",
26
+ "name_format_full": "As imported from ETS: (Main group->Middle group) Name",
27
+ "name_format_name_first": "Name first: Name (Main group->Middle group)",
28
+ "name_format_name_only": "Name only (remove the ETS group path)",
29
+ "name_format_name_ga": "Name + group address: Name (1/2/3)",
30
+ "name_format_hint": "How the Home Assistant entity names are built from the imported ETS names, which start with the group-address path.",
25
31
  "hint": "Requires an MQTT broker reachable by both Node-RED and Home Assistant, with the MQTT integration enabled in HA. Entities appear under a device named after this node. KNX bus values are published to MQTT and writable datapoints accept commands from Home Assistant.",
26
32
  "exposed_gas": "Group addresses to expose",
27
33
  "exposed_gas_hint": "Tick the group addresses you want to publish to Home Assistant. By default every imported address is selected. Addresses used by a cover/thermostat below are handled there and don't need to be ticked here.",
@@ -12,7 +12,7 @@ This configuration node is the **Matter bridge itself**: it runs the Matter serv
12
12
  |Field|Description|
13
13
  |--|--|
14
14
  | Name | The name of this configuration node in Node-RED |
15
- | Matter bridge name | How the bridge itself is named in the Matter apps |
15
+ | Matter bridge name | How the bridge itself is named in the Matter apps. **Leave it empty to reuse this node's Name.** |
16
16
  | Port | UDP port of the Matter server (default 5540). Each bridge needs its own port, so you can run **multiple independent bridges** |
17
17
 
18
18
  ## Pairing
@@ -31,4 +31,5 @@ The bridge identity is tied to this configuration node and stored in `knxultimat
31
31
 
32
32
  - The Node-RED host must have **IPv6 link-local** enabled (standard Matter requirement) and be reachable from the controllers on the local network.
33
33
  - Device nodes added/renamed/removed are picked up by the paired controllers within seconds, without re-pairing.
34
+ - **Naming:** Alexa and Google Home honor the names you set here (bridge name and device node names). **Apple Home ignores them and asks you to name each accessory manually during setup** — this is an Apple limitation, not a bridge issue.
34
35
  </script>
@@ -5,6 +5,7 @@
5
5
  "intro": "This configuration node is the Matter bridge itself: Alexa, Google Home, Apple Home (or any Matter controller) pair it once and see every KNX device you attach to it. Add \"Matter Bridge device\" nodes across your flows and point them here. Deploy first, then reopen to get the pairing code.",
6
6
  "node-config-input-name": "Name",
7
7
  "bridge_name": "Matter bridge name",
8
+ "bridge_name_ph": "Leave empty to use the node name",
8
9
  "port": "Port",
9
10
  "pairing_title": "Pairing (Alexa, Google Home, Apple Home...)",
10
11
  "not_running": "The Matter bridge is not running yet. Deploy, wait a few seconds, then click refresh.",
@@ -16,6 +16,7 @@ Un puente MQTT nativo con descubrimiento de Home Assistant. Requiere un broker M
16
16
  - *Mensajes de flujo* — el nodo muestra un pin de entrada y uno de salida. Conecta la salida de un nodo KNXUltimate en modo **Universal** al pin de entrada (bus KNX → MQTT) y el pin de salida a la entrada de otro nodo KNXUltimate en modo **Universal** (MQTT → bus KNX).
17
17
  - **URL del broker / Usuario / Contraseña** — conexión a tu broker MQTT.
18
18
  - **Topic base / Prefijo de descubrimiento** — topic raíz para los topics de estado/comando y el prefijo de descubrimiento de HA (predeterminado `homeassistant`).
19
+ - **Formato del nombre de entidad** — cómo se construyen los nombres de las entidades de Home Assistant a partir de la importación ETS, cuyos nombres empiezan por la ruta de grupos, p. ej. `(Luces->Planta baja) Salón`. Elige *Como se importó de ETS* (predeterminado), *Nombre primero* (`Salón (Luces->Planta baja)`), *Solo el nombre* (`Salón`) o *Nombre + dirección de grupo* (`Salón (0/1/2)`).
19
20
  - **Direcciones de grupo a exponer** — cada dirección importada en la pasarela KNX (lista ETS) se muestra con una casilla. Las direcciones marcadas se publican como entidades de Home Assistant, tipadas automáticamente a partir del DPT (switch, sensor, binary_sensor, number, text). Usa el filtro y los botones *Seleccionar todo* / *Deseleccionar todo*. Por defecto están todas seleccionadas. Cada fila tiene además una opción **Solo lectura**: una dirección de solo lectura se sigue publicando en Home Assistant (su estado permanece visible) pero nunca acepta comandos de vuelta al bus KNX (los switch pasan a binary_sensor y los number a sensor). Los botones *Marcar solo lectura* / *Quitar solo lectura* la aplican a todas las direcciones mostradas actualmente.
20
21
  - **Persianas y termostatos** — agrupan varias direcciones en una sola entidad:
21
22
  - *Persiana*: GA subir/bajar (1.008), GA stop opcional (1.007), GA posición comando/estado opcional (5.001). *Invertir posición* asigna la convención KNX (0% = abierto) a Home Assistant (100% = abierto).
@@ -22,6 +22,12 @@
22
22
  "base_topic": "Topic base",
23
23
  "discovery": "Publicar descubrimiento de Home Assistant",
24
24
  "discovery_prefix": "Prefijo de descubrimiento",
25
+ "name_format": "Formato del nombre de entidad",
26
+ "name_format_full": "Como se importó de ETS: (Grupo principal->Grupo intermedio) Nombre",
27
+ "name_format_name_first": "Nombre primero: Nombre (Grupo principal->Grupo intermedio)",
28
+ "name_format_name_only": "Solo el nombre (eliminar la ruta ETS)",
29
+ "name_format_name_ga": "Nombre + dirección de grupo: Nombre (1/2/3)",
30
+ "name_format_hint": "Cómo se construyen los nombres de las entidades de Home Assistant a partir de los nombres importados de ETS, que empiezan por la ruta de grupos.",
25
31
  "hint": "Requiere un broker MQTT accesible tanto por Node-RED como por Home Assistant, con la integración MQTT activada en HA. Las entidades aparecen bajo un dispositivo con el nombre de este nodo. Los valores del bus KNX se publican en MQTT y los datapoints escribibles aceptan comandos desde Home Assistant.",
26
32
  "exposed_gas": "Direcciones de grupo a exponer",
27
33
  "exposed_gas_hint": "Marca las direcciones de grupo que quieres publicar en Home Assistant. Por defecto están todas seleccionadas. Las direcciones usadas por una persiana/termostato (abajo) se gestionan allí y no necesitan marcarse aquí.",
@@ -12,7 +12,7 @@ Este nodo de configuración es el **bridge Matter en sí**: ejecuta el servidor
12
12
  |Campo|Descripción|
13
13
  |--|--|
14
14
  | Nombre | El nombre de este nodo de configuración en Node-RED |
15
- | Nombre del bridge Matter | Cómo se llama el bridge en las apps Matter |
15
+ | Nombre del bridge Matter | Cómo se llama el bridge en las apps Matter. **Déjalo vacío para reutilizar el Nombre de este nodo.** |
16
16
  | Puerto | Puerto UDP del servidor Matter (por defecto 5540). Cada bridge necesita su propio puerto, por lo que puedes ejecutar **varios bridges independientes** |
17
17
 
18
18
  ## Emparejamiento
@@ -31,4 +31,5 @@ La identidad del bridge está ligada a este nodo de configuración y se guarda e
31
31
 
32
32
  - El host de Node-RED debe tener **IPv6 link-local** habilitado (requisito estándar de Matter) y ser accesible desde los controladores en la red local.
33
33
  - Los nodos de dispositivo añadidos/renombrados/eliminados se detectan en pocos segundos, sin volver a emparejar.
34
+ - **Nombres:** Alexa y Google Home respetan los nombres que pongas aquí (nombre del bridge y nombres de los nodos de dispositivo). **Apple Home los ignora y te pide nombrar cada accesorio manualmente durante la configuración** — es una limitación de Apple, no del bridge.
34
35
  </script>
@@ -5,6 +5,7 @@
5
5
  "intro": "Este nodo de configuración es el bridge Matter en sí: Alexa, Google Home, Apple Home (o cualquier controlador Matter) lo emparejan una vez y ven todos los dispositivos KNX que le conectes. Añade nodos \"Matter Bridge device\" en tus flows y apúntalos aquí. Haz deploy primero y vuelve a abrir para obtener el código.",
6
6
  "node-config-input-name": "Nombre",
7
7
  "bridge_name": "Nombre del bridge Matter",
8
+ "bridge_name_ph": "Déjalo vacío para usar el nombre del nodo",
8
9
  "port": "Puerto",
9
10
  "pairing_title": "Emparejamiento (Alexa, Google Home, Apple Home...)",
10
11
  "not_running": "El bridge Matter aún no está en ejecución. Haz deploy, espera unos segundos y pulsa actualizar.",
@@ -16,6 +16,7 @@ Une passerelle MQTT native avec découverte Home Assistant. Nécessite un broker
16
16
  - *Messages de flux* — le nœud affiche une broche d'entrée et une de sortie. Reliez la sortie d'un nœud KNXUltimate en mode **Universel** à la broche d'entrée (bus KNX → MQTT) et la broche de sortie à l'entrée d'un autre nœud KNXUltimate en mode **Universel** (MQTT → bus KNX).
17
17
  - **URL du broker / Nom d'utilisateur / Mot de passe** — connexion à votre broker MQTT.
18
18
  - **Topic de base / Préfixe de découverte** — topic racine pour les topics d'état/commande et le préfixe de découverte HA (par défaut `homeassistant`).
19
+ - **Format du nom d'entité** — comment les noms des entités Home Assistant sont construits à partir de l'import ETS, dont les noms commencent par le chemin des groupes, p. ex. `(Lumières->Rez-de-chaussée) Salon`. Choisissez *Tel qu'importé d'ETS* (par défaut), *Nom d'abord* (`Salon (Lumières->Rez-de-chaussée)`), *Nom seul* (`Salon`) ou *Nom + adresse de groupe* (`Salon (0/1/2)`).
19
20
  - **Adresses de groupe à exposer** — chaque adresse importée dans la passerelle KNX (liste ETS) est affichée avec une case à cocher. Les adresses cochées sont publiées comme entités Home Assistant, typées automatiquement d'après le DPT (switch, sensor, binary_sensor, number, text). Utilisez le champ de filtre et les boutons *Tout sélectionner* / *Tout désélectionner*. Par défaut, toutes les adresses sont sélectionnées. Chaque ligne dispose aussi d'une option **Lecture seule** : une adresse en lecture seule est toujours publiée vers Home Assistant (son état reste visible) mais n'accepte jamais de commandes vers le bus KNX (les switch deviennent des binary_sensor et les number des sensor). Les boutons *Activer lecture seule* / *Retirer lecture seule* l'appliquent à toutes les adresses actuellement affichées.
20
21
  - **Volets et thermostats** — regroupent plusieurs adresses en une seule entité :
21
22
  - *Volet* : GA montée/descente (1.008), GA stop optionnelle (1.007), GA position commande/état optionnelle (5.001). *Inverser la position* fait correspondre la convention KNX (0% = ouvert) à Home Assistant (100% = ouvert).
@@ -22,6 +22,12 @@
22
22
  "base_topic": "Topic de base",
23
23
  "discovery": "Publier la découverte Home Assistant",
24
24
  "discovery_prefix": "Préfixe de découverte",
25
+ "name_format": "Format du nom d'entité",
26
+ "name_format_full": "Tel qu'importé d'ETS : (Groupe principal->Groupe intermédiaire) Nom",
27
+ "name_format_name_first": "Nom d'abord : Nom (Groupe principal->Groupe intermédiaire)",
28
+ "name_format_name_only": "Nom seul (supprimer le chemin ETS)",
29
+ "name_format_name_ga": "Nom + adresse de groupe : Nom (1/2/3)",
30
+ "name_format_hint": "Comment les noms des entités Home Assistant sont construits à partir des noms importés d'ETS, qui commencent par le chemin des groupes.",
25
31
  "hint": "Nécessite un broker MQTT accessible à la fois par Node-RED et Home Assistant, avec l'intégration MQTT activée dans HA. Les entités apparaissent sous un appareil portant le nom de ce nœud. Les valeurs du bus KNX sont publiées sur MQTT et les points de données inscriptibles acceptent les commandes de Home Assistant.",
26
32
  "exposed_gas": "Adresses de groupe à exposer",
27
33
  "exposed_gas_hint": "Cochez les adresses de groupe à publier vers Home Assistant. Par défaut, toutes les adresses importées sont sélectionnées. Les adresses utilisées par un volet/thermostat (ci-dessous) y sont gérées et n'ont pas besoin d'être cochées ici.",
@@ -12,7 +12,7 @@ Ce nœud de configuration est le **bridge Matter lui-même** : il exécute le se
12
12
  |Champ|Description|
13
13
  |--|--|
14
14
  | Nom | Le nom de ce nœud de configuration dans Node-RED |
15
- | Nom du bridge Matter | Le nom du bridge lui-même dans les apps Matter |
15
+ | Nom du bridge Matter | Le nom du bridge lui-même dans les apps Matter. **Laissez vide pour réutiliser le Nom de ce nœud.** |
16
16
  | Port | Port UDP du serveur Matter (5540 par défaut). Chaque bridge a besoin de son propre port, vous pouvez donc exécuter **plusieurs bridges indépendants** |
17
17
 
18
18
  ## Appairage
@@ -31,4 +31,5 @@ L'identité du bridge est liée à ce nœud de configuration et enregistrée dan
31
31
 
32
32
  - L'hôte Node-RED doit avoir **IPv6 link-local** activé (exigence standard de Matter) et être joignable par les contrôleurs sur le réseau local.
33
33
  - Les nœuds d'appareil ajoutés/renommés/supprimés sont pris en compte en quelques secondes, sans nouvel appairage.
34
+ - **Noms :** Alexa et Google Home respectent les noms définis ici (nom du bridge et noms des nœuds d'appareil). **Apple Home les ignore et vous demande de nommer chaque accessoire manuellement lors de la configuration** — c'est une limite d'Apple, pas du bridge.
34
35
  </script>
@@ -5,6 +5,7 @@
5
5
  "intro": "Ce nœud de configuration est le bridge Matter lui-même : Alexa, Google Home, Apple Home (ou tout contrôleur Matter) l'appairent une fois et voient tous les appareils KNX que vous y rattachez. Ajoutez des nœuds \"Matter Bridge device\" dans vos flux et pointez-les ici. Déployez d'abord, puis rouvrez pour obtenir le code d'appairage.",
6
6
  "node-config-input-name": "Nom",
7
7
  "bridge_name": "Nom du bridge Matter",
8
+ "bridge_name_ph": "Laisser vide pour utiliser le nom du nœud",
8
9
  "port": "Port",
9
10
  "pairing_title": "Appairage (Alexa, Google Home, Apple Home...)",
10
11
  "not_running": "Le bridge Matter n'est pas encore démarré. Déployez, attendez quelques secondes puis cliquez sur actualiser.",
@@ -16,6 +16,7 @@ Un bridge MQTT nativo con discovery di Home Assistant. Richiede un broker MQTT r
16
16
  - *Messaggi di flow* — il nodo mostra un PIN di ingresso e uno di uscita. Collega l'uscita di un nodo KNXUltimate in modalità **Universale** al PIN di ingresso (bus KNX → MQTT) e il PIN di uscita all'ingresso di un altro nodo KNXUltimate in modalità **Universale** (MQTT → bus KNX).
17
17
  - **URL broker / Nome utente / Password** — connessione al tuo broker MQTT.
18
18
  - **Topic di base / Prefisso discovery** — topic radice per i topic di stato/comando e il prefisso discovery di HA (predefinito `homeassistant`).
19
+ - **Formato nome entità** — come costruire i nomi delle entità Home Assistant a partire dall'import ETS, i cui nomi iniziano con il percorso dei gruppi, es. `(Luci->Piano terra) Soggiorno`. Scegli *Come importato da ETS* (predefinito), *Prima il nome* (`Soggiorno (Luci->Piano terra)`), *Solo il nome* (`Soggiorno`) oppure *Nome + indirizzo di gruppo* (`Soggiorno (0/1/2)`).
19
20
  - **Indirizzi di gruppo da esporre** — ogni indirizzo importato nel gateway KNX (lista ETS) è elencato con una checkbox. Gli indirizzi spuntati vengono pubblicati come entità Home Assistant, tipizzate automaticamente dal DPT (switch, sensor, binary_sensor, number, text). Usa il filtro e i pulsanti *Seleziona tutti* / *Deseleziona tutti*. Per impostazione predefinita sono tutti selezionati. Ogni riga ha inoltre un'opzione **Sola lettura**: un indirizzo in sola lettura viene comunque pubblicato su Home Assistant (lo stato resta visibile) ma non accetta mai comandi verso il bus KNX (gli switch diventano binary_sensor, i number diventano sensor). I pulsanti *Imposta sola lettura* / *Togli sola lettura* la applicano a tutti gli indirizzi attualmente mostrati.
20
21
  - **Tapparelle e Termostati** — raggruppano più indirizzi in un'unica entità:
21
22
  - *Tapparella*: GA su/giù (1.008), GA stop opzionale (1.007), GA posizione comando/stato opzionale (5.001). *Inverti posizione* mappa la convenzione KNX (0% = aperto) su Home Assistant (100% = aperto).
@@ -22,6 +22,12 @@
22
22
  "base_topic": "Topic di base",
23
23
  "discovery": "Pubblica discovery Home Assistant",
24
24
  "discovery_prefix": "Prefisso discovery",
25
+ "name_format": "Formato nome entità",
26
+ "name_format_full": "Come importato da ETS: (Gruppo principale->Gruppo intermedio) Nome",
27
+ "name_format_name_first": "Prima il nome: Nome (Gruppo principale->Gruppo intermedio)",
28
+ "name_format_name_only": "Solo il nome (rimuovi il percorso ETS)",
29
+ "name_format_name_ga": "Nome + indirizzo di gruppo: Nome (1/2/3)",
30
+ "name_format_hint": "Come costruire i nomi delle entità Home Assistant a partire dai nomi importati da ETS, che iniziano con il percorso dei gruppi.",
25
31
  "hint": "Richiede un broker MQTT raggiungibile sia da Node-RED che da Home Assistant, con l'integrazione MQTT attiva in HA. Le entità compaiono sotto un dispositivo con il nome di questo nodo. I valori dal bus KNX vengono pubblicati su MQTT e i datapoint scrivibili accettano comandi da Home Assistant.",
26
32
  "exposed_gas": "Indirizzi di gruppo da esporre",
27
33
  "exposed_gas_hint": "Spunta gli indirizzi di gruppo che vuoi pubblicare su Home Assistant. Per impostazione predefinita sono tutti selezionati. Gli indirizzi usati da una tapparella/termostato qui sotto vengono gestiti lì e non serve spuntarli qui.",
@@ -12,7 +12,7 @@ Questo nodo di configurazione è il **bridge Matter vero e proprio**: esegue il
12
12
  |Campo|Descrizione|
13
13
  |--|--|
14
14
  | Nome | Il nome di questo nodo di configurazione in Node-RED |
15
- | Nome del bridge Matter | Come viene chiamato il bridge stesso nelle app Matter |
15
+ | Nome del bridge Matter | Come viene chiamato il bridge stesso nelle app Matter. **Lascia vuoto per riusare il Nome di questo nodo.** |
16
16
  | Porta | Porta UDP del server Matter (default 5540). Ogni bridge richiede la propria porta, quindi puoi eseguire **più bridge indipendenti** |
17
17
 
18
18
  ## Abbinamento
@@ -31,4 +31,5 @@ L'identità del bridge è legata a questo nodo di configurazione ed è salvata i
31
31
 
32
32
  - L'host Node-RED deve avere **IPv6 link-local** attivo (requisito standard Matter) ed essere raggiungibile dai controller sulla rete locale.
33
33
  - I nodi device aggiunti/rinominati/rimossi vengono recepiti dai controller abbinati in pochi secondi, senza riabbinare.
34
+ - **Nomi:** Alexa e Google Home rispettano i nomi che imposti qui (nome del bridge e nomi dei nodi device). **Apple Home li ignora e ti chiede di nominare manualmente ogni accessorio durante l'abbinamento** — è un limite di Apple, non del bridge.
34
35
  </script>
@@ -5,6 +5,7 @@
5
5
  "intro": "Questo nodo di configurazione è il bridge Matter vero e proprio: Alexa, Google Home, Apple Home (o qualunque controller Matter) lo associano una volta sola e vedono tutti i dispositivi KNX che gli colleghi. Aggiungi i nodi \"Matter Bridge device\" nei tuoi flow e puntali qui. Fai prima il deploy, poi riapri per ottenere il codice di abbinamento.",
6
6
  "node-config-input-name": "Nome",
7
7
  "bridge_name": "Nome del bridge Matter",
8
+ "bridge_name_ph": "Lascia vuoto per usare il nome del nodo",
8
9
  "port": "Porta",
9
10
  "pairing_title": "Abbinamento (Alexa, Google Home, Apple Home...)",
10
11
  "not_running": "Il bridge Matter non è ancora in esecuzione. Fai il deploy, attendi qualche secondo e clicca aggiorna.",
@@ -16,6 +16,7 @@
16
16
  - *流消息* — 节点显示一个输入端口和一个输出端口。将一个**通用**模式的 KNXUltimate 节点的输出连接到输入端口(KNX 总线 → MQTT),并将输出端口连接到另一个**通用**模式 KNXUltimate 节点的输入(MQTT → KNX 总线)。
17
17
  - **Broker URL / 用户名 / 密码** — 连接到你的 MQTT broker。
18
18
  - **基础主题 / 自动发现前缀** — 状态/命令主题的根主题以及 HA 自动发现前缀(默认 `homeassistant`)。
19
+ - **实体名称格式** — 如何根据 ETS 导入生成 Home Assistant 实体名称;ETS 导入的名称以组地址路径开头,例如 `(灯光->一层) 客厅`。可选择 *按 ETS 导入原样*(默认)、*名称在前*(`客厅 (灯光->一层)`)、*仅名称*(`客厅`)或 *名称 + 组地址*(`客厅 (0/1/2)`)。
19
20
  - **要暴露的组地址** — KNX 网关中导入的每个地址(ETS 列表)都带有一个复选框。勾选的地址会作为 Home Assistant 实体发布,并根据 DPT 自动分类(switch、sensor、binary_sensor、number、text)。可使用筛选框和*全选* / *全不选*按钮。默认全部选中。每一行还有一个**只读**开关:只读地址仍会发布到 Home Assistant(状态保持可见),但绝不接受回写到 KNX 总线的命令(switch 变为 binary_sensor,number 变为 sensor)。*设为只读* / *取消只读*按钮会将其应用到当前显示的所有地址。
20
21
  - **卷帘与温控器** — 将多个地址组合成一个实体:
21
22
  - *卷帘*:上/下 GA (1.008)、可选停止 GA (1.007)、可选位置 设置/状态 GA (5.001)。*反转位置* 将 KNX 约定(0% = 打开)映射到 Home Assistant(100% = 打开)。
@@ -22,6 +22,12 @@
22
22
  "base_topic": "基础主题",
23
23
  "discovery": "发布 Home Assistant 自动发现",
24
24
  "discovery_prefix": "自动发现前缀",
25
+ "name_format": "实体名称格式",
26
+ "name_format_full": "按 ETS 导入原样:(主组->中间组) 名称",
27
+ "name_format_name_first": "名称在前:名称 (主组->中间组)",
28
+ "name_format_name_only": "仅名称(移除 ETS 组路径)",
29
+ "name_format_name_ga": "名称 + 组地址:名称 (1/2/3)",
30
+ "name_format_hint": "如何根据 ETS 导入的名称生成 Home Assistant 实体名称;ETS 导入的名称以组地址路径开头。",
25
31
  "hint": "需要一个 Node-RED 和 Home Assistant 都能访问的 MQTT broker,并在 HA 中启用 MQTT 集成。实体会出现在以该节点命名的设备下。KNX 总线的值会发布到 MQTT,可写的数据点接受来自 Home Assistant 的命令。",
26
32
  "exposed_gas": "要暴露的组地址",
27
33
  "exposed_gas_hint": "勾选要发布到 Home Assistant 的组地址。默认全部选中。被下方卷帘/温控器使用的地址会在那里处理,无需在此勾选。",
@@ -12,7 +12,7 @@
12
12
  |字段|说明|
13
13
  |--|--|
14
14
  | 名称 | 此配置节点在 Node-RED 中的名称 |
15
- | Matter 桥接器名称 | 桥接器本身在 Matter App 中显示的名称 |
15
+ | Matter 桥接器名称 | 桥接器本身在 Matter App 中显示的名称。**留空则使用此节点的名称。** |
16
16
  | 端口 | Matter 服务器的 UDP 端口(默认 5540)。每个桥接器需要独立的端口,因此可以运行**多个独立的桥接器** |
17
17
 
18
18
  ## 配对
@@ -31,4 +31,5 @@
31
31
 
32
32
  - Node-RED 主机必须启用 **IPv6 link-local**(Matter 标准要求),并且控制器可在本地网络访问到它。
33
33
  - 添加/重命名/移除的设备节点会在几秒内被已配对的控制器识别,无需重新配对。
34
+ - **名称:** Alexa 和 Google Home 会采用你在此设置的名称(桥接器名称和设备节点名称)。**Apple Home 会忽略它们,并要求你在配置过程中手动为每个配件命名**——这是 Apple 的限制,而非桥接器的问题。
34
35
  </script>
@@ -5,6 +5,7 @@
5
5
  "intro": "此配置节点就是 Matter 桥接器本身:Alexa、Google Home、Apple Home(或任何 Matter 控制器)配对一次即可看到你挂接的所有 KNX 设备。在流程中添加 \"Matter Bridge device\" 节点并指向这里。先部署,然后重新打开获取配对码。",
6
6
  "node-config-input-name": "名称",
7
7
  "bridge_name": "Matter 桥接器名称",
8
+ "bridge_name_ph": "留空则使用节点名称",
8
9
  "port": "端口",
9
10
  "pairing_title": "配对(Alexa、Google Home、Apple Home...)",
10
11
  "not_running": "Matter 桥接器尚未运行。请先部署,等待几秒后点击刷新。",
@@ -5,7 +5,7 @@
5
5
  category: 'config',
6
6
  defaults: {
7
7
  name: { value: '' },
8
- bridgeDeviceName: { value: 'KNX-Ultimate Bridge' },
8
+ bridgeDeviceName: { value: '' },
9
9
  bridgePort: { value: 5540, required: true, validate: RED.validators.number() }
10
10
  },
11
11
  oneditprepare: function () {
@@ -101,7 +101,7 @@
101
101
  <label for="node-config-input-bridgeDeviceName" style="width:180px;">
102
102
  <i class="fa fa-share-alt"></i> <span data-i18n="matterbridge-config.properties.bridge_name"></span>
103
103
  </label>
104
- <input type="text" id="node-config-input-bridgeDeviceName" style="width:220px;">
104
+ <input type="text" id="node-config-input-bridgeDeviceName" style="width:220px;" data-i18n="[placeholder]matterbridge-config.properties.bridge_name_ph">
105
105
  <label for="node-config-input-bridgePort" style="width:60px; text-align:right;"><span data-i18n="matterbridge-config.properties.port"></span></label>
106
106
  <input type="number" id="node-config-input-bridgePort" style="width:90px;">
107
107
  </div>
@@ -28,7 +28,9 @@ module.exports = (RED) => {
28
28
 
29
29
  node.name = config.name === undefined || config.name === '' ? 'Matter Bridge' : config.name
30
30
  node.bridgePort = Number(config.bridgePort) || 5540
31
- node.bridgeDeviceName = config.bridgeDeviceName === undefined || config.bridgeDeviceName === '' ? 'KNX-Ultimate Bridge' : config.bridgeDeviceName
31
+ // Name advertised to the Matter controllers (Alexa/Google honor it; Apple Home forces manual naming).
32
+ // If left empty, fall back to this config node's own name so the bridge is never anonymous.
33
+ node.bridgeDeviceName = config.bridgeDeviceName === undefined || config.bridgeDeviceName === '' ? node.name : config.bridgeDeviceName
32
34
  node.matterInstanceId = `knxultimate-bridge-${node.id.replace(/[^a-zA-Z0-9]/g, '')}`
33
35
  node.matterStoragePath = path.join(RED.settings.userDir || '.', 'knxultimatestorage', 'matter')
34
36
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "engines": {
4
4
  "node": ">=20.18.1"
5
5
  },
6
- "version": "5.2.2",
6
+ "version": "5.2.4",
7
7
  "description": "Control your KNX and KNX Secure intallation via Node-Red! A bunch of KNX nodes, with integrated Philips HUE control, ETS group address importer, KNX AI for diagnosticsand KNX routing between interfaces. Easy to use and highly configurable.",
8
8
  "files": [
9
9
  "nodes/",