Certains appareils Matter sont constitués de plusieurs points de terminaison avec le même type d'appareil. D'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 aplatie
Avant la version 1.8 des API Home, les appareils multiparties sont représentés par les API Home comme un ensemble d'appareils distincts et sans lien. Il s'agit de la représentation aplatie.
Par exemple, un seul panneau mural avec quatre interrupteurs apparaît dans les API Home comme quatre appareils distincts et sans lien. Un appareil Matter hiérarchique Matter 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.
Représentation aplatie d'un panneau mural à quatre interrupteurs.
Représentation aplatie d'un réfrigérateur
Représentation multipartie
À 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
devices() méthode sur
l'Home
instance et définissez le enableMultipartDevices paramètre 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 :
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 aplatie en omettant le paramètre enableMultipartDevices ou en le définissant sur false.
Naviguer dans un appareil multipartie
Dans un appareil multipartie, chaque instance de composant d'un type d'appareil est appelée partie.
Vous pouvez accéder directement aux parties sur l'appareil parent ou sur une partie de manière
hiérarchique, à l'aide de types d'appareils ou de Matter tags
sémantiques. Les tags sémantiques sont implémentés dans les API Home avec
SemanticTag.
La DeviceType
classe permet aux développeurs de parcourir l'arborescence des appareils à l'aide de la
parts()
méthode :
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) }