node-red-contrib-knx-ultimate 5.0.3 → 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 (51) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/nodes/commonFunctions.js +93 -0
  3. package/nodes/icons/node-matter-icon.svg +12 -0
  4. package/nodes/knxUltimateIoTBridge.html +10 -3
  5. package/nodes/knxUltimateMatterBridge.html +429 -0
  6. package/nodes/knxUltimateMatterBridge.js +456 -0
  7. package/nodes/knxUltimateMatterDevice.html +586 -0
  8. package/nodes/knxUltimateMatterDevice.js +308 -0
  9. package/nodes/locales/de/knxUltimateMatterBridge.html +64 -0
  10. package/nodes/locales/de/knxUltimateMatterBridge.json +80 -0
  11. package/nodes/locales/de/knxUltimateMatterDevice.html +56 -0
  12. package/nodes/locales/de/knxUltimateMatterDevice.json +109 -0
  13. package/nodes/locales/de/matter-config.html +25 -0
  14. package/nodes/locales/de/matter-config.json +26 -0
  15. package/nodes/locales/en/knxUltimateMatterBridge.html +64 -0
  16. package/nodes/locales/en/knxUltimateMatterBridge.json +80 -0
  17. package/nodes/locales/en/knxUltimateMatterDevice.html +56 -0
  18. package/nodes/locales/en/knxUltimateMatterDevice.json +109 -0
  19. package/nodes/locales/en/matter-config.html +25 -0
  20. package/nodes/locales/en/matter-config.json +26 -0
  21. package/nodes/locales/es/knxUltimateMatterBridge.html +64 -0
  22. package/nodes/locales/es/knxUltimateMatterBridge.json +80 -0
  23. package/nodes/locales/es/knxUltimateMatterDevice.html +56 -0
  24. package/nodes/locales/es/knxUltimateMatterDevice.json +109 -0
  25. package/nodes/locales/es/matter-config.html +25 -0
  26. package/nodes/locales/es/matter-config.json +26 -0
  27. package/nodes/locales/fr/knxUltimateMatterBridge.html +64 -0
  28. package/nodes/locales/fr/knxUltimateMatterBridge.json +80 -0
  29. package/nodes/locales/fr/knxUltimateMatterDevice.html +56 -0
  30. package/nodes/locales/fr/knxUltimateMatterDevice.json +109 -0
  31. package/nodes/locales/fr/matter-config.html +25 -0
  32. package/nodes/locales/fr/matter-config.json +26 -0
  33. package/nodes/locales/it/knxUltimateMatterBridge.html +64 -0
  34. package/nodes/locales/it/knxUltimateMatterBridge.json +80 -0
  35. package/nodes/locales/it/knxUltimateMatterDevice.html +56 -0
  36. package/nodes/locales/it/knxUltimateMatterDevice.json +109 -0
  37. package/nodes/locales/it/matter-config.html +25 -0
  38. package/nodes/locales/it/matter-config.json +26 -0
  39. package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +64 -0
  40. package/nodes/locales/zh-CN/knxUltimateMatterBridge.json +80 -0
  41. package/nodes/locales/zh-CN/knxUltimateMatterDevice.html +56 -0
  42. package/nodes/locales/zh-CN/knxUltimateMatterDevice.json +109 -0
  43. package/nodes/locales/zh-CN/matter-config.html +25 -0
  44. package/nodes/locales/zh-CN/matter-config.json +26 -0
  45. package/nodes/matter-config.html +226 -0
  46. package/nodes/matter-config.js +242 -0
  47. package/nodes/utils/matterBridgeDeviceFactory.mjs +511 -0
  48. package/nodes/utils/matterBridgeEngine.mjs +290 -0
  49. package/nodes/utils/matterEngine.mjs +475 -0
  50. package/nodes/utils/matterKnxConverter.js +204 -0
  51. package/package.json +7 -2
