|
04.05.2015, 13:54 | #1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Модуль "Light Control"
Ну вот наконец то дождались!
Сегодня первый день продолжительного тестирования модуля "Light Control" Этот модуль логическое продолжение модуля "Light Switch", только с разницей в том, что модуль "Light Control" отслеживает изменение состояния пинов и если состояние пина было изменено физическим выключателем или с другого гаджета, то на всех подключенных к модулю устройствах, в веб интерфейсе выключатель сам перещелкнется Если до вечера не всплывут баги то постараюсь выложить Всю работу связанную с веб интерфейсом и скриптами провел Дмитрий(Prana) Я только написал скетч и демона обновляющего состояние пинов в БД Дмитрий постарался сделать веб интерфейс с минимальной нагрузкой на процессор роутера и с высокой степенью надежности, так как роутер должен будет трудится круглыми сутками Работает со всеми моделями ардуино, но ШИМ пока работает только в ардуинках с процессорами Atmega168/328 Но это временные ограничения по использованию ШИМ , вскоре вынесем эту функцию в библиотеку для всех остальных моделей, что бы не нагромождать скетч Модуль пока работает только с роутерами на процессоре AR71xx PHP код:
|
04.05.2015, 21:05 | #2 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Модуль "Light Control"
Выложил модуль в "test"
Модуль пока имеет два недостатка, но так как я сегодня улетаю на 10 дней и меня не будет все это время на форуме, то выкладываю модуль так как есть. Тестируйте, после приезда будем с Дмитрием продолжать работу над модулем На что стоит обратить внимание 1 - После изменений настроек модуля, в автозагрузке не изменяется номер порта, так что после ребута роутера, если был изменен порт, модуль работать не будет 2 - не уверен, но сегодня после каких то манипуляций демон исчез из процессов. Потом после перезапуска модуль проработал 5 часов и повторно этот баг пока не вылазил |
04.05.2015, 23:54 | #3 | |
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 |
Re: Модуль "Light Control"
Цитата:
Он работает на процессоре Ралинк 5350? |
|
05.05.2015, 00:04 | #4 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Модуль "Light Control"
Цитата:
|
|
05.05.2015, 18:45 | #5 |
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 |
Re: Модуль "Light Control"
|
05.05.2015, 13:44 | #6 |
Junior Member
Регистрация: 17.03.2015
Сообщений: 27
Вес репутации: 0 |
Re: Модуль "Light Control"
Немного о деталях реализации:
Arduino: скетч обрабатывает запросы на считывание статусов и управление нагрузками, приходящие из uart. Демон serd: демон (приложение-сервис), исполняющийся на роутере, и отвечающий за работу с uart. Он необходим для того, чтобы сразу несколько процессов не пытались работать с портом, и не происходило конфликтов из-за параллельного доступа. База данных sqlite: БД хранит состояния портов, которые в ней постоянно обновляются демоном. БД введена на перспективу того, чтобы в дальнейшем в нее также можно было писать логи состояний отдельных портов, и использовать для статистики/графиков. В варианте модуля БД съедает 300Кб. cgi-скрипты модуля: sh-скрипты, вызываемые веб-сервером и отвечающие за подготовку данных, выдаваемых клиентам. constructor.cgi - страница настроек, читающая настройки из файла settings, и позволяющая управлять списком портов и логикой их работы (выключатель, диммер, кнопка...). По результатам работы страницы формируется новый набор settings. generate.cgi - скрипт генерации index.cgi (основной страницы модуля), создающий страницу по настройкам из settings-файла Остальные cgi не делают страниц, а отдают данные для ajax-запросов: getstate.cgi - мониторит состояние запрошенного списка пинов, и отвечает клиентам обновленным состоянием. На входе принимает список пинов, и то состояние, которое уже есть у клиента (параметр old) recover.cgi - восстанавливает старую версию index.cgi из резервной копии switch.cgi - отправляет в порт запросы на управление выключателями, кнопками и триггером ("спусковым курком") uart.cgi - отправляет в порт запросы на управление диммером, возвращает новое показание в % Клиентская часть constructor.cgi выдает страницу конфигурации, в которой можно настроить набор пинов и логику их работы. Допускаются следующие виды элементов управления: Выключатель (кодируется как DSxx, например, DS07): элемент, имеющий состояния ВКЛ и ВЫКЛ, висящий на 7 пине Диммер (кодируется как DDxx): диммер, имеющий состояния от 0 до 255 (0 - выключен, 255 - полная яркость), отображающий слайдер регулировки и значение, приведенное к % от 0 до 100. Слайдер можно перемещать не только мышью, но и кнопками клавиатуры, если хочется плавности. Кнопка (кодируется как DB) - это кнопка без фиксации. В момент нажатия в порт отправляется 1, в момент отпускания - 0. Если страница открыта на смартфоне или планшете, то полноценно кнопка работать не будет: ввиду особенностей работы браузеров на тачскрине, происходит "клик", то есть нажатие и сразу же автоматическое отпускание. Триггер (кодируется как Db) отличается от кнопки тем, что в порт происходит отправка 1, и только в момент нажатия Отправка сигналов управления диммером происходит через асинхронный запрос к uart.cgi. Формат - "DD13=053". В ответ возвращается значение в %, которое подставляется к слайдеру. Управление выключателями и кнопками осуществляется через асинхронный запрос к switch.cgi. Формат - "DS07=001". Для кнопки при отпускании выдается 002. Ответы при этом не обрабатываются. Как работает считывание состояний пинов: демон serd осуществляет ежесекундный опрос пинов Arduino для получения актуального состояния. В случае изменения состояния какого-либо из портов он производит его запись в БД. Благодаря этому нет никаких конфликтов в чтении порта, а к БД может обращаться хоть сотня параллельных процессов. JavaScript на странице index.cgi создает ajax-запрос к getstate.cgi с временем ожидания ответа 30 секунд. Если ответ за это время не получен, открывается новый запрос с теми же параметрами. Если от сервера приходит ответ, то происходит изменение состояний элементов управления на странице, и снова открывается запрос к серверу. Серверная часть getstate.cgi работает следующим образом: при получении запроса начинает ежесекундно мониториться БД по выбранным пинам. Если изменений состояния нет, то сервер не отвечает клиенту, искусственно заставляя его ждать. Если же состояние какого-то из пинов изменилось, то сервер сразу же отдает ответ клиенту. Такой подход позволяет снизить количество запросов клиентов к серверу до двух в минуту, уменьшив как трафик, так и количество крутящихся на сервере процессов. С таким подходом и десяток клиентов не будут оказывать сколь-нибудь серьезной нагрузки на роутер. Благодаря использованию одного демона исключаются конфликты при доступе к порту. А БД в будущих версиях можно будет использовать для хранения истории состояний отедельных портов |
15.06.2015, 11:41 | #7 |
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 |
Re: Модуль "Light Control"
|
05.05.2015, 23:05 | #8 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Модуль "Light Control"
Работает со всеми контролерами.Только пока без
ШИМ |
06.05.2015, 19:19 | #9 |
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 |
Re: Модуль "Light Control"
|
06.05.2015, 20:32 | #10 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Модуль "Light Control"
Приеду 14.05.15 и будет видно
|
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
|
|