Caratteristiche post-commissioning per l'onboarding della videocamera

Le caratteristiche che possono essere utilizzate dopo la configurazione del dispositivo sono:

OtaSoftwareUpdateRequestorTrait

Questo tratto fornisce un'interfaccia per monitorare un aggiornamento software OTA sul dispositivo videocamera. Una volta commissionata, la videocamera avvia l'aggiornamento e comunica il suo stato all'app. Quando l'app riceve la notifica che l'aggiornamento software è stato completato, la videocamera può iniziare a trasmettere in live streaming.

Il seguente codice di esempio e la relativa spiegazione mostrano come può essere utilizzata la caratteristica.

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)
  • Iscrizione alle caratteristiche del dispositivo: si iscrive alle caratteristiche del dispositivo, cercando in particolare OtaSoftwareUpdateRequestorTrait per ascoltare le informazioni sugli aggiornamenti OTA.

  • Impostazione di un timeout: imposta un timeout di 30 secondi. Se non viene ricevuto alcun aggiornamento dalla caratteristica entro questo periodo di tempo, l'abbonamento termina.

  • Gestione degli aggiornamenti di stato OTA (receiveValue): quando OtaSoftwareUpdateRequestorTrait fornisce un nuovo stato, questo blocco viene eseguito. Registra lo stato attuale e l'avanzamento dell'aggiornamento OTA. Aggiorna quindi lo stato interno dell'applicazione (step) per riflettere queste nuove informazioni.

  • Gestione del completamento (sink): questo blocco viene eseguito al termine dell'abbonamento e registra il completamento. Se il processo era in stato di download, lo stato dell'applicazione passa al passaggio successivo (.settings).

  • Gestione del ciclo di vita dell'abbonamento: la riga .store(in: &cancellables) garantisce che l'abbonamento venga gestito e annullato correttamente quando l'oggetto che lo possiede viene deallocato.

Per saperne di più, consulta il riferimento all'attributo OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Questa caratteristica non è necessaria per l'attivazione della videocamera, ma consente all'app di monitorare quando il dispositivo è completamente configurato e utilizzabile impostando l'attributo AppConfigurationComplete su true. Questo tratto deve essere utilizzato dopo OtaSoftwareUpdateRequestorTrait.

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