Diimplementasikan di Aplikasi Contoh untuk iOS
Sifat yang dapat digunakan setelah perangkat diaktifkan adalah:
OtaSoftwareUpdateRequestorTrait
Karakteristik 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.
Kode contoh dan penjelasan berikut menunjukkan cara menggunakan karakteristik ini.
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 karakteristik perangkat: Berlangganan ke karakteristik perangkat, khususnya mencari
OtaSoftwareUpdateRequestorTraituntuk memproses informasi update OTA.Menetapkan waktu tunggu: Menetapkan waktu tunggu 30 detik. Jika tidak ada update yang diterima dari karakteristik dalam waktu tersebut, langganan akan berakhir.
Menangani update status OTA (
receiveValue): SaatOtaSoftwareUpdateRequestorTraitmemberikan status baru, blok ini akan dijalankan. Log ini mencatat status saat ini dan progres update OTA. Kemudian, ViewModel akan memperbarui status internal aplikasi (step) untuk mencerminkan informasi baru ini.Menangani penyelesaian (
sink): Blok ini dijalankan saat langganan berakhir, dan mencatat penyelesaiannya. Jika prosesnya 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
Karakteristik ini tidak diperlukan untuk aktivasi kamera, tetapi memungkinkan aplikasi
melacak kapan perangkat telah disiapkan sepenuhnya dan dapat digunakan dengan menetapkan
atribut AppConfigurationComplete ke true.
Karakteristik 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)
}