node-red-contrib-knx-ultimate 6.0.12 → 6.1.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.
- package/CHANGELOG.md +12 -2
- package/examples/Matter Controller - Semantic Flow Input.json +248 -0
- package/nodes/knxUltimateMatterBridge.html +144 -11
- package/nodes/knxUltimateMatterControllerDevice.html +298 -13
- package/nodes/knxUltimateMatterControllerDevice.js +37 -0
- package/nodes/locales/de/knxUltimateMatterBridge.html +1 -1
- package/nodes/locales/de/knxUltimateMatterBridge.json +14 -0
- package/nodes/locales/de/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/de/knxUltimateMatterControllerDevice.json +23 -0
- package/nodes/locales/de/matter-config.html +11 -1
- package/nodes/locales/de/matter-config.json +12 -0
- package/nodes/locales/en/knxUltimateMatterBridge.html +1 -1
- package/nodes/locales/en/knxUltimateMatterBridge.json +14 -0
- package/nodes/locales/en/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/en/knxUltimateMatterControllerDevice.json +23 -0
- package/nodes/locales/en/matter-config.html +11 -1
- package/nodes/locales/en/matter-config.json +12 -0
- package/nodes/locales/es/knxUltimateMatterBridge.html +1 -1
- package/nodes/locales/es/knxUltimateMatterBridge.json +14 -0
- package/nodes/locales/es/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/es/knxUltimateMatterControllerDevice.json +23 -0
- package/nodes/locales/es/matter-config.html +11 -1
- package/nodes/locales/es/matter-config.json +12 -0
- package/nodes/locales/fr/knxUltimateMatterBridge.html +1 -1
- package/nodes/locales/fr/knxUltimateMatterBridge.json +14 -0
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.json +31 -0
- package/nodes/locales/fr/matter-config.html +11 -1
- package/nodes/locales/fr/matter-config.json +12 -0
- package/nodes/locales/it/knxUltimateMatterBridge.html +1 -1
- package/nodes/locales/it/knxUltimateMatterBridge.json +14 -0
- package/nodes/locales/it/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/it/knxUltimateMatterControllerDevice.json +23 -0
- package/nodes/locales/it/matter-config.html +11 -1
- package/nodes/locales/it/matter-config.json +12 -0
- package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +14 -0
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.json +31 -0
- package/nodes/locales/zh-CN/matter-config.html +11 -1
- package/nodes/locales/zh-CN/matter-config.json +12 -0
- package/nodes/matter-config.html +215 -23
- package/nodes/matter-config.js +48 -2
- package/nodes/utils/matterControllerCommandGate.js +47 -0
- package/nodes/utils/matterControllerProfiles/doorLock.js +19 -4
- package/nodes/utils/matterControllerProfiles/fan.js +0 -1
- package/nodes/utils/matterControllerProfiles/mappedEndpoint.js +32 -15
- package/nodes/utils/matterControllerProfiles/switch.js +0 -1
- package/nodes/utils/matterControllerProfiles/thermostat.js +0 -1
- package/nodes/utils/matterControllerProfiles/windowCovering.js +0 -1
- package/nodes/utils/matterControllerSemanticInput.js +212 -0
- package/nodes/utils/matterEngine.mjs +118 -16
- package/package.json +1 -1
- package/resources/matterQrScanner.js +98 -0
- package/resources/zxing-browser-0.2.0.min.js +1 -0
- package/resources/zxing-browser-LICENSE.txt +21 -0
|
@@ -11,7 +11,11 @@ Der Controller kommuniziert mit den Geräten über das **IP-Netzwerk** (WLAN, Et
|
|
|
11
11
|
|
|
12
12
|
1. Zuerst diesen Konfigurations-Node **deployen** (der Controller muss laufen).
|
|
13
13
|
2. Den Node erneut öffnen und den **Kopplungscode** eingeben: entweder den 11-stelligen manuellen Code (z.B. `3497-011-2332`) oder den QR-Code-Inhalt (`MT:....`).
|
|
14
|
-
3.
|
|
14
|
+
3. Bei einem manuell eingegebenen Code auf **KOPPELN** klicken. Ein mit **Webcam** oder **Bild** gelesener QR-Code startet die Kopplung automatisch. Die Kommissionierung kann bis zu einer Minute dauern.
|
|
15
|
+
|
|
16
|
+
Statt den QR-Payload einzutippen, klicke auf **Webcam**, um ihn live zu scannen, oder auf **Bild**, um ihn aus einem lokalen Foto zu lesen. Sowohl normale dunkle QR-Codes auf hellem Grund als auch invertierte weiße Codes auf dunklem Grund werden unterstützt. Die Dekodierung erfolgt vollständig im Browser; nach dem Lesen eines gültigen Matter-QR-Codes füllt der Editor das Kopplungscode-Feld und startet die Kopplung sofort. Gib den optionalen Gerätenamen vor dem Scannen ein. Ein manuell eingegebener Code startet weiterhin erst mit **KOPPELN**. Der Live-Zugriff auf die Webcam setzt voraus, dass der Editor über HTTPS oder von `localhost` geöffnet wurde; andernfalls erklärt der Editor die Einschränkung und das Laden eines Bildes bleibt verfügbar.
|
|
17
|
+
|
|
18
|
+
Während der Kommissionierung überdeckt ein blockierender Wartebildschirm den Editor und verhindert weitere Klicks, bis der Vorgang erfolgreich abgeschlossen wird oder fehlschlägt.
|
|
15
19
|
|
|
16
20
|
Wenn das Gerät fabrikneu ist und nur Bluetooth-Kommissionierung unterstützt, kopple es zuerst mit der Hersteller-App oder einem anderen Matter-Controller (Alexa, Google Home, Apple Home) und nutze dann dessen Funktion **"mit weiterem Hub teilen"**, um einen neuen Kopplungscode für KNX-Ultimate zu erzeugen. So tritt das Gerät mehreren Fabrics gleichzeitig bei.
|
|
17
21
|
|
|
@@ -26,4 +30,10 @@ Mit **Exportieren** wird eine vollständige Sicherung dieser Controller-Instanz
|
|
|
26
30
|
## Ein Gerät entfernen
|
|
27
31
|
|
|
28
32
|
Nutze den Papierkorb-Button in der Liste der gekoppelten Geräte. Der Controller versucht, das Gerät sauber zu dekommissionieren; ist es nicht erreichbar, wird es trotzdem aus der Fabric entfernt (danach kann ein Werksreset des Geräts nötig sein).
|
|
33
|
+
|
|
34
|
+
Die Liste enthält eine Zeile für jeden Node, der derzeit in der Matter-Fabric dieses Controllers gespeichert ist. Node-IDs sind innerhalb dieser Fabric eindeutig; Endpunkte eines einzelnen kommissionierten Bridges werden nicht als separate Geräte aufgeführt. Die Statusspalte zeigt an, ob ein Node verbunden, getrennt, in Wiederverbindung oder auf Geräteerkennung wartend ist.
|
|
35
|
+
|
|
36
|
+
Der Controller hält die Befehlsreihenfolge für jedes gekoppelte Gerät getrennt. Ein langsames, offline befindliches oder entferntes Gerät kann Befehle für andere Geräte nicht blockieren. Controller-Gerätenodes, die weiterhin auf eine entfernte Node ID verweisen, weisen neue Befehle sofort ab und zeigen **Device no longer commissioned** an.
|
|
37
|
+
|
|
38
|
+
Wird ein Gerät nicht verfügbar, bleiben seine Controller-Nodes gesperrt und ignorieren weitere Befehle, bis dieses Gerät erneut `connected` meldet. Die Wiederherstellung erfolgt automatisch; auch das Öffnen des Geräte-Node-Editors löst die Sperre für einen manuellen Neuversuch.
|
|
29
39
|
</script>
|
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
"pairing_code": "Kopplungscode",
|
|
10
10
|
"pairing_name": "Gerätename",
|
|
11
11
|
"pair_button": "KOPPELN",
|
|
12
|
+
"qr_acquire": "QR-Code lesen",
|
|
13
|
+
"qr_scan_camera": "Webcam",
|
|
14
|
+
"qr_scan_image": "Bild",
|
|
15
|
+
"qr_stop_camera": "Kamera stoppen",
|
|
16
|
+
"qr_camera_insecure": "Der Browser kann die Webcam nicht verwenden, weil der Node-RED-Editor nicht über HTTPS oder localhost geöffnet ist. Öffne ihn über HTTPS oder verwende Bild.",
|
|
17
|
+
"qr_camera_unsupported": "Dieser Browser kann nicht auf eine Webcam zugreifen. Verwende einen unterstützten Browser oder lade ein Bild.",
|
|
18
|
+
"qr_camera_permission_denied": "Die Webcam-Berechtigung wurde verweigert. Erlaube den Kamerazugriff im Browser oder lade ein Bild.",
|
|
19
|
+
"qr_camera_failed": "Die Webcam konnte nicht gestartet werden",
|
|
20
|
+
"qr_image_failed": "Im ausgewählten Bild wurde kein lesbarer QR-Code gefunden",
|
|
21
|
+
"qr_invalid_matter": "Der QR-Code ist kein Matter-Kopplungscode (MT:…).",
|
|
22
|
+
"qr_found": "Matter-QR-Code gelesen. Die Kopplung startet automatisch.",
|
|
23
|
+
"qr_decoder_unavailable": "Der QR-Decoder konnte nicht geladen werden.",
|
|
12
24
|
"devices_title": "Gekoppelte Geräte",
|
|
13
25
|
"col_name": "Name",
|
|
14
26
|
"col_product": "Produkt",
|
|
@@ -45,7 +45,7 @@ These options are hidden unless they apply to the selected type. Dimmable device
|
|
|
45
45
|
|
|
46
46
|
## Node PINs
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
The PIN selector is outside the editor tabs. Enabling it reveals a contextual **Flow input/output** section directly below, with copyable examples filtered to the selected device type:
|
|
49
49
|
|
|
50
50
|
- **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.
|
|
51
51
|
- **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**.
|
|
@@ -36,6 +36,20 @@
|
|
|
36
36
|
"mappings": "KNX mappings",
|
|
37
37
|
"advanced": "Advanced options"
|
|
38
38
|
},
|
|
39
|
+
"flow_help": {
|
|
40
|
+
"title": "Flow input/output",
|
|
41
|
+
"intro": "These examples match the selected device type and are available while the node input/output PINs are enabled.",
|
|
42
|
+
"input_title": "Flow → Matter (node input)",
|
|
43
|
+
"input_hint": "Send one of these messages to update the exposed Matter state without writing to KNX.",
|
|
44
|
+
"output_title": "Matter → Flow (node output)",
|
|
45
|
+
"output_hint": "Commands received from a Matter controller are emitted with the value in msg.payload and raw routing details in msg.matter.",
|
|
46
|
+
"function": "Function",
|
|
47
|
+
"message": "Example message",
|
|
48
|
+
"copy": "Copy",
|
|
49
|
+
"copied": "Message copied",
|
|
50
|
+
"no_input": "This device type has no flow state-update examples.",
|
|
51
|
+
"no_output": "This device type does not emit controller commands; its output remains silent."
|
|
52
|
+
},
|
|
39
53
|
"functions": {
|
|
40
54
|
"fn_onoff_cmd": "On/Off command GA",
|
|
41
55
|
"fn_onoff_status": "On/Off status GA",
|
|
@@ -19,7 +19,15 @@ It replaces the unpublished per-device Matter controller nodes and keeps the ful
|
|
|
19
19
|
| Sensors | Sensor endpoints expose their measurement/status GA only when supported: temperature, humidity, illuminance, occupancy, contact and battery. |
|
|
20
20
|
| Read at startup | Publishes the cached Matter value at deploy/startup or when the device reconnects. |
|
|
21
21
|
| Update local state from KNX write | Updates the local Matter/KNX cache when a telegram is written on a configured KNX GA. |
|
|
22
|
-
| Node Input/Output PINs | Shows Node-RED input/output pins.
|
|
22
|
+
| Node Input/Output PINs | Shows Node-RED input/output pins and reveals the **Flow input** section directly below this field. Lights show their supported top-level light-state messages; non-light endpoints show the simple `{function,value}` contract and advanced Matter fields. The selection is preserved when the editor is reopened. |
|
|
23
|
+
|
|
24
|
+
## Flow input
|
|
25
|
+
|
|
26
|
+
Enable **Node Input/Output PINs** to reveal the **Flow input** section directly below the selector. For lights it shows copyable examples for the supported top-level properties, such as `msg.on`, `msg.dimming`, `msg.color_temperature` and `msg.color`. For non-light endpoints it is built from the advertised structure and provides the selected Endpoint ID, every readable/writable attribute and every accepted command. It remains available when the node is used only by a flow without a KNX gateway.
|
|
27
|
+
|
|
28
|
+
Simple writes use `msg.payload = {function:"position",value:35}`. Omit `value` to read a supported state, for example `{function:"temperature"}`; the output uses human units and includes raw routing details in `msg.matter`. Supported functions include `onoff`, `level`, `position`, `tiltposition`, `open`, `close`, `stop`, `setpoint`, `coolingsetpoint`, `currenttemp`, `fanspeed`, sensor readings and `identify`, but only when advertised by that endpoint. Door Lock accepts `{function:"lock",value:true|false}`.
|
|
29
|
+
|
|
30
|
+
Existing advanced inputs remain valid: use top-level `msg.clusterId` plus `msg.command`/`msg.args`, or `msg.attribute` with optional `msg.value`. Node ID and Endpoint ID are already selected by the node; `msg.endpointId` is only an optional override.
|
|
23
31
|
|
|
24
32
|
## Universal Mode
|
|
25
33
|
|
|
@@ -34,4 +42,8 @@ Examples: `{nodeId:"100",endpointId:1,clusterId:6,command:"on",args:{}}` turns O
|
|
|
34
42
|
## Behaviour
|
|
35
43
|
|
|
36
44
|
The node keeps a local cache from Matter updates and KNX writes, answers KNX read requests from that cache, and can emit/read values at startup. Only the configured group addresses are listened to, so unrelated KNX traffic is ignored.
|
|
45
|
+
|
|
46
|
+
Commands are scheduled in a separate ordered lane for each commissioned device. An offline, timing-out or removed device therefore cannot delay other Matter devices that use the same KNX group address. A node that still references a removed device rejects the command immediately and shows **Device no longer commissioned** in red; select a valid Matter device or remove the stale Controller node.
|
|
47
|
+
|
|
48
|
+
An unavailable-device error is latched: further KNX and flow commands are ignored and cannot overwrite the red status. The node resumes automatically as soon as that Matter device reports `connected`; opening the node editor also clears the latch to allow a manual retry.
|
|
37
49
|
</script>
|
|
@@ -11,6 +11,29 @@
|
|
|
11
11
|
"node-input-hueLight": "Matter device",
|
|
12
12
|
"paletteLabel": "Control Matter from KNX",
|
|
13
13
|
"no_devices": "No Matter devices found. Check the Matter controller and click refresh.",
|
|
14
|
+
"input_help_label": "Flow input",
|
|
15
|
+
"input_help_pin_hint": "Enable the node input/output PINs before sending these messages.",
|
|
16
|
+
"input_help_endpoint": "Selected endpoint",
|
|
17
|
+
"input_help_endpoint_hint": "The node already knows the Node ID and Endpoint ID, so the simple messages do not need them.",
|
|
18
|
+
"input_help_simple_title": "Simple messages",
|
|
19
|
+
"input_help_simple_hint": "These functions use human units and are translated to the Matter cluster, command or attribute shown by the selected endpoint.",
|
|
20
|
+
"input_help_light_hint": "Light endpoints accept light-state properties directly on msg (not inside msg.payload). Only controls supported by the selected light are shown.",
|
|
21
|
+
"input_help_advanced_title": "Advanced Matter details",
|
|
22
|
+
"input_help_advanced_hint": "Only advertised attributes and commands are listed. Attribute write examples use 0 as a placeholder; command arguments may need to be adapted to the Matter data type.",
|
|
23
|
+
"input_help_operation": "Operation",
|
|
24
|
+
"input_help_function": "Function",
|
|
25
|
+
"input_help_target": "Matter target",
|
|
26
|
+
"input_help_message": "Message",
|
|
27
|
+
"input_help_read": "Read",
|
|
28
|
+
"input_help_write": "Write",
|
|
29
|
+
"input_help_command": "Command",
|
|
30
|
+
"input_help_copy": "Copy",
|
|
31
|
+
"input_help_copied": "Message copied",
|
|
32
|
+
"input_help_no_simple": "This endpoint has no known simple input functions.",
|
|
33
|
+
"input_help_no_structure": "The Matter structure is unavailable. Refresh the device list while the endpoint is online.",
|
|
34
|
+
"input_functions": {
|
|
35
|
+
"onoff": "On / Off", "on": "On", "off": "Off", "level": "Level", "brightness": "Brightness", "color_temperature": "Colour temperature", "xy_color": "XY colour", "position": "Cover position", "tiltposition": "Cover tilt", "open": "Open", "close": "Close", "stop": "Stop", "setpoint": "Heating setpoint", "coolingsetpoint": "Cooling setpoint", "currenttemp": "Current temperature", "fanspeed": "Fan speed", "temperature": "Temperature", "humidity": "Humidity", "illuminance": "Illuminance", "occupancy": "Occupancy", "contact": "Contact", "battery": "Battery", "activepower": "Active power", "importedenergy": "Imported energy", "identify": "Identify", "lock": "Lock", "unlock": "Unlock"
|
|
36
|
+
},
|
|
14
37
|
"tabs": {
|
|
15
38
|
"switch": "Switch",
|
|
16
39
|
"dim": "Dim",
|
|
@@ -11,7 +11,11 @@ The controller talks to the devices over the **IP network** (WiFi, Ethernet, or
|
|
|
11
11
|
|
|
12
12
|
1. **Deploy** this configuration node first (the controller must be running).
|
|
13
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.
|
|
14
|
+
3. For a manually entered code, click **PAIR**. A QR read with **Webcam** or **Image** starts pairing automatically. Commissioning can take up to a minute.
|
|
15
|
+
|
|
16
|
+
Instead of typing the QR payload, click **Webcam** to scan it live or **Image** to read it from a local picture. Both standard dark-on-light and inverted white-on-dark QR codes are supported. Decoding takes place entirely in the browser; after a valid Matter QR is read, the editor fills the pairing-code field and immediately starts pairing. Enter the optional device name before scanning if desired. A manually typed code still starts only when you click **PAIR**. Live webcam access requires the editor to be opened over HTTPS or from `localhost`; when that is not possible, the editor explains the limitation and image loading remains available.
|
|
17
|
+
|
|
18
|
+
While commissioning is in progress, a blocking wait panel covers the editor and prevents further clicks until the operation succeeds or fails.
|
|
15
19
|
|
|
16
20
|
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
21
|
|
|
@@ -26,4 +30,10 @@ Use **Export** to download a complete backup of this controller instance. It inc
|
|
|
26
30
|
## Removing a device
|
|
27
31
|
|
|
28
32
|
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).
|
|
33
|
+
|
|
34
|
+
The list contains one row for every node currently stored in this controller's Matter fabric. Node IDs are unique within that fabric; endpoints exposed by one commissioned bridge are not listed as separate devices. The state column reports whether each node is connected, disconnected, reconnecting or waiting for discovery.
|
|
35
|
+
|
|
36
|
+
The controller keeps command order separately for each commissioned device. A slow, offline or removed device cannot block commands for other devices. Controller device nodes that still reference a removed Node ID reject new commands immediately and display **Device no longer commissioned**.
|
|
37
|
+
|
|
38
|
+
When a device becomes unavailable, its Controller nodes stay blocked and ignore further commands until that device reports `connected` again. Recovery is automatic; opening the device-node editor also clears the block for a manual retry.
|
|
29
39
|
</script>
|
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
"pairing_code": "Pairing code",
|
|
10
10
|
"pairing_name": "Device name",
|
|
11
11
|
"pair_button": "PAIR",
|
|
12
|
+
"qr_acquire": "Read QR code",
|
|
13
|
+
"qr_scan_camera": "Webcam",
|
|
14
|
+
"qr_scan_image": "Image",
|
|
15
|
+
"qr_stop_camera": "Stop camera",
|
|
16
|
+
"qr_camera_insecure": "The browser cannot use the webcam because the Node-RED editor is not open over HTTPS or localhost. Reopen it over HTTPS, or use Image.",
|
|
17
|
+
"qr_camera_unsupported": "This browser cannot access a webcam. Use a supported browser or load an image.",
|
|
18
|
+
"qr_camera_permission_denied": "Webcam permission was denied. Allow camera access in the browser, or load an image.",
|
|
19
|
+
"qr_camera_failed": "Unable to start the webcam",
|
|
20
|
+
"qr_image_failed": "No readable QR code was found in the selected image",
|
|
21
|
+
"qr_invalid_matter": "The QR code is not a Matter pairing code (MT:…).",
|
|
22
|
+
"qr_found": "Matter QR code read. Pairing starts automatically.",
|
|
23
|
+
"qr_decoder_unavailable": "The QR decoder could not be loaded.",
|
|
12
24
|
"devices_title": "Commissioned devices",
|
|
13
25
|
"col_name": "Name",
|
|
14
26
|
"col_product": "Product",
|
|
@@ -45,7 +45,7 @@ Estas opciones solo aparecen cuando tienen sentido para el tipo seleccionado. Lo
|
|
|
45
45
|
|
|
46
46
|
## PINes del nodo
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
El selector de PINes está fuera de las pestañas del editor. Al activarlo aparece justo debajo una sección contextual **Entrada/salida del flow**, con ejemplos copiables filtrados según el tipo de dispositivo:
|
|
49
49
|
|
|
50
50
|
- **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).
|
|
51
51
|
- **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**.
|
|
@@ -36,6 +36,20 @@
|
|
|
36
36
|
"mappings": "Asignaciones KNX",
|
|
37
37
|
"advanced": "Opciones avanzadas"
|
|
38
38
|
},
|
|
39
|
+
"flow_help": {
|
|
40
|
+
"title": "Entrada/salida del flow",
|
|
41
|
+
"intro": "Estos ejemplos corresponden al tipo de dispositivo seleccionado y están disponibles mientras los pines de entrada/salida del nodo están activados.",
|
|
42
|
+
"input_title": "Flow → Matter (entrada del nodo)",
|
|
43
|
+
"input_hint": "Envía uno de estos mensajes para actualizar el estado Matter expuesto sin escribir en KNX.",
|
|
44
|
+
"output_title": "Matter → Flow (salida del nodo)",
|
|
45
|
+
"output_hint": "Los comandos recibidos de un controlador Matter se emiten con el valor en msg.payload y los detalles raw en msg.matter.",
|
|
46
|
+
"function": "Función",
|
|
47
|
+
"message": "Mensaje de ejemplo",
|
|
48
|
+
"copy": "Copiar",
|
|
49
|
+
"copied": "Mensaje copiado",
|
|
50
|
+
"no_input": "Este tipo de dispositivo no tiene ejemplos de actualización de estado desde el flow.",
|
|
51
|
+
"no_output": "Este tipo de dispositivo no emite comandos del controlador; su salida permanece inactiva."
|
|
52
|
+
},
|
|
39
53
|
"functions": {
|
|
40
54
|
"fn_onoff_cmd": "GA comando On/Off",
|
|
41
55
|
"fn_onoff_status": "GA estado On/Off",
|
|
@@ -19,7 +19,15 @@ Sustituye a los nodos Matter separados no publicados y conserva toda la UI de lu
|
|
|
19
19
|
| Sensores | Los endpoints de sensor muestran su GA de medida/estado solo cuando está soportado: temperatura, humedad, iluminancia, ocupación, contacto y batería. |
|
|
20
20
|
| Read at startup | Publica el valor Matter en caché al desplegar/iniciar o cuando el dispositivo se reconecta. |
|
|
21
21
|
| Update local state from KNX write | Actualiza la caché local Matter/KNX cuando se escribe un telegrama en una GA KNX configurada. |
|
|
22
|
-
| Node Input/Output PINs | Muestra pines de entrada/salida Node-RED
|
|
22
|
+
| Node Input/Output PINs | Muestra pines de entrada/salida Node-RED y la sección **Entrada del flow** justo debajo de este campo. Las luces muestran sus mensajes de estado compatibles en el nivel superior; los demás endpoints muestran el formato simple `{function,value}` y los campos Matter avanzados. |
|
|
23
|
+
|
|
24
|
+
## Entrada del flow
|
|
25
|
+
|
|
26
|
+
Activa **Node Input/Output PINs** para mostrar la sección **Entrada del flow** justo debajo del selector. Para una luz, muestra ejemplos copiables de las propiedades compatibles en el nivel superior, como `msg.on`, `msg.dimming`, `msg.color_temperature` y `msg.color`. Para los demás endpoints, se construye con la estructura anunciada y muestra el Endpoint ID, todos los atributos legibles/escribibles y los comandos aceptados. Sigue disponible sin gateway KNX.
|
|
27
|
+
|
|
28
|
+
Una escritura simple usa `msg.payload = {function:"position",value:35}`. Omite `value` para leer un estado, por ejemplo `{function:"temperature"}`; la salida usa unidades comprensibles e incluye los detalles raw en `msg.matter`. Las funciones `onoff`, `level`, `position`, `open`, `close`, `stop`, consignas, ventilador y sensores solo aparecen si el endpoint las anuncia. Una cerradura acepta `{function:"lock",value:true|false}`.
|
|
29
|
+
|
|
30
|
+
Las entradas avanzadas siguen siendo válidas: `msg.clusterId` con `msg.command`/`msg.args`, o `msg.attribute` y el `msg.value` opcional. El Node ID y el Endpoint ID ya están seleccionados en el nodo.
|
|
23
31
|
|
|
24
32
|
## Modo universal
|
|
25
33
|
|
|
@@ -34,4 +42,8 @@ Ejemplos: `{nodeId:"100",endpointId:1,clusterId:6,command:"on",args:{}}` enciend
|
|
|
34
42
|
## Comportamiento
|
|
35
43
|
|
|
36
44
|
El nodo mantiene una caché local con actualizaciones Matter y escrituras KNX, responde lecturas KNX desde esa caché y puede emitir/leer valores al inicio. Solo escucha las direcciones de grupo configuradas, por lo que ignora el tráfico KNX no relacionado.
|
|
45
|
+
|
|
46
|
+
Los comandos se ejecutan en una cola ordenada independiente para cada dispositivo emparejado. Por tanto, un dispositivo sin conexión, agotado por tiempo de espera o eliminado no puede retrasar otros dispositivos Matter que utilicen la misma dirección de grupo KNX. Un nodo que aún referencia un dispositivo eliminado rechaza el comando inmediatamente y muestra **Device no longer commissioned** en rojo; selecciona un dispositivo Matter válido o elimina el nodo Controller huérfano.
|
|
47
|
+
|
|
48
|
+
El error de dispositivo no disponible queda enclavado: los siguientes comandos KNX y flow se ignoran y no pueden sobrescribir el estado rojo. El nodo se reanuda automáticamente en cuanto ese dispositivo Matter informa `connected`; abrir el editor del nodo también libera el bloqueo para permitir un reintento manual.
|
|
37
49
|
</script>
|
|
@@ -11,6 +11,29 @@
|
|
|
11
11
|
"node-input-hueLight": "Dispositivo Matter",
|
|
12
12
|
"paletteLabel": "Control Matter from KNX",
|
|
13
13
|
"no_devices": "No se encontraron dispositivos Matter. Comprueba el controlador Matter y actualiza.",
|
|
14
|
+
"input_help_label": "Entrada del flow",
|
|
15
|
+
"input_help_pin_hint": "Activa los pines de entrada/salida del nodo antes de enviar estos mensajes.",
|
|
16
|
+
"input_help_endpoint": "Endpoint seleccionado",
|
|
17
|
+
"input_help_endpoint_hint": "El nodo ya conoce el Node ID y el Endpoint ID; los mensajes simples no los necesitan.",
|
|
18
|
+
"input_help_simple_title": "Mensajes simples",
|
|
19
|
+
"input_help_simple_hint": "Estas funciones usan unidades comprensibles y se traducen al clúster, comando o atributo Matter del endpoint seleccionado.",
|
|
20
|
+
"input_help_light_hint": "Los endpoints de luz aceptan propiedades de estado directamente en msg (no dentro de msg.payload). Solo se muestran los controles compatibles con la luz seleccionada.",
|
|
21
|
+
"input_help_advanced_title": "Detalles Matter avanzados",
|
|
22
|
+
"input_help_advanced_hint": "Solo se muestran atributos y comandos anunciados. Los ejemplos de escritura usan 0 como marcador; los argumentos de los comandos pueden requerir adaptación al tipo Matter.",
|
|
23
|
+
"input_help_operation": "Operación",
|
|
24
|
+
"input_help_function": "Función",
|
|
25
|
+
"input_help_target": "Destino Matter",
|
|
26
|
+
"input_help_message": "Mensaje",
|
|
27
|
+
"input_help_read": "Lectura",
|
|
28
|
+
"input_help_write": "Escritura",
|
|
29
|
+
"input_help_command": "Comando",
|
|
30
|
+
"input_help_copy": "Copiar",
|
|
31
|
+
"input_help_copied": "Mensaje copiado",
|
|
32
|
+
"input_help_no_simple": "Este endpoint no tiene funciones de entrada simples conocidas.",
|
|
33
|
+
"input_help_no_structure": "La estructura Matter no está disponible. Actualiza la lista de dispositivos mientras el endpoint esté en línea.",
|
|
34
|
+
"input_functions": {
|
|
35
|
+
"onoff": "Encender / Apagar", "on": "Encender", "off": "Apagar", "level": "Nivel", "brightness": "Brillo", "color_temperature": "Temperatura de color", "xy_color": "Color XY", "position": "Posición de persiana", "tiltposition": "Inclinación de persiana", "open": "Abrir", "close": "Cerrar", "stop": "Detener", "setpoint": "Consigna de calefacción", "coolingsetpoint": "Consigna de refrigeración", "currenttemp": "Temperatura actual", "fanspeed": "Velocidad del ventilador", "temperature": "Temperatura", "humidity": "Humedad", "illuminance": "Iluminancia", "occupancy": "Ocupación", "contact": "Contacto", "battery": "Batería", "activepower": "Potencia activa", "importedenergy": "Energía importada", "identify": "Identificar", "lock": "Bloquear", "unlock": "Desbloquear"
|
|
36
|
+
},
|
|
14
37
|
"tabs": {
|
|
15
38
|
"switch": "Cambiar",
|
|
16
39
|
"dim": "Oscuro",
|
|
@@ -11,7 +11,11 @@ El controlador se comunica con los dispositivos a través de la **red IP** (WiFi
|
|
|
11
11
|
|
|
12
12
|
1. Haz primero el **deploy** de este nodo de configuración (el controlador debe estar en ejecución).
|
|
13
13
|
2. Vuelve a abrir el nodo e introduce el **código de emparejamiento**: el código manual de 11 dígitos (p.ej. `3497-011-2332`) o el contenido del código QR (`MT:....`).
|
|
14
|
-
3.
|
|
14
|
+
3. Para un código escrito manualmente, pulsa **EMPAREJAR**. Un QR leído con **Webcam** o **Imagen** inicia automáticamente el emparejamiento. El comisionado puede tardar hasta un minuto.
|
|
15
|
+
|
|
16
|
+
En lugar de escribir el payload QR, pulsa **Webcam** para escanearlo en directo o **Imagen** para leerlo desde una foto local. Se admiten tanto los códigos QR estándar oscuros sobre fondo claro como los invertidos blancos sobre fondo oscuro. La decodificación se realiza íntegramente en el navegador; tras leer un QR Matter válido, el editor rellena el campo del código e inicia inmediatamente el emparejamiento. Introduce antes el nombre opcional del dispositivo si lo deseas. Un código escrito manualmente sigue iniciándose solo al pulsar **EMPAREJAR**. El acceso en directo a la webcam requiere que el editor se abra mediante HTTPS o desde `localhost`; si no es posible, el editor explica la limitación y la carga de imágenes sigue disponible.
|
|
17
|
+
|
|
18
|
+
Durante el comisionado, un panel de espera bloqueante cubre el editor e impide más clics hasta que la operación finaliza correctamente o con un error.
|
|
15
19
|
|
|
16
20
|
Si el dispositivo es nuevo de fábrica y solo admite emparejamiento por Bluetooth, emparéjalo primero con la app del fabricante o con otro controlador Matter (Alexa, Google Home, Apple Home) y usa después su función **"compartir / emparejar con otro hub"** para generar un nuevo código para KNX-Ultimate. Así el dispositivo se une a varias fabrics a la vez.
|
|
17
21
|
|
|
@@ -26,4 +30,10 @@ Usa **Exportar** para descargar una copia completa de esta instancia del control
|
|
|
26
30
|
## Eliminar un dispositivo
|
|
27
31
|
|
|
28
32
|
Usa el botón de la papelera en la lista de dispositivos emparejados. El controlador intenta retirar el dispositivo correctamente; si no está accesible, se elimina igualmente de la fabric (puede ser necesario un reset de fábrica del dispositivo).
|
|
33
|
+
|
|
34
|
+
La lista contiene una fila por cada nodo almacenado actualmente en la fabric Matter de este controlador. Los Node ID son únicos dentro de esa fabric; los endpoints expuestos por un único bridge comisionado no se muestran como dispositivos separados. La columna de estado indica si cada nodo está conectado, desconectado, reconectando o esperando ser descubierto.
|
|
35
|
+
|
|
36
|
+
El controlador conserva por separado el orden de comandos de cada dispositivo emparejado. Un dispositivo lento, sin conexión o eliminado no puede bloquear los comandos destinados a otros dispositivos. Los nodos Controller que aún referencian un Node ID eliminado rechazan inmediatamente los nuevos comandos y muestran **Device no longer commissioned**.
|
|
37
|
+
|
|
38
|
+
Cuando un dispositivo deja de estar disponible, sus nodos Controller permanecen bloqueados e ignoran los comandos posteriores hasta que ese dispositivo vuelve a informar `connected`. La recuperación es automática; abrir el editor del nodo de dispositivo también libera el bloqueo para un reintento manual.
|
|
29
39
|
</script>
|
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
"pairing_code": "Código de emparejamiento",
|
|
10
10
|
"pairing_name": "Nombre del dispositivo",
|
|
11
11
|
"pair_button": "EMPAREJAR",
|
|
12
|
+
"qr_acquire": "Leer código QR",
|
|
13
|
+
"qr_scan_camera": "Webcam",
|
|
14
|
+
"qr_scan_image": "Imagen",
|
|
15
|
+
"qr_stop_camera": "Detener cámara",
|
|
16
|
+
"qr_camera_insecure": "El navegador no puede usar la webcam porque el editor de Node-RED no está abierto mediante HTTPS o localhost. Vuelve a abrirlo con HTTPS o usa Imagen.",
|
|
17
|
+
"qr_camera_unsupported": "Este navegador no puede acceder a una webcam. Usa un navegador compatible o carga una imagen.",
|
|
18
|
+
"qr_camera_permission_denied": "Se denegó el permiso para usar la webcam. Permite el acceso a la cámara en el navegador o carga una imagen.",
|
|
19
|
+
"qr_camera_failed": "No se pudo iniciar la webcam",
|
|
20
|
+
"qr_image_failed": "No se encontró ningún código QR legible en la imagen seleccionada",
|
|
21
|
+
"qr_invalid_matter": "El código QR no es un código de emparejamiento Matter (MT:…).",
|
|
22
|
+
"qr_found": "Código QR Matter leído. El emparejamiento comienza automáticamente.",
|
|
23
|
+
"qr_decoder_unavailable": "No se pudo cargar el lector de códigos QR.",
|
|
12
24
|
"devices_title": "Dispositivos emparejados",
|
|
13
25
|
"col_name": "Nombre",
|
|
14
26
|
"col_product": "Producto",
|
|
@@ -45,7 +45,7 @@ Ces options ne s'affichent que lorsqu'elles s'appliquent au type sélectionné.
|
|
|
45
45
|
|
|
46
46
|
## PIN du nœud
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Le sélecteur de PIN se trouve hors des onglets de l'éditeur. Son activation affiche juste dessous une section contextuelle **Entrée/sortie du flow**, avec des exemples copiables filtrés selon le type d'appareil :
|
|
49
49
|
|
|
50
50
|
- **Entrée** : mettez à jour l'état Matter depuis le flux, sans passer par le bus KNX : `msg.payload = { function: "onoff", value: true }` (`function` est l'une de `onoff`, `level`, `rgb`, `colortemp`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`, `fanspeed`, `smoke`, `co`, `leak`, `co2`, `rvcstate`, `rvcmode`). Utile pour exposer à Alexa & Co. des valeurs calculées dans le flux (ex. un capteur virtuel).
|
|
51
51
|
- **Sortie** : chaque commande reçue d'un contrôleur Matter est transmise au flux : `msg.topic` = nom de l'appareil, `msg.payload` = valeur, `msg.matter` = la commande brute. Un appareil sans GA de commande devient un **appareil flow uniquement**.
|
|
@@ -36,6 +36,20 @@
|
|
|
36
36
|
"mappings": "Mappages KNX",
|
|
37
37
|
"advanced": "Options avancées"
|
|
38
38
|
},
|
|
39
|
+
"flow_help": {
|
|
40
|
+
"title": "Entrée/sortie du flow",
|
|
41
|
+
"intro": "Ces exemples correspondent au type d'appareil sélectionné et sont disponibles lorsque les broches d'entrée/sortie du nœud sont activées.",
|
|
42
|
+
"input_title": "Flow → Matter (entrée du nœud)",
|
|
43
|
+
"input_hint": "Envoyez l'un de ces messages pour mettre à jour l'état Matter exposé sans écrire sur KNX.",
|
|
44
|
+
"output_title": "Matter → Flow (sortie du nœud)",
|
|
45
|
+
"output_hint": "Les commandes reçues d'un contrôleur Matter sont émises avec la valeur dans msg.payload et les détails bruts dans msg.matter.",
|
|
46
|
+
"function": "Fonction",
|
|
47
|
+
"message": "Message d'exemple",
|
|
48
|
+
"copy": "Copier",
|
|
49
|
+
"copied": "Message copié",
|
|
50
|
+
"no_input": "Ce type d'appareil ne possède aucun exemple de mise à jour d'état depuis le flow.",
|
|
51
|
+
"no_output": "Ce type d'appareil n'émet aucune commande de contrôleur ; sa sortie reste inactive."
|
|
52
|
+
},
|
|
39
53
|
"functions": {
|
|
40
54
|
"fn_onoff_cmd": "GA commande On/Off",
|
|
41
55
|
"fn_onoff_status": "GA état On/Off",
|
|
@@ -19,7 +19,15 @@ Il remplace les nœuds Matter séparés non publiés et conserve toute l'UI lumi
|
|
|
19
19
|
| Capteurs | Les endpoints capteur affichent leur GA de mesure/état uniquement si elle est supportée : température, humidité, éclairement, occupation, contact et batterie. |
|
|
20
20
|
| Read at startup | Publie la valeur Matter en cache au déploiement/démarrage ou quand le périphérique se reconnecte. |
|
|
21
21
|
| Update local state from KNX write | Met à jour le cache local Matter/KNX lorsqu'un télégramme est écrit sur une GA KNX configurée. |
|
|
22
|
-
| Node Input/Output PINs | Affiche les pins entrée/sortie Node-RED
|
|
22
|
+
| Node Input/Output PINs | Affiche les pins entrée/sortie Node-RED et la section **Entrée du flow** juste sous ce champ. Les lumières affichent leurs messages d'état pris en charge au premier niveau ; les autres endpoints affichent le format simple `{function,value}` et les champs Matter avancés. |
|
|
23
|
+
|
|
24
|
+
## Entrée du flow
|
|
25
|
+
|
|
26
|
+
Activez **Node Input/Output PINs** pour afficher la section **Entrée du flow** juste sous le sélecteur. Pour une lumière, elle propose des exemples copiables des propriétés prises en charge au premier niveau, comme `msg.on`, `msg.dimming`, `msg.color_temperature` et `msg.color`. Pour les autres endpoints, elle est construite depuis la structure annoncée et affiche l'Endpoint ID, tous les attributs lisibles/inscriptibles et toutes les commandes acceptées. Elle reste disponible sans passerelle KNX.
|
|
27
|
+
|
|
28
|
+
Une écriture simple utilise `msg.payload = {function:"position",value:35}`. Omettez `value` pour lire un état, par exemple `{function:"temperature"}` ; la sortie utilise des unités lisibles et place les détails bruts dans `msg.matter`. Les fonctions `onoff`, `level`, `position`, `open`, `close`, `stop`, consignes, ventilateur et capteurs ne sont proposées que si l'endpoint les annonce. Une serrure accepte `{function:"lock",value:true|false}`.
|
|
29
|
+
|
|
30
|
+
Les entrées avancées restent valides : `msg.clusterId` avec `msg.command`/`msg.args`, ou `msg.attribute` et éventuellement `msg.value`. Le Node ID et l'Endpoint ID sont déjà sélectionnés dans le nœud.
|
|
23
31
|
|
|
24
32
|
## Mode universel
|
|
25
33
|
|
|
@@ -34,4 +42,8 @@ Exemples : `{nodeId:"100",endpointId:1,clusterId:6,command:"on",args:{}}` allume
|
|
|
34
42
|
## Comportement
|
|
35
43
|
|
|
36
44
|
Le nœud garde un cache local depuis les mises à jour Matter et les écritures KNX, répond aux lectures KNX depuis ce cache et peut émettre/lire les valeurs au démarrage. Il n'écoute que les adresses de groupe configurées, donc le trafic KNX non lié est ignoré.
|
|
45
|
+
|
|
46
|
+
Les commandes utilisent une file ordonnée séparée pour chaque appareil appairé. Un appareil hors ligne, en délai dépassé ou supprimé ne peut donc pas retarder les autres appareils Matter qui utilisent la même adresse de groupe KNX. Un nœud qui référence encore un appareil supprimé refuse immédiatement la commande et affiche **Device no longer commissioned** en rouge ; sélectionnez un appareil Matter valide ou supprimez le nœud Controller orphelin.
|
|
47
|
+
|
|
48
|
+
Une erreur d'appareil indisponible reste verrouillée : les commandes KNX et flow suivantes sont ignorées et ne peuvent pas remplacer l'état rouge. Le nœud reprend automatiquement dès que cet appareil Matter signale `connected` ; l'ouverture de l'éditeur du nœud libère également le verrou pour permettre un nouvel essai manuel.
|
|
37
49
|
</script>
|
|
@@ -11,6 +11,29 @@
|
|
|
11
11
|
"node-input-hueLight": "Appareil Matter",
|
|
12
12
|
"paletteLabel": "Control Matter from KNX",
|
|
13
13
|
"no_devices": "Aucun appareil Matter trouvé. Vérifiez le contrôleur Matter et actualisez.",
|
|
14
|
+
"input_help_label": "Entrée du flow",
|
|
15
|
+
"input_help_pin_hint": "Activez les broches d'entrée/sortie du nœud avant d'envoyer ces messages.",
|
|
16
|
+
"input_help_endpoint": "Endpoint sélectionné",
|
|
17
|
+
"input_help_endpoint_hint": "Le nœud connaît déjà le Node ID et l'Endpoint ID ; les messages simples n'en ont pas besoin.",
|
|
18
|
+
"input_help_simple_title": "Messages simples",
|
|
19
|
+
"input_help_simple_hint": "Ces fonctions utilisent des unités lisibles et sont traduites vers le cluster, la commande ou l'attribut Matter de l'endpoint sélectionné.",
|
|
20
|
+
"input_help_light_hint": "Les endpoints de type lumière acceptent les propriétés d'état directement dans msg (pas dans msg.payload). Seules les commandes prises en charge par la lumière sélectionnée sont affichées.",
|
|
21
|
+
"input_help_advanced_title": "Détails Matter avancés",
|
|
22
|
+
"input_help_advanced_hint": "Seuls les attributs et commandes annoncés sont affichés. Les exemples d'écriture utilisent 0 comme valeur provisoire ; les arguments des commandes peuvent devoir être adaptés au type Matter.",
|
|
23
|
+
"input_help_operation": "Opération",
|
|
24
|
+
"input_help_function": "Fonction",
|
|
25
|
+
"input_help_target": "Cible Matter",
|
|
26
|
+
"input_help_message": "Message",
|
|
27
|
+
"input_help_read": "Lecture",
|
|
28
|
+
"input_help_write": "Écriture",
|
|
29
|
+
"input_help_command": "Commande",
|
|
30
|
+
"input_help_copy": "Copier",
|
|
31
|
+
"input_help_copied": "Message copié",
|
|
32
|
+
"input_help_no_simple": "Cet endpoint ne possède aucune fonction d'entrée simple connue.",
|
|
33
|
+
"input_help_no_structure": "La structure Matter est indisponible. Actualisez la liste des appareils lorsque l'endpoint est en ligne.",
|
|
34
|
+
"input_functions": {
|
|
35
|
+
"onoff": "Marche / Arrêt", "on": "Allumer", "off": "Éteindre", "level": "Niveau", "brightness": "Luminosité", "color_temperature": "Température de couleur", "xy_color": "Couleur XY", "position": "Position du volet", "tiltposition": "Inclinaison du volet", "open": "Ouvrir", "close": "Fermer", "stop": "Arrêter", "setpoint": "Consigne chauffage", "coolingsetpoint": "Consigne refroidissement", "currenttemp": "Température actuelle", "fanspeed": "Vitesse du ventilateur", "temperature": "Température", "humidity": "Humidité", "illuminance": "Éclairement", "occupancy": "Occupation", "contact": "Contact", "battery": "Batterie", "activepower": "Puissance active", "importedenergy": "Énergie importée", "identify": "Identifier", "lock": "Verrouiller", "unlock": "Déverrouiller"
|
|
36
|
+
},
|
|
14
37
|
"tabs": {
|
|
15
38
|
"switch": "Changer",
|
|
16
39
|
"dim": "Faible",
|
|
@@ -35,6 +58,14 @@
|
|
|
35
58
|
"get_current": "Prendre le courant",
|
|
36
59
|
"get_again": "Remonter",
|
|
37
60
|
"wait": "Attendez...",
|
|
61
|
+
"locate_no_bridge": "Sélectionnez d'abord un contrôleur Matter",
|
|
62
|
+
"locate_no_device": "Sélectionnez d'abord un appareil Matter",
|
|
63
|
+
"locate_success": "Commande de localisation envoyée",
|
|
64
|
+
"locate_started": "Mode de localisation démarré. Appuyez à nouveau pour l'arrêter (arrêt automatique après 10 minutes).",
|
|
65
|
+
"locate_stopped": "Mode de localisation arrêté.",
|
|
66
|
+
"locate_start_title": "Localiser l'appareil Matter sélectionné",
|
|
67
|
+
"locate_stop_title": "Arrêter le mode de localisation",
|
|
68
|
+
"locate_error": "Impossible de localiser l'appareil Matter",
|
|
38
69
|
"day_night": "Jour / nuit",
|
|
39
70
|
"invert_day_night": "Valeur de jour / nuit inversée",
|
|
40
71
|
"override_night_mode": "Forcer le mode jour",
|
|
@@ -11,7 +11,11 @@ Le contrôleur communique avec les appareils via le **réseau IP** (WiFi, Ethern
|
|
|
11
11
|
|
|
12
12
|
1. **Déployez** d'abord ce nœud de configuration (le contrôleur doit être en fonction).
|
|
13
13
|
2. Rouvrez le nœud et saisissez le **code d'appairage** : le code manuel à 11 chiffres (ex. `3497-011-2332`) ou le contenu du QR code (`MT:....`).
|
|
14
|
-
3.
|
|
14
|
+
3. Pour un code saisi manuellement, cliquez sur **APPAIRER**. Un QR lu avec **Webcam** ou **Image** démarre automatiquement l'appairage. Le commissionnement peut prendre jusqu'à une minute.
|
|
15
|
+
|
|
16
|
+
Au lieu de saisir le payload QR, cliquez sur **Webcam** pour le scanner en direct ou sur **Image** pour le lire depuis une photo locale. Les QR codes standards sombres sur fond clair et les codes inversés blancs sur fond sombre sont pris en charge. Le décodage s'effectue entièrement dans le navigateur ; après la lecture d'un QR Matter valide, l'éditeur remplit le champ du code et démarre immédiatement l'appairage. Saisissez auparavant le nom facultatif de l'appareil si nécessaire. Un code saisi manuellement ne démarre toujours qu'après un clic sur **APPAIRER**. L'accès direct à la webcam exige que l'éditeur soit ouvert via HTTPS ou depuis `localhost` ; sinon l'éditeur explique cette limitation et le chargement d'une image reste disponible.
|
|
17
|
+
|
|
18
|
+
Pendant le commissionnement, un panneau d'attente bloquant recouvre l'éditeur et empêche tout autre clic jusqu'à la réussite ou l'échec de l'opération.
|
|
15
19
|
|
|
16
20
|
Si l'appareil est neuf et ne prend en charge que l'appairage Bluetooth, appairez-le d'abord avec l'app du fabricant ou un autre contrôleur Matter (Alexa, Google Home, Apple Home), puis utilisez sa fonction **« partager / appairer avec un autre hub »** pour générer un nouveau code pour KNX-Ultimate. L'appareil rejoint ainsi plusieurs fabrics à la fois.
|
|
17
21
|
|
|
@@ -26,4 +30,10 @@ Utilisez **Exporter** pour télécharger une sauvegarde complète de cette insta
|
|
|
26
30
|
## Supprimer un appareil
|
|
27
31
|
|
|
28
32
|
Utilisez le bouton corbeille dans la liste des appareils appairés. Le contrôleur essaie de retirer l'appareil proprement ; s'il est injoignable, il est quand même supprimé de la fabric (une réinitialisation d'usine de l'appareil peut alors être nécessaire).
|
|
33
|
+
|
|
34
|
+
La liste contient une ligne pour chaque nœud actuellement enregistré dans la fabric Matter de ce contrôleur. Les Node ID sont uniques au sein de cette fabric ; les endpoints exposés par un même bridge commissionné ne sont pas affichés comme des appareils distincts. La colonne d'état indique si chaque nœud est connecté, déconnecté, en cours de reconnexion ou en attente de découverte.
|
|
35
|
+
|
|
36
|
+
Le contrôleur conserve séparément l'ordre des commandes de chaque appareil appairé. Un appareil lent, hors ligne ou supprimé ne peut pas bloquer les commandes destinées aux autres appareils. Les nœuds Controller qui référencent encore un Node ID supprimé refusent immédiatement les nouvelles commandes et affichent **Device no longer commissioned**.
|
|
37
|
+
|
|
38
|
+
Lorsqu'un appareil devient indisponible, ses nœuds Controller restent bloqués et ignorent les commandes suivantes jusqu'à ce que cet appareil signale de nouveau `connected`. La reprise est automatique ; l'ouverture de l'éditeur du nœud appareil libère aussi le blocage pour un nouvel essai manuel.
|
|
29
39
|
</script>
|
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
"pairing_code": "Code d'appairage",
|
|
10
10
|
"pairing_name": "Nom de l'appareil",
|
|
11
11
|
"pair_button": "APPAIRER",
|
|
12
|
+
"qr_acquire": "Lire le QR code",
|
|
13
|
+
"qr_scan_camera": "Webcam",
|
|
14
|
+
"qr_scan_image": "Image",
|
|
15
|
+
"qr_stop_camera": "Arrêter la caméra",
|
|
16
|
+
"qr_camera_insecure": "Le navigateur ne peut pas utiliser la webcam car l'éditeur Node-RED n'est pas ouvert via HTTPS ou localhost. Rouvrez-le en HTTPS ou utilisez Image.",
|
|
17
|
+
"qr_camera_unsupported": "Ce navigateur ne peut pas accéder à une webcam. Utilisez un navigateur compatible ou chargez une image.",
|
|
18
|
+
"qr_camera_permission_denied": "L'autorisation d'utiliser la webcam a été refusée. Autorisez l'accès à la caméra dans le navigateur ou chargez une image.",
|
|
19
|
+
"qr_camera_failed": "Impossible de démarrer la webcam",
|
|
20
|
+
"qr_image_failed": "Aucun QR code lisible n'a été trouvé dans l'image sélectionnée",
|
|
21
|
+
"qr_invalid_matter": "Le QR code n'est pas un code d'appairage Matter (MT:…).",
|
|
22
|
+
"qr_found": "QR code Matter lu. L'appairage démarre automatiquement.",
|
|
23
|
+
"qr_decoder_unavailable": "Impossible de charger le lecteur de QR code.",
|
|
12
24
|
"devices_title": "Appareils appairés",
|
|
13
25
|
"col_name": "Nom",
|
|
14
26
|
"col_product": "Produit",
|
|
@@ -45,7 +45,7 @@ Queste opzioni sono nascoste finché non servono al tipo selezionato. I disposit
|
|
|
45
45
|
|
|
46
46
|
## PIN del nodo
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Il selettore dei PIN si trova fuori dalle TAB dell'editor. Abilitandolo compare subito sotto una sezione contestuale **Input/output del flow**, con esempi copiabili filtrati per il tipo di dispositivo selezionato:
|
|
49
49
|
|
|
50
50
|
- **Input**: aggiorna lo stato Matter dal flow, senza passare dal bus KNX: `msg.payload = { function: "onoff", value: true }` (`function` è una tra `onoff`, `level`, `rgb`, `colortemp`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`, `fanspeed`, `smoke`, `co`, `leak`, `co2`, `rvcstate`, `rvcmode`). Utile per esporre ad Alexa & Co. valori calcolati nel flow (es. un sensore virtuale).
|
|
51
51
|
- **Output**: ogni comando ricevuto da un controller Matter viene inoltrato al flow: `msg.topic` = nome del dispositivo, `msg.payload` = valore, `msg.matter` = il comando grezzo. Un dispositivo senza GA di comando diventa un **dispositivo solo-flow**.
|
|
@@ -36,6 +36,20 @@
|
|
|
36
36
|
"mappings": "Mappature KNX",
|
|
37
37
|
"advanced": "Opzioni avanzate"
|
|
38
38
|
},
|
|
39
|
+
"flow_help": {
|
|
40
|
+
"title": "Input/output del flow",
|
|
41
|
+
"intro": "Questi esempi corrispondono al tipo di dispositivo selezionato e sono disponibili quando i PIN input/output del nodo sono abilitati.",
|
|
42
|
+
"input_title": "Flow → Matter (input del nodo)",
|
|
43
|
+
"input_hint": "Invia uno di questi messaggi per aggiornare lo stato Matter esposto senza scrivere sul bus KNX.",
|
|
44
|
+
"output_title": "Matter → Flow (output del nodo)",
|
|
45
|
+
"output_hint": "I comandi ricevuti da un controller Matter vengono emessi con il valore in msg.payload e i dettagli raw in msg.matter.",
|
|
46
|
+
"function": "Funzione",
|
|
47
|
+
"message": "Messaggio di esempio",
|
|
48
|
+
"copy": "Copia",
|
|
49
|
+
"copied": "Messaggio copiato",
|
|
50
|
+
"no_input": "Questo tipo di dispositivo non ha esempi di aggiornamento stato dal flow.",
|
|
51
|
+
"no_output": "Questo tipo di dispositivo non emette comandi dal controller; il suo output rimane inattivo."
|
|
52
|
+
},
|
|
39
53
|
"functions": {
|
|
40
54
|
"fn_onoff_cmd": "GA comando On/Off",
|
|
41
55
|
"fn_onoff_status": "GA stato On/Off",
|
|
@@ -19,7 +19,15 @@ Sostituisce i nodi Matter separati non pubblicati e mantiene tutta la UI luce qu
|
|
|
19
19
|
| Sensori | Gli endpoint sensore mostrano il relativo GA di misura/stato solo quando supportato: temperatura, umidità, illuminamento, presenza, contatto e batteria. |
|
|
20
20
|
| Read at startup | Pubblica il valore Matter in cache al deploy/avvio o quando il dispositivo si riconnette. |
|
|
21
21
|
| Update local state from KNX write | Aggiorna la cache locale Matter/KNX quando arriva una scrittura su un GA KNX configurato. |
|
|
22
|
-
| Node Input/Output PINs | Mostra i pin input/output Node-RED.
|
|
22
|
+
| Node Input/Output PINs | Mostra i pin input/output Node-RED e la sezione **Input dal flow** subito sotto questo campo. Per le luci sono mostrati i messaggi di stato luce supportati al primo livello; per gli endpoint non luce sono mostrati il formato semplice `{function,value}` e i campi Matter avanzati. La selezione viene mantenuta alla riapertura dell'editor. |
|
|
23
|
+
|
|
24
|
+
## Input dal flow
|
|
25
|
+
|
|
26
|
+
Abilita **PIN di Input/Output del nodo** per mostrare la sezione **Input dal flow** subito sotto il selettore. Per le luci contiene esempi copiabili delle proprietà supportate al primo livello, come `msg.on`, `msg.dimming`, `msg.color_temperature` e `msg.color`. Per gli endpoint non luce viene costruita dalla struttura annunciata e mostra l'Endpoint ID selezionato, tutti gli attributi leggibili/scrivibili e tutti i comandi accettati. Rimane disponibile anche quando il nodo viene usato soltanto dal flow senza gateway KNX.
|
|
27
|
+
|
|
28
|
+
Le scritture semplici usano `msg.payload = {function:"position",value:35}`. Ometti `value` per leggere uno stato supportato, ad esempio `{function:"temperature"}`; l'output usa unità comprensibili e include i dettagli raw in `msg.matter`. Le funzioni comprendono `onoff`, `level`, `position`, `tiltposition`, `open`, `close`, `stop`, `setpoint`, `coolingsetpoint`, `currenttemp`, `fanspeed`, letture sensore e `identify`, ma soltanto se annunciate dall'endpoint. La serratura accetta `{function:"lock",value:true|false}`.
|
|
29
|
+
|
|
30
|
+
Gli input avanzati esistenti restano validi: usa `msg.clusterId` al primo livello con `msg.command`/`msg.args`, oppure `msg.attribute` con l'eventuale `msg.value`. Node ID ed Endpoint ID sono già selezionati dal nodo; `msg.endpointId` serve solo come override opzionale.
|
|
23
31
|
|
|
24
32
|
## Modalità Universale
|
|
25
33
|
|
|
@@ -34,4 +42,8 @@ Esempi: `{nodeId:"100",endpointId:1,clusterId:6,command:"on",args:{}}` accende;
|
|
|
34
42
|
## Comportamento
|
|
35
43
|
|
|
36
44
|
Il nodo mantiene una cache locale da aggiornamenti Matter e scritture KNX, risponde alle letture KNX dalla cache e può emettere/leggere i valori all'avvio. Ascolta solo gli indirizzi di gruppo configurati, quindi ignora il traffico KNX non pertinente.
|
|
45
|
+
|
|
46
|
+
I comandi vengono eseguiti in una coda ordinata separata per ciascun dispositivo associato. Un dispositivo offline, in timeout o rimosso non può quindi ritardare gli altri dispositivi Matter che usano lo stesso indirizzo di gruppo KNX. Un nodo che punta ancora a un dispositivo rimosso rifiuta subito il comando e mostra in rosso **Device no longer commissioned**; seleziona un dispositivo Matter valido oppure elimina il nodo Controller rimasto orfano.
|
|
47
|
+
|
|
48
|
+
L'errore di dispositivo non disponibile rimane agganciato: i successivi comandi KNX e flow vengono ignorati e non possono sovrascrivere lo stato rosso. Il nodo riprende automaticamente non appena quel dispositivo Matter segnala `connected`; anche l'apertura dell'editor del nodo azzera il blocco per consentire un tentativo manuale.
|
|
37
49
|
</script>
|
|
@@ -11,6 +11,29 @@
|
|
|
11
11
|
"node-input-hueLight": "Dispositivo Matter",
|
|
12
12
|
"paletteLabel": "Control Matter from KNX",
|
|
13
13
|
"no_devices": "Nessun dispositivo Matter trovato. Controlla il controller Matter e premi refresh.",
|
|
14
|
+
"input_help_label": "Input dal flow",
|
|
15
|
+
"input_help_pin_hint": "Abilita i PIN di input/output del nodo prima di inviare questi messaggi.",
|
|
16
|
+
"input_help_endpoint": "Endpoint selezionato",
|
|
17
|
+
"input_help_endpoint_hint": "Il nodo conosce già Node ID ed Endpoint ID, quindi non servono nei messaggi semplici.",
|
|
18
|
+
"input_help_simple_title": "Messaggi semplici",
|
|
19
|
+
"input_help_simple_hint": "Queste funzioni usano unità comprensibili e vengono tradotte nel cluster, comando o attributo Matter esposto dall'endpoint selezionato.",
|
|
20
|
+
"input_help_light_hint": "Gli endpoint luce accettano le proprietà dello stato luce direttamente in msg (non dentro msg.payload). Sono mostrati solo i controlli supportati dalla luce selezionata.",
|
|
21
|
+
"input_help_advanced_title": "Dettagli Matter avanzati",
|
|
22
|
+
"input_help_advanced_hint": "Sono elencati soltanto attributi e comandi annunciati. Gli esempi di scrittura usano 0 come segnaposto; gli argomenti dei comandi possono richiedere un adattamento al tipo Matter.",
|
|
23
|
+
"input_help_operation": "Operazione",
|
|
24
|
+
"input_help_function": "Funzione",
|
|
25
|
+
"input_help_target": "Target Matter",
|
|
26
|
+
"input_help_message": "Messaggio",
|
|
27
|
+
"input_help_read": "Lettura",
|
|
28
|
+
"input_help_write": "Scrittura",
|
|
29
|
+
"input_help_command": "Comando",
|
|
30
|
+
"input_help_copy": "Copia",
|
|
31
|
+
"input_help_copied": "Messaggio copiato",
|
|
32
|
+
"input_help_no_simple": "Questo endpoint non espone funzioni semplici conosciute.",
|
|
33
|
+
"input_help_no_structure": "La struttura Matter non è disponibile. Aggiorna la lista dei dispositivi mentre l'endpoint è online.",
|
|
34
|
+
"input_functions": {
|
|
35
|
+
"onoff": "On / Off", "on": "Accendi", "off": "Spegni", "level": "Livello", "brightness": "Luminosità", "color_temperature": "Temperatura colore", "xy_color": "Colore XY", "position": "Posizione tapparella", "tiltposition": "Inclinazione tapparella", "open": "Apri", "close": "Chiudi", "stop": "Stop", "setpoint": "Setpoint riscaldamento", "coolingsetpoint": "Setpoint raffrescamento", "currenttemp": "Temperatura corrente", "fanspeed": "Velocità ventilatore", "temperature": "Temperatura", "humidity": "Umidità", "illuminance": "Illuminamento", "occupancy": "Presenza", "contact": "Contatto", "battery": "Batteria", "activepower": "Potenza attiva", "importedenergy": "Energia importata", "identify": "Identifica", "lock": "Blocca", "unlock": "Sblocca"
|
|
36
|
+
},
|
|
14
37
|
"tabs": {
|
|
15
38
|
"switch": "On/Off",
|
|
16
39
|
"dim": "Dimmer",
|