I tratti che possono essere utilizzati dopo il commissioning del dispositivo sono:
OtaSoftwareUpdateRequestorTrait
Questo tratto fornisce un'interfaccia per monitorare un aggiornamento software OTA sul dispositivo della videocamera. Una volta eseguito il commissioning, 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 lo streaming live.
Il seguente codice campione e la relativa spiegazione 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 cerca
OtaSoftwareUpdateRequestorTraitper ascoltare le informazioni sull'aggiornamento 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 dello 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 della sottoscrizione e registra il completamento. Se la procedura 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 ulteriori informazioni, consulta il riferimento al 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)
}