Легкая автоматизация на основе ESP8266

Организация связи

Для того чтобы сервис SmartESP мог управлять Вашими умными устройствами необходимо чтобы они имели каждый свой адрес. В сети Интернет адресом является IP-код и порт, например:

IP – 124.217.51.102, порт – 2345, все вместе: 124.217.51.102:2345.

Доступ к Вашему ESP-контроллеру через глобальную сеть Интернет может быть реализован двумя способами: прямой доступ по глобальному IP-адресу и доступ через VPN-подключение (Virtual Private Network – Виртуальная Частная Сеть). Прямой доступ требует от Вас наличия постоянного IP-адреса, который будет доступен всем участникам сети Интернет, мало того Вам придётся обеспечить защиту своего роутера от возможных хакерских атак. При VPN-подключении, Ваш роутер подключается к нашему серверу и тоже получает IP-адрес, но не глобальный, а внутрений, который будет скрыт от других. Мы рекомендуем вариант VPN-подключения, как более простой и защищенный.


Идеальная схема организации связи

Как видно на схеме, идеальная организация сети предполагает, что будет использоваться несколько роутеров. Один основной Main Router, который является шлюзом для выхода в Интернет, имеет достаточно мощный процессор и WiFi-транслятор для подключения домашней бытовой техники с высоким трафиком, плюс может устанавливать VPN-соединение. К нему так же подключены дополнительные роутеры Secondary Router, более дешевые и с более скромными параметрами, их задача обеспечить низконагруженную, но устойчивую связь с ESP-контроллерами. Безусловно, такая схема является необязательной и Вы можете подключать абсолютно все устройства и домашнюю технику и ESP-контроллеры к одному главному роутеру.

Как правило, VPN-подключение устанавливается на главном роутере. Как уже говорилось, этот способ более защищенный, но самое главное, почему к нему придётся прибегнуть, потому что ваш провайдер не может обеспечить Вам фиксированный IP-адрес. Это достаточно частая ситуация. В Интернет для её решения нередко используют механизм веб-сокетов, но по-нашему мнению, это решение имеет ряд недостатков, хотя изначально оно выглядит более простым для пользователя. Мы же будем использовать VPN (виртуальную частную сеть), основанную на стандартном и простом протоколе PPTP. Да, этот протокол не является лидером безопасности, но надо понимать, что если Ваш доступ в Интернет организован через сертифицированного поставщика сетевых услуг, то вероятность взлома и доступа к Вашим умным устройствам очень низкая.

Итак, нам требуется создать нашу частную с Вами виртуальную сеть, которая будет находиться внутри глобальной сети Интернет. Для этого мы просто связываем Ваш роутер с нашим сервером дополнительным частным соединением. В классическом понимании, услуга VPN-сервера означает и часто используется для анонимного доступа из одной сети в другую. Но перед нами эта задача не стоит и поэтому сразу предупреждаем, что VPN от SmartESP не позволит Вам обращаться к сторонним ресурсам Интернета дальше нашего сервера.

Если Вы используете роутер Mikrotik с системой RouterOS, то организация связи значительно упрощается, благодаря API-доступу. Для начала Вам потребуется зайти в раздел Управление сайта, а затем перейти на вкладку "VPN-доступ". Нажимаете кнопку "Новый VPN-сервис" и указываете любое имя и "Тип роутера" вариант "Mikrоtik RouterOS c доступом по API". 

У Вас может быть несколько VPN-сетей, если Вы захотите объединить все свои умные устройства в одну умную сеть. Причем сами устройства могут находиться, хоть в разных странах. После добавления, в сводной таблице появится строка, в начале которой будет символ плюса. Нажав на него, отобразятся настройки VPN-доступа, которые должны храниться приватно.

Можно переходить к настройкам роутера (с помощью программы WinBox). Настройка начинается с раздела "Interfaces", где отображается список всех подключений:

Нажмите символ плюса в верхнем левом углу, и в появившемся списке выберете вариант "PPTP Client". Откроется окно настроек, где в закладе "Dial Out" следует указать: 

  • Connect To: smartesp.net
  • User: выданный Вам ранее логин, в примере это smart337665vpn7
  • Password: выданный Вам ранее пароль

После чего нужно нажать на кнопку "Apply" и перейти на вкладку "Status", если всё было сделано правильно, то появится информация о подключении.

 

Осталось проверить, что у роутера открыт доступ по API. Для этого зайдите в раздел "IP -> Services" и убедитесь, что доступ по API активирован и используется порт 8728.

На этом настройка роутера завершена! Вернитесь обратно на сайт в раздел "Управление" и обновите страницу. Теперь необходимо указать параметры доступа к роутеру. Для этого нажмите на символ ключа и в открывшемся окне укажите логи и пароль к Вашему роутеру. Обратите внимание, что в целях безопасности мы не храним эти данные у себя на сервере и Вам необходимо будем указывать их каждый раз (данные сохраняются до момента закрытия вкладки браузера), когда Вы хотите добавить или удалить новый контроллер.

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

