Получение данных из внешней сети
Модератор: immortal
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Получение данных из внешней сети
Всем доброго времени суток.
появилась у меня задача: купил гараж, который будет постоянно отапливаться (уже реализовано), хотелось бы ещё и температуру/влажность удалённо мониторить, т.е. чтобы данные с этих датчиков прилетали на домашний сервер с МЖД. Гараж находится в гаражном кооперативе, в 1100 метрах от дома. Интернет там, естественно, только мобильный. Из того что есть под рукой для создания гаражной части МЖД: датчики BME280, AM2320, DS18B20 (позже определюсь которые из них будут установлены), ESP8266 (NodeMCU Lua), смартфон с симкой для мобильного интернета.
Схема примерно будет следующая: В ESP8266 залита прошивка от MaksMS с опцией отправки данных на МЖД. В домашней сети всё работает прекрасно, даные с подобных ЕСП-шек прилетают на МЖД. Но все запросы из внешней сети - только через авторизацию, соответственно, и GET-запросы из мобильной сети будут также блокироваться (уже проверено - в логах апача видно что запрос прилетает с ошибкой 401 - "Нет авторизации").
Если отключить авторизацию в config.php - запросы прилетают, всё хорошо, кроме одного - нет вообще никакой защиты из внешки.
GET-запросы не позволяют проводить аутентификацию, только POST-запросы.
Пробовал поднять VPN (PPTP) между смартом и домашним компом - почему-то соединение постоянно рвётся через несколько секунд (максимум было 2 с чем-то минуты). Очень много информации по этой теме - все грешат на ОПСОСа - МТС использует NAT и режет протокол GRE. Поднимать L2TP ВПН - это ставить OpenVPN на смарт, но смарт старенький, андроид 2.3 только, поэтому требуются рут-права. Сделать можно, но не хочется.
MaksMS предлагает на папку objects можно назначить исключение , чтоб пускало без авторизации, но чёт я очкую - мало ли ещё к чему появится доступ.
Есть какие-нибудь идеи как получить данные из внешки на домашний сервер? Может кто-то реализовывал уже подобное?
появилась у меня задача: купил гараж, который будет постоянно отапливаться (уже реализовано), хотелось бы ещё и температуру/влажность удалённо мониторить, т.е. чтобы данные с этих датчиков прилетали на домашний сервер с МЖД. Гараж находится в гаражном кооперативе, в 1100 метрах от дома. Интернет там, естественно, только мобильный. Из того что есть под рукой для создания гаражной части МЖД: датчики BME280, AM2320, DS18B20 (позже определюсь которые из них будут установлены), ESP8266 (NodeMCU Lua), смартфон с симкой для мобильного интернета.
Схема примерно будет следующая: В ESP8266 залита прошивка от MaksMS с опцией отправки данных на МЖД. В домашней сети всё работает прекрасно, даные с подобных ЕСП-шек прилетают на МЖД. Но все запросы из внешней сети - только через авторизацию, соответственно, и GET-запросы из мобильной сети будут также блокироваться (уже проверено - в логах апача видно что запрос прилетает с ошибкой 401 - "Нет авторизации").
Если отключить авторизацию в config.php - запросы прилетают, всё хорошо, кроме одного - нет вообще никакой защиты из внешки.
GET-запросы не позволяют проводить аутентификацию, только POST-запросы.
Пробовал поднять VPN (PPTP) между смартом и домашним компом - почему-то соединение постоянно рвётся через несколько секунд (максимум было 2 с чем-то минуты). Очень много информации по этой теме - все грешат на ОПСОСа - МТС использует NAT и режет протокол GRE. Поднимать L2TP ВПН - это ставить OpenVPN на смарт, но смарт старенький, андроид 2.3 только, поэтому требуются рут-права. Сделать можно, но не хочется.
MaksMS предлагает на папку objects можно назначить исключение , чтоб пускало без авторизации, но чёт я очкую - мало ли ещё к чему появится доступ.
Есть какие-нибудь идеи как получить данные из внешки на домашний сервер? Может кто-то реализовывал уже подобное?
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Получение данных из внешней сети
1. Добавить отдельный PHP скрипт, в котором прописать передачу параметров другому скрипту, и первый скрипт сделать доступным из сети. Костыльно, но в Вашем случае, я смотрю это не помеха.
2. На смарте ставить таскер (или подобные) который будет получать инфу с датчиков и слать POST запросы домой.
3. Поднимать на смарте веб сервер с страницей в которой будет iframe на espшку из дому парсить через веб-переменные. Тут проблема в том, что IP на сматре может измениться.
4. MQTT тот же. Через промежуточный брокер.
5. Тот же народмон.
Или я чего-то не так понимаю, или я реально накидал кучу толковых идей)) С ночи сегодня, не спал, потому не ругайтесь если что))
2. На смарте ставить таскер (или подобные) который будет получать инфу с датчиков и слать POST запросы домой.
3. Поднимать на смарте веб сервер с страницей в которой будет iframe на espшку из дому парсить через веб-переменные. Тут проблема в том, что IP на сматре может измениться.
4. MQTT тот же. Через промежуточный брокер.
5. Тот же народмон.
Или я чего-то не так понимаю, или я реально накидал кучу толковых идей)) С ночи сегодня, не спал, потому не ругайтесь если что))
- За это сообщение автора savenko_egor поблагодарил:
- Ko/|xo3HUk (Пт ноя 18, 2016 8:39 pm)
- Рейтинг: 1.16%
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Получение данных из внешней сети
Ещё вариант решения. В данном случае необходимо будет настроить датчики, чтобы они на определённый URL слали данные.
- За это сообщение автора sergejey поблагодарил:
- Ko/|xo3HUk (Пт ноя 18, 2016 8:39 pm)
- Рейтинг: 1.16%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Получение данных из внешней сети
Это ограничение прошивки? А если использовать TCP/UDP Клиент и самому формировать заголовок Авторизации?Ko/|xo3HUk писал(а): GET-запросы не позволяют проводить аутентификацию, только POST-запросы.
- За это сообщение автора olehs поблагодарил:
- Ko/|xo3HUk (Пт ноя 18, 2016 8:40 pm)
- Рейтинг: 1.16%
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Re: Получение данных из внешней сети
Ого! Столько идей сразу! Мозговой штурм начался
Огромное спасибо всем откликнувшимся!
warik


