# Matter

> Referenz zum Treiber Matter: die WLAN- und Thread-Netze, denen Geräte beitreten, Inbetriebnahme über Bluetooth in das lokale Fabric, der Ablauf Gerät koppeln, die Identität des Knotens, die Tags, die vom Gerät kommen, und was das Schreiben jedes einzelnen bewirkt.

Der Treiber Matter liest Anlagen mit **Matter**: vernetzte Sensoren, Steckdosen, Leuchten
und ähnliche Geräte, die nach dem Standard Matter zertifiziert sind, gleich ob sie dem Netz
über **WLAN** oder über **Thread** beitreten. Es ist ein einziger Treiber für beide. Das Netz
ist nur der Weg hinein: Sobald ein Gerät darin ist, liest Ganter Lab es auf dieselbe Weise,
über das lokale Netz.

Ganter Lab tritt als **Matter-Controller mit eigenem lokalem Fabric** auf: Es nimmt jedes
Gerät einmal über **Bluetooth Low Energy** an diesem Rechner in Betrieb, übergibt ihm die
Zugangsdaten eines Netzes, das auf der Karte **Netzwerke** des Treibers eingetragen ist, und
spricht von da an über das lokale Netz mit ihm: bei einem WLAN-Gerät über Ihren Router, bei
einem Thread-Gerät über Ihren Thread-Border-Router.

Sie sagen Ganter Lab nie, ob ein Gerät WLAN oder Thread nutzt: **Das Gerät sagt es selbst.**
Sobald die Bluetooth-Sitzung offen ist, liest Ganter Lab vom Gerät, welcher Art von Netz es
beitritt, bevor es irgendetwas darauf schreibt, und hält mit einer eigenen Meldung an, wenn
das gewählte Netz von der anderen Art ist.

Das dreht die übliche Reihenfolge der Einrichtung um. Ein Matter-Gerät beginnt nicht bei
Host und Port, sondern bei einem **Kopplungsvorgang**, und danach wird allein die feste
Identität des in Betrieb genommenen Knotens gespeichert.

Was Sie vor dem Koppeln brauchen:

- Einen **Adapter für Bluetooth Low Energy** an diesem Rechner, eingeschaltet, und Windows
  muss Ganter Lab erlauben, ihn zu verwenden.
- Das Netz, dem das Gerät beitreten soll, eingetragen auf der Karte **Netzwerke**: für ein
  WLAN-Gerät der WLAN-Name und sein Passwort; für ein Thread-Gerät ein vorhandenes
  Thread-Netz mit einem Border Router und dessen vollständiges **Active Operational
  Dataset**. Ganter Lab führt Geräte in Ihr Netz ein; es kann keine Zugangsdaten dafür
  erfinden.
- Den **Einrichtungscode** des Geräts, aufgedruckt auf dem Gerät oder seiner Verpackung,
  und das Gerät im Kopplungsmodus.

## Netzwerke {#networks}

Der Bereich des Treibers Matter trägt eine Karte mit dem Titel **Netzwerke**: die WLAN- und
Thread-Netze, denen die Geräte beitreten, eines pro Zeile. Ein Netz wird **einmal, vor dem
ersten Gerät**, eingetragen und dient jedem Gerät, das darin gekoppelt wird; eine zweite
Leuchte im selben WLAN zu koppeln fragt also nach nichts mehr. Die Karte wird nur für eine
Rolle gezeichnet, die den Connector konfigurieren darf, denn sie hält die Geheimnisse der
Netze und dient allein dem Koppeln.

Der Kopf der Karte trägt ihre Befehle, in dieser Reihenfolge:

| Befehl | Was er tut | Was er nicht tut |
|---|---|---|
| **WLAN hinzufügen** | Fügt ein WLAN-Netz hinzu und wählt es aus. Ist dieser Rechner mit einem WLAN verbunden, dessen Name noch nicht eingetragen ist, bekommt das neue Netz diesen Namen; sonst beginnt es ohne Namen, und Sie tragen ihn ein. Windows gibt nur den Namen heraus, und nur, wenn es Apps den Standort dieses Rechners kennen lässt (Windows 11 fragt nach dieser Berechtigung); das Passwort tippen immer Sie. | Es liest das Passwort nicht aus Windows und prüft nicht, ob das Netz existiert. |
| **Thread-Netzwerk hinzufügen** | Fügt ein Thread-Netz hinzu und wählt es aus, mit einem vorläufigen Namen (nummeriert, wenn er schon vergeben ist), bis Sie ihm Ihren geben, und wartet auf seinen Datensatz. | Es spricht nicht mit dem Border Router: Ganter Lab nutzt nur den Datensatz des Netzes, das der Border Router angelegt hat. |
| **Netzwerk entfernen** | Entfernt das ausgewählte Netz, nach einer Bestätigung, die es nennt und sagt, dass bereits gekoppelte Geräte nicht betroffen sind. Ist kein Netz ausgewählt, bleibt der Befehl gezeichnet und ausgegraut, und sein Tooltip sagt das. | Es berührt die Geräte nicht, die in diesem Netz bereits gekoppelt sind: Sie arbeiten weiter und behalten seinen Namen in ihrem Feld **Netzwerk**. |

Die Tabelle zeigt für jedes Netz die **Bezeichnung**, die **Netzwerkart** (**WLAN** oder
**Thread-Netzwerk**) und den **Zustand**: **Bereit zur Kopplung** oder das, was dem Netz noch
fehlt. Ein Netz, dessen Name noch nicht eingetragen ist, heißt **Netzwerk ohne Namen**.

Die Felder des ausgewählten Netzes werden direkt unter der Tabelle bearbeitet und speichern
sich selbst. Ein Wert, den die Regeln unten ablehnen, wird nicht geschrieben, und das Feld
sagt, warum.

