NEWS
Uhrzeitabhängiges Dimmen mit Skript
-
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!@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.
-
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!@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; }
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden