Утром будильник становится на цыпочки, выглядывает в окно. Хоть он и помнит, какую обещали погоду, но проверить никогда не мешает. Если не учтешь погоду, можно ошибиться с пробуждением ребенка.
Кир Булычев «Остров ржавого генерала»
Жизнь человека привязана к естественным изменениям в живой природе, так называемым биоритмам, зависящим от времени суток, восхода и заката солнца и т.д. Порой очень сложно вставать по утрам, особенно в пасмурную погоду или зимой, когда солнечного света утром совсем мало. Может ли наш умный дом помочь легче просыпаться утром? Ответ да, если в изголовье кровати вмонтирована светодиодная RGB лента, интегрированная в систему управления умным домом. Содержание мелатони́на (гормона сна) напрямую зависит от солнечной активности. Моделирование естественного цикла восхода солнца позволит нам проще проснуться по утрам и быть в хорошем настроении. Итак, что для этого нужно?
Если залезть в википедию, то можно увидеть вот такую диаграмму, показывающую кривую натурального освещения. Но как же теперь разложить цветовую температуру в кельвинах на RGB компоненты? Еще немного поискав в интернете, наткнулся на статью Mitchell Charity, в которой он уже решил эту задачу.
Tc (K)RGB150025511102200255152412700255174844200255217171
Как мы видим, в интересующем нас диапазоне меняются только каналы G, B. Для установки необходимой цветовой температуры на светодиодной ленте необходимо масштабировать весь интересующий нас цветовой диапазон и яркости свечения по шкале от [1, 20] - времени нашего восхода в минутах для того, чтобы смоделировать естественный восход солнца, когда интенсивность света увеличивается, а длина волны постепенно уменьшается от красного к белому. Для этого есть простая формула: X'=(X-Xmin)/(Xmax-Xmin). Здесь X - изначальное значение параметра, X' - нормализованное. Осталось написать небольшой скрипт на DzVents для Domoticz для реализации нашей затеи.
return { on = { timer = {'every minute at 06:40-07:00 on mon,tue,wed,thu,fri'} }, data = { minutes_after_sunrise = { initial = 1 } }, execute = function(domoticz) local maxTime = 20 local minTemp = 506 local maxTemp = 1800 local minBr = 5 local maxBr = 60 if (domoticz.data.minutes_after_sunrise > maxTime) then domoticz.data.minutes_after_sunrise = maxTime end if (domoticz.time.matchesRule('at 06:40')) then domoticz.data.initialize('minutes_after_sunrise') end local Kelvin = math.floor((domoticz.data.minutes_after_sunrise-1)/(maxTime-1)*(maxTemp-minTemp)+minTemp) local Brightness = (domoticz.data.minutes_after_sunrise-1)/(maxTime-1)*(maxBr-minBr)+minBr -- перевод цветовой температуры в RGB local temp = Kelvin / 100 if (temp <= 66) then R = 255 G = 99.4708025861 * math.log(temp) - 161.1195681661 if (temp <= 19) then B = 0 else B = 138.5177312231 * math.log(temp-10) - 305.0447927307 end else R = 329.698727446 * math.pow((temp - 60), -0.1332047592) G = 288.1221695283 * math.pow((temp - 60), -0.0755148492 ) B = 255; end domoticz.log('Minute = '..domoticz.data.minutes_after_sunrise..' T Kelvin = '..Kelvin.. ' Brightness = '.. Brightness..' R='..R..' G='.. G..' B='..B) domoticz.devices('Bed Light').setColor(R, G, B, Brightness) domoticz.data.minutes_after_sunrise = domoticz.data.minutes_after_sunrise +1 end }
Скрипт вызывается каждую минуту утром в будние дни, постепенно изменяя оттенки RGB светодиодной ленты от красного света к теплому, меняя яркость, тем самым моделируя первые лучи восхода солнца. Шкалу яркости я выбрал от 5 до 60 (чтобы яркий свет утром не бил в глаза). Для корректного отображения цвета на светодиодной ленте в прошивке Sonoff-Tasmota необходимо включить LED гамма-коррекцию командой в консоле LedTable 1.
Вот так простым способом можно сделать нашу жизнь проще и комфортней.
Вот бы такое для HA, зачёт. Я так понимаю это можно применить не только к ленте но и к лампе?
Конечно можно, главное чтобы она была RGB, для WW ламп такое тоже можно сделать, но тогда скрипт надо немного изменить.
Есть видео пример?
То есть RGB настолько хорошо может имитировать температуру цвета, что не нужны светодиодные ленты по типу CW + WW (CCT)?