Você está na página 1de 25

MQTT e COAP

IoT - Internet das Coisas


IoT - Fundamentos
● Provê maneiras diversificadas de conectar: Pessoas,
objetos, aplicações e dados através da Internet.
○ Escalabilidade de IoT
○ Número de dispositivos móveis já excedeu o numero de pessoas no
Mundo.
● Existem muitas previsões, uma delas diz que existirá mais
50 bilhões de dispositivos conectados a Internet
Protocolos Utilizados
CoAP: Constrained Application Protocol, protocolo de camada de aplicação focado em
dispositivos de internet das coisas que contêm recursos limitado, possui como
características o baixo consumo de recursos, tradução para HTTP, simplicidade de
implementação e suporte para Multicast.

MQTT: Message Queuing Telemetry Transport, protocolo bastante popular que baseia-se em
protocolos publish/subscribe, sua principal aplicabilidade é para dispositivos de internet
das coisas em comunicação M2M(machine to machine) e dispositivos móveis.

HTTPS: Hyper Text Transfer Protocol Secure, pode ser definida como uma implementação do
HTTP com a adição de uma camada de segurança que faz uso de protocolos como SSL, permitindo
tráfego de dados com criptografia.
Implementação Inicial - HTTP
Cisco Packet Tracer
CoAP
● CoAP é:
○ Protocolo RESTful eficiênte
○ Ideal para redes e dispositivos com recursos limitados
○ Focado em comunicações M2M
○ Fácil comunicação com HTTP (Proxy de/para HTTP)
● CoAP não é:
○ Uma reposição generalizada do HTTP
○ Uma compressão do HTTP
○ Restrita para domótica
Características COaP
● Protocolo de transferência de Web incorporado (coap://)
● Modelo de transação assíncrono com vinculação UDP e
suporte a multicast
● GET, POST, PUT, DELETE métodos e suporte a URI
● Pequeno, simples cabeçalho de 4 bytes
Cabeçalho COaP
Implementações
● Python - aioCoap & COaPython
● Java - Californium
● C/C++ - libcoap
MQTT(Message Queue Telemetry Transport)
O protocolo de mensagens MQTT é projetado para:

● Um baixo consumo de banda de rede e requisitos de hardware


sendo extremamente simples e leve.
● É baseado no TCP/IP e ambos, cliente e broker, necessitam
da pilha TCP/IP para o seu funcionamento.
MQTT(Message Queue Telemetry Transport)
O MQTT está na mesma camada OSI que o HTTP, porém a maior
diferença entre os dois protocolos é o tamanho do payload.

O MQTT utiliza o paradigma publish/subscribe e implementa um


middleware chamado de broker. O broker é responsável por
receber, enfileirar e disparar as mensagens recebidas dos
publishers para os subscribers.

QoS 0 - no máximo uma vez

QoS 1 - pelo menos um vez

QoS 2 - exatamente uma vez


MQTT publish
(tópico)
TV

subscribe
(tópico)
Ar-condicionado

Comunicação
via MQTT
Interface Mosquitto Lâmpada
Gráfica / Broker
Gateway

Rádio

Persiana
Tecnologias utilizadas no MQTT

Broker: Biblioteca Java:


Instalando o Mosquitto Broker
Windows
https://sivatechworld.wordpress.com/2015/06/11/step-by-step-installing-and-con
figuring-mosquitto-with-windows-7/

Linux

http://www.steves-internet-guide.com/install-mosquitto-broker/

http://www.switchdoc.com/2016/02/tutorial-installing-and-testing-mosquitto-mqt
t-on-raspberry-pi/

MAC

https://simplifiedthinking.co.uk/2015/10/03/install-mqtt-server/
Teste

Em um terminal:
mosquitto_sub -d -t hello/world
Em outro terminal:
mosquitto_pub -d -t hello/world -m
"Hello from UFC!"
Criando o projeto

File>new>project>

maven project
Incluindo bilioteca
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ufc.br</groupId>
<artifactId>mqtt_java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</project>
Código Publisher

public class MQTTTestePublish {

public static void main(String[] args) {

String topic = "Lampada";


String content = "Desliga";
int qos = 2;
String broker = "tcp://localhost:1883";
String clientId = "Priscylla";
MemoryPersistence persistence = new MemoryPersistence();
try {

MqttClient clientePublish = new MqttClient(broker, clientId, persistence);


MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);

System.out.println("Conectando ao broker: " + broker);


clientePublish.connect(connOpts);
System.out.println("Connectado");

System.out.println("Publicando Mensagem: " + content);


MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
clientePublish.publish(topic, message);
System.out.println("Message publicada");

clientePublish.disconnect();
System.out.println("Disconectado");
System.exit(0);

} catch (MqttException me) {

...
catch (MqttException me) {
System.out.println("reason " + me.getReasonCode());
System.out.println("msg " + me.getMessage());
System.out.println("loc " + me.getLocalizedMessage());
System.out.println("cause " + me.getCause());
System.out.println("excep " + me);
me.printStackTrace();
}
Código Subscriber

public class MQTTTesteSubscribe {

public static void main(String[] args) {

String topic = "Lampada";


String broker = "tcp://localhost:1883";
String clientId = "ControladorLampada";
try {

MqttClient clienteSubscribe = new MqttClient(broker, clientId);

clienteSubscribe.setCallback( new SimpleMqttCallBack() );


System.out.println("Conectando ao broker: " + broker);
clienteSubscribe.connect();
System.out.println("Connectado");

clienteSubscribe.subscribe(topic);

} catch (MqttException me) {

...
} catch (MqttException me) {
System.out.println("reason " +
me.getReasonCode());
System.out.println("msg " + me.getMessage());
System.out.println("loc " +
me.getLocalizedMessage());
System.out.println("cause " + me.getCause());
System.out.println("excep " + me);
me.printStackTrace();
}
public class SimpleMqttCallBack implements MqttCallback {
String message;
@Override
public void connectionLost(Throwable throwable) {
System.out.println("Conexao com MQTT broker perdida!");
}

@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
message = new String(mqttMessage.getPayload());
System.out.println("Menssagem recebida" + " para " + topic + " :\t"+ message );

@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}

public String getMessage(){


return message;

}
}
SmartHome - Cliente/Servidor e MQTT

https://youtu.be/Wz222xDk498

Você também pode gostar