| Art | Feld | Was es ist | Format |
|---|---|---|---|
| WLAN | **WLAN-Name** | Der Name (SSID), der dem Gerät übergeben wird, genau so, wie der Router ihn aussendet: Groß- und Kleinschreibung zählen. Jeder WLAN-Name wird einmal eingetragen. | 1 bis 32 Bytes Text (UTF-8). |
| WLAN | **Passwort** | Das WLAN-Passwort, das dem Gerät übergeben wird. | Leer für ein offenes Netz; sonst 8 bis 63 druckbare ASCII-Zeichen (eine WPA-Passphrase) oder genau 64 hexadezimale Ziffern (der rohe Schlüssel). |
| Thread | **Bezeichnung** | Ihre Bezeichnung für das Netz, an der Sie es beim Koppeln und an jedem Gerät erkennen. Jeder Thread-Name wird einmal eingetragen. | Freitext. |
| Thread | **Operational Dataset des Thread-Netzwerks** | Der vollständige aktive Datensatz Ihres Thread-Netzes, von der Netzverwaltung oder von seinem Border Router. Home Assistant zeigt ihn; Alexa und Apple nicht. | Hexadezimaler Text (Leerraum und ein Präfix `hex:` werden geduldet), entschlüsselt höchstens 254 Bytes. Es muss der vollständige Datensatz sein: Active Timestamp, Channel, Channel Mask, Extended PAN ID, Mesh-Local Prefix, Network Key, Network Name, PAN ID, PSKc und Security Policy müssen alle vorhanden sein, und ein unvollständiger oder fehlerhafter Datensatz wird abgelehnt, mit dem fehlenden Element benannt. |

Zwei Dinge entscheiden, ob sich ein WLAN-Gerät überhaupt koppeln lässt, und die Karte sagt
beide neben den Feldern:

- **Die meisten Geräte treten nur Netzen mit 2,4 GHz bei.** Ein Router, der einen Namen auf
  2,4 GHz und auf 5 GHz aussendet, bedient sie; ein Netz, das es nur auf 5 GHz gibt, nicht.
- **Dieser Rechner und die Geräte müssen im selben lokalen Netz sein.** Ein Gastnetz oder
  eine im Router eingeschaltete Client-Isolation hindert den Rechner daran, die Geräte zu
  finden, nachdem sie beigetreten sind.

Ein Netz dient dem Koppeln nur, solange sein Geheimnis diese Regeln erfüllt: ein WLAN-Netz
mit gültigem Namen und gültigem Passwort (leer eingeschlossen), ein Thread-Netz mit gültigem
Datensatz.

Ein Netz zu bearbeiten ändert, was die **nächste** Kopplung übergibt, nie, was ein Gerät
schon erhalten hat. Ein Gerät, das in ein anderes Netz wechseln muss oder dessen Router ein
neues Passwort bekam, wird zurückgesetzt und neu gekoppelt.

## Der Ablauf Gerät koppeln {#the-pair-device-flow}

Beim Treiber Matter bietet die Befehlsleiste **Gerät koppeln** an, wo andere Treiber Gerät
hinzufügen anbieten, und ebenso der Eintrag Matter im Menü Neu… der Spalte. Solange kein Netz dem Koppeln dient, bleibt der Befehl gezeichnet und
ausgegraut, mit dem Tooltip "Fügen Sie zuerst das Netzwerk hinzu, dem das Gerät beitreten
soll." Sonst öffnet er ein Formular:

| Feld | Was es ist | Format | Standard |
|---|---|---|---|
| Gerätename | Der änderbare Name, den das Gerät im Connector tragen wird. | Freitext | `Matter device` |
| Matter-Einrichtungscode | Der offizielle Kopplungscode zum Eintippen oder die vollständige QR-Nutzlast. Verdeckt eingegeben, mit einem Bedienelement zum Aufdecken. | Ein Code aus 11 oder 21 Ziffern (Bindestriche und Leerzeichen werden übergangen; die Prüfziffer wird geprüft) oder die vollständige QR-Nutzlast, die mit `MT:` beginnt. Eine QR-Nutzlast, die keine Inbetriebnahme über Bluetooth anbietet, wird abgelehnt, ebenso reservierte Passcodes und solche außerhalb des Bereichs. | leer |
| Netzwerk | Das eingetragene Netz, dem das Gerät beitreten wird. Gibt es genau ein Netz, das dient, sagt das Formular in einer Zeile, welches Netz es ist und welcher Art, ohne etwas zur Wahl; gibt es mehrere, ist es eine Auswahl. | Eines der dienenden Netze auf der Karte **Netzwerke** | das einzige, wenn es eines gibt |
| Zielordner | Nur wenn Neues Gerät eines Ordners das Formular geöffnet hat: der Ordner, in dem das gekoppelte Gerät abgelegt wird. Über Gerät koppeln geöffnet, fehlt diese Zeile, und das Gerät landet auf der eigenen Ebene des Treibers. | Schreibgeschützt | der Ordner, der das Formular geöffnet hat |

Ein Ordner des Treibers Matter bietet **Neues Gerät** an (in seiner Tabelle Geräte, in seinem Rechtsklickmenü und unter Neu… > Matter > `<Ordner>`). Es öffnet dasselbe Formular, ebenso ausgegraut, solange kein Netz dient, und das gekoppelte Gerät wird in diesem Ordner abgelegt.

