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. [gelöst] Script wird nicht immer ausgeführt

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[gelöst] Script wird nicht immer ausgeführt

Scheduled Pinned Locked Moved JavaScript
javascript
5 Posts 3 Posters 333 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
    Metamorph
    wrote on last edited by Metamorph
    #1

    Hallo,

    ich habe mich nun entschieden, meine Blockly-Scripte in JS neu zu schreiben. Dabei habe ich folgendes Script für die Nachttemperatur erstellt:

    function SchlafzimmerNacht(){
        let ScheduleSchlafzimmerNacht;
        let ort = 'Schlafzimmer';
        let textContent = 'Nachttemperatur startet.';
    
        if (ScheduleSchlafzimmerNacht) {
            clearSchedule(ScheduleSchlafzimmerNacht);
            ScheduleSchlafzimmerNacht = null;
        };
    
        ScheduleSchlafzimmerNacht = schedule('0 15 23 * * *', function () {
            if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 3 && getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 4) {
                if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Fenster_Status").val == true) {
                    setState("hm-rpc.1.000A1BE99F98AD.1.SET_POINT_TEMPERATURE", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                    Whatsapp_Nachricht(ort, textContent);
                }
                else {
                    setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Temperatur_speichern_Fenster", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                };
            }
        });
    };
    
    
    on({id: 'javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', val: true}, function () {
        SchlafzimmerNacht();
        setState('javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', false);
    });
    

    Der Trigger hat derzeit keine echte Funktion, da ich aktuell noch eine feste Zeit beim schedule hinterlegt habe ("Zeit_veraendert" ist aber ein existierender Datenpunkt, den ich manuell auf true setzen kann). Ansonsten soll einfach abends die vorgegebene Temperatur eingestellt werden, wenn das Fenster geschlossen ist. Ist es geöffnet, wird die Temperatur in einen Datenpunkt geschrieben. Die Abfrage von "Arbeitsmodus" dient nur zur Unterscheidung von Arbeit, Urlaub etc. Die Funktion "Whatsapp_Nachricht" ist in einem Script beschrieben, dass ich im Ordner "global" erstellt habe. Das ganze läuft auf einem Raspberry Pi 3B+.

    Mein Problem ist, dass das Script anfangs getriggert wurde, nun aber nicht mehr. Auch wenn ich "Zeit_veraendert" auf true setze, zeigt das Log nichts an, der Datenpunkt wechselt aber sofort wieder zu false bzw. bleibt auf false (ich sehe nicht, dass er sich auf meine Eingabe hin tatsächlich ändert). Ich weiß nicht, wo das Problem liegt. Spätestens durch den Trigger ab Zeile 25 müsste ich doch das Script zumindest starten können?

    AsgothianA 1 Reply Last reply
    0
    • M Metamorph

      Hallo,

      ich habe mich nun entschieden, meine Blockly-Scripte in JS neu zu schreiben. Dabei habe ich folgendes Script für die Nachttemperatur erstellt:

      function SchlafzimmerNacht(){
          let ScheduleSchlafzimmerNacht;
          let ort = 'Schlafzimmer';
          let textContent = 'Nachttemperatur startet.';
      
          if (ScheduleSchlafzimmerNacht) {
              clearSchedule(ScheduleSchlafzimmerNacht);
              ScheduleSchlafzimmerNacht = null;
          };
      
          ScheduleSchlafzimmerNacht = schedule('0 15 23 * * *', function () {
              if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 3 && getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 4) {
                  if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Fenster_Status").val == true) {
                      setState("hm-rpc.1.000A1BE99F98AD.1.SET_POINT_TEMPERATURE", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                      Whatsapp_Nachricht(ort, textContent);
                  }
                  else {
                      setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Temperatur_speichern_Fenster", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                  };
              }
          });
      };
      
      
      on({id: 'javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', val: true}, function () {
          SchlafzimmerNacht();
          setState('javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', false);
      });
      

      Der Trigger hat derzeit keine echte Funktion, da ich aktuell noch eine feste Zeit beim schedule hinterlegt habe ("Zeit_veraendert" ist aber ein existierender Datenpunkt, den ich manuell auf true setzen kann). Ansonsten soll einfach abends die vorgegebene Temperatur eingestellt werden, wenn das Fenster geschlossen ist. Ist es geöffnet, wird die Temperatur in einen Datenpunkt geschrieben. Die Abfrage von "Arbeitsmodus" dient nur zur Unterscheidung von Arbeit, Urlaub etc. Die Funktion "Whatsapp_Nachricht" ist in einem Script beschrieben, dass ich im Ordner "global" erstellt habe. Das ganze läuft auf einem Raspberry Pi 3B+.

      Mein Problem ist, dass das Script anfangs getriggert wurde, nun aber nicht mehr. Auch wenn ich "Zeit_veraendert" auf true setze, zeigt das Log nichts an, der Datenpunkt wechselt aber sofort wieder zu false bzw. bleibt auf false (ich sehe nicht, dass er sich auf meine Eingabe hin tatsächlich ändert). Ich weiß nicht, wo das Problem liegt. Spätestens durch den Trigger ab Zeile 25 müsste ich doch das Script zumindest starten können?

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      wrote on last edited by
      #2

      @metamorph

      • es ist davon auszugehen das das Skript durchaus läuft - allerdings bekommst du nur zu einer ganz bestimmten Zeit eine Rückmeldung - wenn der schedule läuft.
      • das undefinierten des schedule funktioniert so nicht, du musst die Variable SheduleSchlafzimmerNacht Außerhalb der Funktion definieren.
      • du solltest dir eine log Ausgabe in die Funktion einbauen damit du siehst das sie läuft.

      A.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      M 1 Reply Last reply
      1
      • AsgothianA Asgothian

        @metamorph

        • es ist davon auszugehen das das Skript durchaus läuft - allerdings bekommst du nur zu einer ganz bestimmten Zeit eine Rückmeldung - wenn der schedule läuft.
        • das undefinierten des schedule funktioniert so nicht, du musst die Variable SheduleSchlafzimmerNacht Außerhalb der Funktion definieren.
        • du solltest dir eine log Ausgabe in die Funktion einbauen damit du siehst das sie läuft.

        A.

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

        @asgothian

        Vielen Dank, jetzt läuft es auch!

        Da ich gleich noch eine Anschlussfrage habe, hier der Code:

        schedule('0 30 8 * * *', SchlafzimmerNacht);
        
        function SchlafzimmerNacht(){
            let ort = 'Schlafzimmer';
            let textContent = 'Nachttemperatur startet.';
        
            /*
            if (ScheduleSchlafzimmerNacht) {
                clearSchedule(ScheduleSchlafzimmerNacht);
                ScheduleSchlafzimmerNacht = null;
            };
            */
            
            if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 3 && getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 4) {
                if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Fenster_Status").val == true) {
                    /*setState("hm-rpc.1.000A1BE99F98AD.1.SET_POINT_TEMPERATURE", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);*/
                    Whatsapp_Nachricht(ort, textContent);
                }
                else {
                    setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Temperatur_speichern_Fenster", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                };
            }
        
            console.log('Schlafzimmer: Funktion für Nachttemperatur ausgeführt.');
        };
        
        
        on({id: 'javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', val: true}, function () {
            SchlafzimmerNacht();
            setState('javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', false);
        });
        

        Am Ende möchte ich den schedule nicht fest auf eine Zeit definieren, sondern Variablen nutzen, deren Wert über die Visu geändert werden kann. Ich hatte mal gelesen, dass für die Aktualisierung der schedule gelöscht und neu angelegt werden sollte/muss. Das Löschen sollte nicht das Problem sein, aber wie funktioniert das Erstellen? Da wäre ich wieder bei meinem ursprünglichen Script, das den Schedule in der Funktion definiert. Äußerlich soll sich nichts ändern, nur der neue Wert der Variablen soll genutzt werden.
        Gibt es eine ähnliche Möglichkeit wie bei Objekten mit dem Konstruktor?

        T 1 Reply Last reply
        0
        • M Metamorph

          @asgothian

          Vielen Dank, jetzt läuft es auch!

          Da ich gleich noch eine Anschlussfrage habe, hier der Code:

          schedule('0 30 8 * * *', SchlafzimmerNacht);
          
          function SchlafzimmerNacht(){
              let ort = 'Schlafzimmer';
              let textContent = 'Nachttemperatur startet.';
          
              /*
              if (ScheduleSchlafzimmerNacht) {
                  clearSchedule(ScheduleSchlafzimmerNacht);
                  ScheduleSchlafzimmerNacht = null;
              };
              */
              
              if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 3 && getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Allgemein.Arbeitsmodus").val != 4) {
                  if (getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Fenster_Status").val == true) {
                      /*setState("hm-rpc.1.000A1BE99F98AD.1.SET_POINT_TEMPERATURE", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);*/
                      Whatsapp_Nachricht(ort, textContent);
                  }
                  else {
                      setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Temperatur_speichern_Fenster", getState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nachttemperatur").val);
                  };
              }
          
              console.log('Schlafzimmer: Funktion für Nachttemperatur ausgeführt.');
          };
          
          
          on({id: 'javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', val: true}, function () {
              SchlafzimmerNacht();
              setState('javascript.0.scriptEnabled.Eigene_Datenpunkte.Schlafzimmer.Nacht-Beginn.Zeit_veraendert', false);
          });
          

          Am Ende möchte ich den schedule nicht fest auf eine Zeit definieren, sondern Variablen nutzen, deren Wert über die Visu geändert werden kann. Ich hatte mal gelesen, dass für die Aktualisierung der schedule gelöscht und neu angelegt werden sollte/muss. Das Löschen sollte nicht das Problem sein, aber wie funktioniert das Erstellen? Da wäre ich wieder bei meinem ursprünglichen Script, das den Schedule in der Funktion definiert. Äußerlich soll sich nichts ändern, nur der neue Wert der Variablen soll genutzt werden.
          Gibt es eine ähnliche Möglichkeit wie bei Objekten mit dem Konstruktor?

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

          @metamorph

          Siehe hier: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#clearschedule

          Beispiel:

          var scheduleRef = null
          var s = "*/2 * * * *";
          var bla = false;
          
          scheduleRef = schedule(s, work);
          
          function work() {
            if (bla) {
              if (scheduleRef) {
                  clearSchedule(scheduleRef);
                  scheduleRef = schedule(s, work);
              }
            }
          }
          

          Hab das jetzt nicht getestet, sollte aber gehen.

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          M 1 Reply Last reply
          1
          • T ticaki

            @metamorph

            Siehe hier: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#clearschedule

            Beispiel:

            var scheduleRef = null
            var s = "*/2 * * * *";
            var bla = false;
            
            scheduleRef = schedule(s, work);
            
            function work() {
              if (bla) {
                if (scheduleRef) {
                    clearSchedule(scheduleRef);
                    scheduleRef = schedule(s, work);
                }
              }
            }
            

            Hab das jetzt nicht getestet, sollte aber gehen.

            M Offline
            M Offline
            Metamorph
            wrote on last edited by
            #5

            @ticaki
            Danke dir, das ist es. Ich hatte gar nicht richtig registriert, dass ich schon fast alles dafür im Script stehen hatte. Manchmal braucht es eben doch noch einen Anstoß von außen :D

            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

            353

            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