Rasgos posteriores a la puesta en marcha para la incorporación de la cámara

   Implementado en la app de ejemplo para iOS   

Los rasgos que se pueden usar después de que se haya puesto en marcha el dispositivo son los siguientes:

OtaSoftwareUpdateRequestorTrait

Este atributo proporciona una interfaz para supervisar una actualización de software inalámbrica en el dispositivo de la cámara. Una vez que se comisiona, la cámara inicia la actualización y, luego, 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 la explicación, se indica cómo se puede usar el rasgo.

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)
  • Se suscribe a los rasgos del dispositivo: Se suscribe a los rasgos del dispositivo, específicamente buscando el OtaSoftwareUpdateRequestorTrait para escuchar la información de la actualización OTA.

  • Establece un tiempo de espera de 30 segundos. Si no se recibe ninguna actualización del rasgo en ese período, la suscripción finaliza.

  • Controla las actualizaciones de estado de OTA (receiveValue): Cuando el OtaSoftwareUpdateRequestorTrait proporciona 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.

  • Control de 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).

  • Administra 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 desasigne el objeto que la posee.

Para obtener más información, consulta la referencia de atributos de OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Este atributo no es obligatorio 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 estableciendo el atributo AppConfigurationComplete en true. Este atributo se debe usar después de OtaSoftwareUpdateRequestorTrait.

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