Folgende Traits können nach der Inbetriebnahme des Geräts verwendet werden:
OtaSoftwareUpdateRequestorTrait
Dieser Trait bietet eine Schnittstelle zum Überwachen eines OTA-Softwareupdates auf dem Kameragerät. Nach der Inbetriebnahme startet 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 das Attribut 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äte-Traits abonnieren: Es werden die Traits des Geräts abonniert, insbesondere
OtaSoftwareUpdateRequestorTrait, um Informationen zu OTA-Updates zu empfangen.Zeitlimit festlegen: Dadurch wird ein Zeitlimit von 30 Sekunden festgelegt. Wenn innerhalb dieses Zeitraums keine Aktualisierung vom Trait eingeht, wird das Abo beendet.
OTA-Statusaktualisierungen verarbeiten (
receiveValue): Wenn dasOtaSoftwareUpdateRequestorTraiteinen neuen Status bereitstellt, wird dieser Block ausgeführt. Darin werden der aktuelle Status und der Fortschritt des OTA-Updates protokolliert. Anschließend wird der interne Status der Anwendung (step) entsprechend aktualisiert.Abschluss verarbeiten (
sink): Dieser Block wird ausgeführt, wenn das Abo endet, und protokolliert den Abschluss. Wenn sich der Prozess im Downloadstatus befand, wird der Anwendungsstatus mit dem nächsten Schritt (.settings) fortgesetzt.Abonnementlebenszyklus verwalten: Die Zeile
.store(in: &cancellables)sorgt dafür, dass das Abo ordnungsgemäß verwaltet und gekündigt wird, wenn das zugehörige Objekt freigegeben wird.
Weitere Informationen findest du in der Referenz zum OtaSoftwareUpdateRequestorTrait-Trait.
ConfigurationDoneTrait
Dieses Merkmal ist für die Kameraaktivierung nicht erforderlich, ermöglicht es der App jedoch, nachzuverfolgen, wann das Gerät vollständig eingerichtet und nutzbar ist, indem das Attribut AppConfigurationComplete auf true gesetzt wird.
Dieses Merkmal sollte nach OtaSoftwareUpdateRequestorTrait verwendet werden.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}