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

Los rasgos que se pueden usar después de que se pone en funcionamiento el dispositivo son los siguientes:

OtaSoftwareUpdateRequestorTrait

Este rasgo 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. Cuando la app recibe el estado que indica que la actualización de software se completó, 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 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)
  • Suscripción a los rasgos del dispositivo: Se suscribe a los rasgos del dispositivo y, específicamente, busca el rasgo OtaSoftwareUpdateRequestorTrait para escuchar la información de actualización inalámbrica.

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

  • Control de actualizaciones de estado de OTA (receiveValue): Cuando 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).

  • Administración del 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 rasgo OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Este rasgo 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 listo para usarse estableciendo el atributo AppConfigurationComplete en true. Este rasgo debe usarse después de OtaSoftwareUpdateRequestorTrait.

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