без белого IP через интернет, связать 2 устройства

Тема в разделе "Проводная и беспроводная связь", создана пользователем sim31r, 4 фев 2016.

Метки:
  1. sim31r

    sim31r Нуб

    Вот пример типичный, есть 2 устройства, 2 контроллера или наше устройство и домашний компьютер. Оба подключены в интернет через NAT, самым обычным способом. Как передать какие-то данные из одного устройства в другой? Тут нужен посредник некий. Оба устройства могут инициировать соединение с белым IP, но не смогут его принять.
    Есть варианты иcпользавать некие публичные сервисы, FTP, HTTP, DropBox, IRC, ICQ, e-mail, но это избыточное решение и простой контроллер, Arduino уже не справится.
    Думаю можно сделать некое "общественное" решение, для передачи небольших объемов данных, выделить сервер с единственным проброшенным портом, и слать ему "телеграммы", с данными и запросом данных. Получается некий аналог чата, только в двоичной форме. Суть работы очень проста. Если 1 устройство хочет передать данные другому устройству, оно просто подключается к серверу и пишет:

    через какое-то время подключается устройство №2 и получает данные:

    Ограничения на длину посылки хоть 100 байт, храним данные некоторое время, от часа до года, всеравно данных мизер.

    Возможно такой сервис уже где-то есть. Коммерческие точно есть у производителей GPRS модемов.

    Я могу написать скрипт и выделить свой порт на нескольких компьютерах, типа 63.xxx.xxx.xxx:1234
    Далее бы желательно построить распределенную сеть таких дружеских серверов, чтобы при падении одного, устройства общались через другие сервера. Сервера должны друг о друге знать и делиться списком со всеми желающими:
    Тут уже нужно некоторое сообщество, хотя бы несколько человек.

    Есть подобный сервис, но он платный 5$ в месяц ни за что по сути.
    Единственное что они приложение для мобильного еще предоставляют (тоже удобная вещь может быть). Но решения тяжелые для понимания и микроконтроллеров.
    http://habrahabr.ru/post/159649/
    http://habrahabr.ru/post/116106/
    https://pushover.net/
     
    Последнее редактирование: 4 фев 2016
  2. ИгорьК

    ИгорьК Оракул Модератор

    У меня один адрес белый, другой - серый (два весёлых гуся) и все это общается по протоколу MQTT в обе стороны. То есть одного белого достаточно.

    А если оба серые, совсем уж не ручаюсь, но есть бесплатные сервера для частников, которые по этому проколу связывают устройства. Поищите эту тему.
    http://www.thingstud.io
    https://www.cloudmqtt.com/plans.html
     
    Последнее редактирование: 4 фев 2016
  3. sim31r

    sim31r Нуб

    Очень интересно, есть даже реализации под Arduino есть, много материалов с каринками. Но сложновато как-то, возможность ssl не нужна особо и много чего еще излишнего для простых проектов.

     
  4. ИгорьК

    ИгорьК Оракул Модератор

    Сложновато? Ну день посидели поразбирались, ну два.И все стало ясно.
    А сколько времени и ресурсов надо убить, чтобы создать велосипед и довести его до ума?
     
  5. Sergey34Nov

    Sergey34Nov Нерд

    а сервисы типа DynDNS не подойдут? модемы, маршрутизаторы с ними умеют работать
     
  6. ИгорьК

    ИгорьК Оракул Модератор

    Подойдут, если у Вас белый IP. Но на дачах, например, такого не бывает, в том числе при мобильном/стационарном соединении через всех сотовых операторов. Да и в городах, через проводной интернет уже тоже режут белые адреса.
    Я долго пытался бороться с этим, том числе устанавливая VPN-канал между двумя роутерами - не получалось стабильно.
    Протокол MQTT, серый + белый адрес проблему решают. Если оба серых адреса - только через облачный сервис, ИМХО.
     
  7. Sergey34Nov

    Sergey34Nov Нерд

    так смысл DynDNS заменить IP доменным именем, устройство будет обращаться к mylogin.dyndns.org:xxxxx и всё....
     
  8. AlexU

    AlexU Гуру

    Большинство провайдеров "прячут" клиентов за NAT -- в этом случае DynDNS не поможет.
     
  9. Sergey34Nov

    Sergey34Nov Нерд

    это да... согласен
     
  10. Onkel

    Onkel Гуру

    мтс (не сочтите за рекламу этого презренного опсоса) для ю.л. предоставляет (практически бесплатно) статические ip. Но в их лавках продаваны обычно не в курсе и посылают. Я делал - на контору (именно ю.л.) покупается обычная симка, потом пишется от конторы заява о предоставлении статического ip, если продаваны в мтс идут в отказ и не принимают - звонок 0890, там им говорят чтобы приняли заяву, и они принимают и выдают статический ip. Делал в прошлом году.
     
  11. причем некоторые из них еще и включают файрвол и режут порты для VPN, мол частным лицам это не нужно.

    если это все через GPRS модем, я бы наверное сделал FTP на бесплатном хостинге, и на него модемом складывал весточки.

    вообще тут вопрос скорее в том, как приходит инэт на эти устройства.
     
  12. sim31r

    sim31r Нуб

    Мы тоже так делали, статический IP адрес типа 192.168.0.хх, через точку доступа типа наша_компания.мтс.ру, вполне нормальное решение, у нас 3 модема работали в своей подсети, удобно и безопасно. Денег берут около 100 рублей в месяц, достаточно мало. Но для целей умного дома есть тарифы еще лучше, от Мегафона например, 20 мегабайт в месяц, бесплатно. У Билайна есть тариф для планшетов, но там надо IMEI перебивать на планшетный. Естественно всё за NAT.
     
  13. sim31r

    sim31r Нуб

    FTP, e-mail, IRC могут неожиданно обернуться подводными камнями:
    http://forum.amperka.ru/threads/ftp-over-wifi.2181/page-2

    Сложный код без гарантии результата.

    То же самое
    http://arduino.ru/forum/obshchii/ftp-po-wifi
    Тут просто пример, с виду просто

    http://playground.arduino.cc/Code/FTP
     
  14. sim31r

    sim31r Нуб

    Универсальный велосипед сделать сложно (публичный сервер для всех), а только для себя намного проще. Буквально несколько строк кода на Arduino и на сервере Python какой-нибудь. Это в случае, если над передать показания пары датчиков и управлять каким-то реле.
     
  15. эм, и?

    я непому, нужно получить тоже самое, что соединить ардуины двумя парами проводов, но только без проводов, и через интернет, не используя TCP?
     
  16. MXXX

    MXXX Гик

    Я подобную задачу у себя решаю с помощью ASP.NET скрипта на своем публичном WEB сервере. Но можно то же самое и на PHP сделать и поставить этот скрипт на какой-нибудь бесплатный WEB хостинг с поддержкой PHP. Были же такие кажется. Или на платный если есть. Наверняка у вас есть друг, который хостит сайт на PHP. Договоритесь с ним чтобы выделил вам 1 кб. памяти )
     
  17. jjdrive

    jjdrive Нерд

    MXXX единственная толковая мысль!
    Решение данной проблемы это хостинг с php+mysql.
    Если надо шлешь данные на сервер в php а он парсит и кладет в mysql.
    Или же наоборот php тебе шлет на твой запрос результат из базы прямо в контроллер.
     
  18. ИгорьК

    ИгорьК Оракул Модератор

    Это не единственное решение. Это упорное нежелание видеть другие варианты.
    В частности я уже указывал на публичные, полуплатные и платные серверы mqtt.
    Сейчас также быстро развивается протокол coap.
     
  19. jjdrive

    jjdrive Нерд

    покажите пример реализации протокола на ардуине
     
  20. ИгорьК

    ИгорьК Оракул Модератор

    Инициатива наказуема... :) Поищите, пожалуйста, сами. Можете даже на этом сервере. Библиотека называется типа pubsub.