**Gerät koppeln** im Formular bleibt gesperrt, bis Name und Einrichtungscode gefüllt sind und
ein Netz dient. Während die Kopplung läuft, meldet das Formular ihre Stufe: **Prüfen** (Code
und Geheimnis des Netzes werden geprüft), **Finden** (das Gerät wird über Bluetooth gesucht),
**Koppeln** (Anmeldung mit dem Einrichtungscode, und es wird gelesen, welcher Art von Netz das
Gerät beitritt), **Netzwerk beitreten** (das Netz wird an das Gerät gesendet, danach wird im
lokalen Netz nach dem Gerät gefragt, bis es antwortet; die Statuszeile sagt, ob dieses Netz
WLAN oder Thread ist), **Speichern** (die gesicherte Sitzung mit dem Gerät im lokalen Netz
wird geöffnet, seine Inbetriebnahme abgeschlossen und der Knoten im lokalen Fabric
festgehalten).

**Abbrechen** steht zur Verfügung, solange das physische Gerät noch nicht verändert wurde;
sobald die Inbetriebnahme das Gerät verändert hat, sagt die Schaltfläche, dass Ganter Lab
sicher zu Ende führt, und der Ablauf vollendet den Eintrag, statt einen halb in Betrieb
genommenen Knoten zurückzulassen. Es läuft immer nur eine Kopplung; ein zweiter Versuch
während einer laufenden wird abgelehnt.

Das neue Gerät hält den Namen des Netzes fest, dem es beigetreten ist, gezeigt in seinem
Feld **Netzwerk**. Das nächste Gerät im selben Netz zu koppeln fragt nur nach seinem Namen und
seinem Einrichtungscode.

## Wenn die Kopplung fehlschlägt {#when-pairing-fails}

Schlägt die Kopplung fehl, nennt die Meldung die Ursache und was zu tun ist:

| Ursache | Was sie bedeutet | Die Anlage | Was zu tun ist |
|---|---|---|---|
| Ungültiger Einrichtungscode | Der Code ist weder ein offizieller Code aus 11 oder 21 Ziffern noch eine vollständige QR-Nutzlast mit `MT:`. | Unberührt | Den aufgedruckten Code erneut lesen. |
| Ungültiger Thread-Datensatz | Der Datensatz des gewählten Thread-Netzes ist nicht vollständig und wohlgeformt. | Unberührt | Den vollständigen aktiven Datensatz erneut in dieses Netz auf der Karte **Netzwerke** kopieren. |
| Ungültiger WLAN-Name oder ungültiges Passwort | Name oder Passwort des gewählten WLAN-Netzes verletzen die Regeln der Karte **Netzwerke**. | Unberührt | Auf der Karte korrigieren. |
| Bluetooth fehlt, ist aus oder verweigert | Dieser Rechner hat keinen nutzbaren Adapter für Bluetooth Low Energy, Bluetooth ist ausgeschaltet, oder Windows hat Ganter Lab den Zugriff verweigert. | Unberührt | Bluetooth einschalten oder Ganter Lab in Windows den Zugriff erlauben, dann erneut versuchen. |
| Kein passendes Gerät gefunden | Kein Gerät im Kopplungsmodus hat für diesen Einrichtungscode geantwortet. | Unberührt | Das Gerät in den Kopplungsmodus bringen, nahe an diesem Rechner halten und erneut versuchen. |
| Einrichtungscode abgelehnt | Das Gerät hat den Code abgelehnt. | Unberührt | Den aufgedruckten Code erneut lesen und das Gerät wieder in den Kopplungsmodus bringen. |
| Das Gerät tritt über WLAN bei | Das gewählte Netz ist Thread. | Unberührt: Es wurde gelesen, und nichts wurde darauf geschrieben | Das WLAN-Netz eintragen, dem das Gerät beitreten soll, und erneut koppeln, mit diesem Netz gewählt. |
| Das Gerät tritt über Thread bei | Das gewählte Netz ist WLAN. | Unberührt: Es wurde gelesen, und nichts wurde darauf geschrieben | Das Thread-Netz eintragen und erneut koppeln, mit diesem Netz gewählt. |
| Das Gerät ist verkabelt (Ethernet) | Die Kopplung über Bluetooth bedient kein verkabeltes Gerät. | Unberührt: Es wurde gelesen, und nichts wurde darauf geschrieben | Ganter Lab kann dieses Gerät nicht koppeln. |
| Das Gerät nennt sein Netz nicht | Das Gerät meldet weder WLAN noch Thread noch Ethernet. | Unberührt: Es wurde gelesen, und nichts wurde darauf geschrieben | Ganter Lab kann dieses Gerät nicht koppeln. |
| WLAN-Netz nicht gefunden | Das Gerät hat geantwortet, dass es kein WLAN mit diesem Namen fand: ein Tipp- oder Großschreibfehler, ein Netz nur auf 5 GHz oder ein Gerät außer Reichweite. | Behält nichts: Es verwirft, was es erhalten hat, und ist wieder im Kopplungsmodus. Keine Node-ID. | Den Namen auf der Karte **Netzwerke** korrigieren, prüfen, dass der Router ihn auf 2,4 GHz aussendet, und erneut koppeln. |
| WLAN-Passwort abgelehnt | Das Gerät hat geantwortet, dass das WLAN das Passwort abgelehnt hat. | Behält nichts: Es verwirft, was es erhalten hat, und ist wieder im Kopplungsmodus. Keine Node-ID. | Das Passwort auf der Karte **Netzwerke** korrigieren und erneut koppeln. |
| Das Gerät konnte dem Netz nicht beitreten | Das Gerät hat geantwortet, dass es dem Netz nicht beitreten konnte, aus einem anderen Grund als den beiden oben (bei Thread jede Ablehnung, auch ein Netz, das es nicht fand). | Behält nichts: Es verwirft, was es erhalten hat, und ist wieder im Kopplungsmodus. Keine Node-ID. | Das Netz auf der Karte **Netzwerke** prüfen (bei Thread den aktuellen aktiven Datensatz erneut kopieren und prüfen, dass der Border Router eingeschaltet ist) und erneut koppeln. |
| Das Gerät ist im Netz nicht erschienen | Das Gerät hat zum Netz keine Antwort gegeben oder ist danach nie im lokalen Netz erschienen. Manche Geräte verlassen Bluetooth, um beizutreten, und können gar nicht antworten. | In Betrieb genommen: Die Meldung zeigt die Node-ID | Bei WLAN prüfen, dass dieser Rechner und das Gerät im selben lokalen Netz sind, ohne Gastnetz oder Client-Isolation dazwischen; bei Thread, dass der Border Router eingeschaltet und erreichbar ist. Danach den Knoten mit Suchen zurückholen. |
| Die gesicherte Sitzung kam nicht zustande | Das Gerät ist dem Netz beigetreten und wurde dort gefunden, aber die gesicherte Sitzung mit ihm oder der Abschluss der Kopplung über diese Sitzung ist fehlgeschlagen. Das Journal nennt den Schritt und was das Gerät geantwortet hat. | In Betrieb genommen: Die Meldung zeigt die Node-ID | Den Knoten mit Suchen zurückholen. Findet Suchen ihn ohne Werte, obwohl das Gerät eingeschaltet ist, das Gerät wieder in den Kopplungsmodus versetzen und erneut koppeln. |
| Eine andere Kopplung läuft | Es läuft immer nur eine Kopplung. | Unberührt | Warten, bis sie endet, und erneut versuchen. |
| Das lokale Fabric ließ sich nicht speichern | Ganter Lab konnte das Fabric nicht sicher ablegen. | Unberührt, wenn es geschieht, bevor die Kopplung beginnt; in Betrieb genommen, mit der Node-ID, wenn es danach geschieht | Das Speicherproblem beheben, bevor irgendetwas zurückgesetzt wird. |

