Превращаем роутер в XBee-to-Ethernet Gateway

    Сразу скажу, чего вы в этой статье не найдете:
    • Подробного описания протокола Zigbee
    • Подробного описания трансиверов XBee
    • Теории и практических рекомендаций по построению mesh drop-in сетей
    • Инструкций по работе с Linux
    • Инструкций по перепрошивке роутеров и по работе с прошивками от Олега и Open-WRT

    Ворнинг для дизайнеров: в посте есть картинка, лучше не смотрите на нее. От необходимости писать подобный ворнинг для программистов я себя избавил, избежав соблазна опубликовать Python-скрипты и thml-код страницы, показанной на картинке (шаблон генерился в Word).

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

    XBee


    Я всегда думал, что XBee/Zigbee /Прочее-bee – это такой беспроводной удлинитель UART-a. Поэтому мне всегда было непонятно – почему же оно такое дорогое. Но тут товарищ дал мне два модуля XBee на «поиграться», я притащил их домой, немедленно угробил один из них при перепрошивке, обратился в саппорт Digi (производителя XBee: www.digi.com), несмотря на высокий уровень поддержки умудрился неправильно выполнить инструкции, закрыл кейс и, собственно остался с «горелой» железячкой на руках, которую надо было как-то возвращать. Как всегда пришлось копаться, разбираться, материться и биться головой об стол. В результате многодневных плясок с бубном я узнал, что:
    • Zigbee – это протокол такой. Для маломощных беспроводных меш-сетей
    • XBee – это бренд, беспроводные модули для коммуникации с использованием разных протоколов (Zigbee, Wi-Fi, BlueTooth и т.д.)
    • У меня в руках оказались милливатные модули XBee Pro (Series 2, ZB-функциональность)
    • XBee может не только прокидывать УАРТ (в «прозрачном» или «АПИ» режимах), у него также есть GPIO/аналоговые входы, что позволяет удаленно дергать ногами (их пять, что ли) или считывать значения на ногах – в терминологии Arduino digitalRead(т.е. HIGH/LOW) и analogRead(т.е. АЦП – напряжение на ноге). Т.е. к определенным образом настроенной XBEE можно подключить питание и датчик (например, датчик температуры), и она будет сама или по запросу слать значение напряжения координатору
    • В Zigbee-сетях устройства могут выполнять одну из следующих ролей:
      • Координатор – может быть только один в сети, никогда не спит – главный по палате
      • Роутер – может быть много в сети, никогда не спит, служит узловой точкой и может выполнять функции оконечного устройства
      • Оконечное устройство – чаще всего кормится от автономного источника питания, в этом случае львиную долю времени дрыхнет, периодически просыпаясь и пингуя своего хозяина (роутера или координатора) и проверяя, нет ли для него сообщений. Может выполнять мелкую работу навроде той, что описана в предыдущем пункте, т.е. дергать ногами или семплить входы.
    • XBee реально сложно убить, если не превышать максимальные значения по напряжению. В нее встроен бутлоадер и если что-то пошло не так, можно комбинацией из трех пальцев войти в режим бутлоадера и вернуть модуль в дефолтное состояние или прошить нужную прошивку

    В общем все хорошо, есть у нас сеть датчиков и исполнителей, все сообщения между ними роутятся, друг с другом они общаются через роутеры, координатор сидит сверху и за всем этим наблюдает. Проблема в том, что у нас, человеков, нет точки входа в эту сеть. Простейшее решение: USB-UART конвертер, включаем комп, запускаем терминал или специальную программу (например программу от digi: X-CTU или другие, типа XBee-Operator, или вообще сами пишем скрипты на питоне, на сайте digi.com есть подключаемые модули для работы с XBee). Плохо то, что если мы хотим иметь информацию о состоянии датчиков в удобоваримом виде всегда и отовсюду, то комп, даже с запущенным веб-сервером, выпяченным в интернет – не самое изящное решение.

    Роутер


    Более изящное решение – использовать постоянно включенный и смотрящий напрямую в инет роутер. Подойдет любой роутер, имеющий УАРТ и к консоли которого есть доступ. Я использую старый добрый ASUS wl500gP с прошивкой от Олега (wl500g.info), более модно сейчас использовать TP-Link, DLink и прочие махонькие коробочки, жрущие на порядок меньше энергии и на которых можно распаять UART и вкорячить туда Open-WRT прошивку. Как это делать – в гугл. Вот пример: wiki.openwrt.org/ru/toh/tp-link/tl-mr3420. Интересуют пункты Установка и Последовательный порт.

    Собираем


    ВАЖНО: XBee – это 3,3В устройство. Если подать на него 5В, оно запечется.
    Берем XBee, подключаем к USB-UART переходнику, втыкаем в комп, запускаем X-CTU, прошиваем нужной прошивкой. Простейший вариант – ZB24 Coordinator AT (да, к этому моменту уже надо знать, чем отличаются прошивки для XBee, какая роль устройства нужна и т.д. Нужно почитать в инете, начать неплохо отсюда: The Unofficial XBee FAQ (version 1.3) (англ) или с книжки Robert Faludi — Building Wireless Sensor Networks with ZigBee, XBee, Arduino, and Processing. Отсоединяем XBee от переходника и от компа, и подключаем к последовательному порту роутера.
    XBee Router
    VDD (pin 1) +3,3V
    VSS (pin 10) GND
    DOUT (pin 2) RX
    DIN (pin 3) TX

    Проверяем работоспособность. Запускаем minicom, подключаемся к порту, на котором висит XBee на скорости, на которую настроен XBee (у меня –D/dev/ttyS1 –S115200). Входим в режим АТ-команд: нажимаем три раза «+» (и больше ничего!). Через секунду XBee должна ответить “OK”,, что значит, что она вошла в режим команд. Из режима можно выйти, введя команду ATCN<ввод> или подождав 10 секунд. В принципе на этом все, можно уже с этим портом делать все, что угодно. Например, прописать в автозагрузку ser2net, и замапить /dev/ttyS1 на TCP-порт, например 2000. После этого с любой машины в сети можно подключиться к роутеру телнетом или поставить софт на машине, которая замапит обратно удаленный ТСП-порт на локальный сериал.

    Пример


    У меня на роутере стоит Python-интерпретатор. Раз в час cron дергает несколько скриптов. Один из скриптов открывает последовательный порт, на котором висит XBee и отправляет запрос на удаленное устройство (которое стоит в ванной на стояке): ‘gv’. Устройство отвечает строками: ‘hw25.054cw0.000\r\n’ и ‘v8.72\r\n’, что значит, что счетчик горячей воды накрутил 25.054 кубометра воды, холодный накрутил 0 кубометров (конечно, он же не подключен), и что напряжение батареи 8,72 вольта. Скрипт берет эти значения и пишет их в файл. Другой скрипт, который cron дергает раз в пять минут, пакует эти значения в html-шаблон и сохраняет как index.html в папке /opt/share/www/. На роутере также поднят lighttpd, который при обращении на адрес роутера отдает эту статическую страницу. Таким образом я и моя жена можем в любой момент узнать показания водосчетчиков не вставая с дивана.


    Что еще можно делать


    Да что угодно.
    • Напоминать о том, что цветы не политы (мерять влажность земли в горшках и паниковать, когда земля высохнет)
    • Кормить животных, будучи в отъезде
    • Выключать свет, открывать дверь, топить баню, закрывать окна и прочее прочее прочее. Все ограничивается только фантазией.

    Что дальше?


    Ну, самое, наверное, очевидное – сделать динамический опрос датчиков. То есть прописать питон как fast-cgi модуль в lighttpd и напрямую обращаться к скриптам из браузера
    Дальше, у digi есть софт iDigi Dia – фактически консоль управления. Используя его, можно отдавать команды XBee датчикам, заливать на них удаленно прошивки, ресеттить их и т.д.
    У digi также есть клауд (http://www.idigi.com/). То есть можно связать отдельаные датчики или целые сети с клаудом, где будет крутиться управляющий софт и иметь к нему доступ отовсюду.
    Есть еще куча коннекторов (http://www.idigi.com/idigiconnector/) — в общем раздолье для человека с головой и навыками
    Есть софт, написанный сторонними разработчиками. Например XIG (xig.googlecode.com) – Xbee Internet Gateway. Это транслятор web<->xbee. Например, он может при поступлении данных о состоянии датчика прикрутить эти данные хвостом к get-запросу и отправить этот запрос на удаленный сервер. Или по запросу от XBee скачать информацию с определенного сайта.
    В общем, много чего можно. Подключение четырех проводков от роутера к XBee – это всего лишь первый шаг к Internet of Things. Но даже этот первый шажок сделать очень интересно.
    Share post

    Similar posts

    Comments 15

      0
      не подскажете, чем снимаются показания счётчика, и можно ли их снять с обычного квартирного счётчика (провода у него есть, предполагаю что как раз для этого)?
        +1
        Да, у меня стоит счетчик, купленный в Leroy Merlin. У него внутри стоит геркон. Дает один импульс на оборот колеса с магнитом (=.010 кубометра). Провод подключен по релейной схеме к МК, который смотрит на фронты сигнала. При появлении фронта (неважно — спадающего или нарастающего) прибавляем 0.005 кубометра.
        Когда на XBee идет запрос, та будит МК, МК отправляет строку с показаниями.
          0
          получается если нет электричества, то данные МК и счетчика начинают расходиться?"
            0
            Да, если датчик питается от сети и в это время лилась вода.
            У меня еще реализована удаленная установка значений. Если есть расхождение, то можно корректировать с роутера показания. Учитывая, что при подаче показаний нужны только целые значения кубометров, ошибиться там нереально. А скорректировать раз в полгода-год — не жалко. Не промышленная система :-)
            0
            Простите, а можно чуть более подробно пояснить про считывание сигналов?.. Копался по инету, думал что геркон просто замыкает контакты на выходе, получается не совсем так?
            Подкажите пожалуйста, если не сложно, как правильно сигнал считать, измерением сопротивления с выхода счетчика?
            Не силен в схемотехнике, уж простите :)
              0
              Ну да, просто замыкает и просто размыкает. Т.е. за один оборот счетчика он один раз замыкает контакт и один раз размыкает.
          –7
          У попа была собака
          Поп ее любил
          Собака весила 12.347 килограмма
          По средам поп ее кормил курицей.
          — О чем статья, собственно? Или так, просто систематизировать общеизвестные и никому не нужные факты?
            +8
            Подавляющее большинство статей на хабре описывают кому-то известные и кому-то не нужные факты. Если эта статья не интересна — просто проходим мимо, как я прохожу мимо статей по css, например. Если интересна, но непонятно как сделано то-то или вот то-то, задаем вопросы. Если интересна, все понятно, садимся писать топик «Как сделать то-то или вот то-то».
              +2
              Я считаю, что от этой статьи больше пользы, чем от Вашего комментария.
              Всем ведь нереально угодить — разные интересы, разный уровень подготовки и прочее. Я, например, итересуюсь беспроводными датчиками разных мастей и мне было интересно почитать о том, как измерение потребления воды было реализовано у других заинтересованных людей.
              Кому-то будет интересно начать свои исследования в этой области. Применений много.
              0
              Спасибо за статью — очень полезно. Хороший задел для умного дома с системой полива горшков, подкормкой котэ и прочего…
              А еще понравился «воринг» для дизайнеров.
                0
                Честно говоря не вижу перпектив в данном типе сетей, куда лучше Z-wave Mesh сети с их помощью можно сделать умный дом намного проще и без лишних костылей.
                  0
                  Чем лучше? В чем костыли?
                    0
                    Лучше тем, что многие устройства уже имеют поддержку этой сети и при включении они самоинтегрируются в неё например можно купить счетчик на воду выключатели света и главное управляющее устройство и всё это будет автоматически сконфигурировано без написания какого-либо кода.
                      0
                      Ну это не совсем правильное сравнение. Это как сравнивать микроконтроллер и готовое устройство. Или как сравнивать сетевую карту и компьютер…
                  0

                  Хорошая статья,

                  Only users with full accounts can post comments. Log in, please.