Cechy po uruchomieniu kamery

Cechy, których można używać po uruchomieniu urządzenia:

OtaSoftwareUpdateRequestorTrait

Ten atrybut udostępnia interfejs do monitorowania aktualizacji oprogramowania OTA na urządzeniu z kamerą. Po uruchomieniu kamera rozpoczyna aktualizację i przesyła informacje o jej stanie do aplikacji. Gdy aplikacja otrzyma informację o zakończeniu aktualizacji oprogramowania, kamera może rozpocząć transmisję na żywo.

Poniższy przykładowy kod i wyjaśnienie pokazują, jak można używać tego atrybutu.

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)
  • Subskrypcja cech urządzenia: subskrybuje cechy urządzenia, w szczególności szuka OtaSoftwareUpdateRequestorTrait, aby nasłuchiwać informacji o aktualizacji OTA.

  • Ustawianie limitu czasu: ustawia 30-sekundowy limit czasu. Jeśli w tym czasie nie otrzymamy od cechy żadnych aktualizacji, subskrypcja zostanie zakończona.

  • Obsługa aktualizacji stanu OTA (receiveValue): gdy OtaSoftwareUpdateRequestorTrait poda nowy stan, ten blok jest wykonywany. Rejestruje bieżący stan i postęp aktualizacji OTA. Następnie aktualizuje stan wewnętrzny aplikacji (step), aby odzwierciedlić te nowe informacje.

  • Obsługa zakończenia (sink): ten blok jest wykonywany po zakończeniu subskrypcji i rejestruje zakończenie. Jeśli proces był w stanie pobierania, stan aplikacji przechodzi do następnego kroku (.settings).

  • Zarządzanie cyklem życia subskrypcji: wiersz .store(in: &cancellables) zapewnia prawidłowe zarządzanie subskrypcją i jej anulowanie, gdy obiekt, do którego należy, zostanie zwolniony.

Więcej informacji znajdziesz w dokumentacji cechy OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Ten atrybut nie jest wymagany do aktywacji kamery, ale umożliwia aplikacji śledzenie, kiedy urządzenie jest w pełni skonfigurowane i gotowe do użycia, poprzez ustawienie atrybutu AppConfigurationComplete na true. Tego atrybutu należy używać po znaku OtaSoftwareUpdateRequestorTrait.

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