Attribute nach der Inbetriebnahme für das Onboarding von Kameras

Folgende Traits können verwendet werden, nachdem das Gerät in Betrieb genommen wurde:

OtaSoftwareUpdateRequestorTrait

Dieser Trait bietet eine Schnittstelle zum Überwachen eines OTA-Softwareupdates auf dem Kameragerät. Nach der Inbetriebnahme initiiert die Kamera das Update und meldet ihren Status an die App. Sobald die App den Status erhält, dass das Softwareupdate abgeschlossen ist, kann die Kamera mit dem Livestreaming beginnen.

Der folgende Beispielcode und die Erläuterung zeigen, wie der Trait verwendet werden kann.

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)
  • Gerätetraits abonnieren: Es werden die Traits des Geräts abonniert, insbesondere wird nach dem OtaSoftwareUpdateRequestorTrait gesucht, um auf OTA-Updateinformationen zu warten.

  • Zeitlimit festlegen: Es wird ein Zeitlimit von 30 Sekunden festgelegt. Wenn innerhalb dieser Zeit kein Update vom Trait empfangen wird, endet das Abo.

  • OTA-Statusupdates verarbeiten (receiveValue): Wenn der OtaSoftwareUpdateRequestorTrait einen neuen Status liefert, wird dieser Block ausgeführt. Der aktuelle Status und der Fortschritt des OTA-Updates werden protokolliert. Anschließend wird der interne Status der Anwendung (step) aktualisiert, um diese neuen Informationen widerzuspiegeln.

  • Abschluss verarbeiten (sink): Dieser Block wird ausgeführt, wenn das Abo endet, und der Abschluss wird protokolliert. Wenn sich der Prozess im Downloadstatus befand, wird der Anwendungsstatus zum nächsten Schritt (.settings) weitergeleitet.

  • Lebenszyklus des Abos verwalten: Die .store(in: &cancellables) Zeile sorgt dafür, dass das Abo ordnungsgemäß verwaltet und beendet wird, wenn die Zuordnung des Objekts aufgehoben wird.

Weitere Informationen finden Sie in der OtaSoftwareUpdateRequestorTrait Trait-Referenz.

ConfigurationDoneTrait

Dieser Trait ist für die Kameraaktivierung nicht erforderlich, ermöglicht es der App jedoch, zu verfolgen, wann das Gerät vollständig eingerichtet und einsatzbereit ist, indem das Attribut AppConfigurationComplete auf true gesetzt wird. Dieser Trait sollte nach dem OtaSoftwareUpdateRequestorTrait verwendet werden.

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