node-red-contrib-knx-ultimate 6.3.5 → 6.3.6

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 CHANGED
@@ -6,6 +6,10 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ **Version 6.3.6** - August 2026<br/>
10
+
11
+ - **HUE Controller**: grouped lights now always show the complete Light mapping editor when KNX is configured, without checking child-light capabilities.<br/>
12
+
9
13
  **Version 6.3.5** - August 2026<br/>
10
14
 
11
15
  - **HUE Controller**: fixed Light mapping tabs being blocked by the Hue resource-readiness check and false-success Locate requests. Editor and Locate failures now show a red Node-RED message.<br/>
@@ -42,6 +42,8 @@
42
42
 
43
43
  <p>Dieser Node steuert HUE-Leuchten (einzeln oder gruppiert) und ordnet Befehle/Zustände KNX-Gruppenadressen zu.</p>
44
44
 
45
+ <p><strong>Leuchtengruppen:</strong> wenn ein KNX-Gateway konfiguriert ist, zeigt die Auswahl eines <code>grouped_light</code> immer die vollständigen Zuordnungen für Schalten, Dimmen, Tunable White, RGB/HSV, Effekte und Verhalten. Der Editor schränkt diese Felder nicht anhand der aktuell enthaltenen Leuchten ein.</p>
46
+
45
47
  **Allgemein**
46
48
 
47
49
  | Eigenschaft | Beschreibung |
@@ -42,6 +42,8 @@
42
42
 
43
43
  <p>This node controls Philips Hue lights (single or grouped) and maps their commands/states to KNX.</p>
44
44
 
45
+ <p><strong>Grouped lights:</strong> when a KNX gateway is configured, selecting a <code>grouped_light</code> always displays the complete Switch, Dim, Tunable White, RGB/HSV, Effects and Behaviour mappings. The editor does not restrict these fields according to the group's current child lights.</p>
46
+
45
47
  **General**
46
48
 
47
49
  |Property|Description|
@@ -42,6 +42,8 @@
42
42
 
43
43
  <p> Este nodo controla las luces de Hue Philips (single o agrupada) y mapea sus comandos/estados a KNX. </p>
44
44
 
45
+ <p><strong>Grupos de luces:</strong> cuando hay una pasarela KNX configurada, al seleccionar un <code>grouped_light</code> siempre se muestran todas las asignaciones de Interruptor, Regulación, Blanco ajustable, RGB/HSV, Efectos y Comportamiento. El editor no limita estos campos según las luces incluidas actualmente en el grupo.</p>
46
+
45
47
  **General**
46
48
 
47
49
  | Propiedad | Descripción |
@@ -42,6 +42,8 @@
42
42
 
43
43
  <p> Ce nœud contrôle les lumières de Hue Philips (simple ou groupées) et mappe leurs commandes / états à KNX. </p>
44
44
 
45
+ <p><strong>Groupes de lampes :</strong> lorsqu'une passerelle KNX est configurée, la sélection d'un <code>grouped_light</code> affiche toujours toutes les associations Interrupteur, Variation, Blanc réglable, RGB/HSV, Effets et Comportement. L'éditeur ne limite pas ces champs selon les lampes actuellement présentes dans le groupe.</p>
46
+
45
47
  **Général**
46
48
 
47
49
  | Propriété | Description |
@@ -42,6 +42,8 @@
42
42
 
43
43
  <p>Questo nodo controlla le luci HUE (singole o raggruppate) e mappa comandi/stati su KNX.</p>
44
44
 
45
+ <p><strong>Gruppi di luci:</strong> quando è configurato un gateway KNX, selezionando un <code>grouped_light</code> vengono sempre mostrate tutte le mappature Switch, Dim, Tunable White, RGB/HSV, Effetti e Comportamento. L'editor non limita questi campi in base alle luci attualmente incluse nel gruppo.</p>
46
+
45
47
  **Generale**
46
48
 
47
49
  | Proprietà | Descrizione |
@@ -42,6 +42,8 @@
42
42
 
43
43
  <p>此节点使您可以控制飞利浦色调灯和分组的灯光,还可以将此灯的状态发送到KNX巴士。</p>
44
44
 
45
+ <p><strong>灯组:</strong>配置 KNX 网关后,选择 <code>grouped_light</code> 将始终显示完整的开关、调光、可调白光、RGB/HSV、效果和行为映射。编辑器不会根据灯组当前包含的灯具限制这些字段。</p>
46
+
45
47
  **一般的**
46
48
 
47
49
  |属性|描述|
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "engines": {
4
4
  "node": ">=20.18.1"
5
5
  },