Kommt ein Fehlschlag, nachdem die Anlage bereits in Betrieb genommen wurde, sagt die Meldung
das und zeigt die Node-ID: Der Knoten **bleibt im Fabric** und lässt sich später mit Suchen
hinzufügen, sobald er das Netz erreicht. Setzen Sie das Gerät in diesem Fall nicht zurück;
nur eine Meldung, die sagt, dass nichts gespeichert wurde, bedeutet, dass die Anlage
unberührt blieb.

Ein Gerät, das antwortet, dass es dem Netz nicht beitreten konnte, ist die Ausnahme: Es hält
nichts, was sich zu behalten lohnt. Ganter Lab beendet die Kopplung auf dem Gerät, das
verwirft, was es erhalten hat, und sofort in den Kopplungsmodus zurückkehrt, und nimmt seinen
Knoten aus dem Fabric; die Meldung trägt also keine Node-ID, und Suchen listet nie einen
Knoten, der nicht antworten kann. Korrigieren Sie das Netz und koppeln Sie erneut. Nur ein
Gerät, das gar keine Antwort gegeben hat, behält seinen Knoten, denn ob es beigetreten ist,
zeigt sich erst, wenn es im lokalen Netz erscheint.

## Was gespeichert wird {#what-is-stored}

| Was | Wo es liegt | Wie |
|---|---|---|
| Name und Art eines Netzes | Die Konfiguration der Station | Wie geschrieben. |
| Das WLAN-Passwort und das Thread Operational Dataset | Die Konfiguration der Station | Geschützt für den Windows-Benutzer, der sie eingegeben hat, wie Gerätepasswörter: Unter einem anderen Windows-Konto lesen sie sich leer und müssen neu eingegeben werden. Eine Sicherung lässt sie zurück; der [Export für einen anderen Rechner](settings-backups#export-for-another-machine) nimmt sie mit, versiegelt mit seinem eigenen Passwort. |
| Der Einrichtungscode | Nirgends | Er lebt nur im Formular, solange die Kopplung läuft, und wird geleert, wenn die Kopplung endet, fehlschlägt oder abgebrochen wird. |
| Das Netz, dem ein Gerät beigetreten ist | Die Konfiguration des Geräts | Sein Name, gezeigt im Feld **Netzwerk** des Geräts. |
| Die Identität des Geräts | Die Konfiguration des Geräts und das lokale Fabric | Die Node-ID. |

Das WLAN-Passwort und der Datensatz erscheinen nie im Journal, in der Adresse eines Geräts
oder in seiner Thing Description. Netze und Kopplung werden Agenten über den MCP-Server nicht
angeboten: Die Kopplung braucht jemanden am Gerät, und die Netze halten Geheimnisse.

## Identität des Knotens {#node-identity}

Ein gekoppeltes Gerät ist an die feste 64-Bit-**Node-ID** der Anlage gebunden, in seiner
Karte Verbindung als 16 hexadezimale Ziffern neben dem Zustand des Geräts gezeigt, und nur
gelesen. Der änderbare Anzeigename gehört Ihnen; die Node-ID nicht. Ein Gerät, dessen
gespeicherte Identität sich nicht mehr lesen lässt, zeigt an ihrer Stelle **Neue Kopplung
nötig**.

Der Bereich des Geräts zeigt außerdem ein nur lesbares Feld **Netzwerk**: den Namen des
Netzes, dem das Gerät beim Koppeln beigetreten ist. Ein Gerät, das eine Version gekoppelt
hat, die ihn nicht festhielt, sagt, dass nichts festgehalten wurde. Das Feld ist ein Eintrag,
keine Einstellung: Dieses Netz auf der Karte **Netzwerke** zu bearbeiten oder zu entfernen
ändert nichts am Gerät.

Weil die Identität die Node-ID ist, führen Matter-Geräte ihren Verbindungszustand
unabhängig: Einen Knoten zu deaktivieren, zu löschen oder zu verlieren macht keinen anderen
unerreichbar, und ein Gerät zu löschen gibt nur seine Nutzung der gesicherten Sitzung frei,
es entfernt die Anlage nicht aus dem lokalen Fabric.

## Gerätesuche {#discovery}

**Geräte suchen** beim Treiber Matter führt die Knoten auf, die bereits in das lokale Fabric
dieser Anwendung aufgenommen sind, und liest von jedem die Werte, die er veröffentlicht. Dazu öffnet
es mit jedem Knoten eine sichere Sitzung, sodass ein Knoten, der nicht im Netz ist, trotzdem
aufgeführt wird, ohne Werte, sobald seine Sitzung sich nicht öffnen ließ. Die Kandidaten der
Gerätesuche tragen die Identität des Knotens und kein Geheimnis der Einrichtung. Der allgemeine
Ablauf der Gerätesuche steht unter [Gerätesuche](connector-discovery).

| Der Knoten | Seine Karte | Seine Befehle |
|---|---|---|
| Hat hier kein Gerät: sein Gerät wurde gelöscht, oder seine Kopplung endete ohne eines | Die Werte, die er veröffentlicht, jeder angehakt | **Gerät hinzufügen** legt das Gerät mit den angehakten Werten als Tags an, ohne neue Zeremonie. |
| Ist ein konfiguriertes Gerät, mit Werten, für die es noch kein Tag hat | Als bereits konfiguriert gekennzeichnet, mit der Zahl der veröffentlichten Werte, die noch keine Tags sind, und diesen Werten angehakt | **Tags hinzufügen** fügt die angehakten Werte diesem Gerät hinzu; **Öffnen** öffnet es. |
| Ist ein konfiguriertes Gerät mit einem Tag für jeden Wert | "Bereits konfiguriert, mit einem Tag für jeden Wert, den das Gerät veröffentlicht." | **Öffnen** öffnet es. |
| Ist ein konfiguriertes Gerät, das keine Werte gemeldet hat | "Bereits konfiguriert. Das Gerät hat keine Werte gemeldet: Führen Sie Geräte suchen erneut aus, sobald es online ist." | **Öffnen** öffnet es. |

Die Werte eines konfigurierten Geräts werden mit seinen Tags nach Ausgang, Cluster und Attribut
verglichen, nie nach dem Namen: Ein Tag, das Sie umbenannt haben, zählt weiter, und ein Wert wird
nie zweimal hinzugefügt.

Die eigene Seite des Geräts bietet dasselbe, ohne sie zu verlassen: **Tags suchen** im Kopf seiner Karte der Tags liest nur diesen Knoten und listet die Werte, für die es noch kein Tag hat, angehakt, mit **Tags hinzufügen** (siehe [Die Tags eines Geräts suchen](connector-discovery#discovering-a-devices-tags)).

## Tags {#tags}

Die Tags eines Matter-Geräts kommen vom Gerät selbst: Niemand tippt dafür einen Cluster oder die
Nummer eines Attributs ein. Eine Kopplung, die gelingt, führt direkt zu ihnen. Das
Aktionsprotokoll liest "Matter-Gerät 'Küchenlicht' gekoppelt.", die Seite öffnet sich auf dem
Treiber Matter mit dem neuen Gerät markiert in seiner Tabelle Geräte, und sofort läuft eine Suche nur dieses Geräts. Das Gerät, das die Kopplung angelegt
hat, erscheint unter **Gefundene Geräte** mit den Werten, die es veröffentlicht, alle angehakt,
und die Suche endet mit "Haken Sie die Werte von 'Küchenlicht' an, die zu Tags werden sollen, und
dann Tags hinzufügen." Nehmen Sie den Haken bei dem weg, was Sie nicht wollen, und drücken Sie
**Tags hinzufügen**; das Aktionsprotokoll liest dann "5 Tags zu 'Küchenlicht' hinzugefügt." Ein
Gerät, das noch nicht geantwortet hat, meldet nichts: "'Küchenlicht' hat noch keine Werte
gemeldet. Führen Sie Geräte suchen erneut aus, sobald es online ist." Dieselbe Karte kommt bei
jedem späteren **Geräte suchen** wieder, mit den Werten, für die das Gerät noch kein Tag hat.

**Tags hinzufügen** wird nur für eine Rolle mit Connector konfigurieren gezeichnet. Es bleibt
ausgegraut, mit dem Grund als Tooltip, solange eine Suche oder eine Kopplung läuft, solange die
Station Änderungen ablehnt und solange nichts angehakt ist ("Haken Sie mindestens einen Wert an, der
hinzugefügt werden soll."). Ein Wert, dessen Ausgang, Cluster und Attribut das Gerät schon liest,
wird nie noch einmal hinzugefügt; wenn jeder angehakte Wert schon da ist, wird nichts gespeichert:
"'Küchenlicht' hat bereits ein Tag für jeden angehakten Wert, daher wurde nichts hinzugefügt." Ein
Name, den schon ein anderes Tag des Geräts trägt, bekommt eine Nummer dahinter, wie in Helligkeit (2).

Die Suche liest, was das Gerät veröffentlicht, so wie die Matter-Spezifikation es anlegt:

| Was | Wo das Gerät es sagt |
|---|---|
| Seine Ausgänge (Endpoints) | Der Cluster Descriptor (0x001D) auf Endpoint 0, Attribut `PartsList` |
| Die Cluster jedes Ausgangs | Der Descriptor dieses Ausgangs, Attribut `ServerList` |
| Die Werte jedes Clusters | Sein Attribut `AttributeList` (0xFFFB) |
| Die Befehle, die jeder Cluster annimmt | Sein Attribut `AcceptedCommandList` (0xFFF9) |
| Die optionalen Funktionen, die jeder Cluster umsetzt | Sein Attribut `FeatureMap` (0xFFFC) |
| Der aktuelle Messwert jedes Werts | Der Wert selbst, einmal gelesen |

Was die Suche anbietet, und unter welchem Namen:

| Ein Wert | Angeboten als |
|---|---|
| Einer, den der Treiber kennt (der nächste Abschnitt) | Sein verständlicher Name in der Sprache der Station und der Typ, den die Spezifikation ihm gibt; schreibbar nur, wenn das Gerät die Art annimmt, wie die Spezifikation ihn ändert, sonst nur lesbar |
| Einer, den der Treiber kennt, zu einer Funktion, die der Cluster nicht umsetzt: Farbton und Sättigung ohne die Funktion Hue and Saturation, Farbtemperatur ohne die Funktion Color Temperature | Nicht angeboten |
| Einer, den der Treiber nicht kennt | Nur lesbar, unter seinem Namen in der Matter-Spezifikation (`Level Control OnLevel`), oder unter dem Cluster und der Nummer des Attributs, wenn der Treiber das Attribut nicht kennt (`On/Off attribute 0x131B0001`); sein Typ ist der Typ des Messwerts, den das Gerät zurückgab |
| Derselbe Wert auf mehr als einem Ausgang | Sein Name sagt, welcher Ausgang, wie in Helligkeit (Ausgang 2) |
| Ein globales Attribut (0xFFF8 bis 0xFFFD) oder ein Wert des Knotens selbst (Endpoint 0) | Nicht angeboten |
| Eine Liste oder eine Struktur, ein Wert eines Typs, den der Treiber nicht führt, ein Wert, für den das Gerät keinen Messwert zurückgab | Weggelassen und in der Schlusszeile der Suche gezählt |

Ein Tag, das als schreibbar angeboten wird, kommt mit dem Zugriff Lesen und schreiben an; jedes
andere kommt mit Nur lesen an.

## Die Werte, die der Treiber kennt {#the-values-the-driver-knows}

Der Treiber führt eine Tabelle, aus der Matter-Spezifikation genommen, der Werte, die er beim Namen
kennt, und wie jeder sich ändert. Ein Wert ändert sich auf eine von drei Arten: durch einen Befehl,
den der Treiber sendet und den das Gerät unter den Befehlen aufführen muss, die es annimmt; durch
das Schreiben des Attributs selbst, wo die Spezifikation es schreibbar macht und das Gerät es
aufführt; oder gar nicht, bei einem Wert, den das Gerät nur meldet.

| Wert | Cluster und Attribut | Typ | Was das Schreiben am Gerät bewirkt | Bereich, den die Spezifikation festlegt |
|---|---|---|---|---|
| Eingeschaltet | On/Off (0x0006), `OnOff` (0x0000) | Boolean | true sendet den Befehl `On` (0x01), false sendet `Off` (0x00); schreibbar nur, wenn das Gerät beide annimmt | true oder false |
| Helligkeit | Level Control (0x0008), `CurrentLevel` (0x0000) | UInt32 | Sendet `MoveToLevelWithOnOff` (0x04) mit der Stufe, einer Übergangszeit von 0 und ohne übersteuerte Optionen: Der Ausgang schaltet mit der Stufe ein und beim Minimum aus | 0 bis 254 |
| Farbton | Color Control (0x0300), `CurrentHue` (0x0000) | UInt32 | Sendet `MoveToHue` (0x00) auf dem kürzesten Weg, mit einer Übergangszeit von 0; nur mit der Funktion Hue and Saturation | 0 bis 254 |
| Sättigung | Color Control (0x0300), `CurrentSaturation` (0x0001) | UInt32 | Sendet `MoveToSaturation` (0x03) mit einer Übergangszeit von 0; nur mit der Funktion Hue and Saturation | 0 bis 254 |
| Farbtemperatur | Color Control (0x0300), `ColorTemperatureMireds` (0x0007) | UInt32 | Sendet `MoveToColorTemperature` (0x0A) mit einer Übergangszeit von 0; nur mit der Funktion Color Temperature. Das Gerät hält den Wert innerhalb seiner eigenen Grenzen | 0 bis 65279, in Mired |
| Jalousieposition | Window Covering (0x0102), `CurrentPositionLiftPercent100ths` (0x000E) | UInt32 | Sendet `GoToLiftPercentage` (0x05) | 0 (offen) bis 10000 (geschlossen), in Hundertstel Prozent |
| Raumtemperatur | Thermostat (0x0201), `LocalTemperature` (0x0000) | Float, in °C | Nichts: nur lesbar | -27315 bis 32767, in Hundertstel Grad Celsius; gelesen -273,15 bis 327,67 °C |
| Kühlsollwert | Thermostat (0x0201), `OccupiedCoolingSetpoint` (0x0011) | Float, in °C | Schreibt das Attribut. Das Gerät lehnt einen Sollwert außerhalb seiner eigenen Grenzen ab | -27315 bis 32767, in Hundertstel Grad Celsius; gelesen -273,15 bis 327,67 °C |
| Heizsollwert | Thermostat (0x0201), `OccupiedHeatingSetpoint` (0x0012) | Float, in °C | Schreibt das Attribut. Das Gerät lehnt einen Sollwert außerhalb seiner eigenen Grenzen ab | -27315 bis 32767, in Hundertstel Grad Celsius; gelesen -273,15 bis 327,67 °C |
| Lüftermodus | Fan Control (0x0202), `FanMode` (0x0000) | UInt32 | Schreibt das Attribut | 0 aus, 1 niedrig, 2 mittel, 3 hoch, 4 ein, 5 automatisch, 6 intelligent |
| Vorgabe der Lüfterdrehzahl | Fan Control (0x0202), `PercentSetting` (0x0002) | UInt32 | Schreibt das Attribut | 0 bis 100 Prozent |
| Lüfterdrehzahl | Fan Control (0x0202), `PercentCurrent` (0x0003) | UInt32 | Nichts: nur lesbar | 0 bis 100 Prozent |
| Temperatur | Temperature Measurement (0x0402), `MeasuredValue` (0x0000) | Float, in °C | Nichts: nur lesbar | -27315 bis 32767, in Hundertstel Grad Celsius; gelesen -273,15 bis 327,67 °C |
| Luftfeuchtigkeit | Relative Humidity Measurement (0x0405), `MeasuredValue` (0x0000) | Float, in % | Nichts: nur lesbar | 0 bis 10000, in Hundertstel Prozent; gelesen 0 bis 100 % |
| Beleuchtungsstärke | Illuminance Measurement (0x0400), `MeasuredValue` (0x0000) | UInt32 | Nichts: nur lesbar | 0 bis 65534, also 10000 × log10(Lux) + 1 |
| Druck | Pressure Measurement (0x0403), `MeasuredValue` (0x0000) | Float, in kPa | Nichts: nur lesbar | -32767 bis 32767, in Zehntel Kilopascal; gelesen -3276,7 bis 3276,7 kPa |
| Belegung | Occupancy Sensing (0x0406), `Occupancy` (0x0000) | Boolean | Nichts: nur lesbar | true, wenn jemand da ist |
| Zustand | Boolean State (0x0045), `StateValue` (0x0000) | Boolean | Nichts: nur lesbar | true oder false |

Die Spezifikation sendet Temperaturen, Luftfeuchtigkeit und Druck in festen Einheiten: Hundertstel
Grad Celsius, Hundertstel Prozent und Zehntel Kilopascal. Die Suche bietet diese Werte bereits in
°C, % und kPa an: Das Tag kommt mit dem Faktor in seiner Stufe Skalierung (0,01 für eine Temperatur
und eine Luftfeuchtigkeit, 0,1 für einen Druck) und mit der Einheit an, sodass ein Tag, dessen Gerät
2150 sendet, 21,5 °C liest. Ein Schreiben macht diese Stufe rückgängig, bevor der Wert hinausgeht,
sodass ein als 21,5 geschriebener Sollwert als 2150 beim Gerät ankommt. Die Beleuchtungsstärke ist
logarithmisch (10000 × log10(Lux) + 1), daher rechnet sie kein Faktor um: Sie liest die Zahl, die
das Gerät sendet. Jeder andere Wert liest sich ebenfalls so, wie das Gerät ihn sendet.

Türschlösser, Farbe über X- und Y-Koordinaten, Szenen, Gruppen und der Befehl `Toggle` stehen nicht
in der Tabelle. Ein Matter-Gerät hat auch keine eigenen Befehle: Jede Änderung ist das Schreiben
eines seiner Tags.

## Einen Wert schreiben {#writing-a-value}

Ein Matter-Tag mit dem Zugriff Lesen und schreiben ändert das Gerät, wenn es geschrieben wird: von
seiner Karte Live-Wert, von einem Bedienelement des Dashboards, von der Logic oder von einem Agenten
aus. Das Schreiben reiht sich in die Warteschlange des Geräts ein wie bei jedem Treiber, im Wechsel
mit den Lesevorgängen des Geräts, und seine Antwort ist die des Geräts selbst. Der Treiber wählt
den Matter-Befehl oder das Schreiben des Attributs aus der Tabelle; niemand wählt einen Befehl. Nur
das SUCCESS des Geräts zählt als geschrieben. Alles andere wird abgelehnt, mit einem Grund:

| Was geschieht | Entschieden | Der genannte Grund |
|---|---|---|
| Der Punkt ist kein Wert der Tabelle des Treibers | Bevor etwas gesendet wird | Der Treiber weiß nicht, wie das Gerät diesen Wert ändert, daher liest das Tag ihn nur. |
| Der Punkt ist ein Wert, den die Tabelle als nur lesbar kennzeichnet | Bevor etwas gesendet wird | Das Gerät meldet diesen Wert, und nichts von außen setzt ihn. |
| Der geschriebene Wert ist weder true noch false (bei einem Boolean-Wert) oder keine ganze Zahl | Bevor etwas gesendet wird | Was der Wert annimmt und was geschrieben wurde. |
| Der Wert liegt außerhalb des Bereichs, den die Spezifikation festlegt | Bevor etwas gesendet wird | Der Bereich, wie die Tabelle oben ihn angibt. |
| Das Tag nennt keinen Cluster | Bevor etwas gesendet wird | Dass ein Matter-Wert über seinen Ausgang, seinen Cluster und sein Attribut gefunden wird. |
| Das Gerät antwortet mit einem anderen Status als SUCCESS | Vom Gerät | Der Status, wie das Gerät ihn angegeben hat: sein Name in der Spezifikation und seine Nummer, zum Beispiel CONSTRAINT_ERROR, 0x87 (der Wert liegt außerhalb dessen, was das Gerät annimmt) oder UNSUPPORTED_COMMAND, 0x81 (das Gerät nimmt den Befehl nicht an, der diesen Wert ändert). Ein Status, den der Cluster hinzufügt, folgt ihm (FAILURE, 0x01, cluster 0x02), und ein Status, den die Spezifikation nicht benennt, liest sich als seine Nummer allein. |
| Das Gerät antwortet nicht rechtzeitig | Vom Gerät | Keine Antwort. |

Ein abgelehntes Schreiben wird nie als geschrieben gemeldet, und auch nie als nicht erreichbares
Gerät. Auf der Seite des Tags liest die Statuszeile "Schreiben von der Anlage abgelehnt:
CONSTRAINT_ERROR, 0x87.", wenn das Gerät es abgelehnt hat, mit dem Grund an der Stelle des Status
bei einer Ablehnung, die entschieden wurde, bevor etwas gesendet wurde, und "Schreiben nicht
bestätigt: Die Anlage hat nicht rechtzeitig geantwortet.", wenn keine Antwort kam; "Das Schreiben
ist fehlgeschlagen: Die Anlage war nicht erreichbar." bleibt einem Gerät vorbehalten, das nicht
verbunden ist. Der Grund reist außerdem mit dem Schreiben: Die Zeile des Journals zu diesem
Schreiben nennt ihn, mit dem, was der Status bedeutet, und das `tag_write` eines Agenten gibt ihn
zurück.

## Ein von Hand angelegtes Tag {#a-tag-made-by-hand}

Für den seltenen Wert, den das Gerät nicht in einer Form veröffentlicht, die die Suche anbietet,
legt **Tag hinzufügen** an einem Matter-Gerät ein Tag an, das von Hand ausgefüllt wird. Seine Karte
Quelle zeigt drei Felder in einer Zeile, und die Vorschau der Adresse darunter setzt sie als
`<endpoint>/<cluster>/<attribute>` zusammen, dezimal (`1/8/0` ist die Helligkeit des ersten
Ausgangs). Solange kein Cluster gewählt ist, wird das Tag nicht gespeichert, und das Panel sagt:
"Wählen Sie den Cluster, den dieses Tag liest. Ohne ihn wird das Gerät nie nach etwas gefragt."

| Feld | Was es tut | Werte | Standard |
|---|---|---|---|
| **Ausgang (Endpoint)** | Welchen Ausgang des Geräts das Tag liest. | 0 bis 65535; 1 ist der erste steuerbare Ausgang, 0 der Knoten selbst | 1 |
| **Matter-Cluster** | Welchen Cluster dieses Ausgangs das Tag liest. | Die Cluster des Matter-Katalogs mit ihrem Namen in der Spezifikation und ihrer Nummer, wie in `Level Control (0x0008)`; ein Cluster, den der Katalog nicht benennt und den eine Suche gefunden hat, steht zuerst, mit seiner Nummer | keiner |
| **Attribut** | Welches Attribut des Clusters das Tag liest. | 0 und mehr; 0 ist der eigene Wert des Clusters | 0 |

Der Name des Tags ist frei: Er benennt das Tag und wählt nichts am Gerät aus. Der Datentyp wird
unter Boolean, Int32, UInt32, Float, Double und String gewählt; ein Messwert, den der angegebene Typ
nicht darstellen kann, liest sich als Fehler statt als Ersatzzahl.
Der Wert kommt so an, wie das Gerät ihn sendet: Eine von Hand angelegte Temperatur,
Luftfeuchtigkeit oder ein von Hand angelegter Druck liest sich in Hundertsteln oder Zehnteln, bis
Sie dem Tag den Faktor und die Einheit der Tabelle oben in seiner Stufe Skalierung geben.

Das Feld Zugriff bietet das Schreiben nur dort an, wo die Tabelle des Treibers den Wert ändert, und
bietet sonst Nur lesen an und sagt darunter, warum:

| Der Punkt | Das Feld Zugriff bietet an | Was es sagt |
|---|---|---|
| Ein Wert der Tabelle, den ein Befehl oder das Schreiben des Attributs ändert | Nur lesen, Nur schreiben und Lesen und schreiben | Nichts |
| Noch kein Cluster gewählt | Nur lesen | "Nur lesbar, bis das Tag einen Wert des Geräts benennt: Wählen Sie seinen Cluster." |
| Ein Wert, den die Tabelle nicht kennt | Nur lesen | "Nur lesbar: Der Treiber weiß nicht, wie das Gerät diesen Wert ändert." |
| Ein Wert, den die Tabelle als nur lesbar kennzeichnet | Nur lesen | "Nur lesbar: Das Gerät meldet diesen Wert, und nichts von außen setzt ihn." |

Wenn eine Änderung des Ausgangs, des Clusters oder des Attributs das Tag auf einen Wert richtet,
den der Treiber nicht schreiben kann, kehrt sein Zugriff zu Nur lesen zurück. Ein Tag, das die Suche
angeboten hat, behält den Zugriff, den die Suche ihm gegeben hat, denn nur die Suche fragt das
Gerät, welche Befehle es annimmt: Ein Wert, den das Gerät nicht aufgeführt hat, bleibt Nur lesen,
und das Feld bietet das Schreiben trotzdem an.

## Tags, die frühere Versionen gespeichert haben {#tags-saved-by-earlier-versions}

Eine frühere Version nannte den Cluster eines Matter-Tags nur über den Namen des Tags, mit der
Adresse `<endpoint>/<attribute>`. Wenn diese Version zum ersten Mal startet, bekommt jedes Tag eines
Matter-Geräts, dessen Name ein Cluster des Matter-Katalogs ist (der Teil nach dem letzten
Doppelpunkt, ohne die Leerzeichen darum, ohne Rücksicht auf Groß- und Kleinschreibung), diesen
Cluster, sodass es genau den Wert weiterliest, den es gelesen hat. Sein Name bleibt, wie er war, und
die Vorschau seiner Adresse zeigt dann `<endpoint>/<cluster>/<attribute>`. Ein Tag, dessen Name zu
keinem Cluster passte, hat nie etwas gelesen: Es bleibt ohne Cluster, seine Lesevorgänge werden mit
einem Grund abgelehnt, der das sagt, und seine Seite fragt nach dem Cluster. Ein umgewandeltes Tag
behält den Zugriff, den es hatte, Nur lesen, den einzigen, den diese Versionen anboten; um es zu
schreiben, stellen Sie Lesen und schreiben ein, was für die Werte der Tabelle oben funktioniert.
