Реализация световых эффектов на MD
Модератор: immortal
-
- Сообщения: 180
- Зарегистрирован: Пн фев 22, 2016 11:01 pm
- Благодарил (а): 29 раз
- Поблагодарили: 90 раз
Реализация световых эффектов на MD
Всем доброго времени суток!
Нужно решить следующую задачу...
1. Имеется набор светильников в количестве 12 шт. Каждый светильник нужно включать на 10 сек. Включение должно осуществляться друг за другом, например, включили первый, подождали 10 сек и выключили, сразу же включаем второй ... и т.д. Короче, типа "бегущая волна".
2. Все эти манипуляции должны осуществляться периодически. Причем должны меняться сценарии от простого последовательного переключения до включения попарно некоторых и т.д., так называемые "световые эффекты".
Я создал на базе Простых устройств 12 управляемых реле и связал их с "железом" (устройствами на базе MySensors). Могу по отдельности включать и выключать следующим способом : sg("Relay01.status",1); и sg("Relay01.status",0);
Вопрос заключается в следующем - как (имеется ввиду программирование на php, общие принципы программирования на С имею) и на каких ресурсах(таймерах и т.д.) правильно решить вышеизложенную задачу?
Всем откликнувшимся заранее спасибо!
Нужно решить следующую задачу...
1. Имеется набор светильников в количестве 12 шт. Каждый светильник нужно включать на 10 сек. Включение должно осуществляться друг за другом, например, включили первый, подождали 10 сек и выключили, сразу же включаем второй ... и т.д. Короче, типа "бегущая волна".
2. Все эти манипуляции должны осуществляться периодически. Причем должны меняться сценарии от простого последовательного переключения до включения попарно некоторых и т.д., так называемые "световые эффекты".
Я создал на базе Простых устройств 12 управляемых реле и связал их с "железом" (устройствами на базе MySensors). Могу по отдельности включать и выключать следующим способом : sg("Relay01.status",1); и sg("Relay01.status",0);
Вопрос заключается в следующем - как (имеется ввиду программирование на php, общие принципы программирования на С имею) и на каких ресурсах(таймерах и т.д.) правильно решить вышеизложенную задачу?
Всем откликнувшимся заранее спасибо!
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Реализация световых эффектов на MD
Мне кажется,на таймерах такое не прокатит на секундах. Может, стоит создать по скрипту на эффект, запускать скрипт отдельным потоком, а в скрипте явно прописать переключения релюх чередуя их sleep'ами по 10 с. Но это мои впечатления на моем железе, практика всё покажет. И отпишитесь как лучше
Отправлено с моего Redmi 4X через Tapatalk
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
- Krz
- Сообщения: 22
- Зарегистрирован: Сб мар 24, 2018 3:51 pm
- Откуда: Сибирь
- Благодарил (а): 2 раза
- Поблагодарили: 17 раз
Re: Реализация световых эффектов на MD
Я бы реализовал так:
В массив, используя свои обозначения, вносится порядок действий, а дальше программа их выполняет.
Для примера:
В данном примере обозначения следующие:
v - включить
q - выключить
p - пауза
В командах "v" и "q" числа обозначают номер устройства, в команде "p" - продолжительность паузы в секундах
Т.е.
'v01','p10','v02','q01','p10','v03','q02','p10','q3'
это включить 1 светильник, подождать 10 секунд, включить второй и выключить первый, подождать 10 секунд включить третий и выключить второй, подождать 10 секунд и выключить третий.
Соответственно, можно составить любой сценарий с одновременным включением разного числа светильников в разной последовательности, лишь бы система успевала им передавать команды.
В массив, используя свои обозначения, вносится порядок действий, а дальше программа их выполняет.
Для примера:
Код: Выделить всё
$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 секунд и выключить третий.
Соответственно, можно составить любой сценарий с одновременным включением разного числа светильников в разной последовательности, лишь бы система успевала им передавать команды.
- slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
- Благодарил (а): 139 раз
- Поблагодарили: 74 раза
Re: Реализация световых эффектов на MD
Не стоит это на МД выносить, лучше прописать в контроллере
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
CONNECT
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Реализация световых эффектов на MD
Одного мало - надо два. Как Тут рассказано. Управляется по сети.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Реализация световых эффектов на MD
Я бы тоже прописал логику в контроллере, который рулит этими реле...а так - пишите функцию, у которой на входе номер светильника закидываете в /lib/ (функция формата, если просто, то - вырубаем всё, врубаем нужное). Пишите скрипт который к какому нить свойству прибавляет 1, если свойство больше максимума- скидывает на 0, и запускает вашу функцию. И далее ставит таймер на запуск себя же через 10 сек. Как это сделать - смотрите в теме "Таймер на 2 секунды".
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 180
- Зарегистрирован: Пн фев 22, 2016 11:01 pm
- Благодарил (а): 29 раз
- Поблагодарили: 90 раз
Re: Реализация световых эффектов на MD
Всем отозвавшимся огромное спасибо! Наибольшая ценность проекта Majordomo - это его участники
Проанализировав ваши предложения и оценив свой уровень знаний и адекватность, я реализовал следующую схему работы:
Каждую минуту по методу onNewMinute объекта ClockChime вызывается главный скрипт, в котором, в зависимости от времени, запускается или останавливается поток Cron. В каждом Cron потоке реализуется нужный световой эффект. Посчитав время выполнения такого эффекта можно настроить периодичность вызова потока. Проверил - всё работает отлично. Ниже приведу поясняющий рисунок. У меня нет отдельного контроллера, все работает в цепочке: [MDMSNode Lightings x 12pcs]<-->[MDMSGate]<-->[RPI3+MajorDomo]
Используется технология MySensors.
Проанализировав ваши предложения и оценив свой уровень знаний и адекватность, я реализовал следующую схему работы:
Каждую минуту по методу onNewMinute объекта ClockChime вызывается главный скрипт, в котором, в зависимости от времени, запускается или останавливается поток Cron. В каждом Cron потоке реализуется нужный световой эффект. Посчитав время выполнения такого эффекта можно настроить периодичность вызова потока. Проверил - всё работает отлично. Ниже приведу поясняющий рисунок. У меня нет отдельного контроллера, все работает в цепочке: [MDMSNode Lightings x 12pcs]<-->[MDMSGate]<-->[RPI3+MajorDomo]
Используется технология MySensors.
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Реализация световых эффектов на MD
Посчитав количество звёздочек, понял, что Крон - это не модуль МЖД Крон, а линуксовый планировщик, да?
Модуль Крон позволяет планировать с точностью до минуты.
Модуль Крон позволяет планировать с точностью до минуты.
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 180
- Зарегистрирован: Пн фев 22, 2016 11:01 pm
- Благодарил (а): 29 раз
- Поблагодарили: 90 раз
Re: Реализация световых эффектов на MD
Нет, всё-таки МЖД Крон. На картинке нашёл уже две очепятки - эти самые звездочки и, вместо двух подряд "if (timeIs("10:00"))", должно быть сначала так "if (timeIs("10:00"))", а потом так "if (timeIs("11:00"))".
Этого вполне достаточно. Весь сценарий одного из эффектов, в зависимости от задержки переключения ламп, длится минуты (1...5). Например, 12 * 2сек (волна в одну сторону) + 12*2 сек (волна обратно) + задержка отправки комманд * 24 (время не определено, порядка сотен мс) ~ 60 сек. То есть настраиваем Cron на 1 минуту....