برخی از دستگاههای Matter از چندین نقطه پایانی با نوع دستگاه یکسان تشکیل شدهاند. سایر دستگاههای Matter سلسله مراتبی هستند و نقاط پایانی درون نقاط پایانی دیگر قرار گرفتهاند. در APIهای Home، به هر دو نوع دستگاه ، دستگاههای چندبخشی گفته میشود.
نمایش مسطح
قبل از انتشار نسخه ۱.۸ رابطهای برنامهنویسی کاربردی خانگی (Home APIs)، دستگاههای چندبخشی توسط رابطهای برنامهنویسی کاربردی خانگی (Home APIs) به صورت مجموعهای از دستگاههای جداگانه و نامرتبط نمایش داده میشدند. به این حالت، نمایش مسطح (flat representation) گفته میشود.
برای مثال، یک دستگاه پنل دیواری تکی با چهار کلید در APIهای Home به صورت چهار دستگاه مجزا و نامرتبط ظاهر میشود. و یک دستگاه Matter سلسله مراتبی مانند یخچال ممکن است در APIهای Home به صورت مجموعهای از دستگاهها نمایش داده شود که هر کدام مربوط به یکی از نقاط انتهایی هستند.

نمایش مسطح یک پنل دیواری ۴ سوئیچه.


نمایش مسطح یخچال

نمایش چندبخشی
با شروع انتشار ۱.۸ از APIهای Home، یک دستگاه چندبخشی میتواند در API به عنوان یک دستگاه واحد نمایش داده شود. برای فعال کردن این رفتار، متد devices() را در نمونه Home فراخوانی کنید و پارامتر enableMultipartDevices را روی 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)
نمودارهای زیر نشان میدهند که چگونه گزینه enableMultipartDevices بر نمایش یک دستگاه چندبخشی در APIهای Home تأثیر میگذارد:

نمایش چند قسمتی از یک پنل دیواری.


نمایش چند قسمتی از یک یخچال.

شما همیشه میتوانید با حذف پارامتر enableMultipartDevices یا با تنظیم آن روی false ، نمایش مسطح را دریافت کنید.
پیمایش یک دستگاه چند قسمتی
در یک دستگاه چندبخشی، هر نمونه از یک نوع دستگاه، یک بخش (part) نامیده میشود.
قطعات ممکن است مستقیماً در دستگاه والد یا به صورت سلسله مراتبی، با استفاده از انواع دستگاه یا برچسبهای معنایی Matter قابل دسترسی باشند. برچسبهای معنایی در APIهای Home با SemanticTag پیادهسازی میشوند.
کلاس DeviceType به توسعهدهندگان اجازه میدهد تا از طریق متد 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) }
مثال بعدی نحوه دسترسی به قطعات یک دستگاه یخچال را نشان میدهد:
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) }