Доброго времени суток, прошу знающих людей подсказать, как лучше решить мою задачку, именно менять цвет подсветки за зеркалом и под тумбочкой в зависимости от температуры воды.
Имеется контроллер Vera plus UI7, Fibaro RGBW Controller и Fibaro Universal binary sensor с подключенным датчиком DS18B20 (в термоусадке). Датчик DS18B20 вставлен в канализацию и измеряет температуру уходящей воды. Если описывать данную задачу простыми словами, то хочется получить следующий эффект: Открыл воду, если вода горячая - плавно меняем цвет на красный, если холодная на синий.
Для этого я написал Lua скрипт:
local minColdWater=27 -- минимальная температура
local maxHotWater=40 -- минимальная температура
local coeff=maxHotWater-minColdWater
local lul_temp =luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 144) -- текущая температура с датчика
local lightLevel=luup.variable_get("urn:upnp-org:serviceId:Dimming1","LoadLevelStatus",62) -- текущая яркость синего цвета
-- Условие проверки температуры и яркости синего цвета, если температура ниже и яркость не равна 100% - заходим в условие
if (tonumber(lul_temp)<minColdWater and lightLevel~="100") then
luup.call_action("urn:upnp-org:serviceId:Dimming1", "SetLoadLevelTarget", {newLoadlevelTarget = 0}, 60)
luup.call_action("urn:upnp-org:serviceId:Dimming1", "SetLoadLevelTarget", {newLoadlevelTarget = 100}, 61)
luup.call_action("urn:upnp-org:serviceId:Dimming1", "SetLoadLevelTarget", {newLoadlevelTarget = 100}, 62)
end
-- Если температура воды выше минимальной
if (tonumber(lul_temp) > minColdWater) then
luup.call_action("urn:upnp-org:serviceId:Dimming1", "SetLoadLevelTarget", {newLoadlevelTarget = 0}, 61)
local brightesCoeff=((tonumber(lul_temp)-minColdWater)*100)/coeff -- вычисляем на сколько процентов необходимо убавить синий цвет и на сколько добавить красный
if (brightesCoeff~=100) then
luup.call_action("urn:upnp-org:serviceId:Dimming1", "SetLoadLevelTarget", {newLoadlevelTarget = 100-brightesCoeff}, 62)
luup.call_action("urn:upnp-org:serviceId:Dimming1", "SetLoadLevelTarget", {newLoadlevelTarget = 0+brightesCoeff}, 60)
end
end]
Данный код выполняется через сценарии 1 раз в секунду, все как бы работает, но меня не устраивает скорость реакции. Не могу понять, или RGBW контроллер медленно реагирует на скрипт, или на датчике так медленно меняется температура. Получаю желаемый эффект с задержкой.
Вопрос, как можно ускорить работу RGBW контроллера и Universal binnary sensor.
В Universal binnary sensor параметр №11 и №12 выставил 1. Но все равно иногда наблюдаю, как температура меняется очень резко, то есть была 26 градусов, а через 5 секунд становится сразу 38.
Может кто-то реализовывал нечто подобное? Как Что еще можно придумать?
Возможно ли это сделать через прямые ассоциации между universal binnary sensor и rgbw controller?
ПС: знаю, что код можно оптимизировать, этим займусь немного позже, сейчас моя задача понять как правильно реализовываются подобные задачи.