Mendeteksi perangkat IoT di browser web?

11

Baru-baru ini saya membeli beberapa relay wifi dari Xiaomi. Meskipun sejauh ini solid, saya benar-benar tidak menyukai aplikasi Xiaomi. Tapi, saya suka gagasan bahwa itu benar-benar berfungsi baik di LAN dan melalui internet. Ketika di LAN mereka sangat cepat untuk menghidupkan dan mematikan, mengingat server Xiaomi ada di Cina.

Jadi saya ingin memutar relay berbasis ESP8266 saya sendiri (saya tahu saya bisa menyiapkan perangkat keras, jadi itu bonus). Masalah saya adalah, bagaimana saya bisa secara otomatis mendeteksi relay di jaringan saya dari halaman web?

Dari "App" saya bisa menggunakan SSDP, mDNS-SD atau UPNP untuk mendeteksi sesuatu. Tapi saya belum menemukan info apakah ini mungkin dari browser web (Chrome pada Android pada dasarnya). Karena saya mengubah halaman web stasiun cuaca saya menjadi Aplikasi Web Progresif, saya terpikat. Saya benar-benar menyukai gagasan hanya menjadi laman web dan bukan aplikasi yang harus Anda pasang. Dan PWA mengisi celah dengan mode offline juga.

Anehnya, bagian "sulit" (menghidupkan dan mematikan relay dari luar LAN) sepele untuk dipecahkan melalui server MQTT. Tapi saya lebih suka tidak mengandalkan server MQTT eksternal. Jika saya menggunakan LAN, saya ingin berbicara langsung dengan relay. Jika tidak, maka kirim perintah melalui MQTT.

Saya tentu saja bisa mengandalkan server untuk menanyakan relay, tetapi dalam hal ini saya memerlukan koneksi internet (jika server MQTT saya ada di "cloud"), atau server yang dihosting di rumah. Saya memiliki server di rumah, dan bahkan jika tidak, pi raspberry dapat dengan mudah mengisi celahnya. Tetapi idealnya adalah bahkan tidak perlu server ketika berbicara dengan perangkat melalui LAN (Wifi dalam kasus ini). Saya lebih suka untuk tetap P2P sebanyak mungkin, dan hanya menggunakan MQTT sebagai jatuh kembali ketika saya menggunakan WAN (MQTT memecahkan masalah CG-NAT dan port forwarding).

hjf
sumber
1
Selamat datang di situs, hjf! Saat ini, pertanyaan Anda cukup luas. Akan membantu jika Anda bisa sedikit lebih spesifik: misalnya, bahasa apa yang Anda gunakan saat ini, dan kesalahan / masalah spesifik apa yang Anda hadapi?
anonim2
1
@ anonim2 yah itu pertanyaan yang sangat umum. Saya tidak ingin bertanya secara spesifik "dapatkah saya membuat pertanyaan mDNS langsung dari browser?" karena jawabannya adalah TIDAK. Ada standar tentang itu tetapi tidak ada implementasi. Saya mencari alternatif atau fungsi serupa.
hjf
Nama host MDNS yang dikenal berfungsi dengan baik dari browser yang berjalan pada sistem operasi seperti OSX atau sebagian besar Linuces yang mendukungnya, meskipun menjelajah mungkin tidak berfungsi. Dan tentu saja mereka tidak bekerja pada sistem operasi seperti Windows atau Android yang tidak mendukung mereka, kecuali jika kemampuan tambahan diinstal.
Chris Stratton

Jawaban:

6

Saya tidak mengetahui adanya kemampuan pencarian lokal generik yang terpasang di browser. Sebenarnya saya akan mempertimbangkan kemampuan apa pun untuk menjadi keamanan terhormat karena akan memungkinkan penyerang untuk profil jaringan Anda dari jarak jauh kecuali jika ada langkah interaksi manual untuk memulainya, yang benar-benar akan memperlambat alur kerja yang saya pikir Anda tuju.

Saya dapat memikirkan 2 hal yang mendekati:

  1. Kemudahan penemuan Chromecast dimasukkan ke dalam Chrome. Ini dulunya merupakan plugin terpisah sebelum digulirkan. Tetapi ini masih membutuhkan langkah manual ke mana pengguna memicu pencarian dan kemudian pemilihan manual rincian perangkat untuk dikembalikan ke halaman / javascript. (ini menggunakan SSDP di bawah selimut iirc)

  2. Dukungan pemindaian WebBluetooth. Ini mengikuti model yang mirip dengan penemuan Chromecast, Pengguna harus memulai pemindaian, kemudian mereka harus memilih secara manual dari perangkat yang ditemukan oleh browser yang detailnya dapat dikembalikan ke javascript di halaman.

