Многокомпонентные устройства на iOS

Некоторые устройства Matter состоят из нескольких конечных точек одного типа. Другие устройства Matter имеют иерархическую структуру, где конечные точки вложены друг в друга. В API Home оба типа устройств называются многокомпонентными устройствами .

Плоское изображение

До выпуска версии 1.8 API Home многокомпонентные устройства представлялись API Home как набор отдельных, не связанных между собой устройств. Это называется плоским представлением.

Например, одно настенное панельное устройство с четырьмя выключателями отображается в API Home как четыре отдельных и не связанных между собой устройства. А иерархическое устройство Matter , такое как холодильник, может быть представлено в API Home как набор устройств, каждое из которых соответствует одной из конечных точек.

  • Пример настенной панели с несколькими переключателями, демонстрирующий стандартное представление Matter и плоскую отрисовку Home API.

    Плоское изображение настенной панели с четырьмя выключателями.

  • Пример холодильника, демонстрирующий нативное представление Matter и плоскую отрисовку Home API.

    Плоское изображение холодильника

Рисунок 1 : Примеры плоской визуализации

Многокомпонентное представление

Начиная с версии 1.8 API Home, многокомпонентное устройство может быть представлено в API как одно устройство. Чтобы включить это поведение, вызовите метод devices() экземпляра Home и установите параметр enableMultipartDevices в 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)

Следующие диаграммы иллюстрируют, как параметр enableMultipartDevices влияет на представление многокомпонентного устройства в API Home:

  • Пример настенной панели с несколькими переключателями, демонстрирующий стандартное представление Matter и многокомпонентную отрисовку Home API.

    Многокомпонентное изображение стеновой панели.

  • Пример холодильника, демонстрирующий нативное представление Matter и многокомпонентную отрисовку Home API.

    Многокомпонентное изображение холодильника.

Рисунок 2 : Примеры многокомпонентного рендеринга

У вас всегда есть возможность получить плоское представление, либо опустив параметр enableMultipartDevices , либо установив его значение равным false .

В многокомпонентном устройстве каждый экземпляр компонента определенного типа называется частью .

Доступ к компонентам может осуществляться непосредственно либо на родительском устройстве, либо в иерархическом порядке с использованием типов устройств или семантических тегов Matter . Семантические теги реализованы в API Home с помощью SemanticTag .

Класс DeviceType позволяет разработчикам обходить дерево устройств с помощью метода 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)
}

Следующий пример показывает, как получить доступ к частям холодильника:

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