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