Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. SetStateDelayed

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.9k

SetStateDelayed

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
14 Beiträge 6 Kommentatoren 1.0k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Online
    M Online
    michihorn
    schrieb am zuletzt editiert von
    #3

    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

    paul53P 1 Antwort Letzte Antwort
    0
    • M michihorn

      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

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #4

      @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);
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • cashC Offline
        cashC Offline
        cash
        Most Active
        schrieb am zuletzt editiert von
        #5

        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 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          Pittini
          Developer
          schrieb am zuletzt editiert von
          #6

          Versuch doch einfach mal:

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

          Wenns dann klappt, liegts am Datentyp vom Versatz.

          1 Antwort Letzte Antwort
          0
          • madjack84M Offline
            madjack84M Offline
            madjack84
            schrieb am zuletzt editiert von
            #7

            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?

            nuc i3, Proxmox, raspimatic (PI3), 15 shellies, shelly 4pro/25/RGB, wled sonoff, 7x xiaomi sensoren, 4xEchos, 4 Tasmota Steckdosen, motionEye, nspanel, Ring, hoymiles usw

            P T 2 Antworten Letzte Antwort
            0
            • madjack84M madjack84

              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 Offline
              P Offline
              Pittini
              Developer
              schrieb am zuletzt editiert von
              #8

              @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 Antwort Letzte Antwort
              0
              • madjack84M madjack84

                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?

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von
                #9

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

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                madjack84M 1 Antwort Letzte Antwort
                0
                • T ticaki

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

                  madjack84M Offline
                  madjack84M Offline
                  madjack84
                  schrieb am zuletzt editiert von madjack84
                  #10

                  @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? :sunflower:

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

                  nuc i3, Proxmox, raspimatic (PI3), 15 shellies, shelly 4pro/25/RGB, wled sonoff, 7x xiaomi sensoren, 4xEchos, 4 Tasmota Steckdosen, motionEye, nspanel, Ring, hoymiles usw

                  T 1 Antwort Letzte Antwort
                  0
                  • madjack84M 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? :sunflower:

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

                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #11

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

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    madjack84M 2 Antworten Letzte Antwort
                    0
                    • T 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.

                      madjack84M Offline
                      madjack84M Offline
                      madjack84
                      schrieb am zuletzt editiert von
                      #12

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

                      nuc i3, Proxmox, raspimatic (PI3), 15 shellies, shelly 4pro/25/RGB, wled sonoff, 7x xiaomi sensoren, 4xEchos, 4 Tasmota Steckdosen, motionEye, nspanel, Ring, hoymiles usw

                      1 Antwort Letzte Antwort
                      0
                      • T 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.

                        madjack84M Offline
                        madjack84M Offline
                        madjack84
                        schrieb am zuletzt editiert von
                        #13

                        @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 :O
                        Oder mache ich grundlegend was falsch?

                        nuc i3, Proxmox, raspimatic (PI3), 15 shellies, shelly 4pro/25/RGB, wled sonoff, 7x xiaomi sensoren, 4xEchos, 4 Tasmota Steckdosen, motionEye, nspanel, Ring, hoymiles usw

                        1 Antwort Letzte Antwort
                        0
                        • T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb am zuletzt editiert von
                          #14

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

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          836

                          Online

                          32.4k

                          Benutzer

                          81.5k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe