Certains appareils Matter sont constitués de plusieurs points de terminaison du même type. Les autres appareils Matter sont hiérarchiques, avec des points de terminaison imbriqués dans d'autres points de terminaison. Dans les API Home, les deux types d'appareils sont appelés appareils multiparties.
Représentation à plat
Avant la version 1.8 des API Home, les appareils multiparties étaient représentés par les API Home comme un ensemble d'appareils distincts et sans rapport. C'est ce qu'on appelle la représentation plate.
Par exemple, un panneau mural unique avec quatre interrupteurs apparaît dans les API Home comme quatre appareils distincts et sans lien entre eux. Un appareil Matter hiérarchique, tel qu'un réfrigérateur, peut être représenté dans les API Home sous la forme d'un ensemble d'appareils, chacun correspondant à l'un des points de terminaison.
Représentation à plat d'un panneau mural à quatre boutons.
Représentation plate d'un réfrigérateur
Représentation multipartite
À partir de la version 1.8 des API Home, un appareil multipartite 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 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)
Les schémas suivants illustrent l'incidence de l'option enableMultipartDevices sur la représentation d'un appareil multipartie dans les API Home :
Représentation multipartie d'un panneau mural.
Représentation multipartie d'un réfrigérateur.
Vous avez toujours la possibilité d'obtenir la représentation à plat en omettant le paramètre enableMultipartDevices ou en le définissant sur false.
Naviguer sur un appareil multipartite
Dans un appareil multipartite, chaque instance de composant d'un type d'appareil est appelée partie.
Les pièces peuvent être accessibles directement sur l'appareil parent ou de manière hiérarchique, en utilisant des types d'appareils ou des balises sémantiques Matter. Les balises sémantiques sont implémentées dans les API Home avec SemanticTag.
La classe DeviceType permet aux développeurs de parcourir l'arborescence des appareils à l'aide de 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) }