Le caratteristiche che possono essere utilizzate dopo la configurazione del dispositivo sono:
OtaSoftwareUpdateRequestorTrait
Questo tratto fornisce un'interfaccia per monitorare un aggiornamento software OTA sul dispositivo videocamera. Una volta commissionata, la videocamera avvia l'aggiornamento e comunica il suo stato all'app. Quando l'app riceve la notifica che l'aggiornamento software è stato completato, la videocamera può iniziare a trasmettere in live streaming.
Il seguente codice di esempio e la relativa spiegazione mostrano come può essere utilizzata la caratteristica.
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)
Iscrizione alle caratteristiche del dispositivo: si iscrive alle caratteristiche del dispositivo, cercando in particolare
OtaSoftwareUpdateRequestorTraitper ascoltare le informazioni sugli aggiornamenti OTA.Impostazione di un timeout: imposta un timeout di 30 secondi. Se non viene ricevuto alcun aggiornamento dalla caratteristica entro questo periodo di tempo, l'abbonamento termina.
Gestione degli aggiornamenti di stato OTA (
receiveValue): quandoOtaSoftwareUpdateRequestorTraitfornisce un nuovo stato, questo blocco viene eseguito. Registra lo stato attuale e l'avanzamento dell'aggiornamento OTA. Aggiorna quindi lo stato interno dell'applicazione (step) per riflettere queste nuove informazioni.Gestione del completamento (
sink): questo blocco viene eseguito al termine dell'abbonamento e registra il completamento. Se il processo era in stato di download, lo stato dell'applicazione passa al passaggio successivo (.settings).Gestione del ciclo di vita dell'abbonamento: la riga
.store(in: &cancellables)garantisce che l'abbonamento venga gestito e annullato correttamente quando l'oggetto che lo possiede viene deallocato.
Per saperne di più, consulta il
riferimento all'attributo OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Questa caratteristica non è necessaria per l'attivazione della videocamera, ma consente all'app
di monitorare quando il dispositivo è completamente configurato e utilizzabile impostando l'attributo
AppConfigurationComplete su true.
Questo tratto deve essere utilizzato dopo OtaSoftwareUpdateRequestorTrait.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}