Acessar o servidor mosquitto MQTT de uma rede externa

Fala pessoal!

Ao contrario do que a maioria faz, usando MQTT para usar no Tasmota, eu quero utilizar o MQTT para me comunicar com um sub / pub externo (fora da minha rede local).
Criei um aplicativo que utiliza o MQTT para se comunicar com o HA, mas estou tendo dificuldade para acessar o broker de uma rede externa. Fiz testes na rede interna com o programa MQTT Explorer no PC e o MQTT Dash no smartphone e está tudo OK na rede local.

Utilizo o Nabu Casa para acessar remotamente o meu HA ja que minha rede tem CGNAT e o tutorial do Argo Tunnel do cloudflare não funcionou aqui.
Alguém saberia se eu consigo acessar o meu broker MQTT de uma rede externa?

Obrigado!

Olha eu não compreendo 100% como funciona a tecnologia do argo mas acredito que existe a possibilidade que não vá funcionar com mqtt tradicional. Talvez usando mqtt over websockets funcione (nas configurações do mosquitto tem opção pra escolher algumas portas uma delas é pra websockets).

Outra coisa pra se ter em mente é que se for expor seu broker pra internet o ideal é usar tls o que complica bastante em alguns casos

Gostaria também de aproveitar pra sugerir algumas alternativas,
A primeira seriar usar um serviço de broker mqtt na cloud, por conta do cgnat.
A segunda é usar vpn pra trabalhar com o mqtt como se estivesse em rede local.
E a terceira é nem usar o mqtt externamente, sem saber mais detalhes do que você quer fazer fica difícil dar uma opção mais concreta de como fazer sem Mqtt mas uma opção seria usar a api do ha.

Obrigado por responder Ariel.
Poderia me falar mais sobre a api do HA?
Algum material pra dar uma olhada?
Não conheço.
Pensei em de repente fazer por webhook mas tb não tenho conhecimento.

Nas configurações do Cloudflare Tunnel, consegui dessas 2 formas:

ingress:
- service: mqtt://homeassistant:1883
  hostname: mqtt.meudominio.com.br
- service: ws://homeassistant:1884
  hostname: mqttws.meudominio.com.br

Cloudflare Tunnel

Nas configurações do Mosquitto broker, coloquei assim:


Mosquitto broker

E pra testar, funcionou tanto na porta 80 com SSL DESMARCADO quanto na porta 443 com SSL MARCADO (eu sugeriria esta 2ª opção)


HiveMQ Client

Essas foram as combinações que funcionaram comigo:

  • mqtt.meudominio.com.br:80 - SSL desmarcado
  • mqtt.meudominio.com.br:443 - SSL marcado
  • mqttws.meudominio.com.br:80 - SSL desmarcado
  • mqttws.meudominio.com.br:443 - SSL marcado

Percebi que, independente da combinação, HiveMQ sempre usa o protocolo “wss”.

Vale salientar que para conseguir conectar usando porta 80, precisei acessar “about:config” do Firefox e setar “true” temporariamente na diretiva “network.websocket.allowInsecureFromHTTPS”

Já quando tentei usar MQTTlens, só consegui com essa combinação abaixo:

  • tcp://mqttws.meudominio.com.br:80

Mas meu Cloudflare Tunnel não funciona de jeito nenhum. :smiling_face_with_tear:

Estou procurando uma alternativa.

Depois com calma, segue o tutorial oficial, são apenas 5 passos.

Nas configurações do add-on ou no configuration. yaml ?

Nas configurações do add-on.

Segue lá o tutorial que você vai ver direitinho onde incluir.

Se ainda assim tiver dúvida, me fala qual passo do tutorial gerou a dúvida que eu aprimoro ele.

Só ler com calma e ir fazendo passo-a-passo.

Eu fiz um teste sem o dominio próprio e funcionou, agora estou criando com dominion proprio mas o addon nao reconhece o dominio, esta criando um dominio temporario pra mim.

As configurações de quem não tem domínio de quem tem domínio próprio são diferentes.

Não é possível misturar as 2 configurações como sendo 1 só.

Quando tiver fazendo o passo do domínio próprio, remova suas configurações do domínio dinâmico e inclua as configurações do domínio próprio.

No tutorial tem explicando as 2 formas.
Aí você segue uma parte OU a outra, e não as 2.

O que está errado?

Linha 19 não deve existir quando você tem domínio próprio.

Depois vou evoluir o add-on pra impedir de colocarem lista não vazia de ingress e url na mesma configuração.

Funcionou!!! Muuuito obrigado!!

Desculpa a falta de conhecimento, mas não ficou claro pra mim onde devo colocar os dados do MQTT.
Coloquei no ingress mas deu erro. :confused:

log
Validation failed: Rule #2 is matching the hostname ‘’, but this will match every hostname, meaning the rules which follow it will never be triggered.
[15:18:01] FATAL: Config file is invalid

Esse trecho que você copiou deve ficar na lista de ingress juntamente como os demais serviços.
No seu print, fica abaixo da linha 7

Com essa dica funcionou. :smiley:
Estava colocando depois das informações do argo.

Porém não consigo conectar ao servidor pelo site que sugeriu para testes.
O que posso estar fazendo errado?

Preciso redirecionar alguma porta no modem do provedor?

colocou usuário e senha válidos ?
qual porta informou ? se tiver colocado porta 443, marcou a opção SSL ?
colocou o host igual ao que você configurou no argo ?
qual mensagem de erro ?

não precisa redirecionar nenhuma porta
que eu saiba, as únicas disponíveis usando argo são 80 e 443.
mas internamente, ele redireciona pra qualquer outra que você configurar lá no ingress.

Do nada começou a funcionar sem eu fazer nada. hehe

Mas só funciona neste site hivemq.com
Quanto testo em outros programas ou aplicativos o broker não conecta e este site não conecta no broker de testes do mosquitto. Porquê?

Eu coloquei o broker de testes do mosquitto no HA e está recebendo os dados certinho também.
Com o broker de testes, meu app conectou e conseguiu postar, no que configuramos ele não conecta.

Não entendi o que está falando.
Precisa detalhar um pouco mais.
Talvez ajude se informar alguns prints, configurações usadas, links e/ou nomes dos programas.

Qual broker de testes do mosquitto ?
Quais outros programas ou aplicativos ?
Está falando disso Link to MQTT Configuration – My Home Assistant ? Testei aqui e funcionou.

Programa para pc MQTT Explorer

Não conecta no meu broker do HA mas conecta no broker de testes do mosquitto.

Configuração do broker de testes mosquitto

App de celular MQTT Dash não conecta no meu broker mas conecta no broker de testes mosquitto.

O app que estou fazendo é no App Inventor e usa um Addon chamado “UrsAI2MQTT1”. Não conecta no meu broker mas conecta no broker de testes mosquitto.

https://ullisroboterseite.de/android-AI2-MQTT-en.html

image

o protocolo mqtt:// pode ser usado se o acesso for a partir da rede interna.
pelo cloudflare, acredito que precise ser http://, https://, ws:// ou wss://
não tenho mqtt explorer instalado para testar.

o mqtt explorer está instalado num computador que está na mesma rede do home assistant ?
mqtt explorer permite fazer chamadas para um host IP ?
quais são as opções de protocolos disponíveis que aparece nesse programa ?

faltou print do principal que são as configurações do serviço que está dando problema.
aparentemente, você está tentando informar o IP da rede local. nesse caso, não estaria passando pelo cloudflare tunnel.