NEWS
[gelöst] Schleife mit getState / setState
-
Hallo,
ich versuche mich gerade mit dem Javascripten. Kann mir bitte jemand sagen, warum es nicht funktioniert?
Ich möchte vorerst einen PIR an einen ESP8266 per MQTT abfragen und dann eine Shelly V1 schalten. In weiterer Folge möchte ich das Script um eine 5minütige Ausschaltverzögerung erweitern.if (getState("mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR") == "1") { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", "off"); }
-
@Johannes-Bauerstatter
Das ist keine Schleife, sondern nur bei Start des Skriptes erfolgt einmal die Abfrage und die entsprechende Reaktion. Soll auf eine Änderung des PIR reagiert werden, muss der Datenpunkt als Trigger on(id, callback) dienen.Liefert der PIR wirklich einen String "1" ?
-
OK. Danke bin wieder ein Stück schlauer, aber irgendwie versteh ich die Syntax noch nicht richtig.
Hab jetzt folgenden Code (stimmt, PIR liefert einen Integer keinen String):on(getState("mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR") == 1), function (obj) { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", "on"); };
Ich hab mir auch mal die Einführung durchgelesen: link text werd aber nicht ganz schlau wie ich das bei mir anwende:
on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) { setState("hm-rpc.1.IEQ038xxxx3.State",true); });
Woher weiß das Programm was es mit dem Wert von hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT machen soll? Mir ist klar dass die {} ausgeführt werden, nur wann? Wenn hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT von 0 auf 1 geht? Was wäre wenn der Wert von False auf True geht?
Sollte es so funktionieren?
on({id: 'mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR").val == 0) { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", 'off'); } else if (getState("mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR").val == 1) { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", 'on'); } });
Kann es im Moment leider nicht testen, möchte aber alles soweit vorbereiten und verstehen.
-
@Johannes-Bauerstatter sagte:
Sollte es so funktionieren?
Ja, so funktioniert es (mit Blockly erzeugt). MIt Javascript direkt würde man es einfacher machen
on('mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR', function (obj) { if (obj.state.val == 1) { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", 'on'); } else { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", 'off'); } });
-
-
@paul53 sagte in Anfänger: Schleife mit getState und setState:
@Johannes-Bauerstatter sagte:
Sollte es so funktionieren?
Ja, so funktioniert es (mit Blockly erzeugt). MIt Javascript direkt würde man es einfacher machen
on('mqtt.0.Wemos_Kueche_Vorhaus.PIR.PIR', function (obj) { if (obj.state.val == 1) { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", 'on'); } else { setState("mqtt.0.shellies.shelly1-056C43.relay.0.command", 'off'); } });
einfach ist immer gut, kannst Du vielleicht das "Einfache" dagegenstellen? (interessiert mich grad )
-
@Lenny-CB sagte:
kannst Du vielleicht das "Einfache" dagegenstellen?
Das ist das "Einfachere" gegenüber der Blockly-Übersetzung, die Du gepostet hast.
-
@paul53 achso, habe deine Aussage nur falsch verstanden.
PS: Das Blockly ist nicht von mir. Ich hatte nur gefragt, weils mich interessiert und man immer was lernen kann. -
dass die {} ausgeführt werden, nur wann? Wenn hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT von 0 auf 1 geht? Was wäre wenn der Wert von False auf True geht?
Die Datenpunkte PRESS_SHORT haben immer den Wert true. Bei kurzer Tastenbetätigung wird nur der Zeitstempel aktualisiert, wodurch getriggert wird.