MQTT: mudanças entre as edições
Sem resumo de edição |
|||
Linha 37: | Linha 37: | ||
*'''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. | *'''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. | *'''Wills''': Característica também chamada '''LWT'' (''Last Will and Testament'') do MQTT. 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''' <ref name=MQTT_Essentials/>. | 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''' <ref name=MQTT_Essentials/>. | ||
Linha 71: | Linha 71: | ||
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. | 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. | ||
Os parâmetros '''lastWill''' | Os parâmetros '''lastWill''' são utilizados pelo '''brocker''' para notificar clientes subscritores sobre uma desconexão involuntária deste publicador. Quando um cliente de conecta e informa ao brocker, pela mensasgem CONNECT, o tópico, a QoS e a mensagem lastWill. No caso de uma desconexão involuntária deste cliente o '''brocker''' envia a mensagem lastWill aos clientes subscritores. | ||
'''CONNACT''' | '''CONNACT''' | ||
sessionPresent true | |||
returnCode 0 | returnCode 0 | ||
Edição das 19h12min 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 retem 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: Característica também chamada LWT (Last Will and Testament) do MQTT. 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 - 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.
Os parâmetros lastWill são utilizados pelo brocker para notificar clientes subscritores sobre uma desconexão involuntária deste publicador. Quando um cliente de conecta e informa ao brocker, pela mensasgem CONNECT, o tópico, a QoS e a mensagem lastWill. No caso de uma desconexão involuntária deste cliente o brocker envia a mensagem lastWill aos clientes subscritores.
CONNACT sessionPresent true returnCode 0
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 - 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)