Podstawowy typ urządzenia Chime można zaimplementować za pomocą standardowej cechy MatterMatter.ChimeTrait lub własnej wersji tej cechy od Google Google.ChimeTrait, która oprócz funkcji określonych w standardzie Matter obsługuje zewnętrzne dzwonki.
Urządzenie dzwonkowe może też implementować interfejs
Matter.IdentifyTrait,
który umożliwia identyfikację urządzenia dzwonkowego 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 naiOS.
| Typ urządzenia interfejsów Home API | Cechy | Przykładowa aplikacja w Swift | 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 ChimeTrait |
Dzwonek |
Uzyskiwanie podstawowych informacji o urządzeniu
Zaimplementowano w przykładowej aplikacji na iOS
Cechy BasicInformation
zawierają informacje takie jak nazwa dostawcy, identyfikator dostawcy, identyfikator produktu, nazwa produktu (zawiera informacje o modelu) i wersja oprogramowania urządzenia:
let vendorName = basicInfoTrait.attributes.vendorName! let vendorID = basicInfoTrait.attributes.vendorID! let productID = basicInfoTrait.attributes.productID! let productName = basicInfoTrait.attributes.productName! let softwareVersion = basicInfoTrait.attributes.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 wspomnieliśmy wcześniej, ponieważ ChimeDeviceType może mieć wiele części, zachęcamy deweloperów do traktowania wszystkich dzwonków jako urządzeń wieloczęściowych. 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 GoogleHomeSDK import GoogleHomeTypes typealias ChimeTrait = Matter.ChimeTrait typealias OpenCloseTrait = Google.OpenCloseTrait // Fetch devices using the multipart device model. let multipartDevices = try await home.devices(enableMultipartDevices: true).list() guard let chimeParentDevice = multipartDevices.first(where: { $0.types.contains(ChimeDeviceType.self) }) else { return } guard let doorDevice = multipartDevices.first(where: { $0.types.contains(GoogleDoorDeviceType.self) }) else { return } // Extract the AutomationPartPath for the specific Chime part guard let chimeType = await chimeParentDevice.types.get(ChimeDeviceType.self), let chimePartPath = chimeParentDevice.automationPart(chimeType) else { return } let starterNode = starter(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self) let doorOpenClose = stateReader(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self) // Build the automation let chimeAutomation = automation( name: "Multipart Chime Demo", description: "Activate the chime when the door is opened" ) { starterNode condition { starterNode.openPercent.unwrapOptional().greaterThan(0) } // Action: Play a chime sound action(chimePartPath) { ChimeTrait.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.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
Stan partiallyOnline 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 routing lokalny, ale cechy oparte na chmurze będą niedostępne.
Uzyskiwanie adresu IP urządzenia
Aby znaleźć adres IP urządzenia, użyj atrybutu networkInterfaces elementu GeneralDiagnosticsTrait.
Adresy są zwracane jako obiekty Data, które możesz sformatować w standardowe ciągi IPv4 lub IPv6 za pomocą struktury Network:
func getIpAddresses(trait: Matter.GeneralDiagnosticsTrait) -> [String] {
let interfaces = trait.attributes.networkInterfaces ?? []
var ipAddresses: [String] = []
for interface in interfaces {
for data in interface.iPv4Addresses {
if let ipv4 = IPv4Address(data) {
ipAddresses.append(String(describing: ipv4))
}
}
for data in interface.iPv6Addresses {
if let ipv6 = IPv6Address(data) {
ipAddresses.append(String(describing: ipv6))
}
}
}
return ipAddresses
}