dvdrothen
Eu tenho um VPS no qual configurei o Mosquitto e acesso pelo endereço do servidor na internet e a porta utilizada para o broker.
https:// meuservidor.com.br:1883 , sendo que a conexão ao broker é realizada através da biblioteca paho-mqtt (embora existam outras). Tanto em aplicações python, C++ em microcontroladores, Java, Javascript, etc.
Um exemplo de aplicação é a leitura e escrita de recursos de um microcontrolador conectado à rede/internet usando uma aplicação no bootblocks como um supervisório. Dessa forma uma aplicação poderia, por exemplo, acionar um dispositivo através da mudança de status de uma variável , ou ler o valor de um sensor de temperatura, e o mqtt é um protocolo, leve, consome poucos recursos da rede muito eficaz. o MQTT pode ser utilizado também para comunicação de diferentes instâncias de uma aplicação
Pode ser instalado o broker "mosquitto" no servidor. Para uso no Bootblocks, podem ser criados blocos que usam a biblioteca paho-mqtt.js para subscrição e publicação de tópicos, criação de usuários etc. O acesso ao broker, normalmente é feito pela porta 1883.
Um exemplo de script:
`<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MQTT Web Client</title>
<script src="https://unpkg.com/paho-mqtt/mqttws31.min.js"></script>
</head>
<body>
<h2>Teste MQTT via Web</h2>
<button onclick="publicarMensagem('meu/topico', 'Teste de Mensagem', 1)">Publicar</button>
<div id="mensagens"></div>
<script>
let client; // Cliente MQTT
/**
* Conecta ao broker MQTT
* @param {string} serverUrl - Endereço do servidor (ex: ws://server.com:9001/mqtt)
* @param {string} user - Usuário MQTT (opcional)
* @param {string} password - Senha MQTT (opcional)
* @param {boolean} useSSL - Se deve usar SSL (true para wss://, false para ws://)
*/
function conectarMQTT(serverUrl, user = "", password = "", useSSL = false) {
const clientId = "client_" + Math.random().toString(16).substr(2, 8);
client = new Paho.MQTT.Client(serverUrl, clientId);
client.onConnectionLost = (responseObject) => {
console.error("Conexão perdida:", responseObject.errorMessage);
};
client.onMessageArrived = (message) => {
console.log("Mensagem recebida:", message.destinationName, "->", message.payloadString);
document.getElementById("mensagens").innerHTML += `<p><strong>${message.destinationName}:</strong> ${message.payloadString}</p>`;
};
const options = {
onSuccess: () => console.log("Conectado ao broker MQTT!"),
onFailure: (error) => console.error("Erro ao conectar:", error.errorMessage),
useSSL: useSSL
};
if (user && password) {
options.userName = user;
options.password = password;
}
client.connect(options);
}
/**
* Publica uma mensagem em um tópico MQTT
* @param {string} topico - Nome do tópico
* @param {string} mensagem - Mensagem a ser enviada
* @param {number} qos - Qualidade de Serviço (0, 1 ou 2)
*/
function publicarMensagem(topico, mensagem, qos = 0) {
if (!client || !client.isConnected()) {
console.error("Erro: Cliente MQTT não conectado!");
return;
}
const message = new Paho.MQTT.Message(mensagem);
message.destinationName = topico;
message.qos = qos;
client.send(message);
console.log(`Publicado: ${mensagem} no tópico ${topico} com QoS ${qos}`);
}
/**
* Inscreve-se em um tópico e retorna a mensagem recebida
* @param {string} topico - Nome do tópico para assinar
*/
function inscreverTopico(topico) {
if (!client || !client.isConnected()) {
console.error("Erro: Cliente MQTT não conectado!");
return;
}
client.subscribe(topico, {
onSuccess: () => console.log(`Inscrito no tópico: ${topico}`),
onFailure: (error) => console.error(`Erro ao inscrever no tópico: ${error.errorMessage}`)
});
}
// Exemplo de conexão com servidor MQTT
conectarMQTT("ws://server_address.com.br:9001/mqtt", "usuario", "senha", false);
// Inscrever-se em um tópico após a conexão
setTimeout(() => inscreverTopico("meu/topico"), 2000);
</script>
</body>
</html>
`
o protocolo mqtt geralmente usa a porta 1883.
As funções conectarMQTT , InscreverTópico e publicar mensagens podem ser base para blocos para utilização do broker no bootblocks. Podem tambem existir blocos para criação , manutenção e exclusão de usuários no broker.
Documentação do Mosquitto https://mosquitto.org/