Algunos dispositivos Matter se componen de varios extremos con el mismo tipo de dispositivo. Otros dispositivos de Matter son jerárquicos, con extremos anidados dentro de otros extremos. En las APIs de Home, ambos tipos de dispositivos se denominan dispositivos de varias partes.
Representación plana
Antes de la versión 1.8 de las APIs de Home, las APIs de Home representan los dispositivos de varias partes como un conjunto de dispositivos independientes y no relacionados. Esto se conoce como la representación plana.
Por ejemplo, un solo dispositivo de panel de pared con cuatro interruptores aparece en las APIs de Home como cuatro dispositivos distintos y no relacionados. Y un dispositivo jerárquico de Matter, como un refrigerador, se puede representar en las APIs de Home como un conjunto de dispositivos, cada uno correspondiente a uno de los extremos.
Representación plana de un panel de pared de 4 interruptores.
Representación plana de un refrigerador
Representación de varias partes
A partir de la versión 1.8 de las APIs de Home, un dispositivo de varias partes se puede
representar en la API como un solo dispositivo. Para habilitar este comportamiento, llama al método devices() en la instancia Home y establece el parámetro enableMultipartDevices en 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)
En los siguientes diagramas, se ilustra cómo la opción enableMultipartDevices
afecta la representación de un dispositivo de varias partes en las APIs de Home:
Representación de varias partes de un panel de pared.
Representación de varias partes de un refrigerador.
Siempre tienes la opción de obtener la representación plana omitiendo
el parámetro enableMultipartDevices o configurándolo como false.
Cómo navegar por un dispositivo de varias partes
Dentro de un dispositivo de varias partes, cada instancia de componente de un tipo de dispositivo se denomina parte.
Se puede acceder a las partes directamente en el dispositivo superior o en una parte de
manera jerárquica, con tipos de dispositivos o etiquetas semánticas
Matter. Las etiquetas semánticas se implementan en las APIs de Home con SemanticTag.
La clase DeviceType permite que los desarrolladores recorran el árbol de dispositivos a través del 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) }
En el siguiente ejemplo, se muestra cómo acceder a las partes de un dispositivo de refrigerador:
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) }