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. Rollladen Script mit Sunrise/Sunset und zusätzlicher Bedingung

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Rollladen Script mit Sunrise/Sunset und zusätzlicher Bedingung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 2.6k Aufrufe
  • Ä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 versuche grade mein Rollladen Script mit Blocky zu erstellen. Leider gibt es mehrere Bedingungen und ich komme nicht weiter! Ich habe mal mein aktuellen Stand angehangen.

    Das Rollladenscript soll bei Sonnenuntergang prüfen ob der Dummy Rollladenautomatik aktiviert ist (manuell angelegter Datenpunkt true/false), soll dann im nächsten Schritt prüfen ob der Dummy Rollo_Winter aktiviert ist und dann die Szene Winter_Rollo true setzen, falls der Winter Dummy false ist, soll er Sommer_Rollo true setzen. Ich nutze 2 versch. Szenen im Sommer/Winter weil im Winter zusätzlich der Balkon Rollo geschlossen werden soll, im Sommer bleibt der offen.

    So, nun zu meiner frage: In FHEM konnte man bei der Astrofunktion definieren, dass die Aktionen bei Sinrise, aber in keinem Fall vor einer bestimmten Uhrzeit auszuführen waren.

    Beispiel: Sommersunrise ist 5:40Uhr, wenn man nun als variable nicht-vor-uhrzeit 7:00Uhr eingestellt hatte, wurde die aktion auch erst um 7:00 ausgeführt. War sunrise dann 7:10Uhr, kam die aktion um 7:10. In die andere Richtung ging das genau so: Sunset bei 8:00, die aktion soll aber nicht nach 7:30 ausgeführt werden, d.h. jede aktion sunset später 7:30 wird bei 7:30uhr ausgeführt.

    Wie lässt sich das hier in iobroker umsetzen?!
    3800_unbenannt.png

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @LastActionHero:

      Sommersunrise ist 5:40Uhr, wenn man nun als variable nicht-vor-uhrzeit 7:00Uhr eingestellt hatte, wurde die aktion auch erst um 7:00 ausgeführt. War sunrise dann 7:10Uhr, kam die aktion um 7:10. In die andere Richtung ging das genau so: Sunset bei 8:00, die aktion soll aber nicht nach 7:30 ausgeführt werden, d.h. jede aktion sunset später 7:30 wird bei 7:30uhr ausgeführt.

      Wie lässt sich das hier in iobroker umsetzen?! `
      Mit Skriptvariablen, die zu den entsprechenden Zeitpunkten gesetzt werden.

      Wenn es nicht Blockly sein muss, dann etwa so:

      // Datenpunkt-IDs
      const idAuto = '...';  // Rolladenautomatik
      const idWinter = '...';
      const idWinterRauf = '...';  // Rolladen rauf im Winter
      const idSommerRauf = '...';  // Rolladen rauf im Sommer
      
      // Variablen werden bei Skriptstart initialisiert
      var auto = getState(idAuto).val;
      var winter = getState(idWinter).val;
      var tag = isAstroDay();
      var morgens = compareTime('7:00', '7:30', 'between');
      
      function Rollosrauf() {
         if(auto) {
            if(winter) setState(idWinterRauf, true);
            else setState(idSommerRauf, true);
         }
      }
      
      schedule('0 7 * * *', function() {
         morgens = true;
         if(tag) Rollosrauf();
      });
      
      schedule('30 7 * * *', function() {
         morgens = false;
         if(!tag) Rollosrauf();
      });
      
      schedule({astro: 'sunrise'}, function () {
         tag = true;
         if(morgens) Rollosrauf();
      });
      
      schedule({astro: 'sunset'}, function () {
         tag = false;
      });
      
      on(idAuto, function(dp) {
         auto = dp.state.val;
      });
      
      on(idWinter, function(dp) {
         winter = dp.state.val;
      });      
      
      

      Das muss natürlich noch um "Rollos runter" am Abend erweitert werden

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

      1 Antwort Letzte Antwort
      0
      • L Offline
        L Offline
        LastActionHero
        schrieb am zuletzt editiert von
        #3

        Hi!

        Habe mir das script übers wochenende angeschaut und auch grade nochmal. Ich verstehs nicht :) könntest du mir die einzelnen blöcke nochmal komentieren? Ich würde die logik gerne verstehen, das würde mir sehr weiter helfen!

        Variablen, Function, constanten sind klar! ich stelle mal meine Fragen bzw. meine Komentare direkt in den Code:

        schedule('0 7 * * *', function() {    /// Morgens um 7Uhr wird geprüft... 
           morgens = true;                       // Wozu das? warum hier nochmal die Zeitspanne zw. 7:00 und 7:30?
           if(tag) Rollosrauf();                    // wenn Uhrzeit nach Sunrise -> Rollos hochfahren
        });
        
        schedule('30 7 * * *', function() {      /// Morgens um 7:30Uhr wird geprüft... 
           morgens = false;                         // Verstehe ich auch nicht, warum ist 7:30 nun false?
           if(!tag) Rollosrauf();                    // Wenn zwar immernoch kein Sunrise, aber 7:30Uhr trotzdem Rollos hochfahren
        });
        
        schedule({astro: 'sunrise'}, function () {           // Bei sunrise ausführen....
           tag = true;                                               // Versteh ich auch nicht, warum wird nochmal Tag abgefragt? Wenn Sunrise ist, ist doch automatisch Tag
           if(morgens) Rollosrauf();                             // Wenn Zeit zwischen 7:00 und 7:30Uhr rollos hochfahren
        });
        
        schedule({astro: 'sunset'}, function () {   // Bei sunset nix machen?!
           tag = false;
        });
        
        on(idAuto, function(dp) {                        // was machen die beiden Blöcke hier?
           auto = dp.state.val;
        });
        
        on(idWinter, function(dp) {
           winter = dp.state.val;
        });     
        
        
        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          Das gesamte Skript wird nur ein einziges Mal bei Start des Skriptes ausgeführt. Wenn danach etwas passieren soll, werden Auslöser benötigt. Das können zeitliche Auslöser sein (schedule()) oder Auslöser, die auf Ereignisse reagieren(on()).

          schedule('0 7 * * *', function() {    // Morgens um 7Uhr wird ausgelöst
             morgens = true;                       // die Variable wird aktualisiert (morgens beginnt)
          
          
          schedule('30 7 * * *', function() {      // Morgens um 7:30Uhr wird ausgelöst
             morgens = false;                         // die Variable wird aktualisiert (morgens endet)
          
          
             tag = true;                          // Variable wird aktualisert (Tag beginnt), Variable tag wurde bei Sonnenuntergnag auf false gesetzt
          
          

          @LastActionHero:

          schedule({astro: 'sunset'}, function () {   // Bei sunset nix machen?!
             tag = false;  // Variable wird aktualisiert (Tag endet)
          });
          ```` `  
          

          @paul53:

          Das muss natürlich noch um "Rollos runter" am Abend erweitert werden `
          Die Bedingungen für "Rollos runter" am Abend hast Du noch nicht mitgeteilt.

          @LastActionHero:

          on(idAuto, function(dp) {                        // was machen die beiden Blöcke hier?
             auto = dp.state.val;
          });
          
          on(idWinter, function(dp) {  // Triggern bei Wertänderung
             winter = dp.state.val;    // winter = Wert des Datenpunktes
          });
          ```` `  
          

          Diese beiden Blöcke aktualisieren die Skripvariablen auto und winter genau dann, wenn sich der Wert des entsprechenden Datenpunktes ändert.

          Eine Beschreibung der Funktionen des Javascript-Adapters inkl. Auslöser findes Du auf https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md.

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

          1 Antwort Letzte Antwort
          0
          • L Offline
            L Offline
            LastActionHero
            schrieb am zuletzt editiert von
            #5

            mensch was eine komplexe logik, aber ich habs verstanden mit deiner Hilfe, Danke! :) naja eigentlich nicht komplex, aber da muss man erstmal drauf kommen wenn man das nicht tag für tag programmiert :)

            Ich habs mal versucht selbst um die abendliche Funktion zu erweitern! Habs jetzt so mal ans Laufen gebracht und bin gespannt obs klappt :)

            // Datenpunkt-IDs
            const idAuto = 'Dummyschalter.0.Automation.Rolloautomatik';  // Dummyschalter für Rolladenautomatik
            const idWinter = 'Dummyschalter.0.Automation.Rollo_winter';  // Dummyschalter für Winterbetrieb
            const idWinterRauf = 'scene.0.Rollo_hoch';  // Szene Rolladen rauf im Winter
            const idSommerRauf = 'scene.0.Rollo_hoch';  // Szene Rolladen rauf im Sommer
            const idWinterZu = 'scene.0.Rollo_winter_runter';  // Szene Rolladen runter im Winter
            const idSommerZu = 'scene.0.Rollo_sommer_runter';  // Szene Rolladen runter im Sommer
            
            // Variablen werden bei Skriptstart initialisiert
            var auto = getState(idAuto).val;
            var winter = getState(idWinter).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(winter) setState(idWinterRauf, true);
                  else setState(idSommerRauf, true);
               }
            }
            
            function Rollosrunter() {
               if(auto) {
                  if(winter) setState(idWinterZu, true);
                  else setState(idSommerZu, 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'}, function () {
               tag = false;
               if(abends) Rollosrunter();
            });
            
            on(idAuto, function(dp) {
               auto = dp.state.val;
            });
            
            on(idWinter, function(dp) {
               winter = 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

            664

            Online

            32.6k

            Benutzer

            82.3k

            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