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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/nodes/commonFunctions.js +93 -0
  3. package/nodes/icons/node-matter-icon.svg +12 -0
  4. package/nodes/knxUltimateMatterBridge.html +429 -0
  5. package/nodes/knxUltimateMatterBridge.js +456 -0
  6. package/nodes/knxUltimateMatterDevice.html +586 -0
  7. package/nodes/knxUltimateMatterDevice.js +308 -0
  8. package/nodes/locales/de/knxUltimateMatterBridge.html +64 -0
  9. package/nodes/locales/de/knxUltimateMatterBridge.json +80 -0
  10. package/nodes/locales/de/knxUltimateMatterDevice.html +56 -0
  11. package/nodes/locales/de/knxUltimateMatterDevice.json +109 -0
  12. package/nodes/locales/de/matter-config.html +25 -0
  13. package/nodes/locales/de/matter-config.json +26 -0
  14. package/nodes/locales/en/knxUltimateMatterBridge.html +64 -0
  15. package/nodes/locales/en/knxUltimateMatterBridge.json +80 -0
  16. package/nodes/locales/en/knxUltimateMatterDevice.html +56 -0
  17. package/nodes/locales/en/knxUltimateMatterDevice.json +109 -0
  18. package/nodes/locales/en/matter-config.html +25 -0
  19. package/nodes/locales/en/matter-config.json +26 -0
  20. package/nodes/locales/es/knxUltimateMatterBridge.html +64 -0
  21. package/nodes/locales/es/knxUltimateMatterBridge.json +80 -0
  22. package/nodes/locales/es/knxUltimateMatterDevice.html +56 -0
  23. package/nodes/locales/es/knxUltimateMatterDevice.json +109 -0
  24. package/nodes/locales/es/matter-config.html +25 -0
  25. package/nodes/locales/es/matter-config.json +26 -0
  26. package/nodes/locales/fr/knxUltimateMatterBridge.html +64 -0
  27. package/nodes/locales/fr/knxUltimateMatterBridge.json +80 -0
  28. package/nodes/locales/fr/knxUltimateMatterDevice.html +56 -0
  29. package/nodes/locales/fr/knxUltimateMatterDevice.json +109 -0
  30. package/nodes/locales/fr/matter-config.html +25 -0
  31. package/nodes/locales/fr/matter-config.json +26 -0
  32. package/nodes/locales/it/knxUltimateMatterBridge.html +64 -0
  33. package/nodes/locales/it/knxUltimateMatterBridge.json +80 -0
  34. package/nodes/locales/it/knxUltimateMatterDevice.html +56 -0
  35. package/nodes/locales/it/knxUltimateMatterDevice.json +109 -0
  36. package/nodes/locales/it/matter-config.html +25 -0
  37. package/nodes/locales/it/matter-config.json +26 -0
  38. package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +64 -0
  39. package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +80 -0
  40. package/nodes/locales/zh-CN/knxUltimateMatterDevice.html +56 -0
  41. package/nodes/locales/zh-CN/knxUltimateMatterDevice.json +109 -0
  42. package/nodes/locales/zh-CN/matter-config.html +25 -0
  43. package/nodes/locales/zh-CN/matter-config.json +26 -0
  44. package/nodes/matter-config.html +226 -0
  45. package/nodes/matter-config.js +242 -0
  46. package/nodes/utils/matterBridgeDeviceFactory.mjs +511 -0
  47. package/nodes/utils/matterBridgeEngine.mjs +290 -0
  48. package/nodes/utils/matterEngine.mjs +475 -0
  49. package/nodes/utils/matterKnxConverter.js +204 -0
  50. package/package.json +7 -2
