Dispositivos multiponto no iOS

Alguns dispositivos Matter são compostos por vários endpoints com o mesmo tipo de dispositivo. Outros dispositivos Matter são hierárquicos, com endpoints aninhados em outros endpoints. Nas APIs Home, os dois tipos de dispositivos são chamados de dispositivos multipartes.

Representação plana

Antes da versão 1.8 das APIs Home, os dispositivos multipartes eram representados pelas APIs Home como um conjunto de dispositivos separados e não relacionados. Isso é conhecido como representação simples.

Por exemplo, um único dispositivo de painel de parede com quatro interruptores aparece nas APIs Home como quatro dispositivos distintos e não relacionados. Um dispositivo Matter hierárquico, como uma geladeira, pode ser representado nas APIs Home como um conjunto de dispositivos, cada um correspondendo a um dos endpoints.

  • Exemplo de painel de parede com vários interruptores mostrando a representação nativa do Matter e a renderização plana da API Home

    Representação plana de um painel de parede com quatro interruptores.

  • Exemplo de geladeira mostrando a representação nativa do Matter e a renderização simples da API Home

    Representação plana de uma geladeira

Figura 1: exemplos de renderização plana

Representação de várias partes

A partir da versão 1.8 das APIs Home, um dispositivo multipart pode ser representado na API como um único dispositivo. Para ativar esse comportamento, chame o método devices() na instância Home e defina o parâmetro enableMultipartDevices como 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)

Os diagramas a seguir ilustram como a opção enableMultipartDevices afeta a representação de um dispositivo multipart na API Home:

  • Exemplo de painel de parede com vários interruptores mostrando a representação nativa do Matter e a renderização multipart da API Home

    Representação de várias partes de um painel de parede.

  • Exemplo de geladeira mostrando a representação nativa do Matter e a renderização
    em várias partes da API Home

    Representação multipart de uma geladeira.

Figura 2: exemplos de renderização de várias partes

Você sempre pode omitir o parâmetro enableMultipartDevices ou defini-lo como false para receber a representação plana.

Em um dispositivo multipart, cada instância de componente de um tipo de dispositivo é chamada de parte.

As peças podem ser acessadas diretamente no dispositivo principal ou de forma hierárquica, usando tipos de dispositivo ou tags semânticas Matter. As tags semânticas são implementadas nas APIs Home com SemanticTag.

A classe DeviceType permite que os desenvolvedores percorram a árvore de dispositivos usando o método 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)
}

O exemplo a seguir mostra como acessar as partes de um dispositivo de geladeira:

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