Alcuni Matter dispositivi sono costituiti da più endpoint con lo stesso tipo di dispositivo. Altri dispositivi Matter sono gerarchici, con endpoint nidificati all'interno di altri endpoint. Nelle API Home, entrambi i tipi di dispositivi sono chiamati dispositivi multipart.
Rappresentazione piatta
Prima della release 1.8 delle API Home, i dispositivi multipart sono rappresentati dalle API Home come un insieme di dispositivi separati e non correlati. Questa è chiamata rappresentazione piatta.
Ad esempio, un singolo dispositivo a pannello a parete con quattro interruttori viene visualizzato nelle API Home come quattro dispositivi distinti e non correlati. Un dispositivo Matter gerarchico Matter come un frigorifero può essere rappresentato nelle API Home come un insieme di dispositivi, ognuno corrispondente a uno degli endpoint.
Rappresentazione piatta di un pannello a parete con 4 interruttori.
Rappresentazione piatta di un frigorifero
Rappresentazione multipart
A partire dalla release 1.8 delle API Home, un dispositivo multipart può essere rappresentato nell'API come un singolo dispositivo. Per attivare questo comportamento, chiama il
devices() metodo sull'
istanza e imposta il enableMultipartDevices parametro su true:Home
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)
I seguenti diagrammi illustrano in che modo l'opzione enableMultipartDevices influisce sulla rappresentazione di un dispositivo multipart nelle API Home:
Rappresentazione multipart di un pannello a parete.
Rappresentazione multipart di un frigorifero.
Hai sempre la possibilità di ottenere la rappresentazione piatta omettendo il parametro enableMultipartDevices o impostandolo su false.
Esplorare un dispositivo multipart
All'interno di un dispositivo multipart, ogni istanza di componente di un tipo di dispositivo è chiamata parte.
È possibile accedere alle parti direttamente sul dispositivo principale o su una parte in modo
gerarchico, utilizzando i tipi di dispositivo o i Matter tag
semantici. I tag semantici vengono implementati nelle API Home con
SemanticTag.
La DeviceType
classe consente agli sviluppatori di attraversare l'albero dei dispositivi tramite il
parts()
metodo:
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'esempio seguente mostra come accedere alle parti di un dispositivo frigorifero:
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) }