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. Funktion bei Trigger und zeitgesteuert ausführen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    13
    1
    147

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

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

Funktion bei Trigger und zeitgesteuert ausführen

Scheduled Pinned Locked Moved JavaScript
7 Posts 4 Posters 347 Views 3 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.
  • M Offline
    M Offline
    mortalskillz
    wrote on last edited by
    #1

    Moin zusammen,

    ich stehe vor folgendem Problem, auf das ich leider nichts mit der Suche gefunden habe (evtl. auch das falsche gesucht):

    Ich habe immer wieder Berechnungen oder dergleichen, die getriggert ausgeführt werden sollen. Manche Trigger kommen aber sehr unregelmäßig, sodass ich entweder bei Trigger oder nach Zeitplan die gleiche Funktion ausführen möchte (quasi: bei Trigger oder spätestens nach x Minuten).
    Ich versuche mir dazu eine Funktion zu schreiben, die Trigger-id, Intervall und auszuführende Funktion (inkl. der Argumente) als Argument haben soll. Leider ohne Erfolg.
    Vielleicht kann mir hier jemand weiterhelfen? Vielleicht gibt es auch eine viel einfacherer Lösung?

    function FunctionSubscrAndPeriodic (funcName, minutesVar, id2Subscribe, changeVar = 'any') {
        on ({id: id2Subscribe, change: changeVar}, funcName);
        schedule(`*/${minutesVar} * * * *`, function() { funcName });
    }
    
    function Addition (a, b) {
        setState('0_userdata.0.example_state', a + b);
    }
    
    FunctionSubscrAndPeriodic(Addition(1,2), 1, '0_userdata.0.kPreCtrl');```
    
    Wäre über eine Hilfestellung sehr dankbar!
    
    Grüße
    arteckA paul53P haus-automatisierungH 3 Replies Last reply
    0
    • M mortalskillz

      Moin zusammen,

      ich stehe vor folgendem Problem, auf das ich leider nichts mit der Suche gefunden habe (evtl. auch das falsche gesucht):

      Ich habe immer wieder Berechnungen oder dergleichen, die getriggert ausgeführt werden sollen. Manche Trigger kommen aber sehr unregelmäßig, sodass ich entweder bei Trigger oder nach Zeitplan die gleiche Funktion ausführen möchte (quasi: bei Trigger oder spätestens nach x Minuten).
      Ich versuche mir dazu eine Funktion zu schreiben, die Trigger-id, Intervall und auszuführende Funktion (inkl. der Argumente) als Argument haben soll. Leider ohne Erfolg.
      Vielleicht kann mir hier jemand weiterhelfen? Vielleicht gibt es auch eine viel einfacherer Lösung?

      function FunctionSubscrAndPeriodic (funcName, minutesVar, id2Subscribe, changeVar = 'any') {
          on ({id: id2Subscribe, change: changeVar}, funcName);
          schedule(`*/${minutesVar} * * * *`, function() { funcName });
      }
      
      function Addition (a, b) {
          setState('0_userdata.0.example_state', a + b);
      }
      
      FunctionSubscrAndPeriodic(Addition(1,2), 1, '0_userdata.0.kPreCtrl');```
      
      Wäre über eine Hilfestellung sehr dankbar!
      
      Grüße
      arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      wrote on last edited by
      #2

      @mortalskillz cronjob ??? warum schwer wenns einfach geht ?

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      M 1 Reply Last reply
      0
      • arteckA arteck

        @mortalskillz cronjob ??? warum schwer wenns einfach geht ?

        M Offline
        M Offline
        mortalskillz
        wrote on last edited by
        #3

        Wäre dann aber nur zeigesteuert (ohne subscribe), oder?

        Hättest Du vielleicht ein kleines Beispiel, was auch Noobs wie ich verstehen?

        1 Reply Last reply
        0
        • M mortalskillz

          Moin zusammen,

          ich stehe vor folgendem Problem, auf das ich leider nichts mit der Suche gefunden habe (evtl. auch das falsche gesucht):

          Ich habe immer wieder Berechnungen oder dergleichen, die getriggert ausgeführt werden sollen. Manche Trigger kommen aber sehr unregelmäßig, sodass ich entweder bei Trigger oder nach Zeitplan die gleiche Funktion ausführen möchte (quasi: bei Trigger oder spätestens nach x Minuten).
          Ich versuche mir dazu eine Funktion zu schreiben, die Trigger-id, Intervall und auszuführende Funktion (inkl. der Argumente) als Argument haben soll. Leider ohne Erfolg.
          Vielleicht kann mir hier jemand weiterhelfen? Vielleicht gibt es auch eine viel einfacherer Lösung?

          function FunctionSubscrAndPeriodic (funcName, minutesVar, id2Subscribe, changeVar = 'any') {
              on ({id: id2Subscribe, change: changeVar}, funcName);
              schedule(`*/${minutesVar} * * * *`, function() { funcName });
          }
          
          function Addition (a, b) {
              setState('0_userdata.0.example_state', a + b);
          }
          
          FunctionSubscrAndPeriodic(Addition(1,2), 1, '0_userdata.0.kPreCtrl');```
          
          Wäre über eine Hilfestellung sehr dankbar!
          
          Grüße
          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #4

          @mortalskillz sagte: bei Trigger oder spätestens nach x Minuten

          Innerhalb der Trigger-Callback-Funktion ein Intervall stoppen und starten. Dann erfolgt der zyklische Funktionsaufruf nur, wenn Trigger ausbleiben. Beispiel:

          const idSrc1 = '...';
          const idSrc2 = '...';
          const idDst  = '0_userdata.0.example_state';
          
          function Addition(a) {
              setState(idDst, a + getState(idSrc2).val, true);
          }
          
          var timer = null;
          
          on({id: idSrc1}, function(dp) {
              Addition(dp.state.val);
              clearInterval(timer);
              timer = setInterval(function() {
                  Addition(dp.state.val);
              }, 60000);
          });
          

          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

          M 1 Reply Last reply
          1
          • paul53P paul53

            @mortalskillz sagte: bei Trigger oder spätestens nach x Minuten

            Innerhalb der Trigger-Callback-Funktion ein Intervall stoppen und starten. Dann erfolgt der zyklische Funktionsaufruf nur, wenn Trigger ausbleiben. Beispiel:

            const idSrc1 = '...';
            const idSrc2 = '...';
            const idDst  = '0_userdata.0.example_state';
            
            function Addition(a) {
                setState(idDst, a + getState(idSrc2).val, true);
            }
            
            var timer = null;
            
            on({id: idSrc1}, function(dp) {
                Addition(dp.state.val);
                clearInterval(timer);
                timer = setInterval(function() {
                    Addition(dp.state.val);
                }, 60000);
            });
            
            M Offline
            M Offline
            mortalskillz
            wrote on last edited by
            #5

            @paul53
            Genau. Die Lösung wäre natürlich perfekt. Werde ich definitiv testen (bin zur Zeit im Urlaub).
            Meine hätte ja bei jedem Trigger und einmal pro Minute ausgeführt, d.h. wenn ein Trigger kommt, wären zwei Ausführungen pro Minute passiert (eine durch den Trigger, die andere durch den schedule).

            Da ich das aber ganz oft brauche mit unterschiedlichsten Callback Funktionen, wollte ich eine Funktion schreiben, der ich Trigger-ID, Intervall und Callback-Funktion (inkl. Argumenten) übergebe. Und daran scheitere ich leider.

            Irgendwie bekomme ich es nicht hin, einer Funktion eine andere Funktion als Argument zu übergeben...
            Aber ich werde das mal mit Deiner Version prüfen!

            Danke schon einmal bisher!

            1 Reply Last reply
            0
            • M mortalskillz

              Moin zusammen,

              ich stehe vor folgendem Problem, auf das ich leider nichts mit der Suche gefunden habe (evtl. auch das falsche gesucht):

              Ich habe immer wieder Berechnungen oder dergleichen, die getriggert ausgeführt werden sollen. Manche Trigger kommen aber sehr unregelmäßig, sodass ich entweder bei Trigger oder nach Zeitplan die gleiche Funktion ausführen möchte (quasi: bei Trigger oder spätestens nach x Minuten).
              Ich versuche mir dazu eine Funktion zu schreiben, die Trigger-id, Intervall und auszuführende Funktion (inkl. der Argumente) als Argument haben soll. Leider ohne Erfolg.
              Vielleicht kann mir hier jemand weiterhelfen? Vielleicht gibt es auch eine viel einfacherer Lösung?

              function FunctionSubscrAndPeriodic (funcName, minutesVar, id2Subscribe, changeVar = 'any') {
                  on ({id: id2Subscribe, change: changeVar}, funcName);
                  schedule(`*/${minutesVar} * * * *`, function() { funcName });
              }
              
              function Addition (a, b) {
                  setState('0_userdata.0.example_state', a + b);
              }
              
              FunctionSubscrAndPeriodic(Addition(1,2), 1, '0_userdata.0.kPreCtrl');```
              
              Wäre über eine Hilfestellung sehr dankbar!
              
              Grüße
              haus-automatisierungH Online
              haus-automatisierungH Online
              haus-automatisierung
              Developer Most Active
              wrote on last edited by haus-automatisierung
              #6

              @mortalskillz sagte in Funktion bei Trigger und zeitgesteuert ausführen:

              Ich versuche mir dazu eine Funktion zu schreiben, die Trigger-id, Intervall und auszuführende Funktion (inkl. der Argumente) als Argument haben soll.

              FunctionSubscrAndPeriodic(Addition(1,2), 1, '0_userdata.0.kPreCtrl');
              

              Du führst so aber die Funktion Addion direkt aus und übergibst das Ergebnis als 1. Parameter an FunctionSubscrAndPeriodic. Somit steht in funcName wahrscheinlich undefined (gibt ja nix zurück).

              Du müsstest schon die Funktion selbst als Parameter übergeben:

              FunctionSubscrAndPeriodic(Addition, 1, '0_userdata.0.kPreCtrl');
              

              Und dann innerhalb FunctionSubscrAndPeriodic aufrufen mit funcName(1, 2). Wenn Du die Parameter auch mit übergeben willst (verstehe das Beispiel mit den statischen Werten nicht), dann könnte man die Funktion noch einmal in eine anonyme Funktion wrappen.

              EDIT: so

              function FunctionSubscrAndPeriodic(func, minutesVar, id2Subscribe, changeVar = 'any') {
                  on ({id: id2Subscribe, change: changeVar}, func);
                  schedule(`*/${minutesVar} * * * *`, func);
              }
              
              function Addition(a, b) {
                  setState('0_userdata.0.example_state', a + b);
              }
              
              FunctionSubscrAndPeriodic(function() { Addition(1, 2); }, 1, '0_userdata.0.kPreCtrl');
              

              🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
              🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
              📚 Meine inoffizielle ioBroker Dokumentation

              haus-automatisierungH 1 Reply Last reply
              0
              • haus-automatisierungH haus-automatisierung

                @mortalskillz sagte in Funktion bei Trigger und zeitgesteuert ausführen:

                Ich versuche mir dazu eine Funktion zu schreiben, die Trigger-id, Intervall und auszuführende Funktion (inkl. der Argumente) als Argument haben soll.

                FunctionSubscrAndPeriodic(Addition(1,2), 1, '0_userdata.0.kPreCtrl');
                

                Du führst so aber die Funktion Addion direkt aus und übergibst das Ergebnis als 1. Parameter an FunctionSubscrAndPeriodic. Somit steht in funcName wahrscheinlich undefined (gibt ja nix zurück).

                Du müsstest schon die Funktion selbst als Parameter übergeben:

                FunctionSubscrAndPeriodic(Addition, 1, '0_userdata.0.kPreCtrl');
                

                Und dann innerhalb FunctionSubscrAndPeriodic aufrufen mit funcName(1, 2). Wenn Du die Parameter auch mit übergeben willst (verstehe das Beispiel mit den statischen Werten nicht), dann könnte man die Funktion noch einmal in eine anonyme Funktion wrappen.

                EDIT: so

                function FunctionSubscrAndPeriodic(func, minutesVar, id2Subscribe, changeVar = 'any') {
                    on ({id: id2Subscribe, change: changeVar}, func);
                    schedule(`*/${minutesVar} * * * *`, func);
                }
                
                function Addition(a, b) {
                    setState('0_userdata.0.example_state', a + b);
                }
                
                FunctionSubscrAndPeriodic(function() { Addition(1, 2); }, 1, '0_userdata.0.kPreCtrl');
                
                haus-automatisierungH Online
                haus-automatisierungH Online
                haus-automatisierung
                Developer Most Active
                wrote on last edited by haus-automatisierung
                #7

                Ich würde aber die Reihenfolge der Parameter ändern und die Callback-Funktion nach hinten packen. So ist es ja bei on und schedule z.B. auch. Dann kann man das schöner formatieren. z.B.

                function FunctionSubscrAndPeriodic(id2Subscribe, minutesVar, callback, changeVar = 'any') {
                    on ({ id: id2Subscribe, change: changeVar }, callback);
                    schedule(`*/${minutesVar} * * * *`, callback);
                }
                
                function Addition(a, b) {
                    setState('0_userdata.0.example_state', a + b);
                }
                
                FunctionSubscrAndPeriodic('0_userdata.0.kPreCtrl', 1, () => {
                    Addition(1, 2);
                });
                

                🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                📚 Meine inoffizielle ioBroker Dokumentation

                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

                518

                Online

                32.7k

                Users

                82.4k

                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