NEWS
wie ack-Eigenschaft genau behandeln?
-
Hallo!
Ich entwickle einen Adapter, der angeschlossene Hardware steuern soll. Diese ist aber nicht zu 100% zuverlässig.
In onStateChange bekomme ich also die Info, dass der Benutzer den Wert geändert haben möchte, also steht ack auf false und der gewünschte Wert in state.val.
Dies leite ich an die Hardware weiter, die im Erfolgsfall die Statusänderung bestätigt, woraufhin ich setState mit ack=true machen kann, fertig.
Nach dem Informieren der Hardware schaue ich per setTimeout nach ein paar Sekunden nach, ob es geklappt hat, also die Bestätigung kam. Wenn nicht, mache ich ein paar erneute Versuche.
Nun endlich die Frage: Wenn ich nun nach ein paar Versuchen zum Ergebnis komme, dass der gewünschte Befehl nicht abschließend ausgeführt werden konnte ("Hardware klemmt"), wie gehe ich mit state.val und ack um?
Einfach so lassen würde ja wohl bedeuten "wird gerade auf x gesetzt, ist aber noch nicht fertig", was evtl. zu Verwirrung führen könnte.
Wieder zurücksetzen auf den vorherigen Wert mit ack=true? Dann müsste ich mir den alten Wert noch irgendwo merken. Oder finde ich den in state? stat.previousval oder so?
Scheint mir alles nicht so toll zu sein. Gibt es da ein übliches Vorgehen? -
@ELK sagte in:
"wird gerade auf x gesetzt, ist aber noch nicht fertig", was evtl. zu Verwirrung führen könnte.
Wieso Verwirrung ? Genau das sagt ack = false aus und wird als Rückgabe vom Adapter erwartet.
-
ok. Dann bleibt im Fehlerfalle also der Status auf dem Wunschwert und ack auf false.
Hätte ja auch sein können, dass ein ack=false zu interpretieren ist als "in Arbeit, bitte später nochmal nachschauen". Aber offenbar ist es eher "sollte (irgendwann damals mal) geändert werden, hat bis jetzt aber noch nicht geklappt."
Schön, spart mir Aufwand -
@ELK
wenn dann die hardware regelmäßig abgefragt wird, dann wird bei der nächsten ordentlichen abfrage
der Datenpunkt neu geschrieben und dann wieder mit ack bestätigt.
wenn der adapter feststellt, das die Ansteuerung der Hardware nicht mehr funktioniert, dann sollte die Connection Eigenschaft auf false gesetzt werden, dann geht der adapter auf rot. dann muss erst das Problem grundsätzlich gelöst werden.