node-red-contrib-knx-ultimate 6.0.12 → 6.1.0
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 +6 -2
- package/nodes/knxUltimateMatterControllerDevice.html +273 -13
- package/nodes/knxUltimateMatterControllerDevice.js +37 -0
- package/nodes/locales/de/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/de/knxUltimateMatterControllerDevice.json +22 -0
- package/nodes/locales/de/matter-config.html +11 -1
- package/nodes/locales/de/matter-config.json +12 -0
- package/nodes/locales/en/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/en/knxUltimateMatterControllerDevice.json +22 -0
- package/nodes/locales/en/matter-config.html +11 -1
- package/nodes/locales/en/matter-config.json +12 -0
- package/nodes/locales/es/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/es/knxUltimateMatterControllerDevice.json +22 -0
- package/nodes/locales/es/matter-config.html +11 -1
- package/nodes/locales/es/matter-config.json +12 -0
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.json +30 -0
- package/nodes/locales/fr/matter-config.html +11 -1
- package/nodes/locales/fr/matter-config.json +12 -0
- package/nodes/locales/it/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/it/knxUltimateMatterControllerDevice.json +22 -0
- package/nodes/locales/it/matter-config.html +11 -1
- package/nodes/locales/it/matter-config.json +12 -0
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.html +13 -1
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.json +30 -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
|
@@ -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",
|
|
@@ -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. Non-light endpoints accept the simple `{function,value}` contract below as well as the advanced Matter fields; output emits state updates. The selection is preserved when the editor is reopened. |
|
|
23
|
+
|
|
24
|
+
## Flow input
|
|
25
|
+
|
|
26
|
+
For a selected non-light endpoint, open the **Flow input** tab in the editor. The tab is built from the endpoint's advertised structure and provides copyable examples, 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,28 @@
|
|
|
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_advanced_title": "Advanced Matter details",
|
|
21
|
+
"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.",
|
|
22
|
+
"input_help_operation": "Operation",
|
|
23
|
+
"input_help_function": "Function",
|
|
24
|
+
"input_help_target": "Matter target",
|
|
25
|
+
"input_help_message": "Message",
|
|
26
|
+
"input_help_read": "Read",
|
|
27
|
+
"input_help_write": "Write",
|
|
28
|
+
"input_help_command": "Command",
|
|
29
|
+
"input_help_copy": "Copy",
|
|
30
|
+
"input_help_copied": "Message copied",
|
|
31
|
+
"input_help_no_simple": "This endpoint has no known simple input functions.",
|
|
32
|
+
"input_help_no_structure": "The Matter structure is unavailable. Refresh the device list while the endpoint is online.",
|
|
33
|
+
"input_functions": {
|
|
34
|
+
"onoff": "On / Off", "level": "Level", "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"
|
|
35
|
+
},
|
|
14
36
|
"tabs": {
|
|
15
37
|
"switch": "Switch",
|
|
16
38
|
"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",
|
|
@@ -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. Los endpoints que no son luces aceptan el formato simple `{function,value}` y los campos Matter avanzados; la salida emite estados. |
|
|
23
|
+
|
|
24
|
+
## Entrada del flow
|
|
25
|
+
|
|
26
|
+
Para un endpoint que no sea una luz, abre la pestaña **Entrada del flow**. La pestaña se construye con la estructura anunciada y muestra ejemplos copiables, el Endpoint ID, todos los atributos legibles/escribibles y los comandos aceptados. Sigue disponible cuando el nodo se usa solo desde el flow, 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,28 @@
|
|
|
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_advanced_title": "Detalles Matter avanzados",
|
|
21
|
+
"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.",
|
|
22
|
+
"input_help_operation": "Operación",
|
|
23
|
+
"input_help_function": "Función",
|
|
24
|
+
"input_help_target": "Destino Matter",
|
|
25
|
+
"input_help_message": "Mensaje",
|
|
26
|
+
"input_help_read": "Lectura",
|
|
27
|
+
"input_help_write": "Escritura",
|
|
28
|
+
"input_help_command": "Comando",
|
|
29
|
+
"input_help_copy": "Copiar",
|
|
30
|
+
"input_help_copied": "Mensaje copiado",
|
|
31
|
+
"input_help_no_simple": "Este endpoint no tiene funciones de entrada simples conocidas.",
|
|
32
|
+
"input_help_no_structure": "La estructura Matter no está disponible. Actualiza la lista de dispositivos mientras el endpoint esté en línea.",
|
|
33
|
+
"input_functions": {
|
|
34
|
+
"onoff": "Encender / Apagar", "level": "Nivel", "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"
|
|
35
|
+
},
|
|
14
36
|
"tabs": {
|
|
15
37
|
"switch": "Cambiar",
|
|
16
38
|
"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",
|
|
@@ -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. Les endpoints autres que lumière acceptent le format simple `{function,value}` et les champs Matter avancés ; la sortie émet les états. |
|
|
23
|
+
|
|
24
|
+
## Entrée du flow
|
|
25
|
+
|
|
26
|
+
Pour un endpoint autre que lumière, ouvrez l'onglet **Entrée du flow**. L'onglet est construit depuis la structure annoncée et affiche des exemples copiables, l'Endpoint ID, tous les attributs lisibles/inscriptibles et toutes les commandes acceptées. Il reste disponible lorsque le nœud est utilisé uniquement par le flow, 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,28 @@
|
|
|
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_advanced_title": "Détails Matter avancés",
|
|
21
|
+
"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.",
|
|
22
|
+
"input_help_operation": "Opération",
|
|
23
|
+
"input_help_function": "Fonction",
|
|
24
|
+
"input_help_target": "Cible Matter",
|
|
25
|
+
"input_help_message": "Message",
|
|
26
|
+
"input_help_read": "Lecture",
|
|
27
|
+
"input_help_write": "Écriture",
|
|
28
|
+
"input_help_command": "Commande",
|
|
29
|
+
"input_help_copy": "Copier",
|
|
30
|
+
"input_help_copied": "Message copié",
|
|
31
|
+
"input_help_no_simple": "Cet endpoint ne possède aucune fonction d'entrée simple connue.",
|
|
32
|
+
"input_help_no_structure": "La structure Matter est indisponible. Actualisez la liste des appareils lorsque l'endpoint est en ligne.",
|
|
33
|
+
"input_functions": {
|
|
34
|
+
"onoff": "Marche / Arrêt", "level": "Niveau", "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"
|
|
35
|
+
},
|
|
14
36
|
"tabs": {
|
|
15
37
|
"switch": "Changer",
|
|
16
38
|
"dim": "Faible",
|
|
@@ -35,6 +57,14 @@
|
|
|
35
57
|
"get_current": "Prendre le courant",
|
|
36
58
|
"get_again": "Remonter",
|
|
37
59
|
"wait": "Attendez...",
|
|
60
|
+
"locate_no_bridge": "Sélectionnez d'abord un contrôleur Matter",
|
|
61
|
+
"locate_no_device": "Sélectionnez d'abord un appareil Matter",
|
|
62
|
+
"locate_success": "Commande de localisation envoyée",
|
|
63
|
+
"locate_started": "Mode de localisation démarré. Appuyez à nouveau pour l'arrêter (arrêt automatique après 10 minutes).",
|
|
64
|
+
"locate_stopped": "Mode de localisation arrêté.",
|
|
65
|
+
"locate_start_title": "Localiser l'appareil Matter sélectionné",
|
|
66
|
+
"locate_stop_title": "Arrêter le mode de localisation",
|
|
67
|
+
"locate_error": "Impossible de localiser l'appareil Matter",
|
|
38
68
|
"day_night": "Jour / nuit",
|
|
39
69
|
"invert_day_night": "Valeur de jour / nuit inversée",
|
|
40
70
|
"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",
|
|
@@ -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. Gli endpoint non luce accettano il formato semplice `{function,value}` descritto sotto e i campi Matter avanzati; l'output emette gli aggiornamenti di stato. La selezione viene mantenuta alla riapertura dell'editor. |
|
|
23
|
+
|
|
24
|
+
## Input dal flow
|
|
25
|
+
|
|
26
|
+
Per un endpoint non luce selezionato, apri la TAB **Input dal flow** nell'editor. La scheda viene costruita dalla struttura annunciata dall'endpoint e mostra esempi copiabili, 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,28 @@
|
|
|
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_advanced_title": "Dettagli Matter avanzati",
|
|
21
|
+
"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.",
|
|
22
|
+
"input_help_operation": "Operazione",
|
|
23
|
+
"input_help_function": "Funzione",
|
|
24
|
+
"input_help_target": "Target Matter",
|
|
25
|
+
"input_help_message": "Messaggio",
|
|
26
|
+
"input_help_read": "Lettura",
|
|
27
|
+
"input_help_write": "Scrittura",
|
|
28
|
+
"input_help_command": "Comando",
|
|
29
|
+
"input_help_copy": "Copia",
|
|
30
|
+
"input_help_copied": "Messaggio copiato",
|
|
31
|
+
"input_help_no_simple": "Questo endpoint non espone funzioni semplici conosciute.",
|
|
32
|
+
"input_help_no_structure": "La struttura Matter non è disponibile. Aggiorna la lista dei dispositivi mentre l'endpoint è online.",
|
|
33
|
+
"input_functions": {
|
|
34
|
+
"onoff": "On / Off", "level": "Livello", "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"
|
|
35
|
+
},
|
|
14
36
|
"tabs": {
|
|
15
37
|
"switch": "On/Off",
|
|
16
38
|
"dim": "Dimmer",
|
|
@@ -11,7 +11,11 @@ Il controller comunica con i dispositivi tramite la **rete IP** (WiFi, Ethernet,
|
|
|
11
11
|
|
|
12
12
|
1. Fai prima il **deploy** di questo nodo di configurazione (il controller deve essere in esecuzione).
|
|
13
13
|
2. Riapri il nodo e inserisci il **codice di abbinamento**: il codice manuale a 11 cifre (es. `3497-011-2332`) oppure il contenuto del QR code (`MT:....`).
|
|
14
|
-
3.
|
|
14
|
+
3. Per un codice inserito manualmente, clicca **ASSOCIA**. Una lettura con **Webcam** o **Immagine** avvia automaticamente l'associazione. Il commissioning può richiedere fino a un minuto.
|
|
15
|
+
|
|
16
|
+
In alternativa alla digitazione del payload QR, clicca **Webcam** per leggerlo in tempo reale oppure **Immagine** per ricavarlo da una foto locale. Sono supportati sia i QR standard scuri su fondo chiaro sia quelli invertiti bianchi su fondo scuro. La decodifica avviene interamente nel browser; dopo la lettura di un QR Matter valido, l'editor compila il campo del codice e avvia immediatamente l'associazione. Se desideri assegnare un nome, inseriscilo prima della scansione. Un codice digitato manualmente parte ancora soltanto quando clicchi **ASSOCIA**. L'accesso live alla webcam richiede che l'editor sia aperto tramite HTTPS o da `localhost`; quando non è possibile, l'editor spiega il limite e il caricamento dell'immagine rimane disponibile.
|
|
17
|
+
|
|
18
|
+
Durante il commissioning, un pannello di attesa bloccante copre l'editor e impedisce ulteriori clic finché l'operazione non termina con successo o con un errore.
|
|
15
19
|
|
|
16
20
|
Se il dispositivo è nuovo di fabbrica e supporta solo il commissioning Bluetooth, associalo prima con l'app del produttore o con un altro controller Matter (Alexa, Google Home, Apple Home), poi usa la funzione **"condividi / abbina con altro hub"** di quel controller per generare un nuovo codice di abbinamento per KNX-Ultimate. In questo modo il dispositivo entra in più fabric contemporaneamente.
|
|
17
21
|
|
|
@@ -26,4 +30,10 @@ Usa **Esporta** per scaricare un backup completo di questa istanza controller. I
|
|
|
26
30
|
## Rimuovere un dispositivo
|
|
27
31
|
|
|
28
32
|
Usa il pulsante cestino nella lista dei dispositivi associati. Il controller prova a decommissionare correttamente il dispositivo; se non è raggiungibile, viene comunque rimosso dalla fabric (potrebbe poi servire un reset di fabbrica del dispositivo).
|
|
33
|
+
|
|
34
|
+
La lista contiene una riga per ogni nodo attualmente memorizzato nella fabric Matter di questo controller. I Node ID sono univoci all'interno della fabric; gli endpoint esposti da un unico bridge commissionato non sono elencati come dispositivi separati. La colonna dello stato indica se ogni nodo è connesso, disconnesso, in riconnessione o in attesa di rilevamento.
|
|
35
|
+
|
|
36
|
+
Il controller mantiene separato per ogni dispositivo associato l'ordine dei comandi. Un dispositivo lento, offline o rimosso non può bloccare i comandi destinati agli altri dispositivi. I nodi Controller che puntano ancora a un Node ID rimosso rifiutano subito i nuovi comandi e mostrano **Device no longer commissioned**.
|
|
37
|
+
|
|
38
|
+
Quando un dispositivo diventa non disponibile, i suoi nodi Controller rimangono bloccati e ignorano gli altri comandi finché quel dispositivo non segnala nuovamente `connected`. Il ripristino è automatico; anche l'apertura dell'editor del nodo dispositivo azzera il blocco per un tentativo manuale.
|
|
29
39
|
</script>
|
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
"pairing_code": "Codice abbinamento",
|
|
10
10
|
"pairing_name": "Nome dispositivo",
|
|
11
11
|
"pair_button": "ASSOCIA",
|
|
12
|
+
"qr_acquire": "Leggi QR code",
|
|
13
|
+
"qr_scan_camera": "Webcam",
|
|
14
|
+
"qr_scan_image": "Immagine",
|
|
15
|
+
"qr_stop_camera": "Ferma webcam",
|
|
16
|
+
"qr_camera_insecure": "Il browser non può usare la webcam perché l'editor Node-RED non è aperto tramite HTTPS o localhost. Riaprilo in HTTPS oppure usa Immagine.",
|
|
17
|
+
"qr_camera_unsupported": "Questo browser non può accedere alla webcam. Usa un browser supportato oppure carica un'immagine.",
|
|
18
|
+
"qr_camera_permission_denied": "Il permesso per la webcam è stato negato. Consenti l'accesso alla fotocamera nel browser oppure carica un'immagine.",
|
|
19
|
+
"qr_camera_failed": "Impossibile avviare la webcam",
|
|
20
|
+
"qr_image_failed": "Nell'immagine selezionata non è stato trovato un QR code leggibile",
|
|
21
|
+
"qr_invalid_matter": "Il QR code non è un codice di abbinamento Matter (MT:…).",
|
|
22
|
+
"qr_found": "QR code Matter letto. L'associazione parte automaticamente.",
|
|
23
|
+
"qr_decoder_unavailable": "Impossibile caricare il lettore QR.",
|
|
12
24
|
"devices_title": "Dispositivi associati",
|
|
13
25
|
"col_name": "Nome",
|
|
14
26
|
"col_product": "Prodotto",
|
|
@@ -19,7 +19,15 @@
|
|
|
19
19
|
| 传感器 | 传感器 endpoint 只在支持时显示对应测量/状态 GA:温度、湿度、照度、占用、接触和电池。 |
|
|
20
20
|
| Read at startup | 在部署/启动或设备重新连接时发布缓存的 Matter 值。 |
|
|
21
21
|
| Update local state from KNX write | 当配置的 KNX GA 收到写入 telegram 时,更新本地 Matter/KNX 缓存。 |
|
|
22
|
-
| Node Input/Output PINs | 显示 Node-RED
|
|
22
|
+
| Node Input/Output PINs | 显示 Node-RED 输入/输出端口。非灯光端点接受简单的 `{function,value}` 格式和高级 Matter 字段;输出发送状态更新。 |
|
|
23
|
+
|
|
24
|
+
## 流程输入
|
|
25
|
+
|
|
26
|
+
选择非灯光端点后,打开 **流程输入** 选项卡。该选项卡根据端点公布的结构生成,并显示可复制示例、Endpoint ID、所有可读/可写属性以及接受的命令。节点仅用于 flow 且未选择 KNX 网关时,该选项卡仍然可用。
|
|
27
|
+
|
|
28
|
+
简单写入使用 `msg.payload = {function:"position",value:35}`。省略 `value` 即可读取支持的状态,例如 `{function:"temperature"}`;输出使用易懂单位,并在 `msg.matter` 中保留原始详情。`onoff`、`level`、`position`、`open`、`close`、`stop`、设定点、风扇和传感器功能仅在端点公布支持时出现。门锁接受 `{function:"lock",value:true|false}`。
|
|
29
|
+
|
|
30
|
+
原有高级输入继续有效:使用 `msg.clusterId` 配合 `msg.command`/`msg.args`,或使用 `msg.attribute` 和可选的 `msg.value`。Node ID 和 Endpoint ID 已由节点选择。
|
|
23
31
|
|
|
24
32
|
## 通用模式
|
|
25
33
|
|
|
@@ -34,4 +42,8 @@
|
|
|
34
42
|
## 行为
|
|
35
43
|
|
|
36
44
|
节点根据 Matter 更新和 KNX 写入维护本地缓存,用该缓存响应 KNX 读取请求,并可在启动时读取/发送值。节点只监听已配置的组地址,因此会忽略无关的 KNX 流量。
|
|
45
|
+
|
|
46
|
+
每个已配对设备使用独立且有序的命令队列。因此,离线、超时或已移除的设备不会延迟使用同一 KNX 组地址的其他 Matter 设备。仍引用已移除设备的节点会立即拒绝命令,并以红色显示 **Device no longer commissioned**;请选择有效的 Matter 设备,或删除遗留的 Controller 节点。
|
|
47
|
+
|
|
48
|
+
设备不可用错误会保持锁定:后续 KNX 和 flow 命令将被忽略,且无法覆盖红色状态。一旦该 Matter 设备报告 `connected`,节点会自动恢复;打开节点编辑器也会解除锁定,以便手动重试。
|
|
37
49
|
</script>
|
|
@@ -11,6 +11,28 @@
|
|
|
11
11
|
"node-input-hueLight": "Matter 设备",
|
|
12
12
|
"paletteLabel": "从 KNX 控制 Matter",
|
|
13
13
|
"no_devices": "未找到 Matter 设备。请检查 Matter 控制器并点击刷新。",
|
|
14
|
+
"input_help_label": "流程输入",
|
|
15
|
+
"input_help_pin_hint": "发送这些消息前,请启用节点输入/输出端口。",
|
|
16
|
+
"input_help_endpoint": "所选端点",
|
|
17
|
+
"input_help_endpoint_hint": "节点已知 Node ID 和 Endpoint ID,因此简单消息无需提供它们。",
|
|
18
|
+
"input_help_simple_title": "简单消息",
|
|
19
|
+
"input_help_simple_hint": "这些功能使用易懂的单位,并自动转换为所选端点公开的 Matter 集群、命令或属性。",
|
|
20
|
+
"input_help_advanced_title": "高级 Matter 详情",
|
|
21
|
+
"input_help_advanced_hint": "仅列出设备公布的属性和命令。写入示例中的 0 是占位值;命令参数可能需要按 Matter 数据类型调整。",
|
|
22
|
+
"input_help_operation": "操作",
|
|
23
|
+
"input_help_function": "功能",
|
|
24
|
+
"input_help_target": "Matter 目标",
|
|
25
|
+
"input_help_message": "消息",
|
|
26
|
+
"input_help_read": "读取",
|
|
27
|
+
"input_help_write": "写入",
|
|
28
|
+
"input_help_command": "命令",
|
|
29
|
+
"input_help_copy": "复制",
|
|
30
|
+
"input_help_copied": "消息已复制",
|
|
31
|
+
"input_help_no_simple": "此端点没有已知的简单输入功能。",
|
|
32
|
+
"input_help_no_structure": "Matter 结构不可用。请在端点在线时刷新设备列表。",
|
|
33
|
+
"input_functions": {
|
|
34
|
+
"onoff": "开 / 关", "level": "亮度", "position": "窗帘位置", "tiltposition": "百叶角度", "open": "打开", "close": "关闭", "stop": "停止", "setpoint": "制热设定点", "coolingsetpoint": "制冷设定点", "currenttemp": "当前温度", "fanspeed": "风扇速度", "temperature": "温度", "humidity": "湿度", "illuminance": "照度", "occupancy": "占用", "contact": "触点", "battery": "电池", "activepower": "有功功率", "importedenergy": "输入电能", "identify": "识别", "lock": "上锁", "unlock": "解锁"
|
|
35
|
+
},
|
|
14
36
|
"tabs": {
|
|
15
37
|
"switch": "开关",
|
|
16
38
|
"dim": "调光",
|
|
@@ -35,6 +57,14 @@
|
|
|
35
57
|
"get_current": "获取当前",
|
|
36
58
|
"get_again": "再次获取",
|
|
37
59
|
"wait": "请稍候...",
|
|
60
|
+
"locate_no_bridge": "请先选择 Matter 控制器",
|
|
61
|
+
"locate_no_device": "请先选择 Matter 设备",
|
|
62
|
+
"locate_success": "已发送定位命令",
|
|
63
|
+
"locate_started": "定位模式已启动。再次按下可停止(10 分钟后自动停止)。",
|
|
64
|
+
"locate_stopped": "定位模式已停止。",
|
|
65
|
+
"locate_start_title": "定位所选 Matter 设备",
|
|
66
|
+
"locate_stop_title": "停止定位模式",
|
|
67
|
+
"locate_error": "无法定位 Matter 设备",
|
|
38
68
|
"day_night": "昼/夜",
|
|
39
69
|
"invert_day_night": "反转昼/夜值",
|
|
40
70
|
"override_night_mode": "强制日间模式",
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
|
|
12
12
|
1. 先**部署**此配置节点(控制器必须已运行)。
|
|
13
13
|
2. 重新打开节点并输入**配对码**:11 位手动配对码(例如 `3497-011-2332`)或二维码内容(`MT:....`)。
|
|
14
|
-
3.
|
|
14
|
+
3. 对于手动输入的配对码,请点击**配对**。通过**摄像头**或**图片**读取二维码后会自动开始配对。调试过程最多可能需要一分钟。
|
|
15
|
+
|
|
16
|
+
无需手动输入二维码 payload:点击**摄像头**可实时扫描,点击**图片**可从本地照片读取。支持浅色背景上的标准深色二维码以及深色背景上的反白二维码。解码完全在浏览器中进行;读取到有效的 Matter 二维码后,编辑器会填写配对码并立即自动开始配对。如需设置可选设备名称,请在扫描前填写。手动输入的配对码仍需点击**配对**才会开始。实时使用摄像头要求通过 HTTPS 或从 `localhost` 打开编辑器;若条件不满足,编辑器会说明此限制,而图片加载功能仍然可用。
|
|
17
|
+
|
|
18
|
+
配对期间,阻塞式等待面板会覆盖编辑器并阻止进一步点击,直到操作成功完成或失败。
|
|
15
19
|
|
|
16
20
|
如果设备是全新的且仅支持蓝牙配对,请先用厂商 App 或其他 Matter 控制器(Alexa、Google Home、Apple Home)配对,然后使用其**"与其他中枢共享/配对"**功能为 KNX-Ultimate 生成新的配对码。这样设备可以同时加入多个 fabric。
|
|
17
21
|
|
|
@@ -26,4 +30,10 @@ Fabric 凭据和已配对设备保存在 Node-RED 用户目录下的 `knxultimat
|
|
|
26
30
|
## 移除设备
|
|
27
31
|
|
|
28
32
|
使用已配对设备列表中的垃圾桶按钮。控制器会尝试正确地解除设备调试;如果设备无法访问,仍会从 fabric 中移除(之后可能需要对设备进行恢复出厂设置)。
|
|
33
|
+
|
|
34
|
+
该列表为当前存储在此控制器 Matter fabric 中的每个节点显示一行。Node ID 在同一 fabric 内是唯一的;由同一个已调试 bridge 暴露的 endpoint 不会作为独立设备列出。状态列会显示各节点处于已连接、已断开、正在重新连接或等待发现状态。
|
|
35
|
+
|
|
36
|
+
控制器会为每个已配对设备分别保持命令顺序。缓慢、离线或已移除的设备不会阻塞发送给其他设备的命令。仍引用已移除 Node ID 的 Controller 设备节点会立即拒绝新命令,并显示 **Device no longer commissioned**。
|
|
37
|
+
|
|
38
|
+
设备不可用时,其 Controller 节点会保持锁定并忽略后续命令,直到该设备再次报告 `connected`。恢复会自动进行;打开设备节点编辑器也会解除锁定,以便手动重试。
|
|
29
39
|
</script>
|
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
"pairing_code": "配对码",
|
|
10
10
|
"pairing_name": "设备名称",
|
|
11
11
|
"pair_button": "配对",
|
|
12
|
+
"qr_acquire": "读取二维码",
|
|
13
|
+
"qr_scan_camera": "摄像头",
|
|
14
|
+
"qr_scan_image": "图片",
|
|
15
|
+
"qr_stop_camera": "停止摄像头",
|
|
16
|
+
"qr_camera_insecure": "由于 Node-RED 编辑器未通过 HTTPS 或 localhost 打开,浏览器无法使用摄像头。请通过 HTTPS 重新打开,或使用图片。",
|
|
17
|
+
"qr_camera_unsupported": "此浏览器无法访问摄像头。请使用受支持的浏览器或加载图片。",
|
|
18
|
+
"qr_camera_permission_denied": "摄像头权限被拒绝。请在浏览器中允许摄像头访问,或加载图片。",
|
|
19
|
+
"qr_camera_failed": "无法启动摄像头",
|
|
20
|
+
"qr_image_failed": "在所选图片中未找到可读取的二维码",
|
|
21
|
+
"qr_invalid_matter": "此二维码不是 Matter 配对码(MT:…)。",
|
|
22
|
+
"qr_found": "已读取 Matter 二维码。配对将自动开始。",
|
|
23
|
+
"qr_decoder_unavailable": "无法加载二维码读取器。",
|
|
12
24
|
"devices_title": "已配对设备",
|
|
13
25
|
"col_name": "名称",
|
|
14
26
|
"col_product": "产品",
|