Urządzenia wieloczęściowe na iOS

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.

  • Przykład panelu ściennego z wieloma przełącznikami przedstawiający natywną reprezentację Matter i płaskie renderowanie interfejsu Home API

    Płaska reprezentacja panelu ściennego z 4 przełącznikami.

  • Przykład lodówki z natywną reprezentacją Matter i płaskim renderowaniem interfejsu Home API

    Płaska reprezentacja lodówki

Rysunek 1. Przykłady renderowania płaskiego

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:

  • Przykład panelu ściennego z wieloma przełącznikami przedstawiający natywną reprezentację Matter i renderowanie wieloczęściowe interfejsu Home API

    Reprezentacja wieloczęściowa panelu ściennego.

  • Przykład lodówki z natywną reprezentacją Matter i renderowaniem wieloczęściowym interfejsu Home API

    Reprezentacja wieloczęściowa lodówki.

Rysunek 2. Przykłady renderowania wieloczęściowego

Zawsze możesz uzyskać reprezentację płaską, pomijając parametr enableMultipartDevices lub ustawiając go na false.

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)
}