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. JavaScript
  5. setstate aus Funktion rufen [Gelöst]

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    407

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

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

setstate aus Funktion rufen [Gelöst]

Scheduled Pinned Locked Moved JavaScript
15 Posts 6 Posters 1.3k Views 5 Watching
  • 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.
  • bahnuhrB Online
    bahnuhrB Online
    bahnuhr
    Forum Testing Most Active
    wrote on last edited by
    #5

    Nachtrag:

    du schreibst:

    setState(ventilator,true); // direkt im Programm aufgerufen geht.
    

    aber dies müsste doch auch gehen:

    function ventilatorEin() {
       setState(ventilator,true);
    }
    ventilatorEin();
    

    müsste gehen, verstehe nicht so ganz warum dies nicht gehen soll.
    Habs auch gerade nachgestellt, klappt einwandfrei !


    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
    Danke.
    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
    ScreenToGif :https://www.screentogif.com/downloads.html

    1 Reply Last reply
    0
    • WolfgangDW WolfgangD

      @arteck
      Danke für den Codeformathinweis.
      Mein Problem ist sehr einfach dazustellen:

      var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
      
      setState(ventilator,true); // direkt im Programm aufgerufen geht.
      
      // aber, verpackt in ein function und diese dann aufrufen, geht nicht.
      function ventilatorEin() {
         setState(ventilator,true);
      }
      ventilatorEin();
      
      // Das war schon alles. .......................................
      
      // das Ausschalten geht immer,  in function verpackt. Direkt verzögert aufgerufen.
      var t = setTimeout(ventilatorAus,2000);
      
      
      // nun könnte man ja denken, verzögert gehts. (Ich hab mal unnötigerweise auch Deine Variante eingebaut!)
      
      function vein(){
        setTimeout(function(){
            ventilatorEin;
        },20);
      }
      vein();   // geht leider so in der function verpackt auch nicht.
      
      // direkt gerufen gehts wie erwartet. 
      setTimeout(ventilatorEin, 20);
      
      
      // async geht übrigens auch nicht. 
      
      
      bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      wrote on last edited by
      #6

      @wolfgangd

      function vein(){
        setTimeout(function(){
            ventilatorEin();
        },2000);
      }
      
      vein();
      

      Und dies klappt natürlich auch.
      Beachte: () hinter ventilatorEin
      und 20 sind 20 Millisekunden !


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      WolfgangDW 1 Reply Last reply
      0
      • WolfgangDW WolfgangD

        @arteck
        Danke für den Codeformathinweis.
        Mein Problem ist sehr einfach dazustellen:

        var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
        
        setState(ventilator,true); // direkt im Programm aufgerufen geht.
        
        // aber, verpackt in ein function und diese dann aufrufen, geht nicht.
        function ventilatorEin() {
           setState(ventilator,true);
        }
        ventilatorEin();
        
        // Das war schon alles. .......................................
        
        // das Ausschalten geht immer,  in function verpackt. Direkt verzögert aufgerufen.
        var t = setTimeout(ventilatorAus,2000);
        
        
        // nun könnte man ja denken, verzögert gehts. (Ich hab mal unnötigerweise auch Deine Variante eingebaut!)
        
        function vein(){
          setTimeout(function(){
              ventilatorEin;
          },20);
        }
        vein();   // geht leider so in der function verpackt auch nicht.
        
        // direkt gerufen gehts wie erwartet. 
        setTimeout(ventilatorEin, 20);
        
        
        // async geht übrigens auch nicht. 
        
        
        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by paul53
        #7

        @wolfgangd
        Fehler in Zeile 21: Es fehlen die Klammern des Funktionsaufrufs.

        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

        WolfgangDW 1 Reply Last reply
        0
        • bahnuhrB bahnuhr

          @wolfgangd

          function vein(){
            setTimeout(function(){
                ventilatorEin();
            },2000);
          }
          
          vein();
          

          Und dies klappt natürlich auch.
          Beachte: () hinter ventilatorEin
          und 20 sind 20 Millisekunden !

          WolfgangDW Offline
          WolfgangDW Offline
          WolfgangD
          wrote on last edited by
          #8

          @bahnuhr
          Ja, rein theoretisch sollte das gehen.
          Geht aber nicht. Du hast sicher keinen rflink Adapter?
          Auch nicht mit ventilatorEin() geklammert. (ich hatte schon Hoffnung)
          Und ja, 20 ms war gewollt.

          diverse Raspis, ESPs, ioBroker, Alexas, Sensoren, Heizungsregelung, Solaranlage mit Speicher, RTK-Rasenroboter

          1 Reply Last reply
          0
          • paul53P paul53

            @wolfgangd
            Fehler in Zeile 21: Es fehlen die Klammern des Funktionsaufrufs.

            WolfgangDW Offline
            WolfgangDW Offline
            WolfgangD
            wrote on last edited by
            #9

            @paul53
            Danke. Leider auch nicht mit ventilatorEin() geklammert. (ich hatte schon Hoffnung)
            Ich vermute irgendwas ist an dem Adapter rflink die Ursache.

            diverse Raspis, ESPs, ioBroker, Alexas, Sensoren, Heizungsregelung, Solaranlage mit Speicher, RTK-Rasenroboter

            bahnuhrB T 2 Replies Last reply
            0
            • WolfgangDW WolfgangD

              @paul53
              Danke. Leider auch nicht mit ventilatorEin() geklammert. (ich hatte schon Hoffnung)
              Ich vermute irgendwas ist an dem Adapter rflink die Ursache.

              bahnuhrB Online
              bahnuhrB Online
              bahnuhr
              Forum Testing Most Active
              wrote on last edited by
              #10

              @wolfgangd sagte in setstate aus Funktion rufen:

              Du hast sicher keinen rflink Adapter?

              Haste recht, hab ich nicht.

              Dann liegt deine Lösung in dem DP oder dem Adapter.

              Das Script funktioniert einwandfrei.


              Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
              Danke.
              gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
              ScreenToGif :https://www.screentogif.com/downloads.html

              1 Reply Last reply
              0
              • WolfgangDW WolfgangD

                @paul53
                Danke. Leider auch nicht mit ventilatorEin() geklammert. (ich hatte schon Hoffnung)
                Ich vermute irgendwas ist an dem Adapter rflink die Ursache.

                T Do not disturb
                T Do not disturb
                ticaki
                wrote on last edited by
                #11

                @wolfgangd sagte in setstate aus Funktion rufen:

                @paul53
                Danke. Leider auch nicht mit ventilatorEin() geklammert. (ich hatte schon Hoffnung)
                Ich vermute irgendwas ist an dem Adapter rflink die Ursache.

                Du schreibst oben und im Script das setState(dp, true) geht. Dann geht es. Da ist noch ein Fehler im Skript. Wenn ich all die Hilfen mit deinem Skript kombiniere komme ich dazu das du nach 2000 ms den Ventilator ein und ausschaltest.

                const ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
                
                function ventilatorEin() {
                   setState(ventilator,true);
                }
                setTimeout(ventilatorEin,5000);
                setTimeout(setState,15000, ventilator, false);
                
                // und natürlich geht auch async ;)
                

                Versuch mal damit - 5 Sekunden passiert nichts, dann ist der Ventilator für 10 Sekunden an. Das Skript muß laufen und darf in der Zeit nicht pausiert werden.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                1 Reply Last reply
                0
                • WolfgangDW WolfgangD

                  Ich sende an ein RFlink Objekt den Befehl setstate.
                  Direkt gehts, verpackt in einer Funktion nicht.

                  var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"

                  function ventilatorEin() {
                  setState(ventilator,true);
                  }

                  function ventilatorAus(){
                  setState(ventilator,false);
                  }

                  function vein(){
                  setTimeout(ventilatorEin,20);
                  }

                  //setState(ventilator,true); // ok
                  //ventilatorEin() //geht nicht
                  setTimeout(ventilatorEin,20); //ok
                  //vein; //geht auch nicht !!!

                  var t = setTimeout(ventilatorAus,2000); // ok.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  wrote on last edited by OliverIO
                  #12

                  @wolfgangd

                  also jemand hat hier geschrieben, das der syntax falsch ist.
                  das sehe ich nicht so. setTimeout nimmt als ersten Parameter einen Functionpointer oder Objektreferenz auf eine Funktion.
                  Diese kann man per anonyme Funktion adhoc erzeugen oder man definiert die Funktion separat und übergibt diese an die Funktion (das was du machst).
                  Wenn man eine anonyme Funktion adhoc erzeugt, dann bekommt diese Funktion den aktuellen Scope mit welcher notwendig ist um an die variable ventilator heranzu kommen.
                  wenn du die Funktionsreferenz mit übergibst, dann ist die variable ventialtor zum zeitpunkt der ausführung von setState nicht verfügbar, daher schlägt das fehl.

                  die Version von @ticaki funktioniert, weil über die weiteren parameter der ventilator parameter mitgegeben wird (das false dürfte überflüssig sein)

                  setTimeout(setState,15000, ventilator, false);
                  

                  das verhalten ist hier genauer beschrieben
                  https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#the_this_problem

                  var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
                   
                  setState(ventilator,true); // direkt im Programm aufgerufen geht.
                   
                  // aber, verpackt in ein function und diese dann aufrufen, geht nicht.
                  function ventilatorEin() {
                     setState(ventilator,true);
                  }
                  ventilatorEin();
                   
                  // Das war schon alles. .......................................
                   
                  // das Ausschalten geht immer,  in function verpackt. Direkt verzögert aufgerufen.
                  var t = setTimeout(ventilatorAus,2000);
                   
                   
                  // nun könnte man ja denken, verzögert gehts. (Ich hab mal unnötigerweise auch Deine Variante eingebaut!)
                   
                  function vein(){
                    setTimeout(function(){
                        ventilatorEin;
                    },20);
                  }
                  vein();   // geht leider so in der function verpackt auch nicht.
                   
                  // direkt gerufen gehts wie erwartet. 
                  setTimeout(ventilatorEin, 20);
                   
                   
                  // async geht übrigens auch nicht. 
                   
                  
                  

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  T 1 Reply Last reply
                  0
                  • OliverIOO OliverIO

                    @wolfgangd

                    also jemand hat hier geschrieben, das der syntax falsch ist.
                    das sehe ich nicht so. setTimeout nimmt als ersten Parameter einen Functionpointer oder Objektreferenz auf eine Funktion.
                    Diese kann man per anonyme Funktion adhoc erzeugen oder man definiert die Funktion separat und übergibt diese an die Funktion (das was du machst).
                    Wenn man eine anonyme Funktion adhoc erzeugt, dann bekommt diese Funktion den aktuellen Scope mit welcher notwendig ist um an die variable ventilator heranzu kommen.
                    wenn du die Funktionsreferenz mit übergibst, dann ist die variable ventialtor zum zeitpunkt der ausführung von setState nicht verfügbar, daher schlägt das fehl.

                    die Version von @ticaki funktioniert, weil über die weiteren parameter der ventilator parameter mitgegeben wird (das false dürfte überflüssig sein)

                    setTimeout(setState,15000, ventilator, false);
                    

                    das verhalten ist hier genauer beschrieben
                    https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#the_this_problem

                    var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
                     
                    setState(ventilator,true); // direkt im Programm aufgerufen geht.
                     
                    // aber, verpackt in ein function und diese dann aufrufen, geht nicht.
                    function ventilatorEin() {
                       setState(ventilator,true);
                    }
                    ventilatorEin();
                     
                    // Das war schon alles. .......................................
                     
                    // das Ausschalten geht immer,  in function verpackt. Direkt verzögert aufgerufen.
                    var t = setTimeout(ventilatorAus,2000);
                     
                     
                    // nun könnte man ja denken, verzögert gehts. (Ich hab mal unnötigerweise auch Deine Variante eingebaut!)
                     
                    function vein(){
                      setTimeout(function(){
                          ventilatorEin;
                      },20);
                    }
                    vein();   // geht leider so in der function verpackt auch nicht.
                     
                    // direkt gerufen gehts wie erwartet. 
                    setTimeout(ventilatorEin, 20);
                     
                     
                    // async geht übrigens auch nicht. 
                     
                    
                    
                    T Do not disturb
                    T Do not disturb
                    ticaki
                    wrote on last edited by
                    #13

                    @oliverio sagte in setstate aus Funktion rufen:

                    Wenn ich deinen Beitrag richtig verstehe funktioniert das also nicht:

                    setTimeout(ventilatorEin,5000);
                    

                    Wohingegen sowas funktionieren würde

                    setTimeout(() => {ventilatorEin()},5000);
                    

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    OliverIOO 1 Reply Last reply
                    0
                    • T ticaki

                      @oliverio sagte in setstate aus Funktion rufen:

                      Wenn ich deinen Beitrag richtig verstehe funktioniert das also nicht:

                      setTimeout(ventilatorEin,5000);
                      

                      Wohingegen sowas funktionieren würde

                      setTimeout(() => {ventilatorEin()},5000);
                      
                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      wrote on last edited by
                      #14

                      @ticaki

                      beispiel 1 bedingt. wenn man an die funktion den aktuellen scope bindet, dann geht das auch

                      var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
                      
                      var ventilatorEin = function() {
                         setState(ventilator,true);
                      }.bind(this);
                      
                      setTimeout(ventilatorEin,5000);
                      
                      

                      ich persönlich finde die verwendung von bind allerdings sehr hässlich.
                      da finde ich die notation mit arrow viel besser, da sie auch keinen neuen scope erzeugt (also der unterschied zwischen verwendung mit function oder verwendung mit arrow.
                      siehe
                      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions?retiredLocale=de
                      gleich am anfang
                      .

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      WolfgangDW 1 Reply Last reply
                      0
                      • OliverIOO OliverIO

                        @ticaki

                        beispiel 1 bedingt. wenn man an die funktion den aktuellen scope bindet, dann geht das auch

                        var ventilator = "rflink.0.channels.Kaku_1.SWITCH_1"
                        
                        var ventilatorEin = function() {
                           setState(ventilator,true);
                        }.bind(this);
                        
                        setTimeout(ventilatorEin,5000);
                        
                        

                        ich persönlich finde die verwendung von bind allerdings sehr hässlich.
                        da finde ich die notation mit arrow viel besser, da sie auch keinen neuen scope erzeugt (also der unterschied zwischen verwendung mit function oder verwendung mit arrow.
                        siehe
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions?retiredLocale=de
                        gleich am anfang
                        .

                        WolfgangDW Offline
                        WolfgangDW Offline
                        WolfgangD
                        wrote on last edited by WolfgangD
                        #15

                        @oliverio sagte in setstate aus Funktion rufen:

                        var ventilatorEin = function() {

                        Diese Variante geht! Sehr schön. Die Möglichkeit kannte ich noch nicht.

                        Ich habe von Euch viel über setTimeout() gelernt.
                        Nur war das ja nur ein Versuch, weil VentilEin nicht wollte!

                        Asche auf mein Haupt!
                        Heute geht es mit der Klammer, s.u.

                        ventilatorEin;  // geht nicht
                        ventilatorEin(); // geht. 
                        
                        

                        [Gelöst]

                        diverse Raspis, ESPs, ioBroker, Alexas, Sensoren, Heizungsregelung, Solaranlage mit Speicher, RTK-Rasenroboter

                        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

                        455

                        Online

                        32.7k

                        Users

                        82.5k

                        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