Недавно я купил пару Wi-Fi реле от Xiaomi. Пока они были солидными, мне действительно не нравится приложение Xiaomi. Но мне нравится идея о том, что он действительно работает как в локальной сети, так и через Интернет. Когда в локальной сети они очень быстро включаются и выключаются, учитывая, что серверы Xiaomi находятся в Китае.
Поэтому я хочу запустить свое собственное реле на основе ESP8266 (я знаю, что могу подготовить аппаратное обеспечение, так что это бонус). Моя проблема в том, как я могу автоматически обнаружить реле в моей сети с веб-страницы?
Из «приложения» я мог использовать SSDP, mDNS-SD или UPNP для обнаружения вещей. Но я не нашел информации о том, возможно ли это из веб-браузера (Chrome на Android в основном). Поскольку я изменил свою веб-страницу с метеостанцией на Progressive Web App, меня зацепило. Мне действительно нравится идея, что веб-страницы - это не приложения, которые нужно устанавливать. И PWAs заполнить пробел в автономном режиме тоже.
Странно, однако, что «сложная» часть (включение и выключение реле вне локальной сети) тривиальна для решения через сервер MQTT. Но я бы предпочел не полагаться на внешний сервер MQTT. Если я нахожусь в локальной сети, я хочу поговорить с реле напрямую. Если нет, то отправьте команду через MQTT.
Конечно, я мог бы положиться на сервер для запроса реле, но в этом случае мне понадобится подключение к Интернету (если мой сервер MQTT находится в «облаке») или домашний сервер. У меня дома есть сервер, и даже если бы я этого не сделал, малиновый пи мог бы легко заполнить пробел. Но в идеале не нужно даже использовать сервер при общении с устройствами по локальной сети (в данном случае Wifi). Я предпочитаю сохранять P2P настолько, насколько это возможно, и использовать MQTT только как запасной вариант, когда я нахожусь в WAN (MQTT решает проблемы CG-NAT и переадресации портов).
Ответы:
Мне не известны какие-либо общие возможности локального обнаружения, встроенные в браузер. Фактически, я считаю любую возможность проверкой безопасности, поскольку она позволит злоумышленникам удаленно профилировать вашу сеть, если у нее нет шага ручного взаимодействия для ее запуска, что действительно замедлит рабочий процесс, к которому, я думаю, вы стремитесь.
Я могу думать о 2 вещах, которые подходят близко:
Обнаруживаемость Chromecast встраивается в Chrome. Раньше это был отдельный плагин, прежде чем он был добавлен. Но для этого все же требуется ручной шаг, чтобы пользователь запускал поиск, а затем вручную выбирал сведения об устройстве для передачи обратно на страницу / javascript. (это использует SSDP под крышками IIRC)
Поддержка сканирования WebBluetooth. Это соответствует модели, аналогичной обнаружению Chromecast. Пользователь должен инициировать сканирование, а затем он должен вручную выбрать с устройств, обнаруженных браузером, какие данные передаются обратно в javascript на странице.
Я использовал подход WebBluetooth для обнаружения локального переключателя освещения (у меня есть приложение BLE на пи-ноль, управляющее лампочкой Belkin WeMo https://github.com/hardillb/physical-web-lightswitch ). Он работает, но не является бесшовным, так как для обнаружения одного устройства требуется как минимум 2 взаимодействия с пользователем.
Хотя он не отвечает всем вашим локальным требованиям, я думаю, что использование подхода облачного брокера даже для локальной работы будет более плавным для пользователя.
источник
Если у вас есть веб-интерфейс на устройстве и вы настроили его на использование имени хоста MDNS с помощью службы респондента MDNS, такой как bonjour или avahi, то в функциональных операционных системах вы можете просто указать свой браузер на
https: //livingroomlight.local
Или как бы вы ни настроили его для вызова себя.
Это будет работать из коробки с браузерами, работающими на OSX, iOS и большинстве Linuces, которые поддерживают разрешение имен хостов MDNS на системном уровне.
Однако это не будет работать в Windows, если вы не установите дополнительную поддержку MDNS, и не будет работать со стандартными браузерами Android, хотя возможно создание пользовательских приложений для Android, поддерживающих его.
Обнаружение неизвестных экземпляров в сети обычно не поддерживается браузером, но обычно поддерживается через API операционной системы и инструменты командной строки, такие как
dns-sd
(OSX) иavahi-browse
(Linux).Поэтому, хотя не кажется очевидным, что браузер может найти ваши устройства, если вы можете просто вспомнить, как вы назвали одно из них, вы можете подключиться к нему, и он может потенциально показать вам ссылки на все его одноранговые узлы, выполнив MDNS. ищи себя.
Или вы можете запустить терминал и получить ответ. В этом случае вы можете запустить локальный демон, который будет выполнять поиск в MDNS и показывать вам результат в виде страницы ссылок, обслуживаемой только через интерфейс обратной связи, и, следовательно, недоступной для любой другой машины.
источник