NEWS
Frage zu subscribeForeignStates() -> ack
-
Hi,
ich programmiere gerade 3 Stunden am Stück an einem Adapter und hab gerade eine "Logik-Blockade"
Mit
subscribeForeignStates()
überwache ich Datenpunkte von Bewegungsmeldern, Schaltern, etc.
Die Adapter-FunktiononStateChange()
wird ausgeführt, sobald sich der State ändert.Soweit, so gut.
Jetzt kommt es zu meiner Frage bezüglich "Acknowledge", also ack.
Sobald Bewegungsmelder ausschlägt, ein Wandschalter gedrückt wird, oder ein User injavascript.0.machWas
den Datenpunkt-Wert ändert, soll was ausgelöst werden inonStateChange()
.Reicht da
ack=false
, oder muss ich auchack=true
abfangen, bzw. beides? -
Anyone?
Danke.
-
ich frag beides ab
onStateChange(id, state) { ... ... ... if (state && !state.ack) { ... ..
-
@arteck sagte in Frage zu subscribeForeignStates() -> ack:
if (state && !state.ack) {
Danke für deine Antwort
Aber lt. deinem Code-Beispiel
if (state && !state.ack) {
ist
ack
ausgeschlossen (durch&& !...
im Ausdruck).
In meinen bisherigen Adaptern mache ich das auch so, aber nur bei den Adapter-eigenen States.Was aber, wenn sich ein fremder State ändert, lieber auf ack=false, oder ack=true reagieren, oder in meinem zukünftigen Adapter sogar als Option für jeden Datenpunkt anbieten?
Evtl. wäre tatsächlich als Option nicht schlecht, da nicht alle JS-Scripts "true" zurückgeben, etc. -
@Mic es ist nicht ausgeschlossen sonder als eine verneinte "und Anweisung"
also wenn (state && state.ack == false)
-
Hey @arteck
Jetzt verwirrst du mich noch mehr mit deinemich frag beides ab
Also das hier:
if (state && !state.ack) {
if (state)
prüft ja das State-Objekt auf truthly: All values are truthy unless they are defined as falsy (i.e., except for false, 0, -0, 0n, "", null, undefined, and NaN).Dann wird geprüft (durch
&&
) :
if (!state.ack)
. Wenn kein acknowledge, dann geht es inselse
bzw. in die leere... -
jo genau so... wie du es beschreibst...
aber das sind eigene States.. bei fremden .. hmm gute frage..
-
@Mic sagte in Frage zu subscribeForeignStates() -> ack:
Sobald Bewegungsmelder ausschlägt, ein Wandschalter gedrückt wird, oder ein User in javascript.0.machWas den Datenpunkt-Wert ändert, soll was ausgelöst werden in onStateChange().
Reicht da ack=false, oder muss ich auch ack=true abfangen, bzw. beides?Bei anderen Adaptern solltest du davon ausgehen, dass die States erst "gültig" bzw. bestätigt sind, wenn
ack: true
.States mit
ack: false
zu setzen, ist eine Aufforderung an den dazugehörigen Adapter (oder Skript), diese Änderung zu verarbeiten. -
Danke @AlCalzone
Evtl. wäre es sinnvoll, im Adapter eine Option anbieten, bei User-Datenpunkten unterhalb javascript.x und 0_userdata.0 auch auf
ack:false
zu reagieren... Also grad wenn user-eigene Scripts das nicht so sauber machen... Mal sehen