Огромное спасибо всем откликнувшимся!
warik
- 1. Передача данных PHP скриптами - с моими скудными знаниями это выйдет долго и, да, костыльно как-то
2. Интересное решение. Приму на заметку. Кстати, я до конца ещё не разобрался с опцией "TCP/UDP-клиент" самой ESP-шки, может этот клиент сам может POST-запросы отсылать. Тогда одним звеном (смартфоном) будет меньше
3. Зачётное решение с iframe!!! Мне очень нравится! Особенно - тем что и на веб-морду самой ESP можно зайти, а иногда очень хочется/приходится понастраивать саму ESP. С динамическим IP-шником проблем не будет, myddns.ru поможет (MaksMS - создатель данного ресурса, также как и wifi-iot.com и купившим PRO-ключ на ESP - в подарок VIP на myddns.ru)
4. MQTT хочу оставить на десерт. Пока не знаком с ним, очень хочется поразбираться, но со временем пока туго
5. Народмон -"Лимит устр-в мониторинга исчерпан - помогите проекту". Пока нет желания 365 р/год за дополнительную ESP-шку платить.
- С Коннектом тоже пока не знаком, придётся поучить матчасть
Я, кстати, в Коннекте отключал функцию Cloud Sync (очень сильно грузился проц из-за неё) - будет ли всё остальное работать без этой функции?
Я вычитал эту информацию в интернетах при беглом поиске способа авторизации через GET-запрос. Если это не так и можно через GET авторизоваться - ткните носом, пожалуйста, где про это почитатьЭто ограничение прошивки?
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Получение данных из внешней сети
GET и POST авторизуются одинаково - через заголовок Authorization, например
В примерах TCP клиента показано, как формировать заголовки
Код: Выделить всё
Authorization: Basic ZWx1c3VhcmlvOnlsYWNsYXZl
- За это сообщение автора olehs поблагодарил:
- Ko/|xo3HUk (Сб ноя 19, 2016 11:34 am)
- Рейтинг: 1.16%
-
- Сообщения: 119
- Зарегистрирован: Вт ноя 08, 2016 4:27 pm
- Благодарил (а): 11 раз
- Поблагодарили: 10 раз
Re: Получение данных из внешней сети
О мысль а если им статика, то может просто в config.php исключения поставить на то ип?
- За это сообщение автора Akorolev поблагодарил:
- Ko/|xo3HUk (Сб ноя 19, 2016 11:34 am)
- Рейтинг: 1.16%
-
- Сообщения: 422
- Зарегистрирован: Ср сен 05, 2012 7:30 am
- Откуда: Киров
- Благодарил (а): 0
- Поблагодарили: 70 раз
- Контактная информация:
Re: Получение данных из внешней сети
Наверно проще тут использовать TCP клиент все же https://wifi-iot.com/?m=wiki&id=29&lang=ru
Там добавить строку Authorization: Basic ХХХХХХХХХХХХХХХХХ в заголовки, где ХХХХХХХХХХХХХХХХХ это логин:пароль в base64
Там добавить строку Authorization: Basic ХХХХХХХХХХХХХХХХХ в заголовки, где ХХХХХХХХХХХХХХХХХ это логин:пароль в base64
- За это сообщение автора MaksMS82 поблагодарил:
- Ko/|xo3HUk (Сб ноя 19, 2016 11:34 am)
- Рейтинг: 1.16%
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Re: Получение данных из внешней сети
Получилось!!!
Использовал TCP/UDP-Клиент ЕСПшки, Get-запрос.
Закодировал свои логин:пароль в base64:
После этого добавил строку и всё заработало!
В итоге у меня получился вот такой GET-запрос:
Огромное всем спасибо! Направили меня на путь истинный
P.S. Т.к. смартфон находится в мобильной сети за NATом, то телефон даже не пингуется. Вот сейчас, например, IP смарта серый: 10.118.0.34, внешний IP: 85.140.76.21 (белый, но динамический). Пингую 85.140.76.21 - а в ответ тишина. Поэтому добавление IP-адреса в config.php, создание веб-сервера на смарте и т.п. - отпадают сразу.
Но хочется всё-же иметь доступ на веб-морду ЕСПшки, поэтому буду ставить OpenVPN, осталось только вспомнить как получить рут на мой смарт
Использовал TCP/UDP-Клиент ЕСПшки, Get-запрос.
Закодировал свои логин:пароль в base64:
Код: Выделить всё
sergey@server:~$ printf логин:пароль | base64
0LvQvtCz0LjQvTrQv9Cw0YDQvtC70Yw=
Код: Выделить всё
Authorization: Basic 0LvQvtCz0LjQvTrQv9Cw0YDQvtC70Yw=
В итоге у меня получился вот такой GET-запрос:
Код: Выделить всё
GET /objects/?script=espdata&idesp=ESP826600xxxxxx&hostname=ESP_IP30&bmet=_BMET_&bmep=_BMEP_&bmeh=_BMEH_&wanip=_IP_&vdd=_VDD_&freemem=_MEM_&rssi=_RSSI_ HTTP/1.1
Host: homeserver
User-Agent: ESP8266
Connection: keep-alive
Authorization: Basic 0LvQvtCz0LjQvTrQv9Cw0YDQvtC70Yw=
Accept: */*

P.S. Т.к. смартфон находится в мобильной сети за NATом, то телефон даже не пингуется. Вот сейчас, например, IP смарта серый: 10.118.0.34, внешний IP: 85.140.76.21 (белый, но динамический). Пингую 85.140.76.21 - а в ответ тишина. Поэтому добавление IP-адреса в config.php, создание веб-сервера на смарте и т.п. - отпадают сразу.
Но хочется всё-же иметь доступ на веб-морду ЕСПшки, поэтому буду ставить OpenVPN, осталось только вспомнить как получить рут на мой смарт

Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Получение данных из внешней сети
4pda Вам в помощь)