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. clearSchedule Frage bzw. funktioniert nicht

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    771

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

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

clearSchedule Frage bzw. funktioniert nicht

Scheduled Pinned Locked Moved JavaScript
16 Posts 5 Posters 1.4k Views 4 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.
  • AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    wrote on last edited by
    #7

    Jedes Skript läuft in einer eigenen Sandbox, d.h. es besteht kein Zugriff auf die Variablen oder den Ausführungskontext des jeweils anderen.

    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

    1 Reply Last reply
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      wrote on last edited by
      #8

      Ansonsten wäre noch eine Inter-Skript-Kommunikation denkbar. Die Funktion ist blöderweise nicht dokumentiert, aber mittels messageTo kann einem anderen Skript ein Befehl gesendet werden, auf das dieses mit onMessage lauschen kann:

      https://github.com/ioBroker/ioBroker.javascript/blob/a479e26b1fe1deac3b280a3c4275033eb30ca3b3/lib/sandbox.js#L2754-L2867

      So ganz weiß ich aber auch nicht wie das funktionieren soll.

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Reply Last reply
      0
      • paul53P paul53

        @blackeagle998 sagte: Man könnte jetzt 48 Variablen anlegen, aber das ist mir dann nicht mehr dynamisch genug

        Muss das Skriptübergreifend sein? Wie wäre es mit einem Array of schedule variables?

        B Offline
        B Offline
        blackeagle998
        wrote on last edited by
        #9

        @paul53 @AlCalzone
        Ich habe es jetzt im Skript über zwei Arrays gelöst, in eines kommen die Schedules der Startzeiten in das andere die Schedules der Endzeiten. Bevor neu geschrieben wird, werden die Array komplett durchlaufen und für jeden Inhalt ein clearSchedule() ausgeführt.
        Funktioniert perfekt und ich spare mir den Skript Restart.
        Vielen Dank nochmal für den Denkanstoß!

        m1k3f15hM 1 Reply Last reply
        0
        • B blackeagle998

          @paul53 @AlCalzone
          Ich habe es jetzt im Skript über zwei Arrays gelöst, in eines kommen die Schedules der Startzeiten in das andere die Schedules der Endzeiten. Bevor neu geschrieben wird, werden die Array komplett durchlaufen und für jeden Inhalt ein clearSchedule() ausgeführt.
          Funktioniert perfekt und ich spare mir den Skript Restart.
          Vielen Dank nochmal für den Denkanstoß!

          m1k3f15hM Offline
          m1k3f15hM Offline
          m1k3f15h
          wrote on last edited by
          #10

          @blackeagle998
          Kannst du das Script bitte posten?
          Ich schaffs grad nicht, schedules in einem Array zu "speichern"..
          Hätte gerne ein Array wo ich einige schedules speichern kann. dann mit foreach diese clearen..

          mfg
          Mike

          ioBroker Multihostsystem in Docker-Container auf Raspi's mit Redis-Sentinel als States und Objects DB
          Aktuell am Aufbau einer Lovelace Visu

          Deye SUN-12K + 10 kWp Module + 2 x 10 kWh MeritSun PowerWall

          haus-automatisierungH 1 Reply Last reply
          0
          • m1k3f15hM m1k3f15h

            @blackeagle998
            Kannst du das Script bitte posten?
            Ich schaffs grad nicht, schedules in einem Array zu "speichern"..
            Hätte gerne ein Array wo ich einige schedules speichern kann. dann mit foreach diese clearen..

            mfg
            Mike

            haus-automatisierungH Offline
            haus-automatisierungH Offline
            haus-automatisierung
            Developer Most Active
            wrote on last edited by
            #11

            @m1k3f15h Der Thread ist über 3 Jahre alt. Zeig doch erstmal was Du schon hast und was Du erwartest. Einen Rückgabewert von einer Funktion in ein Array zu speichern hat ja erstmal nichts mit dem ioBroker zu tun, sondern ist Standard JavaScript.

            🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
            🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
            📚 Meine inoffizielle ioBroker Dokumentation

            m1k3f15hM 1 Reply Last reply
            0
            • haus-automatisierungH haus-automatisierung

              @m1k3f15h Der Thread ist über 3 Jahre alt. Zeig doch erstmal was Du schon hast und was Du erwartest. Einen Rückgabewert von einer Funktion in ein Array zu speichern hat ja erstmal nichts mit dem ioBroker zu tun, sondern ist Standard JavaScript.

              m1k3f15hM Offline
              m1k3f15hM Offline
              m1k3f15h
              wrote on last edited by
              #12

              @haus-automatisierung
              Hallo,

              Ja 3 jahre .. Hab mir gedacht, ich versuch trotzdem mein glück :)

              Also ich habe ein Javascript (Automatische Beschattung). in diesem Script Werte ich im 2 Uhr Morgens die Sonnenwinkel für jede Minute aus und setzte mir damit einen Timer pro Stockwerk und Himmelsrichtung für öffnen und schließen..

              Diese hätte ich gerne in einem "Array/List" damit ich, wenn ich z.B. die Beschattungsautomatik deaktiviere mit foreach dieses Array alle schedules clearen kann :)

              mfg
              Mike

              ioBroker Multihostsystem in Docker-Container auf Raspi's mit Redis-Sentinel als States und Objects DB
              Aktuell am Aufbau einer Lovelace Visu

              Deye SUN-12K + 10 kWp Module + 2 x 10 kWh MeritSun PowerWall

              haus-automatisierungH 1 Reply Last reply
              0
              • m1k3f15hM m1k3f15h

                @haus-automatisierung
                Hallo,

                Ja 3 jahre .. Hab mir gedacht, ich versuch trotzdem mein glück :)

                Also ich habe ein Javascript (Automatische Beschattung). in diesem Script Werte ich im 2 Uhr Morgens die Sonnenwinkel für jede Minute aus und setzte mir damit einen Timer pro Stockwerk und Himmelsrichtung für öffnen und schließen..

                Diese hätte ich gerne in einem "Array/List" damit ich, wenn ich z.B. die Beschattungsautomatik deaktiviere mit foreach dieses Array alle schedules clearen kann :)

                mfg
                Mike

                haus-automatisierungH Offline
                haus-automatisierungH Offline
                haus-automatisierung
                Developer Most Active
                wrote on last edited by
                #13

                @m1k3f15h sagte in clearSchedule Frage bzw. funktioniert nicht:

                Also ich habe ein Javascript (Automatische Beschattung)

                Zeigen, dann ist es leichter zu helfen.

                🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                📚 Meine inoffizielle ioBroker Dokumentation

                m1k3f15hM 1 Reply Last reply
                0
                • haus-automatisierungH haus-automatisierung

                  @m1k3f15h sagte in clearSchedule Frage bzw. funktioniert nicht:

                  Also ich habe ein Javascript (Automatische Beschattung)

                  Zeigen, dann ist es leichter zu helfen.

                  m1k3f15hM Offline
                  m1k3f15hM Offline
                  m1k3f15h
                  wrote on last edited by
                  #14

                  @haus-automatisierung

                  const suncalc = require('suncalc');
                  const config = getObject('system.config');
                  const lat = config.common.latitude;
                  const long = config.common.longitude;
                  const weatherHorizon = 3;
                  var ostSchrittId = 1;
                  var suedSchrittId = 1;
                  var westSchrittId = 1;
                  let schedules = {};
                  
                  schedule('0 2 * * *', async function () {
                      const list = getSchedules(false);
                      telegramMike("Suncalc_v2 Timer aktiv: " + list.length)
                      checkSuncalc();
                      const list1 = getSchedules(false);
                      telegramMike("Suncalc_v2 Timer aktiv: " + list1.length)
                  });
                  
                  
                  on({id: '0_userdata.0.script.Trigger.Suncalc', change: "ne", val: true}, function (obj) {
                      setState(obj.id, false);
                      log("Manuell getriggert");
                      checkSuncalc()
                      const list = getSchedules(false);
                      list.forEach(schedule => log(JSON.stringify(schedule)));
                      telegramMike("Suncalc_v2 Timer aktiv: " + list.length)
                  });
                  
                  
                  function checkSuncalc() {    
                      var times = suncalc.getTimes(new Date(), lat, long);
                      var startTime = new Date(times.sunrise.getFullYear(), times.sunrise.getMonth(), times.sunrise.getDate(), times.sunrise.getHours(), 0);
                      var endTime = new Date(times.sunset.getFullYear(), times.sunset.getMonth(), times.sunset.getDate(), times.sunset.getHours()+4, 0);
                      log(startTime + " bis " + endTime)
                      var checkTime = startTime.getTime();
                      var test = 0
                      ostSchrittId = 1;
                      suedSchrittId = 1;
                      westSchrittId = 1;
                      while(checkTime < endTime.getTime()) {
                          // Suncalc
                          checkTime = checkTime+2*60*1000;
                          var dateTime = new Date(checkTime);
                          var sunpos = suncalc.getPosition(checkTime, lat, long);
                          var h = sunpos.altitude * 180 / Math.PI; //elevation
                          var a = sunpos.azimuth * 180 / Math.PI + 180; //azimut
                          var azimut = Math.round(10 * a) / 10
                          var elevation = Math.round(10 * h) / 10
                          // Twilight
                          var twi = Math.round(((h-weatherHorizon+12)/18*1000)/10);
                          if (twi > 100) twi = 100;
                          if (twi < 0) twi = 0;
                          // Output
                          //log(twi + "  -  " + azimut + "   -  " + elevation)
                          // Check Automatik Sonnenschutz
                          ablaufOst(dateTime, azimut, elevation);
                          ablaufSued(dateTime, azimut, elevation);
                          ablaufWest(dateTime, azimut, elevation);
                          if (suedSchrittId == 5 && westSchrittId == 5 && ostSchrittId == 5) break;
                          test++;
                  
                      };
                      log (test + " Durchläufe")
                      //https://forum.iobroker.net/topic/24683/variable-in-scheduler-nutzen/2
                  };
                  
                  
                  /**
                  * Ablauf Ostseite
                  * @param {number} azimut
                  * @param {number} elevation
                  * @param {Date} date
                  */
                  function ablaufOst(date, azimut, elevation) {
                      switch(ostSchrittId) {
                          case 1: // Osten OG beschatten
                              if (azimut < 130 && elevation > 5) { // MUSS NOCH ANGEPASST WERDEN
                                  ostSchrittId = 2;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikost').val) {
                                      log(date + " Osten OG Sonnenschutz Aktivieren", "info");
                                      const name = "ostOgZu";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() { 
                                              telegramMike(name);
                                              clearSchedule(schedules[name]);
                                          });
                                          const nameExt = "ostOgZuExt";
                                          const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                          log(dateTimeExt + " Osten OG Sonnenschutz Erweitert Aktivieren ", "info");
                                          if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                          if (new Date() < dateTimeExt) {
                                              schedules[name] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                                  telegramMike(nameExt);
                                                  clearSchedule(schedules[name]);
                                              });
                                          }; // Eventuell dann Ext Aktivieren?
                                      };
                                  };
                              };
                              break;
                          case 2: // Osten OG öffnen
                              if (azimut > 130 || elevation > 60) { // MUSS NOCH ANGEPASST WERDEN
                                  ostSchrittId = 5;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikost').val) {
                                      log(date + " Osten OG Sonnenschutz Deaktivieren", "info");
                                      const name = "ostOgAuf";
                                      if (schedules[name]) {
                                          log(name + " gelöscht")
                                          clearSchedule(schedules[name]);
                                      }
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                              telegramMike(name);
                                              clearSchedule(schedules[name]);
                                          });
                                      };
                                  };
                              };
                              break;
                          case 5: // Schon fertig!
                              break;
                          default:
                              //log("Sonnenautomatik SchrittId West unbekannt!!", "error");
                              break;
                       };
                  }
                  
                  /**
                  * Ablauf Südseite
                  * @param {number} azimut
                  * @param {number} elevation
                  * @param {Date} date
                  */
                  function ablaufSued(date, azimut, elevation) {
                      switch(suedSchrittId) {
                          case 1: // Süden EG beschatten
                              if (azimut > 92) {
                                  suedSchrittId = 2;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                      log(date + " Süden EG Sonnenschutz Aktivieren", "info");
                                      const name = "suedEgZu";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                              telegramMike(name);
                                              clearSchedule(schedules[name]);
                                          });
                                          const nameExt = "suedEgZuExt";
                                          const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                          log(dateTimeExt + " Süden EG Sonnenschutz Erweitert Aktivieren ", "info");
                                          if (new Date() < dateTimeExt) {
                                              schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                                  telegramMike(nameExt);
                                                  clearSchedule(schedules[nameExt]);
                                              });
                                          }; // Eventuell dann Ext Aktivieren?
                                      };
                                  };
                              };
                              break;
                          case 2: // Süden OG beschatten
                              if (azimut > 110 && elevation < 50) {
                                  suedSchrittId = 3;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                      log(date + " Süden OG Sonnenschutz Aktivieren", "info");
                                      const name = "suedOgZu";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                              telegramMike(name);
                                              clearSchedule(schedules[name]);
                                          });
                                          const nameExt = "suedOgZuExt";
                                          const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                          log(dateTimeExt + " Süden OG Sonnenschutz Erweitert Aktivieren ", "info");
                                          if (new Date() < dateTimeExt) {
                                              schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                                  telegramMike(nameExt);
                                                  clearSchedule(schedules[nameExt]);
                                              });
                                          }; // Eventuell dann Ext Aktivieren?
                                      };
                                  };
                              } else if (azimut > 180) {
                                  suedSchrittId = 4;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                      log(date + " Süden OG Sonnenschutz Aktivieren übersprungen", "info");
                                  };
                              };
                              break;
                          case 3: // Süden OG öffnen
                              if ((azimut > 190 && elevation > 55) || azimut > 220) {
                                  suedSchrittId = 4;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                      log(date + " Süden OG Sonnenschutz Deaktivieren", "info");
                                      const name = "suedOgAuf";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                              telegramMike(name);
                                              clearSchedule(schedules[name]);
                                          });
                                      };
                                  };
                              };
                              break;
                          case 4: // Süden EG öffnen
                              if (azimut > 250) {
                                  suedSchrittId = 5;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                      log(date + " Süden EG Sonnenschutz Deaktivieren", "info");
                                      const name = "suedEgAuf";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                              telegramMike(name);
                                              clearSchedule(schedules[name]);
                                          });
                                      };
                                  };
                              };
                              break;
                          case 5: // Schon fertig!
                              break;
                          default:
                              log("Sonnenautomatik SchrittId Süd unbekannt!!", "error");
                              break;
                       };
                  }
                  
                  /**
                  * Ablauf Westseite
                  * @param {number} azimut
                  * @param {number} elevation
                  * @param {Date} date
                  */
                  function ablaufWest(date, azimut, elevation) {
                      switch(westSchrittId) {
                          case 1: // Westen EG beschatten
                              if (azimut > 202) {
                                  westSchrittId = 2;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                      log(date + " Westen EG Sonnenschutz Aktivieren", "info");
                                      const name = "westEgZu";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() < date) {
                                          schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                              telegramMike(name);
                                              setState('0_userdata.0.eg.ku.fensterWest.Steuern.Sonnenschutz.Aktivieren'/*Aktivieren*/, true);
                                              setState('s7.0.DBs.DB211.cmnd/eg/wb/rollladenwest_down'/*Cmnd/eg/wb/rollladenwest Down*/, true);
                                              setState('s7.0.DBs.DB211.cmnd/eg/eb/rollladen_down', true);
                                              clearSchedule(schedules[name]);
                                          });
                                      };
                                      const nameExt = "westEgZuExt";
                                      if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                      const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                      log(dateTimeExt + " Westen EG Sonnenschutz Erweitert Aktivieren ", "info");
                                      if (new Date() < dateTimeExt) {
                                          schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *",function() {
                                              telegramMike(nameExt);
                                              setState('0_userdata.0.eg.ku.fensterWest.Steuern.SonnenschutzExt.Aktivieren'/*Aktivieren*/, true);
                                              clearSchedule(schedules[nameExt]);
                                          });
                                      };
                                  };
                              };
                              break;
                          case 2: // Westen OG beschatten
                              if (azimut > 202 && elevation < 60) {
                                  westSchrittId = 3;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                      log(date + " Westen OG Sonnenschutz Aktivieren", "info");
                                      const name = "westOgZu";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() > date) log ("Schon Vorbei!")
                                      schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                          telegramMike(name)
                                          clearSchedule(schedules[name]);
                                      });
                                      const nameExt = "westOgZuExt";
                                      if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                      const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                      log(dateTimeExt + " Westen OG Sonnenschutz Erweitert Aktivieren ", "info");
                                      if (new Date() > dateTimeExt) log ("Schon Vorbei!")
                                      schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                          telegramMike(nameExt);
                                          clearSchedule(schedules[nameExt]);
                                          //setState('0_userdata.0.eg.ku.fensterWest.Steuern.SonnenschutzExt.Aktivieren'/*Aktivieren*/, true);
                                      });
                                  };
                                  
                  
                              } else if (azimut > 275) {
                                  westSchrittId = 3;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                      log(date + " Westen OG Sonnenschutz übersprungen", "info");
                                  };
                              };
                              break;
                          case 3: // Westen öffnen
                              if (elevation < 13) {
                                  westSchrittId = 5;
                                  if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                      log(date + " Westen Sonnenschutz Deaktivieren", "info");
                                      const name = "westAuf";
                                      if (schedules[name]) clearSchedule(schedules[name]);
                                      if (new Date() > date) log ("Schon Vorbei!")
                                      schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                          telegramMike(name)
                                          setState('0_userdata.0.eg.ku.fensterWest.Steuern.Sonnenschutz.Deaktivieren', true);
                                          clearSchedule(schedules[name]);
                                      });
                                      const nameExt = "westRst";
                                      log("23:55 Westen Sonnenschutz Erweitert Deaktivieren", "info");
                                      if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                      schedules[nameExt] = schedule('55 23 * * *', function() {
                                          telegramMike(nameExt)
                                          setState('0_userdata.0.eg.ku.fensterWest.Steuern.SonnenschutzExt.Deaktivieren', true);
                                          clearSchedule(schedules[nameExt]);
                                      });
                                  };
                              };
                              break;
                          case 5: // Fertig
                              break;
                          default:
                              log("Sonnenautomatik SchrittId West unbekannt!!", "error");
                              break;
                       };
                  }
                  

                  ioBroker Multihostsystem in Docker-Container auf Raspi's mit Redis-Sentinel als States und Objects DB
                  Aktuell am Aufbau einer Lovelace Visu

                  Deye SUN-12K + 10 kWp Module + 2 x 10 kWh MeritSun PowerWall

                  B 1 Reply Last reply
                  0
                  • m1k3f15hM m1k3f15h

                    @haus-automatisierung

                    const suncalc = require('suncalc');
                    const config = getObject('system.config');
                    const lat = config.common.latitude;
                    const long = config.common.longitude;
                    const weatherHorizon = 3;
                    var ostSchrittId = 1;
                    var suedSchrittId = 1;
                    var westSchrittId = 1;
                    let schedules = {};
                    
                    schedule('0 2 * * *', async function () {
                        const list = getSchedules(false);
                        telegramMike("Suncalc_v2 Timer aktiv: " + list.length)
                        checkSuncalc();
                        const list1 = getSchedules(false);
                        telegramMike("Suncalc_v2 Timer aktiv: " + list1.length)
                    });
                    
                    
                    on({id: '0_userdata.0.script.Trigger.Suncalc', change: "ne", val: true}, function (obj) {
                        setState(obj.id, false);
                        log("Manuell getriggert");
                        checkSuncalc()
                        const list = getSchedules(false);
                        list.forEach(schedule => log(JSON.stringify(schedule)));
                        telegramMike("Suncalc_v2 Timer aktiv: " + list.length)
                    });
                    
                    
                    function checkSuncalc() {    
                        var times = suncalc.getTimes(new Date(), lat, long);
                        var startTime = new Date(times.sunrise.getFullYear(), times.sunrise.getMonth(), times.sunrise.getDate(), times.sunrise.getHours(), 0);
                        var endTime = new Date(times.sunset.getFullYear(), times.sunset.getMonth(), times.sunset.getDate(), times.sunset.getHours()+4, 0);
                        log(startTime + " bis " + endTime)
                        var checkTime = startTime.getTime();
                        var test = 0
                        ostSchrittId = 1;
                        suedSchrittId = 1;
                        westSchrittId = 1;
                        while(checkTime < endTime.getTime()) {
                            // Suncalc
                            checkTime = checkTime+2*60*1000;
                            var dateTime = new Date(checkTime);
                            var sunpos = suncalc.getPosition(checkTime, lat, long);
                            var h = sunpos.altitude * 180 / Math.PI; //elevation
                            var a = sunpos.azimuth * 180 / Math.PI + 180; //azimut
                            var azimut = Math.round(10 * a) / 10
                            var elevation = Math.round(10 * h) / 10
                            // Twilight
                            var twi = Math.round(((h-weatherHorizon+12)/18*1000)/10);
                            if (twi > 100) twi = 100;
                            if (twi < 0) twi = 0;
                            // Output
                            //log(twi + "  -  " + azimut + "   -  " + elevation)
                            // Check Automatik Sonnenschutz
                            ablaufOst(dateTime, azimut, elevation);
                            ablaufSued(dateTime, azimut, elevation);
                            ablaufWest(dateTime, azimut, elevation);
                            if (suedSchrittId == 5 && westSchrittId == 5 && ostSchrittId == 5) break;
                            test++;
                    
                        };
                        log (test + " Durchläufe")
                        //https://forum.iobroker.net/topic/24683/variable-in-scheduler-nutzen/2
                    };
                    
                    
                    /**
                    * Ablauf Ostseite
                    * @param {number} azimut
                    * @param {number} elevation
                    * @param {Date} date
                    */
                    function ablaufOst(date, azimut, elevation) {
                        switch(ostSchrittId) {
                            case 1: // Osten OG beschatten
                                if (azimut < 130 && elevation > 5) { // MUSS NOCH ANGEPASST WERDEN
                                    ostSchrittId = 2;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikost').val) {
                                        log(date + " Osten OG Sonnenschutz Aktivieren", "info");
                                        const name = "ostOgZu";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() { 
                                                telegramMike(name);
                                                clearSchedule(schedules[name]);
                                            });
                                            const nameExt = "ostOgZuExt";
                                            const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                            log(dateTimeExt + " Osten OG Sonnenschutz Erweitert Aktivieren ", "info");
                                            if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                            if (new Date() < dateTimeExt) {
                                                schedules[name] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                                    telegramMike(nameExt);
                                                    clearSchedule(schedules[name]);
                                                });
                                            }; // Eventuell dann Ext Aktivieren?
                                        };
                                    };
                                };
                                break;
                            case 2: // Osten OG öffnen
                                if (azimut > 130 || elevation > 60) { // MUSS NOCH ANGEPASST WERDEN
                                    ostSchrittId = 5;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikost').val) {
                                        log(date + " Osten OG Sonnenschutz Deaktivieren", "info");
                                        const name = "ostOgAuf";
                                        if (schedules[name]) {
                                            log(name + " gelöscht")
                                            clearSchedule(schedules[name]);
                                        }
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                                telegramMike(name);
                                                clearSchedule(schedules[name]);
                                            });
                                        };
                                    };
                                };
                                break;
                            case 5: // Schon fertig!
                                break;
                            default:
                                //log("Sonnenautomatik SchrittId West unbekannt!!", "error");
                                break;
                         };
                    }
                    
                    /**
                    * Ablauf Südseite
                    * @param {number} azimut
                    * @param {number} elevation
                    * @param {Date} date
                    */
                    function ablaufSued(date, azimut, elevation) {
                        switch(suedSchrittId) {
                            case 1: // Süden EG beschatten
                                if (azimut > 92) {
                                    suedSchrittId = 2;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                        log(date + " Süden EG Sonnenschutz Aktivieren", "info");
                                        const name = "suedEgZu";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                                telegramMike(name);
                                                clearSchedule(schedules[name]);
                                            });
                                            const nameExt = "suedEgZuExt";
                                            const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                            log(dateTimeExt + " Süden EG Sonnenschutz Erweitert Aktivieren ", "info");
                                            if (new Date() < dateTimeExt) {
                                                schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                                    telegramMike(nameExt);
                                                    clearSchedule(schedules[nameExt]);
                                                });
                                            }; // Eventuell dann Ext Aktivieren?
                                        };
                                    };
                                };
                                break;
                            case 2: // Süden OG beschatten
                                if (azimut > 110 && elevation < 50) {
                                    suedSchrittId = 3;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                        log(date + " Süden OG Sonnenschutz Aktivieren", "info");
                                        const name = "suedOgZu";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                                telegramMike(name);
                                                clearSchedule(schedules[name]);
                                            });
                                            const nameExt = "suedOgZuExt";
                                            const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                            log(dateTimeExt + " Süden OG Sonnenschutz Erweitert Aktivieren ", "info");
                                            if (new Date() < dateTimeExt) {
                                                schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                                    telegramMike(nameExt);
                                                    clearSchedule(schedules[nameExt]);
                                                });
                                            }; // Eventuell dann Ext Aktivieren?
                                        };
                                    };
                                } else if (azimut > 180) {
                                    suedSchrittId = 4;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                        log(date + " Süden OG Sonnenschutz Aktivieren übersprungen", "info");
                                    };
                                };
                                break;
                            case 3: // Süden OG öffnen
                                if ((azimut > 190 && elevation > 55) || azimut > 220) {
                                    suedSchrittId = 4;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                        log(date + " Süden OG Sonnenschutz Deaktivieren", "info");
                                        const name = "suedOgAuf";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                                telegramMike(name);
                                                clearSchedule(schedules[name]);
                                            });
                                        };
                                    };
                                };
                                break;
                            case 4: // Süden EG öffnen
                                if (azimut > 250) {
                                    suedSchrittId = 5;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatiksued').val) {
                                        log(date + " Süden EG Sonnenschutz Deaktivieren", "info");
                                        const name = "suedEgAuf";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                                telegramMike(name);
                                                clearSchedule(schedules[name]);
                                            });
                                        };
                                    };
                                };
                                break;
                            case 5: // Schon fertig!
                                break;
                            default:
                                log("Sonnenautomatik SchrittId Süd unbekannt!!", "error");
                                break;
                         };
                    }
                    
                    /**
                    * Ablauf Westseite
                    * @param {number} azimut
                    * @param {number} elevation
                    * @param {Date} date
                    */
                    function ablaufWest(date, azimut, elevation) {
                        switch(westSchrittId) {
                            case 1: // Westen EG beschatten
                                if (azimut > 202) {
                                    westSchrittId = 2;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                        log(date + " Westen EG Sonnenschutz Aktivieren", "info");
                                        const name = "westEgZu";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() < date) {
                                            schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                                telegramMike(name);
                                                setState('0_userdata.0.eg.ku.fensterWest.Steuern.Sonnenschutz.Aktivieren'/*Aktivieren*/, true);
                                                setState('s7.0.DBs.DB211.cmnd/eg/wb/rollladenwest_down'/*Cmnd/eg/wb/rollladenwest Down*/, true);
                                                setState('s7.0.DBs.DB211.cmnd/eg/eb/rollladen_down', true);
                                                clearSchedule(schedules[name]);
                                            });
                                        };
                                        const nameExt = "westEgZuExt";
                                        if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                        const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                        log(dateTimeExt + " Westen EG Sonnenschutz Erweitert Aktivieren ", "info");
                                        if (new Date() < dateTimeExt) {
                                            schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *",function() {
                                                telegramMike(nameExt);
                                                setState('0_userdata.0.eg.ku.fensterWest.Steuern.SonnenschutzExt.Aktivieren'/*Aktivieren*/, true);
                                                clearSchedule(schedules[nameExt]);
                                            });
                                        };
                                    };
                                };
                                break;
                            case 2: // Westen OG beschatten
                                if (azimut > 202 && elevation < 60) {
                                    westSchrittId = 3;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                        log(date + " Westen OG Sonnenschutz Aktivieren", "info");
                                        const name = "westOgZu";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() > date) log ("Schon Vorbei!")
                                        schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                            telegramMike(name)
                                            clearSchedule(schedules[name]);
                                        });
                                        const nameExt = "westOgZuExt";
                                        if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                        const dateTimeExt = new Date(date.getTime()-60*60*1000);
                                        log(dateTimeExt + " Westen OG Sonnenschutz Erweitert Aktivieren ", "info");
                                        if (new Date() > dateTimeExt) log ("Schon Vorbei!")
                                        schedules[nameExt] = schedule(dateTimeExt.getMinutes() + " " + dateTimeExt.getHours() + " * * *", function() {
                                            telegramMike(nameExt);
                                            clearSchedule(schedules[nameExt]);
                                            //setState('0_userdata.0.eg.ku.fensterWest.Steuern.SonnenschutzExt.Aktivieren'/*Aktivieren*/, true);
                                        });
                                    };
                                    
                    
                                } else if (azimut > 275) {
                                    westSchrittId = 3;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                        log(date + " Westen OG Sonnenschutz übersprungen", "info");
                                    };
                                };
                                break;
                            case 3: // Westen öffnen
                                if (elevation < 13) {
                                    westSchrittId = 5;
                                    if (getState('0_userdata.0.global.settings.rollladen.sonnenautomatikwest').val) {
                                        log(date + " Westen Sonnenschutz Deaktivieren", "info");
                                        const name = "westAuf";
                                        if (schedules[name]) clearSchedule(schedules[name]);
                                        if (new Date() > date) log ("Schon Vorbei!")
                                        schedules[name] = schedule(date.getMinutes() + " " + date.getHours() + " * * *",function() {
                                            telegramMike(name)
                                            setState('0_userdata.0.eg.ku.fensterWest.Steuern.Sonnenschutz.Deaktivieren', true);
                                            clearSchedule(schedules[name]);
                                        });
                                        const nameExt = "westRst";
                                        log("23:55 Westen Sonnenschutz Erweitert Deaktivieren", "info");
                                        if (schedules[nameExt]) clearSchedule(schedules[nameExt]);
                                        schedules[nameExt] = schedule('55 23 * * *', function() {
                                            telegramMike(nameExt)
                                            setState('0_userdata.0.eg.ku.fensterWest.Steuern.SonnenschutzExt.Deaktivieren', true);
                                            clearSchedule(schedules[nameExt]);
                                        });
                                    };
                                };
                                break;
                            case 5: // Fertig
                                break;
                            default:
                                log("Sonnenautomatik SchrittId West unbekannt!!", "error");
                                break;
                         };
                    }
                    
                    B Offline
                    B Offline
                    blackeagle998
                    wrote on last edited by
                    #15

                    @m1k3f15h

                    let arr_schedules = [];
                    arr_schedules.push(
                       schedule('0 2 * * *', async function () {
                          // Inhalt der schedule Anweisung
                       };
                    );
                    

                    So würdest du einfach ein schedule in das Array packen, weißt dann aber nicht, auf welchem Index es liegt, außer du zählst vorher oder hinterher die Array Länge.
                    Löschen kannst du dann wie folgt:

                    // alle Schedules im Array löschen:
                    arr_schedules.forEach(el => {
                       clearSchedule(el);
                    });
                    
                    // oder gezielt das Schedule auf bspw. Index zwei (Array Index startet immer bei 0):
                    clearSchedule(arr_schedules[2]);
                    

                    Hoffe das bringt dich etwas weiter.

                    m1k3f15hM 1 Reply Last reply
                    0
                    • B blackeagle998

                      @m1k3f15h

                      let arr_schedules = [];
                      arr_schedules.push(
                         schedule('0 2 * * *', async function () {
                            // Inhalt der schedule Anweisung
                         };
                      );
                      

                      So würdest du einfach ein schedule in das Array packen, weißt dann aber nicht, auf welchem Index es liegt, außer du zählst vorher oder hinterher die Array Länge.
                      Löschen kannst du dann wie folgt:

                      // alle Schedules im Array löschen:
                      arr_schedules.forEach(el => {
                         clearSchedule(el);
                      });
                      
                      // oder gezielt das Schedule auf bspw. Index zwei (Array Index startet immer bei 0):
                      clearSchedule(arr_schedules[2]);
                      

                      Hoffe das bringt dich etwas weiter.

                      m1k3f15hM Offline
                      m1k3f15hM Offline
                      m1k3f15h
                      wrote on last edited by
                      #16

                      @blackeagle998 Servus

                      Ich denke ich war ein Idiot und hab Dictionary und Array verwechselt ^^
                      Kann ich Schedules auch in ein Dictionary speichern, damit ich sie statt Nummer mit Namen ansprechen kann?

                      mike

                      ioBroker Multihostsystem in Docker-Container auf Raspi's mit Redis-Sentinel als States und Objects DB
                      Aktuell am Aufbau einer Lovelace Visu

                      Deye SUN-12K + 10 kWp Module + 2 x 10 kWh MeritSun PowerWall

                      1 Reply Last reply
                      0

                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                      With your input, this post could be even better 💗

                      Register Login
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      450

                      Online

                      32.8k

                      Users

                      82.7k

                      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