Automação IoT

Integração MQTT no Home Assistant: Guia Completo de Configuração

Configure a integração MQTT do Home Assistant, defina sensores e interruptores em YAML, teste todo o fluxo com broker.connectmq.com e depois migre para um broker privado e autenticado.

Painel do Home Assistant exibindo sensores e interruptores conectados por um broker na nuvem em uma configuração home assistant mqtt
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

O suporte a MQTT do Home Assistant permite trazer para a sua casa inteligente qualquer dispositivo que fale MQTT: sensores ESP32 caseiros, tomadas Tasmota, redes Zigbee2MQTT e até gateways industriais. Neste guia você vai configurar a integração MQTT do Home Assistant, criar sensores e interruptores em YAML, testar tudo com o servidor MQTT público (gratuito) em broker.connectmq.com e, em seguida, migrar para um broker privado da ConnectMQ com TLS.

Como o Home Assistant usa o MQTT

O Home Assistant não é um broker MQTT. Sua integração MQTT é um cliente que se conecta a um broker, assina tópicos de estado e publica em tópicos de comando. Os dispositivos são clientes do mesmo broker. O broker fica no meio e roteia as mensagens, como explicamos em detalhes em o que faz um broker MQTT.

Isso oferece duas opções de hospedagem:

Opção Onde o broker roda Indicado para Contrapartidas
Add-on Mosquitto No próprio host do Home Assistant Uma única casa, todos os dispositivos na LAN Dispositivos remotos exigem redirecionamento de porta ou VPN; você cuida dos backups
Broker na nuvem Hospedado, acessado via TLS Dispositivos em vários locais, sensores remotos, compartilhamento de dados com outros apps Exige internet; escolha um provedor confiável
Ambos, em bridge Mosquitto local em bridge com um broker na nuvem Resiliência local e acesso remoto Mais configuração

Este tutorial usa um broker na nuvem porque ele funciona da mesma forma, seja o Home Assistant rodando em um Raspberry Pi, um NUC ou uma máquina virtual. Se quiser entender o raciocínio completo e a opção com bridge, leia como usar um broker MQTT externo com o Home Assistant.

Passo 1: Adicione a integração MQTT

  1. Abra Settings > Devices & services.
  2. Clique em Add integration e pesquise por MQTT.
  3. Escolha MQTT (não um add-on) e informe os dados do broker:
    • Broker: broker.connectmq.com
    • Porta: 1883
    • Usuário e senha: deixe em branco para o broker público de testes
  4. Envie. O Home Assistant se conecta e cria a entrada da integração MQTT.

Para definir o client ID, o TLS ou a versão do protocolo, ative primeiro o Advanced mode no seu perfil de usuário. A caixa de configuração da integração passa a mostrar campos extras, como client ID, keep alive, validação do certificado do broker, transporte (TCP ou WebSockets) e versão do protocolo MQTT. Você vai precisar deles no Passo 6.

O servidor MQTT público exige um client ID não vazio. O Home Assistant gera um aleatório automaticamente quando o campo fica em branco, o que é suficiente para testes.

Passo 2: Verifique a conexão

Abra Settings > Devices & services > MQTT > Configure. Essa página tem um formulário Publish a packet e outro Listen to a topic.

Em Listen to a topic, digite connectmq/demo/ha-x7m2/# e clique em Start listening. Depois, de qualquer computador, publique uma mensagem de teste:

mosquitto_pub -h broker.connectmq.com -p 1883 -i ha-test-x7m2 \
  -t "connectmq/demo/ha-x7m2/test" -m "hello from the terminal"

A mensagem aparece no Home Assistant em menos de um segundo. Se não aparecer, verifique se o host do Home Assistant consegue acessar a porta 1883 de saída; algumas redes a bloqueiam e, nesse caso, use a 8883 com TLS.

Passo 3: Crie um sensor MQTT em YAML

Suponha que um ESP32 publique temperatura e umidade em JSON no tópico connectmq/demo/ha-x7m2/livingroom/climate:

