Posts Automação residencial: MQTT
Post
Cancel

Automação residencial: MQTT

Message Queuing Telemetry Transport.

Logo do MQTT.
Logo do MQTT.

MQTT é um protocolo de mensagens feito pela IBM para a internet das coisas, IoT. Foi desenhado para ser extremamente leve, possuindo duas funções básicas, publicar (publish) e inscrever-se/assinar (subscribe). É ideal para ser usado em dispositivos com pequeno poder de processamento, pouca banda disponível e alimentação energética limitada (baterias).

Broker

O broker é o centro do MQTT. É a parte responsável por receber todas as mensagens e mantê-las disponíveis para os assinantes. Tem seu funcionamento baseado em tópicos, em que cada tópico normalmente carrega uma informação específica. Para simplificar, gosto de pensar que o broker é um enorme quadro de avisos, em que cada coluna representa um tópico.

Assinantes

Os dispositivos assinantes são aqueles que lêem e escrevem as informações no broker. É considerada uma boa prática escrever informações em um tópico e ler as informações de outro.

Tomemos como exemplo uma porta:

  • Sala/Porta/Estado é o tópico responsável por armazenar a informação se a porta está aberta ou fechada.

  • Sala/Porta/Comando é o tópico responsável dizer à porta se ela deve executar o comando de abrir ou fechar.

Ou seja, dentro do tópico Sala há o subtópico Porta, que é subdividido em outros dois, Estado e Comando. Tal divisão torna-se bastante útil para manter o sistema organizado e também para não ocorrer confusão ou erros com os comandos. Por exemplo, pode ser interessante que uma lâmpada seja capaz de acompanhar o Estado da porta, tendo seu acendimento simultâneo à abertura da porta. Ao mesmo tempo, não é interessante que esta luz seja capaz de mandar o Comando para a porta abrir. Com a divisão correta dos tópicos tal erro é evitado.

Funções

Publish

É a função publicar. É usando esta função que uma informação é escrita no broker e torna-se disponível para todos que podem ler aquele tópico.

É interessante conhecer a opção retain para mensagens publicadas. Com tal opção ligada, a mensagem permanece disponível no tópico até que outra mensagem a substitua. Isto é extremamente útil para evitar que um dispositivo fique sem informação alguma caso tenha se conectado a um tópico sem assinantes, caso em que as mensagens são automaticamente descartadas.

Subscribe

Usando-se a função de assinar, um dispositivo torna-se capaz de acompanhar um tópico e ler tudo o que for escrito nele. Caso um dispositivo precise ler mais de um tópico, é necessário assinar cada tópico deles individualmente ou assinar o tópico acima, para casos de subtópicos.

Instalação

Eclipse Mosquitto (broker)

Mosquitto e alguns clientes.
Mosquitto e alguns clientes.

É um programa de código aberto que funciona como broker MQTT. É de fácil instalação e funciona muito bem com o Home Assistant, estando disponível também como addon. Mesmo que normalmente usado apenas em LAN, recomendo sempre o uso de autenticação com usuário e senha para acessar o Mosquitto.

Como addon, basta ir na lista do Home Assistant e instalar o Mosquitto broker. Nas configurações após a instalação é possível definir login e senha.

O Mosquitto pode ser instalado via snap ou Docker. Para mais informações, consulte https://mosquitto.org/download/.

Paho MQTT (cliente)

Para a configuração de clientes usando Python, recomendo a biblioteca Paho-MQTT.

PubSubClient (cliente)

Caso esteja usando para clientes Arduino, NodeMCU ou ESP826, recomendo a biblioteca PubSubclient.

Tasmota (cliente)

Tela inicial do Tasmota.
Tela inicial do Tasmota.

Por fim, caso esteja usando ESP8266 ou até dispositivos de marcas como Sonoff, é possível utilizar o firmware Tasmota. Solução excelente para quem quer fugir dos firmwares estrangeiros e querem manter o controle total sobre seus dispositivos, não dependendo de entes na nuvem ou de empresas privadas. Por permitir que a configuração seja feita OTA (over the air), esta solução é bastante interessante e confiável, além de fácil manutenção.

This post is licensed under CC BY 4.0 by the author.