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