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

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
5 Beiträge 3 Kommentatoren 307 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
    Metamorph
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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 Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 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

            924

            Online

            32.6k

            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