Los atributos que se pueden usar después de que se pone en funcionamiento el dispositivo son los siguientes:
OtaSoftwareUpdateRequestorTrait
Este atributo proporciona una interfaz para supervisar una actualización de software OTA en el dispositivo de la cámara. Una vez que se pone en funcionamiento, la cámara inicia la actualización y le informa su estado a la app. Una vez que la app recibe el estado de que se completó la actualización de software, la cámara puede comenzar a transmitir en vivo.
En el siguiente código de muestra y explicación, se muestra cómo se puede usar el atributo.
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)
Cómo suscribirse a los atributos del dispositivo: Se suscribe a los atributos del dispositivo y busca específicamente el
OtaSoftwareUpdateRequestorTraitpara escuchar la información de actualización OTA.Cómo establecer un tiempo de espera: Establece un tiempo de espera de 30 segundos. Si no se recibe ninguna actualización del atributo dentro de ese tiempo, finaliza la suscripción.
Cómo controlar las actualizaciones de estado de OTA (
receiveValue): Cuando elOtaSoftwareUpdateRequestorTraitproporciona un estado nuevo, se ejecuta este bloque. Registra el estado actual y el progreso de la actualización OTA. Luego, actualiza el estado interno de la aplicación (step) para reflejar esta información nueva.Cómo controlar la finalización (
sink): Este bloque se ejecuta cuando finaliza la suscripción y registra la finalización. Si el proceso estaba en estado de descarga, el estado de la aplicación avanza al siguiente paso (.settings).Cómo administrar el ciclo de vida de la suscripción: La línea
.store(in: &cancellables)garantiza que la suscripción se administre y cancele correctamente cuando se desasigna el objeto que la posee.
Para obtener más información, consulta la referencia del atributo
OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Este atributo no es necesario para la activación de la cámara, pero permite que la app haga un seguimiento de cuándo el dispositivo está completamente configurado y se puede usar. Para ello, se establece el atributo AppConfigurationComplete en true.
Este atributo se debe usar después del OtaSoftwareUpdateRequestorTrait.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}