@@ -0,0 +1,109 @@
1
+ {
2
+ "knxUltimateMatterDevice": {
3
+ "title": "Dispositivo Matter (BETA)",
4
+ "paletteLabel": "Matter Device (BETA)",
5
+ "matter_controller": "Ctrl Matter",
6
+ "matter_device": "Dispositivo",
7
+ "device_placeholder": "Haz clic para elegir un dispositivo Matter emparejado",
8
+ "mapping_help": "Añade una fila por cada mapeo. \"KNX → Matter\" invoca un comando del clúster (o escribe un atributo) cuando llega un telegrama a la dirección de grupo. \"Matter → KNX\" escribe el valor del atributo en la dirección de grupo cada vez que cambia (las peticiones de lectura se responden con el valor en caché).",
9
+ "select_target": "-- selecciona el destino Matter --",
10
+ "stored_target": "Guardado",
11
+ "read_status_startup": "Leer estado al inicio",
12
+ "opt_yes_emit": "Sí, y emitir telegramas KNX.",
13
+ "opt_no": "No",
14
+ "node_pins": "PINes de entrada/salida del nodo",
15
+ "node_pins_hide": "Ocultar",
16
+ "node_pins_show": "Mostrar PINes de entrada/salida",
17
+ "direction": {
18
+ "command": "KNX → Matter (comando)",
19
+ "status": "Matter → KNX (estado)"
20
+ },
21
+ "fields": {
22
+ "direction": "Dirección",
23
+ "target": "Endpoint / clúster / destino Matter",
24
+ "ga": "Dirección de grupo",
25
+ "dpt": "DPT",
26
+ "ganame": "Nombre"
27
+ },
28
+ "no_simple_targets": "No se encontraron funciones compatibles en este dispositivo (o el dispositivo aún no está conectado).",
29
+ "endpoint": "Endpoint",
30
+ "friendly": {
31
+ "onoff_switch": "Interruptor On/Off (encender/apagar)",
32
+ "onoff_toggle": "Invertir estado (toggle)",
33
+ "onoff_state": "Estado On/Off",
34
+ "level_set": "Ajustar brillo / nivel (%)",
35
+ "level_state": "Brillo / nivel actual (%)",
36
+ "colortemp_set": "Ajustar temperatura de color (Kelvin)",
37
+ "colortemp_state": "Temperatura de color actual (Kelvin)",
38
+ "cover_updown": "Persiana Subir/Bajar",
39
+ "cover_stop": "Persiana Stop",
40
+ "cover_position_set": "Mover persiana a posición (%)",
41
+ "cover_position_state": "Posición actual de la persiana (%)",
42
+ "cover_tilt_set": "Inclinar lamas (%)",
43
+ "cover_tilt_state": "Inclinación actual de lamas (%)",
44
+ "thermo_localtemp": "Temperatura ambiente (°C)",
45
+ "thermo_heatsp_set": "Ajustar consigna calefacción (°C)",
46
+ "thermo_coolsp_set": "Ajustar consigna refrigeración (°C)",
47
+ "thermo_heatsp_state": "Consigna calefacción (°C)",
48
+ "thermo_coolsp_state": "Consigna refrigeración (°C)",
49
+ "fan_speed_set": "Ajustar velocidad ventilador (%)",
50
+ "fan_speed_state": "Velocidad actual ventilador (%)",
51
+ "lock_cmd": "Bloquear/Desbloquear cerradura",
52
+ "lock_state": "Estado cerradura (bloqueada)",
53
+ "temp_measured": "Temperatura medida (°C)",
54
+ "humidity_measured": "Humedad relativa (%)",
55
+ "illuminance_measured": "Iluminancia (Lux)",
56
+ "occupancy_state": "Presencia detectada",
57
+ "contact_state": "Estado contacto (cerrado/abierto)",
58
+ "battery_percent": "Nivel de batería (%)",
59
+ "power_active": "Potencia instantánea (W)",
60
+ "power_voltage": "Tensión (V)",
61
+ "power_current": "Corriente (A)",
62
+ "energy_imported": "Energía consumida (kWh)",
63
+ "identify_cmd": "Identificar dispositivo (parpadeo)",
64
+ "switch_position": "Posición del botón"
65
+ },
66
+ "devtype": {
67
+ "onofflight": "Luz On/Off",
68
+ "dimmablelight": "Luz regulable",
69
+ "colortemperaturelight": "Luz de temperatura de color",
70
+ "extendedcolorlight": "Luz de color",
71
+ "onoffpluginunit": "Enchufe (on/off)",
72
+ "dimmablepluginunit": "Enchufe (regulable)",
73
+ "smartplug": "Enchufe inteligente",
74
+ "contactsensor": "Sensor de contacto",
75
+ "lightsensor": "Sensor de luz",
76
+ "occupancysensor": "Sensor de presencia",
77
+ "temperaturesensor": "Sensor de temperatura",
78
+ "humiditysensor": "Sensor de humedad",
79
+ "pressuresensor": "Sensor de presión",
80
+ "flowsensor": "Sensor de caudal",
81
+ "doorlock": "Cerradura",
82
+ "windowcovering": "Persiana/Cortina",
83
+ "thermostat": "Termostato",
84
+ "fan": "Ventilador",
85
+ "genericswitch": "Botón/Interruptor",
86
+ "airqualitysensor": "Sensor de calidad del aire",
87
+ "smokecoalarm": "Alarma humo/CO",
88
+ "waterleakdetector": "Detector de fugas de agua",
89
+ "roomairconditioner": "Aire acondicionado",
90
+ "airpurifier": "Purificador de aire",
91
+ "speaker": "Altavoz",
92
+ "pumpcontroller": "Bomba",
93
+ "onofflightswitch": "Interruptor de luz",
94
+ "dimmerswitch": "Interruptor regulador",
95
+ "colordimmerswitch": "Interruptor regulador de color",
96
+ "powersource": "Alimentación",
97
+ "electricalsensor": "Sensor eléctrico",
98
+ "bridgednode": "Dispositivo puenteado",
99
+ "aggregator": "Bridge/Agregador",
100
+ "rootnode": "Nodo raíz"
101
+ }
102
+ },
103
+ "common": {
104
+ "ga": "GA",
105
+ "dpt": "DPT",
106
+ "name": "Nombre",
107
+ "knx_gw": "GW KNX"
108
+ }
109
+ }
@@ -0,0 +1,25 @@
1
+ <script type="text/markdown" data-help-name="matter-config">
2
+ # Controlador Matter
3
+
4
+ ## Descripción general
5
+
6
+ Este nodo de configuración es un **controlador Matter** completo: crea su propia *fabric* Matter y empareja (comisiona) tus dispositivos Matter. Los dispositivos emparejados quedan disponibles para los nodos **Matter Device**, que los mapean a direcciones de grupo KNX.
7
+
8
+ El controlador se comunica con los dispositivos a través de la **red IP** (WiFi, Ethernet o Thread mediante un border router). El emparejamiento por Bluetooth no está soportado: el dispositivo debe estar ya accesible en la red.
9
+
10
+ ## Emparejar un dispositivo
11
+
12
+ 1. Haz primero el **deploy** de este nodo de configuración (el controlador debe estar en ejecución).
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. Pulsa **EMPAREJAR**. El comisionado puede tardar hasta un minuto.
15
+
16
+ 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
+
18
+ ## Almacenamiento
19
+
20
+ Las credenciales de la fabric y los dispositivos emparejados se guardan en la carpeta `knxultimatestorage/matter` dentro del directorio de usuario de Node-RED. Borrar esa carpeta elimina todos los emparejamientos.
21
+
22
+ ## Eliminar un dispositivo
23
+
24
+ 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).
25
+ </script>
@@ -0,0 +1,26 @@
1
+ {
2
+ "matter-config": {
3
+ "properties": {
4
+ "title": "Controlador Matter",
5
+ "intro": "Este nodo es un controlador Matter (con su propia fabric). Empareja aquí tus dispositivos Matter y usa el nodo \"Matter Device\" para mapearlos a direcciones de grupo KNX. Haz deploy primero y vuelve aquí para emparejar dispositivos.",
6
+ "node-config-input-name": "Nombre",
7
+ "fabric_label": "Etiqueta de fabric",
8
+ "pairing_title": "Emparejar un nuevo dispositivo",
9
+ "pairing_help": "Introduce el código de emparejamiento manual de 11 dígitos (p.ej. 3497-011-2332) o el contenido del código QR (MT:....). El dispositivo debe estar accesible en la red IP (WiFi/Ethernet o Thread mediante border router). Si ya está emparejado con otro controlador (Alexa, Google, Apple), usa su función \"compartir/emparejar con otro hub\" para obtener un nuevo código.",
10
+ "pairing_code": "Código de emparejamiento",
11
+ "pair_button": "EMPAREJAR",
12
+ "devices_title": "Dispositivos emparejados",
13
+ "col_name": "Nombre",
14
+ "col_product": "Producto",
15
+ "col_state": "Estado",
16
+ "no_devices": "Aún no hay dispositivos emparejados.",
17
+ "unpair_confirm": "Eliminar (retirar) el dispositivo",
18
+ "unpair_ok": "Dispositivo eliminado.",
19
+ "deploy_first": "Haz deploy de este nodo de configuración primero e inténtalo de nuevo.",
20
+ "pairing_code_missing": "Introduce un código de emparejamiento.",
21
+ "pairing_wait": "Emparejamiento en curso. Puede tardar hasta un minuto...",
22
+ "pairing_failed": "Emparejamiento fallido",
23
+ "pairing_ok": "¡Dispositivo emparejado correctamente!"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,64 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
2
+ # Matter Bridge (BETA)
3
+
4
+ > Ce nœud est en **BETA** : il fonctionne, mais des détails peuvent encore changer entre les versions.
5
+
6
+ ## Vue d'ensemble
7
+
8
+ Le nœud Matter Bridge expose les **adresses de groupe KNX comme appareils Matter** : Alexa, Google Home, Apple Home (ou n'importe quel contrôleur Matter) appairent ce bridge **une seule fois** et voient tous vos appareils KNX configurés, avec les noms que vous avez choisis, prêts pour le contrôle par app et à la voix.
9
+
10
+ C'est la direction opposée du nœud *Matter Device* : là-bas KNX contrôle un appareil Matter, ici les contrôleurs Matter contrôlent KNX.
11
+
12
+ ## Configuration
13
+
14
+ |Champ|Description|
15
+ |--|--|
16
+ | GW KNX | Passerelle KNX utilisée pour les télégrammes. **Optionnel** : sans passerelle, le bridge fonctionne en mode flow uniquement — activez les PIN du nœud et pilotez chaque appareil avec des messages du flow |
17
+ | Nom du bridge Matter | Le nom du bridge lui-même dans les apps Matter |
18
+ | Port | Port UDP du serveur Matter (5540 par défaut). Un seul nœud bridge par instance Node-RED. |
19
+ | Appareils | Les appareils KNX virtuels exposés sur Matter (voir ci-dessous) |
20
+ | Lire les GA d'état au démarrage | Envoie un `GroupValue_Read` à chaque GA d'état au démarrage, pour peupler les attributs Matter |
21
+
22
+ ## Appareils
23
+
24
+ Chaque ligne est un appareil affiché par Alexa & Co. Choisissez le **type**, donnez-lui le **nom** que l'assistant utilisera, puis remplissez les adresses de groupe (avec autocomplétion ETS) :
25
+
26
+ |Type|Adresses de groupe|
27
+ |--|--|
28
+ | Lumière On/Off, Prise | GA commande On/Off, GA état On/Off (DPT 1.001) |
29
+ | Lumière variable | + GA commande/état variation % (DPT 5.001) |
30
+ | Lumière RGB (couleur) | + GA commande/état couleur RGB (DPT 232.600). La couleur Matter (hue/saturation ou XY, depuis la roue de couleur de l'app) est convertie depuis/vers le triplet RGB KNX |
31
+ | Lumière blanc dynamique | + GA commande/état température de couleur en Kelvin (DPT 7.600) |
32
+ | Volet / Store | Monter/Descendre (DPT 1.008), Stop (DPT 1.017), position % commande/état (DPT 5.001), inversion de position optionnelle |
33
+ | Thermostat (chauffage) | GA température actuelle, GA commande/état consigne (DPT 9.001) |
34
+ | Ventilateur / VMC | GA commande/état vitesse % (DPT 5.001) |
35
+ | Capteurs (température, humidité, lumière, présence, contact) | Une GA d'état chacun |
36
+ | Détecteur fumée/CO | GA état alarme fumée + GA état alarme CO optionnelle (DPT 1.005) : notifications critiques sur le téléphone |
37
+ | Détecteur de fuite d'eau | GA état fuite (DPT 1.005) |
38
+ | Capteur de qualité d'air (CO2) | GA état CO2 en ppm (DPT 9.008) ; la classe de qualité d'air (bonne/correcte/modérée/mauvaise...) est dérivée automatiquement |
39
+ | Robot aspirateur | **Flow uniquement** : pas d'adresses de groupe. Activez les PIN du nœud : les commandes de l'assistant (« lance le nettoyage », pause/reprendre/retour à la base) arrivent sur la sortie comme `rvcmode`/`rvccommand` ; renvoyez l'état avec `msg.payload = { device, function: "rvcstate", value: "running"\|"docked"\|"charging"\|"paused"\|"error" }` et le mode avec `function: "rvcmode", value: "cleaning"\|"idle"`. Intégrez votre Roomba/Roborock avec n'importe quel nœud Node-RED et exposez-le à Alexa/Apple |
40
+
41
+ - **GA de commande** : écrite sur le bus KNX quand l'assistant envoie une commande.
42
+ - **GA d'état** : lue depuis le bus pour tenir à jour les attributs Matter (et les apps).
43
+
44
+ ## Appairage
45
+
46
+ 1. **Déployez**, attendez quelques secondes, puis rouvrez le nœud.
47
+ 2. Le panneau d'appairage montre le **QR code** et le **code manuel** : scannez ou saisissez-le dans Alexa / Google Home / Apple Home (« ajouter un appareil Matter »).
48
+ 3. Plusieurs contrôleurs peuvent être appairés au même bridge (multi-fabric Matter).
49
+
50
+ Le bouton **Réinitialiser l'appairage** supprime tous les contrôleurs appairés et relance l'annonce d'appairage.
51
+
52
+ ## PIN du nœud
53
+
54
+ Si vous activez les PIN entrée/sortie du nœud :
55
+
56
+ - **Entrée** : mettez à jour l'état Matter d'un appareil virtuel depuis le flow, sans passer par le bus KNX : `msg.payload = { device: "Lumière cuisine", function: "onoff", value: true }` (`device` accepte le nom ou l'id interne ; `function` est l'une de `onoff`, `level`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`). Utile pour exposer à Alexa & Co. des valeurs calculées dans le flow (ex. un capteur virtuel).
57
+ - **Sortie** : chaque commande reçue d'un contrôleur Matter est transmise au flow : `msg.topic` = nom de l'appareil, `msg.payload` = valeur, `msg.matter` = la commande brute. Les appareils sans GA de commande deviennent des **appareils flow uniquement** : la commande arrive dans votre flow et vous décidez quoi en faire.
58
+
59
+ ## Notes
60
+
61
+ - L'hôte Node-RED doit avoir **IPv6 link-local** activé (exigence standard de Matter) et être joignable par le contrôleur sur le réseau local.
62
+ - L'identité du bridge est enregistrée dans `knxultimatestorage/matter` du répertoire utilisateur de Node-RED : les re-deploys ne nécessitent PAS de nouvel appairage.
63
+ - Les renommages et ajouts d'appareils sont pris en compte automatiquement par les contrôleurs ; un appareil supprimé disparaît des apps.
64
+ </script>
@@ -0,0 +1,80 @@
1
+ {
2
+ "knxUltimateMatterBridge": {
3
+ "title": "Matter Bridge (BETA)",
4
+ "bridge_name": "Nom du bridge Matter",
5
+ "port": "Port",
6
+ "devices_help": "Ajoutez les appareils KNX à exposer sur Matter. Le \"Nom\" est celui qu'Alexa/Google/Apple affichent et utilisent pour les commandes vocales. GA de commande = écrite quand l'assistant envoie une commande ; GA d'état = lue depuis le bus pour tenir l'app à jour.",
7
+ "read_status_startup": "Lire les adresses de groupe d'état au démarrage",
8
+ "opt_yes": "Oui",
9
+ "opt_no": "Non",
10
+ "node_pins": "PIN entrée/sortie du nœud",
11
+ "node_pins_hide": "Masquer",
12
+ "node_pins_show": "Afficher les PIN entrée/sortie",
13
+ "fields": {
14
+ "type": "Type d'appareil",
15
+ "name": "Nom (affiché par Alexa & Co.)",
16
+ "name_placeholder": "ex. Lumière cuisine",
17
+ "invert": "Inverser la position %"
18
+ },
19
+ "functions": {
20
+ "fn_onoff_cmd": "GA commande On/Off",
21
+ "fn_onoff_status": "GA état On/Off",
22
+ "fn_level_cmd": "GA commande variation %",
23
+ "fn_level_status": "GA état variation %",
24
+ "fn_sensor_ga": "GA état du capteur",
25
+ "fn_updown": "GA commande Monter/Descendre",
26
+ "fn_stop": "GA commande Stop",
27
+ "fn_position_cmd": "GA commande position %",
28
+ "fn_position_status": "GA état position %",
29
+ "fn_currenttemp": "GA température actuelle",
30
+ "fn_setpoint_cmd": "GA commande consigne",
31
+ "fn_setpoint_status": "GA état consigne",
32
+ "fn_rgb_cmd": "GA commande couleur RGB (DPT 232.600)",
33
+ "fn_rgb_status": "GA état couleur RGB (DPT 232.600)",
34
+ "fn_ct_cmd": "GA commande température de couleur (Kelvin)",
35
+ "fn_ct_status": "GA état température de couleur (Kelvin)",
36
+ "fn_smoke_ga": "GA état alarme fumée",
37
+ "fn_co_ga": "GA état alarme CO (optionnel)",
38
+ "fn_leak_ga": "GA état fuite d'eau",
39
+ "fn_co2_ga": "GA état CO2 (ppm, DPT 9.008)",
40
+ "fn_fanspeed_cmd": "GA commande vitesse ventilateur %",
41
+ "fn_fanspeed_status": "GA état vitesse ventilateur %"
42
+ },
43
+ "types": {
44
+ "onofflight": "Lumière On/Off",
45
+ "dimmablelight": "Lumière variable",
46
+ "rgblight": "Lumière RGB (couleur)",
47
+ "colortemperaturelight": "Lumière blanc dynamique (température de couleur)",
48
+ "onoffplug": "Prise (on/off)",
49
+ "temperaturesensor": "Capteur de température",
50
+ "humiditysensor": "Capteur d'humidité",
51
+ "lightsensor": "Capteur de lumière (Lux)",
52
+ "occupancysensor": "Capteur de présence",
53
+ "contactsensor": "Capteur de contact",
54
+ "windowcovering": "Volet / Store",
55
+ "thermostat": "Thermostat (chauffage)",
56
+ "fan": "Ventilateur / VMC",
57
+ "smokecoalarm": "Détecteur fumée/CO",
58
+ "waterleakdetector": "Détecteur de fuite d'eau",
59
+ "airqualitysensor": "Capteur de qualité d'air (CO2)",
60
+ "robotvacuum": "Robot aspirateur (flow uniquement, via les PIN du nœud)"
61
+ },
62
+ "pairing": {
63
+ "title": "Appairage (Alexa, Google Home, Apple Home...)",
64
+ "not_running": "Le bridge Matter n'est pas encore démarré. Déployez, attendez quelques secondes puis cliquez sur actualiser.",
65
+ "commissioned": "Bridge appairé avec ces contrôleurs :",
66
+ "awaiting": "En attente d'appairage. Scannez le QR code ou saisissez le code manuel dans votre app Matter :",
67
+ "qr_link": "Ouvrir le QR code dans le navigateur",
68
+ "deploy_first": "Déployez d'abord ce nœud, puis cliquez sur actualiser.",
69
+ "reset_button": "Réinitialiser l'appairage",
70
+ "reset_confirm": "Supprimer TOUS les contrôleurs appairés et relancer l'appairage ? Les appareils disparaîtront d'Alexa/Google/Apple.",
71
+ "reset_ok": "Appairage réinitialisé. Le bridge attend de nouveau un appairage."
72
+ }
73
+ },
74
+ "common": {
75
+ "ga": "GA",
76
+ "dpt": "DPT",
77
+ "name": "Nom",
78
+ "knx_gw": "GW KNX"
79
+ }
80
+ }
@@ -0,0 +1,56 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterDevice">
2
+ # Appareil Matter (BETA)
3
+
4
+ > Ce nœud est en **BETA** : il fonctionne, mais des détails peuvent encore changer entre les versions.
5
+
6
+ ## Vue d'ensemble
7
+
8
+ Le nœud Matter Device fait le pont entre un **appareil Matter** et les **adresses de groupe KNX**. Le nœud opère via le nœud de configuration *Contrôleur Matter*, qui commissionne les appareils dans sa propre fabric Matter.
9
+
10
+ - **Contrôlez** n'importe quel appareil Matter appairé depuis le bus KNX (on/off, variation, volets, thermostats, serrures, ...).
11
+ - **Suivez** chaque attribut de l'appareil sur des adresses de groupe KNX (états, capteurs, mesure de puissance, batterie...).
12
+ - Totalement générique : la liste des mappages est construite à partir des **endpoints/clusters réels** exposés par l'appareil.
13
+
14
+ ## Configuration
15
+
16
+ |Champ|Description|
17
+ |--|--|
18
+ | GW KNX | Passerelle KNX utilisée pour les télégrammes |
19
+ | Ctrl Matter | Le nœud de configuration Contrôleur Matter (où l'on appaire les appareils) |
20
+ | Appareil | Choisissez l'appareil Matter appairé via l'autocomplétion |
21
+ | Mappages | Une ligne par mappage adresse de groupe ↔ cluster Matter |
22
+ | Lire l'état au démarrage | Si activé, le nœud émet les valeurs en cache au deploy/à la connexion |
23
+ | PIN entrée/sortie | Active les broches Node-RED pour l'accès Matter brut |
24
+
25
+ ## Mappages
26
+
27
+ La liste des cibles montre les fonctions prises en charge avec des noms compréhensibles comme *« Interrupteur On/Off »* ou *« Puissance instantanée (W) »*, filtrées selon ce que l'appareil expose réellement, avec la valeur actuelle entre crochets.
28
+
29
+ Chaque ligne de mappage a une **direction** :
30
+
31
+ - **KNX → Matter (commande)** : un télégramme reçu sur l'adresse de groupe invoque une commande du cluster Matter ou écrit un attribut. Exemple : GA `1/1/1` DPT 1.001 → `OnOff.on/off` (la valeur booléenne choisit automatiquement on ou off).
32
+ - **Matter → KNX (état)** : quand l'attribut Matter souscrit change, sa valeur est convertie et écrite sur l'adresse de groupe. Les requêtes `GroupValue_Read` reçoivent la valeur en cache.
33
+
34
+ Les clusters courants sont convertis automatiquement en valeurs adaptées à KNX :
35
+
36
+ |Cluster|Conversion|
37
+ |--|--|
38
+ | OnOff | booléen (DPT 1.001) |
39
+ | LevelControl | 0-254 ↔ pourcentage (DPT 5.001) |
40
+ | WindowCovering | percent100ths ↔ pourcentage (DPT 5.001), monter/descendre (DPT 1.008) |
41
+ | ColorControl | mireds ↔ Kelvin (DPT 7.600) |
42
+ | Thermostat | centi-°C ↔ °C (DPT 9.001) |
43
+ | Température/Humidité | centi-unités ↔ unités (DPT 9.001/9.007) |
44
+ | Éclairement | échelle logarithmique ↔ Lux (DPT 9.004) |
45
+ | PowerSource | demi-pourcent ↔ pourcentage batterie (DPT 5.001) |
46
+ | Puissance/Énergie électrique | mW ↔ W (DPT 14.056), mWh ↔ kWh (DPT 13.013) |
47
+
48
+ Les autres clusters/attributs passent tels quels ; le DPT choisi effectue l'encodage KNX final.
49
+
50
+ ## PIN du nœud
51
+
52
+ Si vous activez les PIN du nœud :
53
+
54
+ - **Entrée** : envoyez des commandes brutes : `msg.payload = { endpointId: 1, clusterId: 6, command: "toggle" }` ou des écritures d'attributs : `msg.payload = { endpointId: 1, clusterId: 8, attribute: "onLevel", value: 128 }`
55
+ - **Sortie** : reçoit chaque changement d'attribut (`msg.matter` contient l'événement complet) et chaque événement de cluster (appuis de boutons, etc.).
56
+ </script>
@@ -0,0 +1,109 @@
1
+ {
2
+ "knxUltimateMatterDevice": {
3
+ "title": "Appareil Matter (BETA)",
4
+ "paletteLabel": "Matter Device (BETA)",
5
+ "matter_controller": "Ctrl Matter",
6
+ "matter_device": "Appareil",
7
+ "device_placeholder": "Cliquez pour choisir un appareil Matter appairé",
8
+ "mapping_help": "Ajoutez une ligne par mappage. \"KNX → Matter\" invoque une commande du cluster (ou écrit un attribut) à l'arrivée d'un télégramme sur l'adresse de groupe. \"Matter → KNX\" écrit la valeur de l'attribut sur l'adresse de groupe à chaque changement (les demandes de lecture reçoivent la valeur en cache).",
9
+ "select_target": "-- sélectionnez la cible Matter --",
10
+ "stored_target": "Enregistré",
11
+ "read_status_startup": "Lire l'état au démarrage",
12
+ "opt_yes_emit": "Oui, et émettre les télégrammes KNX.",
13
+ "opt_no": "Non",
14
+ "node_pins": "PIN entrée/sortie du nœud",
15
+ "node_pins_hide": "Masquer",
16
+ "node_pins_show": "Afficher les PIN entrée/sortie",
17
+ "direction": {
18
+ "command": "KNX → Matter (commande)",
19
+ "status": "Matter → KNX (état)"
20
+ },
21
+ "fields": {
22
+ "direction": "Direction",
23
+ "target": "Endpoint / cluster / cible Matter",
24
+ "ga": "Adresse de groupe",
25
+ "dpt": "DPT",
26
+ "ganame": "Nom"
27
+ },
28
+ "no_simple_targets": "Aucune fonction prise en charge trouvée sur cet appareil (ou l'appareil n'est pas encore connecté).",
29
+ "endpoint": "Endpoint",
30
+ "friendly": {
31
+ "onoff_switch": "Interrupteur On/Off (allumer/éteindre)",
32
+ "onoff_toggle": "Inverser l'état (toggle)",
33
+ "onoff_state": "État On/Off",
34
+ "level_set": "Régler la luminosité / le niveau (%)",
35
+ "level_state": "Luminosité / niveau actuel (%)",
36
+ "colortemp_set": "Régler la température de couleur (Kelvin)",
37
+ "colortemp_state": "Température de couleur actuelle (Kelvin)",
38
+ "cover_updown": "Volet Monter/Descendre",
39
+ "cover_stop": "Volet Stop",
40
+ "cover_position_set": "Amener le volet en position (%)",
41
+ "cover_position_state": "Position actuelle du volet (%)",
42
+ "cover_tilt_set": "Incliner les lamelles (%)",
43
+ "cover_tilt_state": "Inclinaison actuelle des lamelles (%)",
44
+ "thermo_localtemp": "Température ambiante (°C)",
45
+ "thermo_heatsp_set": "Régler la consigne chauffage (°C)",
46
+ "thermo_coolsp_set": "Régler la consigne climatisation (°C)",
47
+ "thermo_heatsp_state": "Consigne chauffage (°C)",
48
+ "thermo_coolsp_state": "Consigne climatisation (°C)",
49
+ "fan_speed_set": "Régler la vitesse du ventilateur (%)",
50
+ "fan_speed_state": "Vitesse actuelle du ventilateur (%)",
51
+ "lock_cmd": "Verrouiller/Déverrouiller la serrure",
52
+ "lock_state": "État de la serrure (verrouillée)",
53
+ "temp_measured": "Température mesurée (°C)",
54
+ "humidity_measured": "Humidité relative (%)",
55
+ "illuminance_measured": "Éclairement (Lux)",
56
+ "occupancy_state": "Présence détectée",
57
+ "contact_state": "État du contact (fermé/ouvert)",
58
+ "battery_percent": "Niveau de batterie (%)",
59
+ "power_active": "Puissance instantanée (W)",
60
+ "power_voltage": "Tension (V)",
61
+ "power_current": "Courant (A)",
62
+ "energy_imported": "Énergie consommée (kWh)",
63
+ "identify_cmd": "Identifier l'appareil (clignotement)",
64
+ "switch_position": "Position du bouton"
65
+ },
66
+ "devtype": {
67
+ "onofflight": "Lumière On/Off",
68
+ "dimmablelight": "Lumière variable",
69
+ "colortemperaturelight": "Lumière à température de couleur",
70
+ "extendedcolorlight": "Lumière couleur",
71
+ "onoffpluginunit": "Prise (on/off)",
72
+ "dimmablepluginunit": "Prise (variable)",
73
+ "smartplug": "Prise connectée",
74
+ "contactsensor": "Capteur de contact",
75
+ "lightsensor": "Capteur de lumière",
76
+ "occupancysensor": "Capteur de présence",
77
+ "temperaturesensor": "Capteur de température",
78
+ "humiditysensor": "Capteur d'humidité",
79
+ "pressuresensor": "Capteur de pression",
80
+ "flowsensor": "Capteur de débit",
81
+ "doorlock": "Serrure",
82
+ "windowcovering": "Volet/Store",
83
+ "thermostat": "Thermostat",
84
+ "fan": "Ventilateur",
85
+ "genericswitch": "Bouton/Interrupteur",
86
+ "airqualitysensor": "Capteur de qualité d'air",
87
+ "smokecoalarm": "Détecteur fumée/CO",
88
+ "waterleakdetector": "Détecteur de fuite d'eau",
89
+ "roomairconditioner": "Climatiseur",
90
+ "airpurifier": "Purificateur d'air",
91
+ "speaker": "Haut-parleur",
92
+ "pumpcontroller": "Pompe",
93
+ "onofflightswitch": "Interrupteur",
94
+ "dimmerswitch": "Interrupteur variateur",
95
+ "colordimmerswitch": "Variateur couleur",
96
+ "powersource": "Alimentation",
97
+ "electricalsensor": "Capteur électrique",
98
+ "bridgednode": "Appareil ponté",
99
+ "aggregator": "Bridge/Agrégateur",
100
+ "rootnode": "Nœud racine"
101
+ }
102
+ },
103
+ "common": {
104
+ "ga": "GA",
105
+ "dpt": "DPT",
106
+ "name": "Nom",
107
+ "knx_gw": "GW KNX"
108
+ }
109
+ }
@@ -0,0 +1,25 @@
1
+ <script type="text/markdown" data-help-name="matter-config">
2
+ # Contrôleur Matter
3
+
4
+ ## Vue d'ensemble
5
+
6
+ Ce nœud de configuration est un **contrôleur Matter** complet : il crée sa propre *fabric* Matter et y appaire (commissionne) vos appareils Matter. Les appareils appairés sont ensuite disponibles pour les nœuds **Matter Device**, qui les mappent sur des adresses de groupe KNX.
7
+
8
+ Le contrôleur communique avec les appareils via le **réseau IP** (WiFi, Ethernet ou Thread via un border router). L'appairage Bluetooth n'est pas pris en charge : l'appareil doit déjà être joignable sur le réseau.
9
+
10
+ ## Appairer un appareil
11
+
12
+ 1. **Déployez** d'abord ce nœud de configuration (le contrôleur doit être en fonction).
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. Cliquez sur **APPAIRER**. Le commissionnement peut prendre jusqu'à une minute.
15
+
16
+ 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
+
18
+ ## Stockage
19
+
20
+ Les identifiants de la fabric et les appareils appairés sont enregistrés dans le dossier `knxultimatestorage/matter` du répertoire utilisateur de Node-RED. Supprimer ce dossier efface tous les appairages.
21
+
22
+ ## Supprimer un appareil
23
+
24
+ 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).
25
+ </script>
@@ -0,0 +1,26 @@
1
+ {
2
+ "matter-config": {
3
+ "properties": {
4
+ "title": "Contrôleur Matter",
5
+ "intro": "Ce nœud est un contrôleur Matter (avec sa propre fabric). Appairez ici vos appareils Matter, puis utilisez le nœud \"Matter Device\" pour les mapper sur des adresses de groupe KNX. Déployez d'abord le nœud, puis revenez ici pour appairer les appareils.",
6
+ "node-config-input-name": "Nom",
7
+ "fabric_label": "Étiquette de fabric",
8
+ "pairing_title": "Appairer un nouvel appareil",
9
+ "pairing_help": "Saisissez le code d'appairage manuel à 11 chiffres (ex. 3497-011-2332) ou le contenu du QR code (MT:....). L'appareil doit être joignable sur le réseau IP (WiFi/Ethernet ou Thread via border router). S'il est déjà appairé à un autre contrôleur (Alexa, Google, Apple), utilisez sa fonction \"partager/appairer avec un autre hub\" pour obtenir un nouveau code.",
10
+ "pairing_code": "Code d'appairage",
11
+ "pair_button": "APPAIRER",
12
+ "devices_title": "Appareils appairés",
13
+ "col_name": "Nom",
14
+ "col_product": "Produit",
15
+ "col_state": "État",
16
+ "no_devices": "Aucun appareil appairé pour le moment.",
17
+ "unpair_confirm": "Supprimer (retirer) l'appareil",
18
+ "unpair_ok": "Appareil supprimé.",
19
+ "deploy_first": "Déployez d'abord ce nœud de configuration, puis réessayez.",
20
+ "pairing_code_missing": "Veuillez saisir un code d'appairage.",
21
+ "pairing_wait": "Appairage en cours. Cela peut prendre jusqu'à une minute...",
22
+ "pairing_failed": "Échec de l'appairage",
23
+ "pairing_ok": "Appareil appairé avec succès !"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,64 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
2
+ # Matter Bridge (BETA)
3
+
4
+ > Questo nodo è in **BETA**: funziona, ma alcuni dettagli potrebbero cambiare tra una release e l'altra.
5
+
6
+ ## Panoramica
7
+
8
+ Il nodo Matter Bridge espone gli **indirizzi di gruppo KNX come dispositivi Matter**: Alexa, Google Home, Apple Home (o qualunque controller Matter) associano questo bridge **una sola volta** e vedono tutti i dispositivi KNX configurati, con i nomi che hai scelto, pronti per il controllo da app e vocale.
9
+
10
+ È la direzione opposta del nodo *Matter Device*: lì KNX controlla un dispositivo Matter, qui i controller Matter controllano KNX.
11
+
12
+ ## Configurazione
13
+
14
+ |Campo|Descrizione|
15
+ |--|--|
16
+ | GW KNX | Gateway KNX usato per i telegrammi. **Opzionale**: senza gateway il bridge funziona in modalità solo-flow — abilita i PIN del nodo e piloti ogni dispositivo con i messaggi del flow |
17
+ | Nome del bridge Matter | Come viene chiamato il bridge stesso nelle app Matter |
18
+ | Porta | Porta UDP del server Matter (default 5540). Un solo nodo bridge per istanza Node-RED. |
19
+ | Dispositivi | I dispositivi virtuali KNX esposti su Matter (vedi sotto) |
20
+ | Leggi i GA di stato all'avvio | Invia una `GroupValue_Read` a ogni GA di stato all'avvio, per popolare gli attributi Matter |
21
+
22
+ ## Dispositivi
23
+
24
+ Ogni riga è un dispositivo mostrato da Alexa & Co. Scegli il **tipo**, dagli il **nome** che l'assistente userà, poi compila gli indirizzi di gruppo (con autocompletamento ETS):
25
+
26
+ |Tipo|Indirizzi di gruppo|
27
+ |--|--|
28
+ | Luce On/Off, Presa | GA comando On/Off, GA stato On/Off (DPT 1.001) |
29
+ | Luce dimmerabile | + GA comando/stato dimmer % (DPT 5.001) |
30
+ | Luce RGB (colore) | + GA comando/stato colore RGB (DPT 232.600). Il colore Matter (hue/saturation o XY, dalla ruota colore dell'app) viene convertito da/verso la terna RGB KNX |
31
+ | Luce bianco dinamico | + GA comando/stato temperatura colore in Kelvin (DPT 7.600) |
32
+ | Tapparella / Tenda | Su/Giù (DPT 1.008), Stop (DPT 1.017), posizione % comando/stato (DPT 5.001), inversione posizione opzionale |
33
+ | Termostato (riscaldamento) | GA temperatura attuale, GA comando/stato setpoint (DPT 9.001) |
34
+ | Ventola / VMC | GA comando/stato velocità % (DPT 5.001) |
35
+ | Sensori (temperatura, umidità, luminosità, presenza, contatto) | Un GA di stato ciascuno |
36
+ | Rilevatore fumo/CO | GA stato allarme fumo + GA stato allarme CO opzionale (DPT 1.005): notifiche critiche sul telefono |
37
+ | Rilevatore allagamento | GA stato allagamento (DPT 1.005) |
38
+ | Sensore qualità aria (CO2) | GA stato CO2 in ppm (DPT 9.008); la classe qualità aria (buona/discreta/moderata/scarsa...) è derivata automaticamente |
39
+ | Robot aspirapolvere | **Solo-flow**: nessun indirizzo di gruppo. Abilita i PIN del nodo: i comandi dell'assistente ("avvia pulizia", pausa/riprendi/torna alla base) arrivano sull'output come `rvcmode`/`rvccommand`; riporta lo stato con `msg.payload = { device, function: "rvcstate", value: "running"\|"docked"\|"charging"\|"paused"\|"error" }` e la modalità con `function: "rvcmode", value: "cleaning"\|"idle"`. Integra il tuo Roomba/Roborock con qualsiasi nodo Node-RED ed esponilo ad Alexa/Apple |
40
+
41
+ - **GA comando**: scritto sul bus KNX quando l'assistente invia un comando.
42
+ - **GA stato**: letto dal bus per tenere aggiornati gli attributi Matter (e le app).
43
+
44
+ ## Abbinamento
45
+
46
+ 1. Fai il **deploy**, attendi qualche secondo, poi riapri il nodo.
47
+ 2. Il pannello di abbinamento mostra il **QR code** e il **codice manuale**: scansiona o digita in Alexa / Google Home / Apple Home ("aggiungi dispositivo Matter").
48
+ 3. Più controller possono essere abbinati allo stesso bridge (multi-fabric Matter).
49
+
50
+ Il pulsante **Reset abbinamento** rimuove tutti i controller abbinati e riavvia l'advertising di abbinamento.
51
+
52
+ ## PIN del nodo
53
+
54
+ Se abiliti i PIN input/output del nodo:
55
+
56
+ - **Input**: aggiorna lo stato Matter di un dispositivo virtuale dal flow, senza passare dal bus KNX: `msg.payload = { device: "Luce cucina", function: "onoff", value: true }` (`device` accetta il nome o l'id interno; `function` è una tra `onoff`, `level`, `position`, `temperature`, `humidity`, `illuminance`, `occupancy`, `contact`, `currenttemp`, `setpoint`). Utile per esporre ad Alexa & Co. valori calcolati nel flow (es. un sensore virtuale).
57
+ - **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. I dispositivi senza GA di comando diventano **dispositivi solo-flow**: il comando arriva al tuo flow e decidi tu cosa farne.
58
+
59
+ ## Note
60
+
61
+ - L'host Node-RED deve avere **IPv6 link-local** attivo (requisito standard Matter) ed essere raggiungibile dal controller sulla rete locale.
62
+ - L'identità del bridge è salvata in `knxultimatestorage/matter` nella directory utente di Node-RED: i re-deploy NON richiedono un nuovo abbinamento.
63
+ - Rinomina e aggiunta di dispositivi vengono recepite automaticamente dai controller; se rimuovi un dispositivo, sparisce dalle app.
64
+ </script>