Эмитация рассвета

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Эмитация рассвета

Сообщение PAV » Пн окт 26, 2015 11:17 pm

Очень меня впечатлил световой будильник от филипс, который за 30 мин до подъема потихоньку увеличивает яркость лампы и создает как бы рассвет - вставать легче на порядок.
Решил ребенку сделать, тем более у него светодиодная подсветка.
Понятно, что могу тупо яркость желтого цвета увеличивать (как, кстати?), но хочется еще и правильный свет :)
Никто не разрабатывал тему, какого цвета рассвет ????? ;)
triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск
Благодарил (а): 107 раз
Поблагодарили: 7 раз

Re: Эмитация рассвета

Сообщение triada13 » Вт окт 27, 2015 8:26 am

Посмотри в Connect у msh555, он себе делал вроде.
Majordomo на Orange Pi Zero.
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Эмитация рассвета

Сообщение ErmolenkoM » Вт окт 27, 2015 9:07 am

nl_lowOn_SpalnyaBra

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

$brightness = gg("NooLiteD_SpalnyaBra.brightness");
if ($brightness > 0 && $brightness < 100){
  // вычислим новую яркость
  $brightness = $brightness + 5;  
  // установим яркость Бра в спальне
  callMethod("NooLiteD_SpalnyaBra.dim",array("value"=>$brightness));
  // запланируем запуск себя через 1 минуту.
  SetTimeOut("nl_lowOn_SpalnyaBra",'runScript("nl_lowOn_SpalnyaBra");', 60);
}elseif($brightness == 100){
  callMethod("NooLiteD_SpalnyaBra.dim",array("value"=>0));
}  
У меня НооЛайт. Лампочка - накиливания: у нее самый большой диапазон яркостей из всего что пробовал. Получается хорошо.
За это сообщение автора ErmolenkoM поблагодарили (всего 2):
triada13 (Вт окт 27, 2015 9:49 am) • foxvlad (Вт окт 27, 2015 2:52 pm)
Рейтинг: 2.33%
aka msh555
Cubian на Cubietruck, Connect
RomanSl
Сообщения: 2
Зарегистрирован: Чт окт 22, 2015 9:06 am
Благодарил (а): 0
Поблагодарили: 0

Re: Эмитация рассвета

Сообщение RomanSl » Ср окт 28, 2015 12:23 pm

Ноолайт если через шлюз работает там есть уже реализованная функция рассвет закат.
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Эмитация рассвета

Сообщение PAV » Чт окт 29, 2015 9:52 pm

В общем так. Как я писал в вопросе, у меня все подключено через ардуину.
Оказалось, что ШИМ естейственно регулирует яркость линейно, А НАШ ГЛАЗ видит изменение логарифмически. Т.е., если будет линейное изменение яркости, то нам все видится не плавно, резко набирается яркость, а потом не меняется.
Для того чтобы все было плавненько я использовал следующую формулу в экселе: =1/(1+EXP(((G2/21)-6)*-1))*240 где колонка G - это количество значений яркости. 240 -максимальное значение яркости (на самом деле 256, но разницы нет) Мне нужно имитировать рассвет, я взял 30 значений, загнал в oneminute и получил плавное увеличение яркости, набором за 30 минут. Т.е. за 30 мин до времени пробуждения лента включается и начинает потихоньку набирать яркость.
Объекту DimmerKid добавляем свойства Mas и Ind значения следующие:
Mas

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

a:31:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:1:"2";i:3;s:1:"3";i:4;s:1:"4";i:5;s:1:"6";i:6;s:1:"8";i:7;s:2:"12";i:8;s:2:"17";i:9;s:2:"24";i:10;s:2:"34";i:11;s:2:"46";i:12;s:2:"62";i:13;s:2:"81";i:14;s:3:"103";i:15;s:3:"126";i:16;s:3:"148";i:17;s:3:"168";i:18;s:3:"186";i:19;s:3:"200";i:20;s:3:"211";i:21;s:3:"220";i:22;s:3:"226";i:23;s:3:"230";i:24;s:3:"233";i:25;s:3:"235";i:26;s:3:"237";i:27;s:3:"238";i:28;s:3:"238";i:29;s:3:"239";i:30;s:3:"240";} 
Ind пусто

В OnNewMinute добавляем:

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

if (isWeekDay()) {
 if (gg("DimmerKid.Alarm") == 1){  // будильник
      if (timeBetween('6:47', '6:49')){
         sg("DimmerKid.Ind", 0);
    }
     if (timeBetween('6:45', '7:15')){ 
         $ar=unserialize(getGlobal('DimmerKid.Mas'));
         $ind = gg("DimmerKid.Ind");
         $indN = $ind + 1;
        sg("DimmerKid.Ind", $indN);
         $dd=$ar[$ind]; 
        sg('DimmerKid.Red', $dd);
             sg('DimmerKid.Green', $dd);
                 sg('DimmerKid.Blue', $dd);
        sg('DimmerKid.brightness', $dd);
        callMethod("DimmerKid.refresh"); // Отправка команды на ардуину и обновление всех свойств.
        
    }
     if (timeBetween('7:30', '7:35')){
     if (gg("DimmerKid.status") > 0){
          sg('DimmerKid.brightness', 0);
        callMethod("DimmerKid.refresh");
     }
    
    }
 }
}
 
