Les traits qui peuvent être utilisés une fois l'appareil mis en service sont les suivants :
OtaSoftwareUpdateRequestorTrait
Ce trait fournit une interface permettant de surveiller une mise à jour logicielle OTA sur l'appareil photo. Une fois mis en service, l'appareil photo lance la mise à jour et signale son état à l'application. Une fois que l'application reçoit l'état indiquant que la mise à jour logicielle est terminée, l'appareil photo peut commencer à diffuser en direct.
L'exemple de code et l'explication suivants montrent comment utiliser le trait.
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)
S'abonner aux traits de l'appareil : il s'abonne aux traits de l'appareil, en recherchant spécifiquement le
OtaSoftwareUpdateRequestorTraitpour écouter les informations de mise à jour OTA.Définir un délai avant expiration : il définit un délai avant expiration de 30 secondes. Si aucune mise à jour n'est reçue du trait dans ce délai, l'abonnement se termine.
Gérer les mises à jour de l'état OTA (
receiveValue) : lorsque leOtaSoftwareUpdateRequestorTraitfournit un nouvel état, ce bloc est exécuté. Il enregistre l'état actuel et la progression de la mise à jour OTA. Il met ensuite à jour l'état interne de l'application (step) pour refléter ces nouvelles informations.Gérer la finalisation (
sink) : ce bloc est exécuté lorsque l'abonnement se termine et enregistre la finalisation. Si le processus était en état de téléchargement, l'état de l'application passe à l'étape suivante (.settings).Gérer le cycle de vie de l'abonnement : la
.store(in: &cancellables)ligne garantit que l'abonnement est correctement géré et annulé lorsque l'objet qui le possède est désalloué.
Pour en savoir plus, consultez la documentation de référence sur le
OtaSoftwareUpdateRequestorTrait trait.
ConfigurationDoneTrait
Ce trait n'est pas obligatoire pour l'activation de l'appareil photo, mais il permet à l'application de suivre le moment où l'appareil est entièrement configuré et utilisable en définissant l'attribut AppConfigurationComplete sur true.
Ce trait doit être utilisé après le OtaSoftwareUpdateRequestorTrait.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}