Niektóre urządzenia Matter składają się z wielu punktów końcowych tego samego typu. Inne urządzenia Matter mają strukturę hierarchiczną, a punkty końcowe są zagnieżdżone w innych punktach końcowych. W interfejsach API Google Home oba rodzaje urządzeń są określane jako urządzenia wieloczęściowe.
Reprezentacja płaska
Przed wersją 1.8 interfejsów API Google Home urządzenia wieloczęściowe były reprezentowane przez te interfejsy jako zestaw oddzielnych, niezwiązanych ze sobą urządzeń. Nazywa się to reprezentacją płaską.
Na przykład pojedynczy panel ścienny z 4 przełącznikami jest widoczny w interfejsach API Google Home jako 4 oddzielne i niezwiązane ze sobą urządzenia. Urządzenie Matter o strukturze hierarchicznej, takie jak lodówka, może być reprezentowane w interfejsach API Google Home jako zestaw urządzeń, z których każde odpowiada jednemu z punktów końcowych.
Płaska reprezentacja panelu ściennego z 4 przełącznikami.
Płaska reprezentacja lodówki
Reprezentacja wieloczęściowa
Od wersji 1.8 interfejsów API Google Home urządzenie wieloczęściowe może być reprezentowane w interfejsie API jako pojedyncze urządzenie. Aby włączyć to działanie, wywołaj metodę
devices() w
instancji Home
i ustaw parametr enableMultipartDevices na true:
let multipartDevices = try await self.home.devices(enableMultipartDevices: true).list() let multipartDevice = multipartDevices.first { $0.id == powerStrip.device.id } let outlets = try await device.types.getAll(of: OnOffPluginUnitDeviceType.self)
Poniższe diagramy pokazują, jak opcja enableMultipartDevices wpływa na reprezentację urządzenia wieloczęściowego w interfejsach API Google Home:
Reprezentacja wieloczęściowa panelu ściennego.
Reprezentacja wieloczęściowa lodówki.
Zawsze możesz uzyskać reprezentację płaską, pomijając parametr enableMultipartDevices lub ustawiając go na false.
Nawigacja po urządzeniu wieloczęściowym
W urządzeniu wieloczęściowym każda instancja komponentu typu urządzenia jest nazywana częścią.
Do części można uzyskać dostęp bezpośrednio na urządzeniu nadrzędnym lub w sposób
hierarchiczny, używając typów urządzeń lub Matter semantycznych
tagów. Tagi semantyczne są implementowane w interfejsach API Google Home za pomocą
SemanticTag.
Klasa DeviceType
umożliwia deweloperom przechodzenie przez drzewo urządzeń za pomocą
parts()
metody:
let outlet1 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first { $0.tags.contains(SemanticTag.CommonNumber.one) } let outlet3 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first { $0.tags.contains(SemanticTag.CommonNumber.three) }
Poniższy przykład pokazuje, jak uzyskać dostęp do części urządzenia lodówki:
let refrigerator: RefrigeratorDeviceType? = await home.devices(enableMultipartDevices: true).first { $0.id == FRIDGE_ID } // Get different cabinets of the refrigerator let freezer = refrigerator!.parts(type: TemperatureControlledCabinetDeviceType.self).first { $0.tags.contains(SemanticTag.Refrigerator.freezer) }