Características pós-comissionamento para integração de câmeras

Estas são as características que podem ser usadas depois que o dispositivo é comissionado:

OtaSoftwareUpdateRequestorTrait

Essa característica fornece uma interface para monitorar uma atualização de software OTA no dispositivo de câmera. Depois de ativada, a câmera inicia a atualização e informa o estado dela 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 transmissão ao vivo.

O exemplo de código e a explicação a seguir demonstram como o traço 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)
  • Assinatura de características do dispositivo: ela assina as características do dispositivo, especificamente procurando o OtaSoftwareUpdateRequestorTrait para ouvir informações de atualização OTA.

  • Definir um tempo limite: define um tempo limite de 30 segundos. Se nenhuma atualização for recebida da característica nesse período, a assinatura será encerrada.

  • Processamento de atualizações de status OTA (receiveValue): quando o OtaSoftwareUpdateRequestorTrait fornece 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 proprietário dela for desalocado.

Para mais informações, consulte a referência de traço OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Essa característica não é necessária para a ativação da câmera, mas permite que o app rastreie quando o dispositivo está totalmente configurado e pronto para uso definindo o atributo AppConfigurationComplete como true. Essa característica deve ser usada depois do OtaSoftwareUpdateRequestorTrait.

let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
  $0.setAppConfigurationComplete(true)
}