Виявлення пристроїв IoT у веб-браузері?


11

Нещодавно я придбав пару XI-реле від Xiaomi. Хоча вони досі були твердими, мені дуже не подобається додаток Xiaomi. Але мені подобається думка, що вона насправді працює і в локальній мережі, і в Інтернеті. У мережі LAN вони дуже швидко включаються та вимикаються, враховуючи, що сервери Xiaomi знаходяться в Китаї.

Тому я хочу прокатати власне реле на базі ESP8266 (я знаю, що можу зробити готове обладнання, тому це бонус). Моє питання полягає в тому, як я можу автоматично виявити реле в моїй мережі з веб-сторінки?

З програми "App" я міг використовувати SSDP, mDNS-SD або UPNP для виявлення речей. Але я не знайшов інформацію про те, як це можливо, через веб-браузер (Chrome в основному на Android). Оскільки я змінив веб-сторінку своєї метеостанції на прогресивну веб-програму, мене причепили. Мені дуже подобається ідея того, що речі є лише веб-сторінками, а не програмами, які потрібно встановити. І PWA заповнюють прогалину і в режимі офлайн.

Дивно, що "складну" частину (вмикання та вимикання реле з-за меж локальної мережі) тривіально вирішити через MQTT-сервер. Але я вважаю за краще не покладатися на зовнішній MQTT-сервер. Якщо я в мережі, я хочу поговорити безпосередньо з реле. Якщо ні, то надішліть команду через MQTT.

Я, звичайно, міг би покластися на сервер для запиту реле, але в цьому випадку мені знадобиться підключення до Інтернету (якщо мій сервер MQTT знаходиться на «хмарі») або домашній сервер. У мене вдома є сервер, і навіть якби я цього не зробив, малиновий пі легко міг би заповнити прогалину. Але ідеальним було б навіть не потрібен сервер під час розмови з пристроями через локальну мережу (Wifi в цьому випадку). Я вважаю за краще тримати його P2P якомога більше, і використовувати MQTT як відкат, коли я перебуваю на WAN (MQTT вирішує проблеми CG-NAT та переадресації портів).


1
Ласкаво просимо на сайт, hjf! Наразі ваше запитання досить широке. Це допоможе, якщо ви можете бути дещо конкретнішими: наприклад, якими мовами ви зараз користуєтесь та які помилки / конкретні проблеми ви стикаєтесь?
анонімний2

1
@ anonymous2 ну це дуже загальне питання. Я не хочу запитувати конкретно "чи можу я робити запити mDNS безпосередньо з браузера?" бо відповідь НІ. Про це існує стандарт, але немає його реалізації. Я шукаю альтернативи чи подібну функціональність.
hjf

Відомі імена хостів MDNS відмінно працюють від браузера, який працює в операційній системі, як OSX, або більшості Linuces, які їх підтримують, хоча перегляд, ймовірно, не працює. І звичайно, вони не працюють в таких операційних системах, як Windows або Android, які не підтримують їх, якщо не встановлено додаткових можливостей.
Кріс Страттон

Відповіді:


6

Мені невідомі будь-які загальні можливості локального виявлення, вбудовані в браузер. Насправді я вважаю, що будь-яка здатність є вразливою до безпеки, оскільки вона дозволить зловмисникам віддалено профілювати вашу мережу, якщо вона не має ручного кроку взаємодії для її запуску, що дійсно уповільнить робочий процес, я думаю, що ви прагнете.

Я можу придумати дві речі, які наближаються:

  1. Відкриття Chromecast з'явилося в Chrome. Раніше це було окремим плагіном до його введення. Але для цього все-таки потрібен крок вручну, де користувач запускає пошук, а потім ручний вибір деталей пристрою, який потрібно повернути на сторінку / javascript. (для цього використовується SSDP під обкладинкою iirc)

  2. Підтримка сканування WebBluetooth. Це відбувається за аналогічною моделлю для відкриття Chromecast. Користувач повинен ініціювати сканування, тоді він повинен вручну вибрати з пристроїв, знайдених браузером, деталі яких передаються назад на javascript на сторінці.

Я використовував підхід WebBluetooth, щоб виявити локальний вимикач світла (у мене є програма BLE на пі-нулі, що управляє лампою Belkin WeMo https://github.com/hardillb/physical-web-lightswitch ). Це працює, але це не просто, оскільки для виявлення одного пристрою потрібно щонайменше 2 взаємодії користувачів.

Хоча це не відповідає всім вашим місцевим вимогам, я думаю, що використання підходу хмарного брокера навіть для локальної роботи це буде більш легким користувачем.


Гарна відповідь. Мені це було не те, що я шукав, але я вважаю, що я очікував. Існує API NSD від W3C, але реалізація є лише для Google Chrome Apps. Я
hjf

Схоже, API NSD був убитий з doc: w3.org/TR/discovery-api
hardillb

Теорія безпеки, запропонована тут, має речі зворотно: якщо виникає проблема, це не з тим, що робить відкриття (браузером), а з тим, що робить себе відкритим. Запрошуємо до власної думки про розумність виявлення, але варто зазначити, що це надзвичайно поширена поведінка багатьох персональних комп'ютерів, принтерів та інших пристроїв за замовчуванням. Готовність броузера експлуатованого уповноваженої сторони , щоб знайти що - то (чи ні) нічого не говорить про можливість несанкціонованої боку виявлення пристроїв.
Кріс Страттон

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 і показав вам результат у вигляді сторінки посилань, що подаються лише в інтерфейсі зворотного зв'язку, і таким чином не є доступним для будь-якої іншої машини.


1
Який сором. Це може бути альтернативою, якщо вона підтримується. Цікаво, що обґрунтування того, що не підтримувати mdns-sd у браузерах? У будь-якому випадку, я думаю, що єдиним способом надійної роботи стане просто використання MQTT як методу виявлення. Запропонуйте якусь кінцеву точку "оголосити", де пристрої повідомили б про себе, і кешуйте ці відповіді.
hjf

Ніщо з цього не виконує браузер - це розширена реалізація DNS операційної системи, а це означає, що браузер (або що-небудь інше) може використовувати таку назву, як Livingroomlight.local MQTT вам не дуже допоможе - щось буде мати збирати результати та представляти їх, незалежно від того, це апаратне поле, демон на ПК чи людина.
Кріс Страттон

1
Але Android підтримує mDNS в "додатках". Можна надсилати запити mDNS через додатки та отримувати відповіді. Чому ніхто не реалізує mDNS-SD і не піддає його JS? Існував стандарт, який був витягнутий і реалізований лише частково, спеціально для виявлення Chromecast.
hjf

1
Знову ж таки, тому що ніхто не займається MDNS у веб-браузерах; він працює для відомих імен хостів, де базовий DNS операційної системи розширений для його підтримки. Android не є, хоча він пропонує можливості MDNS для додатків через окремий, унікальний для Android API, який не має нічого спільного з тим, як він вирішує доменні імена.
Кріс Страттон

1
Це моя суть. Чому на це ніхто не наполягає? З тим, що IoT стає все більш поширеним, як можливо, що такі API інтерфейсу є специфічними для постачальників, і W3C застосував стандарт?
hjf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.