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 telah selesai, kamera dapat mulai melakukan livestream.

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 memantau informasi update OTA.

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

  • Menangani update status OTA (receiveValue): Saat OtaSoftwareUpdateRequestorTrait memberikan status baru, blok ini dijalankan. File ini mencatat status saat ini dan progres update OTA. Kemudian, aplikasi akan memperbarui status internal (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 bahwa langganan dikelola dan dibatalkan dengan benar saat objek yang memilikinya dibatalkan alokasinya.

Untuk mengetahui informasi selengkapnya, lihat referensi karakteristik OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Ciri ini tidak diperlukan untuk aktivasi kamera, tetapi memungkinkan aplikasi melacak saat perangkat disiapkan sepenuhnya dan dapat digunakan dengan menyetel atribut AppConfigurationComplete ke true. Ciri 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)
}