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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/nodes/commonFunctions.js +93 -0
  3. package/nodes/icons/node-matter-icon.svg +12 -0
  4. package/nodes/knxUltimateMatterBridge.html +429 -0
  5. package/nodes/knxUltimateMatterBridge.js +456 -0
  6. package/nodes/knxUltimateMatterDevice.html +586 -0
  7. package/nodes/knxUltimateMatterDevice.js +308 -0
  8. package/nodes/locales/de/knxUltimateMatterBridge.html +64 -0
  9. package/nodes/locales/de/knxUltimateMatterBridge.json +80 -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/en/knxUltimateMatterBridge.html +64 -0
  15. package/nodes/locales/en/knxUltimateMatterBridge.json +80 -0
  16. package/nodes/locales/en/knxUltimateMatterDevice.html +56 -0
  17. package/nodes/locales/en/knxUltimateMatterDevice.json +109 -0
  18. package/nodes/locales/en/matter-config.html +25 -0
  19. package/nodes/locales/en/matter-config.json +26 -0
  20. package/nodes/locales/es/knxUltimateMatterBridge.html +64 -0
  21. package/nodes/locales/es/knxUltimateMatterBridge.json +80 -0
  22. package/nodes/locales/es/knxUltimateMatterDevice.html +56 -0
  23. package/nodes/locales/es/knxUltimateMatterDevice.json +109 -0
  24. package/nodes/locales/es/matter-config.html +25 -0
  25. package/nodes/locales/es/matter-config.json +26 -0
  26. package/nodes/locales/fr/knxUltimateMatterBridge.html +64 -0
  27. package/nodes/locales/fr/knxUltimateMatterBridge.json +80 -0
  28. package/nodes/locales/fr/knxUltimateMatterDevice.html +56 -0
  29. package/nodes/locales/fr/knxUltimateMatterDevice.json +109 -0
  30. package/nodes/locales/fr/matter-config.html +25 -0
  31. package/nodes/locales/fr/matter-config.json +26 -0
  32. package/nodes/locales/it/knxUltimateMatterBridge.html +64 -0
  33. package/nodes/locales/it/knxUltimateMatterBridge.json +80 -0
  34. package/nodes/locales/it/knxUltimateMatterDevice.html +56 -0
  35. package/nodes/locales/it/knxUltimateMatterDevice.json +109 -0
  36. package/nodes/locales/it/matter-config.html +25 -0
  37. package/nodes/locales/it/matter-config.json +26 -0
  38. package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +64 -0
  39. package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +80 -0
  40. package/nodes/locales/zh-CN/knxUltimateMatterDevice.html +56 -0
  41. package/nodes/locales/zh-CN/knxUltimateMatterDevice.json +109 -0
  42. package/nodes/locales/zh-CN/matter-config.html +25 -0
  43. package/nodes/locales/zh-CN/matter-config.json +26 -0
  44. package/nodes/matter-config.html +226 -0
  45. package/nodes/matter-config.js +242 -0
  46. package/nodes/utils/matterBridgeDeviceFactory.mjs +511 -0
  47. package/nodes/utils/matterBridgeEngine.mjs +290 -0
  48. package/nodes/utils/matterEngine.mjs +475 -0
  49. package/nodes/utils/matterKnxConverter.js +204 -0
  50. package/package.json +7 -2
