NEWS
[Gelöst] on - Datenpunkt überwachen - Endlos-Schleife
-
Hi,
ich habe einen Datenpunkt mit folgenden Werten:
"name": "Name", "role": "switch", "type": "boolean", "desc": "Beschreibung", "read": true, "write": true, "def": false,
Wird dieser auf "True" gesetzt, so soll entsprechend was ausgelöst werden, also wie ein Taster. Ich überwache das mit diesem Script (Auszug):
strObjPath = 'javascript.0.xxxx'; on({id: strObjPath, change: "any", val: true}, function (obj) { var bVal = obj.state.val; if (bVal === true) { setState('javascript.0.hierEinAndererDatenpunktDenIchSetze', true); // jetzt Datenpunkt strObjPath wieder leeren //setState(strObjPath, undefined); } });
Das klappt auch soweit alles prima. Allerdings würde ich gerne nach der Ausführung den Datenpunkt wieder leeren. Das versuche ich mittels "setState(strObjPath, undefined);", siehe auskommentiert oben im Script.
Allerdings führt das zu tollen Endlos-Schleifen :mrgreen:
Wie kann ich denn das Script anpassen, damit ich den Datenpunkt nach Ausführung (setzen auf "True") direkt danach wieder leeren kann?
Oder muss/sollte ich etwa die "role" im Datenpunkt ändern? Ich hab ja im Prinzip einen Taster und keinen Schalter (an/aus).
Ich hoffe, das war verständlich, was ich meine.
Danke Euch für Eure Hilfe.
-
Ein Datenpunkt vom Typ "boolean" kann nur die Werte false und true annehmen. undefined meint, dass der Datenpunkt nicht existiert. Die Abfrage auf true innerhalb der Callback-Funktion ist überflüssig, da dies schon die Triggerbedingung ist.
strObjPath = 'javascript.0.xxxx'; on({id: strObjPath, val: true}, function () { setState('javascript.0.hierEinAndererDatenpunktDenIchSetze', true); // jetzt Datenpunkt strObjPath wieder leeren setState(strObjPath, false); });
-
Perfekt, vielen Dank Paul!
Ich reflektiere:
-
Abfrage auf true war tatsächlich redundant, entstand nur durch das testen aber ist jetzt natürlich raus
-
nur mit false/true arbeiten, undefined war hier Quatsch
-
Entfernen von change: "any" war hier sicherlich auch angebracht. Vermutlich auch der Trigger für die Endlosschleife.
Thema gelöst 8-)
-
-
@Mic:- Entfernen von change: "any" war hier sicherlich auch angebracht. Vermutlich auch der Trigger für die Endlosschleife. `
Nein, sondern war nur redundant, da change: "any" die Voreinstellung ist, wenn das Muster ein Objekt ist.
- Entfernen von change: "any" war hier sicherlich auch angebracht. Vermutlich auch der Trigger für die Endlosschleife. `
-
Ahh, ok, danke für die Info Paul. Also Endlosschleife letztendlich durch das undefined ausgelöst wie schon von dir implizit angemerkt.