Implementado no app de exemplo para iOS
Os atributos que podem ser usados após o comissionamento do dispositivo são:
OtaSoftwareUpdateRequestorTrait
Essa característica fornece uma interface para monitorar uma atualização de software OTA no dispositivo da câmera. Depois de comissionada, a câmera inicia a atualização e informa o estado ao app. Quando o app recebe o status de que a atualização de software foi concluída, a câmera pode começar a transmitir ao vivo.
O exemplo de código e a explicação a seguir demonstram como o atributo pode ser usado.
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)
Inscrição em atributos do dispositivo: ele se inscreve nos atributos do dispositivo, especificamente procurando o
OtaSoftwareUpdateRequestorTraitpara detectar informações de atualização OTA.Definição de um tempo limite: define um tempo limite de 30 segundos. Se nenhuma atualização for recebida do atributo nesse período, a assinatura será encerrada.
Como processar atualizações de status de OTA (
receiveValue): quando oOtaSoftwareUpdateRequestorTraitfornece um novo status, esse bloco é executado. Ele registra o estado atual e o progresso da atualização OTA. Em seguida, ele atualiza o estado interno do aplicativo (step) para refletir essas novas informações.Processamento da conclusão (
sink): esse bloco é executado quando a assinatura termina e registra a conclusão. Se o processo estava em um estado de download, o estado do aplicativo avança para a próxima etapa (.settings).Gerenciamento do ciclo de vida da assinatura: a linha
.store(in: &cancellables)garante que a assinatura seja gerenciada e cancelada corretamente quando o objeto que a possui for desalocado.
Para mais informações, consulte a
referência de atributo OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Esse atributo não é necessário para a ativação da câmera, mas permite que o app
rastreie quando o dispositivo está totalmente configurado e utilizável definindo o
atributo AppConfigurationComplete como true.
Essa característica deve ser usada após o OtaSoftwareUpdateRequestorTrait.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}