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

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
10 Beiträge 4 Kommentatoren 760 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.
  • hsteinmeH Online
    hsteinmeH Online
    hsteinme
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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 Online
        hsteinmeH Online
        hsteinme
        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • hsteinmeH Online
            hsteinmeH Online
            hsteinme
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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.
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              0
              • OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                0
                • hsteinmeH Online
                  hsteinmeH Online
                  hsteinme
                  schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • hsteinmeH Online
                      hsteinmeH Online
                      hsteinme
                      schrieb am zuletzt editiert von
                      #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 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

                      771

                      Online

                      32.4k

                      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