Ciri-ciri pasca-penyiapan untuk orientasi kamera

Trait yang dapat digunakan setelah perangkat diaktifkan adalah:

OtaSoftwareUpdateRequestorTrait

Trait ini menyediakan antarmuka untuk memantau update software OTA di perangkat kamera. Setelah diaktifkan, kamera akan memulai update dan melaporkan statusnya ke aplikasi. Setelah aplikasi menerima status bahwa update software selesai, kamera dapat mulai melakukan livestreaming.

Contoh kode dan penjelasan berikut menunjukkan cara penggunaan trait.

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)
  • Berlangganan ke trait perangkat: Berlangganan ke trait perangkat, khususnya mencari OtaSoftwareUpdateRequestorTrait untuk memproses informasi update OTA.

  • Menetapkan waktu tunggu: Menetapkan waktu tunggu 30 detik. Jika tidak ada update yang diterima dari trait dalam waktu tersebut, langganan akan berakhir.

  • Menangani update status OTA (receiveValue): Saat OtaSoftwareUpdateRequestorTrait memberikan status baru, blok ini akan dieksekusi. Blok ini mencatat status saat ini dan progres update OTA. Kemudian, blok ini memperbarui status internal aplikasi (step) untuk mencerminkan informasi baru ini.

  • Menangani penyelesaian (sink): Blok ini dieksekusi saat langganan berakhir, dan mencatat penyelesaian. Jika proses berada dalam status mendownload, status aplikasi akan berlanjut ke langkah berikutnya (.settings).

  • Mengelola siklus proses langganan: Baris .store(in: &cancellables) memastikan langganan dikelola dan dibatalkan dengan benar saat objek yang memilikinya di-deallocate.

Untuk mengetahui informasi selengkapnya, lihat referensi trait OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Trait ini tidak diperlukan untuk aktivasi kamera, tetapi memungkinkan aplikasi melacak kapan perangkat disiapkan sepenuhnya dan dapat digunakan dengan menetapkan atribut AppConfigurationComplete ke true. Trait ini harus digunakan setelah OtaSoftwareUpdateRequestorTrait.

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