MQTT: mudanças entre as edições
Linha 82: | Linha 82: | ||
lastWillRetain true 60 | lastWillRetain true 60 | ||
A ''flag'' | A ''flag'' '''cleanSession''' informa se a '''sessão''' é '''persistente''' ou não. | ||
O '''username''' e '''passwd''' são enviados em '''modo texto''', portanto, é aconselhável utilizá-las juntamente com '''transporte seguro''' através de autenticação de clientes com SSL. | |||
'''CONNACT''' | '''CONNACT''' |
Edição das 18h52min de 3 de abril de 2020
MQTT - Message Queue Telemetry Transport
MQTT (Message Queue Telemetry Transport) é um protocolo de mensagens para sensores e pequenos dispositivos móveis, baseado no modelo Publicador/Subscritor, ideal para aplicações de Internet das Coisas, em particular para a comunicação máquina a máquina (M2M - Machine to Machine). O protocolo MQTT trabalha no topo da pilha de protocolos TCP/IP.
Referências:
- Livro (LAMPKIN etal, 2012) [1].
- Site: MQTT Essentials [2].
As aplicações de Internet das Coisas podem envolver abordagens avançadas de telemetria, de forma a poder conectar diferentes dispositivos inteligentes em atividades de sensoreamento, monitoramento e controle, além da conexão dos mesmos a Internet ou a sistemas de controle central [1].
MQTT - Conceitos básicos
Conceitos básicos [1]:
- Publicador/Subscritor: O protocolo MQTT é baseado no modelo publisher/subscriber, isto é, o princípio de publicar mensagens (publisher) e subscrever tópicos (subscriber) para receber mensagens.
- Um cliente pode subscrever tópicos e receber mensagens de atualizações quando algo for publicado sobre este tópico. Alternativamente, um cliente pode publicar mensagens relativas a um dado tópico e deixá-la disponível para os assinantes.
- Tópicos e subscrições: As mensagens MQTT são publicadas em tópicos (topic), que são áreas de interesse.
- Os clientes, por sua vez, assinam para receber mensagens de uma dada subscrição. As subscrições podem ser explicitas, ou organizadas hierarquicamente, com o cliente usando wildcards (# ou +) para receber mensagens de uma variedade de tópicos.
- Exemplos:
- topic: /casa/terreo/temp
- topic: /casa/terreo/humid
- topic: /casa/superior/temp
- topic: /casa/superior/humid
- wildcard multilevel: /casa/terreo/# -> sensores do térreo
- wildcard sigle level: /casa/+ -> casa com térreo e superior, mas não com sensores.
- Qualidade de Serviço: O MQTT define três níveis de Qualidade de Serviço (QoS):
- (0) best effort, envia a mensagem uma vez;
- (1) envia a mensagem várias vezes;
- (2) assegura o recebimento da mensagem.
- Retem as mensagens: O servidor MQTT mantém as mensagens enviadas no brocker mesmo depois de enviada a todos os subscritores.
- Conexões duráveis e sessões limpas: Quando um cliente se conecta a um servidor a clean session flag = true. Desta forma, quando ele se desconectar todas as subscrições serão removidas. Se o clean session flag = false (opcional) a conexão é tratada como durável e as subscrições do cliente continuam mesmo após uma desconexão.
- Wills: Quando um cliente se conecta a um servidor e pode informar que possui uma will, isto é, mensagens importantes que deveriam ser publicadas, mesmo em caso de desconexão involuntária. É necessária uma atribuição prévia das mensagens que deveriam ser enviadas, chamado testamento. Isto é importante para sensores de alerta, que informam o sistema caso percam o contato com a rede.
O modelo publisher/subscriber oferece uma alternativa ao modelo cliente/servidor. No modelo cliente/servidor o cliente se comunica diretamente o servidor num serviço fim a fim. No modelo publisher/subscriber o publicador e o subscritor não se comunicam diretamente. A comunicação é realizada por um terceiro componente, o brocker [2].
MQTT - sensores e atuadores
O MQTT tem aplicabilidade especial para dispositivos para sensoriamento remoto [1].
- Sensores
- Sensores medem ou monitoram parâmetros do ambiente ou de um sistema e reportam a informação para humanos ou outros dispositivos ou sistemas. Com a ajuda do protocolo MQTT a informação obtida pelos sensores pode ser realizada via rede.
- Múltiplos sensores podem ser posicionados para reportar vários parâmetros e medições em diferentes localizações, dando uma visão completa das condições de operação de um dispositivo ou sistema.
- Atuadores
- Atuadores são dispositivos que atuam sobre variáveis de um sistema visando alterar seu comportamento.
O controle de um sistema normalmente envolve sensores monitorando parâmetros do sistema e atuadores visando corrigir sua operação. A ação de controle é realizada a partir de um algoritmo de controle, que pode ser executado por controlador central, ou diretamente pelos sensores/atuadores, que, neste caso, devem ter processamento no próprio sensor/atuador.
O modelo publisher/subscriber do MQTT pode ser bastante útil para interligar sensores, atuadores e sistemas de controle em diferentes tipos de aplicações, em particular àquelas que envolvem as chamadas tecnologias de Internet das Coisas.
MQTT - Conexão
O protocolo MQTT trabalha no topo da pilha de protocolos TCP/IP.
Uma conexão MQTT é sempre entre um cliente e um brocker. O cliente inicia a conexão enviando uma mensagem CONNECT ao brocker, que responde com a mensagem CONNACK. A conexão é mantida até que o cliente envie uma mensagem DISCONNECT.
----------> CONNECT Cliente Brocker <---------- CONNACK
- Detalhe das mensagens
CONNECT clientId "cliente1" cleanSession true username "user1" (opcional) passwd "1234" (opcional) lastWillTopic "topic1/will" (opcional) lastWillQoS 2 (opcional) lastWillMessage "unexpected exit" (opcional) lastWillRetain true 60
A flag cleanSession informa se a sessão é persistente ou não.
O username e passwd são enviados em modo texto, portanto, é aconselhável utilizá-las juntamente com transporte seguro através de autenticação de clientes com SSL.
CONNACT SessionPresent true returnCode 0
MQTT - Blibliotecas
Bibliotecas cliente MQTT estão disponíveis em diferentes linguagens de programação, como Android, Arduino, C, C++, Ct#, Go, iOS, Java, JavaScript, and .NET. Veja lista completa em MQTT wiki.
Mosquitto
Mosquitto é um Brocker MQTT open source, que pode ser utilizado desde computadores de placa única até servidores.
O Mosquitto implementa o modelo publilsher/subscriber e pode ser utilizado em aplicações de Internet das Coisas, as quais fazem uso de sensores de baixa potência, atuadores, dispositivos móveis, microcontroladores e outros dispositivos programáveis.
O Mosquitto oferece comandos de linha como mosquitto_pub e mosquitto_sub para publicar e subscrever no brocker, respectivamente, além de bibliotecas em C para implementação de cliente MQTT.
- Instalação no Ubuntu
sudo apt-get update sudo apt-get mosquitto sudo apt-get install mosquitto-clients
Iniciar o Mosquitto:
mosquitto -v (verbose: mostra ações realizadas a cada mensagens publicada/subscrita)
- Porta TCP
- O Mosquitto de escuta por padrão na porta TCP 1883:
- Teste do Mosquitto
Use um terminal para subscrever um tópico:
mosquitto_sub -t "teste"
Use outro terminal para publicar uma mensagem em um tópico:
mosquitto_pub -m "Mensagem" -t "teste"
Usuários e senhas podem ser configurados para uso no Mosquito, ver [3] [4].
Referências
- ↑ 1,0 1,1 1,2 1,3 Valerie Lampkin; Weng Tat Leong; Leonardo Olivera; Sweta Rawat; Nagesh Subrahmanyam; Rong Xiang. Building Smarter Planet Solutions with MQTT and IBM WebSphere MQ Telemetry, ibm.com/redbooks, 2012.
- ↑ 2,0 2,1 MQTT Essentials: The Ultimate Kickstart For MQTT Beginners, https://www.hivemq.com/mqtt-essentials/.
- ↑ Fernando Veiga. Instalar MQTT-Broker no Linux, Things Hackers Team, 2018.
- ↑ Faz-B. Instalando, testando e conhecendo o MQTT no Ubuntu, 2017.
Evandro.cantu (discussão) 11h27min de 25 de março de 2020 (-03)