Phát hiện thiết bị IoT trong trình duyệt web?


11

Gần đây tôi đã mua một vài rơle wifi từ Xiaomi. Mặc dù chúng đã rất ổn định cho đến nay, tôi thực sự không thích ứng dụng của Xiaomi. Nhưng, tôi thích ý tưởng rằng nó thực sự hoạt động cả trong mạng LAN và qua internet. Khi ở trong mạng LAN, họ rất nhanh chóng bật và tắt, xem xét các máy chủ của Xiaomi đang ở Trung Quốc.

Vì vậy, tôi muốn cuộn rơle dựa trên ESP8266 của riêng mình (tôi biết tôi có thể chuẩn bị phần cứng sẵn sàng, vì vậy đó là một phần thưởng). Vấn đề của tôi là, làm thế nào tôi có thể tự động phát hiện các rơle trên mạng của mình từ một trang web?

Từ một "Ứng dụng", tôi có thể sử dụng SSDP, mDNS-SD hoặc UPNP để phát hiện mọi thứ. Nhưng tôi chưa tìm thấy thông tin về thời tiết này có thể có từ trình duyệt web (về cơ bản Chrome trên Android). Vì tôi đã thay đổi trang web trạm thời tiết của mình thành Ứng dụng web lũy tiến, tôi đã bị cuốn hút. Tôi thực sự thích ý tưởng về những thứ chỉ là trang web chứ không phải ứng dụng bạn phải cài đặt. Và PWAs cũng lấp đầy khoảng trống với chế độ ngoại tuyến.

Mặc dù vậy, điều kỳ lạ là phần "khó" (bật và tắt rơle từ bên ngoài mạng LAN) lại không quan trọng để giải quyết thông qua máy chủ MQTT. Nhưng tôi không muốn dựa vào máy chủ MQTT bên ngoài. Nếu tôi đang ở trên mạng LAN, tôi muốn nói chuyện trực tiếp với rơle. Nếu không, sau đó gửi lệnh thông qua MQTT.

Tất nhiên, tôi có thể dựa vào máy chủ để truy vấn các rơle, nhưng trong trường hợp đó tôi cần kết nối internet (nếu máy chủ MQTT của tôi nằm trên "đám mây") hoặc máy chủ lưu trữ tại nhà. Tôi có một máy chủ ở nhà, và ngay cả khi tôi không có, một quả mâm xôi pi có thể dễ dàng lấp đầy khoảng trống. Nhưng lý tưởng sẽ không cần đến máy chủ khi nói chuyện với các thiết bị qua mạng LAN (Wifi trong trường hợp này). Tôi thích giữ cho P2P càng nhiều càng tốt và chỉ sử dụng MQTT như một cách dự phòng khi tôi sử dụng mạng WAN (MQTT giải quyết các vấn đề về CG-NAT và chuyển tiếp cổng).


1
Chào mừng đến với trang web, hjf! Hiện tại, câu hỏi của bạn khá rộng. Sẽ có ích nếu bạn có thể cụ thể hơn một chút: ví dụ: bạn đang sử dụng ngôn ngữ nào và những lỗi / vấn đề cụ thể nào bạn đang gặp phải?
nặc

1
@ nặc danh2 đó là một câu hỏi rất chung chung. Tôi không muốn hỏi cụ thể "tôi có thể thực hiện các truy vấn mDNS trực tiếp từ trình duyệt không?" bởi vì câu trả lời là KHÔNG. Có một tiêu chuẩn về điều đó nhưng không thực hiện. Tôi đang tìm giải pháp thay thế hoặc chức năng tương tự.
hjf

Tên máy chủ MDNS đã biết hoạt động tốt từ trình duyệt chạy trên hệ điều hành như OSX hoặc hầu hết Linuces hỗ trợ chúng, mặc dù trình duyệt có thể không hoạt động. Và tất nhiên, chúng không hoạt động trên một hệ điều hành như Windows hoặc Android không hỗ trợ chúng, trừ khi khả năng bổ sung được cài đặt.
Chris Stratton

Câu trả lời:


6

Tôi không biết về bất kỳ khả năng khám phá cục bộ chung nào được tích hợp trong trình duyệt. Trong thực tế, tôi sẽ coi bất kỳ khả năng nào là khả năng bảo mật vì nó sẽ cho phép kẻ tấn công lập hồ sơ mạng của bạn từ xa trừ khi nó có một bước tương tác thủ công để khởi động nó, điều này thực sự sẽ làm chậm tiến trình công việc mà tôi nghĩ bạn đang hướng tới.

Tôi có thể nghĩ về 2 điều đến gần:

  1. Khả năng khám phá Chromecast được đưa vào Chrome. Đây từng là một plugin riêng biệt trước khi được đưa vào. Nhưng điều này vẫn yêu cầu một bước thủ công để người dùng kích hoạt tìm kiếm và sau đó chọn thủ công các chi tiết thiết bị được đưa trở lại trang / javascript. (cái này sử dụng SSDP dưới iirc cover)

  2. Hỗ trợ quét WebBluetooth. Điều này tuân theo một mô hình tương tự như khám phá Chromecast, Người dùng phải bắt đầu quét, sau đó họ phải chọn thủ công từ các thiết bị được tìm thấy bởi trình duyệt có chi tiết được chuyển trở lại javascript trong trang.

