Страница 1 из 1

Плавное включение/выключение RGB ленты

Добавлено: Сб янв 31, 2015 10:25 am
Amarok
Завтра мне обещали установить nooLite контроллер для RGB ленты и захотелось мне ее плавно выключать. За день написал сценарий. Сценарий задумывался универсальным (что б был один для разных помещений). Делюсь кодом ВЫключателя:
СпойлерПоказать

Код: Выделить всё

//разбираем параметры запуска
$smooth  = $params['smooth'];   //плавно включать?
$silence = $params['silence']; //уведомлять голосом?
$room    = $params['room'];   //имя комнаты (ОБЯЗАТЕЛЬНО!)

//узнаем имя комнаты (должно быть указано в предложном падеже (пример: ГДЕ? В ЗАДНИЦЕ))
$roomname = gg($room.".Name");

//узнаем номер канала для управления
$channel=gg($room.".BackLightChannel");

//узнаем значения цветовых каналов
$R = gg($room.".BackLightColorR"); //красный
$G = gg($room.".BackLightColorR"); //зеленый
$B = gg($room.".BackLightColorR"); //синий

//узнаем с каким шагом изменять цвет
$step = gg($room.".BackLightStep");

//проверяем что бы шаг был не меньше 1
if ($step < "1" or $step = "") {  //если шаг менее 1 или не указан,
    sg($room.".BackLightStep",1); //то устанавливаем его значение в 1
    $step = "1";                  //и используем установленное значение дальше
}

//узнаем задержку в секундах между шагами изменения цвета
$stepdelay = gg($room.".BackLightStepDelay");

//проверяем что бы задержка между шагами была не меньше 1 секунды
if ($stepdelay < "1" or $stepdelay = "") { //если задержка менее 1 или не указана,
    sg($room.".BackLightStepDelay",1);     //то устанавливаем её значение в 1
    $stepdelay = "1";                      //и используем установленное значение дальше
}

//вводим переменную для использования в цикле плавного выключения
$stepdelaysmooth = $stepdelay;

//высчитываем количество повторов цикла для плавного выключения
if ($R <= $G) {
  $maxrep = $G;
} else {
  $maxrep = $R;
}
if ($maxrep <= $B) {
  $maxrep = $B;
}
//////////////////////////////////////////
if ($silence = "1" or $silence = "yes") {
  say("Выключаю подсветку в ".$roomname, 0);
} else {
  say("Выключаю подсветку в ".$roomname, 1);
}

if ($smooth = "1" or $smooth = "yes") {
  safe_exec('"d:\_majordomo\apps\nooLite\noolite.exe" -api -set_color_ch$channel -$R -$G -$B');
  for ($count = 0; $count < $maxrep; $count++) {
   $stepdelaysmooth = $stepdelaysmooth + $stepdelay;
   $R = $R - 1;
   $G = $G - 1;
   $B = $B - 1;
   if ($R <= 0) {
    $R = 0;
   }
   if ($G <= 0) {
    $G = 0;
   }
   if ($B <= 0) {
    $B = 0;
   }
  $nooLiteCall = "d:\_majordomo\apps\nooLite\noolite.exe -api -set_color_ch";
  $nooLiteCall.= $channel;
  $nooLiteCall.= " -";
  $nooLiteCall.= $R;
  $nooLiteCall.= " -";
  $nooLiteCall.= $G;
  $nooLiteCall.= " -";
  $nooLiteCall.= $B;
  $tasktimeoutname = $room;
  $tasktimeoutname.= "RGBLedSmoothOff";
  $tasktimeoutname.= $count;
  SetTimeOut($tasktimeoutname,"safe_exec($nooLiteCall);",$stepdelaysmooth);
  }

//  safe_exec('"d:\_majordomo\apps\nooLite\noolite.exe" -api -set_color_ch$channel -$R -$G -$B');
} else {
  $nooLiteCall = "d:\_majordomo\apps\nooLite\noolite.exe -api -off_ch";
  $nooLiteCall.= $channel;
  safe_exec($nooLiteCall);
} 
Вроде как написано верно и должно работать (проверить в бою смогу только завтра), но может гуру PHP подскажут где код можно оптимизировать?

Re: Плавное включение/выключение RGB ленты

Добавлено: Сб янв 31, 2015 3:25 pm
I_I_Imonder
Добрый день, она и так плавно выключается без кода).