Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. clearSchedule Frage bzw. funktioniert nicht

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

clearSchedule Frage bzw. funktioniert nicht

Geplant Angeheftet Gesperrt Verschoben JavaScript
16 Beiträge 5 Kommentatoren 1.3k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antworten Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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 Online
                  haus-automatisierungH Online
                  haus-automatisierung
                  Developer Most Active
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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 Online
                      haus-automatisierungH Online
                      haus-automatisierung
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            661

                            Online

                            32.6k

                            Benutzer

                            82.0k

                            Themen

                            1.3m

                            Beiträge
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Anmelden

                            • Du hast noch kein Konto? Registrieren

                            • Anmelden oder registrieren, um zu suchen
                            • Erster Beitrag
                              Letzter Beitrag
                            0
                            • Home
                            • Aktuell
                            • Tags
                            • Ungelesen 0
                            • Kategorien
                            • Unreplied
                            • Beliebt
                            • GitHub
                            • Docu
                            • Hilfe