Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] JavaScript: gesetzte setStateDelayed abfragen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    918

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[gelöst] JavaScript: gesetzte setStateDelayed abfragen

Scheduled Pinned Locked Moved Skripten / Logik
23 Posts 8 Posters 4.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    wrote on last edited by
    #6

    Die Idee war, dass wen man die Timers managen will, dann muss man die auch speichern und dann benutzen.

    Aber wenn man das sogar macht, Javascirpt selbst gibt keine Möglichkeit abzufragen ob ein Timer läuft oder nicht.

    Da muss man was basteln

    1 Reply Last reply
    0
    • R Offline
      R Offline
      radioman
      wrote on last edited by
      #7

      Hallo Bluefox, danke für Deine Antwort.

      Da werde ich mir nun was ausdenken.

      Wie beschrieben, wäre es in meinen Augen aber für die Zukunft sinnvoll, so eine Abfragemöglichkeit mal einzubauen. Zumindest eine danach, ob derzeit (mindestens) ein Timer läuft.

      VG Radioman

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dwm
        wrote on last edited by
        #8

        Hm, ich hab da grad mit den Timer Objekten rumgespielt …

        var test1 = setTimeout(function(){ dwmlog("Hallo",4)},2000);
        // clearTimeout(test1);
        dwmlog ("Vorher: "+test1._called+ " timeout: "+test1._idleTimeout,4);
        
        setTimeout(function(){ 
            dwmlog ("Nachher: "+JSON.stringify(test1),4);
        },3000);
        

        ergibt:

        12:33:34.537	[info]	javascript.0 Start javascript script.js.aa.testzeugs
        12:33:34.537	[info]	javascript.0 script.js.aa.testzeugs: Vorher: false timeout: 2000
        12:33:34.537	[info]	javascript.0 script.js.aa.testzeugs: registered 0 subscriptions and 0 schedules
        12:33:36.536	[info]	javascript.0 script.js.aa.testzeugs: Hallo
        12:33:37.538	[info]	javascript.0 script.js.aa.testzeugs: Nachher: {"_called":true,"_idleTimeout":2000,"_idlePrev":null,"_idleNext":null,"_idleStart":2498685963,"_timerArgs":[null,null,null,null],"_repeat":null}
        

        Bei einem clearTimeout geht das "_idleTimeout" auf -1…

        Aus der Kombination von _called und _idleTimeout kriegt man also im Prinzip raus, ob der Timer noch läuft...

        Nebenbei:

        Wenn ich nach setTimeout gleich ein JSON.stringify auf dem Timerobjekt mache, kommt ein Error zurück, auf die Datenfelder kann man aber zugreifen ... no comprendre ...

        CU

        Werner

        1 Reply Last reply
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #9

          Für solche Einmal-Timer habe ich bisher immer folgendes gemacht:

          • Timer-Instanz in Variable gespeichert

          • Ist Variable != null, dann läuft der Timer, sonst noch nicht oder nicht mehr.

          • Im Timer-Callback als ersten Schritt die Timer-Variable auf null setzen.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Reply Last reply
          0
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            wrote on last edited by
            #10

            https://github.com/ioBroker/ioBroker.ja … atedelayed

            1 Reply Last reply
            0
            • AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              wrote on last edited by
              #11

              @Bluefox:

              https://github.com/ioBroker/ioBroker.ja … atedelayed `
              Coole Sache! Ist die Timer-ID der Wert, den man an clearStateDelayed übergeben muss?

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

              1 Reply Last reply
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                wrote on last edited by
                #12

                @AlCalzone:

                @Bluefox:

                https://github.com/ioBroker/ioBroker.ja … atedelayed Coole Sache! Ist die Timer-ID der Wert, den man an clearStateDelayed übergeben muss?
                Ja. Mit TimerID man kann einen Timer löschen.

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  pix
                  wrote on last edited by
                  #13

                  getStateDelayed

                  Super! [emoji1360]

                  Pix

                  ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                  1 Reply Last reply
                  0
                  • R Offline
                    R Offline
                    radioman
                    wrote on last edited by
                    #14

                    Hallo Bluefox,

                    Wow - ich bin platt. Sehr cool.

                    Ich bin schon ganz gespannt, wenn ich die Version dann ausprobieren kann. Bei mir wird ja noch die Version 1.4.0 als aktuellste Version angezeigt.

                    Jetzt stehe ich (als Anfänger) aber vor zwei neuen Problemen (was bei der schnellen Reaktion natürlich ein Luxusproblem ist ;)) .

                    • 1. Könntest Du in der Ausgabe eventuell auch noch den Wert ausgeben? Z.B. so:
                    ````
                    {timerId: 1, left: 1123, delay: 5000, value: true},
                    ````
                    Ich will ja oft prüfen, ob bald ein true oder false gesetzt werden wird.
                    
                    Ich schätze, dass das in der internen TimerListe enthalten ist und Du die ja eh für den output aufbereitest.
                    
                    Wenn das zu viele Outputparameter werden sollten: ich habe derzeit keine Idee zur Verwendung des initialen Delays.
                    
                    2\. Ich weiß jetzt noch nicht, wie man mit dem recht komplexen Output umgeht. Es sieht für mich danach aus, dass man dann ein Array zurückbekommt, welches man mit split o.ä. zerlegen muss, oder?
                    
                    Gut wäre noch, wenn man die Timer ID auch gleich direkt mit angeben könnte (in 99% der Fälle wird man ja den zeitlich nächsten wissen wollen) und dann auch gleich auf value oder left zugreifen könnte.
                    
                    Ich würde es günstig finden, wenn man so oder ähnlich auf z.B. den nächsten Timer zugreifen könnte:
                    ````
                    if (getStateDelayed('hm-rpc.0.LQE91119.1.STATE', timerId: 1, answer: value).val === true) { ...
                    ````
                    oder so:
                    ````
                    if (getStateDelayed('hm-rpc.0.LQE91119.1.STATE', timerId: 1, answer: left).val + new Date().getTime()) < getDateObject("20:00") { ...
                    ````
                    Oder geht das schon und ich checke das in der Doku nur noch nicht ganz? 
                    

                    radioman

                    1 Reply Last reply
                    0
                    • DutchmanD Offline
                      DutchmanD Offline
                      Dutchman
                      Developer Most Active Administrators
                      wrote on last edited by
                      #15

                      @radioman:

                      Hallo Bluefox,

                      Wow - ich bin platt. Sehr cool.

                      Ich bin schon ganz gespannt, wenn ich die Version dann ausprobieren kann. Bei mir wird ja noch die Version 1.4.0 als aktuellste Version angezeigt. `

                      Version im Reiter ist immer nur die Version welche auf npm zur Verfügung steht.

                      Du kannst aber auch direct von git installieren!

                      In Reiter Adapter oben links (Symbol) von git installieren, url Kopieren und los gehts

                      –-----------------------

                      Send from mobile device

                      1 Reply Last reply
                      0
                      • D Offline
                        D Offline
                        dwm
                        wrote on last edited by
                        #16

                        Supercool, bluefox, vielen Dank … da muss ich mal bisschen rumspielen ...

                        1 Reply Last reply
                        0
                        • R Offline
                          R Offline
                          radioman
                          wrote on last edited by
                          #17

                          @Dutchman

                          Vielen Dank für den Tipp - hat super geklappt. Jetzt wird mir auch die Version 3.5.0 als installiert angezeigt.

                          @dwm

                          Läuft es denn bei Dir? Habe auch gleich rumprobiert, bekomme es aber irgendwie nicht hin:

                          clearStateDelayed ("rflink.0.channels.NewKaku_11.SWITCH_1");
                          var test = setStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1", false, 10000, false);
                          log(test);
                          //var answer = getStateDelayed(test);
                          var answer = getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1");
                          log(answer);
                          

                          führt bei mir (auch in dem auskommentierten Fall) zu:
                          ` > 20:34:28.006 [info] javascript.0 Stop script script.js.common.test2

                          20:34:28.263 [info] javascript.0 Start javascript script.js.common.test2

                          20:34:28.264 [info] javascript.0 script.js.common.test2: 154

                          20:34:28.264 [error] javascript.0 script.js.common.test2: script.js.common.test2:87

                          20:34:28.265 [error] javascript.0 at script.js.common.test2:4:14 `
                          :?

                          1 Reply Last reply
                          0
                          • D Offline
                            D Offline
                            dwm
                            wrote on last edited by
                            #18

                            Servus,

                            … es geht schon soweit.

                            Ich hatte ein Problem, dass bei meinen ersten Versuchen getStateDelayed (Id) ein leeres Array zurück geliefert hat.

                            getStateDelayed() klappte auf Anhieb.

                            Ich hab dann an meinem Testprogramm "rumgeschraubt" ...

                            ! var AdapterId = "javascript."+instance+"."; ! var TestId = AdapterId+"Testzeugs.NumberState"; ! createState( TestId, // name 0, // initial value false, // kein "Force-Create" { type: 'number', name: "Spasszustand zum Rumprobieren" } ); ! var test1 = setStateDelayed (TestId,5,2000); ! log ("All Delayed States: "+JSON.stringify(getStateDelayed())); log ("Delayed Test State: "+test1+" results in: "+JSON.stringify(getStateDelayed(TestId))); ! setTimeout(function(){ log ("All Delayed States: "+JSON.stringify(getStateDelayed())); log ("Delayed Test State: "+test1+" results in: "+JSON.stringify(getStateDelayed(TestId))); },150); !

                            und … jetzt tuts wie's soll.

                            ` > 10:23:58.402 [info] javascript.0 Start javascript script.js.aa.testzeugs

                            10:23:58.402 [info] javascript.0 script.js.aa.testzeugs: All Delayed States: {"javascript.0.Testzeugs.NumberState":[{"timerId":6,"left":2000,"delay":2000}]}

                            10:23:58.402 [info] javascript.0 script.js.aa.testzeugs: Delayed Test State: 6 results in: [{"timerId":6,"left":2000,"delay":2000}]

                            10:23:58.402 [info] javascript.0 script.js.aa.testzeugs: registered 0 subscriptions and 0 schedules

                            10:23:58.553 [info] javascript.0 script.js.aa.testzeugs: All Delayed States: {"javascript.0.Testzeugs.NumberState":[{"timerId":6,"left":1849,"delay":2000}]}

                            10:23:58.553 [info] javascript.0 script.js.aa.testzeugs: Delayed Test State: 6 results in: [{"timerId":6,"left":1849,"delay":2000}] `

                            Den Zustand, dass es NICHTS zurückliefert, kann ich nicht mehr reproduzieren…

                            Fazit, klappt, aber irgendwie bisschen ... fishy ...

                            Trotzdem, coole Sache.

                            Werner

                            1 Reply Last reply
                            0
                            • R Offline
                              R Offline
                              radioman
                              wrote on last edited by
                              #19

                              Hallo Werner,

                              hab es jetzt auch hinbekommen.

                              Nachdem auch Dein Code bei mir nicht ging, habe ich ioBroker mal neu gestartet - siehe da: danach ging es.

                              Ich habe nun (dank Deines Hinweises auf JSON.stringify) auch eine Auswerteschleife programmiert bekommen, die mir sagt, wenn kein setStateDelayed gesetzt ist und wenn eines gesetzt ist, ob es vor oder nach einer bestimmten Uhrzeit des aktuellen Tages abläuft:

                              ! ````
                              //clearStateDelayed ("rflink.0.channels.NewKaku_11.SWITCH_1");
                              //setStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1", false, 10000, false);
                              if (JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1"))=="[]") {
                              log("Es ist kein Delay gesetzt!");}
                              else{
                              if (parseInt(JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1")).split(",")[1].split(":")[1]) + parseInt(new Date().getTime()) < getDateObject("23:00").getTime()) {
                              log("Delay ist vor gesetzter Zeit zu Ende!");}
                              else{
                              log("Delay ist nach gesetzter Zeit zu Ende!");}}

                              
                              Somit ist für mich meine ursprüngliche Frage "gesetzte setStateDelayed abfragen" gelöst. :D :D :D
                              
                              Ich kann mit
                              ```
                              `if (JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1"))=="[]") {...[/code]`
                              abfragen, ob ein Delay gesetzt ist, und über
                              `~~[code]~~parseInt(JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1")).split(",")[1].split(":")[1])[/code]`
                              bekomme ich sogar noch die verbleibende Restzeit heraus.
                              
                              Danke Bluefox!
                              
                              Falls Du doch noch einmal einen Moment Zeit hierfür übrig hast, und zumindest die ersten meiner beiden Anregungen (das "value") einbauen kannst, wäre das die Krönung. 
                              
                              VG radioman
                              ```
                              1 Reply Last reply
                              0
                              • BluefoxB Offline
                                BluefoxB Offline
                                Bluefox
                                wrote on last edited by
                                #20

                                Man bekommt jetzt Val und ack mit. Sehe Doku.

                                Und es gibt die Möglichkeit über TimerID den Zustand abfragen.

                                Liegt auf dem git

                                1 Reply Last reply
                                0
                                • R Offline
                                  R Offline
                                  radioman
                                  wrote on last edited by
                                  #21

                                  :!: :D :!:

                                  Super, duper!

                                  Bestens - danke!

                                  Was ist das "ack"? Ob der Timer noch aktiv ist (also in der Zukunft liegt und noch ausgeführt werden wird)?

                                  1 Reply Last reply
                                  0
                                  • BluefoxB Offline
                                    BluefoxB Offline
                                    Bluefox
                                    wrote on last edited by
                                    #22

                                    @radioman:

                                    :!: :D :!:

                                    Super, duper!

                                    Bestens - danke!

                                    Was ist das "ack"? Ob der Timer noch aktiv ist (also in der Zukunft liegt und noch ausgeführt werden wird)? `
                                    Um einen Zustand zu steuern oder upzudaten braucht man ausser das Wert selbst noch einen Flat. Und genau das ist ack. By default ist false.

                                    1 Reply Last reply
                                    0
                                    • htreckslerH Offline
                                      htreckslerH Offline
                                      htrecksler
                                      Forum Testing
                                      wrote on last edited by
                                      #23

                                      Damit, also mit dem Verstehen des "ack" tu ich mich echt verdammt schwer.

                                      Vielleicht kann mir das jemand anhand eines Beispiels erklären?

                                      Was ich bisher glaube/vermute

                                      Ich setze über ein Script, sagen wir mal, einen Schalter der CCU auf true. In dem Moment ist ack = false.

                                      Wenn die CCU den Befehl jetzt bestätigt setzt die CCU den Wert auf ack=true.

                                      Daran könnte ich dann erkennen das der Befehl erfolgreich war.

                                      Ist das so?

                                      Gruss Hermann

                                      ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      713

                                      Online

                                      32.6k

                                      Users

                                      82.2k

                                      Topics

                                      1.3m

                                      Posts
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                      ioBroker Community 2014-2025
                                      logo
                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Home
                                      • Recent
                                      • Tags
                                      • Unread 0
                                      • Categories
                                      • Unreplied
                                      • Popular
                                      • GitHub
                                      • Docu
                                      • Hilfe