Tôi đã sử dụng phương pháp WebBluetooth để khám phá công tắc đèn cục bộ (Tôi có ứng dụng BLE trên số 0 điều khiển bóng đèn Belkin WeMo https://github.com/hardillb/physical-web-lightwitch ). Nó hoạt động nhưng nó không liền mạch vì nó yêu cầu ít nhất 2 tương tác của người dùng để khám phá một thiết bị duy nhất.

Mặc dù nó không đáp ứng tất cả các yêu cầu cục bộ của bạn, tôi nghĩ rằng sử dụng phương pháp môi giới đám mây ngay cả khi hoạt động cục bộ, đó sẽ là trải nghiệm người dùng mượt mà hơn.


Câu trả lời tốt đẹp. Đó không phải là tôi đang tìm kiếm, nhưng đó là những gì tôi đang mong đợi tôi đoán. Có API NSD từ W3C nhưng việc triển khai duy nhất là dành cho Ứng dụng Google Chrome. Tôi
hjf

Có vẻ như API NSD đã bị giết khỏi tài liệu: w3.org/TR/discovery-api
hardillb

Lý thuyết bảo mật được đề xuất ở đây có những điều ngược lại: nếu có vấn đề, thì đó không phải là việc thực hiện khám phá (trình duyệt) mà là điều khiến bản thân có thể khám phá được. Bạn hoan nghênh ý kiến ​​của riêng bạn về sự khôn ngoan của khả năng khám phá nhưng đáng chú ý đó là hành vi mặc định cực kỳ phổ biến của nhiều máy tính cá nhân, máy in và các thiết bị khác. Sự sẵn sàng của một trình duyệt được điều hành bởi một bên được ủy quyền để tìm thứ gì đó (hoặc không) không nói gì về khả năng của một bên trái phép khám phá các thiết bị.
Chris Stratton

2

Nếu bạn có giao diện web trên thiết bị và định cấu hình nó để có tên máy chủ MDNS thông qua dịch vụ phản hồi MDNS như bonjour hoặc avahi, thì từ các hệ điều hành có tính năng, bạn có thể chỉ trình duyệt của mình vào

https: //livingroomlight.local

Hoặc bất cứ điều gì bạn cấu hình nó để gọi chính nó.

Điều này sẽ hoạt động tốt với các trình duyệt chạy trên OSX, iOS và hầu hết Linuces, tất cả đều hỗ trợ độ phân giải tên máy chủ MDNS ở cấp hệ thống.

Tuy nhiên, điều này sẽ không hoạt động từ Windows trừ khi bạn cài đặt hỗ trợ MDNS bổ trợ và nó sẽ không hoạt động với các trình duyệt Android gốc mặc dù có thể tạo các ứng dụng trình duyệt tùy chỉnh cho Android có hỗ trợ.

Khám phá các trường hợp không xác định trên mạng thường không được trình duyệt hỗ trợ, nhưng thường được hỗ trợ thông qua API hệ điều hành và các công cụ dòng lệnh như dns-sd(OSX) và avahi-browse(Linux).

Vì vậy, mặc dù trình duyệt có thể tìm thấy thiết bị của bạn không rõ ràng , nếu bạn chỉ cần nhớ những gì bạn đã gọi là một trong số đó, bạn có thể kết nối với nó và nó có khả năng hiển thị cho bạn các liên kết đến tất cả các đồng nghiệp của nó, bằng cách thực hiện MDNS tự tìm kiếm

Hoặc bạn có thể kích hoạt một thiết bị đầu cuối và nhận cho mình một câu trả lời. Đối với vấn đề đó, bạn có thể chạy một trình nền cục bộ sẽ thực hiện tìm kiếm MDNS và hiển thị cho bạn kết quả dưới dạng một trang của các liên kết chỉ được phục vụ trên giao diện loopback và do đó không thể truy cập được vào bất kỳ máy nào khác.


1
Thật là ngại quá. Đây có thể là một sự thay thế nếu được hỗ trợ. Tôi tự hỏi lý do không hỗ trợ mdns-sd trong trình duyệt là gì? Dù sao, tôi nghĩ cách duy nhất để mọi thứ hoạt động đáng tin cậy là chỉ sử dụng MQTT như một phương pháp khám phá. Có một số loại điểm cuối "thông báo" nơi các thiết bị sẽ tự báo cáo và lưu trữ các câu trả lời đó.
hjf

Đây không phải là trình duyệt làm bất kỳ điều gì trong số này - đó là triển khai DNS mở rộng của hệ điều hành, có nghĩa là trình duyệt (hoặc bất cứ thứ gì khác) có thể sử dụng tên như Livingroomlight.local MQTT sẽ không thực sự giúp bạn - điều gì đó sẽ có để thu thập kết quả và trình bày chúng, bất kể đó là hộp phần cứng, daemon trên PC hay con người.
Chris Stratton

1
Nhưng android hỗ trợ mDNS trong "ứng dụng". Có thể gửi truy vấn mDNS thông qua các ứng dụng và nhận phản hồi. Tại sao không ai thực hiện mDNS-SD và đưa nó ra JS? Có một tiêu chuẩn đã được kéo và chỉ được thực hiện một phần, đặc biệt là để phát hiện Chromecast.
hjf

1
Một lần nữa, vì không ai giao dịch với MDNS trong trình duyệt web; nó hoạt động cho các tên máy chủ đã biết trong đó DNS của hệ điều hành cơ bản được mở rộng để hỗ trợ nó. Mặc dù vậy, Android không cung cấp khả năng MDNS cho các ứng dụng thông qua API riêng biệt, duy nhất của Android không liên quan gì đến cách giải quyết tên miền.
Chris Stratton

1
Đó là quan điểm của tôi. Tại sao không ai thúc đẩy điều này? Với việc IoT ngày càng trở nên phổ biến, làm thế nào có thể loại API này bị khóa cụ thể của nhà cung cấp và W3C đã đạt được tiêu chuẩn?
hjf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.