Este repositório mostra um Broker MQTT básico construído usando Nodejs e MQTT.js
Instale o Node a partir deste link : https://nodejs.org/.
Após instalar o Node, verifique as suas versões.
node -v
npm -v
Output:
v10.16.0
6.9.0
C:\Users\user\Desktop> mkdir mqtt_broker
C:\Users\user\Desktop> cd mqtt_broker
mkdir "nome_da_pasta" cria uma nova pasta cd "nome_da_pasta" entra na pasta
C:\Users\user\Desktop\mqtt_broker> npm init -y
Irá ser gerado um package.json, que é o arquivo de gerenciamento do nosso projeto, onde irá estar listado o autor, dependencias usadas e etc.
{
"name": "mqtt_node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Package.json criado
C:\Users\user\Desktop\mqtt_broker> npm install mqtt --save
Depois da instalação ser concluída será adicionado a sessão de dependencies ao nosso package.json:
"dependencies": {
"mqtt": "^3.0.0"
}
Na sua pasta, crie um arquivo chamado broker.js
Nas primeiras linhas iremos chamar a nossa dependência mqtt e criaremos um client, que irá ser responsável por nossa conexão com o servidor mqtt.
const mqtt = require('mqtt');
const client = mqtt.connect("mqtt://server_adress",options);
O argumento options
na função mqtt.connect()
é um objeto que varia para os servidores mqtt, como por exemplo, nós servidores do CloudMQTT, que o options
deve ser:
const options = {
clientId: "node-user",
username: 'user_name',
password: 'user_pass',
port: 'server_port',
}
Para verificarmos se a conexão com o servidor foi iniciada, usamos o metodo .on(connect, ...)
do client
:
client.on("connect",() => {
console.log("Connected");
});
Se houver a conexão com o nosso servidor teremos o output:
Connected
No MQTT as informações são trabalhadas através de subscribes
e publishes
. Os subscribes
servem para "inscrever" nosso Broker, em determinado topic, ou seja, todas as informações daquele topic irão passar por nosso servidor.
client.subscribe("topic");
/*
client.subscribe("topic1");
client.subscribe("topic2");
*/
Para visualizarmos a informação dos topics que o nosso Broker está inscrito, é usado o método .on("message",...)
do nosso client
:
client.on("message",() => {
/* ... */
});
Porém a nossa mensagem, tem até 3 argumentos, topic
, payload
e packet
. Então :
client.on("message",(topic,payload,packet) => {
console.log("This topic: " + topic);
console.log("This message/payload: " + payload.toString());
});
O topic
já é uma string, mas o payload
é um Buffer, sendo necessário a conversão para string para podermos ter o seguinte output:
This topic: topic
This message/payload: message from topic
Publishes
servem para publicarmos informações no nosso servidor mqtt. No nosso publish
é necessário que haja um topic
e um payload
.
client.publish("topic","payload");
Caso você realize um
publish
em umtopic
que o seu broker fez umsubscribe
, o seu broker também irá receber o seu publish.
const options = {
clientId: "node-user",
username: 'user_name',
password: 'user_pass',
port: 'server_port',
}
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://tailor.cloudmqtt.com',options);
client.on('connect',() => {
console.log("connected");
});
client.subscribe('topic');
/*
client.subscribe('topic1');
client.subscribe('topic2');
*/
client.on("message",(topic,message,packet) => {
console.log(topic);
console.log(message.toString());
});
client.publish("topic","message");
Para executar o seu broker, vamos voltar para o arquivo package.json, e vamos modificar o scripts
para:
"scripts": {
"start": "node broker.js"
},
Após salvar o package.json
, vá ao terminal, aberto na pasta do projeto, e execute o comando:
C:\Users\user\Desktop\mqtt_broker> npm start