В итоге получаем плавный рассвет белого цвета.
Теперь изучаю вопрос преобразования HSV -> RGB, чтобы можно было получить, например, желтый цвет разной яркости.
Обновлю, как что накопаю.
За это сообщение автора PAV поблагодарил:
flair (Вс фев 14, 2016 5:03 pm)
Рейтинг: 1.16%
OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Эмитация рассвета

Сообщение OlegM » Пт окт 30, 2015 4:00 am

Есть пару вопросов.

Поскольку в МД обновление сценариев происходит раз в секунду, написал внешний скрипт на php для того чтобы нарастание и убывание происходило плавно в течении 5-10 сек такого содержания:

mega_off.php

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

<?php

$ip = $_GET['ip'];
$pwd = $_GET['pwd'];
$port = $_GET['port'];
$pwm = $_GET['pwm'];

function get($ip, $pwd, $port, $pwm)
{
    file_get_contents("http://".$ip."/".$pwd."/?pt=$port&pwm=$pwm");
}
if ($port == 10 || $port == 12 || $port == 13) {
    while ($pwm > 0)
    {
        $pwm = $pwm - 5;
        get ($ip, $pwd, $port, $pwm);
        usleep(150000);
    }
}
?>
Создал сценарий такого типа:

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

getURL('http://localhost/mega_off.php?ip=10.10.100.10&pwd=sec&port=10&pwm='.getGlobal('MegaD1_10.value'),0);
 
Плавное выключение происходит приятно, но на время выключения света МД ждет завершение внешнего скрипта и только после того как он выполняется до конца дает что либо делать дальше. Как можно сделать, чтобы он выполнял скрипт, но при этом сам МД был доступен на выполнение других операций?

Второй вопрос

Хотелось бы с кнопки управлять димером при быстром нажатии включалось/выключалось, при долгом нажатии увеличивалось/уменьшалось пока не отпустишь. Кто нибудь писал такой метод? Если есть какие соображения по этому вопросу - поделитесь пожалуйста. :)


Управление Мега-Д.
Аватара пользователя
foxvlad
Сообщения: 287
Зарегистрирован: Пн сен 22, 2014 3:18 pm
Откуда: Сочи
Благодарил (а): 78 раз
Поблагодарили: 78 раз
Контактная информация:

Re: Эмитация рассвета

Сообщение foxvlad » Чт янв 14, 2016 1:06 am

OlegM писал(а):Есть пару вопросов.

Поскольку в МД обновление сценариев происходит раз в секунду, написал внешний скрипт на php для того чтобы нарастание и убывание происходило плавно в течении 5-10 сек такого содержания:

mega_off.php

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

<?php

$ip = $_GET['ip'];
$pwd = $_GET['pwd'];
$port = $_GET['port'];
$pwm = $_GET['pwm'];

function get($ip, $pwd, $port, $pwm)
{
    file_get_contents("http://".$ip."/".$pwd."/?pt=$port&pwm=$pwm");
}
if ($port == 10 || $port == 12 || $port == 13) {
    while ($pwm > 0)
    {
        $pwm = $pwm - 5;
        get ($ip, $pwd, $port, $pwm);
        usleep(150000);
    }
}
?>
Создал сценарий такого типа:

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

getURL('http://localhost/mega_off.php?ip=10.10.100.10&pwd=sec&port=10&pwm='.getGlobal('MegaD1_10.value'),0);
Плавное выключение происходит приятно, но на время выключения света МД ждет завершение внешнего скрипта и только после того как он выполняется до конца дает что либо делать дальше. Как можно сделать, чтобы он выполнял скрипт, но при этом сам МД был доступен на выполнение других операций?

Второй вопрос

Хотелось бы с кнопки управлять димером при быстром нажатии включалось/выключалось, при долгом нажатии увеличивалось/уменьшалось пока не отпустишь. Кто нибудь писал такой метод? Если есть какие соображения по этому вопросу - поделитесь пожалуйста. :)


Управление Мега-Д.
http://okbit.ru/blog/umnyij-dom/modul-d ... -volt.html

*** Сообщение запрещено. Спам в имени отправителя. Сообщение похоже на спам. ***
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Эмитация рассвета

Сообщение flair » Пн фев 15, 2016 12:44 am

тот же вопрос... пока мыслю отдать димирование будильника ардуине.... но как ей передать начало отсчета...?
снимет обработку с сервера.... а если циклами минутными(клокКраим) то и не надо городить часы реального времени для ардуины.
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Эмитация рассвета

Сообщение PAV » Пн фев 15, 2016 8:32 am

Обычно я все отдаю на мощности ардуины, но тут много вариантов использования светодиодной ленты, поэтому сценариями управляет Алиса.

А если такой же сценарий прописать на ардуине, то потом, просто отправляешь команду на начало будильника и он дальше сам крутится, главное обеспечить команды отмены и т.д. и обратную связь.

Я часы на ардуине так и не стал городить, просто Алиса периодически пересылает на ардуину сигнал точного времени.
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Эмитация рассвета

Сообщение flair » Пн фев 15, 2016 9:14 am

Осталось малое... Сгенерировать скетч)
Ответить