Récemment, j'ai acheté quelques relais wifi à Xiaomi. Bien qu'ils aient été solides jusqu'à présent, je n'aime vraiment pas l'application de Xiaomi. Mais, j'aime l'idée que cela fonctionne réellement à la fois en LAN et sur Internet. Lorsqu'ils sont en LAN, ils s'allument et s'éteignent très rapidement, étant donné que les serveurs de Xiaomi sont en Chine.
Je veux donc rouler mon propre relais basé sur ESP8266 (je sais que je peux préparer le matériel, c'est donc un bonus). Mon problème est, comment puis-je détecter automatiquement les relais sur mon réseau à partir d'une page Web?
À partir d'une «application», je pouvais utiliser SSDP, mDNS-SD ou UPNP pour détecter des choses. Mais je n'ai pas trouvé d'informations sur si cela est possible à partir du navigateur Web (Chrome sur Android essentiellement). Depuis que j'ai changé ma page Web de station météo pour devenir une application Web progressive, je suis accro. J'aime vraiment l'idée que les choses ne soient que des pages Web et non des applications que vous devez installer. Et les PWA comblent également le vide avec le mode hors ligne.
Il est étrange cependant, que la partie "difficile" (allumer et éteindre les relais depuis l'extérieur du LAN) soit triviale à résoudre via un serveur MQTT. Mais je préfère ne pas compter sur le serveur MQTT externe. Si je suis sur le LAN, je veux parler directement aux relais. Sinon, envoyez la commande via MQTT.
Je pouvais, bien sûr, compter sur le serveur pour interroger les relais, mais dans ce cas, j'aurais besoin d'une connexion Internet (si mon serveur MQTT est sur le "cloud"), ou d'un serveur hébergé à domicile. J'ai un serveur à la maison, et même si je n'en avais pas, un Raspberry Pi pourrait facilement combler le vide. Mais l'idéal serait de ne même pas avoir besoin d'un serveur pour parler aux appareils via LAN (Wifi dans ce cas). Je préfère le garder P2P autant que possible, et utiliser uniquement MQTT comme solution de rechange lorsque je suis sur WAN (MQTT résout les problèmes de CG-NAT et de redirection de port).
Réponses:
Je ne connais aucune capacité de découverte locale générique intégrée à un navigateur. En fait, je considérerais toute capacité comme une vénérabilité de sécurité car elle permettrait aux attaquants de profiler votre réseau à distance à moins qu'il n'ait une étape d'interaction manuelle pour le démarrer, ce qui ralentirait vraiment le flux de travail, je pense que vous visez.
Je peux penser à 2 choses qui se rapprochent:
La visibilité du Chromecast intégrée dans le Chrome. Avant, il s'agissait d'un plugin séparé. Mais cela nécessite toujours une étape manuelle pour que l'utilisateur déclenche une recherche, puis une sélection manuelle des détails de l'appareil à renvoyer à la page / javascript. (ceci utilise SSDP sous les couvertures iirc)
Prise en charge de l'analyse WebBluetooth. Cela suit un modèle similaire à la découverte Chromecast, l'utilisateur doit lancer l'analyse, puis il doit choisir manuellement à partir des appareils trouvés par le navigateur les détails qui sont retransmis au javascript dans la page.
J'ai utilisé l'approche WebBluetooth pour découvrir un interrupteur d'éclairage local (j'ai une application BLE sur un pi zéro contrôlant une ampoule Belkin WeMo https://github.com/hardillb/physical-web-lightswitch ). Cela fonctionne, mais ce n'est pas transparent car il nécessite au moins 2 interactions utilisateur pour découvrir un seul appareil.
Bien qu'il ne réponde pas à toutes vos exigences locales, je pense que l'utilisation de l'approche cloud broker, même pour une utilisation locale, sera une expérience utilisateur plus fluide.
la source
Si vous avez une interface Web sur un appareil et que vous la configurez pour avoir un nom d'hôte MDNS via un service de répondeur MDNS tel que bonjour ou avahi, alors à partir de systèmes d'exploitation fonctionnels, vous pouvez simplement pointer votre navigateur sur
https: //livingroomlight.local
Ou quoi que vous l'ayez configuré pour s'appeler.
Cela fonctionnera dès le départ avec les navigateurs fonctionnant sur OSX, iOS et la plupart des Linuces, qui prennent tous en charge la résolution du nom d'hôte MDNS au niveau du système.
Cependant, cela ne fonctionnera pas à partir de Windows à moins que vous n'installiez la prise en charge du module complémentaire MDNS, et cela ne fonctionnera pas avec les navigateurs Android d'origine, bien qu'il soit possible de créer des applications de navigateur personnalisées pour Android qui le prennent en charge.
La découverte d' instances inconnues sur le réseau n'est généralement pas prise en charge par un navigateur, mais est généralement prise en charge via les API du système d'exploitation et les outils de ligne de commande tels que
dns-sd
(OSX) etavahi-browse
(Linux).Donc, même s'il ne semble pas évident qu'un navigateur puisse trouver vos appareils, si vous vous souvenez simplement de ce que vous avez appelé l'un d'eux, vous pouvez vous y connecter, et il pourrait potentiellement vous montrer des liens vers tous ses pairs, en faisant un MDNS se rechercher.
Ou vous pouvez démarrer un terminal et obtenir une réponse. Pour cette question, vous pouvez exécuter un démon local qui ferait une recherche MDNS et vous montrerait le résultat sous la forme d'une page de liens servis uniquement sur l'interface de bouclage, et donc inaccessible à aucune autre machine.
la source