Der grundlegende Chime-Gerätetyp kann entweder mit dem standardmäßigen Matter-basierten Trait com.google.home.matter.standard.Chime oder mit der benutzerdefinierten Version des Traits von Google, com.google.home.google.Chime, implementiert werden. Letzterer unterstützt zusätzlich zu den im Matter-Standard angegebenen Funktionen auch externe Glocken.
Ein Gonggerät kann auch das Merkmal Identify implementieren, mit dem das Gonggerät visuell oder akustisch identifiziert werden kann.
Prüfen Sie immer, ob ein Gerät Attribute und Befehle unterstützt, bevor Sie Funktionen verwenden oder versuchen, Attribute zu aktualisieren. Weitere Informationen finden Sie unter Geräte auf Android steuern.
| Gerätetyp für Smart-Home-APIs | Merkmale | Kotlin-Beispiel-App | Anwendungsfall |
|---|---|---|---|
|
Glocke
Ein Gerät, das eine Reihe vorinstallierter Sounds abspielen kann und in der Regel mit einer Türklingel, einer Audio-Türklingel oder einer Video-Türklingel verwendet wird. |
Erforderliche Merkmale matter Chime |
Türklingel |
Grundlegende Informationen zu einem Gerät abrufen
In der Beispiel-App für Android implementiert
Das Attribut BasicInformation enthält Informationen wie den Namen des Anbieters, die Anbieter-ID, die Produkt-ID, den Produktnamen (einschließlich Modellinformationen) und die Softwareversion für ein Gerät:
// Get device basic information. All general information traits are on the RootNodeDevice type. device.type(RootNodeDevice).first().standardTraits.basicInformation?.let { basicInformation -> println("vendorName ${basicInformation.vendorName}") println("vendorId ${basicInformation.vendorId}") println("productId ${basicInformation.productId}") println("productName ${basicInformation.productName}") println("softwareVersion ${basicInformation.softwareVersion}") }
Unterstützung von mehrteiligen Inhalten
Ein Gong kann aus mehreren Gerätetypen bestehen, darunter ein Gong und optional ein Lautsprecher. Einige Glockenspiele enthalten außerdem ein Thread Border Router (TBR). Um eine möglichst breite Unterstützung zu gewährleisten, sollten Home-APIs-Apps, die Glocken steuern, für Geräte mit mehreren Glocken geschrieben werden. Weitere Informationen finden Sie unter Multipart-Geräte.
Jedes Gerät mit mehrteiligem Glockenspiel sollte in der App durch eine einzelne Kachel dargestellt werden. Das Chime-Gerät sollte das primäre Gerät sein und ein untergeordneter Lautsprecher sollte ein Teil des Chime-Geräts sein.
Die Lautstärke des Lautsprechers sollte als primäre Einstellung eines Chime-Geräts angezeigt werden.
OnOff-Zuordnung
Bei einem Gong mit den Gerätetypen „Gong“ und „Lautsprecher“ sollte eine Ein/Aus-Schaltfläche in einer Steuerungs-App dem Enabled-Attribut des Gongs zugeordnet werden.
Gemäß der Matter-Gerätebibliotheksspezifikation kann das Festlegen des Enabled-Attributs des Chime-Traits auf False neben dem Deaktivieren des Chime wie ein globaler Stummschalter wirken, der alle hörbaren und visuellen Anzeigen unterdrückt.
Unterstützung für Automatisierung
Wie bereits erwähnt, kann ein ChimeDevice mehrere Teile haben. Entwickler sollten daher alle Glocken als mehrteilige Geräte behandeln. Das gilt auch für Automatisierungen, bei denen Glocken verwendet werden.
Glockensignale können in Auslösern und Aktionen für automatisierte Abläufe verwendet werden.
Jedes Komponentengerät unter dem übergeordneten Chime-Gerät, das in der Automatisierung verwendet wird, muss mit einem AutomationPartPath referenziert werden.
Die folgende Automatisierung zeigt, wie Sie eine Automatisierung mit einem mehrteiligen Gong erstellen, der das Chime-Trait sowie einen Lautsprecher implementiert. Die Automatisierung wird ausgelöst, wenn die Haustür geöffnet wird:
import com.google.home.automation.automation import com.google.home.automation.greaterThan import com.google.home.google.GoogleDoorDevice import com.google.home.google.OpenClose import com.google.home.matter.standard.ChimeDevice import com.google.home.matter.standard.Chime // ... // Fetch devices val devices = homeManager.devices() // Fetch devices using the multipart device model. val multipartDevices = homeManager.devices(enableMultipartDevices = true) val doorDevice = devices.first() { it.has(GoogleDoorDevice) && it.has(OpenClose) } // Obtain a reference to the chime device. val chime = multipartDevices.first() { it.has(ChimeDevice) && it.has(Chime) } // Extract the AutomationPartPath for the specific Chime part val chimePartPath = chime.automationPart(chime.part(ChimeDevice).first())!! // Build the automation val chimeAutomation = automation { sequential { val doorOpenClose = stateReader<_>(doorDevice, GoogleDoorDevice, OpenClose) // Starter: When the door state changes val starterNode = starter<_>(doorDevice, GoogleDoorDevice, OpenClose) condition { expression = doorOpenClose.openPercent greaterThan(0) } // Action: Play a chime sound action(chimePartPath) { command(Chime.playChimeSound()) } } }
Weitere Informationen zu automatisierten Abläufen mit Geräten, die aus mehreren Teilen bestehen, findest du unter Automatisierte Abläufe mit Geräten, die aus mehreren Teilen bestehen.
Verbindung für ein Gerät prüfen
Die Verbindung für ein Gerät wird auf der Ebene des Gerätetyps geprüft, da einige Geräte mehrere Gerätetypen unterstützen. Der zurückgegebene Status ist eine Kombination der Verbindungsstatus für alle Merkmale auf diesem Gerät.
In der Beispiel-App für Android implementiertval lightConnectivity = dimmableLightDevice.metadata.sourceConnectivity.connectivityState
Der Status PARTIALLY_ONLINE kann bei gemischten Gerätetypen auftreten, wenn keine Internetverbindung besteht.
Matter-Standardmerkmale sind aufgrund des lokalen Routings möglicherweise weiterhin online, cloudbasierte Merkmale sind jedoch offline.
IP-Adresse des Geräts ermitteln
Verwende das Attribut networkInterfaces des Traits GeneralDiagnostics, um die IP-Adresse des Geräts zu ermitteln. Die Adressen werden als Byte-Arrays zurückgegeben, die Sie in Standard-IPv4- oder IPv6-Strings formatieren können:
val ipAddresses =
trait.networkInterfaces?.flatMap { networkInterface ->
(networkInterface.ipv4Addresses + networkInterface.ipv6Addresses).mapNotNull { bytes ->
try {
java.net.InetAddress.getByAddress(bytes).hostAddress
} catch (e: java.net.UnknownHostException) {
null
}
}
} ?: emptyList()