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

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 (64) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/nodes/commonFunctions.js +93 -0
  3. package/nodes/icons/node-matter-icon.svg +12 -0
  4. package/nodes/knxUltimateMatterBridge.html +342 -0
  5. package/nodes/knxUltimateMatterBridge.js +313 -0
  6. package/nodes/knxUltimateMatterDevice.html +632 -0
  7. package/nodes/knxUltimateMatterDevice.js +308 -0
  8. package/nodes/locales/de/knxUltimateMatterBridge.html +53 -0
  9. package/nodes/locales/de/knxUltimateMatterBridge.json +83 -0
  10. package/nodes/locales/de/knxUltimateMatterDevice.html +56 -0
  11. package/nodes/locales/de/knxUltimateMatterDevice.json +109 -0
  12. package/nodes/locales/de/matter-config.html +25 -0
  13. package/nodes/locales/de/matter-config.json +26 -0
  14. package/nodes/locales/de/matterbridge-config.html +34 -0
  15. package/nodes/locales/de/matterbridge-config.json +20 -0
  16. package/nodes/locales/en/knxUltimateMatterBridge.html +53 -0
  17. package/nodes/locales/en/knxUltimateMatterBridge.json +83 -0
  18. package/nodes/locales/en/knxUltimateMatterDevice.html +56 -0
  19. package/nodes/locales/en/knxUltimateMatterDevice.json +109 -0
  20. package/nodes/locales/en/matter-config.html +25 -0
  21. package/nodes/locales/en/matter-config.json +26 -0
  22. package/nodes/locales/en/matterbridge-config.html +34 -0
  23. package/nodes/locales/en/matterbridge-config.json +20 -0
  24. package/nodes/locales/es/knxUltimateMatterBridge.html +53 -0
  25. package/nodes/locales/es/knxUltimateMatterBridge.json +83 -0
  26. package/nodes/locales/es/knxUltimateMatterDevice.html +56 -0
  27. package/nodes/locales/es/knxUltimateMatterDevice.json +109 -0
  28. package/nodes/locales/es/matter-config.html +25 -0
  29. package/nodes/locales/es/matter-config.json +26 -0
  30. package/nodes/locales/es/matterbridge-config.html +34 -0
  31. package/nodes/locales/es/matterbridge-config.json +20 -0
  32. package/nodes/locales/fr/knxUltimateMatterBridge.html +53 -0
  33. package/nodes/locales/fr/knxUltimateMatterBridge.json +83 -0
  34. package/nodes/locales/fr/knxUltimateMatterDevice.html +56 -0
  35. package/nodes/locales/fr/knxUltimateMatterDevice.json +109 -0
  36. package/nodes/locales/fr/matter-config.html +25 -0
  37. package/nodes/locales/fr/matter-config.json +26 -0
  38. package/nodes/locales/fr/matterbridge-config.html +34 -0
  39. package/nodes/locales/fr/matterbridge-config.json +20 -0
  40. package/nodes/locales/it/knxUltimateMatterBridge.html +53 -0
  41. package/nodes/locales/it/knxUltimateMatterBridge.json +83 -0
  42. package/nodes/locales/it/knxUltimateMatterDevice.html +56 -0
  43. package/nodes/locales/it/knxUltimateMatterDevice.json +109 -0
  44. package/nodes/locales/it/matter-config.html +25 -0
  45. package/nodes/locales/it/matter-config.json +26 -0
  46. package/nodes/locales/it/matterbridge-config.html +34 -0
  47. package/nodes/locales/it/matterbridge-config.json +20 -0
  48. package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +53 -0
  49. package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +83 -0
  50. package/nodes/locales/zh-CN/knxUltimateMatterDevice.html +56 -0
  51. package/nodes/locales/zh-CN/knxUltimateMatterDevice.json +109 -0
  52. package/nodes/locales/zh-CN/matter-config.html +25 -0
  53. package/nodes/locales/zh-CN/matter-config.json +26 -0
  54. package/nodes/locales/zh-CN/matterbridge-config.html +34 -0
  55. package/nodes/locales/zh-CN/matterbridge-config.json +20 -0
  56. package/nodes/matter-config.html +226 -0
  57. package/nodes/matter-config.js +242 -0
  58. package/nodes/matterbridge-config.html +121 -0
  59. package/nodes/matterbridge-config.js +220 -0
  60. package/nodes/utils/matterBridgeDeviceFactory.mjs +511 -0
  61. package/nodes/utils/matterBridgeEngine.mjs +290 -0
  62. package/nodes/utils/matterEngine.mjs +475 -0
  63. package/nodes/utils/matterKnxConverter.js +204 -0
  64. package/package.json +8 -2
