NEWS
if-Abfrage mit Zahl
-
Hallo,
ich möchte gerne auf Basis einens states eine if-Abfrage machen. Der Philips Switch (via deconz) schaltet z.B. den state auf 1002 für Button 1 kurz gedrückt oder 4002 für Button 4 kurz gedrückt.
Dabei springt er allerdigns nicht direkt auf den Wert, sondern z.B. von 0 -> 1001 -> 1002. Am Ende steht aber dauerhaft 1002 im state "buttonevent".
Ich habe folgendes probiert:
Frage 1: Warum kann man keine Zahlen in eine if-Abrfage einbauen?
Frage 2: Mit dem textfeld klappt es nicht. Dies könnte am Textfeld liegen oder daran, dass der state erst wechselt...entferne ich die if-Abfrage und steuere einfach nach dem Falls object klappt es. Also das light geht z.B. ab. Aber dann ist es egal welchen button ich für wie lange drücke
Was kann ich tun um es hin zu bekommen?
-
Hallo,
- keine Ahnung
- das ist kein Text sondern ein Zahlenwert.
So sollte es gehen:
setzte das anerkannt ist noch auf "Befehl"
-
@ticaki
Danke.Ich habe es nun so geändert:
- Was macht die Umstllung auf Befehl genau?
- Leider klappt es nicht. Evtl. liegt es daran wie der state funktioniert: Ich drücke die Taste und in <1sek wechselt er von 0 auf 1000 auf 1002 auf 0.
- Ist es so, dass dann das Falls Objekt 3x durchlaufen wird? Also einmal beim wechsel von 0->1000, dann 1000->1002 und ein letztes mal 1002 ->0
VG
-
bin in Bloody nicht so toll. Kannst du das in Javascript umwandeln und posten. gibt oben einen Knopf um sich das Javascript anzuschauen das Bloody erzeugt
-
@ticaki
Gerne, Danke!var event1; on({id: 'deconz.0.Sensors.17.buttonpressed', change: "ne", ack: false}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; event1 = 1002; if ('deconz.0.Sensors.17.buttonpressed' == event1) { setState("hue.0.Schlafzimmer_links.on"/*Schlafzimmer links.on*/, true); setState("hue.0.Schlafzimmer_links.level"/*Schlafzimmer links.level*/, 100); } }); 1002; on({id: 'deconz.0.Sensors.17.buttonpressed', change: "ne", ack: false}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; event1 = 2002; if ('deconz.0.Sensors.17.buttonpressed' == event1) { setState("hue.0.Schlafzimmer_links.on"/*Schlafzimmer links.on*/, true); setState("hue.0.Schlafzimmer_links.level"/*Schlafzimmer links.level*/, 20); } }); on({id: 'deconz.0.Sensors.17.buttonpressed', change: "ne", ack: false}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; event1 = 4002; if ('deconz.0.Sensors.17.buttonpressed' == event1) { setState("hue.0.Schlafzimmer_links.on"/*Schlafzimmer links.on*/, true); } });
-
Hehehe mein Fehler moment
-
Das anerkannt hab ich hier erläutert:
-
leider funktioniert es immer noch nicht
-
Was soll das Skript tun? Im Moment schaltet es die Lampe aus. Edit: und dann setzte es das level auf 100
-
ja, das war nur ein Test. Aber wenn ich es wieder auf "egal" stelle funkioniert es scheinbar
-
also so:
-
Bei geändert ist es auch egal
Ich verwende bri (0-255) und nicht level(0-100) hatte Probleme mit level am Anfang. Wollte es nur erwähnt haben.
-
@ticaki
Jetzt beim test klappt es. Aber ich behalte es im Hinterkopf
Wenn du auch die Hue hast. Wie veränderst du die Farbwerte? Mit "xy"? -
@dehein2
Jo, Befehl funktioniert nicht... war zulange her dass ich mein dimmer skript geschrieben habe.Ich verwende hue (0-359), hat aber eher was damit zu tun, das ich mich mit xy noch nicht auseinandergesetzt habe.
-
Dieses Skript ist an mehreren stellen nicht optimal:
-
Es macht wenig Sinn erst Variablen Werte zuzuweisen, und diese dann abzufragen.
Statt dessen kann direkt der Baustein
an Stelle von
eingesetzt werden -
Des weiteren fragst du 4 mal nacheinander den gleichen Datenpunkt ab, der auch schon den Trigger auslöst. Dafür gibt es einen Extra Baustein im "Trigger" Bereich. (Siehe roter Pfeil im nächsten Bild)
An Stelle von Objekt ID kann dort Wert eingetragen werden, so das dieser Baustein an Stelle von
eingesetzt werden kann. Damit sparst du dir das wiederholte Abfragen des Datenpunktes (und Damit Rechenleistung) -
auch das Triggern auf
ist nicht optimal, da der Datenpunkt bei einem Tastendruck den Status doppelt ändert, einmal auf z.Bsp. 1001, und danach dann auf 0. Damit wird der trigger 2 mal aktiv, um bei der zweiten Aktivierung ohne Aktion durch alle Falls Abfragen durchzulaufen.
Besser ist es, an dieser stelle auf "ist grösser als vorher" zu stellen, dann wird der Trigger pro Tastendruck auch nur genau 1 mal aktiviert. (Spart auch wieder Rechenleistung)
A.
-
-
@Asgothian: super, vielen Dank für die Mühe!