Плавное включение RGB Led ленты на контроллере Magic Home - d51x/openhab-docs-russian GitHub Wiki
В примере используется обычная RGB лента и контроллер Magic Home (с оригинальной прошивкой), а так же биндинг Wifi Led (/settings/addons/binding-wifiled).
Для плавного включения будем использовать следующий скрипт (js), который будет повышать яркость ленты со скоростью 1% в секунду, т.е. полный цикл включения яркости до 100% будет длиться 100 сек (~ 1,5 минуты):
var counter, stateItem, colorItem, hue, brightness, color;
var thread = Java.type('java.lang.Thread')
stateItem = 'Bedroom1_LedStrip_State' // item состояния питания - включает/выклюает ленту
colorItem = 'Bedroom1_LedStrip_RgbColor' // color item
hue = 10 // hue цвета, диапазон от 0 до 360
counter = 0;
items.getItem(stateItem).sendCommand('ON');
while (items.getItem(stateItem).state != 'ON' && counter < 30) {
console.info(items.getItem(stateItem).state);
thread.sleep(200);
// console.info(('Ждем 100 мс, итерация ' + String(counter)));
counter = (typeof counter === 'number' ? counter : 0) + 1;
}
brightness = 0;
if (cache.private.exists('MyTimer') === false || cache.private.get('MyTimer').hasTerminated()) {
cache.private.put('MyTimer', actions.ScriptExecution.createTimer('MyTimer', time.ZonedDateTime.now().plusSeconds(0), function () {
if (brightness < 100) {
brightness = (typeof brightness === 'number' ? brightness : 0) + 1;
// console.info(('Меняем яркость на ' + String(brightness)));
color = [hue,',',100,',',brightness].join('');
// console.info(('новый цвет ' + String(color)));
items.getItem(colorItem).sendCommand(color);
if (cache.private.exists('MyTimer')) { cache.private.get('MyTimer').reschedule(time.ZonedDateTime.now().plusSeconds(1)); };
}
}));
};
Данный скрипт подходит, если вы пользуетесь родным пультом и кнопками включения/выключения, а так же если используете state item (power).
Минус данного подхода (использования state item) в том, что если лента была выключена, то ее необходимо предварительно включить. Лента установит тот цвет и ту яркость, которые были до выключения, а затем скрипт уберет яркость в 0 и будет ее увеличивать.
Так же данный скрипт не возможно запустить быстрее чем 1% в секунду, но скрипт не блокирующий поток, в этом его преимущество.
Если вы не выключаете ленту родным пультом или через state item, а выключаете ее через color item (да, помимом цвета hsb, он поддерживает и ON и OFF), то можно использовать следующий скрипт:
transition = 10000; // указывается в мсек полный интервал, за который лента должна выйти на полную яркость
toBrightness = 100; // желаемый уровень яркости в процентах
colorItem = 'Bedroom1_LedStrip_RgbColor'; // имя color item
hsb = items.getItem(colorItem).state;
brightness = 0
// brightness = hsb.split(',').slice(-1)[0]; // эту строку можно расскоментировать, если хотите плавно начать увеличивать яркость от текущей, а не от нуля
hue = 10 // hue цвета, диапазон от 0 до 360
// hue = hsb.split(',')[0]; // эту строку можно расскоментировать, если хотите плавно изменять яркость текущего цвета, который уже установлен на ленте
brightness = Number(brightness);
function dimmerLight() {
if (brightness < 100) {
console.info(('Brightness: ' + String(brightness)));
brightness = parseFloat(brightness) + 1;
hsb = parseFloat(hue).toFixed(0) + ',100,' + brightness
console.info('hsb', hsb)
items.getItem(colorItem).sendCommand(hsb);
} else {
clearInterval(intervalId)
intervalId = null
}
}
var delta = (toBrightness - brightness);
if (delta > 0) {
var step = transition / delta
console.info('transition step', step, 'ms')
var intervalId = setInterval(dimmerLight, step);
}
Данные скрипты можно использовать для включения подсветки утром при сработке будильника.
Например:
Правило сработает только в определенное время, одержащееся в item, в который мобильное приложение OpenHAB отправляет дату и время следующего будильника, который должен сработать.
Чтобы отсеч ненужные будильники, можно воспользоваться блоком But only if и указать интервал действия правила