ลักษณะหลังการเปิดใช้สำหรับการเริ่มต้นใช้งานกล้อง

ลักษณะที่ใช้ได้หลังจากมอบหมายงานให้อุปกรณ์แล้ว ได้แก่

OtaSoftwareUpdateRequestorTrait

ลักษณะนี้มีอินเทอร์เฟซสำหรับตรวจสอบการอัปเดตซอฟต์แวร์ OTA ในอุปกรณ์กล้อง เมื่อมอบหมายงานแล้ว กล้องจะเริ่มการอัปเดตและรายงานสถานะไปยังแอป เมื่อแอปได้รับสถานะว่าการอัปเดตซอฟต์แวร์เสร็จสมบูรณ์แล้ว กล้องจะเริ่มไลฟ์สดได้

โค้ดตัวอย่างและคำอธิบายต่อไปนี้แสดงวิธีใช้ลักษณะภาษา

device.types.subscribe(OtaRequestorDeviceType.self)
  .receive(on: DispatchQueue.main)
  .compactMap { $0.traits[Matter.OtaSoftwareUpdateRequestorTrait.self] }
  .removeDuplicates()
  .timeout(.seconds(30), scheduler: DispatchQueue.main)
  .sink { [weak self] completion in
    guard let self else { return }
    Logger.debug("OTA trait subscription completed unexpectedly: \(completion).")
    if case .otaDownload = self.step {
      Logger.debug("Advancing to settings step due to OTA trait subscription completion")
      self.step = .settings
    }
  } receiveValue: { [weak self] otaTrait in
    Logger.debug(
      "OTA update is in progress, state: \(otaTrait.attributes.updateState), progress: \(otaTrait.attributes.updateStateProgress ?? 0)"
    )

    self.step = .otaDownload(
      state: otaTrait.attributes.updateState ?? .querying,
      progress: Double(otaTrait.attributes.updateStateProgress ?? 0) / 100.0)
    }
  }
  .store(in: &cancellables)
  • การสมัครใช้บริการลักษณะของอุปกรณ์: สมัครใช้บริการลักษณะของอุปกรณ์ โดยเฉพาะอย่างยิ่งการค้นหา OtaSoftwareUpdateRequestorTrait เพื่อรับฟังข้อมูลการอัปเดต OTA

  • การตั้งค่าการหมดเวลา: ตั้งค่าการหมดเวลา 30 วินาที หากไม่ได้รับข้อมูลการอัปเดตจากลักษณะภายในเวลาดังกล่าว การสมัครใช้บริการจะสิ้นสุดลง

  • การจัดการการอัปเดตสถานะ OTA (receiveValue): เมื่อ OtaSoftwareUpdateRequestorTrait ให้สถานะใหม่ ระบบจะดำเนินการบล็อกนี้ โดยจะบันทึกสถานะปัจจุบันและความคืบหน้าของการอัปเดต OTA จากนั้นจะอัปเดตสถานะภายในของแอปพลิเคชัน (step) เพื่อแสดงข้อมูลใหม่นี้

  • การจัดการการดำเนินการให้เสร็จสมบูรณ์ (sink): ระบบจะดำเนินการบล็อกนี้เมื่อการสมัครใช้บริการสิ้นสุดลง และบันทึกการดำเนินการให้เสร็จสมบูรณ์ หากกระบวนการอยู่ในสถานะการดาวน์โหลด สถานะของแอปพลิเคชันจะเปลี่ยนไปเป็นขั้นตอนถัดไป (.settings)

  • การจัดการวงจรการสมัครใช้บริการ: บรรทัด .store(in: &cancellables) ช่วยให้มั่นใจได้ว่าระบบจะจัดการและยกเลิกการสมัครใช้บริการอย่างเหมาะสมเมื่อ ยกเลิกการจัดสรรออบเจ็กต์ที่เป็นเจ้าของการสมัครใช้บริการ

ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงลักษณะ OtaSoftwareUpdateRequestorTrait

ConfigurationDoneTrait

ลักษณะนี้ไม่จำเป็นสำหรับการเปิดใช้งานกล้อง แต่ช่วยให้แอปติดตามได้เมื่ออุปกรณ์ได้รับการตั้งค่าอย่างสมบูรณ์และพร้อมใช้งานโดยตั้งค่าแอตทริบิวต์ AppConfigurationComplete เป็น true ควรใช้ลักษณะนี้หลังจาก OtaSoftwareUpdateRequestorTrait

let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
  $0.setAppConfigurationComplete(true)
}