Плавное включение 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);  
}

Данные скрипты можно использовать для включения подсветки утром при сработке будильника.

Например:

image

Правило сработает только в определенное время, одержащееся в item, в который мобильное приложение OpenHAB отправляет дату и время следующего будильника, который должен сработать.

Чтобы отсеч ненужные будильники, можно воспользоваться блоком But only if и указать интервал действия правила

image