Плавное включение/выключение RGB ленты
Добавлено: Сб янв 31, 2015 10:25 am
Завтра мне обещали установить nooLite контроллер для RGB ленты и захотелось мне ее плавно выключать. За день написал сценарий. Сценарий задумывался универсальным (что б был один для разных помещений). Делюсь кодом ВЫключателя:
Вроде как написано верно и должно работать (проверить в бою смогу только завтра), но может гуру PHP подскажут где код можно оптимизировать?
СпойлерПоказать
Код: Выделить всё
//разбираем параметры запуска
$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);
}