Практически в каждом обсуждении очередной реализации домашней автоматизациии возникает такой вопрос – «Хочу одну кнопку, чтобы уходя из дома ее нажал, и все выключилось\перевелось в режим энергосбережения».
Что ж, как говорил один известный персонаж, вызов принят.
Как я уже рассказывал, у меня используется RS485 и MODBUS. Кнопку можно сделать как мастером, так и слейвом. И у каждого решения есть свои недостатки. Если кнопка будет выступать мастером, то в приборной сети получается два мастер-устройства, если она будет слейвом, то задержка между нажатием и началом выполнения команд будет порядка минуты (частота опроса контроллеров серверной частью). Оба решения меня не устраивали, поэтому было найдено третье – кнопка будет работать через серверную часть. Этот вариант также не лишен недостатков, например, при отсутствии связи с сервером она просто не будет работать, но так как эта Большая Красная Кнопка выполняет вспомогательную функцию (свет можно выключить и обычными выключателями), то с этим решено было мириться. Также решено вместо одной кнопки сделать 4, вернее от одной до четырех. Если можно выключить все – то почему бы не иметь возможность все включить?
Итак, аппаратная часть
Берем кнопочный пост, прозрачные кнопки и выкидываем все лишнее.
Из прозрачных кнопок убираем родные переключатели и вклеиваем другие. Зачем этот колхоз? Что бы была возможность добавить светодиоды подсветки (изначально кнопки без подсветки, хотя и имеют прозрачную нажимную часть) и по еще одной простой причине – они по высоте не влезали в этот корпус.
Использован Wi-Fi модуль ESP8266-03 и PIC12F1840. Так как одновременные нажатия нескольких кнопок не планируются – то они подключены через резисторный делитель к входу АЦП, что позволило обойтись одним выводом МК. Светодиоды подключены по два к одному выходу – при высоком уровне горит один, при низком – второй, при переключении вывода на вход – выключены оба. Диодный мост, стабилизатор и перемычки – для разных вариантов питания, переменка, постоянка или аккумуляторы.
Разводим, травим, собираем. Не забываем добавить перемычки для удержания МК в сбросе и переводе ESP8266 в режим прошивки, так как выпаивать его неудобно. 11-контактный разъем – питание, кнопки и светодиоды, пятиконтактный – ICSP и по совместительству UART для прошивки и просмотра логов обмена.
Как это работает
При включении устройство регистрируется в домашней Wi-Fi сети, при нажатии кнопки – на сервер отправляется простейший GET запрос, при обработке которого серверный скрипт выбирает из базы список адресов контроллеров и записывает в регистры нужные значения. Так как кнопка также является полноценным контроллером со своим MODBUS адресом, то первой командой в ней обнуляется флаг нажатия кнопки, а последней – устанавливается флаг окончания выполнения последовательности команд, что индицируется светодиодами в кнопках. Нажали кнопку – загорелся светодиод, пришла первая команда из серии – замигал, пришла последняя – потух.
Консоль настроек.
Самих устройств в сети может быть несколько, количество кнопок в каждом устройстве от одной до четырех, количество команд настраивается и, в принципе, ничем не ограничено. Также в веб-интерфейсе есть виджет для групповых операций с таким же функционалом.
Пару слов о самих ESP8266. для макетирования я использовал ESP-01, в окончательном варианте – ESP-03. Прошил в них последнюю прошивку, 01 заработал нормально, 03 работал при первом включении, при последующих ругался на убитую прошивку. Как оказалось, на них было установлено разное количество памяти, на 01 – 8Мбит, на 03 – 4Мбита. Но никаких предупреждений софт для прошивки не выдавал, все шилось и почти работало. Вылечилось более старой прошивкой с одного известного сайта. Также, крайне желательно при старте делать сброс ESP и ПОСЛЕ сброса слать команду на отключение от точки доступа, а уже потом делать нормальную инициализацию. Иногда модуль при включении считал себя уже подключенным к точке доступа, и даже имел IP 104.111.109.* но естественно доступа к сети у него не было. Также при перенастройке UART-а на скорость отличную от дефолтной 115200 – периодически он эти настройки забывал.
Ссылки на предыдущие части:
Комментарии (27)
dimao79
16.12.2015 14:44+4Дело не в дружбе, не в общении и не в несовпадении протоколов у разных производителей Wi-Fi лампочек и розеток. Дело в том, что автоматизация — это не выкрутить обычную лампочку и вкрутить RGB-лампу с вайфаем. Или заменить обычный выключатель на беспроводной сенсорный, со встроенным датчиком температуры, влажности и датчиком движения.
Автоматизация по нормальному — это проектирование и создание всей системы от и до. И начинаться это должно на этапе голых стен. И тогда уже будет не важно дружит ли лампочка с розеткой, и не воюют ли два медиаплеера из-за разных музыкальных вкусов.
А это очень и очень дорого. И сложно. Куда проще прикрутить к ардуине две релюхи и датчик температуры, и сказать — я сделал умный дом. И на этом этапе обычно все останавливается. Потому что дальше — дорого. Или долго.
У меня это было — долго. И относительно дорого. Даже с учетом собственной разработки каждое устройство проходило минимум две-три итерации, проходило кучу доработок уже во время эксплуатации. До сих пор лежит ящик примерно 400х200х200 с горкой забитый полуразобранными платами первых версий всех этих вот устройств.yvm
16.12.2015 16:21Прогресс не стоит на месте.
dimao79
17.12.2015 09:01+3Конечно он на месте не стоит. То лампочки, блокирующие конкурентов, то термопот с блютузом, у которого радиус действия десять метров.
Движется прогресс, еще как движется!
Казалось бы, сделай ты тот же термопот с Wi-Fi клиентом, умеющим подключатся в домашнюю сеть, имеющим простейший веб-интерфейс и распиши пару-тройку команд для управления. Но это же скучно, лучше сделать фирменное приложение для вашего смартфона, а то что включить чайник удаленно займет в несколько раз больше времени, чем встать и нажать на нем одну кнопку, да и то удаленно — это в пределах комнаты, так то уже не важно. И так у всех, несовместимые протоколы, несовместимые интерфейсы, странный выбор физического уровня, но зато у каждого есть фирменное приложение для вашего смартфона.
Так что да, прогресс движется, но как-то не туда.
prostosergik
16.12.2015 18:41Есть же MQTT, чего бы его не совать на пару с ESP8266? Какие-то негативные побочные эффекты есть у этой связки? Да, может не в каждую розетку по своей есп-шке, но на группу розеток (2-6) и на каждую люстру, плюс 3-4 конечных «умных» устройства — это не должно вызывать существенных трудностей.
dimao79
17.12.2015 09:09MQTT — упрощённый сетевой протокол, работающий поверх TCP/IP
У меня межконтроллерная сеть — RS-485 и поверх него MODBUS, а переделывать все практически с нуля — неохота. Тем более все работает ))
Можно использовать ESP-шку c обвязкой для ухода от RS-485, сейчас ради спортивного интереса этим и занимаюсь, но менять полностью протокол — нет, там переписывать все с нуля и прошивки, и серверные скрипты, и клиентскую часть.yvm
17.12.2015 10:27Поверьте, оно того стоит! В mqtt отключение света можно реализовать как то так: /home/*/light/off
dimao79
17.12.2015 10:40ну а у меня — так :06FF00800000XX
Из-за этого менять все железо и серверный софт? Спасибо, но нет.
А через пару лет выйдет Новый, более лучший, более быстрый и более модный Super-MQTT, обновите ваше оборудование всего за 99,99$ за набор из трех ламп и годовую подписку на более лучшее приложение для вашего смартфона!prostosergik
17.12.2015 14:38У вас так:
Если кнопка будет выступать мастером, то в приборной сети получается два мастер-устройства, если она будет слейвом, то задержка между нажатием и началом выполнения команд будет порядка минуты
MQTT из-за минималистичности даже по EDGE отрабатывает сигнал за 0.3-0.5 сек с брокером в Америке. А если брокер будет локальный и работа по локальной сети без выхода в интернет — то задержку на глаз не различить. Это 65мкс пинга и пересылка 10-50 байт.dimao79
17.12.2015 14:49Вы к сожалению тоже невнимательно читали предыдущие части. Раз в минуту опрашиваются контроллеры в автоматическом режиме для сбора статистики. И поэтому, если делать кнопку слейвом на общей шине RS-485, которая объединяет контроллеры, то она, как слейв — будет молчать, пока ее не спросят. А спрашивают примерно раз в минуту.
Именно поэтому она сделана обычным клиентом, но работает через сервер в интернете, на котором живет веб-интерфейс, база, ведется статистика и обрабатываются события для рассылки оповещений.
Поэтому она срабатывает не через минуту, а сразу. Как и веб-интерфейс.
prostosergik
17.12.2015 14:39Мой вопрос скорее не к вам, а к Мировому Разуму. Если сейчас начать проектирование, не легче ли его сделать сразу на связке esp-шки и MQTT?
dimao79
17.12.2015 14:57Если Мировой Разум гарантирует вам, что китайцы на снимут esp-шки с производства через пару лет — делайте на них.
Я бы закладывался на возможность выбора между каким-либо проводным и беспроводным вариантом. Или вывел наружу голый UART и потом какой либо платой расширения уже выбирал что надо. Надо провода — подключили переходник UART-Ethetnet, не хотим проводов — подключили ту же ESP
А уж что вы будете гонять поверх IP — то уже ваше дело, хоть голосом говорите «Сири, включи мне свет в коридоре»prostosergik
17.12.2015 19:56Так затем нам и нужен MQTT, что даже если снимут, то при помощи Распбери за 5 баксов все то же самое реализуется на коленке по тому же самому протоколу, и единственное, что нужно будет заменить — это трубу между вайфаем и релюшкой которая включает розетку. А будет это SoC, есп-шка или какая-нибудь новая умная ATMega, это уже все равно, все остальное оборудование будет готово работать со конечным устройством сразу.
swelld
17.12.2015 13:29Простите, но это какой-то лютый велосипед из костылей.
Как Вам уже не раз намекнули, с помощью MQTT всё делается в разы проще и на порядок красивее.dimao79
17.12.2015 13:36Про то что это костыли — я сразу и сказал.
Про MQTT — давайте и вы мне расскажете как мне реализовать MQQT over RS-485 без костылей, велосипедов и полной переделки работающей системы.swelld
17.12.2015 13:45У вас обычный Wi-Fi. И обмен данными по ethernet — это легко и просто.
Я не сталкивался с RS-485, но думаю, что очень просто. Достаточно в Вашу и без того непростую систему добавить шлюз mqtt<->rs-485, который, как я думаю, легко сделать на базе Raspberry Pi, на которую, в свою очередь, повесить всё (mqtt-брокер, оупенхаб, файлопомойку, фтп, торрентокачалку, dlna-сервер, sip-атс (отсыл к предыдущей статье) и всё остальное, что душе угодно).
А в рамках mqtt всё примитивно: http://geektimes.ru/post/255404/dimao79
17.12.2015 14:10У вас обычный Wi-Fi.
Это только в этом устройстве.
Достаточно в Вашу и без того непростую систему добавить шлюз mqtt<->rs-485
И усложнить ее еще более.
mqtt-брокер, оупенхаб, sip-атс
Если мне это не нужно — зачем мне это все добавлять?
файлопомойку, фтп, торрентокачалку, dlna-сервер
А с этим замечательно справляется медиаплеер.
А в рамках mqtt всё примитивно: geektimes.ru/post/255404
Примитивно, но что мне это даст дополнительно? Какие дополнительные выгоды и преимущества?swelld
17.12.2015 14:17Ну, возможно Вам не придётся проектировать и паять собственные платы =)
У меня просто стоит такая же кнопка на выходе из квартиры, которая выключает весь свет, вентиляцию, телек (smarttv по ip), меняет температуру тёплых полов и т.п. И как-то у меня это всё гораздо проще сделано =)dimao79
17.12.2015 14:35Вы наверное невнимательно читали первую часть. А так же вторую и третью. Ответы на «не придётся проектировать и паять» — там.
swelld
17.12.2015 15:05Разводим, травим, собираем.
Вы правы. Я просто не считаю необходимым тратить время на чтение статьи про обычную кнопку для умного дома. Комментарии к таким статьям всегда значительно информативнее самой статьи.dimao79
17.12.2015 15:11Но при этом считаете необходимым тратить чужое время на ответы, которых бы не возникло, если обратить внимание что эта кнопка — часть системы, которая описана в нескольких статьях, ссылки на которые приведены в самой статье.
swelld
17.12.2015 15:13любая кнопка — часть какой-то системы =)
тяжело себе представить кнопку, которая самостоятельно выполняла бы какую-то функцию =)
alexhott
Наладил бы кто серию таких устройств с четырьмя кнопками с питанием и задешево.
может и пошла бы домашняя автоматизация в массы
alexpp
Автоматизация пойдет в массы, когда каждый разработчик свое устройство будет проектировать из расчета, что оно будет дружить с другими устройствами — от других изобретателей или с устройствами, собранными на заводах. Дружба — значит общение по единым протоколам, по тому же ZigBee. Как только устройства начнут проектироваться из расчета, что будет обязательно заимплеменчен какой-то подобный протокол — вот тогда и произойдет взрывной рост популярности устройств для умного дома.