دستگاه‌های چندبخشی در iOS

برخی از دستگاه‌های Matter از چندین نقطه پایانی با نوع دستگاه یکسان تشکیل شده‌اند. سایر دستگاه‌های Matter سلسله مراتبی هستند و نقاط پایانی درون نقاط پایانی دیگر قرار گرفته‌اند. در APIهای Home، به هر دو نوع دستگاه ، دستگاه‌های چندبخشی گفته می‌شود.

نمایش مسطح

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

برای مثال، یک دستگاه پنل دیواری تکی با چهار کلید در APIهای Home به صورت چهار دستگاه مجزا و نامرتبط ظاهر می‌شود. و یک دستگاه Matter سلسله مراتبی مانند یخچال ممکن است در APIهای Home به صورت مجموعه‌ای از دستگاه‌ها نمایش داده شود که هر کدام مربوط به یکی از نقاط انتهایی هستند.

  • مثالی از پنل دیواری با چندین کلید که نمایش بومی Matter و رندرینگ مسطح Home API را نشان می‌دهد

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

  • مثال یخچال که نمایش بومی Matter و رندر مسطح API خانگی را نشان می‌دهد

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

شکل ۱ : نمونه‌های رندرینگ تخت

نمایش چندبخشی

با شروع انتشار ۱.۸ از 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 تأثیر می‌گذارد:

  • مثالی از پنل دیواری با چندین کلید که نمایش بومی Matter و رندر چندبخشی Home API را نشان می‌دهد

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

  • مثال یخچال که نمایش بومی Matter و رندر چندبخشی Home API را نشان می‌دهد

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

شکل ۲ : نمونه‌های رندر چندبخشی

شما همیشه می‌توانید با حذف پارامتر 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)
}