อุปกรณ์ Matter บางเครื่องประกอบด้วยปลายทางหลายรายการที่มีประเภทอุปกรณ์เดียวกัน อุปกรณ์ Matter อื่นๆ จะเป็นแบบลำดับชั้น โดยมีอุปกรณ์ปลายทางซ้อนอยู่ภายในอุปกรณ์ปลายทางอื่นๆ ใน Home API อุปกรณ์ทั้ง 2 ประเภทจะเรียกว่าอุปกรณ์แบบหลายส่วน
การนำเสนอแบบแบนราบ
ก่อน Home API เวอร์ชัน 1.8 อุปกรณ์แบบหลายส่วนจะแสดงโดย Home API เป็นชุดอุปกรณ์ที่แยกกันและไม่เกี่ยวข้องกัน ซึ่งเรียกว่าการแสดงผลแบบแบนราบ
ตัวอย่างเช่น อุปกรณ์แผงติดผนัง 1 เครื่องที่มีสวิตช์ 4 ตัวจะปรากฏใน Home API เป็นอุปกรณ์ 4 เครื่องที่แยกกันและไม่เกี่ยวข้องกัน และอุปกรณ์ Matter ที่มีลำดับชั้น เช่น ตู้เย็น อาจแสดงใน Home API เป็นชุดอุปกรณ์ ซึ่งแต่ละอุปกรณ์จะสอดคล้องกับปลายทางหนึ่งๆ
ภาพแสดงแผงสวิตช์บนผนังแบบ 4 สวิตช์
ภาพตู้เย็นแบบ 2 มิติ
การนำเสนอแบบหลายส่วน
ตั้งแต่ Home API เวอร์ชัน 1.8 เป็นต้นไป อุปกรณ์แบบหลายส่วนจะแสดงใน 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 ส่งผลต่อการแสดงอุปกรณ์แบบหลายส่วนใน Home API อย่างไร
การแสดงภาพแบบหลายส่วนของแผงผนัง
การแสดงภาพตู้เย็นแบบหลายส่วน
คุณมีตัวเลือกในการรับการแสดงผลแบบแบนเสมอโดยละเว้นพารามิเตอร์ enableMultipartDevices หรือตั้งค่าเป็น false
ไปยังส่วนต่างๆ ของอุปกรณ์ที่มีหลายส่วน
ภายในอุปกรณ์แบบหลายส่วน อินสแตนซ์คอมโพเนนต์แต่ละรายการของประเภทอุปกรณ์จะเรียกว่าส่วน
คุณสามารถเข้าถึงส่วนต่างๆ ได้โดยตรงจากอุปกรณ์หลักหรือส่วนต่างๆ ในลักษณะตามลำดับชั้น โดยใช้ประเภทอุปกรณ์หรือแท็กความหมาย Matter แท็กความหมายจะใช้ใน Home API ด้วย 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) }