Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. setStateDelayed - Fragen zur Funktion

    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

    setStateDelayed - Fragen zur Funktion

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Hardy last edited by paul53

      @hardy sagte: Lasse ich den Timer nicht neu starten, dann habe ich das Problem, dass es sein kann, das der Ein- und Ausschaltbefehl zu undefinierten Zeitpunkten geschrieben werden.

      In deinem Beispiel wird setStatedelayed() alle 10 s aufgerufen, wenn die Bedingungen erfüllt sind. Das Schreiben des Wertes erfolgt erstmalig nach 60 s und dann jede weitere 10 s. Es laufen 6 Timer parallel.

      @hardy sagte in setStateDelayed - Fragen zur Funktion:

      Lasse ich den Timer bei jedem Aufruf neu starten, dann schaltet der Befehl meinen Ausgang nicht.

      Der 60-s-Timer wird alle 10 s gestoppt, kann also nie ablaufen.

      @hardy sagte in setStateDelayed - Fragen zur Funktion:

      Hier mal noch das Script

      Wozu die Verzögerungen? Die Hysterese ist doch groß genug, um zu häufiges Schalten zu vermeiden.

      L 1 Reply Last reply Reply Quote 0
      • L
        Laser @paul53 last edited by

        @paul53 ich habe ebenfalls ein Problem mit setstatedelayed
        Ich möchte einen Ausgang für eine Zeit setzen und dann wieder zurücksetzen. Funktioniert aber nicht:
        Console.log nur, um zu sehen, das das überhaupt angestoßen wird)

        function einschalten() {
            setState('rpi2.0.gpio.22.state'/**/,true);  //  true ist einschalten
            setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/,true,2000,false, function(){console.log("ein")}); 
          
        };  // Ende einschalten
        
        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Laser last edited by

          @laser sagte: Ausgang für eine Zeit setzen und dann wieder zurücksetzen.

          Dein setStateDelayed() schaltet nur "power_on" um 2 s verzögert ein.

          L 1 Reply Last reply Reply Quote 0
          • L
            Laser @paul53 last edited by Laser

            @paul53 Ja, das merke ich. Und wie schalte ich wieder aus? Hatte gehofft, das passiert mit dem "false"

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

              @laser sagte: wie schalte ich wieder aus?

              Was soll wann wieder ausgeschaltet werden? GPIO22 oder "power_on"?

              @laser sagte in setStateDelayed - Fragen zur Funktion:

              Hatte gehofft, das passiert mit dem "false"

              Das false hinter der Verzögerungszeit bedeutet, dass der Timer bei erneutem Aufruf nicht gestoppt wird.

              L 1 Reply Last reply Reply Quote 0
              • L
                Laser @paul53 last edited by

                @paul53
                power_on

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

                  @laser
                  Wenn "power_on" verzögert ausgeschaltet werden soll, muss false (anstelle von true) vor der Verzögerungszeit verwendet werden.

                      setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/, false, 2000, false, function() {
                          console.log("aus")
                      }); 
                  
                  L 1 Reply Last reply Reply Quote 0
                  • L
                    Laser @paul53 last edited by Laser

                    @paul53 versuche es jetzt so:

                    function einschalten() {
                        setState('rpi2.0.gpio.22.state'/**/,true);  //  true ist einschalten Relais
                        setState('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,true); 
                        setStateDelayed('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,false,6000); 
                    };  // Ende einschalten
                    

                    EDIT: das ging so schnell, daß ich es in "Objekte" nicht gesehen habe. Bin jetzt auf 6000 gegangen.

                    L 1 Reply Last reply Reply Quote 0
                    • L
                      Laser @Laser last edited by Laser

                      @paul53 zweimal "delayed" geht wohl nicht? Nach Einschalten über Relais muß der Inverter erst hochlaufen...
                      und: gibt es einen Höchstwert für Delay?

                      function einschalten() {
                        //  setState('rpi2.0.gpio.22.state'/**/,true);  //  true ist einschalten Relais
                          setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/,true,5000); 
                          setStateDelayed('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,false,8000); 
                      };  // Ende einschalten
                      
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Laser last edited by

                        @laser sagte: zweimal "delayed" geht wohl nicht?

                        Sollte funktionieren. Ich würde allerdings setTimeout() bevorzugen.

                        @laser sagte in setStateDelayed - Fragen zur Funktion:

                        gibt es einen Höchstwert für Delay?

                        Ja, der ist aber sehr hoch.

                        L 1 Reply Last reply Reply Quote 0
                        • L
                          Laser @paul53 last edited by Laser

                          @paul53 das setzen funktioniert nicht. Erst wenn ich das zweite "setstateDelayed" auskommentiere, wird gesetzt nach Ablauf der Zeit. "setTimeout" muß ich mir ansehen.

                          
                          function einschalten() {
                            //  setState('rpi2.0.gpio.22.state'/**/,true);  //  true ist einschalten Relais
                              setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/,true,5000); 
                           // setStateDelayed('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,false,8000); 
                          };  // Ende einschalten
                          
                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Laser last edited by paul53

                            @laser sagte: "setTimeout" muß ich mir ansehen.

                            function einschalten() {
                                setState('rpi2.0.gpio.22.state'/**/,true);  //  true ist einschalten Relais
                                setTimeout(function() {
                                    setState('opendtu.1.114184537824.power_control.power_on'/**/, true); 
                                    setStateDelayed('opendtu.1.114184537824.power_control.power_on', false, 3000); // 3 s Impuls
                                }, 5000); // 5 s Hochlauf
                            }; // Ende einschalten
                            
                            L 1 Reply Last reply Reply Quote 1
                            • L
                              Laser @paul53 last edited by Laser

                              @paul53 Danke, das Absetzen der Impulse klappt so. Muß nur noch die Zeiten für den Inverter- Hochlauf hinbekommen, damit die Impulse auch wirken.
                              EDIT: Klappt auch mit dem Hochlauf abwarten... ,40000

                              L 1 Reply Last reply Reply Quote 0
                              • L
                                Laser @Laser last edited by Laser

                                @paul53
                                irgendwelche Nebenwirkungen hat das aber nicht (Unterbrechen von JS- Abarbeitung für die timeout-Zeit?)

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

                                  @laser sagte: Unterbrechen von JS- Abarbeitung für die timeout-Zeit?

                                  Nein, setTimeout() wird asynchron ausgeführt.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  655
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  3
                                  16
                                  296
                                  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