Recentemente, comprei alguns relés wifi da Xiaomi. Embora tenham sido sólidos até agora, eu realmente não gosto do aplicativo da Xiaomi. Mas gosto da ideia de que ele realmente funciona tanto na LAN quanto na Internet. Quando na LAN, eles são muito rápidos de ligar e desligar, considerando que os servidores da Xiaomi estão na China.
Então, eu quero rolar meu próprio relé baseado no ESP8266 (eu sei que posso preparar o hardware, então isso é um bônus). Meu problema é: como posso detectar automaticamente os relés na minha rede a partir de uma página da web?
Em um "aplicativo", eu poderia usar SSDP, mDNS-SD ou UPNP para detectar coisas. Mas não encontrei informações sobre se isso é possível no navegador da web (Chrome no Android basicamente). Desde que mudei minha página da estação meteorológica para um aplicativo da Web progressivo, fiquei viciado. Eu realmente gosto da idéia de coisas serem apenas páginas da Web e não aplicativos que você precisa instalar. E os PWAs também preenchem a lacuna com o modo offline.
É estranho, porém, que a parte "difícil" (ligar e desligar os relés de fora da LAN) seja trivial para resolver por meio de um servidor MQTT. Mas eu preferiria não confiar no servidor MQTT externo. Se eu estiver na LAN, quero falar diretamente com os relés. Caso contrário, envie o comando através do MQTT.
É claro que eu poderia confiar no servidor para consultar os relés, mas nesse caso eu precisaria de uma conexão com a Internet (se meu servidor MQTT estiver na "nuvem") ou um servidor hospedado em casa. Eu tenho um servidor em casa e, mesmo que não tivesse, um pi de framboesa poderia facilmente preencher a lacuna. Mas o ideal seria nem precisar de um servidor ao conversar com os dispositivos pela LAN (neste caso, Wifi). Prefiro manter o máximo possível o P2P e usar o MQTT apenas como alternativa quando estou na WAN (o MQTT resolve os problemas do CG-NAT e do encaminhamento de porta).