В данном примере, в списке устройств отображается наш тестовый контроллер TestBoard с локальным IP-адресом 192.168.80.101. Предположим, что мы хотим его сохранить и использовать в проекте, тогда нажимаем на операцию "Определить как контроллер" (символ микросхемы). В появившемся окне Вы сможете указать новое удобочитаемое имя контроллера и, если захотите, то уточнить IP-адрес устройства, а также его порт.

Нажимаем "Сохранить" и видим, что контроллер получил указанный IP-адрес и мало того он теперь стал статическим, то есть постоянным. Также в таблице "Определенные контроллеры" мы видим новую запись об этом контроллере и его реквизиты.

На этом настройка VPN и подключение контроллера завершена. Нам осталось лишь указать его в настройках соответствующего проекта и система автоматически подставит нужный IP-адрес и порт:

Для начала Вам потребуется зайти в раздел Управление сайта, а затем перейти на вкладку "VPN-сервис". Нажимаете кнопку "Новый VPN-доступ" и указываете любое имя. Да, у Вас может быть несколько VPN-сетей, если Вы захотите объединить все свои умные устройства в одну умную сеть. Причем сами устройства могут находиться, хоть в разных странах. После добавления, в сводной таблице появится строка, в начале которой будет символ плюса. Нажав на него, отобразятся настройки VPN-доступа, которые должны храниться приватно.

Можно переходить к настройкам роутера. Для начала требуется проверить поддерживает ли Ваш роутер установку VPN-соединения, как правило, многие современные модели умеют это делать.  Далее, исходя из модели роутера, выполнить поиск в Интернет, например по запросу "роутер TP-LINK XXX настройка VPN". Кроме этого, даже если на Вашем роутере нет изначальной возможности установки VPN-соединения, то благодаря его перепрошивки на OpenWRT, ситуацию можно исправить. 

Далее мы приводим инструкцию на примере роутера Mikrotik (с помощью программы WinBox). Настройка начинается с раздела "Interfaces", где отображается список всех подключений:

Нажмите символ плюса в верхнем левом углу, и в появившемся списке выберете вариант "PPTP Client". Откроется окно настроек, где в закладе "Dial Out" следует указать: 

  • Connect To: smartesp.net
  • User: выданный Вам ранее логин, в примере это smart337665vpn7
  • Password: выданный Вам ранее пароль
После чего нужно нажать на кнопку "Apply" и перейти на вкладку "Status", если всё было сделано правильно, то появится информация о подключении.

 

Теперь необходимо сделать так, чтобы через одно соединение наш сервер мог общаться с множеством умных устройств. Список всех устройств Вашей локальной сети можно посмотреть, если зайти в раздел "IP -> DHCP Server", а затем на закладку "Leases".

Важный нюанс, это то, что Ваш роутер по умолчанию выдает динамические (временные) IP-адреса устройствам локальной сети. То есть, сегодня Ваш контроллер имеет адрес 192.168.88.100, а если его отключить и включить заново, то роутер может выдать ему другой IP-адрес, например 192.168.88.105. Нас такое положение вещей не устраивает, ведь мы будем организовать связать с конкретным IP-адресом, поэтому нужна однозначность в том, что сегодня и завтра одно и то же устройство будет иметь постоянный IP-адрес. Для этого необходимо выполнить операцию перевода динамического IP-адреса в статический. Делается это просто: нажимаете на нужном адресе правой кнопкой мыши и в появившемся списке, выбирает действие "Make Static". Теперь этот адрес будет закрепленным только за этим устройством (привязка происходит по MAC-адресу). В списке такие статические IP-адреса, легко определить по отсутствующей перед ними буквы "D". 

После того как все Ваши умные устройства получили статические адреса, необходимо определить порты доступа, при обращении на который, роутер будет перенаправлять все запросы на конкретное устройство. Мы рекомендуем производить нумерацию портов начиная с 1000, ещё удобно если номер порта содержит часть IP-адреса устройства.

Нужно открыть окно "IP -> Firewall" и перейти на закладку "NAT":

Нажмите на символ плюса в верхнем левом углу, переходим на закладку "General" и задаём три параметра: 

  • Chain: dstnat
  • Protocol: tcp
  • Dst.Port: номер порта на Ваш выбор, например для контроллера 192.168.88.135 можно выбрать 1135

Далее, переходим на закладку "Action" и задаем такие параметры:

  • Action: netmap
  • To Addresses: 192.168.88.135 (IP-адрес контроллера в локальной сети)
  • To Ports: 80
 

Готово! Аналогичные действия необходимо проделать и с другими устройствами, которые должны работать с Умной сетью. Теперь вернемся в раздел Управление и откроем настройки проекта. Следует указать доступ к контролеру, зная его IP-адрес (можно вспомнить на вкладке "VPN-доступ") и порт. Для нашего примера, это будет:

