Caratteristiche post-commissioning per l'onboarding della videocamera

I tratti che possono essere utilizzati dopo il commissioning del dispositivo sono:

OtaSoftwareUpdateRequestorTrait

Questo tratto fornisce un'interfaccia per monitorare un aggiornamento software OTA sul dispositivo della videocamera. Una volta eseguito il commissioning, la videocamera avvia l'aggiornamento e segnala il suo stato all'app. Una volta che l'app riceve lo stato di completamento dell'aggiornamento software, la videocamera può iniziare lo streaming live.

Il seguente codice campione e la relativa spiegazione mostrano come utilizzare il tratto.

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)
  • Sottoscrizione ai tratti del dispositivo: si sottoscrive ai tratti del dispositivo, in particolare cerca OtaSoftwareUpdateRequestorTrait per ascoltare le informazioni sull'aggiornamento OTA.

  • Impostazione di un timeout: imposta un timeout di 30 secondi. Se non viene ricevuto alcun aggiornamento dal tratto entro questo periodo di tempo, la sottoscrizione termina.

  • Gestione degli aggiornamenti dello 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 della sottoscrizione e registra il completamento. Se la procedura era in stato di download, lo stato dell'applicazione passa al passaggio successivo (.settings).

  • Gestione del ciclo di vita della sottoscrizione: la riga .store(in: &cancellables) garantisce che la sottoscrizione venga gestita e annullata correttamente quando l'oggetto che la possiede viene deallocato.

Per ulteriori informazioni, consulta il riferimento al tratto OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Questo tratto non è obbligatorio 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)
}