node-red-contrib-knx-ultimate 6.0.11 → 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 +11 -3
- package/nodes/knxUltimateHueLight.html +1 -5
- package/nodes/knxUltimateMatterControllerDevice.html +584 -47
- package/nodes/knxUltimateMatterControllerDevice.js +37 -0
- package/nodes/locales/de/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/de/knxUltimateMatterControllerDevice.html +23 -3
- package/nodes/locales/de/knxUltimateMatterControllerDevice.json +39 -1
- package/nodes/locales/de/matter-config.html +11 -1
- package/nodes/locales/de/matter-config.json +12 -0
- package/nodes/locales/en/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/en/knxUltimateMatterControllerDevice.html +23 -3
- package/nodes/locales/en/knxUltimateMatterControllerDevice.json +39 -1
- package/nodes/locales/en/matter-config.html +11 -1
- package/nodes/locales/en/matter-config.json +12 -0
- package/nodes/locales/es/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/es/knxUltimateMatterControllerDevice.html +23 -3
- package/nodes/locales/es/knxUltimateMatterControllerDevice.json +39 -1
- package/nodes/locales/es/matter-config.html +11 -1
- package/nodes/locales/es/matter-config.json +12 -0
- package/nodes/locales/fr/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.html +23 -3
- package/nodes/locales/fr/knxUltimateMatterControllerDevice.json +47 -1
- package/nodes/locales/fr/matter-config.html +11 -1
- package/nodes/locales/fr/matter-config.json +12 -0
- package/nodes/locales/it/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/it/knxUltimateMatterControllerDevice.html +23 -3
- package/nodes/locales/it/knxUltimateMatterControllerDevice.json +39 -1
- package/nodes/locales/it/matter-config.html +11 -1
- package/nodes/locales/it/matter-config.json +12 -0
- package/nodes/locales/zh-CN/knxUltimateMatterBridge.html +0 -2
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.html +23 -3
- package/nodes/locales/zh-CN/knxUltimateMatterControllerDevice.json +47 -1
- 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 +53 -6
- 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/index.js +3 -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/universal.js +462 -0
- package/nodes/utils/matterControllerProfiles/windowCovering.js +0 -1
- package/nodes/utils/matterControllerSemanticInput.js +212 -0
- package/nodes/utils/matterEngine.mjs +120 -17
- package/package.json +1 -1
- package/resources/matterQrScanner.js +98 -0
- package/resources/zxing-browser-0.2.0.min.js +1 -0
- package/resources/zxing-browser-LICENSE.txt +21 -0
|
@@ -11,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",
|
|
@@ -84,7 +114,23 @@
|
|
|
84
114
|
"matter_controller": "Contrôleur Matter",
|
|
85
115
|
"matter_device": "Appareil Matter",
|
|
86
116
|
"device_type": "Type d'appareil",
|
|
87
|
-
"matter_section": "Appareil Matter"
|
|
117
|
+
"matter_section": "Appareil Matter",
|
|
118
|
+
"controller_mode": "Mode",
|
|
119
|
+
"single_mode": "Appareil unique",
|
|
120
|
+
"universal_mode": "Mode universel (tous les appareils Matter)",
|
|
121
|
+
"universal_mode_description": "Écoute et contrôle tous les appareils Matter connectés à ce contrôleur. Le mode universel fonctionne sans mappages KNX.",
|
|
122
|
+
"universal_service": "Service",
|
|
123
|
+
"universal_service_battery_monitor": "Moniteur universel de batteries",
|
|
124
|
+
"universal_service_all_events": "Tous les événements Matter",
|
|
125
|
+
"universal_battery_threshold": "Seuil de batterie faible",
|
|
126
|
+
"universal_low_battery_ga": "GA alarme batterie",
|
|
127
|
+
"universal_low_battery_text_ga": "GA nom appareil",
|
|
128
|
+
"universal_battery_only_low": "Émettre uniquement les batteries faibles",
|
|
129
|
+
"universal_emit_initial": "Émettre l’instantané initial des batteries",
|
|
130
|
+
"universal_include_raw": "Inclure l’événement Matter brut",
|
|
131
|
+
"universal_mode_status": "Mode Matter universel",
|
|
132
|
+
"universal_mode_locate_disabled": "La fonction Localiser n’est pas disponible en mode universel.",
|
|
133
|
+
"universal_controller_name": "Contrôleur Matter universel"
|
|
88
134
|
},
|
|
89
135
|
"common": {
|
|
90
136
|
"ga": "Géorgie",
|
|
@@ -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",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateMatterControllerDevice">
|
|
2
|
-
# Control Matter from KNX (BETA)
|
|
3
|
-
|
|
4
2
|
> Questo nodo è in **BETA**: il comportamento può cambiare mentre l'implementazione Matter viene rifinita.
|
|
5
3
|
|
|
6
4
|
Questo nodo controlla da KNX un endpoint Matter già abbinato. Seleziona il dispositivo Matter e l'editor rileva le sue capability, mostrando solo le mappature KNX coerenti con quell'endpoint.
|
|
@@ -21,9 +19,31 @@ Sostituisce i nodi Matter separati non pubblicati e mantiene tutta la UI luce qu
|
|
|
21
19
|
| Sensori | Gli endpoint sensore mostrano il relativo GA di misura/stato solo quando supportato: temperatura, umidità, illuminamento, presenza, contatto e batteria. |
|
|
22
20
|
| Read at startup | Pubblica il valore Matter in cache al deploy/avvio o quando il dispositivo si riconnette. |
|
|
23
21
|
| Update local state from KNX write | Aggiorna la cache locale Matter/KNX quando arriva una scrittura su un GA KNX configurato. |
|
|
24
|
-
| 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.
|
|
31
|
+
|
|
32
|
+
## Modalità Universale
|
|
33
|
+
|
|
34
|
+
Seleziona **Modalità Universale** nel selettore **Modalità** per ricevere tutti i report attributo, gli eventi cluster e le inizializzazioni dei dispositivi. Ha sempre un input e un output e non usa le mappature del singolo endpoint. Il gateway KNX è opzionale e serve solo alle GA allarme/testo del Monitor batterie.
|
|
35
|
+
|
|
36
|
+
Il **Monitor batterie universale** cerca Power Source in tutti gli endpoint e conserva lo stato normalizzato completo. Le GA KNX opzionali pubblicano l'allarme complessivo come DPT 1.005 e ciclano ogni 2 secondi i nomi dei device scarichi come DPT 16.001. Invia `{payload:{action:"getAllBatteries"}}` per ottenere l'inventario in cache.
|
|
37
|
+
|
|
38
|
+
L'output contiene il valore raw in `msg.payload` e i dati di instradamento in `msg.matter` (`source`, `nodeId`, `endpointId`, `clusterId`, nome attributo/evento). L'input usa `msg.nodeId`, `msg.endpointId`, `msg.clusterId` e `msg.command` con `msg.args`, oppure `msg.attribute`; aggiungi `msg.value` per scrivere, omettilo per leggere. Gli stessi campi possono stare in `msg.matter`.
|
|
39
|
+
|
|
40
|
+
Esempi: `{nodeId:"100",endpointId:1,clusterId:6,command:"on",args:{}}` accende; `{nodeId:"100",endpointId:1,clusterId:47,attribute:"batPercentRemaining"}` legge la batteria. Il valore batteria resta nell'unità raw Matter a mezzi punti percentuali; dividilo per due in un nodo Function.
|
|
25
41
|
|
|
26
42
|
## Comportamento
|
|
27
43
|
|
|
28
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.
|
|
29
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",
|
|
@@ -92,7 +114,23 @@
|
|
|
92
114
|
"matter_controller": "Controller Matter",
|
|
93
115
|
"matter_device": "Dispositivo Matter",
|
|
94
116
|
"device_type": "Tipo dispositivo",
|
|
95
|
-
"matter_section": "Dispositivo Matter"
|
|
117
|
+
"matter_section": "Dispositivo Matter",
|
|
118
|
+
"controller_mode": "Modalità",
|
|
119
|
+
"single_mode": "Dispositivo singolo",
|
|
120
|
+
"universal_mode": "Modalità universale (tutti i dispositivi Matter)",
|
|
121
|
+
"universal_mode_description": "Ascolta e controlla tutti i dispositivi Matter collegati a questo controller. La Modalità Universale funziona senza mappature KNX.",
|
|
122
|
+
"universal_service": "Servizio",
|
|
123
|
+
"universal_service_battery_monitor": "Monitor batterie universale",
|
|
124
|
+
"universal_service_all_events": "Tutti gli eventi Matter",
|
|
125
|
+
"universal_battery_threshold": "Soglia batteria scarica",
|
|
126
|
+
"universal_low_battery_ga": "GA allarme batteria",
|
|
127
|
+
"universal_low_battery_text_ga": "GA nome device scarico",
|
|
128
|
+
"universal_battery_only_low": "Emetti solo batterie scariche",
|
|
129
|
+
"universal_emit_initial": "Emetti snapshot iniziale batterie",
|
|
130
|
+
"universal_include_raw": "Includi evento Matter raw",
|
|
131
|
+
"universal_mode_status": "Modalità Matter universale",
|
|
132
|
+
"universal_mode_locate_disabled": "La funzione Trova non è disponibile in Modalità Universale.",
|
|
133
|
+
"universal_controller_name": "Controller Matter Universale"
|
|
96
134
|
},
|
|
97
135
|
"common": {
|
|
98
136
|
"ga": "GA",
|
|
@@ -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",
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateMatterControllerDevice">
|
|
2
|
-
# 从 KNX 控制 Matter (BETA)
|
|
3
|
-
|
|
4
2
|
> 此节点为 **BETA**:Matter 实现继续完善时,行为可能会变化。
|
|
5
3
|
|
|
6
4
|
此节点用于从 KNX 控制已经配对的 Matter endpoint。选择 Matter 设备后,编辑器会检测它的能力,并只显示与该 endpoint 匹配的 KNX 映射。
|
|
@@ -21,9 +19,31 @@
|
|
|
21
19
|
| 传感器 | 传感器 endpoint 只在支持时显示对应测量/状态 GA:温度、湿度、照度、占用、接触和电池。 |
|
|
22
20
|
| Read at startup | 在部署/启动或设备重新连接时发布缓存的 Matter 值。 |
|
|
23
21
|
| Update local state from KNX write | 当配置的 KNX GA 收到写入 telegram 时,更新本地 Matter/KNX 缓存。 |
|
|
24
|
-
| 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 已由节点选择。
|
|
31
|
+
|
|
32
|
+
## 通用模式
|
|
33
|
+
|
|
34
|
+
选择 **通用模式** 可监视所有设备。该节点始终有一个输入和一个输出,不使用单个 endpoint 映射。KNX 网关为可选,仅用于电池监视器的报警/文本组地址。
|
|
35
|
+
|
|
36
|
+
**通用电池监视器** 会缓存完整电池状态。可选 KNX 组地址以 DPT 1.005 输出总报警,并以 DPT 16.001 每 2 秒轮播低电量设备名称。发送 `{payload:{action:"getAllBatteries"}}` 可获取缓存清单。
|
|
37
|
+
|
|
38
|
+
输出将原始值放在 `msg.payload`,并在 `msg.matter` 中提供路由信息(`source`、`nodeId`、`endpointId`、`clusterId`、属性/事件名称)。输入使用 `msg.nodeId`、`msg.endpointId`、`msg.clusterId`,以及带 `msg.args` 的 `msg.command` 或 `msg.attribute`;添加 `msg.value` 表示写入,省略则读取。这些字段也可放在 `msg.matter` 下。
|
|
39
|
+
|
|
40
|
+
示例:`{nodeId:"100",endpointId:1,clusterId:6,command:"on",args:{}}` 执行开启;`{nodeId:"100",endpointId:1,clusterId:47,attribute:"batPercentRemaining"}` 读取电池。电池值保留 Matter 原始的半百分比单位,需要百分比时可在 Function 节点中除以二。
|
|
25
41
|
|
|
26
42
|
## 行为
|
|
27
43
|
|
|
28
44
|
节点根据 Matter 更新和 KNX 写入维护本地缓存,用该缓存响应 KNX 读取请求,并可在启动时读取/发送值。节点只监听已配置的组地址,因此会忽略无关的 KNX 流量。
|
|
45
|
+
|
|
46
|
+
每个已配对设备使用独立且有序的命令队列。因此,离线、超时或已移除的设备不会延迟使用同一 KNX 组地址的其他 Matter 设备。仍引用已移除设备的节点会立即拒绝命令,并以红色显示 **Device no longer commissioned**;请选择有效的 Matter 设备,或删除遗留的 Controller 节点。
|
|
47
|
+
|
|
48
|
+
设备不可用错误会保持锁定:后续 KNX 和 flow 命令将被忽略,且无法覆盖红色状态。一旦该 Matter 设备报告 `connected`,节点会自动恢复;打开节点编辑器也会解除锁定,以便手动重试。
|
|
29
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": "强制日间模式",
|
|
@@ -84,7 +114,23 @@
|
|
|
84
114
|
"matter_controller": "Matter 控制器",
|
|
85
115
|
"matter_device": "Matter 设备",
|
|
86
116
|
"device_type": "设备类型",
|
|
87
|
-
"matter_section": "Matter 设备"
|
|
117
|
+
"matter_section": "Matter 设备",
|
|
118
|
+
"controller_mode": "模式",
|
|
119
|
+
"single_mode": "单个设备",
|
|
120
|
+
"universal_mode": "通用模式(所有 Matter 设备)",
|
|
121
|
+
"universal_mode_description": "监听并控制连接到此控制器的所有 Matter 设备。通用模式无需 KNX 映射即可工作。",
|
|
122
|
+
"universal_service": "服务",
|
|
123
|
+
"universal_service_battery_monitor": "通用电池监视器",
|
|
124
|
+
"universal_service_all_events": "所有 Matter 事件",
|
|
125
|
+
"universal_battery_threshold": "低电量阈值",
|
|
126
|
+
"universal_low_battery_ga": "低电量报警组地址",
|
|
127
|
+
"universal_low_battery_text_ga": "低电量设备名称组地址",
|
|
128
|
+
"universal_battery_only_low": "仅输出低电量设备",
|
|
129
|
+
"universal_emit_initial": "输出初始电池快照",
|
|
130
|
+
"universal_include_raw": "包含原始 Matter 事件",
|
|
131
|
+
"universal_mode_status": "Matter 通用模式",
|
|
132
|
+
"universal_mode_locate_disabled": "通用模式下无法使用定位功能。",
|
|
133
|
+
"universal_controller_name": "Matter 通用控制器"
|
|
88
134
|
},
|
|
89
135
|
"common": {
|
|
90
136
|
"ga": "组地址",
|
|
@@ -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": "产品",
|