NEWS
Frage zu subscribeForeignStates() -> ack
-
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 inselsebzw. in die leere... -
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.machWasden Datenpunkt-Wert Ă€ndert, soll was ausgelöst werden inonStateChange().Reicht da
ack=false, oder muss ich auchack=trueabfangen, bzw. beides?@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: falsezu setzen, ist eine Aufforderung an den dazugehörigen Adapter (oder Skript), diese Ănderung zu verarbeiten. -
@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: falsezu 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:falsezu reagieren...
Also grad wenn user-eigene Scripts das nicht so sauber machen... Mal sehen :-) -
Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.
Ich frage alle states auf ACK true ab, auĂer die eigenen und die von Javascript und Userdata - also
startsWith. -
Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.
Ich frage alle states auf ACK true ab, auĂer die eigenen und die von Javascript und Userdata - also
startsWith.@skb said in Frage zu subscribeForeignStates() -> ack:
Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.
Ich frage alle states auf ACK true ab, auĂer die von Javascript und Userdata - also
startsWith.Das wÀre aber fehlerhaft wenn es sich um Adaptercode handelt.
Adaptercode sollte / darf bei eigenen States NUR auf externe Writes ('state writeable') mit ACK=FALSE reagieren. Alles andere kann man zwar programmieren ist aber einer Verletzung der ioBroker Philosophie.
Oder zusammengefasst:
-
eigene States des Adapters
- die von externen Quellen beschrieben werden (= Input):
nur state changes mit ack=false sind zu beachten - die selbst vom Adaptercode beschrieben werden (= eher seltener Sonderfall dass der Code diese Ănderungen per subscribe ĂŒberwacht):
ack je nach dahinetrstehender Logik beliebig zu beachten
- die von externen Quellen beschrieben werden (= Input):
-
States eines anderen Adapters
normalerweise sind hier nur state changes mit ack=true zu beachten, d.h. der fremde Adapter hat einen bestÀtigten Wert geschrieben. Alternativen sind je nach Logik denkbar -
States im 0_user_0 Bereich
wĂ€ren prinzipiell analog zu fremden States zu betrachten. Die meisten Adapter ignorieren hier allerdings das ack Flag aus KomfortgrĂŒnden fĂŒr die User.
Siehe auch: https://forum.iobroker.net/topic/61876/bestÀtigt-acknowledged-flag-bedeutung-ein-mysterium
Zitat aus obigem Beitrag:
Jeder Adapter sollte jegliche WertÀnderungen mit ack=true einfach ignorieren und nichts tun! Falls er es doch tut ist es ein Sonderfall oder ein Bug im Adapter
-
-
@skb said in Frage zu subscribeForeignStates() -> ack:
Der Beitrag ist zwar schon alt, aber vielleicht kommt ja nochmal jemand her und fragt sich zu dem Thema.
Ich frage alle states auf ACK true ab, auĂer die von Javascript und Userdata - also
startsWith.Das wÀre aber fehlerhaft wenn es sich um Adaptercode handelt.
Adaptercode sollte / darf bei eigenen States NUR auf externe Writes ('state writeable') mit ACK=FALSE reagieren. Alles andere kann man zwar programmieren ist aber einer Verletzung der ioBroker Philosophie.
Oder zusammengefasst:
-
eigene States des Adapters
- die von externen Quellen beschrieben werden (= Input):
nur state changes mit ack=false sind zu beachten - die selbst vom Adaptercode beschrieben werden (= eher seltener Sonderfall dass der Code diese Ănderungen per subscribe ĂŒberwacht):
ack je nach dahinetrstehender Logik beliebig zu beachten
- die von externen Quellen beschrieben werden (= Input):
-
States eines anderen Adapters
normalerweise sind hier nur state changes mit ack=true zu beachten, d.h. der fremde Adapter hat einen bestÀtigten Wert geschrieben. Alternativen sind je nach Logik denkbar -
States im 0_user_0 Bereich
wĂ€ren prinzipiell analog zu fremden States zu betrachten. Die meisten Adapter ignorieren hier allerdings das ack Flag aus KomfortgrĂŒnden fĂŒr die User.
Siehe auch: https://forum.iobroker.net/topic/61876/bestÀtigt-acknowledged-flag-bedeutung-ein-mysterium
Zitat aus obigem Beitrag:
Jeder Adapter sollte jegliche WertÀnderungen mit ack=true einfach ignorieren und nichts tun! Falls er es doch tut ist es ein Sonderfall oder ein Bug im Adapter
@mcm1957 wieso fehlerhaft?
Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.
Daher reagiere ich in den FĂ€llen nicht drauf, was so absolut ok ist!
Eigene states des Adapters bearbeite ich auch mit ACK false, da der Adapter ja damit etwas tun soll und diesen dann bestÀtigt.
-
-
@mcm1957 wieso fehlerhaft?
Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.
Daher reagiere ich in den FĂ€llen nicht drauf, was so absolut ok ist!
Eigene states des Adapters bearbeite ich auch mit ACK false, da der Adapter ja damit etwas tun soll und diesen dann bestÀtigt.
Wenn der User mit ACK=TRUE in einen State deines Adapters schreibt um zB. eine Einstellung zu Àndern, dann ist dieser Schreibvorgang zu ignorieren. Siehe auch Apollon77s Beitrag. Alles andere ist (von etwaigen SonderfÀllen mal abgesehen) schlicht und einfach falsch.
Wenn die States eines fremden Adapters ĂŒberwachst um z.B. Werte die ein anderer Adapter schreibt zu verarbeiten, dann solltest du nur Werte mit ack = true beachten.
Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.
Daher reagiere ich in den FĂ€llen nicht drauf, was so absolut ok ist!
Wenn es sich um eigene States deines Adapter handelt dann ist das ja OK. Du darfst ja eben NUR mit ack=false regieren! Wenn es sich um fremde States handelt, solltes du ack=false eher ignorieren.
Nur weil User das das ack Flag falsch verwenden und zB. Einstellungen mit ack=true schrieben ist das noch kein Grund dass sich ein Adapter falsch verhÀlt.
In jedem fall fehlt in obiger Aussage um welcghe States (die deines Adapters, welche in 0:userdate_0, etc.) es sich handelt.
-
Wenn der User mit ACK=TRUE in einen State deines Adapters schreibt um zB. eine Einstellung zu Àndern, dann ist dieser Schreibvorgang zu ignorieren. Siehe auch Apollon77s Beitrag. Alles andere ist (von etwaigen SonderfÀllen mal abgesehen) schlicht und einfach falsch.
Wenn die States eines fremden Adapters ĂŒberwachst um z.B. Werte die ein anderer Adapter schreibt zu verarbeiten, dann solltest du nur Werte mit ack = true beachten.
Viele User schreiben ihre Skripts oder Blockly nicht sauber und haben demnach kein ACK true mit dabei.
Daher reagiere ich in den FĂ€llen nicht drauf, was so absolut ok ist!
Wenn es sich um eigene States deines Adapter handelt dann ist das ja OK. Du darfst ja eben NUR mit ack=false regieren! Wenn es sich um fremde States handelt, solltes du ack=false eher ignorieren.
Nur weil User das das ack Flag falsch verwenden und zB. Einstellungen mit ack=true schrieben ist das noch kein Grund dass sich ein Adapter falsch verhÀlt.
In jedem fall fehlt in obiger Aussage um welcghe States (die deines Adapters, welche in 0:userdate_0, etc.) es sich handelt.
-
@mcm1957 entspricht ja nicht meiner Aussage!
Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.
So, wie es richtig ist!
@skb said in Frage zu subscribeForeignStates() -> ack:
@mcm1957 entspricht ja nicht meiner Aussage!
Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.
So, wie es richtig ist!
Das ist vollkommen RICHTIG
In deinem ersten Beitrag fehlte nur ursprĂŒnglich das "eigenen" und damit entstand der Eindruck dass du SchreibvorgĂ€nge auf die eigenen States mit ack=true erwartest. Und das wĂ€re falsch. Nach deiner obigen Korrektur ist es nun OK.
-
@skb said in Frage zu subscribeForeignStates() -> ack:
@mcm1957 entspricht ja nicht meiner Aussage!
Eigene Adapter states werden nur mit ACK false beachtet, bei Javascript und userdatata beachte ich beides! Andere Adapter nur mit ACK true.
So, wie es richtig ist!
Das ist vollkommen RICHTIG
In deinem ersten Beitrag fehlte nur ursprĂŒnglich das "eigenen" und damit entstand der Eindruck dass du SchreibvorgĂ€nge auf die eigenen States mit ack=true erwartest. Und das wĂ€re falsch. Nach deiner obigen Korrektur ist es nun OK.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden