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

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SetStateDelayed

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

      Hallo, ich habe eine Verständnisfrage:
      So funktioniert es:
      setStateDelayed(idRollo, 0, 3600000);

      So nicht:
      setStateDelayed(idRollo, 0, Versatz);
      Die Variable Versatz enthält laut LOG 3600000.
      Sollte auch als Datentype Number sein.
      Mach ich was falsch?
      Michael

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

        @michihorn sagte:

        So nicht:
        setStateDelayed(idRollo, 0, Versatz);

        Mit einer Scriptvariablen Versatz funktioniert es. Ist Versatz etwa ein Datenpunkt ? Zeige mal das ganze Script in Code tags (</>).

        1 Reply Last reply Reply Quote 0
        • M
          michihorn last edited by

          Das ganze beruht auf zwei Scripten:
          VIER_GANZZU: (Ausschnitt)

          createState("javascript.0.Rolladen.Zeitsteuerung.ASTRO.VIER.Verzögerung",{read: true,write: true,desc: "Versatz in mSec,",type: "number",def:3600000});
          var VarDusk = getState("javascript.0.Astro.Zeiten.08 - dusk").val.split(':');
          var R_stunde = parseInt(VarDusk[0], 10);
          var R_minute = parseInt(VarDusk[1], 10);
          var Warte_std =getState('javascript.0.Rolladen.Zeitsteuerung.ASTRO.VIER.Warte_std').val
          var Warte_min =getState('javascript.0.Rolladen.Zeitsteuerung.ASTRO.VIER.Warte_min').val
          
          var add_std = Math.floor(R_stunde + Warte_std);
          var add_min = Math.floor(R_minute + Warte_min);
          
          let msec=60000 * ((60*Warte_std) + Warte_min);
          setState("javascript.0.Rolladen.Zeitsteuerung.ASTRO.VIER.Verzögerung", msec);
          

          und
          ELERO_VIER: (Ausschnitt)

          const idVersatz = "javascript.0.Rolladen.Zeitsteuerung.ASTRO.VIER.Verzögerung";
          var Versatz = getState(idVersatz).val;
          //Küche schließen bei Astrozeit - Beginn der Abenddämmerung
          schedule({astro: "dusk"}, function () {
              Aktion(0);
              createEventlog("Info", "Abenddämmerung Rolladen Küche fährt AB");
              setStateDelayed(idRolloStop, true, 6000);
              setStateDelayed(idRollo, 0, Versatz);
          });
          

          Die Dame des Hauses möchte das bei Dask das Rollo zur 50% zufährt, bei Elero gibt es keine % Werte
          Also wurde die Zeit bis zur halbe Behanghöhe gestoppt.
          Ein Stunde ( oder mehr je nach Wunsch) soll dann der Behang dann ganz zu fahren. Mit dem Nummerischen Wert hat es geklappt. Die Variable Versatz klappte bislang nicht.
          Michael

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

            @michihorn
            Das sollte so funktionieren (allerdings erfolgt eine Aktualisierung von Versatz nur bei Skriptstart). Bau zum Test mal ein Log ein.

                setStateDelayed(idRollo, 0, Versatz);
                log(typeof Versatz + ' Wert: ' + Versatz);
            });
            
            1 Reply Last reply Reply Quote 0
            • cash
              cash Most Active last edited by

              Ich glaube so ein Problem hatte ich auch schon mal. Nach Konvertierung in Zahl ging es. Hatte nicht mit typeof getestet was raus kam. Angelegt war mein Objekt als Zahl hätte also so funktionieren müsssen...

              1 Reply Last reply Reply Quote 0
              • P
                Pittini Developer last edited by

                Versuch doch einfach mal:

                    setStateDelayed(idRollo, 0, parseInt(Versatz));
                });
                
                

                Wenns dann klappt, liegts am Datentyp vom Versatz.

                1 Reply Last reply Reply Quote 0
                • madjack84
                  madjack84 last edited by

                  Hallo zusammen, kleine Verständnisfrage zu setStateDelayed()

                  Setzt es das Delay für die Variable ausserhalb des Skriptes, sodass ich das "löschen falls läuft" Skript übergreifend in javascript verwenden kann?

                  Oder geht das "löschen falls läuft" nur in ein un dem selben Skript bei mehreren Kommandos?

                  P T 2 Replies Last reply Reply Quote 0
                  • P
                    Pittini Developer @madjack84 last edited by

                    @madjack84 sagte in SetStateDelayed:

                    Setzt es das Delay für die Variable ausserhalb des Skriptes,

                    Es macht gar nix mit iwelchen Variablen. Es verzögert einfach den setState um x Millisekunden.

                    sodass ich das "löschen falls läuft" Skript übergreifend in javascript

                    Hä? Was soll das "löschen falls läuft" Skript sein? Und was hat es mit setStateDelayed zu tun?

                    https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

                    1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @madjack84 last edited by

                      @madjack84
                      Das geht nur im selben Skript. Du wirfst da gerade mit Blockly Begriffen um dich "löschen falls läuft" ist

                      if (ref) clearStateDelayed(ref);
                      

                      Die benötigte Variable kann man nur mit maximaler Gültigkeit fürs Skript definieren.

                      madjack84 1 Reply Last reply Reply Quote 0
                      • madjack84
                        madjack84 @ticaki last edited by madjack84

                        @ticaki Danke.. da hast du natürlich Recht... ich mache das in Blockly und dort gibt es die schöne Option "löschen falls läuft". Das läuft auf setStateDelayed heraus.

                        das hier: 9f497438-5abb-4e22-b95c-744952bae762-image.png
                        https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/de/blockly.md#beispiel-2

                        und Sorry ja: Es geht um States in iobroker die von allen Skripten aus erreichbar sind (zB HM.0.rollo.1.level) , und keine dedizierten Variablen im Skript. Da habe ich mich schlecht ausgedrückt.

                        "Das geht nur im selben Skript"

                        Gilt das auch für states? 🌻

                        Wollte eben wissen wo der Timer aufgehangen wird... direkt am iobroker State, dann könnten alles Skripte den Timer löschen/editieren.

                        T 1 Reply Last reply Reply Quote 0
                        • T
                          ticaki Developer @madjack84 last edited by ticaki

                          @madjack84
                          Ich habe Quark geschrieben war aber schön fett 🙂

                          setStateDelayed() löscht alle setStateDelayed(), die auf diesem State laufen. Egal aus welchem Skript (gerade getestet und sehr hilfreich)

                          EDIT: Ich halte das Beispiel da oben für schlecht. Wenn 10 Minuten durchgehend Bewegung ist schaltet das Licht aus. 🙂 Ist zumindest bei meinem BWM so.

                          madjack84 2 Replies Last reply Reply Quote 0
                          • madjack84
                            madjack84 @ticaki last edited by

                            @ticaki cool, danke für die Info 🙂
                            Ist wirklich hilfreich.

                            1 Reply Last reply Reply Quote 0
                            • madjack84
                              madjack84 @ticaki last edited by

                              @ticaki einen kleinen Schmerz habe ich allerdings...

                              geht hier um Rolladen:
                              Ein skript steuert alle Rolläden per Änderung auf blinds_target (hier ein Ausschnitt)
                              56a3c061-cf83-4bc7-be0d-d11981686ef1-image.png Bildschirmfoto 2020-04-22 um 07.34.04.png

                              Blinds target wird hier gesetzt und DIREKT danach
                              checkt das Skript die Sonne und soll vor den 30Sek den Rolladen Ost nur auf 30 fahren lassen.
                              cb574b61-8ce9-4d51-9f41-b1d1f47fd51b-image.png Bildschirmfoto 2020-04-22 um 07.34.56.png

                              leider funktioniert das löschen falls läuft hier nicht. Es werden laut protokoll erst die 30 und nach 30s die 100 gesendet.

                              Ich fürchte das ist ein Timingproblem, da die wetterbedingte Steuern quasi gleichzeitig (multicore) oder erst nach Abarbeitung erfolgt. Drum habe ich gerade den timeout2 eingeführt um quasi einen no-op zu erzeugen 😮
                              Oder mache ich grundlegend was falsch?

                              1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer last edited by

                                Das hab ich jetzt echt nicht getestet.
                                Denke aber das es so richtig ist. setState() schreibt den Wert ebenfalls nicht direkt sondern erst wenn der Skriptabschnitt durchlaufen ist..

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                478
                                Online

                                31.6k
                                Users

                                79.5k
                                Topics

                                1.3m
                                Posts

                                javascript
                                6
                                14
                                990
                                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