Recientemente compré un par de relés wifi de Xiaomi. Si bien han sido sólidos hasta ahora, realmente no me gusta la aplicación de Xiaomi. Pero, me gusta la idea de que realmente funciona tanto en LAN como a través de Internet. Cuando están en LAN, se encienden y apagan rápidamente, considerando que los servidores de Xiaomi están en China.
Así que quiero rodar mi propio relé basado en ESP8266 (sé que puedo preparar el hardware, así que es una ventaja). Mi problema es, ¿cómo puedo detectar automáticamente los relés en mi red desde una página web?
Desde una "aplicación" podría usar SSDP, mDNS-SD o UPNP para detectar cosas. Pero no he encontrado información sobre si esto es posible desde el navegador web (Chrome en Android básicamente). Desde que cambié la página web de mi estación meteorológica para que sea una aplicación web progresiva, me he enganchado. Realmente me gusta la idea de que las cosas solo sean páginas web y no aplicaciones que tienes que instalar. Y los PWA también llenan el vacío con el modo fuera de línea.
Sin embargo, es extraño que la parte "difícil" (encender y apagar los relés desde fuera de la LAN) sea trivial de resolver a través de un servidor MQTT. Pero preferiría no confiar en el servidor MQTT externo. Si estoy en la LAN, quiero hablar directamente con los relés. De lo contrario, envíe el comando a través de MQTT.
Podría, por supuesto, confiar en el servidor para consultar los relés, pero en ese caso necesitaría una conexión a Internet (si mi servidor MQTT está en la "nube"), o un servidor alojado en casa. Tengo un servidor en casa, e incluso si no lo tuviera, un raspberry pi podría llenar fácilmente el vacío. Pero lo ideal sería ni siquiera necesitar un servidor cuando se habla con los dispositivos a través de LAN (Wifi en este caso). Prefiero mantenerlo P2P tanto como sea posible, y solo uso MQTT como alternativa para cuando estoy en WAN (MQTT resuelve los problemas de CG-NAT y el reenvío de puertos).