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 com várias partes.
Representação simples
Antes da versão 1.8 das APIs Home, os dispositivos de várias partes são 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, como uma geladeira, pode ser representado nas APIs Home como um conjunto de dispositivos, cada um correspondendo a um dos endpoints.
Representação plana de um painel de parede com quatro interruptores.
Representação plana de uma geladeira
Representação de várias partes
A partir da versão 1.8 das APIs Home, um dispositivo de várias partes 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 de várias partes nas APIs Home:
Representação de várias partes de um painel de parede.
Representação de várias partes de uma geladeira.
Você sempre tem a opção de receber a representação simples omitindo o parâmetro enableMultipartDevices ou definindo-o como false.
Navegar em um dispositivo com várias partes
Em um dispositivo de várias partes, 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 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 próximo exemplo 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) }