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 są hierarchiczne, a punkty końcowe są zagnieżdżone w innych punktach końcowych. W interfejsach Home API oba rodzaje urządzeń są nazywane urządzeniami wieloczęściowymi.

Płaska reprezentacja

Przed wersją 1.8 interfejsów Home API urządzenia wieloczęściowe są reprezentowane przez interfejsy Home API jako zestaw oddzielnych, niepowiązanych urządzeń. Jest to tzw. reprezentacja płaska.

Na przykład pojedynczy panel ścienny z 4 przełącznikami jest widoczny w interfejsach Home API jako 4 oddzielne i niepowiązane urządzenia. Urządzenie hierarchiczne Matter, takie jak lodówka, może być reprezentowane w interfejsach Home API jako zestaw urządzeń, z których każde odpowiada jednemu z punktów końcowych.

  • Przykład panelu ściennego z kilkoma przełącznikami, który pokazuje natywną reprezentację Matter i płaskie renderowanie interfejsu Home API

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

  • Przykład lodówki pokazujący natywną reprezentację Matter i płaskie renderowanie interfejsu Home API

    Płaski obraz lodówki

Rysunek 1. Przykłady renderowania płaskiego

Reprezentacja wieloczęściowa

Począwszy od wersji 1.8 interfejsów Home API, urządzenie wieloczęściowe może być reprezentowane w interfejsie API jako jedno urządzenie. Aby włączyć to zachowanie, 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 Home API:

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

    Wieloczęściowa reprezentacja panelu ściennego.

  • Przykład lodówki pokazujący natywną reprezentację Matter i renderowanie wieloczęściowe interfejsu Home API

    Wieloczęściowa reprezentacja 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ą.

Dostęp do części można uzyskać bezpośrednio na urządzeniu nadrzędnym lub w części w sposób hierarchiczny, używając typów urządzeń lub tagów semantycznych Matter. Tagi semantyczne są implementowane w interfejsach Home API za pomocą SemanticTag.

Klasa DeviceType umożliwia deweloperom przechodzenie przez drzewo urządzeń za pomocą metody parts():

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

Kolejny przykład pokazuje, jak uzyskać dostęp do części 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)
}