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

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    284

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

Funktion bei Trigger und zeitgesteuert ausführen

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 4 Kommentatoren 343 Aufrufe 3 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 Offline
    M Offline
    mortalskillz
    schrieb am zuletzt editiert von
    #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 Antworten Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #2

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

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

      M 1 Antwort Letzte Antwort
      0
      • arteckA arteck

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

        M Offline
        M Offline
        mortalskillz
        schrieb am zuletzt editiert von
        #3

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

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

        1 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von 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 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

                420

                Online

                32.5k

                Benutzer

                81.9k

                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