อุปกรณ์แบบหลายพาร์ทใน iOS

อุปกรณ์ Matter บางเครื่องประกอบด้วยอุปกรณ์ปลายทางหลายรายการที่มี อุปกรณ์ประเภทเดียวกัน Matterอุปกรณ์อื่นๆMatterเป็นแบบลำดับชั้น โดยมีอุปกรณ์ปลายทางซ้อนอยู่ภายในอุปกรณ์ปลายทางอื่นๆ ใน Home API อุปกรณ์ทั้ง 2 ประเภทเรียกว่าอุปกรณ์หลายส่วน

การแสดงแบบแบน

ก่อนที่จะเปิดตัว Home API เวอร์ชัน 1.8 Home API จะแสดงอุปกรณ์แบบหลายส่วนเป็นชุดอุปกรณ์ที่แยกกันและไม่เกี่ยวข้อง ซึ่งเรียกว่าการแสดงผลแบบแบน

ตัวอย่างเช่น อุปกรณ์แผงติดผนังเดียวที่มีสวิตช์ 4 ตัวจะปรากฏใน Home API เป็นอุปกรณ์ 4 ตัวที่แตกต่างกันและไม่เกี่ยวข้อง และMatterอุปกรณ์แบบลำดับชั้น เช่น ตู้เย็น อาจแสดงใน Home API เป็นชุดอุปกรณ์ โดยแต่ละอุปกรณ์จะสอดคล้องกับปลายทางหนึ่งๆ

  • ตัวอย่างแผงติดผนังที่มีสวิตช์หลายตัวซึ่งแสดงการแสดง Matter
          แบบเนทีฟและการแสดงผลแบบเรียบของ Home API

    ภาพแบนของแผงติดผนังแบบ 4 สวิตช์

  • ตัวอย่างตู้เย็นที่แสดงการแสดง Matter ดั้งเดิมและ
          การแสดงผลแบบเรียบของ Home API

    ภาพตู้เย็นแบบแบน

รูปที่ 1: ตัวอย่างการแสดงผลแบบแบน

การแสดงข้อมูลหลายส่วน

ตั้งแต่รุ่น 1.8 ของ Home API เป็นต้นไป อุปกรณ์แบบหลายส่วนจะ แสดงใน API เป็นอุปกรณ์เดียวได้ หากต้องการเปิดใช้ลักษณะการทำงานนี้ ให้เรียกใช้เมธอด devices() ในอินสแตนซ์ Home และตั้งค่าพารามิเตอร์ enableMultipartDevices เป็น true

let devices = try await self.home.devices(enableMultipartDevices: true).list()
    let device = devices.first { $0.id == powerStrip.device.id }
    let outlets = try await device.types.getAll(of: OnOffPluginUnitDeviceType.self)

แผนภาพต่อไปนี้แสดงวิธีที่ตัวเลือก enableMultipartDevices ส่งผลต่อการแสดงอุปกรณ์แบบหลายส่วนใน Home API

  • ตัวอย่างแผงติดผนังที่มีสวิตช์หลายตัวซึ่งแสดงการแสดง Matter ดั้งเดิม
    และการแสดงผลแบบหลายส่วนของ Home API

    การแสดงแผงผนังแบบหลายส่วน

  • ตัวอย่างตู้เย็นที่แสดงการแสดง Matter ดั้งเดิมและการแสดงผลแบบหลายส่วนของ Home
    API

    การแสดงตู้เย็นแบบหลายส่วน

รูปที่ 2: ตัวอย่างการแสดงผลแบบหลายส่วน

คุณมีตัวเลือกในการรับการแสดงแบบแบนเสมอโดยละเว้นพารามิเตอร์ 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)
}