# Matter

> Référence du pilote Matter : les réseaux Wi-Fi et Thread que joignent les équipements, la mise en service par Bluetooth dans le Fabric local, le déroulement d'Appairer un équipement, l'identité de nœud, les tags qui viennent de l'équipement et ce que fait l'écriture de chacun.

Le pilote Matter lit des équipements **Matter** : capteurs intelligents, prises, luminaires et
équipements semblables certifiés pour la norme Matter, qu'ils joignent le réseau par **Wi-Fi**
ou par **Thread**. C'est un seul pilote pour les deux. Le réseau n'est que le chemin d'entrée :
une fois qu'un équipement y est, Ganter Lab le lit de la même façon, par le réseau local.

Ganter Lab agit comme un **contrôleur Matter avec son propre Fabric local** : il met chaque
équipement en service une fois par **Bluetooth basse consommation** sur cet ordinateur, lui
remet les identifiants d'un réseau inscrit sur la carte **Réseaux** du pilote, et lui parle
ensuite par le réseau local : par votre routeur pour un équipement Wi-Fi, par votre routeur de
bordure Thread pour un équipement Thread.

Vous ne dites jamais à Ganter Lab si un équipement est Wi-Fi ou Thread : **l'équipement le dit
lui-même**. Une fois la session Bluetooth ouverte, Ganter Lab lit dans l'équipement quel type
de réseau il joint, avant d'y écrire quoi que ce soit, et s'arrête avec un message à part quand
le réseau choisi est de l'autre type.

Cela inverse l'ordre habituel de mise en place. Un équipement Matter ne part pas d'un hôte et
d'un port : il part d'une **cérémonie d'appairage**, et seule l'identité stable du nœud mis en
service est enregistrée ensuite.

Ce qu'il vous faut avant l'appairage :

- Un **adaptateur Bluetooth basse consommation** sur cet ordinateur, allumé, et Windows qui
  autorise Ganter Lab à l'employer.
- Le réseau que l'équipement va joindre, inscrit sur la carte **Réseaux** : pour un équipement
  Wi-Fi, le nom du Wi-Fi et son mot de passe; pour un équipement Thread, un réseau Thread
  existant avec un routeur de bordure, et son **jeu de données opérationnel actif** complet.
  Ganter Lab joint les équipements à votre réseau; il ne peut pas en inventer les
  identifiants.
- Le **code d'installation** de l'équipement, imprimé sur l'équipement ou son emballage, et
  l'équipement en mode appairage.

## Réseaux {#networks}

Le volet du pilote Matter porte une carte intitulée **Réseaux** : les réseaux Wi-Fi et Thread
que joignent les équipements, un par ligne. Un réseau s'inscrit **une fois, avant le premier
équipement**, et sert à tous les équipements appairés dedans : appairer une deuxième lampe sur
le même Wi-Fi ne demande plus rien. La carte n'est dessinée que pour un rôle qui peut
configurer le Connector, parce qu'elle garde les secrets des réseaux et ne sert qu'à
l'appairage.

La tête de la carte porte ses commandes, dans cet ordre :

| Commande | Ce qu'elle fait | Ce qu'elle ne fait pas |
|---|---|---|
| **Ajouter un réseau Wi-Fi** | Ajoute un réseau Wi-Fi et le sélectionne. Quand cet ordinateur est connecté à un Wi-Fi dont le nom n'est pas encore inscrit, le nouveau réseau prend ce nom; sinon, il commence sans nom, et c'est vous qui l'écrivez. Windows ne remet que le nom, et seulement quand il laisse les applications connaître l'emplacement de cet ordinateur (Windows 11 demande cette autorisation); le mot de passe, c'est toujours vous qui le tapez. | Elle ne lit pas le mot de passe dans Windows et ne vérifie pas que le réseau existe. |
| **Ajouter un réseau Thread** | Ajoute un réseau Thread et le sélectionne, sous un nom provisoire (numéroté quand il est déjà pris) jusqu'à ce que vous lui donniez le vôtre, en attendant son jeu de données. | Elle ne parle pas au routeur de bordure : Ganter Lab n'utilise que le jeu de données du réseau que le routeur de bordure a créé. |
| **Retirer le réseau** | Retire le réseau sélectionné, après une confirmation qui le nomme et dit que les équipements déjà appairés ne sont pas touchés. Sans réseau sélectionné, elle reste dessinée et grisée, et son infobulle le dit. | Elle ne touche pas aux équipements déjà appairés dans ce réseau : ils continuent de fonctionner et gardent son nom dans leur champ **Réseau**. |

Le tableau montre, pour chaque réseau, son **Nom**, son **Type de réseau** (**Réseau Wi-Fi** ou
**Réseau Thread**) et son **État** : **Prêt pour l'appairage**, ou ce qui manque encore au
réseau. Un réseau dont le nom n'est pas encore écrit s'affiche **Réseau sans nom**.

