Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Script wird nicht immer ausgeführt

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Metamorph last edited by 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?

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @Metamorph last edited by

        @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 1 Reply Last reply Reply Quote 1
        • M
          Metamorph @Asgothian last edited by

          @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 Reply Quote 0
          • T
            ticaki Developer @Metamorph last edited by 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 1 Reply Last reply Reply Quote 1
            • M
              Metamorph @ticaki last edited by

              @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 😄

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              820
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              javascript
              3
              5
              205
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo