Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Schleife mit getState / setState

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Schleife mit getState / setState

    This topic has been deleted. Only users with topic management privileges can see it.
    • Johannes Bauerstatter
      Johannes Bauerstatter last edited by Johannes Bauerstatter

      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");
      }
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Johannes Bauerstatter last edited by paul53

        @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" ?

        Johannes Bauerstatter 1 Reply Last reply Reply Quote 0
        • Johannes Bauerstatter
          Johannes Bauerstatter @paul53 last edited by Johannes Bauerstatter

          @paul53

          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.

          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @Johannes Bauerstatter last edited by paul53

            @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');
              }
            });
            
            Johannes Bauerstatter Lenny.CB 2 Replies Last reply Reply Quote 0
            • Johannes Bauerstatter
              Johannes Bauerstatter @paul53 last edited by

              @paul53 #

              Vielen Dank!!

              Ich versuche es mit Blockly und dann den Code zu verstehen/erlernen. 😊

              1 Reply Last reply Reply Quote 0
              • Lenny.CB
                Lenny.CB Most Active @paul53 last edited by

                @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 😀 )

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Lenny.CB last edited by

                  @Lenny-CB sagte:

                  kannst Du vielleicht das "Einfache" dagegenstellen?

                  Das ist das "Einfachere" gegenüber der Blockly-Übersetzung, die Du gepostet hast.

                  Lenny.CB 1 Reply Last reply Reply Quote 0
                  • Lenny.CB
                    Lenny.CB Most Active @paul53 last edited by

                    @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.

                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @Johannes Bauerstatter last edited by

                      @Johannes-Bauerstatter:

                      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.

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      878
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      578
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo