Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. clearSchedule Frage bzw. funktioniert nicht

NEWS

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

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

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

clearSchedule Frage bzw. funktioniert nicht

clearSchedule Frage bzw. funktioniert nicht

Scheduled Pinned Locked Moved JavaScript
16 Posts 5 Posters 1.2k 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.
  • B Offline
    B Offline
    blackeagle998
    wrote on last edited by blackeagle998
    #1

    Hallo zusammen,

    mit folgender Funktion ermittle ich die laufenden Schedules des Skriptes "garden_cycles":

    function showSchedules(){
        var list = getSchedules(true);
        var arr_temp = [];
    
        for (let i = 0; i < list.length; i++){
            if (list[i].scriptName){
                if (list[i].scriptName.indexOf('garden_cycles') + 1 != 0){
                    arr_temp.push(list[i]);
                }
            }
        }
        if (arr_temp.length !== 0){
            log(JSON.stringify(arr_temp));
        }
    }
    

    Das funktioniert super und liefert im log folgende Liste:

    [
    	{
    		"type" : "cron",
    		"pattern" : "10 08 * * *",
    		"scriptName" : "script.js.common.17_water.garden_cycles",
    		"id" : "cron_1623614174330_786"
    	},
    	{
    		"type" : "cron",
    		"pattern" : "12 08 * * *",
    		"scriptName" : "script.js.common.17_water.garden_cycles",
    		"id" : "cron_1623614174332_64324"
    	}
    ]
    

    Jetzt habe ich versucht über das Objekt bzw. die id in den Objekten das Schedule zu löschen, also in obiger Funktion statt

    arr_temp.push(list[i]);
    

    einfach den Löschbefehl

    clearSchedule(list[i]); 
    bzw. 
    clearSchedule(list[i].id);
    

    aber das Schedule bleibt trotzdem bestehen und taucht weiterhin in der Liste auf.
    Beende ich das Skript und starte es neu, sind die Schedules weg, so wie es sein soll.
    Kann die Funktion das nicht bzw. löscht clearSchedule die Schedules nicht wirklich oder ist das tatsächlich ein BUG?

    Javascript Adapter Version 5.1.3
    JS-Controller Version 3.3.11
    node.js Version 12.22.1

    paul53P 2 Replies Last reply
    0
    • B blackeagle998

      Hallo zusammen,

      mit folgender Funktion ermittle ich die laufenden Schedules des Skriptes "garden_cycles":

      function showSchedules(){
          var list = getSchedules(true);
          var arr_temp = [];
      
          for (let i = 0; i < list.length; i++){
              if (list[i].scriptName){
                  if (list[i].scriptName.indexOf('garden_cycles') + 1 != 0){
                      arr_temp.push(list[i]);
                  }
              }
          }
          if (arr_temp.length !== 0){
              log(JSON.stringify(arr_temp));
          }
      }
      

      Das funktioniert super und liefert im log folgende Liste:

      [
      	{
      		"type" : "cron",
      		"pattern" : "10 08 * * *",
      		"scriptName" : "script.js.common.17_water.garden_cycles",
      		"id" : "cron_1623614174330_786"
      	},
      	{
      		"type" : "cron",
      		"pattern" : "12 08 * * *",
      		"scriptName" : "script.js.common.17_water.garden_cycles",
      		"id" : "cron_1623614174332_64324"
      	}
      ]
      

      Jetzt habe ich versucht über das Objekt bzw. die id in den Objekten das Schedule zu löschen, also in obiger Funktion statt

      arr_temp.push(list[i]);
      

      einfach den Löschbefehl

      clearSchedule(list[i]); 
      bzw. 
      clearSchedule(list[i].id);
      

      aber das Schedule bleibt trotzdem bestehen und taucht weiterhin in der Liste auf.
      Beende ich das Skript und starte es neu, sind die Schedules weg, so wie es sein soll.
      Kann die Funktion das nicht bzw. löscht clearSchedule die Schedules nicht wirklich oder ist das tatsächlich ein BUG?

      Javascript Adapter Version 5.1.3
      JS-Controller Version 3.3.11
      node.js Version 12.22.1

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      @blackeagle998
      Bei mir funktioniert es (zumindest innerhalb des Scripts). Test:

      schedule('* * * * *', function() {
          log(getSchedules());
          clearSchedule(getSchedules()[0]);
      });
      

      liefert im Log nur einmal zur vollen Minute:

      13:27:00.014	info	javascript.0 (1573) script.js.common.Neuer_Test: [{'type':'cron','pattern':'* * * * *','scriptName':'script.js.common.Neuer_Test','id':'cron_1623669967011_10332'}]
      

      Keine weiteren Logs.

      @blackeagle998 sagte in clearSchedule Frage bzw. funktioniert nicht:

      taucht weiterhin in der Liste auf.

      clearSchedules.JPG

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • B blackeagle998

        Hallo zusammen,

        mit folgender Funktion ermittle ich die laufenden Schedules des Skriptes "garden_cycles":

        function showSchedules(){
            var list = getSchedules(true);
            var arr_temp = [];
        
            for (let i = 0; i < list.length; i++){
                if (list[i].scriptName){
                    if (list[i].scriptName.indexOf('garden_cycles') + 1 != 0){
                        arr_temp.push(list[i]);
                    }
                }
            }
            if (arr_temp.length !== 0){
                log(JSON.stringify(arr_temp));
            }
        }
        

        Das funktioniert super und liefert im log folgende Liste:

        [
        	{
        		"type" : "cron",
        		"pattern" : "10 08 * * *",
        		"scriptName" : "script.js.common.17_water.garden_cycles",
        		"id" : "cron_1623614174330_786"
        	},
        	{
        		"type" : "cron",
        		"pattern" : "12 08 * * *",
        		"scriptName" : "script.js.common.17_water.garden_cycles",
        		"id" : "cron_1623614174332_64324"
        	}
        ]
        

        Jetzt habe ich versucht über das Objekt bzw. die id in den Objekten das Schedule zu löschen, also in obiger Funktion statt

        arr_temp.push(list[i]);
        

        einfach den Löschbefehl

        clearSchedule(list[i]); 
        bzw. 
        clearSchedule(list[i].id);
        

        aber das Schedule bleibt trotzdem bestehen und taucht weiterhin in der Liste auf.
        Beende ich das Skript und starte es neu, sind die Schedules weg, so wie es sein soll.
        Kann die Funktion das nicht bzw. löscht clearSchedule die Schedules nicht wirklich oder ist das tatsächlich ein BUG?

        Javascript Adapter Version 5.1.3
        JS-Controller Version 3.3.11
        node.js Version 12.22.1

        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #3

        @blackeagle998
        Habe weiter getestet mit Schedule in einem anderen Skript in der gleichen Instanz: Das Schedule im anderen Skript wurde weder gestoppt noch aus der Liste entfernt. clearSchedule(list[i]) funktioniert offenbar nur innerhalb eines Skriptes.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        B 1 Reply Last reply
        0
        • paul53P paul53

          @blackeagle998
          Habe weiter getestet mit Schedule in einem anderen Skript in der gleichen Instanz: Das Schedule im anderen Skript wurde weder gestoppt noch aus der Liste entfernt. clearSchedule(list[i]) funktioniert offenbar nur innerhalb eines Skriptes.

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

          @paul53
          Herzlichen Dank, dass du dich damit beschäftigst!
          Ich habe jetzt aus meiner Sicht alle möglichen Varianten getestet, die Schedules bleiben bestehen.
          Also starte ich das komplette Script per runScript Befehl neu, das funktioniert, dann sind alle Schedules weg und ich kann die aktualisierten neu setzen. Nicht schön, aber es funktioniert.

          Hintergrund:
          Ich möchte für maximal 8 Wasserkreisläufe je drei Start/Endezeiten definieren können, macht also bei Vollausreizung 48 Schedules. Man könnte jetzt 48 Variablen anlegen, aber das ist mir dann nicht mehr dynamisch genug, da ich ja logischerweise erstmal mit einem Wasserkreislauf und einem bzw. zwei Start/Endezeiten starte. Diese Zeiten speichere ich in Objekten und erstelle daraus die Schedules.

          Irgendwie habe ich das Gefühl es gibt einen "charmanteren" Weg, ich sehe ihn nur momentan leider nicht.

          paul53P 1 Reply Last reply
          0
          • B blackeagle998

            @paul53
            Herzlichen Dank, dass du dich damit beschäftigst!
            Ich habe jetzt aus meiner Sicht alle möglichen Varianten getestet, die Schedules bleiben bestehen.
            Also starte ich das komplette Script per runScript Befehl neu, das funktioniert, dann sind alle Schedules weg und ich kann die aktualisierten neu setzen. Nicht schön, aber es funktioniert.

            Hintergrund:
            Ich möchte für maximal 8 Wasserkreisläufe je drei Start/Endezeiten definieren können, macht also bei Vollausreizung 48 Schedules. Man könnte jetzt 48 Variablen anlegen, aber das ist mir dann nicht mehr dynamisch genug, da ich ja logischerweise erstmal mit einem Wasserkreislauf und einem bzw. zwei Start/Endezeiten starte. Diese Zeiten speichere ich in Objekten und erstelle daraus die Schedules.

            Irgendwie habe ich das Gefühl es gibt einen "charmanteren" Weg, ich sehe ihn nur momentan leider nicht.

            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

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

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            B 2 Replies 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
              #6

              @paul53
              Momentan speichere ich die Schedules in einem Array Datenpunkt. Du meinst aber ein Array innerhalb des Skriptes, also bspw.

              var arr_schedules = [];
              

              Klar, funktionieren würde das auf jeden Fall und dann müsste doch auch clearSchedule auf die dort enthaltenen Schedules funktionieren.

              Das probiere ich mal die Tage, wenn ich Zeit dafür finde. Danke für die Idee!

              1 Reply Last reply
              0
              • 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ß!

                    M 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ß!

                      M Offline
                      M 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

                      haus-automatisierungH 1 Reply Last reply
                      0
                      • M 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

                        M 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.

                          M Offline
                          M 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

                          haus-automatisierungH 1 Reply Last reply
                          0
                          • M 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

                            M 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.

                              M Offline
                              M 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;
                                   };
                              }
                              
                              B 1 Reply Last reply
                              0
                              • M 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.

                                M 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.

                                  M Offline
                                  M 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

                                  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

                                  400

                                  Online

                                  32.4k

                                  Users

                                  81.3k

                                  Topics

                                  1.3m

                                  Posts
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Login

                                  • Don't have an account? Register

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Recent
                                  • Tags
                                  • Unread 0
                                  • Categories
                                  • Unreplied
                                  • Popular
                                  • GitHub
                                  • Docu
                                  • Hilfe