Безопасное локальное обнаружение устройств IoT с использованием PWA без удаленного сервера - PullRequest
1 голос
/ 26 апреля 2020

Я ищу способ управления и контроля IoT-устройств без (постоянной) потребности в том, чтобы в него входил удаленный сервер и с PWA вместо собственного приложения на управляющем устройстве. Результатом является создание IoT-устройства, которое продолжает работать, когда продукт в конечном итоге устареет (больше не будет работать / выделяться сервер), и иметь приложение, которое имеет преимущества PWA, такие как всегда актуальный, легко реплицируемый и дешевый, размещенный на чем-то вроде S3 .

В качестве примера, скажем, у меня есть одно или несколько устройств IoT разных классов, например ESP8266 и Raspberry Pi. Как и с любым новым устройством IoT, я хочу добавить его в сеть и оттуда управлять его состоянием из приложения. Приложение в данном случае представляет собой PWA вместо полноценного нативного приложения.

1) Традиционно при первоначальной настройке нативное приложение будет сканировать сети Wi-Fi, автоматически подключаясь к сети с правильным именем. Используя PWA, мы ограничены только " состоянием " сети. Таким образом, пользователям придется вручную переключаться на сеть недавно подключенного устройства IoT. Это нормально.

2) Далее пользователю необходимо будет ввести свои учетные данные Wi-Fi. Могут быть методы, чтобы настроить это автоматически с помощью собственного приложения, но я не верю, что это имеет место в PWA. Это тоже нормально.

3) Устройство перезагружается и пытается подключиться к сети, настроенной в (2). При правильной настройке он должен получить свой IP с использованием DHCP. И теперь все становится сложнее. Я хочу «обнаружить» эту сеть из моего PWA. Раньше был способ получения IP-адреса с устройства с помощью WebRT C API . но с тех пор он изменился и теперь показывает запутанный mdns , который разрешается в localhost. Утечка ip позволила бы сканировать сеть на основе браузера, но это больше невозможно. Я всегда надеялся, что Android по умолчанию будет использовать маршрутизатор пользователя в качестве DNS-сервера, но это не так. В результате просто использование mDNS не подходит. Я не хочу, чтобы пользователь проверял свой маршрутизатор, устанавливал приложение, например fing, или делал что-то еще, что нарушало бы поток с точки зрения UX.

Шаг (3) должен запускаться каждый раз, когда приложение запускается, чтобы вы ' Я хочу что-нибудь надежное. Сканирование устройств невозможно с использованием PWA, поэтому мне нужно найти другой метод. Я думал о том, как Docker контейнеры могут находить друг друга между сетями (см., Например, etcd) , используя предопределенный ключ, который используется совместно во время установки. Проблема заключается в том, что для хранения IP-адресов, привязанных к этому ключу, требуется удаленный сервер. Я не хочу этого.

Мы очень ценим идеи о том, как решить эту проблему! Я хочу быть в состоянии предложить решение, которое работало бы, даже когда WAN отсутствует. При этом я знаю, что соединение с удаленным сервером необходимо, если конечный пользователь захочет включить любого голосового помощника или хочет управлять устройством из глобальной сети.

...