Остается проверить доступность устройства, для этого проще всего открыть окно сервиса контроллера:

Прежде всего, следует обратить внимание, что данный способ доступа возможен, когда у Вас есть постоянный IP-адрес. Для этого необходимо обратиться к Вашему интернет-провайдеру и запросить у него услугу фиксированного IP-адреса. Не исключено, что это является платной услугой, но цена её, как правило, невысокая. Если же Ваш провайдер не может предоставить такую услугу, то у Вас не остается другого варианта, только как перейти ко второму варианту доступа к Вашему устройству через VPN. Проверить и узнать Ваш текущий IP-адрес можно через разные сайты-сервисы, например: https://portchecker.co

После того как Вы узнали свой внешний IP-адрес, Вам необходимо выполнить процедуру "проброски портов" на роутере локальной сети. В принципе, самый простой вариант, это узнать модель Вашего роутера и выполнить поиск в Интернет, например по запросу "роутер TP-LINK XXX проброс портов". Либо же, можете прочитать ниже нашу инструкцию на примере роутера Mikrotik, скачав и установив программу WinBox.

Итак, скорее всего Ваша локальная сеть организованная роутером будет иметь внутреннее адресное пространство типа 192.168.0.1-255, либо же в нашем случае для Mikrotik: 192.168.88.1-255. В общем роутеры разных фирм предпочитают использовать разные адреса, но как правило, сам роутер числится первым в этом списке. Значит для нашей локальной сети адрес роутера будет 192.168.88.1, который требуется ввести в браузере http://192.168.88.1 или открыть в программе "WinBox". Выполнив это, мы попадаем в административную панель роутера, где требуется задать нужные нам настройки.

Нужно открыть окно "IP -> Firewall" и перейти на закладку "NAT":

Скорее всего, там уже есть как минимум одно правило "masquerade" для интерфейса "WAN", которое обеспечивает трансляцию запросов локальной сети в глобальную сеть Интернет. Наша же задача будет состоять в том, чтобы обеспечить обращение из Интернета к одному из Ваших контроллеров. Список всех устройств Вашей локальной сети можно посмотреть, если зайти в раздел "IP -> DHCP Server", а затем на закладку "Leases".

Предположим Ваш контроллер имеет локальный IP-адрес 192.168.88.100, а Ваш постоянный белый IP-адрес, выданный провайдером 159.214.25.5. Тогда для работы каждого контроллера, нам нужно выделить определенный порт, при обращении на который, роутер будет перенаправлять все запросы на конкретное устройство. То есть, к примеру если обратиться по адресу и порту 159.214.25.5:3306, то запрос будет направлен на устройство 192.168.88.100 или если быть совсем точным, то на 192.168.88.100:80 (80 - это стандартный веб-порт для HTTP). Номер порта на внешнем IP-адресе Вы можете задавать практически любой, но лучше не использовать некоторые базовые 80, 443 и.т.п Мы рекомендуем производить нумерацию портов начиная с 1000. 

Важный нюанс, это то, что Ваш роутер по умолчанию выдает динамические (временные) IP-адреса устройствам локальной сети. То есть, сегодня Ваш контроллер имеет адрес 192.168.88.100, а если его отключить и включить заново, то роутер может выдать ему другой IP-адрес, например 192.168.88.105. Нас такое положение вещей не устраивает, ведь мы будем организовать туннель с конкретным IP-адресом, поэтому нужна однозначность в том, что сегодня и завтра одно и то же устройство будет иметь постоянный IP-адрес. Для этого необходимо выполнить операцию переводадинамического IP-адреса в статический. Делается это просто: нажимаете на нужном адресе правой кнопкой мыши и в появившемся списке, выбирает действие "Make Static". Теперь этот адрес будет закрепленным только за этим устройством (привязка происходит по MAC-адресу). В списке такие статические IP-адреса, легко определить по отсутствующей перед ними буквы "D". 

Теперь создадим правило связки внешнего и внутреннего IP-адресов. Вернемся в "Firewall" и нажмем на "плюс":

Переходим на закладку "General" и задаем три параметра: 

  • Chain: dstnat
  • Protocol: tcp
  • Dst.Port: 3306 (на Ваш выбор)
Далее, переходим на закладку "Action" и задаем такие параметры:

  • Action: netmap
  • To Addresses: 192.168.88.100 (IP-адрес контроллера в локальной сети)
  • To Ports: 80

 

Готово! Теперь, чтобы проверить работу устройства, можно набрать в браузере http://159.214.25.5:3306 и увидеть ответ контроллера, как если бы Вы набрали http://192.168.88.100. 

Важно! Вы не можете обратиться к своему внешнему IP-адресу изнутри, поэтому для теста используйте другое интернет-подключение, например со смартфона по мобильной сети.