Ostatnio kupiłem kilka przekaźników Wi-Fi od Xiaomi. Chociaż do tej pory były solidne, naprawdę nie lubię aplikacji Xiaomi. Ale podoba mi się pomysł, że faktycznie działa zarówno w sieci LAN, jak i przez Internet. W sieci LAN bardzo szybko się włączają i wyłączają, biorąc pod uwagę serwery Xiaomi w Chinach.
Więc chcę rzucić własny przekaźnik oparty na ESP8266 (wiem, że mogę przygotować sprzęt, więc to bonus). Mój problem polega na tym, w jaki sposób mogę automatycznie wykryć przekaźniki w mojej sieci ze strony internetowej?
Z „aplikacji” mógłbym używać SSDP, mDNS-SD lub UPNP do wykrywania rzeczy. Ale nie znalazłem informacji na temat tego, czy jest to możliwe w przeglądarce internetowej (zasadniczo Chrome na Androida). Ponieważ zmieniłem moją stronę internetową stacji pogodowej na Progresywną aplikację internetową, byłem uzależniony. Naprawdę podoba mi się pomysł, że są to strony internetowe, a nie aplikacje, które musisz zainstalować. PWA również wypełniają lukę w trybie offline.
Dziwne jest jednak to, że „trudna” część (włączanie i wyłączanie przekaźników spoza sieci LAN) jest łatwa do rozwiązania za pośrednictwem serwera MQTT. Ale wolałbym nie polegać na zewnętrznym serwerze MQTT. Jeśli jestem w sieci LAN, chcę bezpośrednio rozmawiać z przekaźnikami. Jeśli nie, wyślij polecenie za pośrednictwem MQTT.
Mógłbym oczywiście polegać na serwerze, by sprawdzać przekaźniki, ale w takim przypadku potrzebowałbym połączenia z Internetem (jeśli mój serwer MQTT jest w „chmurze”) lub serwera hostowanego w domu. W domu mam serwer i nawet gdybym tego nie zrobił, malinowa pi mogłaby z łatwością wypełnić tę lukę. Ale idealnym rozwiązaniem byłoby nawet nie potrzebować serwera podczas rozmowy z urządzeniami przez sieć LAN (w tym przypadku Wi-Fi). Wolę zachować jak najwięcej P2P i używam MQTT tylko jako rezerwy, gdy jestem na WAN (MQTT rozwiązuje problemy z CG-NAT i przekierowaniem portów).
źródło
Odpowiedzi:
Nie znam żadnych ogólnych możliwości wykrywania lokalnego wbudowanych w przeglądarkę. W rzeczywistości uważam każdą zdolność za czcigodną za bezpieczeństwo, ponieważ pozwoliłaby atakującym zdalnie profilować twoją sieć, chyba że miałaby ręczny krok interakcji, aby ją uruchomić, co naprawdę spowolniłoby przepływ pracy, o którym myślę, że chcesz.
Mogę wymyślić 2 rzeczy, które się zbliżają:
Możliwość odkrycia Chromecasta wkroczyła w Chrome. Kiedyś była to osobna wtyczka przed jej wdrożeniem. Ale wciąż wymaga to ręcznego kroku, w którym użytkownik uruchamia wyszukiwanie, a następnie ręcznego wyboru szczegółów urządzenia, które ma zostać przekazane z powrotem do strony / javascript. (używa SSDP w ramach okładek iirc)
Obsługa skanowania WebBluetooth. Jest to podobny model do wykrycia Chromecasta: użytkownik musi zainicjować skanowanie, a następnie musi ręcznie wybrać z urządzeń znalezionych w przeglądarce, które szczegóły są przekazywane z powrotem do javascript na stronie.
Użyłem metody WebBluetooth, aby odkryć lokalny włącznik światła (mam aplikację BLE na pi zero kontrolującą żarówkę Belkin WeMo https://github.com/hardillb/physical-web-lightswitch ). Działa, ale nie jest płynna, ponieważ wymaga co najmniej 2 interakcji użytkownika, aby odkryć jedno urządzenie.
Chociaż nie spełnia wszystkich lokalnych wymagań, myślę, że korzystanie z podejścia brokera w chmurze, nawet jeśli działasz lokalnie, będzie płynniejsze dla użytkownika.
źródło
Jeśli masz interfejs sieciowy na urządzeniu i skonfigurujesz go tak, aby posiadał nazwę hosta MDNS za pośrednictwem usługi odpowiadającej MDNS, takiej jak bonjour lub avahi, to w funkcjonalnych systemach operacyjnych możesz po prostu skierować przeglądarkę na
https: //livingroomlight.local
Lub cokolwiek skonfigurowałeś, aby się nazywać.
Działa to od razu z przeglądarkami działającymi na OSX, iOS i większości Linuces, które obsługują rozpoznawanie nazw hostów MDNS na poziomie systemu.
Nie będzie to jednak działać w systemie Windows, chyba że zainstalujesz dodatkową obsługę MDNS i nie będzie działać ze standardowymi przeglądarkami Androida, chociaż możliwe jest tworzenie niestandardowych aplikacji dla Androida, które ją obsługują.
Wykrywanie nieznanych instancji w sieci zazwyczaj nie jest obsługiwane przez przeglądarkę, ale zazwyczaj jest obsługiwane przez interfejsy API systemu operacyjnego i narzędzia wiersza poleceń, takie jak
dns-sd
(OSX) iavahi-browse
(Linux).Chociaż nie wydaje się oczywiste, że przeglądarka może znaleźć twoje urządzenia, jeśli możesz po prostu zapamiętać to, co nazwałeś jednym z nich, możesz się z nim połączyć i potencjalnie może pokazać ci linki do wszystkich swoich rówieśników, wykonując MDNS szukaj sam.
Możesz też odpalić terminal i uzyskać odpowiedź. W tym przypadku możesz uruchomić lokalnego demona, który przeprowadziłby wyszukiwanie MDNS i pokazałby wynik jako stronę linków obsługiwanych tylko w interfejsie pętli zwrotnej, a zatem niedostępnych dla żadnej innej maszyny.
źródło