Страница 1 из 1
Реализация световых эффектов на MD
Добавлено: Чт апр 05, 2018 11:30 am
kalina
Всем доброго времени суток!
Нужно решить следующую задачу...
1. Имеется набор светильников в количестве 12 шт. Каждый светильник нужно включать на 10 сек. Включение должно осуществляться друг за другом, например, включили первый, подождали 10 сек и выключили, сразу же включаем второй ... и т.д. Короче, типа "бегущая волна".
2. Все эти манипуляции должны осуществляться периодически. Причем должны меняться сценарии от простого последовательного переключения до включения попарно некоторых и т.д., так называемые "световые эффекты".
Я создал на базе Простых устройств 12 управляемых реле и связал их с "железом" (устройствами на базе MySensors). Могу по отдельности включать и выключать следующим способом : sg("Relay01.status",1); и sg("Relay01.status",0);
Вопрос заключается в следующем - как (имеется ввиду программирование на php, общие принципы программирования на С имею) и на каких ресурсах(таймерах и т.д.) правильно решить вышеизложенную задачу?
Всем откликнувшимся заранее спасибо!
Re: Реализация световых эффектов на MD
Добавлено: Чт апр 05, 2018 7:00 pm
xor
Мне кажется,на таймерах такое не прокатит на секундах. Может, стоит создать по скрипту на эффект, запускать скрипт отдельным потоком, а в скрипте явно прописать переключения релюх чередуя их sleep'ами по 10 с. Но это мои впечатления на моем железе, практика всё покажет. И отпишитесь как лучше
Отправлено с моего Redmi 4X через Tapatalk
Re: Реализация световых эффектов на MD
Добавлено: Пт апр 06, 2018 9:16 am
Krz
Я бы реализовал так:
В массив, используя свои обозначения, вносится порядок действий, а дальше программа их выполняет.
Для примера:
Код: Выделить всё
$deistvie=array('v01','p10','v02','q01','p10','v03','q02','p10','q03');
foreach($deistvie as $dn) {
$d=substr($dn,0,1);
$n=substr($dn,1);
switch ($d) {
case 'v':
sg('Relay'.$n.'.status',1);
break;
case 'q':
sg('Relay'.$n.'.status',0);
break;
case 'p':
sleep($n);
break;
}}
В данном примере обозначения следующие:
v - включить
q - выключить
p - пауза
В командах "v" и "q" числа обозначают номер устройства, в команде "p" - продолжительность паузы в секундах
Т.е.
'v01','p10','v02','q01','p10','v03','q02','p10','q3'
это включить 1 светильник, подождать 10 секунд, включить второй и выключить первый, подождать 10 секунд включить третий и выключить второй, подождать 10 секунд и выключить третий.
Соответственно, можно составить любой сценарий с одновременным включением разного числа светильников в разной последовательности, лишь бы система успевала им передавать команды.
Re: Реализация световых эффектов на MD
Добавлено: Пт апр 06, 2018 2:02 pm
slgeo
Не стоит это на МД выносить, лучше прописать в контроллере
Re: Реализация световых эффектов на MD
Добавлено: Пт апр 06, 2018 2:10 pm
serghei
Одного мало - надо два. Как
Тут рассказано. Управляется по сети.
Re: Реализация световых эффектов на MD
Добавлено: Пт апр 06, 2018 2:26 pm
nick7zmail
Я бы тоже прописал логику в контроллере, который рулит этими реле...а так - пишите функцию, у которой на входе номер светильника закидываете в /lib/ (функция формата, если просто, то - вырубаем всё, врубаем нужное). Пишите скрипт который к какому нить свойству прибавляет 1, если свойство больше максимума- скидывает на 0, и запускает вашу функцию. И далее ставит таймер на запуск себя же через 10 сек. Как это сделать - смотрите в теме "Таймер на 2 секунды".
Re: Реализация световых эффектов на MD
Добавлено: Сб апр 07, 2018 5:45 pm
kalina
Всем отозвавшимся огромное спасибо! Наибольшая ценность проекта Majordomo - это его участники
Проанализировав ваши предложения и оценив свой уровень знаний и адекватность, я реализовал следующую схему работы:
Каждую минуту по методу onNewMinute объекта ClockChime вызывается главный скрипт, в котором, в зависимости от времени, запускается или останавливается поток Cron. В каждом Cron потоке реализуется нужный световой эффект. Посчитав время выполнения такого эффекта можно настроить периодичность вызова потока. Проверил - всё работает отлично. Ниже приведу поясняющий рисунок.

- Lightings.png (91.31 КБ) 4845 просмотров
У меня нет отдельного контроллера, все работает в цепочке: [MDMSNode Lightings x 12pcs]<-->[MDMSGate]<-->[RPI3+MajorDomo]
Используется технология MySensors.
Re: Реализация световых эффектов на MD
Добавлено: Сб апр 07, 2018 10:17 pm
xor
Посчитав количество звёздочек, понял, что Крон - это не модуль МЖД Крон, а линуксовый планировщик, да?
Модуль Крон позволяет планировать с точностью до минуты.
Re: Реализация световых эффектов на MD
Добавлено: Вс апр 08, 2018 9:02 am
kalina
xor писал(а): ↑Сб апр 07, 2018 10:17 pm
Посчитав количество звёздочек, понял, что Крон - это не модуль МЖД Крон, а линуксовый планировщик, да?
Нет, всё-таки МЖД Крон. На картинке нашёл уже две очепятки - эти самые звездочки и, вместо двух подряд "if (timeIs("10:00"))", должно быть сначала так "if (timeIs("10:00"))", а потом так "if (timeIs("11:00"))".
xor писал(а): ↑Сб апр 07, 2018 10:17 pm
Модуль Крон позволяет планировать с точностью до минуты.
Этого вполне достаточно. Весь сценарий одного из эффектов, в зависимости от задержки переключения ламп, длится минуты (1...5). Например, 12 * 2сек (волна в одну сторону) + 12*2 сек (волна обратно) + задержка отправки комманд * 24 (время не определено, порядка сотен мс) ~ 60 сек. То есть настраиваем Cron на 1 минуту....