Instalando Mosquitto MQTT Broker no Ubuntu

Introdução

O Mosquitto é um agente de mensagens de código aberto que usa o protocolo MQTT (Message Queuing Telemetry Transport). O MQTT é executado sobre o modelo TCP/IP e é a plataforma de mensagens padrão para a Internet das Coisas (IoT).

Como o protocolo MQQT é extremamente leve, seu pequeno volume de código permite criar aplicativos para dispositivos com recursos mínimos, como bateria de curta duração, largura de banda de rede limitada e conexões de internet não confiáveis.

O aplicativo Mosquitto oferece suporte à topologia publicador/assinante. Nesse modelo, os clientes se conectam ao servidor Mosquitto, que atua como um intermediário para distribuir informações a outros clientes cadastrados ou enviando mensagens para um canal.

Instale o Servidor Mosquitto (no servidor)
sudo apt update && sudo apt install -y mosquitto && sudo systemctl status mosquitto

Instale o cliente do Mosquitto (no cliente)

sudo apt install -y mosquitto-clients
sudo apt install -y bwm-ng (opcional)

Ao usar um cliente MQTT, você se conecta ao broker Mosquitto para enviar e receber mensagens sobre diferentes tópicos, dependendo do caso de uso do aplicativo. Um cliente pode ser um editor, um assinante ou ambos.

No servidor:

*IP do servidor:

Para assinar um tópico, execute o mosquitto_sub -t comando seguido do nome do tópico que deseja assinar. Por exemplo, para se inscrever no tópico /notebook/memoria/total, execute:

mosquitto_sub -t "/notebook/memoria/total"

No cliente:

mosquitto_pub -m "1024GB" -t "/notebook/memoria/total"

mosquitto_pub -h 192.168.*.* -p 1883 -m "1024GB" -t "/notebook/memoria/total"

Proteja o Servidor Mosquitto

Por padrão, o servidor Mosquitto não é protegido. No entanto, você pode fazer algumas configurações para protegê-lo com nomes de usuário e senhas.

O Mosquitto lê as informações de configuração em: “/etc/mosquitto/conf.d

sudo vim /etc/mosquitto/conf.d/default.conf

Cole as informações abaixo para desativar o anonymous das conexões e permitir que o Mosquitto leia as credenciais válidas do /etc/mosquitto/passwd.

allow_anonymous false
password_file /etc/mosquitto/passwd

Edite o arquivo:

sudo vim /etc/mosquitto/passwd

Cole o conteúdo abaixo:

joserf:PASSWORD
jose:PASSWORD_2

Em seguida, use o mosquitto_passwd utilitário para criptografar as senhas.

sudo mosquitto_passwd -U /etc/mosquitto/passwd

Reinicie o mosquitto para carregar as novas alterações.

sudo systemctl restart mosquitto
mosquitto_pub -u joserf -P PASSWORD -t "TOPICO" -m "Teste de msg com senha"

*Comandos não autenticados ou conexões com credenciais incorretas agora devem falhar

Connection error: Connection Refused: not authorised.

Alguns exemplos:

Memória livre:

mosquitto_pub -h 192.168.*.* -p 1883 -t /notebook/memoria/livre -m `free |head -n2|tail -n1| awk '{print $2}'`

Tráfego de rede (Download):

mosquitto_pub -h 192.168.*.* -p 1883 -t download -m `bwm-ng -o csv -c 1 -T rate -I enp4s0 | head -n1 | cut -d ';' -f 4`

Tráfego de rede (Upload):

mosquitto_pub -h 192.168.*.* -p 1883 -t upload -m `bwm-ng -o csv -c 1 -T rate -I enp4s0 | head -n1 | cut -d ';' -f 3`

Legenda para saída do comando “bwm-ng” unix_timestamp;iface_name;bytes_out;bytes_in;bytes_total;packets_out;packets_in;packets_total;errors_out;errors_in

Script:

#!/bin/bash

while true; do
  # O sinalizador -C definido como 1, fará com que o cliente saia após a primeira mensagem.
  mosquitto_sub -C 1 -h 192.168.*.*-t "TOPICO" > temp.txt
  mv temp.txt temp.json
done

*Isso tem a possibilidade de perder mensagens se a taxa de publicação for alta.