Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Uhrzeitabhängiges Dimmen mit Skript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Uhrzeitabhängiges Dimmen mit Skript

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      ft.knorr last edited by

      Hi Community, eine Frage... ich habe eine Leuchte deren Aktor kein uhrzeitabhängiges Dimmen unterstützt. Wir würdet ihr das mit Skript / Blockly lösen? Kann mit einen Hinweis geben?
      Vielen Dank!

      Asgothian T 2 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @ft.knorr last edited by

        @ft-knorr

        Du benötigst:

        • einen Datenpunkt / eine Variable die besagt wie schnell gedämmt werden soll. Je nach Hardware-Anbindung kann das ein fest am Gerät befindlicher Datenpunkt (Zigbee: TransitionTime) oder ein selbst erstellter sein.
        • Eine Funktion die Zeitgesteuert diesen Wert anpasst. Je nach dem wie feingliedrig das sein soll kannst du das per "schedule" machen oder dadurch das du bei jedem Schaltvorgang der Lampe auf die Uhrzeit schaust und den Wert anpasst.
        • Eine Funktion die das Dimmen selber realisiert. Auch hier ist das Wie sehr abhängig davon wie deine Hardware angesteuert werden kann.

        A.

        1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @ft.knorr last edited by ticaki

          @ft-knorr
          Hier ein Ausschnitt aus meinem Skript das etwas ähnliches tut. Der Code unten ist aus dem Skript kopiert das deutlich umfangreicher ist.

          EDIT: Dachte ich wäre im Unterforum Javascript. 🙂

          const DEBUG = false;
          const maxCt = 500;
          const minCt = 250;
          const maxBri = 190;
          const minBri = 80;
          const endHourOfFade = 22;//1-24 
          const startHourOfFade = 20 ;
          
          function main() {
                              var currentSunSet = getAstroDate("sunset");
                              if (timeIsBetween(new Date(),currentSunSet, endHourOfFade+':00') ) {
                                  if (DEBUG) console.log('Fade 1. Abschnitt: Sonnenuntergang:'+currentSunSet+' aktuelle Zeit:'+new Date());
                                  fadeLights(currentSunSet, new Date());
                                  myInterval = setInterval(function(){
                                      fadeLights(currentSunSet, new Date());
                                  },5000);
          
                                  // bleibe Nachts bei den zurückhaltenden Einstellungen, ab 4 Uhr ist die Automatik beendet
                              } else if (timeIsBetween(currentTime,endHourOfFade+':00','04:00')){
                                  if (DEBUG) console.log('Fade 2. Abschnitt');
                                  setState('deconz.0.lights.0017880103a0037c.action', '"on": true, "bri": '+minBri+', "ct": '+maxCt);
                              } else {
                                  setState('deconz.0.lights.0017880103a0037c.on', true);
                              }
          }
          
          function fadeLights (currentSunSet,currentTime) {
              var endTime = new Date(currentSunSet);
              endTime.setHours(endHourOfFade, 0, 0);
              endTime = currentSunSet < endTime ? endTime : new Date(new Date(currentSunSet).setMinutes(new Date(currentSunSet).getMinutes() + 15));
          
              var startTime = new Date(new Date(currentSunSet).setHours(startHourOfFade,0,0));
              startTime = currentSunSet < startTime ? startTime : new Date(currentSunSet);
           
              var currentDiff = (endTime.getTime() - currentTime.getTime());
              var currentMaxDiff = (endTime.getTime() - startTime.getTime());
              if (currentDiff > currentMaxDiff) currentDiff = currentMaxDiff;
          
              var ct = minCt + (maxCt - minCt) * (currentMaxDiff - currentDiff) / currentMaxDiff;
              ct = Math.round(ct);
              if (ct > maxCt) ct = maxCt;
          
              //Passe die Helligkeit an
              var bri = maxBri;
              if (currentTime > startTime) {
                  bri = minBri + (maxBri - minBri) * currentDiff / currentMaxDiff;
                  bri = Math.round(bri);
              }
              setState('deconz.0.lights.0017880103a0037c.action', '"on": true, "bri": '+bri+', "ct": '+ct);
          }
          
          // Hilfsfunktion:
          function timeIsBetween(fTime,start,ende) {//Dateobjekt,hh:mm,hh:mm
              var eTime = new Date(), sTime = new Date();
              if (typeof start == 'object') {
                  sTime = new Date(start);
              } else {
                  start = start.split(':');
                  sTime.setHours(parseInt(start[0]), parseInt(start[1]), 0);
              }
              if (typeof ende === 'object') {
                  eTime = new Date(ende);
              } else {
                  ende = ende.split(':');
                  eTime.setHours(parseInt(ende[0]), parseInt(ende[1]), 0);
              }
              if (sTime.getTime()>eTime.getTime()) {
                  if (fTime.getTime() < eTime.getTime()) sTime.setDate(eTime.getDate()-1);
                  if (fTime.getTime() > sTime.getTime()) eTime.setDate(sTime.getDate()+1);
              }
              if ( compareTime(sTime, eTime, 'between', fTime) ) return true;
              return false;
          }
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          862
          Online

          31.9k
          Users

          80.1k
          Topics

          1.3m
          Posts

          3
          3
          177
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo