Beberapa perangkat Matter terdiri dari beberapa endpoint dengan jenis perangkat yang sama. Perangkat Matter lainnya bersifat hierarkis, dengan endpoint yang berada di dalam endpoint lainnya. Di Home API, kedua jenis perangkat ini disebut sebagai perangkat multipart.
Representasi datar
Sebelum rilis 1.8 Home API, perangkat multipart direpresentasikan oleh Home API sebagai serangkaian perangkat terpisah yang tidak terkait. Hal ini disebut sebagai representasi datar.
Misalnya, satu perangkat panel dinding dengan empat sakelar muncul di Home API sebagai empat perangkat yang berbeda dan tidak terkait. Perangkat hierarkis Matter seperti kulkas dapat direpresentasikan di Home API sebagai sekumpulan perangkat, yang masing-masing sesuai dengan salah satu endpoint.
Representasi datar panel dinding 4 sakelar.
Representasi datar kulkas
Representasi multibagian
Mulai dari rilis 1.8 Home API, perangkat multipart dapat
direpresentasikan di API sebagai perangkat tunggal. Untuk mengaktifkan perilaku ini, panggil metode devices() pada instance Home dan tetapkan parameter enableMultipartDevices ke 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)
Diagram berikut menggambarkan pengaruh opsi enableMultipartDevices terhadap representasi perangkat multi-bagian di Home API:
Representasi multipartisi panel dinding.
Representasi multipart kulkas.
Anda selalu memiliki opsi untuk mendapatkan representasi datar dengan menghilangkan
parameter enableMultipartDevices, atau dengan menyetelnya ke false.
Menavigasi perangkat multipart
Dalam perangkat multibagian, setiap instance komponen jenis perangkat disebut bagian.
Bagian dapat diakses langsung di perangkat induk atau bagian secara hierarkis, menggunakan jenis perangkat atau tag semantik Matter. Tag semantik diterapkan di Home API dengan
SemanticTag.
Class DeviceType memungkinkan developer menjelajahi hierarki perangkat melalui metode 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) }
Contoh berikutnya menunjukkan cara mengakses bagian-bagian perangkat kulkas:
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) }