NEWS
setStateChanged überschreibt gleichen Wert
-
Hallo,
ich würde gerne einen gleichen Wert nicht überschreiben, wenn setState ausgeführt wird.
Dies ist natürlich über folgende Abfrage möglich:
function test(){ if(getState('myState').val != false){ setState('myState', false); } }
Ich habe in der JavaScript Doku folgende Funktion gefunden:
setStateChangedWenn ich dann allerdings diese Funktion nutze, wird beim Aufruf der Funktion "test" trotzdem der Wert false erneut geschrieben.
function test(){ setStateChanged('myState', false); }
Mache ich irgendwas falsch? Ist die Funktion dafür nicht geeignet?
Grüße,
Olli -
@olterion sagte: trotzdem der Wert false erneut geschrieben.
Gerade getestet: Es wird nur dann nicht aktualisiert, wenn sowohl der Wert als auch die Bestätigung übereinstimmen. Das macht natürlich bei Adapter-Datenpunkten keinen Sinn.
-
setStateChanged prüft alle Attribute (val, ack, q, expire, from, user, ...) und aktualisiert nur dann nicht, wenn es KEINE Änderung in irgendeinem Attribut gibt.
-
Hallo,
vielen Dank für die Erläuterungen.
Ich versuche tatsächlich einen Datenpunkt eines Adapters zu beschreiben.
Dieser setzt dann natürlich den ack immer auf true, wenn er die Daten verarbeitet hat.Schade, die Dokumentation sagt ja aus, dass der Datenpunkt nur geschrieben wird, wenn die VALUE (val) sich geändert hat:
Same as setState, but set value only if the value is really changed.
An der Stelle ist die Dokumentation dann wohl nicht ganz korrekt.
@Bluefox könnte man die Funktion setStateChanged nicht so erweitern, dass man angeben kann, welche Attribute betrachtet werden sollen? (in meinem Fall würde der Vergleich von val ausreichen)
Grüße,
Olli -
Zu dem Thema gibts ein Issue
https://github.com/ioBroker/ioBroker.javascript/issues/1720