מכשירים מרובי חלקים ב-iOS

חלק ממכשירי Matter מורכבים מכמה נקודות קצה (endpoints) עם אותו סוג מכשיר. מכשירים אחרים של Matter הם היררכיים, עם נקודות קצה שמוטמעות בתוך נקודות קצה אחרות. בממשקי ה-API של Home, שני סוגי המכשירים נקראים מכשירים עם כמה חלקים.

ייצוג שטוח

בגרסאות של Home API שקדמו לגרסה 1.8, מכשירים עם כמה חלקים מיוצגים על ידי Home API כקבוצה של מכשירים נפרדים ולא קשורים. הייצוג הזה נקרא ייצוג שטוח.

לדוגמה, מכשיר פאנל קיר אחד עם ארבעה מתגים מופיע בממשקי ה-API של Home כארבעה מכשירים נפרדים ולא קשורים. מכשיר Matter היררכי, כמו מקרר, יכול להיות מיוצג בממשקי Home API כקבוצת מכשירים, שכל אחד מהם תואם לאחת מנקודות הקצה.

  • דוגמה ללוח בקרה עם כמה מתגים, שמראה את הייצוג המקורי של Matter ואת העיבוד השטוח של Home API

    ייצוג שטוח של לוח קיר עם 4 מתגים.

  • דוגמה למקרר שמראה את הייצוג המקורי של Matter ואת העיבוד השטוח של Home API

    ייצוג שטוח של מקרר

איור 1: דוגמאות לעיבוד שטוח

ייצוג של כמה חלקים

החל מגרסה 1.8 של ממשקי ה-API של Home, מכשיר עם כמה חלקים יכול להיות מיוצג ב-API כמכשיר אחד. כדי להפעיל את ההתנהגות הזו, צריך להפעיל את ה-method‏ devices() במכונה של Home ולהגדיר את הפרמטר enableMultipartDevices לערך true:

let multipartDevices = try await self.home.devices(enableMultipartDevices: true).list()
let multipartDevice = multipartDevices.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 בכמה חלקים

    ייצוג של מקרר שמורכב מכמה חלקים.

איור 2: דוגמאות לעיבוד של כמה חלקים

תמיד אפשר לקבל את הייצוג השטוח על ידי השמטת הפרמטר enableMultipartDevices או על ידי הגדרתו ל-false.

במכשיר מרובה חלקים, כל מופע של רכיב מסוג מכשיר נקרא חלק.

אפשר לגשת לחלקים ישירות במכשיר הראשי או בחלק באופן היררכי, באמצעות סוגי מכשירים או תגים סמנטיים של 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)
}