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 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 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 Home API jako 4 oddzielne i niepowiązane urządzenia. Urządzenie hierarchiczne, 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.Matter

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

    Płaska reprezentacja 4-przyciskowego panelu ściennego.

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

    Płaska ilustracja lodówki

Rysunek 1. Przykłady renderowania płaskiego

Reprezentacja wieloczęściowa

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 działanie, wywołaj metodę devices() na instancji Home i ustaw parametr enableMultipartDevices na true:

let devices = try await self.home.devices(enableMultipartDevices: true).list()
    let device = devices.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 wieloma przełącznikami pokazujący natywną reprezentację Matter i renderowanie wieloczęściowe w interfejsie Home API

    Wieloczęściowa reprezentacja panelu ściennego.

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

    Wieloczęściowa reprezentacja lodówki.

Ilustracja 2. Przykłady renderowania wieloczęściowego

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

W przypadku urządzenia wieloczęściowego każde wystąpienie komponentu danego typu urządzenia jest nazywane częścią.

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

Klasa DeviceType umożliwia programistom 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)
}

W kolejnym przykładzie pokazujemy, 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)
}