Alguns Matter dispositivos são compostos por vários endpoints com o mesmo tipo de dispositivo. Outros Matter dispositivos são hierárquicos, com endpoints aninhados em outros. 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 é chamado de representação plana.
Por exemplo, um único dispositivo de painel de parede com quatro interruptores aparece nas APIs Home como quatro dispositivos distintos e não relacionados. E um dispositivo Matter hierárquico Matter como uma geladeira pode ser representado em nas APIs Home como um conjunto de dispositivos, cada um correspondente a um dos endpoints.
Representação plana de um painel de parede de quatro interruptores.
Representação plana de uma geladeira
Representação multipartes
A partir da versão 1.8 das APIs Home, um dispositivo multipartes pode ser representado na API como um único dispositivo. Para ativar esse comportamento, chame o
devices() método na
instância Home
e defina o parâmetro enableMultipartDevices como 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)
Os diagramas a seguir ilustram como a opção enableMultipartDevices afeta a representação de um dispositivo multipartes nas APIs Home:
Representação multipartes de um painel de parede.
Representação multipartes de uma geladeira.
Você sempre tem a opção de receber a representação plana omitindo o parâmetro enableMultipartDevices ou definindo-o como false.
Navegar em um dispositivo multipartes
Em um dispositivo multipartes, cada instância de componente de um tipo de dispositivo é chamada de parte.
As partes podem ser acessadas diretamente no dispositivo pai ou em uma parte de maneira
hierárquica, usando tipos de dispositivo ou Matter semânticas
tags. As tags semânticas são implementadas nas APIs Home com
SemanticTag.
A DeviceType
classe permite que os desenvolvedores percorram a árvore de dispositivos usando o
parts()
método:
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) }