Implementato nell'app di esempio per iOS
I tratti che possono essere utilizzati dopo la messa in servizio 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 segnala il suo stato all'app. Una volta che l'app riceve lo stato di completamento dell'aggiornamento software, la videocamera può iniziare il live streaming.
Il codice campione e la spiegazione di seguito mostrano come utilizzare il tratto.
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)
Sottoscrizione ai tratti del dispositivo: si sottoscrive ai tratti del dispositivo, in particolare cercando
OtaSoftwareUpdateRequestorTraitper ascoltare le informazioni sugli aggiornamenti OTA.Impostazione di un timeout: imposta un timeout di 30 secondi. Se non viene ricevuto alcun aggiornamento dal tratto entro questo periodo di tempo, la sottoscrizione 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. Quindi, aggiorna 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 della sottoscrizione: la riga
.store(in: &cancellables)garantisce che la sottoscrizione venga gestita e annullata correttamente quando l'oggetto che la possiede viene deallocato.
Per saperne di più, consulta il riferimento del tratto OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Questo tratto non è obbligatorio 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)
}