Les champs du réseau sélectionné se modifient sur place, sous le tableau, et s'enregistrent
d'eux-mêmes. Une valeur que les règles ci-dessous refusent n'est pas écrite, et le champ dit
pourquoi.

| Type | Champ | Ce que c'est | Format |
|---|---|---|---|
| Wi-Fi | **Nom du Wi-Fi** | Le nom (SSID) remis à l'équipement, exactement comme le routeur le diffuse : les majuscules comptent. Chaque nom de Wi-Fi s'inscrit une fois. | De 1 à 32 octets de texte (UTF-8). |
| Wi-Fi | **Mot de passe** | Le mot de passe du Wi-Fi remis à l'équipement. | Vide pour un réseau ouvert; sinon de 8 à 63 caractères ASCII imprimables (une phrase de passe WPA), ou exactement 64 chiffres hexadécimaux (la clé brute). |
| Thread | **Nom** | Votre nom pour le réseau, pour le reconnaître à l'appairage et sur chaque équipement. Chaque nom de réseau Thread s'inscrit une fois. | Texte libre. |
| Thread | **Jeu de données opérationnel Thread** | Le jeu de données actif complet de votre réseau Thread, remis par l'administrateur du réseau ou par son routeur de bordure. Home Assistant l'affiche; Alexa et Apple, non. | Du texte hexadécimal (les espaces et un préfixe `hex:` sont tolérés), 254 octets au plus une fois décodé. Ce doit être le jeu de données complet : Active Timestamp, Channel, Channel Mask, Extended PAN ID, Mesh-Local Prefix, Network Key, Network Name, PAN ID, PSKc et Security Policy doivent tous être présents, et un jeu de données partiel ou malformé est refusé avec l'élément manquant nommé. |

Deux choses décident si un équipement Wi-Fi peut être appairé, et la carte les dit toutes deux
à côté des champs :

- **La plupart des équipements ne joignent que des réseaux 2,4 GHz.** Un routeur qui diffuse
  un même nom en 2,4 GHz et en 5 GHz les sert; un réseau qui n'existe qu'en 5 GHz, non.
- **Cet ordinateur et les équipements doivent être sur le même réseau local.** Un réseau
  invité, ou l'isolation des clients activée sur le routeur, empêche l'ordinateur de trouver
  les équipements une fois qu'ils ont joint le réseau.

Un réseau ne sert à l'appairage que tant que son secret respecte ces règles : un réseau Wi-Fi
avec un nom et un mot de passe valides (vide compris), un réseau Thread avec un jeu de données
valide.

Modifier un réseau change ce que le **prochain** appairage remet, jamais ce qu'un équipement a
déjà reçu. Un équipement qui doit passer à un autre réseau, ou dont le routeur a reçu un
nouveau mot de passe, est réinitialisé et appairé de nouveau.

## Le déroulement d'Appairer un équipement {#the-pair-device-flow}

Sur le pilote Matter, la barre de commandes offre **Appairer un équipement** là où les autres
pilotes offrent Ajouter un équipement, et l'entrée Matter du menu Nouveau… de la colonne aussi. Tant qu'aucun réseau ne sert à l'appairage, la commande
reste dessinée et grisée, avec l'infobulle « Ajoutez d'abord le réseau que l'équipement doit
rejoindre. » Sinon, elle ouvre un formulaire :

| Champ | Ce que c'est | Format | Par défaut |
|---|---|---|---|
| Nom de l'équipement | Le nom modifiable que l'équipement portera dans le Connector. | Texte libre | `Matter device` |
| Code d'installation Matter | Le code d'appairage manuel officiel, ou la charge utile QR complète. Saisi masqué, avec une commande pour le révéler. | Un code manuel de 11 ou 21 chiffres (les tirets et les espaces sont ignorés; le chiffre de contrôle est vérifié), ou la charge utile QR complète commençant par `MT:`. Une charge utile QR qui n'annonce pas la mise en service par Bluetooth est refusée, comme le sont les mots de passe réservés ou hors plage. | vide |
| Réseau | Le réseau inscrit que l'équipement va joindre. Avec un seul réseau qui sert, le formulaire dit sur une ligne de quel réseau il s'agit et de quel type, sans rien à choisir; avec plusieurs, c'est une liste de choix. | L'un des réseaux qui servent sur la carte **Réseaux** | le seul, quand il n'y en a qu'un |
| Dossier de destination | Seulement quand le Nouvel équipement d'un dossier a ouvert le formulaire : le dossier où l'équipement appairé est classé. Ouvert par Appairer un équipement, cette ligne n'existe pas et l'équipement reste au niveau propre du pilote. | Lecture seule | le dossier qui a ouvert le formulaire |

Un dossier du pilote Matter propose **Nouvel équipement** (sur son tableau Équipements, dans son menu du clic droit et dans Nouveau… > Matter > `<Dossier>`). Il ouvre ce même formulaire, grisé de la même façon tant qu'aucun réseau ne sert, et l'équipement appairé est classé dans ce dossier.

