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