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

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

ייצוג שטוח

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

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

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

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

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

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

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

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

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