**Appairer un équipement** dans le formulaire reste désactivé tant que le nom et le code
d'installation ne sont pas remplis ou qu'aucun réseau ne sert. Pendant l'appairage, le
formulaire rapporte son étape : **Valider** (vérification du code et du secret du réseau),
**Trouver** (recherche de l'équipement par Bluetooth), **Appairer** (authentification avec le
code d'installation et lecture du type de réseau que l'équipement joint), **Rejoindre le
réseau** (envoi du réseau à l'équipement, puis recherche de l'équipement sur le réseau local
jusqu'à ce qu'il réponde; la ligne d'état dit si ce réseau est Wi-Fi ou Thread),
**Enregistrer** (ouverture de la session sécurisée avec l'équipement sur le réseau local, fin de
sa mise en service et inscription du nœud dans le Fabric local).

**Annuler** est disponible tant que l'équipement physique n'a pas été changé; dès que la mise en
service a modifié l'équipement, le bouton indique que Ganter Lab termine de façon sûre et le
déroulement achève l'inscription au lieu d'abandonner un nœud à moitié mis en service. Un seul
appairage tourne à la fois; une deuxième tentative pendant qu'un appairage est en cours est
refusée.

Le nouvel équipement garde le nom du réseau qu'il a joint, affiché dans son champ **Réseau**.
Appairer l'équipement suivant sur le même réseau ne demande que son nom et son code
d'installation.

## Quand l'appairage échoue {#when-pairing-fails}

Si l'appairage échoue, le message énonce la cause et ce qu'il faut faire :

| Cause | Ce que cela veut dire | L'équipement | Que faire |
|---|---|---|---|
| Code d'installation invalide | Le code n'est ni un code manuel officiel de 11 ou 21 chiffres, ni une charge utile QR `MT:` complète. | Intact | Relire le code imprimé. |
| Jeu de données Thread invalide | Le jeu de données du réseau Thread choisi n'est pas complet et bien formé. | Intact | Recopier le jeu de données actif complet dans ce réseau, sur la carte **Réseaux**. |
| Nom ou mot de passe Wi-Fi invalide | Le nom ou le mot de passe du réseau Wi-Fi choisi enfreint les règles de la carte **Réseaux**. | Intact | Le corriger sur la carte. |
| Bluetooth absent, désactivé ou refusé | Cet ordinateur n'a pas d'adaptateur Bluetooth basse consommation utilisable, le Bluetooth est désactivé, ou Windows en a refusé l'accès à Ganter Lab. | Intact | Activer le Bluetooth, ou autoriser Ganter Lab à l'employer dans Windows, puis réessayer. |
| Aucun équipement correspondant trouvé | Aucun équipement en mode appairage n'a répondu pour ce code d'installation. | Intact | Mettre l'équipement en mode appairage, le garder près de cet ordinateur et réessayer. |
| Code d'installation rejeté | L'équipement a refusé le code. | Intact | Relire le code imprimé et remettre l'équipement en mode appairage. |
| L'équipement joint par Wi-Fi | Le réseau choisi est Thread. | Intact : il a été lu, et rien n'y a été écrit | Inscrire le réseau Wi-Fi que l'équipement va joindre et appairer de nouveau en le choisissant. |
| L'équipement joint par Thread | Le réseau choisi est Wi-Fi. | Intact : il a été lu, et rien n'y a été écrit | Inscrire le réseau Thread et appairer de nouveau en le choisissant. |
| L'équipement est filaire (Ethernet) | L'appairage par Bluetooth ne sert pas un équipement filaire. | Intact : il a été lu, et rien n'y a été écrit | Ganter Lab ne peut pas appairer cet équipement. |
| L'équipement ne dit pas son réseau | L'équipement n'annonce ni Wi-Fi, ni Thread, ni Ethernet. | Intact : il a été lu, et rien n'y a été écrit | Ganter Lab ne peut pas appairer cet équipement. |
| Réseau Wi-Fi introuvable | L'équipement a répondu qu'il n'a trouvé aucun Wi-Fi de ce nom : une faute de frappe ou de majuscules, un réseau seulement en 5 GHz, ou un équipement hors de portée. | Ne garde rien : il abandonne ce qu'il a reçu et revient en mode appairage. Pas d'identifiant de nœud. | Corriger le nom sur la carte **Réseaux**, vérifier que le routeur le diffuse en 2,4 GHz, et appairer de nouveau. |
| Mot de passe Wi-Fi refusé | L'équipement a répondu que le Wi-Fi a refusé le mot de passe. | Ne garde rien : il abandonne ce qu'il a reçu et revient en mode appairage. Pas d'identifiant de nœud. | Corriger le mot de passe sur la carte **Réseaux** et appairer de nouveau. |
| L'équipement n'a pas pu joindre le réseau | L'équipement a répondu qu'il n'a pas pu joindre le réseau, pour une autre raison que les deux ci-dessus (en Thread, tout refus, y compris un réseau qu'il n'a pas trouvé). | Ne garde rien : il abandonne ce qu'il a reçu et revient en mode appairage. Pas d'identifiant de nœud. | Vérifier le réseau sur la carte **Réseaux** (en Thread, recopier le jeu de données actif en vigueur et vérifier que le routeur de bordure est allumé) et appairer de nouveau. |
| L'équipement n'a pas paru sur le réseau | L'équipement n'a donné aucune réponse sur le réseau, ou n'a jamais paru sur le réseau local ensuite. Certains équipements quittent le Bluetooth pour joindre le réseau et ne peuvent pas répondre du tout. | Mis en service : le message montre l'identifiant de nœud | En Wi-Fi, vérifier que cet ordinateur et l'équipement sont sur le même réseau local, sans réseau invité ni isolation des clients entre eux; en Thread, que le routeur de bordure est allumé et joignable. Récupérer ensuite le nœud avec Découvrir. |
| La session sécurisée ne s'est pas ouverte | L'équipement a joint le réseau et y a été trouvé, mais la session sécurisée avec lui, ou la fin de l'appairage par cette session, a échoué. Le journal technique indique l'étape et ce que l'équipement a répondu. | Mis en service : le message montre l'identifiant de nœud | Récupérer le nœud avec Découvrir. Si Découvrir le trouve sans valeurs alors que l'équipement est allumé, remettre l'équipement en mode appairage, puis l'appairer de nouveau. |
| Un autre appairage en cours | Un seul appairage tourne à la fois. | Intact | Attendre qu'il finisse et réessayer. |
| Le Fabric local n'a pas pu être enregistré | Ganter Lab n'a pas pu conserver le Fabric de façon sûre. | Intact quand cela arrive avant le début de l'appairage; mis en service, avec l'identifiant de nœud, quand cela arrive après | Régler le problème de stockage avant de réinitialiser quoi que ce soit. |

Chaque fois qu'un échec arrive après que l'équipement a déjà été mis en service, le message le
dit et montre l'identifiant de nœud : le nœud **reste dans le Fabric** et peut être ajouté plus
tard avec Découvrir, une fois qu'il atteint le réseau. Ne réinitialisez pas l'équipement dans ce
cas; seul un message qui dit que rien n'a été enregistré signifie que l'équipement a été laissé
intact.

Un équipement qui répond qu'il n'a pas pu joindre le réseau est l'exception : il ne détient rien
qui vaille d'être gardé. Ganter Lab met fin à l'appairage sur l'équipement, qui abandonne ce
qu'il a reçu et revient aussitôt en mode appairage, et retire son nœud du Fabric; le message ne
porte donc pas d'identifiant de nœud, et Découvrir ne liste jamais un nœud qui ne peut pas
répondre. Corrigez le réseau et appairez de nouveau. Seul un équipement qui n'a donné aucune
réponse garde son nœud, car on ne sait s'il a joint le réseau qu'au moment où il paraît sur le
réseau local.

## Ce qui est conservé {#what-is-stored}

| Quoi | Où c'est gardé | Comment |
|---|---|---|
| Le nom et le type d'un réseau | La configuration de la station | Tels qu'écrits. |
| Le mot de passe du Wi-Fi et le jeu de données opérationnel Thread | La configuration de la station | Protégés pour l'utilisateur Windows qui les a saisis, comme les mots de passe d'équipement : sous un autre compte Windows, ils se lisent vides et doivent être saisis de nouveau. Une sauvegarde les laisse derrière elle; l'[export pour une autre machine](settings-backups#export-for-another-machine) les emporte, scellés avec son propre mot de passe. |
| Le code d'installation | Nulle part | Il n'existe que dans le formulaire pendant l'appairage, et il est effacé quand l'appairage finit, échoue ou est annulé. |
| Le réseau qu'un équipement a joint | La configuration de l'équipement | Son nom, affiché dans le champ **Réseau** de l'équipement. |
| L'identité de l'équipement | La configuration de l'équipement et le Fabric local | L'identifiant de nœud. |

Le mot de passe du Wi-Fi et le jeu de données n'apparaissent jamais dans le journal technique, dans
l'adresse d'un équipement ni dans sa Thing Description. Les réseaux et l'appairage ne sont pas
offerts aux agents par le serveur MCP : l'appairage demande quelqu'un auprès de l'équipement,
et les réseaux gardent des secrets.

## L'identité d'un nœud {#node-identity}

Un équipement appairé est lié à l'**identifiant de nœud** stable de 64 bits de l'équipement,
montré en lecture seule dans sa carte Connexion sous forme de 16 chiffres hexadécimaux, à côté
de l'état de l'équipement. Le nom affiché modifiable est à vous; l'identifiant de nœud ne l'est
pas. Un équipement dont l'identité enregistrée ne peut plus être lue montre **Appairage à
refaire** à sa place.

Le volet de l'équipement montre aussi un champ **Réseau** en lecture seule : le nom du réseau
que l'équipement a joint lors de son appairage. Un équipement appairé par une version qui ne le
gardait pas dit que rien n'a été enregistré. Le champ est une trace, pas un réglage : modifier
ou retirer ce réseau sur la carte **Réseaux** ne change rien à l'équipement.

Comme l'identité est l'identifiant de nœud, les équipements Matter gardent un état de connexion
indépendant : désactiver, supprimer ou perdre un nœud ne rend pas un autre indisponible, et
supprimer un équipement ne libère que son usage de la session sécurisée, sans retirer
l'équipement du Fabric local.

## Découverte {#discovery}

**Découvrir** sur le pilote Matter liste les nœuds déjà mis en service dans le Fabric local de
cette application et lit, sur chacun, les valeurs qu'il publie. Pour les lire, il ouvre une session
sécurisée avec chaque nœud, si bien qu'un nœud absent du réseau reste listé, sans valeurs, une fois
que sa session n'a pas pu s'ouvrir. Les candidats de la découverte portent l'identité du nœud et
aucun secret de configuration. Le déroulement général de la découverte est décrit sur
[Découverte](connector-discovery).

| Le nœud | Sa carte | Ses verbes |
|---|---|---|
| N'a pas d'équipement ici : son équipement a été supprimé, ou son appairage s'est terminé sans en créer | Les valeurs qu'il publie, chacune cochée | **Ajouter un équipement** crée l'équipement avec les valeurs cochées comme tags, sans nouvelle cérémonie. |
| Est un équipement configuré, avec des valeurs qui n'ont pas encore de tag | Marqué comme déjà configuré, avec le nombre de valeurs qu'il publie qui ne sont pas encore des tags, et ces valeurs cochées | **Ajouter les tags** ajoute les valeurs cochées à cet équipement; **Ouvrir** l'ouvre. |
| Est un équipement configuré avec un tag pour chaque valeur | « Déjà configuré, avec un tag pour chaque valeur que l'équipement publie. » | **Ouvrir** l'ouvre. |
| Est un équipement configuré qui n'a signalé aucune valeur | « Déjà configuré. L'équipement n'a signalé aucune valeur : relancez Découvrir une fois qu'il est en ligne. » | **Ouvrir** l'ouvre. |

Les valeurs d'un équipement configuré sont comparées à ses tags par sortie, cluster et attribut,
jamais par nom : un tag que vous avez renommé compte toujours, et une valeur n'est jamais ajoutée
deux fois.

La page de l'équipement lui-même offre la même chose sans la quitter : **Découvrir les tags**, dans l'en-tête de sa carte **Tags**, lit ce seul nœud et liste, cochées, les valeurs pour lesquelles il n'a pas encore de tag, avec **Ajouter les tags** (voir [Découvrir les tags d'un équipement](connector-discovery#discovering-a-devices-tags)).

## Tags {#tags}

Les tags d'un équipement Matter viennent de l'équipement lui-même : personne ne saisit de cluster ni
de numéro d'attribut pour eux. Un appairage qui réussit y mène directement. Le journal des actions
indique « Équipement Matter « Éclairage de la cuisine » appairé. », la page s'ouvre sur le pilote
Matter avec le nouvel équipement mis en évidence dans son tableau Équipements, et un balayage de ce seul équipement démarre aussitôt. L'équipement que l'appairage a créé
apparaît dans **Équipements découverts** avec les valeurs qu'il publie, toutes cochées, et le
balayage se termine par « Cochez les valeurs de « Éclairage de la cuisine » à créer comme tags, puis
Ajouter les tags. » Décochez ce que vous ne voulez pas et appuyez sur **Ajouter les tags**; le
journal des actions indique alors « 5 tags ajoutés à « Éclairage de la cuisine ». » Un équipement
qui n'a pas encore répondu ne signale rien : « « Éclairage de la cuisine » n'a encore signalé aucune
valeur. Relancez Découvrir une fois qu'il est en ligne. » La même carte revient à chaque
**Découvrir** suivant, avec les valeurs pour lesquelles l'équipement n'a pas encore de tag.

**Ajouter les tags** n'est dessiné que pour un rôle qui a Configurer Connector. Il reste grisé, avec
sa raison en infobulle, pendant qu'un balayage ou un appairage tourne, pendant que la station refuse
les changements et tant que rien n'est coché (« Cochez au moins une valeur à ajouter. »). Une valeur
dont l'équipement lit déjà la sortie, le cluster et l'attribut n'est jamais ajoutée de nouveau;
quand chaque valeur cochée est déjà là, rien n'est enregistré : « « Éclairage de la cuisine » a déjà
un tag pour chaque valeur cochée, donc rien n'a été ajouté. » Un nom qu'un autre tag de
l'équipement porte déjà reçoit un numéro à la suite, comme dans Luminosité (2).

Le balayage lit ce que l'équipement publie, tel que la spécification Matter l'organise :

| Quoi | Où l'équipement le dit |
|---|---|
| Ses sorties (endpoints) | Le cluster Descriptor (0x001D) sur l'endpoint 0, attribut `PartsList` |
| Les clusters de chaque sortie | Le Descriptor de cette sortie, attribut `ServerList` |
| Les valeurs de chaque cluster | Son attribut `AttributeList` (0xFFFB) |
| Les commandes que chaque cluster accepte | Son attribut `AcceptedCommandList` (0xFFF9) |
| Les fonctions optionnelles que chaque cluster met en œuvre | Son attribut `FeatureMap` (0xFFFC) |
| La lecture actuelle de chaque valeur | La valeur elle-même, lue une fois |

Ce que le balayage offre, et sous quel nom :

| Une valeur | Proposée comme |
|---|---|
| Une que le pilote connaît (la section suivante) | Son nom clair dans la langue de la station et le type que la spécification lui donne; accessible en écriture seulement quand l'équipement accepte la manière dont la spécification la change, sinon en lecture seule |
| Une que le pilote connaît, d'une fonction que le cluster ne met pas en œuvre : teinte et saturation sans la fonction Hue and Saturation, température de couleur sans la fonction Color Temperature | Non proposée |
| Une que le pilote ne connaît pas | En lecture seule, sous son nom dans la spécification Matter (`Level Control OnLevel`), ou sous le cluster et le numéro d'attribut quand le pilote ne connaît pas l'attribut (`On/Off attribute 0x131B0001`); son type est celui de la lecture que l'équipement a renvoyée |
| La même valeur sur plus d'une sortie | Son nom dit quelle sortie, comme dans Luminosité (sortie 2) |
| Un attribut global (0xFFF8 à 0xFFFD), ou une valeur du nœud lui-même (endpoint 0) | Non proposée |
| Une liste ou une structure, une valeur d'un type que le pilote ne porte pas, une valeur pour laquelle l'équipement n'a renvoyé aucune lecture | Laissée de côté, et comptée dans la ligne qui clôt le balayage |

Un tag proposé en écriture arrive avec l'accès Lecture et écriture; tous les autres arrivent en
Lecture seule.

## Les valeurs que le pilote connaît {#the-values-the-driver-knows}

Le pilote porte une table, tirée de la spécification Matter, des valeurs qu'il connaît par leur nom
et de la façon dont chacune change. Une valeur change de l'une de trois façons : par une commande
que le pilote envoie, que l'équipement doit lister parmi les commandes qu'il accepte; par une
écriture de l'attribut lui-même, là où la spécification le rend accessible en écriture et où
l'équipement le liste; ou pas du tout, pour une valeur que l'équipement ne fait que signaler.

| Valeur | Cluster et attribut | Type | Ce que l'écrire fait sur l'équipement | Plage que la spécification définit |
|---|---|---|---|---|
| Allumé | On/Off (0x0006), `OnOff` (0x0000) | Boolean | true envoie la commande `On` (0x01), false envoie `Off` (0x00); accessible en écriture seulement quand l'équipement accepte les deux | true ou false |
| Luminosité | Level Control (0x0008), `CurrentLevel` (0x0000) | UInt32 | Envoie `MoveToLevelWithOnOff` (0x04) avec le niveau, un temps de transition de 0 et aucune option forcée : la sortie s'allume avec le niveau et s'éteint au minimum | 0 à 254 |
| Teinte | Color Control (0x0300), `CurrentHue` (0x0000) | UInt32 | Envoie `MoveToHue` (0x00) par le chemin le plus court, avec un temps de transition de 0; seulement avec la fonction Hue and Saturation | 0 à 254 |
| Saturation des couleurs | Color Control (0x0300), `CurrentSaturation` (0x0001) | UInt32 | Envoie `MoveToSaturation` (0x03) avec un temps de transition de 0; seulement avec la fonction Hue and Saturation | 0 à 254 |
| Température de couleur | Color Control (0x0300), `ColorTemperatureMireds` (0x0007) | UInt32 | Envoie `MoveToColorTemperature` (0x0A) avec un temps de transition de 0; seulement avec la fonction Color Temperature. L'équipement garde la valeur dans ses propres limites | 0 à 65279, en mireds |
| Position du store | Window Covering (0x0102), `CurrentPositionLiftPercent100ths` (0x000E) | UInt32 | Envoie `GoToLiftPercentage` (0x05) | 0 (ouvert) à 10000 (fermé), en centièmes de pour cent |
| Température ambiante | Thermostat (0x0201), `LocalTemperature` (0x0000) | Float, en °C | Rien : lecture seule | -27315 à 32767, en centièmes de degré Celsius; se lit de -273,15 à 327,67 °C |
| Consigne de refroidissement | Thermostat (0x0201), `OccupiedCoolingSetpoint` (0x0011) | Float, en °C | Écrit l'attribut. L'équipement refuse une consigne hors de ses propres limites | -27315 à 32767, en centièmes de degré Celsius; se lit de -273,15 à 327,67 °C |
| Consigne de chauffage | Thermostat (0x0201), `OccupiedHeatingSetpoint` (0x0012) | Float, en °C | Écrit l'attribut. L'équipement refuse une consigne hors de ses propres limites | -27315 à 32767, en centièmes de degré Celsius; se lit de -273,15 à 327,67 °C |
| Mode du ventilateur | Fan Control (0x0202), `FanMode` (0x0000) | UInt32 | Écrit l'attribut | 0 arrêt, 1 bas, 2 moyen, 3 haut, 4 marche, 5 automatique, 6 intelligent |
| Réglage de la vitesse du ventilateur | Fan Control (0x0202), `PercentSetting` (0x0002) | UInt32 | Écrit l'attribut | 0 à 100 pour cent |
| Vitesse du ventilateur | Fan Control (0x0202), `PercentCurrent` (0x0003) | UInt32 | Rien : lecture seule | 0 à 100 pour cent |
| Température | Temperature Measurement (0x0402), `MeasuredValue` (0x0000) | Float, en °C | Rien : lecture seule | -27315 à 32767, en centièmes de degré Celsius; se lit de -273,15 à 327,67 °C |
| Humidité | Relative Humidity Measurement (0x0405), `MeasuredValue` (0x0000) | Float, en % | Rien : lecture seule | 0 à 10000, en centièmes de pour cent; se lit de 0 à 100 % |
| Éclairement | Illuminance Measurement (0x0400), `MeasuredValue` (0x0000) | UInt32 | Rien : lecture seule | 0 à 65534, soit 10000 × log10(lux) + 1 |
| Pression | Pressure Measurement (0x0403), `MeasuredValue` (0x0000) | Float, en kPa | Rien : lecture seule | -32767 à 32767, en dixièmes de kilopascal; se lit de -3276,7 à 3276,7 kPa |
| Occupation | Occupancy Sensing (0x0406), `Occupancy` (0x0000) | Boolean | Rien : lecture seule | true quand quelqu'un est là |
| État | Boolean State (0x0045), `StateValue` (0x0000) | Boolean | Rien : lecture seule | true ou false |

La spécification envoie les températures, l'humidité et la pression dans des unités fixes :
centièmes de degré Celsius, centièmes de pour cent et dixièmes de kilopascal. La découverte offre
ces valeurs déjà en °C, % et kPa : le tag arrive avec le facteur dans son étape de mise à l'échelle
(0,01 pour une température et une humidité, 0,1 pour une pression) et avec l'unité, si bien qu'un
équipement qui envoie 2150 se lit 21,5 °C. Une écriture défait cette étape avant que la valeur ne
parte, si bien qu'une consigne écrite 21,5 arrive à l'équipement en 2150. L'éclairement est
logarithmique (10000 × log10(lux) + 1), donc aucun facteur ne le convertit : il se lit tel que
l'équipement l'envoie. Toutes les autres valeurs se lisent aussi telles que l'équipement les
envoie.

Les serrures, la couleur par coordonnées X et Y, les scènes, les groupes et la commande `Toggle` ne
sont pas dans la table. Un équipement Matter n'a pas non plus de commandes à lui : tout changement
est l'écriture d'un de ses tags.

## Écrire une valeur {#writing-a-value}

Un tag Matter dont l'accès est Lecture et écriture change l'équipement quand on l'écrit : depuis sa
carte Valeur en direct, un contrôle de tableau de bord, la Logic ou un agent. L'écriture rejoint la
file de l'équipement comme celle de tout pilote, à son tour avec les lectures de l'équipement, et sa
réponse est celle de l'équipement lui-même. Le pilote choisit la commande Matter ou l'écriture de
l'attribut à partir de la table; personne ne choisit de commande. Seul le SUCCESS de l'équipement
compte comme écrit. Tout le reste est refusé, avec une raison :

| Ce qui arrive | Où c'est tranché | La raison donnée |
|---|---|---|
| Le point n'est pas une valeur de la table du pilote | Avant tout envoi | Le pilote ne sait pas comment l'équipement change cette valeur, donc le tag ne fait que la lire. |
| Le point est une valeur que la table marque en lecture seule | Avant tout envoi | L'équipement signale cette valeur et rien de l'extérieur ne la fixe. |
| La valeur écrite n'est ni true ni false (pour une valeur Boolean), ou n'est pas un nombre entier | Avant tout envoi | Ce que la valeur accepte, et ce qui a été écrit. |
| La valeur est hors de la plage que la spécification définit | Avant tout envoi | La plage, telle que la table ci-dessus la donne. |
| Le tag ne nomme aucun cluster | Avant tout envoi | Qu'une valeur Matter se trouve par sa sortie, son cluster et son attribut. |
| L'équipement répond par un autre statut que SUCCESS | Par l'équipement | Le statut tel que l'équipement l'a donné : son nom dans la spécification et son numéro, par exemple CONSTRAINT_ERROR, 0x87 (la valeur est hors de ce que l'équipement accepte) ou UNSUPPORTED_COMMAND, 0x81 (l'équipement n'accepte pas la commande qui change cette valeur). Un statut que le cluster ajoute vient après (FAILURE, 0x01, cluster 0x02), et un statut que la spécification ne nomme pas se lit par son seul numéro. |
| L'équipement ne répond pas à temps | Par l'équipement | Pas de réponse. |

Une écriture refusée n'est jamais signalée comme écrite, ni comme un équipement injoignable. Sur
la page du tag, la ligne d'état indique « Écriture refusée par l'équipement : CONSTRAINT_ERROR,
0x87. » quand l'équipement l'a refusée, avec la raison à la place du statut pour un refus tranché
avant tout envoi, et « Écriture non confirmée : l'équipement n'a pas répondu à temps. » quand
aucune réponse n'est venue; « Échec de l'écriture : l'équipement n'a pas pu être joint. » reste
réservé à un équipement qui n'est pas connecté. La raison voyage aussi avec l'écriture : la ligne
du journal de cette écriture la nomme, avec ce que le statut veut dire, et le `tag_write` d'un
agent la renvoie.

## Un tag créé à la main {#a-tag-made-by-hand}

Pour la rare valeur que l'équipement ne publie pas sous une forme que le balayage propose, **Ajouter
un tag** sur un équipement Matter crée un tag à remplir à la main. Sa carte Source de la valeur montre trois
champs sur une ligne, et l'aperçu de l'adresse en dessous les assemble en
`<endpoint>/<cluster>/<attribute>`, en décimal (`1/8/0` est la luminosité de la première sortie).
Tant qu'aucun cluster n'est choisi, le tag n'est pas enregistré, et le panneau dit : « Choisissez le
cluster que ce tag lit. Sans lui, rien n'est jamais demandé à l'équipement. »

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| **Sortie (endpoint)** | Quelle sortie de l'équipement le tag lit. | 0 à 65535; 1 est la première sortie commandable, 0 le nœud lui-même | 1 |
| **Cluster Matter** | Quel cluster de cette sortie le tag lit. | Les clusters du catalogue Matter par leur nom dans la spécification avec leur numéro, comme dans `Level Control (0x0008)`; un cluster que le catalogue ne nomme pas, trouvé par un balayage, vient en premier par son numéro | aucun |
| **Attribut** | Quel attribut du cluster le tag lit. | 0 et plus; 0 est la valeur propre du cluster | 0 |

Le nom du tag est libre : il nomme le tag et ne choisit rien sur l'équipement. Le type de donnée se
choisit parmi Boolean, Int32, UInt32, Float, Double et String; une lecture que le type déclaré ne
peut pas représenter se lit comme une erreur plutôt que comme un nombre de remplacement.
La valeur arrive telle que l'équipement l'envoie : une température, une humidité ou une pression
créée à la main se lit en centièmes ou en dixièmes tant que vous ne lui donnez pas, dans son étape
de mise à l'échelle, le facteur et l'unité du tableau ci-dessus.

Le champ d'accès ne propose l'écriture que là où la table du pilote change la valeur; sinon il
propose Lecture seule et dit pourquoi en dessous :

| Le point | Le champ d'accès propose | Ce qu'il dit |
|---|---|---|
| Une valeur de la table qu'une commande ou une écriture de l'attribut change | Lecture seule, Écriture seule et Lecture et écriture | Rien |
| Aucun cluster choisi encore | Lecture seule | « Lecture seule tant que le tag ne désigne pas une valeur de l'équipement : choisissez son cluster. » |
| Une valeur que la table ne connaît pas | Lecture seule | « Lecture seule : le pilote ne sait pas comment l'équipement modifie cette valeur. » |
| Une valeur que la table marque en lecture seule | Lecture seule | « Lecture seule : l'équipement signale cette valeur, et rien de l'extérieur ne la fixe. » |

Quand une modification de la sortie, du cluster ou de l'attribut fait pointer le tag vers une
valeur que le pilote ne peut pas écrire, son accès revient à Lecture seule. Un tag offert par la
découverte garde l'accès que la découverte lui a donné, car seule la découverte demande à
l'équipement quelles commandes il accepte : une valeur que l'équipement n'a pas listée reste en
Lecture seule, et le champ propose quand même l'écriture.

## Les tags enregistrés par des versions précédentes {#tags-saved-by-earlier-versions}

Une version précédente nommait le cluster d'un tag Matter par le seul nom du tag, avec une adresse
`<endpoint>/<attribute>`. Quand cette version démarre pour la première fois, chaque tag d'un
équipement Matter dont le nom est un cluster du catalogue Matter (la partie après le dernier
deux-points, sans les espaces autour, sans tenir compte de la casse) reçoit ce cluster, si bien
qu'il continue de lire exactement la valeur qu'il lisait. Son nom reste tel qu'il était, et
l'aperçu de son adresse montre alors `<endpoint>/<cluster>/<attribute>`. Un tag dont le nom ne
correspondait à aucun cluster n'a jamais rien lu : il reste sans cluster, ses lectures sont refusées
avec une raison qui le dit, et sa page demande le cluster. Un tag converti garde l'accès qu'il
avait, Lecture seule, le seul que ces versions proposaient; pour l'écrire, choisissez Lecture et
écriture, ce qui fonctionne pour les valeurs de la table ci-dessus.