@@ -0,0 +1,26 @@
1
+ {
2
+ "matter-config": {
3
+ "properties": {
4
+ "title": "Matter Controller",
5
+ "intro": "Dieser Node ist ein Matter-Controller (mit eigener Fabric). Kopple hier deine Matter-Geräte und verwende dann den \"Matter Device\"-Node, um sie auf KNX-Gruppenadressen abzubilden. Zuerst deployen, dann hierher zurückkehren, um Geräte zu koppeln.",
6
+ "node-config-input-name": "Name",
7
+ "fabric_label": "Fabric-Bezeichnung",
8
+ "pairing_title": "Neues Gerät koppeln",
9
+ "pairing_help": "Gib den 11-stelligen manuellen Kopplungscode (z.B. 3497-011-2332) oder den QR-Code-Inhalt (MT:....) ein. Das Gerät muss über das IP-Netzwerk erreichbar sein (WLAN/Ethernet oder Thread über Border Router). Ist das Gerät bereits mit einem anderen Controller (Alexa, Google, Apple) gekoppelt, nutze dessen Funktion \"mit weiterem Hub teilen\", um einen neuen Code zu erhalten.",
10
+ "pairing_code": "Kopplungscode",
11
+ "pair_button": "KOPPELN",
12
+ "devices_title": "Gekoppelte Geräte",
13
+ "col_name": "Name",
14
+ "col_product": "Produkt",
15
+ "col_state": "Status",
16
+ "no_devices": "Noch keine Geräte gekoppelt.",
17
+ "unpair_confirm": "Gerät entfernen (dekommissionieren)",
18
+ "unpair_ok": "Gerät entfernt.",
19
+ "deploy_first": "Bitte zuerst diesen Konfigurations-Node deployen und erneut versuchen.",
20
+ "pairing_code_missing": "Bitte einen Kopplungscode eingeben.",
21
+ "pairing_wait": "Kopplung läuft. Dies kann bis zu einer Minute dauern...",
22
+ "pairing_failed": "Kopplung fehlgeschlagen",
23
+ "pairing_ok": "Gerät erfolgreich gekoppelt!"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,64 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
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
+ The Matter Bridge node exposes **KNX group addresses as Matter devices**: Alexa, Google Home, Apple Home (or any Matter controller) commission this bridge **once** and see all your configured KNX devices, with the names you typed, ready for app and voice control.
9
+
10
+ This is the opposite direction of the *Matter Device* node: there KNX controls a Matter device, here Matter controllers control KNX.
11
+
12
+ ## Configuration
13
+
14
+ |Field|Description|
15
+ |--|--|
16
+ | KNX GW | KNX gateway used for telegrams. **Optional**: without a gateway the bridge works in flow-only mode — enable the node PINs and drive every device with flow messages |
17
+ | Matter bridge name | How the bridge itself is named in the Matter apps |
18
+ | Port | UDP port of the Matter server (default 5540). Only one bridge node per Node-RED instance. |
19
+ | Devices | The KNX virtual devices exposed on Matter (see below) |
20
+ | Read status at startup | Sends a `GroupValue_Read` to every status GA at startup, so the Matter attributes are populated |
21
+
22
+ ## Devices
23
+
24
+ Each row is one device shown by Alexa & Co. Pick the **type**, give it the **name** the assistant will use, then fill the group addresses (with ETS autocomplete):
25
+
26
+ |Type|Group addresses|
27
+ |--|--|
28
+ | On/Off light, Plug | On/Off command GA, On/Off status GA (DPT 1.001) |
29
+ | Dimmable light | + Dimming % command/status GA (DPT 5.001) |
30
+ | 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 |
31
+ | Tunable white light | + Color temperature command/status GA in Kelvin (DPT 7.600) |
32
+ | Cover / Shutter | Up/Down (DPT 1.008), Stop (DPT 1.017), Position % command/status (DPT 5.001), optional position inversion |
33
+ | Thermostat (heating) | Current temperature GA, Setpoint command/status GA (DPT 9.001) |
34
+ | Fan / Ventilation | Fan speed % command/status GA (DPT 5.001) |
35
+ | Sensors (temperature, humidity, light, occupancy, contact) | One status GA each |
36
+ | Smoke/CO alarm | Smoke alarm status GA + optional CO alarm status GA (DPT 1.005): critical notifications on the phone |
37
+ | Water leak detector | Leak status GA (DPT 1.005) |
38
+ | Air quality sensor (CO2) | CO2 status GA in ppm (DPT 9.008); the air quality class (good/fair/moderate/poor...) is derived automatically |
39
+ | Robot vacuum | **Flow-only**: no group addresses. Enable the node PINs: commands from the assistant ("start cleaning", pause/resume/go home) arrive on the output as `rvcmode`/`rvccommand`; report the state back with `msg.payload = { device, function: "rvcstate", value: "running"|"docked"|"charging"|"paused"|"error" }` and the mode with `function: "rvcmode", value: "cleaning"|"idle"`. Integrate your Roomba/Roborock with any Node-RED node and expose it to Alexa/Apple |
40
+
41
+ - **Command GA**: written to the KNX bus when the assistant sends a command.
42
+ - **Status GA**: read from the bus to keep the Matter attributes (and the apps) updated.
43
+
44
+ ## Pairing
45
+
46
+ 1. **Deploy**, wait a few seconds, then open the node again.
47
+ 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").
48
+ 3. Multiple controllers can be paired with the same bridge (Matter multi-fabric).
49
+
50
+ The **Reset pairing** button removes all paired controllers and restarts the pairing advertising.
51
+
52
+ ## Node PINs
53
+
54
+ If you enable the node input/output PINs:
55
+
56
+ - **Input**: update the Matter state of a virtual device from the flow, without going through the KNX bus: `msg.payload = { device: "Kitchen light", function: "onoff", value: true }` (`device` accepts the name or the internal id; `function` is one of `onoff`, `level`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`). Useful to expose flow-computed values (e.g. a virtual sensor) to Alexa & Co.
57
+ - **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. Devices without a command GA become **flow-only devices**: the command reaches your flow and you decide what to do with it.
58
+
59
+ ## Notes
60
+
61
+ - The Node-RED host must have **IPv6 link-local** enabled (standard Matter requirement) and be reachable from the controller on the local network.
62
+ - The bridge identity is stored in `knxultimatestorage/matter` inside the Node-RED user directory: re-deploys do NOT require a new pairing.
63
+ - Device renames/additions are picked up by the controllers automatically; if you remove a device, it disappears from the apps.
64
+ </script>
@@ -0,0 +1,80 @@
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
+ },
74
+ "common": {
75
+ "ga": "GA",
76
+ "dpt": "DPT",
77
+ "name": "Name",
78
+ "knx_gw": "KNX GW"
79
+ }
80
+ }
@@ -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,64 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
2
+ # Matter Bridge (BETA)
3
+
4
+ > Este nodo está en **BETA**: funciona, pero algunos detalles pueden cambiar entre versiones.
5
+
6
+ ## Descripción general
7
+
8
+ El nodo Matter Bridge expone las **direcciones de grupo KNX como dispositivos Matter**: Alexa, Google Home, Apple Home (o cualquier controlador Matter) emparejan este bridge **una sola vez** y ven todos tus dispositivos KNX configurados, con los nombres que hayas elegido, listos para el control por app y por voz.
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
+ | GW KNX | Gateway KNX usado para los telegramas. **Opcional**: sin gateway el bridge funciona en modo solo-flow — habilita los PINes del nodo y controla cada dispositivo con mensajes del flow |
17
+ | Nombre del bridge Matter | Cómo se llama el bridge en las apps Matter |
18
+ | Puerto | Puerto UDP del servidor Matter (por defecto 5540). Solo un nodo bridge por instancia de Node-RED. |
19
+ | Dispositivos | Los dispositivos KNX virtuales expuestos en Matter (ver abajo) |
20
+ | Leer las GA de estado al inicio | Envía un `GroupValue_Read` a cada GA de estado al inicio, para poblar los atributos Matter |
21
+
22
+ ## Dispositivos
23
+
24
+ Cada fila es un dispositivo mostrado por Alexa y cía. Elige el **tipo**, dale el **nombre** que usará el asistente y rellena las direcciones de grupo (con autocompletado ETS):
25
+
26
+ |Tipo|Direcciones de grupo|
27
+ |--|--|
28
+ | Luz On/Off, Enchufe | GA comando On/Off, GA estado On/Off (DPT 1.001) |
29
+ | Luz regulable | + GA comando/estado regulación % (DPT 5.001) |
30
+ | 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 |
31
+ | Luz blanco dinámico | + GA comando/estado temperatura de color en Kelvin (DPT 7.600) |
32
+ | Persiana / Cortina | Subir/Bajar (DPT 1.008), Stop (DPT 1.017), posición % comando/estado (DPT 5.001), inversión de posición opcional |
33
+ | Termostato (calefacción) | GA temperatura actual, GA comando/estado consigna (DPT 9.001) |
34
+ | Ventilador / VMC | GA comando/estado velocidad % (DPT 5.001) |
35
+ | Sensores (temperatura, humedad, luz, presencia, contacto) | Una GA de estado cada uno |
36
+ | Alarma humo/CO | GA estado alarma de humo + GA estado alarma CO opcional (DPT 1.005): notificaciones críticas en el teléfono |
37
+ | Detector de fugas de agua | GA estado fuga (DPT 1.005) |
38
+ | 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 |
39
+ | 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 = { device, function: "rvcstate", value: "running"\|"docked"\|"charging"\|"paused"\|"error" }` y el modo con `function: "rvcmode", value: "cleaning"\|"idle"`. Integra tu Roomba/Roborock con cualquier nodo de Node-RED y exponlo a Alexa/Apple |
40
+
41
+ - **GA de comando**: se escribe en el bus KNX cuando el asistente envía un comando.
42
+ - **GA de estado**: se lee del bus para mantener actualizados los atributos Matter (y las apps).
43
+
44
+ ## Emparejamiento
45
+
46
+ 1. Haz **deploy**, espera unos segundos y vuelve a abrir el nodo.
47
+ 2. El panel de emparejamiento muestra el **código QR** y el **código manual**: escanéalo o escríbelo en Alexa / Google Home / Apple Home ("añadir dispositivo Matter").
48
+ 3. Se pueden emparejar varios controladores con el mismo bridge (multi-fabric Matter).
49
+
50
+ El botón **Restablecer emparejamiento** elimina todos los controladores emparejados y reinicia el anuncio de emparejamiento.
51
+
52
+ ## PINes del nodo
53
+
54
+ Si habilitas los PINes de entrada/salida del nodo:
55
+
56
+ - **Entrada**: actualiza el estado Matter de un dispositivo virtual desde el flow, sin pasar por el bus KNX: `msg.payload = { device: "Luz cocina", function: "onoff", value: true }` (`device` acepta el nombre o el id interno; `function` es una de `onoff`, `level`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`). Útil para exponer a Alexa y cía. valores calculados en el flow (p.ej. un sensor virtual).
57
+ - **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. Los dispositivos sin GA de comando se convierten en **dispositivos solo-flow**: el comando llega a tu flow y tú decides qué hacer con él.
58
+
59
+ ## Notas
60
+
61
+ - El host de Node-RED debe tener **IPv6 link-local** habilitado (requisito estándar de Matter) y ser accesible desde el controlador en la red local.
62
+ - La identidad del bridge se guarda en `knxultimatestorage/matter` dentro del directorio de usuario de Node-RED: los re-deploys NO requieren un nuevo emparejamiento.
63
+ - Los cambios de nombre y los dispositivos añadidos se detectan automáticamente; si eliminas un dispositivo, desaparece de las apps.
64
+ </script>
@@ -0,0 +1,80 @@
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
+ },
74
+ "common": {
75
+ "ga": "GA",
76
+ "dpt": "DPT",
77
+ "name": "Nombre",
78
+ "knx_gw": "GW KNX"
79
+ }
80
+ }
@@ -0,0 +1,56 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterDevice">
2
+ # Dispositivo Matter (BETA)
3
+
4
+ > Este nodo está en **BETA**: funciona, pero algunos detalles pueden cambiar entre versiones.
5
+
6
+ ## Descripción general
7
+
8
+ El nodo Matter Device hace de puente entre un **dispositivo Matter** y las **direcciones de grupo KNX**. El nodo opera a través del nodo de configuración *Controlador Matter*, que comisiona los dispositivos en su propia fabric Matter.
9
+
10
+ - **Controla** cualquier dispositivo Matter emparejado desde el bus KNX (on/off, regulación, persianas, termostatos, cerraduras, ...).
11
+ - **Sigue** cada atributo del dispositivo en direcciones de grupo KNX (estados, sensores, medición de potencia, batería...).
12
+ - Totalmente genérico: la lista de mapeos se construye a partir de los **endpoints/clústeres reales** que expone el dispositivo.
13
+
14
+ ## Configuración
15
+
16
+ |Campo|Descripción|
17
+ |--|--|
18
+ | GW KNX | Gateway KNX usado para los telegramas |
19
+ | Ctrl Matter | El nodo de configuración Controlador Matter (donde se emparejan los dispositivos) |
20
+ | Dispositivo | Elige el dispositivo Matter emparejado desde el autocompletado |
21
+ | Mapeos | Una fila por cada mapeo dirección de grupo ↔ clúster Matter |
22
+ | Leer estado al inicio | Si está activo, el nodo emite los valores actuales en caché al hacer deploy/conectar |
23
+ | PINes de entrada/salida | Habilita los pines de Node-RED para el acceso Matter en bruto |
24
+
25
+ ## Mapeos
26
+
27
+ La lista de destinos muestra las funciones soportadas con nombres comprensibles como *"Interruptor On/Off"* o *"Potencia instantánea (W)"*, filtradas según lo que el dispositivo realmente expone y con el valor actual entre corchetes.
28
+
29
+ Cada fila de mapeo tiene una **dirección**:
30
+
31
+ - **KNX → Matter (comando)**: un telegrama recibido en la dirección de grupo invoca un comando del clúster Matter o escribe un atributo. Ejemplo: GA `1/1/1` DPT 1.001 → `OnOff.on/off` (el valor booleano elige automáticamente on u off).
32
+ - **Matter → KNX (estado)**: cuando cambia el atributo Matter suscrito, su valor se convierte y se escribe en la dirección de grupo. Las peticiones `GroupValue_Read` se responden con el valor en caché.
33
+
34
+ Los clústeres más comunes se convierten automáticamente en valores aptos para KNX:
35
+
36
+ |Clúster|Conversión|
37
+ |--|--|
38
+ | OnOff | booleano (DPT 1.001) |
39
+ | LevelControl | 0-254 ↔ porcentaje (DPT 5.001) |
40
+ | WindowCovering | percent100ths ↔ porcentaje (DPT 5.001), subir/bajar (DPT 1.008) |
41
+ | ColorControl | mireds ↔ Kelvin (DPT 7.600) |
42
+ | Thermostat | centi-°C ↔ °C (DPT 9.001) |
43
+ | Temperatura/Humedad | centi-unidades ↔ unidades (DPT 9.001/9.007) |
44
+ | Iluminancia | escala logarítmica ↔ Lux (DPT 9.004) |
45
+ | PowerSource | medio-porcentaje ↔ porcentaje de batería (DPT 5.001) |
46
+ | Potencia/Energía eléctrica | mW ↔ W (DPT 14.056), mWh ↔ kWh (DPT 13.013) |
47
+
48
+ Los demás clústeres/atributos pasan sin conversión; el DPT elegido realiza la codificación KNX final.
49
+
50
+ ## PINes del nodo
51
+
52
+ Si habilitas los PINes del nodo:
53
+
54
+ - **Entrada**: envía comandos en bruto: `msg.payload = { endpointId: 1, clusterId: 6, command: "toggle" }` o escrituras de atributos: `msg.payload = { endpointId: 1, clusterId: 8, attribute: "onLevel", value: 128 }`
55
+ - **Salida**: recibe cada cambio de atributo (`msg.matter` contiene el evento completo) y cada evento de clúster (pulsaciones de botones, etc.).
56
+ </script>