Appareils multifaisceaux sur iOS

Certains appareils Matter sont composés de plusieurs points de terminaison du même type d'appareil. Les autres appareils Matter sont hiérarchiques, avec des points de terminaison imbriqués dans d'autres points de terminaison. Dans les API Home, ces deux types d'appareils sont appelés appareils multiparties.

Représentation plate

Avant la version 1.8 des API Home, les appareils multiparts sont représentés par les API Home comme un ensemble d'appareils distincts et non liés. C'est ce qu'on appelle la représentation plate.

Par exemple, un seul panneau mural doté de quatre interrupteurs apparaît dans les API Home comme quatre appareils distincts et non liés. Un appareil Matter hiérarchique, tel qu'un réfrigérateur, peut être représenté dans les API Home comme un ensemble d'appareils, chacun correspondant à l'un des points de terminaison.

  • Exemple de panneau mural avec plusieurs interrupteurs montrant la représentation Matter native et le rendu plat de l'API Home

    Représentation à plat d'un panneau mural à quatre interrupteurs.

  • Exemple de réfrigérateur montrant la représentation Matter native et l'affichage plat de l'API Home

    Représentation en 2D d'un réfrigérateur

Figure 1 : Exemples de rendu plat

Représentation multipartite

À partir de la version 1.8 des API Home, un appareil multipartie peut être représenté dans l'API comme un seul appareil. Pour activer ce comportement, appelez la méthode devices() sur l'instance Home et définissez le paramètre enableMultipartDevices sur 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)

Les schémas suivants illustrent l'impact de l'option enableMultipartDevices sur la représentation d'un appareil multipartie dans les API Home :

  • Exemple de panneau mural avec plusieurs interrupteurs montrant la représentation Matter native et l'affichage en plusieurs parties de l'API Home

    Représentation en plusieurs parties d'un panneau mural.

  • Exemple de réfrigérateur montrant la représentation Matter native et l'affichage en plusieurs parties de l'API Home

    Représentation multipart d'un réfrigérateur.

Figure 2 : Exemples de rendu multiparte

Vous pouvez toujours obtenir la représentation plate en omettant le paramètre enableMultipartDevices ou en le définissant sur false.

Dans un appareil multipartie, chaque instance de composant d'un type d'appareil est appelée partie.

Les composants sont accessibles directement sur l'appareil parent ou sur un composant de manière hiérarchique, à l'aide de types d'appareils ou de tags sémantiques Matter. Les tags sémantiques sont implémentés dans les API Home avec SemanticTag.

La classe DeviceType permet aux développeurs de parcourir l'arborescence de périphériques via la méthode 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)
}

L'exemple suivant montre comment accéder aux parties d'un réfrigérateur :

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