Chime-Geräteleitfaden für Android

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

ChimeDevice

home.matter.0000.types.0146

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

Optionale Merkmale
     matter Identify
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 implementiert   
val 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()