6
- "version": "6.3.5",
6
+ "version": "6.3.6",
7
7
  "description": "KNX Ultimate is the most advanced KNX integration for Node-RED, providing secure KNX/IP communication, routing, ETS project import, Philips Hue, Matter Controller and Matter Bridge (control matter device via KNX and expose KNX GA via Matter), MQTT, diagnostics with AI, virtual devices, and powerful automation nodes. Build professional, reliable, and scalable smart home and building automation projects with minimal effort.",
8
8
  "files": [
9
9
  "nodes/",
@@ -1238,14 +1238,7 @@
1238
1238
  $hueDeviceInput.val(initialHueDeviceRaw);
1239
1239
  updateTabsVisibility();
1240
1240
  if (getJsonPromise !== undefined) getJsonPromise.abort();
1241
- // HUE Controller temporarily selects Node-RED's `_ADD_` sentinel
1242
- // while it bootstraps this mature editor. Reading the select here
1243
- // would therefore query an inexistent bridge and return `{}` even
1244
- // though the selected light has dimming, colour or tunable-white
1245
- // capabilities. Resolve the real persisted config-node ID through
1246
- // the same helper used by resource discovery and Locate instead.
1247
- const capabilityServerId = resolveHueServerValue({ allowStored: true });
1248
- const capabilityResourceId = initialHueDeviceRaw.split("#")[0];
1241
+ const selectedHueResourceType = String(initialHueDeviceRaw.split("#")[1] || '').trim().toLowerCase();
1249
1242
  const applyHueCapabilities = (data) => {
1250
1243
  let oLight = data || {};
1251
1244
  const effects = (oLight && oLight.effects && Array.isArray(oLight.effects.status_values))
@@ -1380,20 +1373,35 @@
1380
1373
  $("#node-input-specifySwitchOnBrightness").val(node.specifySwitchOnBrightness).trigger('change');
1381
1374
  $("#node-input-enableDayNightLighting").val(node.enableDayNightLighting).trigger('change');
1382
1375
  };
1383
- getJsonPromise = $.getJSON(`knxUltimateGetLightObject?id=${encodeURIComponent(capabilityResourceId)}&serverId=${encodeURIComponent(capabilityServerId)}&_=${Date.now()}`, (data) => {
1384
- try {
1385
- applyHueCapabilities(data);
1386
- } catch (error) {
1387
- notifyEditorError(error, 'capabilities');
1388
- }
1389
- }).fail((xhr, textStatus, errorThrown) => {
1390
- if (textStatus === 'abort') return;
1391
- const detail = xhr && xhr.responseJSON && xhr.responseJSON.error
1392
- ? xhr.responseJSON.error
1393
- : (errorThrown || textStatus || 'Unable to load Hue capabilities');
1394
- notifyEditorError(new Error(detail), 'capabilities request');
1395
- });
1396
- setTimeout(function () { if (getJsonPromise !== undefined) getJsonPromise.abort(); }, 10000);
1376
+ if (selectedHueResourceType === "grouped_light") {
1377
+ // A Hue group represents an aggregate control surface. Its
1378
+ // editor must remain complete and deterministic regardless of
1379
+ // the capabilities exposed by its current child lights.
1380
+ applyHueCapabilities({ type: "grouped_light" });
1381
+ } else {
1382
+ // HUE Controller temporarily selects Node-RED's `_ADD_` sentinel
1383
+ // while it bootstraps this mature editor. Reading the select here
1384
+ // would therefore query an inexistent bridge and return `{}` even
1385
+ // though the selected light has dimming, colour or tunable-white
1386
+ // capabilities. Resolve the real persisted config-node ID through
1387
+ // the same helper used by resource discovery and Locate instead.
1388
+ const capabilityServerId = resolveHueServerValue({ allowStored: true });
1389
+ const capabilityResourceId = initialHueDeviceRaw.split("#")[0];
1390
+ getJsonPromise = $.getJSON(`knxUltimateGetLightObject?id=${encodeURIComponent(capabilityResourceId)}&serverId=${encodeURIComponent(capabilityServerId)}&_=${Date.now()}`, (data) => {
1391
+ try {
1392
+ applyHueCapabilities(data);
1393
+ } catch (error) {
1394
+ notifyEditorError(error, 'capabilities');
1395
+ }
1396
+ }).fail((xhr, textStatus, errorThrown) => {
1397
+ if (textStatus === 'abort') return;
1398
+ const detail = xhr && xhr.responseJSON && xhr.responseJSON.error
1399
+ ? xhr.responseJSON.error
1400
+ : (errorThrown || textStatus || 'Unable to load Hue capabilities');
1401
+ notifyEditorError(new Error(detail), 'capabilities request');
1402
+ });
1403
+ setTimeout(function () { if (getJsonPromise !== undefined) getJsonPromise.abort(); }, 10000);
1404
+ }
1397
1405
  }
1398
1406
  // Show/Hide the div of the color at swich on
1399
1407
  if (node.specifySwitchOnBrightness === "yes") {