@@ -0,0 +1,34 @@
1
+ <script type="text/markdown" data-help-name="matterbridge-config">
2
+ # Matter Bridge (BETA)
3
+
4
+ > Dieser Node ist in **BETA**: Er funktioniert, aber Details können sich zwischen Releases noch ändern.
5
+
6
+ ## Übersicht
7
+
8
+ Dieser Konfigurations-Node ist die **Matter-Bridge selbst**: Er betreibt den Matter-Server, den Alexa, Google Home, Apple Home (oder jeder Matter-Controller) **einmal** koppeln. Jeder **Matter Bridge device**-Node in deinen Flows verweist hierher und erscheint in den Apps als ein Gerät der Bridge.
9
+
10
+ ## Konfiguration
11
+
12
+ |Feld|Beschreibung|
13
+ |--|--|
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 |
16
+ | Port | UDP-Port des Matter-Servers (Standard 5540). Jede Bridge braucht ihren eigenen Port, daher sind **mehrere unabhängige Bridges** möglich |
17
+
18
+ ## Kopplung
19
+
20
+ 1. **Deployen**, ein paar Sekunden warten, dann diesen Node erneut öffnen.
21
+ 2. Das Kopplungs-Panel zeigt den **QR-Code** und den **manuellen Code**: scannen oder in Alexa / Google Home / Apple Home eingeben ("Matter-Gerät hinzufügen").
22
+ 3. Mehrere Controller können mit derselben Bridge gekoppelt werden (Matter Multi-Fabric).
23
+
24
+ Der Button **Kopplung zurücksetzen** entfernt alle gekoppelten Controller und startet die Kopplungs-Ankündigung neu.
25
+
26
+ ## Identität und Speicherung
27
+
28
+ Die Bridge-Identität ist an diesen Konfigurations-Node gebunden und wird in `knxultimatestorage/matter` im Node-RED-Benutzerverzeichnis gespeichert: Re-Deploys (auch mit geändertem Port oder Namen) erfordern **KEINE** neue Kopplung. Nur das Löschen dieses Konfigurations-Nodes und das Anlegen eines neuen ändert die Identität — in dem Fall die alte Bridge aus der Matter-App entfernen und neu koppeln.
29
+
30
+ ## Hinweise
31
+
32
+ - Der Node-RED-Host muss **IPv6 link-local** aktiviert haben (Standard-Matter-Anforderung) und von den Controllern im lokalen Netzwerk erreichbar sein.
33
+ - Hinzugefügte/umbenannte/entfernte Device-Nodes werden von den gekoppelten Controllern innerhalb von Sekunden übernommen, ohne neue Kopplung.
34
+ </script>
@@ -0,0 +1,20 @@
1
+ {
2
+ "matterbridge-config": {
3
+ "properties": {
4
+ "title": "Matter Bridge",
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
+ "node-config-input-name": "Name",
7
+ "bridge_name": "Name der Matter-Bridge",
8
+ "port": "Port",
9
+ "pairing_title": "Kopplung (Alexa, Google Home, Apple Home...)",
10
+ "not_running": "Die Matter-Bridge läuft noch nicht. Deployen, ein paar Sekunden warten und dann auf Aktualisieren klicken.",
11
+ "commissioned": "Bridge mit diesen Controllern gekoppelt:",
12
+ "awaiting": "Warte auf Kopplung. Scanne den QR-Code oder gib den manuellen Code in deiner Matter-App ein:",
13
+ "qr_link": "QR-Code im Browser öffnen",
14
+ "deploy_first": "Bitte zuerst diesen Konfigurations-Node deployen und dann auf Aktualisieren klicken.",
15
+ "reset_button": "Kopplung zurücksetzen",
16
+ "reset_confirm": "ALLE gekoppelten Controller entfernen und die Kopplung neu starten? Die Geräte verschwinden aus Alexa/Google/Apple.",
17
+ "reset_ok": "Kopplung zurückgesetzt. Die Bridge wartet wieder auf Kopplung."
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,53 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
2
+ # Matter Bridge device (BETA)
3
+
4
+ > This node is in **BETA**: it works, but details may still change between releases.
5
+
6
+ ## Overview
7
+
8
+ Each Matter Bridge device 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.
9
+
10
+ This is the opposite direction of the *Matter Device* node: there KNX controls a Matter device, here the Matter controllers control KNX.
11
+
12
+ ## Configuration
13
+
14
+ |Field|Description|
15
+ |--|--|
16
+ | Matter bridge | The Matter Bridge configuration node this device belongs to |
17
+ | KNX GW | KNX gateway used for telegrams. **Optional**: without it the device runs in flow-only mode via the node PINs. Auto-selected when your project has only one gateway |
18
+ | Name | What Alexa & Co. show and use for voice commands |
19
+ | Device type | The Matter device type (see below); it drives which group address fields appear |
20
+ | Read status at startup | Sends a `GroupValue_Read` to the status GAs at startup, so the Matter attributes are populated |
21
+
22
+ ## Device types and group addresses
23
+
24
+ |Type|Group addresses|
25
+ |--|--|
26
+ | On/Off light, Plug | On/Off command GA, On/Off status GA (DPT 1.001) |
27
+ | Dimmable light | + Dimming % command/status GA (DPT 5.001) |
28
+ | RGB color light | + RGB color command/status GA (DPT 232.600). The Matter color (hue/saturation or XY, from the app color wheel) is converted to/from the KNX RGB triplet |
29
+ | Tunable white light | + Color temperature command/status GA in Kelvin (DPT 7.600) |
30
+ | Cover / Shutter | Up/Down (DPT 1.008), Stop (DPT 1.017), Position % command/status (DPT 5.001), optional position inversion |
31
+ | Thermostat (heating) | Current temperature GA, Setpoint command/status GA (DPT 9.001) |
32
+ | Fan / Ventilation | Fan speed % command/status GA (DPT 5.001) |
33
+ | Sensors (temperature, humidity, light, occupancy, contact) | One status GA each |
34
+ | Smoke/CO alarm | Smoke alarm status GA + optional CO alarm status GA (DPT 1.005): critical notifications on the phone |
35
+ | Water leak detector | Leak status GA (DPT 1.005) |
36
+ | Air quality sensor (CO2) | CO2 status GA in ppm (DPT 9.008); the air quality class (good/fair/moderate/poor...) is derived automatically |
37
+ | Robot vacuum | **Flow-only**: no group addresses. Enable the node PINs: assistant commands ("start cleaning", pause/resume/go home) arrive on the output as `rvcmode`/`rvccommand`; report the state back with `msg.payload = { function: "rvcstate", value: "running"|"docked"|"charging"|"paused"|"error" }` and the mode with `function: "rvcmode", value: "cleaning"|"idle"` |
38
+
39
+ - **Command GA**: written to the KNX bus when the assistant sends a command.
40
+ - **Status GA**: read from the bus to keep the Matter attributes (and the apps) updated.
41
+
42
+ ## Node PINs
43
+
44
+ If you enable the node input/output PINs:
45
+
46
+ - **Input**: update the Matter state from the flow, without the KNX bus: `msg.payload = { function: "onoff", value: true }` (`function` is one of `onoff`, `level`, `rgb`, `colortemp`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`, `fanspeed`, `smoke`, `co`, `leak`, `co2`, `rvcstate`, `rvcmode`). Useful to expose flow-computed values (e.g. a virtual sensor) to Alexa & Co.
47
+ - **Output**: every command received from a Matter controller is forwarded to the flow: `msg.topic` = device name, `msg.payload` = value, `msg.matter` = the raw command. A device without command GAs becomes a **flow-only device**.
48
+
49
+ ## Notes
50
+
51
+ - The Matter identity of the device is tied to this node: deleting the node and creating a new one makes the apps see a brand-new device.
52
+ - Added/renamed/removed device nodes are picked up by the paired controllers within seconds, without re-pairing the bridge.
53
+ </script>
@@ -0,0 +1,83 @@
1
+ {
2
+ "knxUltimateMatterBridge": {
3
+ "title": "Matter Bridge (BETA)",
4
+ "bridge_name": "Matter bridge name",
5
+ "port": "Port",
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.",
7
+ "read_status_startup": "Read the status group addresses at startup",
8
+ "opt_yes": "Yes",
9
+ "opt_no": "No",
10
+ "node_pins": "Node Input/Output PINs",
11
+ "node_pins_hide": "Hide",
12
+ "node_pins_show": "Show node input/output PINs",
13
+ "fields": {
14
+ "type": "Device type",
15
+ "name": "Name (shown by Alexa & Co.)",
16
+ "name_placeholder": "e.g. Kitchen light",
17
+ "invert": "Invert position %"
18
+ },
19
+ "functions": {
20
+ "fn_onoff_cmd": "On/Off command GA",
21
+ "fn_onoff_status": "On/Off status GA",
22
+ "fn_level_cmd": "Dimming % command GA",
23
+ "fn_level_status": "Dimming % status GA",
24
+ "fn_sensor_ga": "Sensor status GA",
25
+ "fn_updown": "Up/Down command GA",
26
+ "fn_stop": "Stop command GA",
27
+ "fn_position_cmd": "Position % command GA",
28
+ "fn_position_status": "Position % status GA",
29
+ "fn_currenttemp": "Current temperature GA",
30
+ "fn_setpoint_cmd": "Setpoint command GA",
31
+ "fn_setpoint_status": "Setpoint status GA",
32
+ "fn_rgb_cmd": "RGB color command GA (DPT 232.600)",
33
+ "fn_rgb_status": "RGB color status GA (DPT 232.600)",
34
+ "fn_ct_cmd": "Color temperature command GA (Kelvin)",
35
+ "fn_ct_status": "Color temperature status GA (Kelvin)",
36
+ "fn_smoke_ga": "Smoke alarm status GA",
37
+ "fn_co_ga": "CO alarm status GA (optional)",
38
+ "fn_leak_ga": "Leak status GA",
39
+ "fn_co2_ga": "CO2 status GA (ppm, DPT 9.008)",
40
+ "fn_fanspeed_cmd": "Fan speed % command GA",
41
+ "fn_fanspeed_status": "Fan speed % status GA"
42
+ },
43
+ "types": {
44
+ "onofflight": "On/Off light",
45
+ "dimmablelight": "Dimmable light",
46
+ "rgblight": "RGB color light",
47
+ "colortemperaturelight": "Tunable white light (color temperature)",
48
+ "onoffplug": "Plug / Socket (on/off)",
49
+ "temperaturesensor": "Temperature sensor",
50
+ "humiditysensor": "Humidity sensor",
51
+ "lightsensor": "Light sensor (Lux)",
52
+ "occupancysensor": "Occupancy sensor",
53
+ "contactsensor": "Contact sensor",
54
+ "windowcovering": "Cover / Shutter",
55
+ "thermostat": "Thermostat (heating)",
56
+ "fan": "Fan / Ventilation",
57
+ "smokecoalarm": "Smoke/CO alarm",
58
+ "waterleakdetector": "Water leak detector",
59
+ "airqualitysensor": "Air quality sensor (CO2)",
60
+ "robotvacuum": "Robot vacuum (flow-only, via node PINs)"
61
+ },
62
+ "pairing": {
63
+ "title": "Pairing (Alexa, Google Home, Apple Home...)",
64
+ "not_running": "The Matter bridge is not running yet. Deploy, wait a few seconds, then click refresh.",
65
+ "commissioned": "Bridge paired with these controllers:",
66
+ "awaiting": "Awaiting pairing. Scan the QR code or enter the manual code in your Matter app:",
67
+ "qr_link": "Open the QR code in the browser",
68
+ "deploy_first": "Deploy this node first, then click refresh.",
69
+ "reset_button": "Reset pairing",
70
+ "reset_confirm": "Remove ALL paired controllers and restart pairing? The devices will disappear from Alexa/Google/Apple.",
71
+ "reset_ok": "Pairing reset. The bridge is now advertising for pairing again."
72
+ },
73
+ "bridge": "Matter bridge",
74
+ "device_name": "Name (shown by Alexa & Co.)",
75
+ "device_help": "Pick the device type and give it the name the voice assistant will use, then fill the group addresses. The KNX gateway is optional: without it, enable the node PINs and drive the device from the flow."
76
+ },
77
+ "common": {
78
+ "ga": "GA",
79
+ "dpt": "DPT",
80
+ "name": "Name",
81
+ "knx_gw": "KNX GW"
82
+ }
83
+ }
@@ -0,0 +1,56 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterDevice">
2
+ # Matter Device (BETA)
3
+
4
+ > This node is in **BETA**: it works, but details may still change between releases.
5
+
6
+ ## Overview
7
+
8
+ The Matter Device node bridges a **Matter device** to **KNX group addresses**. The node acts through the *Matter Controller* configuration node, which commissions (pairs) the devices into its own Matter fabric.
9
+
10
+ - **Control** any commissioned Matter device from the KNX bus (on/off, dimming, covers, thermostats, locks, ...).
11
+ - **Track** every attribute of the device on KNX group addresses (status feedback, sensors, power metering, battery...).
12
+ - Fully generic: the mapping list is built from the **real endpoints/clusters** exposed by the device.
13
+
14
+ ## Configuration
15
+
16
+ |Field|Description|
17
+ |--|--|
18
+ | KNX GW | KNX gateway used for telegrams |
19
+ | Matter Ctrl | The Matter Controller configuration node (where you pair the devices) |
20
+ | Device | Pick the commissioned Matter device from the autocomplete list |
21
+ | Mappings | One row per group address ↔ Matter cluster mapping |
22
+ | Read status at startup | When enabled, the node emits the current cached values on deploy/connection |
23
+ | Node Input/Output PINs | Enable Node-RED input/output pins for raw Matter access |
24
+
25
+ ## Mappings
26
+
27
+ The target list shows the supported functions with friendly names such as *"On/Off switch"* or *"Instantaneous power (W)"*, filtered on what the device really exposes and with the current value shown in brackets.
28
+
29
+ Each mapping row has a **direction**:
30
+
31
+ - **KNX → Matter (command)**: a telegram received on the group address invokes a Matter cluster command or writes an attribute. Example: GA `1/1/1` DPT 1.001 → `OnOff.on/off` (the boolean payload selects on or off automatically).
32
+ - **Matter → KNX (status)**: whenever the subscribed Matter attribute changes, its value is converted and written to the group address. `GroupValue_Read` requests are answered with the cached value.
33
+
34
+ Well-known clusters are converted automatically to KNX-friendly values:
35
+
36
+ |Cluster|Conversion|
37
+ |--|--|
38
+ | OnOff | boolean (DPT 1.001) |
39
+ | LevelControl | 0-254 ↔ percent (DPT 5.001) |
40
+ | WindowCovering | percent100ths ↔ percent (DPT 5.001), up/down (DPT 1.008) |
41
+ | ColorControl | mireds ↔ Kelvin (DPT 7.600) |
42
+ | Thermostat | centi-°C ↔ °C (DPT 9.001) |
43
+ | Temperature/Humidity | centi-units ↔ units (DPT 9.001/9.007) |
44
+ | Illuminance | log scale ↔ Lux (DPT 9.004) |
45
+ | PowerSource | half-percent ↔ percent battery (DPT 5.001) |
46
+ | Electrical Power/Energy | mW ↔ W (DPT 14.056), mWh ↔ kWh (DPT 13.013) |
47
+
48
+ Other clusters/attributes are passed through raw; the DPT you pick performs the final KNX encoding.
49
+
50
+ ## Node PINs
51
+
52
+ If you enable the node PINs:
53
+
54
+ - **Input**: send raw commands: `msg.payload = { endpointId: 1, clusterId: 6, command: "toggle" }` or attribute writes: `msg.payload = { endpointId: 1, clusterId: 8, attribute: "onLevel", value: 128 }`
55
+ - **Output**: receives every attribute change (`msg.matter` contains the full event) and every cluster event (button presses etc.).
56
+ </script>
@@ -0,0 +1,109 @@
1
+ {
2
+ "knxUltimateMatterDevice": {
3
+ "title": "Matter Device (BETA)",
4
+ "paletteLabel": "Matter Device (BETA)",
5
+ "matter_controller": "Matter Ctrl",
6
+ "matter_device": "Device",
7
+ "device_placeholder": "Click to pick a paired Matter device",
8
+ "mapping_help": "Add one row per mapping. \"KNX → Matter\" invokes a cluster command (or writes an attribute) when a telegram arrives on the group address. \"Matter → KNX\" writes the attribute value to the group address whenever it changes (read requests are answered with the cached value).",
9
+ "select_target": "-- select the Matter target --",
10
+ "stored_target": "Stored",
11
+ "read_status_startup": "Read status at startup",
12
+ "opt_yes_emit": "Yes, and emit KNX telegrams.",
13
+ "opt_no": "No",
14
+ "node_pins": "Node Input/Output PINs",
15
+ "node_pins_hide": "Hide",
16
+ "node_pins_show": "Show node input/output PINs",
17
+ "direction": {
18
+ "command": "KNX → Matter (command)",
19
+ "status": "Matter → KNX (status)"
20
+ },
21
+ "fields": {
22
+ "direction": "Direction",
23
+ "target": "Matter endpoint / cluster / target",
24
+ "ga": "Group address",
25
+ "dpt": "DPT",
26
+ "ganame": "Name"
27
+ },
28
+ "no_simple_targets": "No supported functions found on this device (or the device is not connected yet).",
29
+ "endpoint": "Endpoint",
30
+ "friendly": {
31
+ "onoff_switch": "On/Off switch (turn on/off)",
32
+ "onoff_toggle": "Toggle (invert state)",
33
+ "onoff_state": "On/Off state",
34
+ "level_set": "Set brightness / level (%)",
35
+ "level_state": "Current brightness / level (%)",
36
+ "colortemp_set": "Set color temperature (Kelvin)",
37
+ "colortemp_state": "Current color temperature (Kelvin)",
38
+ "cover_updown": "Cover Up/Down",
39
+ "cover_stop": "Cover Stop",
40
+ "cover_position_set": "Move cover to position (%)",
41
+ "cover_position_state": "Current cover position (%)",
42
+ "cover_tilt_set": "Move slats to tilt (%)",
43
+ "cover_tilt_state": "Current slat tilt (%)",
44
+ "thermo_localtemp": "Room temperature (°C)",
45
+ "thermo_heatsp_set": "Set heating setpoint (°C)",
46
+ "thermo_coolsp_set": "Set cooling setpoint (°C)",
47
+ "thermo_heatsp_state": "Heating setpoint (°C)",
48
+ "thermo_coolsp_state": "Cooling setpoint (°C)",
49
+ "fan_speed_set": "Set fan speed (%)",
50
+ "fan_speed_state": "Current fan speed (%)",
51
+ "lock_cmd": "Lock/Unlock door",
52
+ "lock_state": "Lock state (locked)",
53
+ "temp_measured": "Measured temperature (°C)",
54
+ "humidity_measured": "Relative humidity (%)",
55
+ "illuminance_measured": "Illuminance (Lux)",
56
+ "occupancy_state": "Presence detected",
57
+ "contact_state": "Contact state (closed/open)",
58
+ "battery_percent": "Battery level (%)",
59
+ "power_active": "Instantaneous power (W)",
60
+ "power_voltage": "Voltage (V)",
61
+ "power_current": "Current (A)",
62
+ "energy_imported": "Energy consumed (kWh)",
63
+ "identify_cmd": "Identify device (blink)",
64
+ "switch_position": "Button position"
65
+ },
66
+ "devtype": {
67
+ "onofflight": "On/Off light",
68
+ "dimmablelight": "Dimmable light",
69
+ "colortemperaturelight": "Color temperature light",
70
+ "extendedcolorlight": "Color light",
71
+ "onoffpluginunit": "Plug (on/off)",
72
+ "dimmablepluginunit": "Plug (dimmable)",
73
+ "smartplug": "Smart plug",
74
+ "contactsensor": "Contact sensor",
75
+ "lightsensor": "Light sensor",
76
+ "occupancysensor": "Occupancy sensor",
77
+ "temperaturesensor": "Temperature sensor",
78
+ "humiditysensor": "Humidity sensor",
79
+ "pressuresensor": "Pressure sensor",
80
+ "flowsensor": "Flow sensor",
81
+ "doorlock": "Door lock",
82
+ "windowcovering": "Window covering",
83
+ "thermostat": "Thermostat",
84
+ "fan": "Fan",
85
+ "genericswitch": "Button/Switch",
86
+ "airqualitysensor": "Air quality sensor",
87
+ "smokecoalarm": "Smoke/CO alarm",
88
+ "waterleakdetector": "Water leak detector",
89
+ "roomairconditioner": "Air conditioner",
90
+ "airpurifier": "Air purifier",
91
+ "speaker": "Speaker",
92
+ "pumpcontroller": "Pump",
93
+ "onofflightswitch": "Light switch",
94
+ "dimmerswitch": "Dimmer switch",
95
+ "colordimmerswitch": "Color dimmer switch",
96
+ "powersource": "Power source",
97
+ "electricalsensor": "Electrical sensor",
98
+ "bridgednode": "Bridged device",
99
+ "aggregator": "Bridge/Aggregator",
100
+ "rootnode": "Root node"
101
+ }
102
+ },
103
+ "common": {
104
+ "ga": "GA",
105
+ "dpt": "DPT",
106
+ "name": "Name",
107
+ "knx_gw": "KNX GW"
108
+ }
109
+ }
@@ -0,0 +1,25 @@
1
+ <script type="text/markdown" data-help-name="matter-config">
2
+ # Matter Controller
3
+
4
+ ## Overview
5
+
6
+ This configuration node is a full **Matter controller**: it creates its own Matter *fabric* and commissions (pairs) your Matter devices into it. The paired devices are then available to the **Matter Device** nodes, which map them to KNX group addresses.
7
+
8
+ The controller talks to the devices over the **IP network** (WiFi, Ethernet, or Thread through a border router). Bluetooth commissioning is not supported: the device must already be reachable on the network.
9
+
10
+ ## Pairing a device
11
+
12
+ 1. **Deploy** this configuration node first (the controller must be running).
13
+ 2. Open the node again and enter the **pairing code**: either the 11-digit manual code (e.g. `3497-011-2332`) or the QR code content (`MT:....`).
14
+ 3. Click **PAIR**. Commissioning can take up to a minute.
15
+
16
+ If the device is brand new and only supports Bluetooth commissioning, first pair it with its vendor app or another Matter controller (Alexa, Google Home, Apple Home), then use that controller's **"share / pair with another hub"** function to generate a new pairing code for KNX-Ultimate. This way the device joins multiple fabrics at once.
17
+
18
+ ## Storage
19
+
20
+ The fabric credentials and the paired devices are stored in the `knxultimatestorage/matter` folder inside your Node-RED user directory. Deleting that folder unpairs everything.
21
+
22
+ ## Removing a device
23
+
24
+ Use the trash button in the commissioned devices list. The controller tries to decommission the device properly; if it is unreachable, it is removed from the fabric anyway (a factory reset of the device may then be needed).
25
+ </script>
@@ -0,0 +1,26 @@
1
+ {
2
+ "matter-config": {
3
+ "properties": {
4
+ "title": "Matter Controller",
5
+ "intro": "This node is a Matter controller (its own fabric). Pair your Matter devices here, then use the \"Matter Device\" node to map them to KNX group addresses. Deploy the node first, then come back here to pair devices.",
6
+ "node-config-input-name": "Name",
7
+ "fabric_label": "Fabric label",
8
+ "pairing_title": "Pair a new device",
9
+ "pairing_help": "Enter the 11-digit manual pairing code (e.g. 3497-011-2332) or the QR code content (MT:....). The device must be reachable on the IP network (WiFi/Ethernet or Thread via border router). If the device is already paired with another controller (Alexa, Google, Apple), use its \"share/pair with another hub\" function to obtain a new pairing code.",
10
+ "pairing_code": "Pairing code",
11
+ "pair_button": "PAIR",
12
+ "devices_title": "Commissioned devices",
13
+ "col_name": "Name",
14
+ "col_product": "Product",
15
+ "col_state": "State",
16
+ "no_devices": "No devices paired yet.",
17
+ "unpair_confirm": "Remove (decommission) the device",
18
+ "unpair_ok": "Device removed.",
19
+ "deploy_first": "Deploy this configuration node first, then try again.",
20
+ "pairing_code_missing": "Please enter a pairing code.",
21
+ "pairing_wait": "Pairing in progress. It can take up to a minute...",
22
+ "pairing_failed": "Pairing failed",
23
+ "pairing_ok": "Device paired successfully!"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,34 @@
1
+ <script type="text/markdown" data-help-name="matterbridge-config">
2
+ # Matter Bridge (BETA)
3
+
4
+ > This node is in **BETA**: it works, but details may still change between releases.
5
+
6
+ ## Overview
7
+
8
+ This configuration node is the **Matter bridge itself**: it runs the Matter server that Alexa, Google Home, Apple Home (or any Matter controller) commission **once**. Every **Matter Bridge device** node in your flows points here and appears in the apps as one bridged device.
9
+
10
+ ## Configuration
11
+
12
+ |Field|Description|
13
+ |--|--|
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 |
16
+ | Port | UDP port of the Matter server (default 5540). Each bridge needs its own port, so you can run **multiple independent bridges** |
17
+
18
+ ## Pairing
19
+
20
+ 1. **Deploy**, wait a few seconds, then open this node again.
21
+ 2. The pairing panel shows the **QR code** and the **manual pairing code**: scan or type it in Alexa / Google Home / Apple Home ("add Matter device").
22
+ 3. Multiple controllers can be paired with the same bridge (Matter multi-fabric).
23
+
24
+ The **Reset pairing** button removes all paired controllers and restarts the pairing advertising.
25
+
26
+ ## Identity and storage
27
+
28
+ The bridge identity is tied to this configuration node and stored in `knxultimatestorage/matter` inside the Node-RED user directory: re-deploys (even changing port or name) do **NOT** require a new pairing. Only deleting this configuration node and creating a new one changes the identity — in that case remove the old bridge from the Matter app and pair again.
29
+
30
+ ## Notes
31
+
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
+ - Device nodes added/renamed/removed are picked up by the paired controllers within seconds, without re-pairing.
34
+ </script>
@@ -0,0 +1,20 @@
1
+ {
2
+ "matterbridge-config": {
3
+ "properties": {
4
+ "title": "Matter Bridge",
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
+ "node-config-input-name": "Name",
7
+ "bridge_name": "Matter bridge name",
8
+ "port": "Port",
9
+ "pairing_title": "Pairing (Alexa, Google Home, Apple Home...)",
10
+ "not_running": "The Matter bridge is not running yet. Deploy, wait a few seconds, then click refresh.",
11
+ "commissioned": "Bridge paired with these controllers:",
12
+ "awaiting": "Awaiting pairing. Scan the QR code or enter the manual code in your Matter app:",
13
+ "qr_link": "Open the QR code in the browser",
14
+ "deploy_first": "Deploy this configuration node first, then click refresh.",
15
+ "reset_button": "Reset pairing",
16
+ "reset_confirm": "Remove ALL paired controllers and restart pairing? The devices will disappear from Alexa/Google/Apple.",
17
+ "reset_ok": "Pairing reset. The bridge is now advertising for pairing again."
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,53 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
2
+ # Matter Bridge device (BETA)
3
+
4
+ > Este nodo está en **BETA**: funciona, pero algunos detalles pueden cambiar entre versiones.
5
+
6
+ ## Descripción general
7
+
8
+ Cada nodo Matter Bridge device expone **un dispositivo KNX como dispositivo Matter**: los controladores emparejados (Alexa, Google Home, Apple Home...) lo ven, con el nombre que hayas elegido, listo para el control por app y por voz. Apúntalo a un nodo de configuración **Bridge Matter** (el bridge en sí, emparejado una sola vez - el QR de emparejamiento vive allí) y añade tantos nodos de dispositivo como quieras, en cualquier flow.
9
+
10
+ Es la dirección opuesta al nodo *Matter Device*: allí KNX controla un dispositivo Matter, aquí los controladores Matter controlan KNX.
11
+
12
+ ## Configuración
13
+
14
+ |Campo|Descripción|
15
+ |--|--|
16
+ | Bridge Matter | El nodo de configuración Bridge Matter al que pertenece este dispositivo |
17
+ | GW KNX | Gateway KNX usado para los telegramas. **Opcional**: sin él, el dispositivo funciona en modo solo-flow mediante los PINes del nodo. Se selecciona automáticamente si el proyecto tiene un solo gateway |
18
+ | Nombre | Lo que Alexa y cía. muestran y usan para los comandos de voz |
19
+ | Tipo de dispositivo | El tipo de dispositivo Matter (ver abajo); determina qué campos de dirección de grupo aparecen |
20
+ | Leer estado al inicio | Envía un `GroupValue_Read` a las GA de estado al inicio, para poblar los atributos Matter |
21
+
22
+ ## Tipos de dispositivo y direcciones de grupo
23
+
24
+ |Tipo|Direcciones de grupo|
25
+ |--|--|
26
+ | Luz On/Off, Enchufe | GA comando On/Off, GA estado On/Off (DPT 1.001) |
27
+ | Luz regulable | + GA comando/estado regulación % (DPT 5.001) |
28
+ | Luz RGB (color) | + GA comando/estado color RGB (DPT 232.600). El color Matter (hue/saturation o XY, de la rueda de color de la app) se convierte desde/hacia la terna RGB KNX |
29
+ | Luz blanco dinámico | + GA comando/estado temperatura de color en Kelvin (DPT 7.600) |
30
+ | Persiana / Cortina | Subir/Bajar (DPT 1.008), Stop (DPT 1.017), posición % comando/estado (DPT 5.001), inversión de posición opcional |
31
+ | Termostato (calefacción) | GA temperatura actual, GA comando/estado consigna (DPT 9.001) |
32
+ | Ventilador / VMC | GA comando/estado velocidad % (DPT 5.001) |
33
+ | Sensores (temperatura, humedad, luz, presencia, contacto) | Una GA de estado cada uno |
34
+ | Alarma humo/CO | GA estado alarma de humo + GA estado alarma CO opcional (DPT 1.005): notificaciones críticas en el teléfono |
35
+ | Detector de fugas de agua | GA estado fuga (DPT 1.005) |
36
+ | Sensor de calidad del aire (CO2) | GA estado CO2 en ppm (DPT 9.008); la clase de calidad del aire (buena/regular/moderada/mala...) se deriva automáticamente |
37
+ | Robot aspirador | **Solo-flow**: sin direcciones de grupo. Habilita los PINes del nodo: los comandos del asistente ("inicia la limpieza", pausa/reanudar/volver a la base) llegan a la salida como `rvcmode`/`rvccommand`; informa el estado con `msg.payload = { function: "rvcstate", value: "running"\|"docked"\|"charging"\|"paused"\|"error" }` y el modo con `function: "rvcmode", value: "cleaning"\|"idle"` |
38
+
39
+ - **GA de comando**: se escribe en el bus KNX cuando el asistente envía un comando.
40
+ - **GA de estado**: se lee del bus para mantener actualizados los atributos Matter (y las apps).
41
+
42
+ ## PINes del nodo
43
+
44
+ Si habilitas los PINes de entrada/salida del nodo:
45
+
46
+ - **Entrada**: actualiza el estado Matter desde el flow, sin pasar por el bus KNX: `msg.payload = { function: "onoff", value: true }` (`function` es una de `onoff`, `level`, `rgb`, `colortemp`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`, `fanspeed`, `smoke`, `co`, `leak`, `co2`, `rvcstate`, `rvcmode`). Útil para exponer a Alexa y cía. valores calculados en el flow (p.ej. un sensor virtual).
47
+ - **Salida**: cada comando recibido de un controlador Matter se reenvía al flow: `msg.topic` = nombre del dispositivo, `msg.payload` = valor, `msg.matter` = el comando en bruto. Un dispositivo sin GA de comando se convierte en un **dispositivo solo-flow**.
48
+
49
+ ## Notas
50
+
51
+ - La identidad Matter del dispositivo está ligada a este nodo: si borras el nodo y creas uno nuevo, las apps ven un dispositivo completamente nuevo.
52
+ - Los nodos de dispositivo añadidos/renombrados/eliminados se detectan en pocos segundos, sin volver a emparejar el bridge.
53
+ </script>
@@ -0,0 +1,83 @@
1
+ {
2
+ "knxUltimateMatterBridge": {
3
+ "title": "Matter Bridge (BETA)",
4
+ "bridge_name": "Nombre del bridge Matter",
5
+ "port": "Puerto",
6
+ "devices_help": "Añade los dispositivos KNX a exponer en Matter. El \"Nombre\" es el que Alexa/Google/Apple muestran y usan para los comandos de voz. GA de comando = se escribe cuando el asistente envía un comando; GA de estado = se lee del bus para mantener la app actualizada.",
7
+ "read_status_startup": "Leer las direcciones de grupo de estado al inicio",
8
+ "opt_yes": "Sí",
9
+ "opt_no": "No",
10
+ "node_pins": "PINes de entrada/salida del nodo",
11
+ "node_pins_hide": "Ocultar",
12
+ "node_pins_show": "Mostrar PINes de entrada/salida",
13
+ "fields": {
14
+ "type": "Tipo de dispositivo",
15
+ "name": "Nombre (mostrado por Alexa y cía.)",
16
+ "name_placeholder": "p.ej. Luz cocina",
17
+ "invert": "Invertir posición %"
18
+ },
19
+ "functions": {
20
+ "fn_onoff_cmd": "GA comando On/Off",
21
+ "fn_onoff_status": "GA estado On/Off",
22
+ "fn_level_cmd": "GA comando regulación %",
23
+ "fn_level_status": "GA estado regulación %",
24
+ "fn_sensor_ga": "GA estado del sensor",
25
+ "fn_updown": "GA comando Subir/Bajar",
26
+ "fn_stop": "GA comando Stop",
27
+ "fn_position_cmd": "GA comando posición %",
28
+ "fn_position_status": "GA estado posición %",
29
+ "fn_currenttemp": "GA temperatura actual",
30
+ "fn_setpoint_cmd": "GA comando consigna",
31
+ "fn_setpoint_status": "GA estado consigna",
32
+ "fn_rgb_cmd": "GA comando color RGB (DPT 232.600)",
33
+ "fn_rgb_status": "GA estado color RGB (DPT 232.600)",
34
+ "fn_ct_cmd": "GA comando temperatura de color (Kelvin)",
35
+ "fn_ct_status": "GA estado temperatura de color (Kelvin)",
36
+ "fn_smoke_ga": "GA estado alarma de humo",
37
+ "fn_co_ga": "GA estado alarma CO (opcional)",
38
+ "fn_leak_ga": "GA estado fuga de agua",
39
+ "fn_co2_ga": "GA estado CO2 (ppm, DPT 9.008)",
40
+ "fn_fanspeed_cmd": "GA comando velocidad ventilador %",
41
+ "fn_fanspeed_status": "GA estado velocidad ventilador %"
42
+ },
43
+ "types": {
44
+ "onofflight": "Luz On/Off",
45
+ "dimmablelight": "Luz regulable",
46
+ "rgblight": "Luz RGB (color)",
47
+ "colortemperaturelight": "Luz blanco dinámico (temperatura de color)",
48
+ "onoffplug": "Enchufe (on/off)",
49
+ "temperaturesensor": "Sensor de temperatura",
50
+ "humiditysensor": "Sensor de humedad",
51
+ "lightsensor": "Sensor de luz (Lux)",
52
+ "occupancysensor": "Sensor de presencia",
53
+ "contactsensor": "Sensor de contacto",
54
+ "windowcovering": "Persiana / Cortina",
55
+ "thermostat": "Termostato (calefacción)",
56
+ "fan": "Ventilador / VMC",
57
+ "smokecoalarm": "Alarma humo/CO",
58
+ "waterleakdetector": "Detector de fugas de agua",
59
+ "airqualitysensor": "Sensor de calidad del aire (CO2)",
60
+ "robotvacuum": "Robot aspirador (solo flow, vía PINes del nodo)"
61
+ },
62
+ "pairing": {
63
+ "title": "Emparejamiento (Alexa, Google Home, Apple Home...)",
64
+ "not_running": "El bridge Matter aún no está en ejecución. Haz deploy, espera unos segundos y pulsa actualizar.",
65
+ "commissioned": "Bridge emparejado con estos controladores:",
66
+ "awaiting": "Esperando emparejamiento. Escanea el código QR o introduce el código manual en tu app Matter:",
67
+ "qr_link": "Abrir el código QR en el navegador",
68
+ "deploy_first": "Haz deploy de este nodo primero y pulsa actualizar.",
69
+ "reset_button": "Restablecer emparejamiento",
70
+ "reset_confirm": "¿Eliminar TODOS los controladores emparejados y reiniciar el emparejamiento? Los dispositivos desaparecerán de Alexa/Google/Apple.",
71
+ "reset_ok": "Emparejamiento restablecido. El bridge vuelve a estar en espera de emparejamiento."
72
+ },
73
+ "bridge": "Bridge Matter",
74
+ "device_name": "Nombre (mostrado por Alexa y cía.)",
75
+ "device_help": "Elige el tipo de dispositivo y dale el nombre que usará el asistente de voz, luego rellena las direcciones de grupo. El gateway KNX es opcional: sin él, habilita los PINes del nodo y controla el dispositivo desde el flow."
76
+ },
77
+ "common": {
78
+ "ga": "GA",
79
+ "dpt": "DPT",
80
+ "name": "Nombre",
81
+ "knx_gw": "GW KNX"
82
+ }
83
+ }