Podstawowy typ urządzenia Chime można zaimplementować za pomocą standardowego atrybutu opartego na Mattercom.google.home.matter.standard.Chime lub własnej wersji atrybutu Google com.google.home.google.Chime, która oprócz funkcji określonych w standardzie Matter obsługuje zewnętrzne dzwonki.
Urządzenie z dzwonkiem może też implementować cechę
Identify,
która umożliwia identyfikację urządzenia z dzwonkiem na podstawie wyglądu lub dźwięku.
Zanim użyjesz jakichkolwiek funkcji lub spróbujesz zaktualizować atrybuty, zawsze sprawdzaj, czy urządzenie obsługuje atrybuty i polecenia. Więcej informacji znajdziesz w sekcji Sterowanie urządzeniami naAndroid.
| Typ urządzenia interfejsów Home API | Cechy | Przykładowa aplikacja w Kotlinie | Przypadek użycia |
|---|---|---|---|
|
Dzwonki
Urządzenie, które może odtwarzać różne preinstalowane dźwięki i jest zwykle używane z dzwonkiem, dzwonkiem audio lub wideodomofonem. |
Wymagane cechy matter Dzwonek |
Dzwonek |
Uzyskiwanie podstawowych informacji o urządzeniu
Wdrożono w przykładowej aplikacji na Androida
Cechy BasicInformation
zawierają informacje takie jak nazwa dostawcy, identyfikator dostawcy, identyfikator produktu, nazwa produktu (zawiera informacje o modelu) i wersja oprogramowania urządzenia:
// 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}") }
Obsługa przesyłania podzielonego na części
Dzwonek może składać się z kilku typów urządzeń, w tym z dzwonka i opcjonalnie z głośnika. Niektóre dzwonki mają teżThread Border Router (TBR). Aby zapewnić jak najszerszą obsługę, aplikacje interfejsów Home API, które sterują dzwonkami, powinny być napisane tak, aby obsługiwać urządzenia z wieloma dzwonkami. Więcej informacji znajdziesz w sekcji Urządzenia wieloczęściowe.
Każde urządzenie z wieloczęściowym dzwonkiem powinno być reprezentowane w aplikacji przez jeden kafelek. Urządzenie Chime powinno być urządzeniem głównym, a głośnik dla dzieci powinien być częścią urządzenia Chime.
Głośność głośnika powinna być wyświetlana jako ustawienie podstawowe urządzenia Chime.
Mapowanie OnOff
W przypadku dzwonka z typami urządzeń Dzwonek i Głośnik przycisk włączania/wyłączania w aplikacji sterującej powinien być przypisany do atrybutu Enabled dzwonka.
Zgodnie ze Matterspecyfikacją biblioteki urządzeń ustawienie atrybutu Enabled cechy Dzwonek na False może oprócz wyłączenia dzwonka działać jak globalny przełącznik wyciszania, który tłumi wszystkie wskaźniki dźwiękowe i wizualne.
Pomoc dotycząca automatyzacji
Jak już wspomnieliśmy, ponieważ ChimeDevice może mieć wiele części, zalecamy, aby deweloperzy traktowali wszystkie dzwonki jako urządzenia wieloczęściowe. Dotyczy to również automatyzacji, które korzystają z dzwonków.
Dzwonków można używać w poleceniach inicjujących i działaniach automatyzacji.
Każde urządzenie będące częścią nadrzędnego urządzenia Chime, które jest używane w automatyzacji, musi być przywoływane za pomocą AutomationPartPath.
Poniższa automatyzacja pokazuje, jak utworzyć automatyzację z wieloczęściowym dzwonkiem, która implementuje cechę Chime oraz głośnik. Automatyzacja jest aktywowana po otwarciu drzwi wejściowych:
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()) } } }
Więcej informacji o automatyzacjach z użyciem urządzeń wieloczęściowych znajdziesz w artykule Automatyzacje z użyciem urządzeń wieloczęściowych.
Sprawdzanie połączenia urządzenia
Połączenie urządzenia jest sprawdzane na poziomie typu urządzenia, ponieważ niektóre urządzenia obsługują wiele typów. Zwracany stan jest kombinacją stanów łączności wszystkich cech na tym urządzeniu.
Wdrożono w przykładowej aplikacji na Androidaval lightConnectivity = dimmableLightDevice.metadata.sourceConnectivity.connectivityState
Stan PARTIALLY_ONLINE może wystąpić w przypadku różnych typów urządzeń, gdy nie ma połączenia z internetem.
Matter standardowe cechy mogą być nadal dostępne online ze względu na lokalne przekierowywanie, ale cechy oparte na chmurze będą niedostępne.
Uzyskiwanie adresu IP urządzenia
Aby znaleźć adres IP urządzenia, użyj atrybutu networkInterfaces cechy GeneralDiagnostics. Adresy są zwracane jako tablice bajtów, które możesz sformatować jako standardowe ciągi IPv4 lub IPv6:
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()