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