{"temperature": 22.7, "humidity": 48.1, "battery": 87}

Adicione isto ao configuration.yaml (ou a um arquivo incluído a partir dele):

mqtt:
  sensor:
    - name: "Living Room Temperature"
      unique_id: livingroom_temperature_x7m2
      state_topic: "connectmq/demo/ha-x7m2/livingroom/climate"
      value_template: "{{ value_json.temperature }}"
      unit_of_measurement: "°C"
      device_class: temperature
      state_class: measurement
      expire_after: 600

    - name: "Living Room Humidity"
      unique_id: livingroom_humidity_x7m2
      state_topic: "connectmq/demo/ha-x7m2/livingroom/climate"
      value_template: "{{ value_json.humidity }}"
      unit_of_measurement: "%"
      device_class: humidity
      state_class: measurement
      expire_after: 600

O unique_id permite renomear a entidade e atribuí-la a uma área pela interface. O expire_after marca o sensor como indisponível se nenhuma mensagem chegar em dez minutos, e é assim que você percebe uma bateria descarregada. O state_class: measurement habilita as estatísticas de longo prazo.

Recarregue em Developer tools > YAML > Manually configured MQTT entities e então simule o dispositivo:

mosquitto_pub -h broker.connectmq.com -p 1883 -i ha-test-x7m2 \
  -t "connectmq/demo/ha-x7m2/livingroom/climate" \
  -m '{"temperature": 22.7, "humidity": 48.1, "battery": 87}'

Passo 4: Crie um interruptor MQTT

Um interruptor precisa de um tópico de comando, no qual o Home Assistant publica, e de um tópico de estado, no qual o dispositivo informa sua situação:

mqtt:
  switch:
    - name: "Desk Lamp"
      unique_id: desk_lamp_x7m2
      command_topic: "connectmq/demo/ha-x7m2/desk-lamp/set"
      state_topic: "connectmq/demo/ha-x7m2/desk-lamp/state"
      availability_topic: "connectmq/demo/ha-x7m2/desk-lamp/availability"
      payload_on: "ON"
      payload_off: "OFF"
      state_on: "ON"
      state_off: "OFF"
      qos: 1
      retain: false

Coloque sensores e interruptores sob uma única chave mqtt: na sua configuração; o YAML não permite repetir a chave. Se ainda não tiver hardware, faça você mesmo o papel do dispositivo:

# atue como o dispositivo: anuncie a disponibilidade e informe o estado
mosquitto_pub -h broker.connectmq.com -p 1883 -i ha-dev-x7m2 -r \
  -t "connectmq/demo/ha-x7m2/desk-lamp/availability" -m "online"
mosquitto_pub -h broker.connectmq.com -p 1883 -i ha-dev-x7m2 -r \
  -t "connectmq/demo/ha-x7m2/desk-lamp/state" -m "OFF"

# observe os comandos que o Home Assistant envia ao acionar o interruptor
mosquitto_sub -h broker.connectmq.com -p 1883 -i ha-dev2-x7m2 \
  -t "connectmq/demo/ha-x7m2/desk-lamp/set" -v

Ao alternar o interruptor no painel, ON aparece no terminal. Publique ON no tópico de estado para confirmar, e o interruptor permanece ligado. Sem um tópico de estado, o Home Assistant opera o interruptor em modo otimista e simplesmente presume que o comando funcionou.

Para lâmpadas com brilho ajustável, use a plataforma light com schema: json; o formato do payload é o mesmo do dimmer do nosso tutorial de iluminação inteligente com MQTT.

Passo 5: Um dispositivo real

O dispositivo real mais rápido de montar é um ESP32 rodando um sketch curto, como no tutorial de ESP32 com MQTT, publicando no mesmo tópico de clima. Dispositivos ESPHome e Tasmota também podem publicar via MQTT; veja ESPHome MQTT. Em vez de escrever YAML para cada entidade, esses dispositivos podem se anunciar automaticamente por meio do MQTT discovery do Home Assistant.

