Folgende Traits können verwendet werden, nachdem das Gerät in Betrieb genommen wurde:
Trait „OtaSoftwareUpdateRequestor“
Dieses 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 das Trait verwendet werden kann.
withTimeout(OTA_TIMEOUT_MS) {
device.type(OtaRequestorDevice)
.mapNotNull { it?.trait(OtaSoftwareUpdateRequestor) }
.distinctUntilChanged()
.transformWhile { trait ->
emit(trait)
!isTerminalState(trait.updateState)
}
.collect { trait ->
updateState = trait.updateState
updateStateProgress = trait.updateStateProgress
}
}
Zeitlimit:
withTimeouterzwingt eine maximale Dauer (OTA_TIMEOUT_MS) für den Überwachungsprozess. Wenn das Update nicht innerhalb dieser Zeit abgeschlossen wird, tritt ein Zeitlimitfehler auf.Trait-Änderungen beobachten: Der Operator
.distinctUntilChanged()sorgt dafür, dass der nachfolgende Code in der Kette nur reagiert, wenn sich der Status des Traits tatsächlich ändert. Das ist effizienter als das ständige Abrufen.Verarbeitung bis zum Abschluss: Der Operator
.transformWhileverarbeitet Updates so lange, bis derupdateStatedes OTA keinen Endstatus mehr hat (z. B. „Erfolg“ oder „Fehler“).Status erfassen: Bei jeder Statusänderung wird der
.collectBlock ausgeführt um dieupdateStateundupdateStateProgressVariablen mit den neuesten Werten aus dem Trait zu aktualisieren.
Weitere Informationen finden Sie in der
OtaSoftwareUpdateRequestor Referenz zum Trait.
Trait „ConfigurationDone“
Dieses Trait ist für die Kameraaktivierung nicht erforderlich, ermöglicht der App aber, zu verfolgen, wann das Gerät vollständig eingerichtet und einsatzbereit ist. Dazu wird das Attribut AppConfigurationComplete auf true gesetzt.
Dieses Trait sollte nach dem Trait OtaSoftwareUpdateRequestor verwendet werden.
device.trait(ConfigurationDone).first().update { setAppConfigurationComplete(true) }