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. on({time: Cron}, Funktion, Werte) ignoriert Werte

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    257

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

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

on({time: Cron}, Funktion, Werte) ignoriert Werte

Scheduled Pinned Locked Moved JavaScript
10 Posts 4 Posters 852 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.
  • hsteinmeH Offline
    hsteinmeH Offline
    hsteinme
    wrote on last edited by
    #1

    Das Schedule-Statement bietet bedauerlicherweise - im Gegensatz zum on-Statement - keine Möglichkeit, der angegebenen Callback-Funktion Parameterwerte mitzugeben. Ich freute mich daher, in der iobroker-Javascript-Dokumentation den Hinweis entdeckt zu haben, dem on-Statement als Pattern ein cron-Muster mitgeben zu können: on({time: Cron}, Funktion, Werte). Schade, dass es nicht funktioniert, wie folgendes Beispiel zeigt:

    function Log(Text) {
        console.log('Text = ' + Text);
    }
    
    on({time: '* * * * *'}, Log, 'Hallo');
    

    Folgendes wird nämlich geloggt:

    javascript.0 script.js.common.Allgemeines.OnTest: Text = undefined
    

    Schade! Muss ich denn jetzt alle vorgesehenen schedule-Aufrufe wirklich durch einen setTimeout mit einer berechneten Zeitdifferenz ersetzen, wobei die setTimeout-Aufrufe und deren Zeitdifferenz-Berechnung geeignet zyklisch wiederholt werden müssen?

    paul53P 1 Reply Last reply
    0
    • hsteinmeH hsteinme

      Das Schedule-Statement bietet bedauerlicherweise - im Gegensatz zum on-Statement - keine Möglichkeit, der angegebenen Callback-Funktion Parameterwerte mitzugeben. Ich freute mich daher, in der iobroker-Javascript-Dokumentation den Hinweis entdeckt zu haben, dem on-Statement als Pattern ein cron-Muster mitgeben zu können: on({time: Cron}, Funktion, Werte). Schade, dass es nicht funktioniert, wie folgendes Beispiel zeigt:

      function Log(Text) {
          console.log('Text = ' + Text);
      }
      
      on({time: '* * * * *'}, Log, 'Hallo');
      

      Folgendes wird nämlich geloggt:

      javascript.0 script.js.common.Allgemeines.OnTest: Text = undefined
      

      Schade! Muss ich denn jetzt alle vorgesehenen schedule-Aufrufe wirklich durch einen setTimeout mit einer berechneten Zeitdifferenz ersetzen, wobei die setTimeout-Aufrufe und deren Zeitdifferenz-Berechnung geeignet zyklisch wiederholt werden müssen?

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      @hsteinme
      Man kann durchaus Parameter übergeben, indem man die gewünschte Funktion innerhalb der anonymen Funktion aufruft.

      function Log(Text) {
          console.log('Text = ' + Text);
      }
       
      schedule('* * * * *', function() {Log('Hallo');});
      

      @hsteinme sagte in on({time: Cron}, Funktion, Werte) ignoriert Werte:

      im Gegensatz zum on-Statement

      Das on-Statement gibt an die Callback-Funktion einen festen Wert zurück: Das Datenpunkt-Objekt.
      In der time-Version verhält es sich genauso wie schedule().

      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

      hsteinmeH 1 Reply Last reply
      0
      • paul53P paul53

        @hsteinme
        Man kann durchaus Parameter übergeben, indem man die gewünschte Funktion innerhalb der anonymen Funktion aufruft.

        function Log(Text) {
            console.log('Text = ' + Text);
        }
         
        schedule('* * * * *', function() {Log('Hallo');});
        

        @hsteinme sagte in on({time: Cron}, Funktion, Werte) ignoriert Werte:

        im Gegensatz zum on-Statement

        Das on-Statement gibt an die Callback-Funktion einen festen Wert zurück: Das Datenpunkt-Objekt.
        In der time-Version verhält es sich genauso wie schedule().

        hsteinmeH Offline
        hsteinmeH Offline
        hsteinme
        wrote on last edited by hsteinme
        #3

        Danke für den Hinweis. Im Beispiel meines natürlich sehr vereinfachten Testskripts greift dieser Hinweis auch. Da ich aber "im richtigen Leben" statt eines konstanten Wertes einen variablen Wert übergeben möchte, der sich in der Zeit zwischen schedule-Definition und schedule-Ausführung auch noch ändern kann, kann ich ihn dort leider nicht anwenden.

        paul53P 1 Reply Last reply
        0
        • hsteinmeH hsteinme

          Danke für den Hinweis. Im Beispiel meines natürlich sehr vereinfachten Testskripts greift dieser Hinweis auch. Da ich aber "im richtigen Leben" statt eines konstanten Wertes einen variablen Wert übergeben möchte, der sich in der Zeit zwischen schedule-Definition und schedule-Ausführung auch noch ändern kann, kann ich ihn dort leider nicht anwenden.

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @hsteinme sagte:

          kann ich ihn dort leider nicht anwenden.

          Wieso nicht ? Anstelle von 'Hallo' kann auch eine Variable übergeben werden.

          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

          1 Reply Last reply
          0
          • hsteinmeH Offline
            hsteinmeH Offline
            hsteinme
            wrote on last edited by
            #5

            Klar kann ich eine Variable dort hinschreiben, aber Variablen sind Schall und Rauch. Auf deren Inhalt kommt's doch an. Ich will dem schedule-Aufruf doch den Variableninhalt zum Aufruf-Zeitpunkt mitgeben. Daher sollte die Callback-Funktion auch den Inhalt zum Aufruf-Zeitpunkt verwenden und nicht den Inhalt zur Laufzeit der Callback-Funktion.

            Beispiel:

            function Log(Text) {
                console.log('Text = ' + Text);
            }
            
            var Nachricht;
            
            Nachricht = 'Hallo';
            schedule('* * * * *', function() {Log(Nachricht);});
            Nachricht = 'Guten Tag!';
            

            Ausgabe leider:

            javascript.0 script.js.common.Allgemeines.OnTest: Text = Guten Tag!
            
            Dominik F.D 1 Reply Last reply
            0
            • hsteinmeH hsteinme

              Klar kann ich eine Variable dort hinschreiben, aber Variablen sind Schall und Rauch. Auf deren Inhalt kommt's doch an. Ich will dem schedule-Aufruf doch den Variableninhalt zum Aufruf-Zeitpunkt mitgeben. Daher sollte die Callback-Funktion auch den Inhalt zum Aufruf-Zeitpunkt verwenden und nicht den Inhalt zur Laufzeit der Callback-Funktion.

              Beispiel:

              function Log(Text) {
                  console.log('Text = ' + Text);
              }
              
              var Nachricht;
              
              Nachricht = 'Hallo';
              schedule('* * * * *', function() {Log(Nachricht);});
              Nachricht = 'Guten Tag!';
              

              Ausgabe leider:

              javascript.0 script.js.common.Allgemeines.OnTest: Text = Guten Tag!
              
              Dominik F.D Offline
              Dominik F.D Offline
              Dominik F.
              wrote on last edited by Dominik F.
              #6

              @hsteinme

              Hallo, ich bin blutiger Anfänger was programmieren angeht und bin mir daher nicht sicher ob ich richtig verstanden hab was du genau meinst :D

              Es gibt ein Astro Skript: https://forum.iobroker.net/topic/2423/astro-tageszeit-abfragen-und-in-datenpunkt-eintragen/331

              Dort wird unter anderem ein Datenpunkt geschrieben, der die aktuelle Tageszeit beinhaltet. Der inhalt ändert sich also je nach Tageszeit. Das ist doch sowas ähnliches wie du suchst oder nicht? Vielleicht kannst du dir ja aus dem dortigen Skript das rausziehen, was du brauchst.

              1 Reply Last reply
              0
              • OliverIOO Offline
                OliverIOO Offline
                OliverIO
                wrote on last edited by OliverIO
                #7

                @hsteinme
                mE wäre der Bind-Befehl der richtige für dich. Da kannst du Paramerter bei Funktionsdefinition mitgeben, auch wenn die Funktion zeitverzögert ausgeführt wird

                function Log(Text,p2,p3) {
                    console.log('Text = ' + Text);
                }
                 
                var Nachricht;
                 
                Nachricht = 'Hallo';
                schedule('* * * * *', function() {Log.bind(this,Nachricht ,"p1","p2");});
                Nachricht = 'Guten Tag!';
                

                https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

                p1,p2 hab ich angefügt um zu zeigen, das man auch mehrere parameter übergeben kann.

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

                1 Reply Last reply
                0
                • hsteinmeH Offline
                  hsteinmeH Offline
                  hsteinme
                  wrote on last edited by hsteinme
                  #8

                  @Dominik F.:
                  Meine Fragestellung behandelt Uhrzeiten (3:57, 21:12,...), das dortige Skript behandelt jedoch Tageszeiten (Morgendämmerung, Sonnenaufgang, Tag, ...). Das ist also ein völlig anderes Thema. Die dort verwendete Logik setzt auf einem minütlich aufzurufenden schedule auf - der aber nun mal keine Möglichkeit bietet, der Callback-Funktion jetzige Werte als Parameter mitzugeben.

                  @OliverIO:
                  Wenn ich Dein geändertes Skript bei mir laufen lasse, kommt kein einziger Logeintrag zustande, weder ein vom console.log des Skriptes durchgeführter noch irgendwelche Fehlerhinweise von übergeordneten "Mächten".

                  Ich habe mich aber mittlerweile mit meinem weiter oben skizzierten Ansatz abgefunden (und auch bereits umgesetzt), die vorgesehenen schedule-Aufrufe jeweils durch setTimeout-Statements mit berechneten Zeitdifferenzen zu ersetzen, wobei die setTimeout-Aufrufe und deren Zeitdifferenz-Berechnungen geeignet zyklisch wiederholt werden müssen.

                  Herzlichen Dank für alle hier gebrachten Vorschläge.

                  OliverIOO 1 Reply Last reply
                  0
                  • hsteinmeH hsteinme

                    @Dominik F.:
                    Meine Fragestellung behandelt Uhrzeiten (3:57, 21:12,...), das dortige Skript behandelt jedoch Tageszeiten (Morgendämmerung, Sonnenaufgang, Tag, ...). Das ist also ein völlig anderes Thema. Die dort verwendete Logik setzt auf einem minütlich aufzurufenden schedule auf - der aber nun mal keine Möglichkeit bietet, der Callback-Funktion jetzige Werte als Parameter mitzugeben.

                    @OliverIO:
                    Wenn ich Dein geändertes Skript bei mir laufen lasse, kommt kein einziger Logeintrag zustande, weder ein vom console.log des Skriptes durchgeführter noch irgendwelche Fehlerhinweise von übergeordneten "Mächten".

                    Ich habe mich aber mittlerweile mit meinem weiter oben skizzierten Ansatz abgefunden (und auch bereits umgesetzt), die vorgesehenen schedule-Aufrufe jeweils durch setTimeout-Statements mit berechneten Zeitdifferenzen zu ersetzen, wobei die setTimeout-Aufrufe und deren Zeitdifferenz-Berechnungen geeignet zyklisch wiederholt werden müssen.

                    Herzlichen Dank für alle hier gebrachten Vorschläge.

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

                    @hsteinme
                    Dann so

                    function Log(Text) {
                    console.log('Text = ' + Text);
                    }

                    var Nachricht;

                    Nachricht = 'Hallo';
                    schedule('*/10 * * * * *', Log.bind(this,"hallo"));
                    Nachricht = 'Guten Tag!';

                    schedule ist hier auf 10 Sekunden eingestellt, damit man nicht so lange warten muss

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

                    1 Reply Last reply
                    0
                    • hsteinmeH Offline
                      hsteinmeH Offline
                      hsteinme
                      wrote on last edited by
                      #10

                      Danke schön, OliverIO! Dieses Beispielskript läuft und liefert auch das gewünschte Ergebnis - auch wenn ich die Text-Konstante "hallo" durch die Text-Variable Nachricht ersetze.

                      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

                      605

                      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