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