Passo 6: Migre para um broker privado com TLS

O servidor MQTT público é perfeito para a primeira hora, mas tudo o que passa por ele pode ser lido por qualquer pessoa, e qualquer um pode publicar no tópico de comando do seu interruptor. Os dados da sua casa devem ficar em um broker privado. Há também um motivo prático: o servidor MQTT público permite 10 assinaturas por cliente, e o Home Assistant assina um tópico por entidade, além dos tópicos de discovery, então você atinge o limite rapidamente.

  1. Cadastre-se no portal da ConnectMQ, crie um broker e copie o usuário, a senha e o client ID gerados.
  2. No Home Assistant, abra Settings > Devices & services > MQTT, abra o menu da entrada e escolha Reconfigure (ou Configure e depois Re-configure MQTT, dependendo da versão).
  3. Defina a porta 8883, informe usuário e senha, defina o client ID com o valor emitido e ajuste a validação do certificado do broker para Auto, para que o repositório de CAs do sistema valide o certificado Let's Encrypt.
  4. Troque seus tópicos de connectmq/demo/ha-x7m2/... para uma raiz própria, por exemplo home/livingroom/climate, tanto nos dispositivos quanto no YAML.

O client ID precisa coincidir exatamente com o emitido, porque a ConnectMQ vincula os client IDs às credenciais. Uma divergência aparece como linhas repetidas de "connection refused, not authorized" no log do Home Assistant.

Checklist de solução de problemas

  1. A integração não conecta. Teste o mesmo host, porta e credenciais com mosquitto_sub a partir de outra máquina.
  2. A entidade aparece como unknown. O dispositivo não publicou nada desde que o Home Assistant iniciou. Publique o estado com a flag retain.
  3. A entidade aparece como unavailable. Ou o expire_after expirou, ou o tópico de disponibilidade informa offline.
  4. Erros de template no log. O payload não é o JSON esperado; escute o tópico e compare.
  5. Dois brokers disputam o mesmo dispositivo. Um dispositivo só se conecta a um broker por vez; escolha um ou faça uma bridge entre eles.
  6. Desconexões a cada poucos segundos. Dois clientes usam o mesmo client ID e derrubam um ao outro.

Rode o Home Assistant na ConnectMQ

Crie um broker no plano Serverless (Free) em app.connectmq.com, sem cartão de crédito. Até 25 conexões atendem uma casa típica, e o explorador de tópicos ao vivo da ConnectMQ ajuda você a depurar payloads sem sair do navegador. Se estiver em dúvida sobre como um broker MQTT gerenciado se compara a rodar o Mosquitto por conta própria, a comparação acima e o guia de automação IoT vão ajudar você a decidir.

Perguntas frequentes

O Home Assistant inclui um broker MQTT?

Não. A integração MQTT é um cliente. Você instala o add-on Mosquitto ou se conecta a um broker externo, como a ConnectMQ.

Posso usar YAML e discovery ao mesmo tempo?

Sim. Entidades definidas em YAML e entidades descobertas convivem na mesma integração, desde que seus unique IDs sejam diferentes.

Qual porta o Home Assistant deve usar com um broker na nuvem?

Use a 8883 com TLS. A porta 1883 envia credenciais e dados sem criptografia e só deve ser usada para dados públicos de teste.

Por que meu interruptor desliga sozinho?

O dispositivo publica OFF no tópico de estado, ou uma mensagem OFF retida está sendo reenviada. Verifique o tópico de estado com um assinante e limpe mensagens retidas obsoletas.

Artigos relacionados

Guia de Configuração do Zigbee2MQTT: do Coordenador ao Painel

Instale o Zigbee2MQTT com Docker, configure o coordenador e a conexão MQTT, pareie e renomeie dispositivos, controle-os via MQTT e veja seus estados em um painel, testando primeiro no servidor MQTT público (gratuito).

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.