Saya telah menggunakan pendekatan WebBluetooth untuk menemukan saklar lampu lokal (Saya punya aplikasi BLE pada pi nol mengendalikan bola WeMo Belkin https://github.com/hardillb/physical-web-lightswitch ). Ini berfungsi tetapi tidak mulus karena membutuhkan setidaknya 2 interaksi pengguna untuk menemukan satu perangkat.

Meskipun tidak memenuhi semua persyaratan lokal Anda, saya pikir menggunakan pendekatan cloud broker bahkan ketika beroperasi secara lokal, itu akan menjadi pengalaman pengguna yang lebih lancar.

hardillb
sumber
Jawaban bagus. Bukan itu yang aku cari, tapi kurasa itulah yang kuharapkan. Ada NSD API dari W3C tetapi satu-satunya implementasi adalah untuk Google Chrome Apps. I
hjf
Sepertinya API NSD telah dibunuh dari doc: w3.org/TR/discovery-api
hardillb
Teori keamanan yang diusulkan di sini memiliki beberapa hal yang terbelakang: jika ada masalah, itu bukan dengan hal yang melakukan pencarian (browser) melainkan hal yang membuat dirinya dapat ditemukan. Anda dipersilakan untuk pendapat Anda sendiri tentang kebijaksanaan dapat ditemukan tetapi perlu dicatat bahwa ini adalah perilaku standar yang sangat umum dari banyak komputer pribadi, printer, dan perangkat lainnya. The kemauan dari browser dioperasikan oleh yang berwenang pihak untuk menemukan sesuatu (atau tidak) mengatakan apa-apa tentang kemampuan pihak yang tidak sah untuk menemukan perangkat.
Chris Stratton
2

Jika Anda memiliki antarmuka web pada perangkat, dan mengonfigurasinya untuk memiliki nama host MDNS melalui layanan responden MDNS seperti bonjour atau avahi, maka dari sistem operasi yang berfitur Anda dapat mengarahkan browser Anda di

https: //livingroomlight.local

Atau apa pun yang Anda konfigurasikan untuk memanggil dirinya sendiri.

Ini akan bekerja di luar kotak dengan browser yang berjalan di OSX, iOS dan sebagian besar Linuces, yang semuanya mendukung resolusi nama host MDNS pada tingkat sistem.

Namun, ini tidak akan berfungsi dari Windows kecuali jika Anda menginstal dukungan MDNS add-on, dan itu tidak akan bekerja dengan browser Android stock meskipun dimungkinkan untuk membuat aplikasi browser kustom untuk Android yang mendukungnya.

Menemukan instance yang tidak dikenal di jaringan biasanya tidak didukung oleh browser, tetapi biasanya didukung melalui sistem operasi API dan alat baris perintah seperti dns-sd(OSX) dan avahi-browse(Linux).

Jadi, meskipun tidak tampak jelas bahwa peramban dapat menemukan perangkat Anda, jika Anda dapat dengan mudah mengingat apa yang Anda sebut salah satu dari mereka, Anda dapat terhubung ke sana, dan itu berpotensi menunjukkan kepada Anda tautan ke semua rekan-rekannya, dengan melakukan MDNS cari sendiri.

Atau Anda dapat menjalankan terminal dan mendapatkan jawaban sendiri. Untuk itu Anda dapat menjalankan daemon lokal yang akan melakukan pencarian MDNS dan menunjukkan hasilnya sebagai halaman tautan yang hanya disajikan pada antarmuka loopback, dan karenanya tidak dapat diakses oleh mesin lain.

Chris Stratton
sumber
1
Memalukan. Ini bisa menjadi alternatif jika didukung. Saya bertanya-tanya apa alasan tidak mendukung mdns-sd di browser? Ngomong-ngomong, saya pikir satu-satunya cara untuk bekerja dengan andal adalah dengan menggunakan MQTT sebagai metode penemuan. Miliki semacam "umumkan" titik akhir di mana perangkat akan melaporkan diri mereka sendiri, dan simpan jawaban itu.
hjf
Bukan browser yang melakukan semua ini - ini adalah implementasi DNS sistem operasi yang diperpanjang, yang berarti bahwa browser (atau apa pun) dapat menggunakan nama seperti livingroomlight.local MQTT tidak akan membantu Anda - sesuatu akan memiliki untuk mengumpulkan hasil dan mempresentasikannya, terlepas dari apakah itu kotak perangkat keras, daemon pada PC, atau manusia.
Chris Stratton
1
Tapi Android mendukung mDNS di "aplikasi". Dimungkinkan untuk mengirim permintaan mDNS melalui aplikasi, dan mendapatkan tanggapan. Kenapa tidak ada yang mengimplementasikan mDNS-SD dan mengeksposnya ke JS? Ada standar yang ditarik dan hanya diterapkan sebagian, khusus untuk mendeteksi Chromecast.
hjf
1
Sekali lagi, karena tidak ada yang berurusan dengan MDNS di browser web; ini bekerja untuk nama host yang dikenal di mana DNS sistem operasi yang mendasarinya diperluas untuk mendukungnya. Android tidak, meskipun ia menawarkan kemampuan MDNS ke aplikasi melalui API unik Android yang tidak ada hubungannya dengan cara menyelesaikan nama domain.
Chris Stratton
1
Itu maksudku. Mengapa tidak ada yang mendorong ini? Dengan IoT menjadi semakin umum, bagaimana mungkin API semacam ini dikunci khusus vendor dan W3C telah menarik standar?
hjf