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).