Beberapa perangkat Matter terdiri dari beberapa endpoint dengan jenis perangkat yang sama. Perangkat Matter 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 kumpulan perangkat terpisah yang tidak terkait. Hal ini disebut representasi datar.
Misalnya, satu perangkat panel dinding dengan empat sakelar muncul di Home API sebagai empat perangkat berbeda yang tidak terkait. Dan perangkat Matter hierarkis Matter seperti kulkas dapat direpresentasikan di Home API sebagai kumpulan perangkat, yang masing-masing sesuai dengan salah satu endpoint.
Representasi datar dari panel dinding 4 sakelar.
Representasi datar dari kulkas
Representasi multipart
Mulai dari rilis 1.8 Home API, perangkat multipart dapat direpresentasikan di API sebagai satu perangkat. 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 mengilustrasikan pengaruh opsi enableMultipartDevices terhadap representasi perangkat multipart di Home API:
Representasi multipart dari panel dinding.
Representasi multipart dari kulkas.
Anda selalu memiliki opsi untuk mendapatkan representasi datar dengan menghilangkan parameter enableMultipartDevices, atau dengan menetapkannya ke false.
Menavigasi perangkat multipart
Dalam perangkat multipart, setiap instance komponen dari jenis perangkat disebut bagian.
Bagian dapat diakses langsung di perangkat induk atau bagian secara hierarkis, menggunakan jenis perangkat atau Matter tag semantik. Tag semantik diimplementasikan di Home API dengan
SemanticTag.
Class DeviceType
memungkinkan developer melintasi pohon perangkat melalui
parts()
metode:
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 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) }