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. X-Minuten nach/vor Sunset Funktion auslösen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

X-Minuten nach/vor Sunset Funktion auslösen

Geplant Angeheftet Gesperrt Verschoben JavaScript
10 Beiträge 3 Kommentatoren 643 Aufrufe 1 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.
  • L Offline
    L Offline
    LastActionHero
    schrieb am zuletzt editiert von
    #1

    Hi!

    ich habe mein Rolladenscript als Javascript mit Unterstützung hier im Forum realisiert. Ich selbst kann leider kein JS Programmieren und bin da auf Hilfe angewiesen. Das script sieht momentan wie folgt aus:

    // Datenpunkt-IDs
    const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
    const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
    const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
    const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
    const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
    const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
     
    // Variablen werden bei Skriptstart initialisiert
    var auto = getState(idAuto).val;
    var ausschlafen = getState(idAusschlafen).val;
    var tag = isAstroDay();
    var morgens = compareTime('6:30', '8:00', 'between');
    var abends = compareTime('17:00', '21:50', 'between');
     
    function Rollosrauf() {
       if(auto) {
          if(ausschlafen) setState(idAusschlafenRauf, true);
          else setState(idNormalRauf, true);
       }
    }
     
    function Rollosrunter() {
       if(auto) {
          if(ausschlafen) setState(idAusschlafenZu, true);
          else setState(idNormalZu, true);
       }
    }
     
    schedule('30 6 * * *', function() {
       morgens = true;
       if(tag) Rollosrauf();
    });
     
    schedule('0 8 * * *', function() {
       morgens = false;
       if(!tag) Rollosrauf();
    });
     
    schedule('0 17 * * *', function() {
       abends = true;
       if(!tag) Rollosrunter();
    });
     
    schedule('50 21 * * *', function() {
       abends = false;
       if(tag) Rollosrunter();
    });
     
    schedule({astro: 'sunrise'}, function () {
       tag = true;
       if(morgens) Rollosrauf();
    });
     
    schedule({astro: 'sunset', shift: 20}, function () {
       tag = false;
       if(abends) Rollosrunter();
    });
     
    on(idAuto, function(dp) {
       auto = dp.state.val;
    });
     
    on(idAusschlafen, function(dp) {
       ausschlafen = dp.state.val;
    }); 
    

    Im Grunde geht es darum innerhalb eines Zeitkorridors bei Sunset und Sunrise Szenen zu aktivieren bei denen die Rollläden hoch bzw. runter sind bzw. einige Zimmer im Ausschlaf-Modus ausgelassen werden. Das klappt auch vorzüglich.

    Nun ist es im Sommer so, dass man auch noch paar Minuten nach Sunset sie Rollos oben haben will, weil es halt noch ausreichend hell und warm ist - im Winter genau umgekehrt. Aktuell habe ich das mit shift: 20 für die Abends Funktion realisiert - klappt auch.
    Nun hätte ich aber gerne, dass das Offset (hier 20 Minuten) als Variable aus einem Custom-State von ioBroker genommen wird. Der state soll via Schieberegler in Lovelace einstellbar sein von -30 bis +30. Das müsste doch via getstate machbar sein, aber ich bekomme die Syntax nicht hin. Vieleicht könnt ihr mir helfen?
    Besten Dank vorab!

    bahnuhrB paul53P 3 Antworten Letzte Antwort
    0
    • L LastActionHero

      Hi!

      ich habe mein Rolladenscript als Javascript mit Unterstützung hier im Forum realisiert. Ich selbst kann leider kein JS Programmieren und bin da auf Hilfe angewiesen. Das script sieht momentan wie folgt aus:

      // Datenpunkt-IDs
      const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
      const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
      const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
      const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
      const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
      const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
       
      // Variablen werden bei Skriptstart initialisiert
      var auto = getState(idAuto).val;
      var ausschlafen = getState(idAusschlafen).val;
      var tag = isAstroDay();
      var morgens = compareTime('6:30', '8:00', 'between');
      var abends = compareTime('17:00', '21:50', 'between');
       
      function Rollosrauf() {
         if(auto) {
            if(ausschlafen) setState(idAusschlafenRauf, true);
            else setState(idNormalRauf, true);
         }
      }
       
      function Rollosrunter() {
         if(auto) {
            if(ausschlafen) setState(idAusschlafenZu, true);
            else setState(idNormalZu, true);
         }
      }
       
      schedule('30 6 * * *', function() {
         morgens = true;
         if(tag) Rollosrauf();
      });
       
      schedule('0 8 * * *', function() {
         morgens = false;
         if(!tag) Rollosrauf();
      });
       
      schedule('0 17 * * *', function() {
         abends = true;
         if(!tag) Rollosrunter();
      });
       
      schedule('50 21 * * *', function() {
         abends = false;
         if(tag) Rollosrunter();
      });
       
      schedule({astro: 'sunrise'}, function () {
         tag = true;
         if(morgens) Rollosrauf();
      });
       
      schedule({astro: 'sunset', shift: 20}, function () {
         tag = false;
         if(abends) Rollosrunter();
      });
       
      on(idAuto, function(dp) {
         auto = dp.state.val;
      });
       
      on(idAusschlafen, function(dp) {
         ausschlafen = dp.state.val;
      }); 
      

      Im Grunde geht es darum innerhalb eines Zeitkorridors bei Sunset und Sunrise Szenen zu aktivieren bei denen die Rollläden hoch bzw. runter sind bzw. einige Zimmer im Ausschlaf-Modus ausgelassen werden. Das klappt auch vorzüglich.

      Nun ist es im Sommer so, dass man auch noch paar Minuten nach Sunset sie Rollos oben haben will, weil es halt noch ausreichend hell und warm ist - im Winter genau umgekehrt. Aktuell habe ich das mit shift: 20 für die Abends Funktion realisiert - klappt auch.
      Nun hätte ich aber gerne, dass das Offset (hier 20 Minuten) als Variable aus einem Custom-State von ioBroker genommen wird. Der state soll via Schieberegler in Lovelace einstellbar sein von -30 bis +30. Das müsste doch via getstate machbar sein, aber ich bekomme die Syntax nicht hin. Vieleicht könnt ihr mir helfen?
      Besten Dank vorab!

      bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      schrieb am zuletzt editiert von bahnuhr
      #2

      @lastactionhero sagte in X-Minuten nach/vor Sunset Funktion auslösen:

      Nun hätte ich aber gerne, dass das Offset (hier 20 Minuten) als Variable aus einem Custom-State von ioBroker genommen wird. Der state soll via Schieberegler in Lovelace einstellbar sein von -30 bis +30. Das müsste doch via getstate machbar sein, aber ich bekomme die Syntax nicht hin. Vieleicht könnt ihr mir helfen?

      z.B.

      var off = getState("dein DP").val;
      
      

      getState hast du doch zig-fach in deinem Script drin.


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      L 1 Antwort Letzte Antwort
      0
      • bahnuhrB bahnuhr

        @lastactionhero sagte in X-Minuten nach/vor Sunset Funktion auslösen:

        Nun hätte ich aber gerne, dass das Offset (hier 20 Minuten) als Variable aus einem Custom-State von ioBroker genommen wird. Der state soll via Schieberegler in Lovelace einstellbar sein von -30 bis +30. Das müsste doch via getstate machbar sein, aber ich bekomme die Syntax nicht hin. Vieleicht könnt ihr mir helfen?

        z.B.

        var off = getState("dein DP").val;
        
        

        getState hast du doch zig-fach in deinem Script drin.

        L Offline
        L Offline
        LastActionHero
        schrieb am zuletzt editiert von
        #3

        @bahnuhr
        Ja, das stimmt, aber wird die variable dann auch jedes mal erneuert wenn einer den schieber betätigt oder nur beim start de scripts?
        Und wie muss die syntax dann hier lauten anstatt „shift: 20“? shift: ´off´ ?

        1 Antwort Letzte Antwort
        0
        • L LastActionHero

          Hi!

          ich habe mein Rolladenscript als Javascript mit Unterstützung hier im Forum realisiert. Ich selbst kann leider kein JS Programmieren und bin da auf Hilfe angewiesen. Das script sieht momentan wie folgt aus:

          // Datenpunkt-IDs
          const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
          const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
          const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
          const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
          const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
          const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
           
          // Variablen werden bei Skriptstart initialisiert
          var auto = getState(idAuto).val;
          var ausschlafen = getState(idAusschlafen).val;
          var tag = isAstroDay();
          var morgens = compareTime('6:30', '8:00', 'between');
          var abends = compareTime('17:00', '21:50', 'between');
           
          function Rollosrauf() {
             if(auto) {
                if(ausschlafen) setState(idAusschlafenRauf, true);
                else setState(idNormalRauf, true);
             }
          }
           
          function Rollosrunter() {
             if(auto) {
                if(ausschlafen) setState(idAusschlafenZu, true);
                else setState(idNormalZu, true);
             }
          }
           
          schedule('30 6 * * *', function() {
             morgens = true;
             if(tag) Rollosrauf();
          });
           
          schedule('0 8 * * *', function() {
             morgens = false;
             if(!tag) Rollosrauf();
          });
           
          schedule('0 17 * * *', function() {
             abends = true;
             if(!tag) Rollosrunter();
          });
           
          schedule('50 21 * * *', function() {
             abends = false;
             if(tag) Rollosrunter();
          });
           
          schedule({astro: 'sunrise'}, function () {
             tag = true;
             if(morgens) Rollosrauf();
          });
           
          schedule({astro: 'sunset', shift: 20}, function () {
             tag = false;
             if(abends) Rollosrunter();
          });
           
          on(idAuto, function(dp) {
             auto = dp.state.val;
          });
           
          on(idAusschlafen, function(dp) {
             ausschlafen = dp.state.val;
          }); 
          

          Im Grunde geht es darum innerhalb eines Zeitkorridors bei Sunset und Sunrise Szenen zu aktivieren bei denen die Rollläden hoch bzw. runter sind bzw. einige Zimmer im Ausschlaf-Modus ausgelassen werden. Das klappt auch vorzüglich.

          Nun ist es im Sommer so, dass man auch noch paar Minuten nach Sunset sie Rollos oben haben will, weil es halt noch ausreichend hell und warm ist - im Winter genau umgekehrt. Aktuell habe ich das mit shift: 20 für die Abends Funktion realisiert - klappt auch.
          Nun hätte ich aber gerne, dass das Offset (hier 20 Minuten) als Variable aus einem Custom-State von ioBroker genommen wird. Der state soll via Schieberegler in Lovelace einstellbar sein von -30 bis +30. Das müsste doch via getstate machbar sein, aber ich bekomme die Syntax nicht hin. Vieleicht könnt ihr mir helfen?
          Besten Dank vorab!

          bahnuhrB Online
          bahnuhrB Online
          bahnuhr
          Forum Testing Most Active
          schrieb am zuletzt editiert von
          #4

          @lastactionhero sagte in X-Minuten nach/vor Sunset Funktion auslösen:

          Lovelace

          kenn ich nicht.


          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
          Danke.
          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
          ScreenToGif :https://www.screentogif.com/downloads.html

          1 Antwort Letzte Antwort
          0
          • L LastActionHero

            Hi!

            ich habe mein Rolladenscript als Javascript mit Unterstützung hier im Forum realisiert. Ich selbst kann leider kein JS Programmieren und bin da auf Hilfe angewiesen. Das script sieht momentan wie folgt aus:

            // Datenpunkt-IDs
            const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
            const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
            const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
            const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
            const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
            const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
             
            // Variablen werden bei Skriptstart initialisiert
            var auto = getState(idAuto).val;
            var ausschlafen = getState(idAusschlafen).val;
            var tag = isAstroDay();
            var morgens = compareTime('6:30', '8:00', 'between');
            var abends = compareTime('17:00', '21:50', 'between');
             
            function Rollosrauf() {
               if(auto) {
                  if(ausschlafen) setState(idAusschlafenRauf, true);
                  else setState(idNormalRauf, true);
               }
            }
             
            function Rollosrunter() {
               if(auto) {
                  if(ausschlafen) setState(idAusschlafenZu, true);
                  else setState(idNormalZu, true);
               }
            }
             
            schedule('30 6 * * *', function() {
               morgens = true;
               if(tag) Rollosrauf();
            });
             
            schedule('0 8 * * *', function() {
               morgens = false;
               if(!tag) Rollosrauf();
            });
             
            schedule('0 17 * * *', function() {
               abends = true;
               if(!tag) Rollosrunter();
            });
             
            schedule('50 21 * * *', function() {
               abends = false;
               if(tag) Rollosrunter();
            });
             
            schedule({astro: 'sunrise'}, function () {
               tag = true;
               if(morgens) Rollosrauf();
            });
             
            schedule({astro: 'sunset', shift: 20}, function () {
               tag = false;
               if(abends) Rollosrunter();
            });
             
            on(idAuto, function(dp) {
               auto = dp.state.val;
            });
             
            on(idAusschlafen, function(dp) {
               ausschlafen = dp.state.val;
            }); 
            

            Im Grunde geht es darum innerhalb eines Zeitkorridors bei Sunset und Sunrise Szenen zu aktivieren bei denen die Rollläden hoch bzw. runter sind bzw. einige Zimmer im Ausschlaf-Modus ausgelassen werden. Das klappt auch vorzüglich.

            Nun ist es im Sommer so, dass man auch noch paar Minuten nach Sunset sie Rollos oben haben will, weil es halt noch ausreichend hell und warm ist - im Winter genau umgekehrt. Aktuell habe ich das mit shift: 20 für die Abends Funktion realisiert - klappt auch.
            Nun hätte ich aber gerne, dass das Offset (hier 20 Minuten) als Variable aus einem Custom-State von ioBroker genommen wird. Der state soll via Schieberegler in Lovelace einstellbar sein von -30 bis +30. Das müsste doch via getstate machbar sein, aber ich bekomme die Syntax nicht hin. Vieleicht könnt ihr mir helfen?
            Besten Dank vorab!

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

            @LastActionHero
            Versuche mal:

            var shift = getState(idShift).val;
            on(idShift, function(dp) {
               shift = dp.state.val;
            });
            schedule({astro: 'sunset', shift: shift}, function () {
            

            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

            L 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @LastActionHero
              Versuche mal:

              var shift = getState(idShift).val;
              on(idShift, function(dp) {
                 shift = dp.state.val;
              });
              schedule({astro: 'sunset', shift: shift}, function () {
              
              L Offline
              L Offline
              LastActionHero
              schrieb am zuletzt editiert von
              #6

              @paul53 Hallo Paul, danke für deine Unterstützung! Ich habe den Code nun in das Script eingearbeitet, der Code ist unten angefügt. Allerdings wird dann die Funktion scheinbar nicht ausgelöst. Die Rolläden schließen um 21:50 wie im Script als Endzeitpunkt angegeben, aber nicht um 21:20+X Minuten (ich hatte 15 ausgewählt, hätten also um 21:35 schließen sollen).

              Passt denn das Script so? Oder kann es am Typ des Datenpunkts Rollo_offset liegen? Diesen hatte ich als Zahl eingestellt. Habe nun mal auf String umgestellt und warte damit den morgigen Abend ab.

              // Datenpunkt-IDs
              const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
              const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
              const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
              const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
              const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
              const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
              const idRolloOffset = '0_userdata.0.Rollo_offset'; // Offset Schieberegler
              
              // Variablen werden bei Skriptstart initialisiert
              var auto = getState(idAuto).val;
              var ausschlafen = getState(idAusschlafen).val;
              var tag = isAstroDay();
              var morgens = compareTime('6:30', '8:00', 'between');
              var abends = compareTime('17:00', '21:50', 'between');
              var rollooffset = getState(idRolloOffset).val;
              
              function Rollosrauf() {
                 if(auto) {
                    if(ausschlafen) setState(idAusschlafenRauf, true);
                    else setState(idNormalRauf, true);
                 }
              }
               
              function Rollosrunter() {
                 if(auto) {
                    if(ausschlafen) setState(idAusschlafenZu, true);
                    else setState(idNormalZu, true);
                 }
              }
               
              schedule('30 6 * * *', function() {
                 morgens = true;
                 if(tag) Rollosrauf();
              });
               
              schedule('0 8 * * *', function() {
                 morgens = false;
                 if(!tag) Rollosrauf();
              });
               
              schedule('0 17 * * *', function() {
                 abends = true;
                 if(!tag) Rollosrunter();
              });
               
              schedule('50 21 * * *', function() {
                 abends = false;
                 if(tag) Rollosrunter();
              });
               
              schedule({astro: 'sunrise'}, function () {
                 tag = true;
                 if(morgens) Rollosrauf();
              });
               
              schedule({astro: 'sunset', shift: rollooffset}, function () {
                 tag = false;
                 if(abends) Rollosrunter();
              });
               
              on(idAuto, function(dp) {
                 auto = dp.state.val;
              });
               
              on(idAusschlafen, function(dp) {
                 ausschlafen = dp.state.val;
              });
              
              on(idRolloOffset, function(dp) {
                 rollooffset = dp.state.val;
              });
              
              paul53P 1 Antwort Letzte Antwort
              0
              • L LastActionHero

                @paul53 Hallo Paul, danke für deine Unterstützung! Ich habe den Code nun in das Script eingearbeitet, der Code ist unten angefügt. Allerdings wird dann die Funktion scheinbar nicht ausgelöst. Die Rolläden schließen um 21:50 wie im Script als Endzeitpunkt angegeben, aber nicht um 21:20+X Minuten (ich hatte 15 ausgewählt, hätten also um 21:35 schließen sollen).

                Passt denn das Script so? Oder kann es am Typ des Datenpunkts Rollo_offset liegen? Diesen hatte ich als Zahl eingestellt. Habe nun mal auf String umgestellt und warte damit den morgigen Abend ab.

                // Datenpunkt-IDs
                const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
                const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
                const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
                const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
                const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
                const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
                const idRolloOffset = '0_userdata.0.Rollo_offset'; // Offset Schieberegler
                
                // Variablen werden bei Skriptstart initialisiert
                var auto = getState(idAuto).val;
                var ausschlafen = getState(idAusschlafen).val;
                var tag = isAstroDay();
                var morgens = compareTime('6:30', '8:00', 'between');
                var abends = compareTime('17:00', '21:50', 'between');
                var rollooffset = getState(idRolloOffset).val;
                
                function Rollosrauf() {
                   if(auto) {
                      if(ausschlafen) setState(idAusschlafenRauf, true);
                      else setState(idNormalRauf, true);
                   }
                }
                 
                function Rollosrunter() {
                   if(auto) {
                      if(ausschlafen) setState(idAusschlafenZu, true);
                      else setState(idNormalZu, true);
                   }
                }
                 
                schedule('30 6 * * *', function() {
                   morgens = true;
                   if(tag) Rollosrauf();
                });
                 
                schedule('0 8 * * *', function() {
                   morgens = false;
                   if(!tag) Rollosrauf();
                });
                 
                schedule('0 17 * * *', function() {
                   abends = true;
                   if(!tag) Rollosrunter();
                });
                 
                schedule('50 21 * * *', function() {
                   abends = false;
                   if(tag) Rollosrunter();
                });
                 
                schedule({astro: 'sunrise'}, function () {
                   tag = true;
                   if(morgens) Rollosrauf();
                });
                 
                schedule({astro: 'sunset', shift: rollooffset}, function () {
                   tag = false;
                   if(abends) Rollosrunter();
                });
                 
                on(idAuto, function(dp) {
                   auto = dp.state.val;
                });
                 
                on(idAusschlafen, function(dp) {
                   ausschlafen = dp.state.val;
                });
                
                on(idRolloOffset, function(dp) {
                   rollooffset = dp.state.val;
                });
                
                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #7

                @lastactionhero sagte: kann es am Typ des Datenpunkts Rollo_offset liegen? Diesen hatte ich als Zahl eingestellt.

                Es muss eine Zahl sein.
                Der Wert für "shift" wird nur bei Skriptstart übernommen. Für eine dynamische Anpassung während der Laufzeit müsste schedule() gestoppt und neu generiert werden, was aber mit Astro-Schedules nicht möglich ist.
                Man muss also ein "normales" Schedule mit Uhrzeit verwenden, wobei die Uhrzeit einmal pro Tag per getAstroDate('sunset') und Korrektur um "shift" ermittelt wird.

                EDIT: Etwa so:

                var sunset;
                
                function sunsetWithOffset() {
                    const sunsetOff = getAstroDate('sunset').getTime() + 60000 * getState(idRolloOffset).val;
                    const minute = new Date(sunsetOff).getMinutes().toString();
                    const hour = new Date(sunsetOff).getHours().toString();
                    sunset = schedule(minute + ' ' + hour + ' * * *', function() {
                        tag = false;
                        if(abends) Rollosrunter();
                    });
                }
                
                sunsetWithOffset(); // Skriptstart
                
                on(idRolloOffset, function(dp) { // Offset wird geändert
                    clearSchedule(sunset); 
                    sunsetWithOffset();
                });
                
                schedule('0 14 * * *', function() { // einmal täglich vor Ereignis
                    clearSchedule(sunset); 
                    sunsetWithOffset();
                });
                

                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

                L 1 Antwort Letzte Antwort
                1
                • paul53P paul53

                  @lastactionhero sagte: kann es am Typ des Datenpunkts Rollo_offset liegen? Diesen hatte ich als Zahl eingestellt.

                  Es muss eine Zahl sein.
                  Der Wert für "shift" wird nur bei Skriptstart übernommen. Für eine dynamische Anpassung während der Laufzeit müsste schedule() gestoppt und neu generiert werden, was aber mit Astro-Schedules nicht möglich ist.
                  Man muss also ein "normales" Schedule mit Uhrzeit verwenden, wobei die Uhrzeit einmal pro Tag per getAstroDate('sunset') und Korrektur um "shift" ermittelt wird.

                  EDIT: Etwa so:

                  var sunset;
                  
                  function sunsetWithOffset() {
                      const sunsetOff = getAstroDate('sunset').getTime() + 60000 * getState(idRolloOffset).val;
                      const minute = new Date(sunsetOff).getMinutes().toString();
                      const hour = new Date(sunsetOff).getHours().toString();
                      sunset = schedule(minute + ' ' + hour + ' * * *', function() {
                          tag = false;
                          if(abends) Rollosrunter();
                      });
                  }
                  
                  sunsetWithOffset(); // Skriptstart
                  
                  on(idRolloOffset, function(dp) { // Offset wird geändert
                      clearSchedule(sunset); 
                      sunsetWithOffset();
                  });
                  
                  schedule('0 14 * * *', function() { // einmal täglich vor Ereignis
                      clearSchedule(sunset); 
                      sunsetWithOffset();
                  });
                  
                  L Offline
                  L Offline
                  LastActionHero
                  schrieb am zuletzt editiert von
                  #8

                  @paul53 ah, verstehe, das ist eine wertvolle Information, da hätte ich lange mit Astro hantieren können! D.h. dieser Schedule kommt weg, stattdessen dein Scriptblock an diese stelle.

                  schedule({astro: 'sunset', shift: rollooffset}, function () {
                     tag = false;
                     if(abends) Rollosrunter();
                  });
                  

                  Dann müsste auch der Zeitkorridor noch funktionieren - also zwischen 6:30-8:00 und 17:00-21:50?

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • L LastActionHero

                    @paul53 ah, verstehe, das ist eine wertvolle Information, da hätte ich lange mit Astro hantieren können! D.h. dieser Schedule kommt weg, stattdessen dein Scriptblock an diese stelle.

                    schedule({astro: 'sunset', shift: rollooffset}, function () {
                       tag = false;
                       if(abends) Rollosrunter();
                    });
                    

                    Dann müsste auch der Zeitkorridor noch funktionieren - also zwischen 6:30-8:00 und 17:00-21:50?

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    @lastactionhero sagte: Scriptblock an diese stelle.

                    Dieser Skriptblock funktioniert nur bei Skriptstart. Eine dynamische Veränderung von shift während der Laufzeit erfolgt nicht. Deshalb ist die aufwändigere Version mit der täglichen Ermittlung der Uhrzeit erforderlich.

                    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

                    L 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @lastactionhero sagte: Scriptblock an diese stelle.

                      Dieser Skriptblock funktioniert nur bei Skriptstart. Eine dynamische Veränderung von shift während der Laufzeit erfolgt nicht. Deshalb ist die aufwändigere Version mit der täglichen Ermittlung der Uhrzeit erforderlich.

                      L Offline
                      L Offline
                      LastActionHero
                      schrieb am zuletzt editiert von
                      #10

                      @paul53 ich möchte mich ganz recht herzlich für deine Hilfe bedanken! Ich habe zeitbedingt ein paar Tage gebraucht das Script umzusetzen, aber das ganze klappt wirklich wie geschmiert! Dankeschön!

                      hier nochmal der aktuelle Stand:

                      // Datenpunkt-IDs
                      const idAuto = '0_userdata.0.Rollladenautomatik';  // Dummyschalter für Rolladenautomatik
                      const idAusschlafen = '0_userdata.0.Rollo_Ausschlafen';  // Dummyschalter für Ausschlaf-Modus
                      const idAusschlafenRauf = 'scene.0.Rollladen.Rollo_ausschlafen_hoch';  // Szene Rolladen rauf bei Ausschlafen
                      const idNormalRauf = 'scene.0.Rollladen.Rollo_normal_hoch';  // Szene Rolladen rauf normalbetrieb
                      const idAusschlafenZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter bei Ausschlafen
                      const idNormalZu = 'scene.0.Rollladen.Rollo_normal_runter';  // Szene Rolladen runter Normalbetrieb
                      const idRolloOffset = '0_userdata.0.Rollo_offset'; // Offset Schieberegler
                      
                      // Variablen werden bei Skriptstart initialisiert
                      var auto = getState(idAuto).val;
                      var ausschlafen = getState(idAusschlafen).val;
                      var tag = isAstroDay();
                      var morgens = compareTime('6:30', '8:00', 'between');
                      var abends = compareTime('17:00', '22:15', 'between');
                      var rollooffset = getState(idRolloOffset).val;
                      
                      function Rollosrauf() {
                         if(auto) {
                            if(ausschlafen) setState(idAusschlafenRauf, true);
                            else setState(idNormalRauf, true);
                         }
                      }
                       
                      function Rollosrunter() {
                         if(auto) {
                            if(ausschlafen) setState(idAusschlafenZu, true);
                            else setState(idNormalZu, true);
                         }
                      }
                       
                      schedule('30 6 * * *', function() {
                         morgens = true;
                         if(tag) Rollosrauf();
                      });
                       
                      schedule('0 8 * * *', function() {
                         morgens = false;
                         if(!tag) Rollosrauf();
                      });
                       
                      schedule('0 17 * * *', function() {
                         abends = true;
                         if(!tag) Rollosrunter();
                      });
                       
                      schedule('15 22 * * *', function() {
                         abends = false;
                         if(tag) Rollosrunter();
                      });
                       
                      schedule({astro: 'sunrise'}, function () {
                         tag = true;
                         if(morgens) Rollosrauf();
                      });
                       
                      var sunset;
                       
                      function sunsetWithOffset() {
                          const sunsetOff = getAstroDate('sunset').getTime() + 60000 * getState(idRolloOffset).val;
                          const minute = new Date(sunsetOff).getMinutes().toString();
                          const hour = new Date(sunsetOff).getHours().toString();
                          sunset = schedule(minute + ' ' + hour + ' * * *', function() {
                              tag = false;
                              if(abends) Rollosrunter();
                          });
                      }
                       
                      sunsetWithOffset(); // Skriptstart
                       
                      on(idRolloOffset, function(dp) { // Offset wird geändert
                          clearSchedule(sunset); 
                          sunsetWithOffset();
                      });
                       
                      schedule('0 14 * * *', function() { // einmal täglich vor Ereignis
                          clearSchedule(sunset); 
                          sunsetWithOffset();
                      });
                       
                      on(idAuto, function(dp) {
                         auto = dp.state.val;
                      });
                       
                      on(idAusschlafen, function(dp) {
                         ausschlafen = dp.state.val;
                      });
                      
                      on(idRolloOffset, function(dp) {
                         rollooffset = dp.state.val;
                      });
                      
                      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

                      791

                      Online

                      32.6k

                      Benutzer

                      82.2k

                      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