@@ -0,0 +1,80 @@
1
+ {
2
+ "knxUltimateMatterBridge": {
3
+ "title": "Matter Bridge (BETA)",
4
+ "bridge_name": "Nome del bridge Matter",
5
+ "port": "Porta",
6
+ "devices_help": "Aggiungi i dispositivi KNX da esporre su Matter. Il \"Nome\" è quello che Alexa/Google/Apple mostrano e usano per i comandi vocali. GA comando = scritto quando l'assistente invia un comando; GA stato = letto dal bus per tenere aggiornata l'app.",
7
+ "read_status_startup": "Leggi i GA di stato all'avvio",
8
+ "opt_yes": "Sì",
9
+ "opt_no": "No",
10
+ "node_pins": "PIN Input/Output del nodo",
11
+ "node_pins_hide": "Nascondi",
12
+ "node_pins_show": "Mostra i PIN input/output del nodo",
13
+ "fields": {
14
+ "type": "Tipo dispositivo",
15
+ "name": "Nome (mostrato da Alexa & Co.)",
16
+ "name_placeholder": "es. Luce cucina",
17
+ "invert": "Inverti posizione %"
18
+ },
19
+ "functions": {
20
+ "fn_onoff_cmd": "GA comando On/Off",
21
+ "fn_onoff_status": "GA stato On/Off",
22
+ "fn_level_cmd": "GA comando dimmer %",
23
+ "fn_level_status": "GA stato dimmer %",
24
+ "fn_sensor_ga": "GA stato sensore",
25
+ "fn_updown": "GA comando Su/Giù",
26
+ "fn_stop": "GA comando Stop",
27
+ "fn_position_cmd": "GA comando posizione %",
28
+ "fn_position_status": "GA stato posizione %",
29
+ "fn_currenttemp": "GA temperatura attuale",
30
+ "fn_setpoint_cmd": "GA comando setpoint",
31
+ "fn_setpoint_status": "GA stato setpoint",
32
+ "fn_rgb_cmd": "GA comando colore RGB (DPT 232.600)",
33
+ "fn_rgb_status": "GA stato colore RGB (DPT 232.600)",
34
+ "fn_ct_cmd": "GA comando temperatura colore (Kelvin)",
35
+ "fn_ct_status": "GA stato temperatura colore (Kelvin)",
36
+ "fn_smoke_ga": "GA stato allarme fumo",
37
+ "fn_co_ga": "GA stato allarme CO (opzionale)",
38
+ "fn_leak_ga": "GA stato allagamento",
39
+ "fn_co2_ga": "GA stato CO2 (ppm, DPT 9.008)",
40
+ "fn_fanspeed_cmd": "GA comando velocità ventola %",
41
+ "fn_fanspeed_status": "GA stato velocità ventola %"
42
+ },
43
+ "types": {
44
+ "onofflight": "Luce On/Off",
45
+ "dimmablelight": "Luce dimmerabile",
46
+ "rgblight": "Luce RGB (colore)",
47
+ "colortemperaturelight": "Luce bianco dinamico (temperatura colore)",
48
+ "onoffplug": "Presa (on/off)",
49
+ "temperaturesensor": "Sensore temperatura",
50
+ "humiditysensor": "Sensore umidità",
51
+ "lightsensor": "Sensore luminosità (Lux)",
52
+ "occupancysensor": "Sensore presenza",
53
+ "contactsensor": "Sensore contatto",
54
+ "windowcovering": "Tapparella / Tenda",
55
+ "thermostat": "Termostato (riscaldamento)",
56
+ "fan": "Ventola / VMC",
57
+ "smokecoalarm": "Rilevatore fumo/CO",
58
+ "waterleakdetector": "Rilevatore allagamento",
59
+ "airqualitysensor": "Sensore qualità aria (CO2)",
60
+ "robotvacuum": "Robot aspirapolvere (solo-flow, via PIN del nodo)"
61
+ },
62
+ "pairing": {
63
+ "title": "Abbinamento (Alexa, Google Home, Apple Home...)",
64
+ "not_running": "Il bridge Matter non è ancora in esecuzione. Fai il deploy, attendi qualche secondo e clicca aggiorna.",
65
+ "commissioned": "Bridge abbinato a questi controller:",
66
+ "awaiting": "In attesa di abbinamento. Scansiona il QR code o inserisci il codice manuale nella tua app Matter:",
67
+ "qr_link": "Apri il QR code nel browser",
68
+ "deploy_first": "Fai prima il deploy di questo nodo, poi clicca aggiorna.",
69
+ "reset_button": "Reset abbinamento",
70
+ "reset_confirm": "Rimuovere TUTTI i controller abbinati e riavviare l'abbinamento? I dispositivi spariranno da Alexa/Google/Apple.",
71
+ "reset_ok": "Abbinamento resettato. Il bridge è di nuovo in attesa di abbinamento."
72
+ }
73
+ },
74
+ "common": {
75
+ "ga": "GA",
76
+ "dpt": "DPT",
77
+ "name": "Nome",
78
+ "knx_gw": "GW KNX"
79
+ }
80
+ }
@@ -0,0 +1,56 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterDevice">
2
+ # Dispositivo Matter (BETA)
3
+
4
+ > Questo nodo è in **BETA**: funziona, ma alcuni dettagli potrebbero cambiare tra una release e l'altra.
5
+
6
+ ## Panoramica
7
+
8
+ Il nodo Matter Device fa da ponte tra un **dispositivo Matter** e gli **indirizzi di gruppo KNX**. Il nodo opera tramite il nodo di configurazione *Matter Controller*, che associa (commissiona) i dispositivi nella propria fabric Matter.
9
+
10
+ - **Controlla** qualsiasi dispositivo Matter associato dal bus KNX (on/off, dimmerazione, tapparelle, termostati, serrature, ...).
11
+ - **Riporta** ogni attributo del dispositivo sugli indirizzi di gruppo KNX (stati, sensori, misure di potenza, batteria...).
12
+ - Completamente generico: la lista delle mappature è costruita dagli **endpoint/cluster reali** esposti dal dispositivo.
13
+
14
+ ## Configurazione
15
+
16
+ |Campo|Descrizione|
17
+ |--|--|
18
+ | GW KNX | Gateway KNX usato per i telegrammi |
19
+ | Ctrl Matter | Il nodo di configurazione Matter Controller (dove associ i dispositivi) |
20
+ | Dispositivo | Scegli il dispositivo Matter associato dalla lista con autocompletamento |
21
+ | Mappature | Una riga per ogni mappatura indirizzo di gruppo ↔ cluster Matter |
22
+ | Leggi lo stato all'avvio | Se abilitato, il nodo emette i valori correnti in cache al deploy/connessione |
23
+ | PIN Input/Output del nodo | Abilita i pin input/output Node-RED per l'accesso Matter grezzo |
24
+
25
+ ## Mappature
26
+
27
+ La lista delle destinazioni mostra le funzioni supportate con nomi comprensibili come *"Interruttore On/Off"* o *"Potenza istantanea consumata (W)"*, filtrate su ciò che il dispositivo espone realmente e con il valore attuale tra parentesi quadre.
28
+
29
+ Ogni riga di mappatura ha una **direzione**:
30
+
31
+ - **KNX → Matter (comando)**: un telegramma ricevuto sull'indirizzo di gruppo invoca un comando del cluster Matter o scrive un attributo. Esempio: GA `1/1/1` DPT 1.001 → `OnOff.on/off` (il payload booleano seleziona automaticamente on oppure off).
32
+ - **Matter → KNX (stato)**: quando l'attributo Matter sottoscritto cambia, il valore viene convertito e scritto sull'indirizzo di gruppo. Le richieste `GroupValue_Read` ricevono in risposta il valore in cache.
33
+
34
+ I cluster più comuni vengono convertiti automaticamente in valori adatti a KNX:
35
+
36
+ |Cluster|Conversione|
37
+ |--|--|
38
+ | OnOff | booleano (DPT 1.001) |
39
+ | LevelControl | 0-254 ↔ percentuale (DPT 5.001) |
40
+ | WindowCovering | percent100ths ↔ percentuale (DPT 5.001), su/giù (DPT 1.008) |
41
+ | ColorControl | mired ↔ Kelvin (DPT 7.600) |
42
+ | Thermostat | centi-°C ↔ °C (DPT 9.001) |
43
+ | Temperatura/Umidità | centi-unità ↔ unità (DPT 9.001/9.007) |
44
+ | Luminosità | scala logaritmica ↔ Lux (DPT 9.004) |
45
+ | PowerSource | mezzi-percento ↔ percentuale batteria (DPT 5.001) |
46
+ | Potenza/Energia elettrica | mW ↔ W (DPT 14.056), mWh ↔ kWh (DPT 13.013) |
47
+
48
+ Gli altri cluster/attributi passano senza conversione; il DPT che scegli esegue la codifica KNX finale.
49
+
50
+ ## PIN del nodo
51
+
52
+ Se abiliti i PIN del nodo:
53
+
54
+ - **Input**: invia comandi grezzi: `msg.payload = { endpointId: 1, clusterId: 6, command: "toggle" }` oppure scritture di attributi: `msg.payload = { endpointId: 1, clusterId: 8, attribute: "onLevel", value: 128 }`
55
+ - **Output**: riceve ogni variazione di attributo (`msg.matter` contiene l'evento completo) e ogni evento dei cluster (pressioni di pulsanti ecc.).
56
+ </script>
@@ -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": "Clicca per scegliere un dispositivo Matter associato",
8
+ "mapping_help": "Aggiungi una riga per ogni mappatura. \"KNX → Matter\" invoca un comando del cluster (o scrive un attributo) quando arriva un telegramma sull'indirizzo di gruppo. \"Matter → KNX\" scrive il valore dell'attributo sull'indirizzo di gruppo ad ogni variazione (le richieste di lettura ricevono il valore in cache).",
9
+ "select_target": "-- seleziona la destinazione Matter --",
10
+ "stored_target": "Salvato",
11
+ "read_status_startup": "Leggi lo stato all'avvio",
12
+ "opt_yes_emit": "Sì, ed emetti i telegrammi KNX.",
13
+ "opt_no": "No",
14
+ "node_pins": "PIN Input/Output del nodo",
15
+ "node_pins_hide": "Nascondi",
16
+ "node_pins_show": "Mostra i PIN input/output del nodo",
17
+ "direction": {
18
+ "command": "KNX → Matter (comando)",
19
+ "status": "Matter → KNX (stato)"
20
+ },
21
+ "fields": {
22
+ "direction": "Direzione",
23
+ "target": "Endpoint / cluster / destinazione Matter",
24
+ "ga": "Indirizzo di gruppo",
25
+ "dpt": "DPT",
26
+ "ganame": "Nome"
27
+ },
28
+ "no_simple_targets": "Nessuna funzione supportata trovata su questo dispositivo (o il dispositivo non è ancora connesso).",
29
+ "endpoint": "Endpoint",
30
+ "friendly": {
31
+ "onoff_switch": "Interruttore On/Off (accendi/spegni)",
32
+ "onoff_toggle": "Inverti stato (toggle)",
33
+ "onoff_state": "Stato On/Off",
34
+ "level_set": "Imposta luminosità / livello (%)",
35
+ "level_state": "Luminosità / livello attuale (%)",
36
+ "colortemp_set": "Imposta temperatura colore (Kelvin)",
37
+ "colortemp_state": "Temperatura colore attuale (Kelvin)",
38
+ "cover_updown": "Tapparella Su/Giù",
39
+ "cover_stop": "Tapparella Stop",
40
+ "cover_position_set": "Porta tapparella in posizione (%)",
41
+ "cover_position_state": "Posizione attuale tapparella (%)",
42
+ "cover_tilt_set": "Inclina lamelle (%)",
43
+ "cover_tilt_state": "Inclinazione attuale lamelle (%)",
44
+ "thermo_localtemp": "Temperatura ambiente (°C)",
45
+ "thermo_heatsp_set": "Imposta setpoint riscaldamento (°C)",
46
+ "thermo_coolsp_set": "Imposta setpoint raffrescamento (°C)",
47
+ "thermo_heatsp_state": "Setpoint riscaldamento (°C)",
48
+ "thermo_coolsp_state": "Setpoint raffrescamento (°C)",
49
+ "fan_speed_set": "Imposta velocità ventola (%)",
50
+ "fan_speed_state": "Velocità ventola attuale (%)",
51
+ "lock_cmd": "Blocca/Sblocca serratura",
52
+ "lock_state": "Stato serratura (bloccata)",
53
+ "temp_measured": "Temperatura misurata (°C)",
54
+ "humidity_measured": "Umidità relativa (%)",
55
+ "illuminance_measured": "Luminosità ambiente (Lux)",
56
+ "occupancy_state": "Presenza rilevata",
57
+ "contact_state": "Stato contatto (chiuso/aperto)",
58
+ "battery_percent": "Livello batteria (%)",
59
+ "power_active": "Potenza istantanea consumata (W)",
60
+ "power_voltage": "Tensione (V)",
61
+ "power_current": "Corrente (A)",
62
+ "energy_imported": "Energia consumata (kWh)",
63
+ "identify_cmd": "Identifica dispositivo (lampeggio)",
64
+ "switch_position": "Posizione pulsante"
65
+ },
66
+ "devtype": {
67
+ "onofflight": "Luce On/Off",
68
+ "dimmablelight": "Luce dimmerabile",
69
+ "colortemperaturelight": "Luce bianco dinamico",
70
+ "extendedcolorlight": "Luce colorata",
71
+ "onoffpluginunit": "Presa (on/off)",
72
+ "dimmablepluginunit": "Presa (dimmerabile)",
73
+ "smartplug": "Presa smart",
74
+ "contactsensor": "Sensore contatto",
75
+ "lightsensor": "Sensore luminosità",
76
+ "occupancysensor": "Sensore presenza",
77
+ "temperaturesensor": "Sensore temperatura",
78
+ "humiditysensor": "Sensore umidità",
79
+ "pressuresensor": "Sensore pressione",
80
+ "flowsensor": "Sensore flusso",
81
+ "doorlock": "Serratura",
82
+ "windowcovering": "Tapparella/Tenda",
83
+ "thermostat": "Termostato",
84
+ "fan": "Ventilatore",
85
+ "genericswitch": "Pulsante/Interruttore",
86
+ "airqualitysensor": "Sensore qualità aria",
87
+ "smokecoalarm": "Rilevatore fumo/CO",
88
+ "waterleakdetector": "Rilevatore perdite acqua",
89
+ "roomairconditioner": "Condizionatore",
90
+ "airpurifier": "Purificatore aria",
91
+ "speaker": "Altoparlante",
92
+ "pumpcontroller": "Pompa",
93
+ "onofflightswitch": "Interruttore luce",
94
+ "dimmerswitch": "Interruttore dimmer",
95
+ "colordimmerswitch": "Interruttore dimmer colore",
96
+ "powersource": "Alimentazione",
97
+ "electricalsensor": "Sensore elettrico",
98
+ "bridgednode": "Dispositivo bridged",
99
+ "aggregator": "Bridge/Aggregatore",
100
+ "rootnode": "Nodo radice"
101
+ }
102
+ },
103
+ "common": {
104
+ "ga": "GA",
105
+ "dpt": "DPT",
106
+ "name": "Nome",
107
+ "knx_gw": "GW KNX"
108
+ }
109
+ }
@@ -0,0 +1,25 @@
1
+ <script type="text/markdown" data-help-name="matter-config">
2
+ # Controller Matter
3
+
4
+ ## Panoramica
5
+
6
+ Questo nodo di configurazione è un **controller Matter** completo: crea una propria *fabric* Matter e vi associa (commissiona) i tuoi dispositivi Matter. I dispositivi associati diventano poi disponibili ai nodi **Matter Device**, che li mappano sugli indirizzi di gruppo KNX.
7
+
8
+ Il controller comunica con i dispositivi tramite la **rete IP** (WiFi, Ethernet, oppure Thread attraverso un border router). Il commissioning via Bluetooth non è supportato: il dispositivo deve essere già raggiungibile in rete.
9
+
10
+ ## Associare un dispositivo
11
+
12
+ 1. Fai prima il **deploy** di questo nodo di configurazione (il controller deve essere in esecuzione).
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. Clicca **ASSOCIA**. Il commissioning può richiedere fino a un minuto.
15
+
16
+ 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
+
18
+ ## Archiviazione
19
+
20
+ Le credenziali della fabric e i dispositivi associati sono salvati nella cartella `knxultimatestorage/matter` dentro la directory utente di Node-RED. Cancellando quella cartella si perdono tutte le associazioni.
21
+
22
+ ## Rimuovere un dispositivo
23
+
24
+ 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).
25
+ </script>
@@ -0,0 +1,26 @@
1
+ {
2
+ "matter-config": {
3
+ "properties": {
4
+ "title": "Controller Matter",
5
+ "intro": "Questo nodo è un controller Matter (con una propria fabric). Associa qui i tuoi dispositivi Matter, poi usa il nodo \"Matter Device\" per mapparli sugli indirizzi di gruppo KNX. Fai prima il deploy del nodo, poi torna qui per associare i dispositivi.",
6
+ "node-config-input-name": "Nome",
7
+ "fabric_label": "Etichetta fabric",
8
+ "pairing_title": "Associa un nuovo dispositivo",
9
+ "pairing_help": "Inserisci il codice di abbinamento manuale a 11 cifre (es. 3497-011-2332) o il contenuto del QR code (MT:....). Il dispositivo deve essere raggiungibile sulla rete IP (WiFi/Ethernet o Thread tramite border router). Se il dispositivo è già associato a un altro controller (Alexa, Google, Apple), usa la funzione \"condividi/abbina con altro hub\" per ottenere un nuovo codice.",
10
+ "pairing_code": "Codice abbinamento",
11
+ "pair_button": "ASSOCIA",
12
+ "devices_title": "Dispositivi associati",
13
+ "col_name": "Nome",
14
+ "col_product": "Prodotto",
15
+ "col_state": "Stato",
16
+ "no_devices": "Nessun dispositivo ancora associato.",
17
+ "unpair_confirm": "Rimuovere (decommissionare) il dispositivo",
18
+ "unpair_ok": "Dispositivo rimosso.",
19
+ "deploy_first": "Fai prima il deploy di questo nodo di configurazione, poi riprova.",
20
+ "pairing_code_missing": "Inserisci un codice di abbinamento.",
21
+ "pairing_wait": "Abbinamento in corso. Può richiedere fino a un minuto...",
22
+ "pairing_failed": "Abbinamento fallito",
23
+ "pairing_ok": "Dispositivo associato con successo!"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,64 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterBridge">
2
+ # Matter Bridge (BETA)
3
+
4
+ > 此节点处于 **BETA** 阶段:可以正常工作,但细节可能在版本之间发生变化。
5
+
6
+ ## 概述
7
+
8
+ Matter Bridge 节点将 **KNX 组地址作为 Matter 设备**公开:Alexa、Google Home、Apple Home(或任何 Matter 控制器)只需配对此桥接器**一次**,即可看到您配置的所有 KNX 设备(使用您输入的名称),随时可通过 App 和语音控制。
9
+
10
+ 这与 *Matter Device* 节点方向相反:那里是 KNX 控制 Matter 设备,这里是 Matter 控制器控制 KNX。
11
+
12
+ ## 配置
13
+
14
+ |字段|说明|
15
+ |--|--|
16
+ | KNX 网关 | 用于报文的 KNX 网关。**可选**:没有网关时桥接器以纯 Flow 模式工作——启用节点引脚并用 Flow 消息驱动每个设备 |
17
+ | Matter 桥接器名称 | 桥接器本身在 Matter App 中显示的名称 |
18
+ | 端口 | Matter 服务器的 UDP 端口(默认 5540)。每个 Node-RED 实例只能有一个桥接器节点。 |
19
+ | 设备 | 在 Matter 上公开的 KNX 虚拟设备(见下文) |
20
+ | 启动时读取状态组地址 | 启动时向每个状态 GA 发送 `GroupValue_Read`,以填充 Matter 属性 |
21
+
22
+ ## 设备
23
+
24
+ 每一行都是 Alexa 等显示的一个设备。选择**类型**,输入助手将使用的**名称**,然后填写组地址(带 ETS 自动补全):
25
+
26
+ |类型|组地址|
27
+ |--|--|
28
+ | 开关灯、插座 | 开/关命令 GA、开/关状态 GA (DPT 1.001) |
29
+ | 调光灯 | + 调光 % 命令/状态 GA (DPT 5.001) |
30
+ | RGB 彩色灯 | + RGB 颜色命令/状态 GA (DPT 232.600)。Matter 颜色(hue/saturation 或 XY,来自 App 的色轮)与 KNX RGB 三元组相互转换 |
31
+ | 色温灯 | + 色温命令/状态 GA,开尔文 (DPT 7.600) |
32
+ | 窗帘/卷帘 | 上/下 (DPT 1.008)、停止 (DPT 1.017)、位置 % 命令/状态 (DPT 5.001)、可选位置反转 |
33
+ | 温控器(采暖) | 当前温度 GA、设定点命令/状态 GA (DPT 9.001) |
34
+ | 风扇/新风 | 速度 % 命令/状态 GA (DPT 5.001) |
35
+ | 传感器(温度、湿度、光照、人体、门磁) | 各一个状态 GA |
36
+ | 烟雾/CO 报警器 | 烟雾报警状态 GA + 可选 CO 报警状态 GA (DPT 1.005):手机上的紧急通知 |
37
+ | 漏水探测器 | 漏水状态 GA (DPT 1.005) |
38
+ | 空气质量传感器 (CO2) | CO2 状态 GA,ppm (DPT 9.008);空气质量等级(好/一般/中等/差...)自动推导 |
39
+ | 扫地机器人 | **仅 Flow**:无组地址。启用节点引脚:助手的命令("开始清扫"、暂停/继续/回充)作为 `rvcmode`/`rvccommand` 到达输出;用 `msg.payload = { device, function: "rvcstate", value: "running"\|"docked"\|"charging"\|"paused"\|"error" }` 报告状态,用 `function: "rvcmode", value: "cleaning"\|"idle"` 报告模式。用任何 Node-RED 节点集成您的 Roomba/Roborock 并公开给 Alexa/Apple |
40
+
41
+ - **命令 GA**:助手发送命令时写入 KNX 总线。
42
+ - **状态 GA**:从总线读取,保持 Matter 属性(和 App)更新。
43
+
44
+ ## 配对
45
+
46
+ 1. **部署**,等待几秒,然后重新打开节点。
47
+ 2. 配对面板显示**二维码**和**手动配对码**:在 Alexa / Google Home / Apple Home 中扫描或输入("添加 Matter 设备")。
48
+ 3. 多个控制器可以与同一个桥接器配对(Matter 多 fabric)。
49
+
50
+ **重置配对**按钮会移除所有已配对的控制器并重新开始配对广播。
51
+
52
+ ## 节点引脚
53
+
54
+ 如果启用节点的输入/输出引脚:
55
+
56
+ - **输入**:从 Flow 更新虚拟设备的 Matter 状态,无需经过 KNX 总线:`msg.payload = { device: "厨房灯", function: "onoff", value: true }`(`device` 接受名称或内部 id;`function` 为 `onoff`、`level`、`position`、`temperature`、`humidity`、`illuminance`、`occupancy`、`contact`、`currenttemp`、`setpoint` 之一)。适合把 Flow 中计算的值(如虚拟传感器)公开给 Alexa 等。
57
+ - **输出**:从 Matter 控制器收到的每个命令都转发到 Flow:`msg.topic` = 设备名称,`msg.payload` = 值,`msg.matter` = 原始命令。没有命令 GA 的设备成为**纯 Flow 设备**:命令到达您的 Flow,由您决定如何处理。
58
+
59
+ ## 说明
60
+
61
+ - Node-RED 主机必须启用 **IPv6 link-local**(Matter 标准要求),并且控制器可在本地网络访问到它。
62
+ - 桥接器身份保存在 Node-RED 用户目录的 `knxultimatestorage/matter` 中:重新部署**不**需要重新配对。
63
+ - 设备重命名和新增会被控制器自动识别;移除的设备会从 App 中消失。
64
+ </script>
@@ -0,0 +1,80 @@
1
+ {
2
+ "knxUltimateMatterBridge": {
3
+ "title": "Matter Bridge (BETA)",
4
+ "bridge_name": "Matter 桥接器名称",
5
+ "port": "端口",
6
+ "devices_help": "添加要在 Matter 上公开的 KNX 设备。\"名称\"是 Alexa/Google/Apple 显示并用于语音命令的名称。命令 GA = 助手发送命令时写入;状态 GA = 从总线读取以保持 App 更新。",
7
+ "read_status_startup": "启动时读取状态组地址",
8
+ "opt_yes": "是",
9
+ "opt_no": "否",
10
+ "node_pins": "节点输入/输出引脚",
11
+ "node_pins_hide": "隐藏",
12
+ "node_pins_show": "显示节点输入/输出引脚",
13
+ "fields": {
14
+ "type": "设备类型",
15
+ "name": "名称(Alexa 等显示)",
16
+ "name_placeholder": "例如 厨房灯",
17
+ "invert": "反转位置 %"
18
+ },
19
+ "functions": {
20
+ "fn_onoff_cmd": "开/关 命令 GA",
21
+ "fn_onoff_status": "开/关 状态 GA",
22
+ "fn_level_cmd": "调光 % 命令 GA",
23
+ "fn_level_status": "调光 % 状态 GA",
24
+ "fn_sensor_ga": "传感器状态 GA",
25
+ "fn_updown": "上/下 命令 GA",
26
+ "fn_stop": "停止 命令 GA",
27
+ "fn_position_cmd": "位置 % 命令 GA",
28
+ "fn_position_status": "位置 % 状态 GA",
29
+ "fn_currenttemp": "当前温度 GA",
30
+ "fn_setpoint_cmd": "设定点 命令 GA",
31
+ "fn_setpoint_status": "设定点 状态 GA",
32
+ "fn_rgb_cmd": "RGB 颜色命令 GA (DPT 232.600)",
33
+ "fn_rgb_status": "RGB 颜色状态 GA (DPT 232.600)",
34
+ "fn_ct_cmd": "色温命令 GA(开尔文)",
35
+ "fn_ct_status": "色温状态 GA(开尔文)",
36
+ "fn_smoke_ga": "烟雾报警状态 GA",
37
+ "fn_co_ga": "CO 报警状态 GA(可选)",
38
+ "fn_leak_ga": "漏水状态 GA",
39
+ "fn_co2_ga": "CO2 状态 GA(ppm,DPT 9.008)",
40
+ "fn_fanspeed_cmd": "风扇速度 % 命令 GA",
41
+ "fn_fanspeed_status": "风扇速度 % 状态 GA"
42
+ },
43
+ "types": {
44
+ "onofflight": "开关灯",
45
+ "dimmablelight": "调光灯",
46
+ "rgblight": "RGB 彩色灯",
47
+ "colortemperaturelight": "色温灯(可调白光)",
48
+ "onoffplug": "插座(开/关)",
49
+ "temperaturesensor": "温度传感器",
50
+ "humiditysensor": "湿度传感器",
51
+ "lightsensor": "光照传感器 (Lux)",
52
+ "occupancysensor": "人体传感器",
53
+ "contactsensor": "门磁传感器",
54
+ "windowcovering": "窗帘 / 卷帘",
55
+ "thermostat": "温控器(采暖)",
56
+ "fan": "风扇 / 新风",
57
+ "smokecoalarm": "烟雾/CO 报警器",
58
+ "waterleakdetector": "漏水探测器",
59
+ "airqualitysensor": "空气质量传感器 (CO2)",
60
+ "robotvacuum": "扫地机器人(仅 Flow,通过节点引脚)"
61
+ },
62
+ "pairing": {
63
+ "title": "配对(Alexa、Google Home、Apple Home...)",
64
+ "not_running": "Matter 桥接器尚未运行。请先部署,等待几秒后点击刷新。",
65
+ "commissioned": "桥接器已与以下控制器配对:",
66
+ "awaiting": "等待配对。请在您的 Matter App 中扫描二维码或输入手动配对码:",
67
+ "qr_link": "在浏览器中打开二维码",
68
+ "deploy_first": "请先部署此节点,然后点击刷新。",
69
+ "reset_button": "重置配对",
70
+ "reset_confirm": "移除所有已配对的控制器并重新开始配对?设备将从 Alexa/Google/Apple 中消失。",
71
+ "reset_ok": "配对已重置。桥接器重新进入配对模式。"
72
+ }
73
+ },
74
+ "common": {
75
+ "ga": "GA",
76
+ "dpt": "DPT",
77
+ "name": "名称",
78
+ "knx_gw": "KNX 网关"
79
+ }
80
+ }
@@ -0,0 +1,56 @@
1
+ <script type="text/markdown" data-help-name="knxUltimateMatterDevice">
2
+ # Matter 设备 (BETA)
3
+
4
+ > 此节点处于 **BETA** 阶段:可以正常工作,但细节可能在版本之间发生变化。
5
+
6
+ ## 概述
7
+
8
+ Matter Device 节点在 **Matter 设备**和 **KNX 组地址**之间架起桥梁。该节点通过 *Matter 控制器*配置节点工作,后者将设备调试进自己的 Matter fabric。
9
+
10
+ - 从 KNX 总线**控制**任何已配对的 Matter 设备(开/关、调光、窗帘、温控器、门锁等)。
11
+ - 在 KNX 组地址上**跟踪**设备的每个属性(状态反馈、传感器、功率测量、电池等)。
12
+ - 完全通用:映射列表基于设备**真实暴露的端点/集群**构建。
13
+
14
+ ## 配置
15
+
16
+ |字段|说明|
17
+ |--|--|
18
+ | KNX 网关 | 用于报文的 KNX 网关 |
19
+ | Matter 控制器 | Matter 控制器配置节点(在那里配对设备) |
20
+ | 设备 | 通过自动补全选择已配对的 Matter 设备 |
21
+ | 映射 | 每行一个组地址 ↔ Matter 集群映射 |
22
+ | 启动时读取状态 | 启用后,节点在部署/连接时发送当前缓存的值 |
23
+ | 节点输入/输出引脚 | 启用 Node-RED 引脚以进行原始 Matter 访问 |
24
+
25
+ ## 映射
26
+
27
+ 目标列表以易懂的名称显示支持的功能,例如*"开/关"*或*"瞬时功率 (W)"*,按设备实际暴露的功能过滤,并在方括号中显示当前值。
28
+
29
+ 每行映射有一个**方向**:
30
+
31
+ - **KNX → Matter(命令)**:组地址上收到的报文调用 Matter 集群命令或写入属性。示例:GA `1/1/1` DPT 1.001 → `OnOff.on/off`(布尔值自动选择开或关)。
32
+ - **Matter → KNX(状态)**:订阅的 Matter 属性变化时,其值被转换并写入组地址。`GroupValue_Read` 请求以缓存值应答。
33
+
34
+ 常见集群自动转换为适合 KNX 的值:
35
+
36
+ |集群|转换|
37
+ |--|--|
38
+ | OnOff | 布尔 (DPT 1.001) |
39
+ | LevelControl | 0-254 ↔ 百分比 (DPT 5.001) |
40
+ | WindowCovering | percent100ths ↔ 百分比 (DPT 5.001),上/下 (DPT 1.008) |
41
+ | ColorControl | mireds ↔ 开尔文 (DPT 7.600) |
42
+ | Thermostat | 厘°C ↔ °C (DPT 9.001) |
43
+ | 温度/湿度 | 厘单位 ↔ 单位 (DPT 9.001/9.007) |
44
+ | 照度 | 对数刻度 ↔ Lux (DPT 9.004) |
45
+ | PowerSource | 半百分比 ↔ 电池百分比 (DPT 5.001) |
46
+ | 电功率/电能 | mW ↔ W (DPT 14.056),mWh ↔ kWh (DPT 13.013) |
47
+
48
+ 其他集群/属性原样传递;您选择的 DPT 执行最终的 KNX 编码。
49
+
50
+ ## 节点引脚
51
+
52
+ 如果启用节点引脚:
53
+
54
+ - **输入**:发送原始命令:`msg.payload = { endpointId: 1, clusterId: 6, command: "toggle" }` 或属性写入:`msg.payload = { endpointId: 1, clusterId: 8, attribute: "onLevel", value: 128 }`
55
+ - **输出**:接收每个属性变化(`msg.matter` 包含完整事件)和每个集群事件(按钮按下等)。
56
+ </script>
@@ -0,0 +1,109 @@
1
+ {
2
+ "knxUltimateMatterDevice": {
3
+ "title": "Matter 设备 (BETA)",
4
+ "paletteLabel": "Matter Device (BETA)",
5
+ "matter_controller": "Matter 控制器",
6
+ "matter_device": "设备",
7
+ "device_placeholder": "点击选择已配对的 Matter 设备",
8
+ "mapping_help": "每个映射添加一行。\"KNX → Matter\" 在组地址收到报文时调用集群命令(或写入属性)。\"Matter → KNX\" 在属性变化时将其值写入组地址(读请求以缓存值应答)。",
9
+ "select_target": "-- 选择 Matter 目标 --",
10
+ "stored_target": "已保存",
11
+ "read_status_startup": "启动时读取状态",
12
+ "opt_yes_emit": "是,并发送 KNX 报文。",
13
+ "opt_no": "否",
14
+ "node_pins": "节点输入/输出引脚",
15
+ "node_pins_hide": "隐藏",
16
+ "node_pins_show": "显示节点输入/输出引脚",
17
+ "direction": {
18
+ "command": "KNX → Matter(命令)",
19
+ "status": "Matter → KNX(状态)"
20
+ },
21
+ "fields": {
22
+ "direction": "方向",
23
+ "target": "Matter 端点 / 集群 / 目标",
24
+ "ga": "组地址",
25
+ "dpt": "DPT",
26
+ "ganame": "名称"
27
+ },
28
+ "no_simple_targets": "此设备上未找到支持的功能(或设备尚未连接)。",
29
+ "endpoint": "端点",
30
+ "friendly": {
31
+ "onoff_switch": "开/关(打开/关闭)",
32
+ "onoff_toggle": "切换状态(toggle)",
33
+ "onoff_state": "开/关状态",
34
+ "level_set": "设置亮度 / 级别 (%)",
35
+ "level_state": "当前亮度 / 级别 (%)",
36
+ "colortemp_set": "设置色温(开尔文)",
37
+ "colortemp_state": "当前色温(开尔文)",
38
+ "cover_updown": "窗帘 上/下",
39
+ "cover_stop": "窗帘 停止",
40
+ "cover_position_set": "窗帘移动到位置 (%)",
41
+ "cover_position_state": "当前窗帘位置 (%)",
42
+ "cover_tilt_set": "叶片倾斜 (%)",
43
+ "cover_tilt_state": "当前叶片倾斜 (%)",
44
+ "thermo_localtemp": "室内温度 (°C)",
45
+ "thermo_heatsp_set": "设置采暖设定点 (°C)",
46
+ "thermo_coolsp_set": "设置制冷设定点 (°C)",
47
+ "thermo_heatsp_state": "采暖设定点 (°C)",
48
+ "thermo_coolsp_state": "制冷设定点 (°C)",
49
+ "fan_speed_set": "设置风扇速度 (%)",
50
+ "fan_speed_state": "当前风扇速度 (%)",
51
+ "lock_cmd": "上锁/解锁",
52
+ "lock_state": "锁状态(已上锁)",
53
+ "temp_measured": "测量温度 (°C)",
54
+ "humidity_measured": "相对湿度 (%)",
55
+ "illuminance_measured": "照度 (Lux)",
56
+ "occupancy_state": "检测到人员",
57
+ "contact_state": "触点状态(闭合/断开)",
58
+ "battery_percent": "电池电量 (%)",
59
+ "power_active": "瞬时功率 (W)",
60
+ "power_voltage": "电压 (V)",
61
+ "power_current": "电流 (A)",
62
+ "energy_imported": "累计耗电量 (kWh)",
63
+ "identify_cmd": "识别设备(闪烁)",
64
+ "switch_position": "按钮位置"
65
+ },
66
+ "devtype": {
67
+ "onofflight": "开关灯",
68
+ "dimmablelight": "调光灯",
69
+ "colortemperaturelight": "色温灯",
70
+ "extendedcolorlight": "彩色灯",
71
+ "onoffpluginunit": "插座(开/关)",
72
+ "dimmablepluginunit": "插座(可调光)",
73
+ "smartplug": "智能插座",
74
+ "contactsensor": "门磁传感器",
75
+ "lightsensor": "光照传感器",
76
+ "occupancysensor": "人体传感器",
77
+ "temperaturesensor": "温度传感器",
78
+ "humiditysensor": "湿度传感器",
79
+ "pressuresensor": "压力传感器",
80
+ "flowsensor": "流量传感器",
81
+ "doorlock": "门锁",
82
+ "windowcovering": "窗帘",
83
+ "thermostat": "温控器",
84
+ "fan": "风扇",
85
+ "genericswitch": "按钮/开关",
86
+ "airqualitysensor": "空气质量传感器",
87
+ "smokecoalarm": "烟雾/CO 报警器",
88
+ "waterleakdetector": "漏水探测器",
89
+ "roomairconditioner": "空调",
90
+ "airpurifier": "空气净化器",
91
+ "speaker": "音箱",
92
+ "pumpcontroller": "水泵",
93
+ "onofflightswitch": "灯开关",
94
+ "dimmerswitch": "调光开关",
95
+ "colordimmerswitch": "彩色调光开关",
96
+ "powersource": "电源",
97
+ "electricalsensor": "电量传感器",
98
+ "bridgednode": "桥接设备",
99
+ "aggregator": "桥接器/聚合器",
100
+ "rootnode": "根节点"
101
+ }
102
+ },
103
+ "common": {
104
+ "ga": "GA",
105
+ "dpt": "DPT",
106
+ "name": "名称",
107
+ "knx_gw": "KNX 网关"
108
+ }
109
+ }
@@ -0,0 +1,25 @@
1
+ <script type="text/markdown" data-help-name="matter-config">
2
+ # Matter 控制器
3
+
4
+ ## 概述
5
+
6
+ 此配置节点是一个完整的 **Matter 控制器**:它创建自己的 Matter *fabric* 并将您的 Matter 设备配对(调试)进来。配对后的设备可供 **Matter Device** 节点使用,将它们映射到 KNX 组地址。
7
+
8
+ 控制器通过 **IP 网络**(WiFi、以太网或经边界路由器的 Thread)与设备通信。不支持蓝牙配对:设备必须已经可以通过网络访问。
9
+
10
+ ## 配对设备
11
+
12
+ 1. 先**部署**此配置节点(控制器必须已运行)。
13
+ 2. 重新打开节点并输入**配对码**:11 位手动配对码(例如 `3497-011-2332`)或二维码内容(`MT:....`)。
14
+ 3. 点击**配对**。调试过程最多可能需要一分钟。
15
+
16
+ 如果设备是全新的且仅支持蓝牙配对,请先用厂商 App 或其他 Matter 控制器(Alexa、Google Home、Apple Home)配对,然后使用其**"与其他中枢共享/配对"**功能为 KNX-Ultimate 生成新的配对码。这样设备可以同时加入多个 fabric。
17
+
18
+ ## 存储
19
+
20
+ Fabric 凭据和已配对设备保存在 Node-RED 用户目录下的 `knxultimatestorage/matter` 文件夹中。删除该文件夹将移除所有配对。
21
+
22
+ ## 移除设备
23
+
24
+ 使用已配对设备列表中的垃圾桶按钮。控制器会尝试正确地解除设备调试;如果设备无法访问,仍会从 fabric 中移除(之后可能需要对设备进行恢复出厂设置)。
25
+ </script>