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. [gelöst] JavaScript: gesetzte setStateDelayed abfragen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    21
    1
    925

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

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

[gelöst] JavaScript: gesetzte setStateDelayed abfragen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
23 Beiträge 8 Kommentatoren 4.6k Aufrufe
  • Ä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.
  • AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        pix
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          radioman
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              dwm
              schrieb am zuletzt editiert von
              #16

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

              1 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                radioman
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  dwm
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • R Offline
                    R Offline
                    radioman
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • BluefoxB Offline
                      BluefoxB Offline
                      Bluefox
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • R Offline
                        R Offline
                        radioman
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • htreckslerH Offline
                            htreckslerH Offline
                            htrecksler
                            Forum Testing
                            schrieb am zuletzt editiert von
                            #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 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

                            801

                            Online

                            32.5k

                            Benutzer

                            81.6k

                            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