image
Практически в каждом обсуждении очередной реализации домашней автоматизациии возникает такой вопрос – «Хочу одну кнопку, чтобы уходя из дома ее нажал, и все выключилось\перевелось в режим энергосбережения».
Что ж, как говорил один известный персонаж, вызов принят.


Как я уже рассказывал, у меня используется RS485 и MODBUS. Кнопку можно сделать как мастером, так и слейвом. И у каждого решения есть свои недостатки. Если кнопка будет выступать мастером, то в приборной сети получается два мастер-устройства, если она будет слейвом, то задержка между нажатием и началом выполнения команд будет порядка минуты (частота опроса контроллеров серверной частью). Оба решения меня не устраивали, поэтому было найдено третье – кнопка будет работать через серверную часть. Этот вариант также не лишен недостатков, например, при отсутствии связи с сервером она просто не будет работать, но так как эта Большая Красная Кнопка выполняет вспомогательную функцию (свет можно выключить и обычными выключателями), то с этим решено было мириться. Также решено вместо одной кнопки сделать 4, вернее от одной до четырех. Если можно выключить все – то почему бы не иметь возможность все включить?

Итак, аппаратная часть


Берем кнопочный пост, прозрачные кнопки и выкидываем все лишнее.

image

Из прозрачных кнопок убираем родные переключатели и вклеиваем другие. Зачем этот колхоз? Что бы была возможность добавить светодиоды подсветки (изначально кнопки без подсветки, хотя и имеют прозрачную нажимную часть) и по еще одной простой причине – они по высоте не влезали в этот корпус.

image

Использован Wi-Fi модуль ESP8266-03 и PIC12F1840. Так как одновременные нажатия нескольких кнопок не планируются – то они подключены через резисторный делитель к входу АЦП, что позволило обойтись одним выводом МК. Светодиоды подключены по два к одному выходу – при высоком уровне горит один, при низком – второй, при переключении вывода на вход – выключены оба. Диодный мост, стабилизатор и перемычки – для разных вариантов питания, переменка, постоянка или аккумуляторы.

Разводим, травим, собираем. Не забываем добавить перемычки для удержания МК в сбросе и переводе ESP8266 в режим прошивки, так как выпаивать его неудобно. 11-контактный разъем – питание, кнопки и светодиоды, пятиконтактный – ICSP и по совместительству UART для прошивки и просмотра логов обмена.

image

Как это работает


При включении устройство регистрируется в домашней Wi-Fi сети, при нажатии кнопки – на сервер отправляется простейший GET запрос, при обработке которого серверный скрипт выбирает из базы список адресов контроллеров и записывает в регистры нужные значения. Так как кнопка также является полноценным контроллером со своим MODBUS адресом, то первой командой в ней обнуляется флаг нажатия кнопки, а последней – устанавливается флаг окончания выполнения последовательности команд, что индицируется светодиодами в кнопках. Нажали кнопку – загорелся светодиод, пришла первая команда из серии – замигал, пришла последняя – потух.

image
Консоль настроек.

Самих устройств в сети может быть несколько, количество кнопок в каждом устройстве от одной до четырех, количество команд настраивается и, в принципе, ничем не ограничено. Также в веб-интерфейсе есть виджет для групповых операций с таким же функционалом.

Пару слов о самих ESP8266. для макетирования я использовал ESP-01, в окончательном варианте – ESP-03. Прошил в них последнюю прошивку, 01 заработал нормально, 03 работал при первом включении, при последующих ругался на убитую прошивку. Как оказалось, на них было установлено разное количество памяти, на 01 – 8Мбит, на 03 – 4Мбита. Но никаких предупреждений софт для прошивки не выдавал, все шилось и почти работало. Вылечилось более старой прошивкой с одного известного сайта. Также, крайне желательно при старте делать сброс ESP и ПОСЛЕ сброса слать команду на отключение от точки доступа, а уже потом делать нормальную инициализацию. Иногда модуль при включении считал себя уже подключенным к точке доступа, и даже имел IP 104.111.109.* но естественно доступа к сети у него не было. Также при перенастройке UART-а на скорость отличную от дефолтной 115200 – периодически он эти настройки забывал.

Ссылки на предыдущие части:

Комментарии (27)


  1. alexhott
    16.12.2015 11:58
    +1

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


    1. alexpp
      16.12.2015 13:45
      +1

      Автоматизация пойдет в массы, когда каждый разработчик свое устройство будет проектировать из расчета, что оно будет дружить с другими устройствами — от других изобретателей или с устройствами, собранными на заводах. Дружба — значит общение по единым протоколам, по тому же ZigBee. Как только устройства начнут проектироваться из расчета, что будет обязательно заимплеменчен какой-то подобный протокол — вот тогда и произойдет взрывной рост популярности устройств для умного дома.


  1. dimao79
    16.12.2015 14:44
    +4

    Дело не в дружбе, не в общении и не в несовпадении протоколов у разных производителей Wi-Fi лампочек и розеток. Дело в том, что автоматизация — это не выкрутить обычную лампочку и вкрутить RGB-лампу с вайфаем. Или заменить обычный выключатель на беспроводной сенсорный, со встроенным датчиком температуры, влажности и датчиком движения.

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

    А это очень и очень дорого. И сложно. Куда проще прикрутить к ардуине две релюхи и датчик температуры, и сказать — я сделал умный дом. И на этом этапе обычно все останавливается. Потому что дальше — дорого. Или долго.

    У меня это было — долго. И относительно дорого. Даже с учетом собственной разработки каждое устройство проходило минимум две-три итерации, проходило кучу доработок уже во время эксплуатации. До сих пор лежит ящик примерно 400х200х200 с горкой забитый полуразобранными платами первых версий всех этих вот устройств.


    1. yvm
      16.12.2015 16:21

      Прогресс не стоит на месте.


      1. dimao79
        17.12.2015 09:01
        +3

        Конечно он на месте не стоит. То лампочки, блокирующие конкурентов, то термопот с блютузом, у которого радиус действия десять метров.
        Движется прогресс, еще как движется!

        Казалось бы, сделай ты тот же термопот с Wi-Fi клиентом, умеющим подключатся в домашнюю сеть, имеющим простейший веб-интерфейс и распиши пару-тройку команд для управления. Но это же скучно, лучше сделать фирменное приложение для вашего смартфона, а то что включить чайник удаленно займет в несколько раз больше времени, чем встать и нажать на нем одну кнопку, да и то удаленно — это в пределах комнаты, так то уже не важно. И так у всех, несовместимые протоколы, несовместимые интерфейсы, странный выбор физического уровня, но зато у каждого есть фирменное приложение для вашего смартфона.

        Так что да, прогресс движется, но как-то не туда.


    1. prostosergik
      16.12.2015 18:41

      Есть же MQTT, чего бы его не совать на пару с ESP8266? Какие-то негативные побочные эффекты есть у этой связки? Да, может не в каждую розетку по своей есп-шке, но на группу розеток (2-6) и на каждую люстру, плюс 3-4 конечных «умных» устройства — это не должно вызывать существенных трудностей.


      1. dimao79
        17.12.2015 09:09

        MQTT — упрощённый сетевой протокол, работающий поверх TCP/IP

        У меня межконтроллерная сеть — RS-485 и поверх него MODBUS, а переделывать все практически с нуля — неохота. Тем более все работает ))

        Можно использовать ESP-шку c обвязкой для ухода от RS-485, сейчас ради спортивного интереса этим и занимаюсь, но менять полностью протокол — нет, там переписывать все с нуля и прошивки, и серверные скрипты, и клиентскую часть.


        1. yvm
          17.12.2015 10:27

          Поверьте, оно того стоит! В mqtt отключение света можно реализовать как то так: /home/*/light/off


          1. dimao79
            17.12.2015 10:40

            ну а у меня — так :06FF00800000XX
            Из-за этого менять все железо и серверный софт? Спасибо, но нет.

            А через пару лет выйдет Новый, более лучший, более быстрый и более модный Super-MQTT, обновите ваше оборудование всего за 99,99$ за набор из трех ламп и годовую подписку на более лучшее приложение для вашего смартфона!


            1. yvm
              17.12.2015 10:49

              У вашего протокола есть сервис «гарантированная доставка один раз»


              1. dimao79
                17.12.2015 11:03

                MODBUS — это не мой протокол.
                У него есть гарантированный ответ на любую поступившую команду, а что уже с этим ответом делать дальше — это уже решать разработчику.


                1. yvm
                  17.12.2015 11:22

                  Вы правда думаете, что я не слышал MODBUS? )) Попробуйте mqtt в связке с http://nodered.org/


                  1. dimao79
                    17.12.2015 11:35

                    Хорошо, попробую, но только после того, как вы мне покажете реализацию MQTT over RS-485.


            1. prostosergik
              17.12.2015 14:38

              У вас так:

              Если кнопка будет выступать мастером, то в приборной сети получается два мастер-устройства, если она будет слейвом, то задержка между нажатием и началом выполнения команд будет порядка минуты


              MQTT из-за минималистичности даже по EDGE отрабатывает сигнал за 0.3-0.5 сек с брокером в Америке. А если брокер будет локальный и работа по локальной сети без выхода в интернет — то задержку на глаз не различить. Это 65мкс пинга и пересылка 10-50 байт.


              1. dimao79
                17.12.2015 14:49

                Вы к сожалению тоже невнимательно читали предыдущие части. Раз в минуту опрашиваются контроллеры в автоматическом режиме для сбора статистики. И поэтому, если делать кнопку слейвом на общей шине RS-485, которая объединяет контроллеры, то она, как слейв — будет молчать, пока ее не спросят. А спрашивают примерно раз в минуту.

                Именно поэтому она сделана обычным клиентом, но работает через сервер в интернете, на котором живет веб-интерфейс, база, ведется статистика и обрабатываются события для рассылки оповещений.

                Поэтому она срабатывает не через минуту, а сразу. Как и веб-интерфейс.


        1. prostosergik
          17.12.2015 14:39

          Мой вопрос скорее не к вам, а к Мировому Разуму. Если сейчас начать проектирование, не легче ли его сделать сразу на связке esp-шки и MQTT?


          1. dimao79
            17.12.2015 14:57

            Если Мировой Разум гарантирует вам, что китайцы на снимут esp-шки с производства через пару лет — делайте на них.

            Я бы закладывался на возможность выбора между каким-либо проводным и беспроводным вариантом. Или вывел наружу голый UART и потом какой либо платой расширения уже выбирал что надо. Надо провода — подключили переходник UART-Ethetnet, не хотим проводов — подключили ту же ESP

            А уж что вы будете гонять поверх IP — то уже ваше дело, хоть голосом говорите «Сири, включи мне свет в коридоре»


            1. prostosergik
              17.12.2015 19:56

              Так затем нам и нужен MQTT, что даже если снимут, то при помощи Распбери за 5 баксов все то же самое реализуется на коленке по тому же самому протоколу, и единственное, что нужно будет заменить — это трубу между вайфаем и релюшкой которая включает розетку. А будет это SoC, есп-шка или какая-нибудь новая умная ATMega, это уже все равно, все остальное оборудование будет готово работать со конечным устройством сразу.


  1. swelld
    17.12.2015 13:29

    Простите, но это какой-то лютый велосипед из костылей.
    Как Вам уже не раз намекнули, с помощью MQTT всё делается в разы проще и на порядок красивее.


    1. dimao79
      17.12.2015 13:36

      Про то что это костыли — я сразу и сказал.

      Про MQTT — давайте и вы мне расскажете как мне реализовать MQQT over RS-485 без костылей, велосипедов и полной переделки работающей системы.


      1. 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/


        1. dimao79
          17.12.2015 14:10

          У вас обычный Wi-Fi.

          Это только в этом устройстве.

          Достаточно в Вашу и без того непростую систему добавить шлюз mqtt<->rs-485

          И усложнить ее еще более.

          mqtt-брокер, оупенхаб, sip-атс

          Если мне это не нужно — зачем мне это все добавлять?

          файлопомойку, фтп, торрентокачалку, dlna-сервер

          А с этим замечательно справляется медиаплеер.

          А в рамках mqtt всё примитивно: geektimes.ru/post/255404

          Примитивно, но что мне это даст дополнительно? Какие дополнительные выгоды и преимущества?


          1. swelld
            17.12.2015 14:17

            Ну, возможно Вам не придётся проектировать и паять собственные платы =)
            У меня просто стоит такая же кнопка на выходе из квартиры, которая выключает весь свет, вентиляцию, телек (smarttv по ip), меняет температуру тёплых полов и т.п. И как-то у меня это всё гораздо проще сделано =)


            1. dimao79
              17.12.2015 14:35

              Вы наверное невнимательно читали первую часть. А так же вторую и третью. Ответы на «не придётся проектировать и паять» — там.


              1. swelld
                17.12.2015 15:05

                Разводим, травим, собираем.

                Вы правы. Я просто не считаю необходимым тратить время на чтение статьи про обычную кнопку для умного дома. Комментарии к таким статьям всегда значительно информативнее самой статьи.


                1. dimao79
                  17.12.2015 15:11

                  Но при этом считаете необходимым тратить чужое время на ответы, которых бы не возникло, если обратить внимание что эта кнопка — часть системы, которая описана в нескольких статьях, ссылки на которые приведены в самой статье.


                  1. swelld
                    17.12.2015 15:13

                    любая кнопка — часть какой-то системы =)
                    тяжело себе представить кнопку, которая самостоятельно выполняла бы какую-то функцию =)