2014-10-29 3 views
2

Среди других устройств у меня есть переключатель Belkin WeMo и 3M WiFi-термостат. Оба имеют приложения для Android. Когда я открываю приложение, когда дома (телефон в той же подсети WiFi, что и устройства), приложение говорит, что устройства являются «локальными» или что приложение подключено «напрямую» к устройству. Любое изменение, которое я делаю, прямо отражается на устройстве.Как приложения Internet-Of-Things обнаруживают, является ли устройство локальным или нет?

Если я подключаюсь из любой точки моего дома, это как-то «знает», что устройство не является локальным. Если я правильно понял, он затем где-то обновляет свой собственный сервер, и в конечном итоге устройство дома получает обновление.

Как это сделать приложение? Я хочу воспроизвести эту функциональность.

В принципе, у меня есть малина Pi, скажем, что-то делает с GPIO, и я могу вызвать это действие, посетив веб-страницу. В моей домашней сети веб-страница доступна по адресу http://192.168.10.25/do_something ... Вне моей домашней сети веб-страница доступна по адресу http://my_custom_name.some_free_dynamic_dns.com:8080/do_something. Я установил свой маршрутизатор для порта 8080 на WAN до 192.168.10.25:80 по локальной сети. Это работает.

Как избежать 2-х страниц? Я хочу написать приложение, которое эффективно показывает мне 192.168.10.25/do_something URL. Когда я дома, он должен «автоматически» обнаруживать, что телефон находится в той же сети, что и URL, и просто откройте 192.168.10.25/do_something напрямую ... и когда я нахожусь снаружи, он должен «автоматически» обнаружить это тоже и запустить http://my_custom_name.some_Free_dynamaic_dns.com:8080/do_something.

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

Как мне это сделать?

ответ

1

Попробуйте подключить ваше приложение к веб-серверу по адресу 192.168.10.25 (или любой другой локальный адрес, который вы выбираете). Если в течение разумного промежутка времени нет ответа (5 секунд должно быть достаточно), подключитесь к внешнему веб-серверу.

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

Вы можете попытаться избежать ожидания (несуществующего) локального веб-сервера, просмотрев IP-адрес своего телефона. Если это не 192.168.x.y, вы можете предположить, что вы не являетесь локальным и переходите непосредственно на внешний веб-сайт.

Если вы вставляете 192.168.10.25 прямо в свое приложение, то поиск узла не требуется.