MQTT Websocket Client Connectivity

Texto copiado
Introducción

Esta guía ofrece instrucciones detalladas, paso a paso para conectar a nuestros clientesMQTT broker(CrysqlMQ) o cualquier agente de su elección usando JavaScript. Cubre los requisitos necesarios y configuración, guiarte a través del proceso de establecer una conexión confiable. Aprenderás cómo para implementar autenticación, gestionar suscripciones y manejar intercambios de mensajes. Con la ayuda de esta documentación, podrás integrar fácilmente JavaScript web clientes con el broker MQTT para una comunicación eficiente de datos.

Pre-requisitos

Instalación de dependencia

لscript src="https://unpkg.com/mqtt/dist/mqtt.min.js"

Conexión con MQTT Broker

Utilice el siguiente código para conectar al cliente en Websocket.

Define el ADDRESS Macro usando la conexión de MQTT Broker parámetros.

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);

// Configurar las opciones del cliente MQTT
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws' // WebSocket protocol
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Suscribirse a un tema
cliente.subscribe('cmq/topic', (err) =
si
consola.log('Suscrito al tema.');

// Publicar un mensaje
cliente.publish('cmq/topic', 'Hello CMQ', { qos: 2, conservar: true }, (err) = {}
si
consola.log('Message published.');
}
});
}
});
});

MQTT 5

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v5
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws', // WebSocket protocol
protocoloVersión: 5, // MQTT versión 5
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
propiedades: {}
período de sesiones Intervalo: 60, // Establecer intervalo de expiración de sesión en segundos
}
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', (connack) = {
consola.log('Connected successfully with MQTT Broker.', connack);

// Suscribirse a un tema con propiedades MQTT v5
const topic = 'cmq/topic';
document.getElementById('topic').textContent = topic;
cliente.subscribe(topic, { qos: 2, nl: true, rap: true, rh: 0 }, (err, concedido) {}
si
consola.log('Suscrito al tema.', concedido);
document.getElementById('subscriptionStatus').textContent = 'Subscribed al tema.

// Publicar un mensaje con propiedades MQTT v5
const message = 'Hello CMQ';
client.publish(topic, message, { qos: 2, conserva: true, properties: {} MensajeExpiryInterval: 60 } } }, (err) = confianza {}
si
consola.log('Message published.');
document.getElementById('publishedMessage').textContent = message;
}
});
}
});
});

MQTT sobre Secure WebSocket

Utilice el siguiente código para conectarse de forma segura a MQTT Broker sobre TLS.

Define el ADDRESS Macro usando la conexión de MQTT Broker parámetros.

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar opciones de cliente MQTT con ajustes TLS
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 11443,
protocolo: 'ws', // Protocolo WebSocket seguro
Rechazo No autorizado: verdadero, // Opcional, rechazo no autorizado certificados
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
// Añadir opciones adicionales TLS si es necesario
cert: yourClient Cert, // Certificado de cliente
llave: tu ClientKey, // Clave cliente
ca: suCaCert // CA certificado
};

// Crear cliente MQTT
const client = mqtt.connect(`wss://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Suscribirse a un tema
const topic = 'cmq/topic';
document.getElementById('topic').textContent = topic;
cliente.subscribe(topic, (err) = {
si
consola.log('Suscrito al tema.');
document.getElementById('subscriptionStatus').textContent = 'Subscribed al tema.

// Publicar un mensaje
const message = 'Hello CMQ';
client.publish(topic, message, { qos: 2, keep: true }, (err) = prenda {}
si
consola.log('Message published.');
document.getElementById('publishedMessage').textContent = message;
}
});
}
});
});

Establecer parámetros TLS antes de llamar al MQTTClient_connect conectar el cliente al mQTT Broker de forma segura sobre TLS.

Si el MQTT Broker es hospedado en un servidor de confianza y el no se requiere verificación del servidor, el siguiente código se puede utilizar para configurar TLS Opciones:

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar opciones de cliente MQTT con ajustes TLS
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 11443,
protocolo: 'ws', // Protocolo WebSocket seguro
Rechazo No autorizado: falso, // Certificado de servidor deshabilitado Verificación
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
// Añadir opciones adicionales TLS si es necesario
// cert: yourClient Cert, // Certificado de cliente
// clave: su ClientKey, // Clave del cliente
// ca: suCaCert // CA certificado
};

// Crear cliente MQTT
const client = mqtt.connect(`wss://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Suscribirse a un tema
const topic = 'cmq/topic';
document.getElementById('topic').textContent = topic;
cliente.subscribe(topic, (err) = {
si
consola.log('Suscrito al tema.');
document.getElementById('subscriptionStatus').textContent = 'Subscribed al tema.

// Publicar un mensaje
const message = 'Hello CMQ';
client.publish(topic, message, { qos: 2, keep: true }, (err) = prenda {}
si
consola.log('Message published.');
document.getElementById('publishedMessage').textContent = message;
}
});
}
});
});

Si el Bóker MQTT tiene certificado de servidor emitido por un Trusted CA, entonces el Certificado de Servidor se puede verificar utilizando:

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Cargar el certificado CA (asumiendo que el certificado CA está disponible como una cadena o una URL)
const ca Cert = '--------BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEUzJ7kDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQGEwJV
UzERMA8GA1UECAwIU29tZS1TdGF0ZTEUMBIGA1UEBwLU29tZS1DaXR5MRMwEQYD
VQQKDApJbnRlcm5ldCBDQTETMBEGA1UEAwwKQ2VydGlmaWNhdGUwHhcNMTkxMjMx
MDAwMDAwWhcNMjAxMjMwMDAwWjBoMQswCQYDVQGEwJVUzERMA8GA1UECAwI
U29tZS1TdGF0ZTEUMBIGA1UEBwLU29tZS1DaXR5MRMwEQYDVQKDApJbnRlcm5l
dCBDQTETMBEGA1UEAwwKQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQC2Xk1eRm94bw3hm8+K0H5/4eU9G8hb8CQXj0FGONMSY0zg/P4n
M6t2+/GsQbj3FfAg/SwQ5lH9qO7CxTn/ANX4gO3KO9m0pjHfDkSx7hPlZoLR3oQz
73VcxltoHtUKg4+QAcI5nwb+byA3f1EOn+0V5d41rmlVxRk1dKl7FA8wN2zO7aLO
+F1QnIvDC/d9EjGqcmY8c9y4+fqzgH+iQFPq5APEL5Ead/nk5a8dRfd6Wb8GV6lg
o8pI0sMlS8HdLMjpCewMI7Nhu0a5ZOnC+S7a3YB2UO4jXg3ADm5nLqG6rbEpD1DE
A4NBoXBx+RhfdMfyPTNVhd8XtavXUkmyEBKbAgMBAAGjITAfMB0GA1UdDgQWBBQI
1hNfdp9a6f5Jm9peGr+m4iJ+IzANBgkqhkiG9w0BAQSFAAOCAQEADJc2ddg4TGcB
Z7ViZ5 UlfI02KFA+E4xmdvZOE+aNkqZHYt21ou9lnzZoLbdK+9woO4F/8i0HBZ0h
MDhjeHGkZT+yxT1uWh6ldZggVDF6X/8zWy8RmG/k+bQTeTiU/wLfGPN0bsfvmFXV
sqE/O0rbc1LCaRIyRoEUfW/hmkf9UjYdW+FOcY5VfJm+GpLPOZLrAL3QAWYnsO8j
F1h7W2pE3TOS/W+vXFrY7T1hdIzQpAhvhflS/jmEAB+8PvX6QPV7DfbRoIsFBOxk
VtRuycCimUnhCnQv+kdazUZzVz48huRl1A/5T/mcf2hrE9q2tmX8qXT8Vs2O5Ky
Pbq9jsS/xA==
----- FIN CERTIFICADO----`;

// Configurar opciones de cliente MQTT con ajustes TLS
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 11443,
protocolo: 'ws', // Protocolo WebSocket seguro
ca: caCert, // CA certificado
Rechazo No autorizado: verdadero, // Asegurar el certificado del servidor verificado
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT
const client = mqtt.connect(`wss://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Suscribirse a un tema
const topic = 'cmq/topic';
document.getElementById('topic').textContent = topic;
cliente.subscribe(topic, (err) = {
si
consola.log('Suscrito al tema.');
document.getElementById('subscriptionStatus').textContent = 'Subscribed al tema.

// Publicar un mensaje
const message = 'Hello CMQ';
client.publish(topic, message, { qos: 2, keep: true }, (err) = prenda {}
si
consola.log('Message published.');
document.getElementById('publishedMessage').textContent = message;
}
});
}
});
});

SiMQTT Brokertiene un certificado de servidor auto-firmado entonces el Certificado de Servidor se puede verificar utilizando el Certificado de Root obtenido a el MQTT Broker:

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Cargar el certificado de root CA (asumiendo que el certificado de root CA es disponible como cadena)
const ca Cert = '--------BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEUzJ7kDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQGEwJV
UzERMA8GA1UECAwIU29tZS1TdGF0ZTEUMBIGA1UEBwLU29tZS1DaXR5MRMwEQYD
VQQKDApJbnRlcm5ldCBDQTETMBEGA1UEAwwKQ2VydGlmaWNhdGUwHhcNMTkxMjMx
MDAwMDAwWhcNMjAxMjMwMDAwWjBoMQswCQYDVQGEwJVUzERMA8GA1UECAwI
U29tZS1TdGF0ZTEUMBIGA1UEBwLU29tZS1DaXR5MRMwEQYDVQKDApJbnRlcm5l
dCBDQTETMBEGA1UEAwwKQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQC2Xk1eRm94bw3hm8+K0H5/4eU9G8hb8CQXj0FGONMSY0zg/P4n
M6t2+/GsQbj3FfAg/SwQ5lH9qO7CxTn/ANX4gO3KO9m0pjHfDkSx7hPlZoLR3oQz
73VcxltoHtUKg4+QAcI5nwb+byA3f1EOn+0V5d41rmlVxRk1dKl7FA8wN2zO7aLO
+F1QnIvDC/d9EjGqcmY8c9y4+fqzgH+iQFPq5APEL5Ead/nk5a8dRfd6Wb8GV6lg
o8pI0sMlS8HdLMjpCewMI7Nhu0a5ZOnC+S7a3YB2UO4jXg3ADm5nLqG6rbEpD1DE
A4NBoXBx+RhfdMfyPTNVhd8XtavXUkmyEBKbAgMBAAGjITAfMB0GA1UdDgQWBBQI
1hNfdp9a6f5Jm9peGr+m4iJ+IzANBgkqhkiG9w0BAQSFAAOCAQEADJc2ddg4TGcB
Z7ViZ5 UlfI02KFA+E4xmdvZOE+aNkqZHYt21ou9lnzZoLbdK+9woO4F/8i0HBZ0h
MDhjeHGkZT+yxT1uWh6ldZggVDF6X/8zWy8RmG/k+bQTeTiU/wLfGPN0bsfvmFXV
sqE/O0rbc1LCaRIyRoEUfW/hmkf9UjYdW+FOcY5VfJm+GpLPOZLrAL3QAWYnsO8j
F1h7W2pE3TOS/W+vXFrY7T1hdIzQpAhvhflS/jmEAB+8PvX6QPV7DfbRoIsFBOxk
VtRuycCimUnhCnQv+kdazUZzVz48huRl1A/5T/mcf2hrE9q2tmX8qXT8Vs2O5Ky
Pbq9jsS/xA==
----- FIN CERTIFICADO----`;

// Configurar opciones de cliente MQTT con ajustes TLS
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 11443,
protocolo: 'ws', // Protocolo WebSocket seguro
ca: caCert, // certificado CA de raíz
Rechazo No autorizado: verdadero, // Asegurar que se verifique el certificado de servidor // nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT
const client = mqtt.connect(`wss://${options.hostname}:${options.port}/mqt ' , options);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Suscribirse a un tema
const topic = 'cmq/topic';
document.getElementById('topic').textContent = topic;
cliente.subscribe(topic, (err) = {
si
consola.log('Suscrito al tema.');
document.getElementById('subscriptionStatus').textContent = 'Subscribed al tema.

// Publicar un mensaje
const message = 'Hello CMQ';
client.publish(topic, message, { qos: 2, keep: true }, (err) = prenda {}
si
consola.log('Message published.');
document.getElementById('publishedMessage').textContent = message;
}
});
}
});
});

Configuración de MQTT Autenticación

Para conectarse a MQTT Broker que requiere MQTT Usuario y MQTT Contraseña para autenticación, añadir a nombre de usuario y contraseña a las opciones de conexión así:

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);

// Configurar las opciones del cliente MQTT
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws' // WebSocket protocol
nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Suscribirse a un tema
cliente.subscribe('cmq/topic', (err) =
si
consola.log('Suscrito al tema.');

// Publicar un mensaje
cliente.publish('cmq/topic', 'Hello CMQ', { qos: 2, conservar: true }, (err) = {}
si
consola.log('Message published.');
}
});
}
});
});

Características avanzadas

Configuración de la última voluntad

Configurar elÚltima Voluntady la característica del testamento para especificar mensaje que el corredor publicará si el cliente se desconecta inesperadamente. Esto ayuda a informar a otros suscriptores del estado del cliente desconectado.

Utilice el siguiente código para establecer Last Will en la conexión Opciones:

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v5
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws', // WebSocket protocol
protocoloVersión: 5, // MQTT versión 5
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
propiedades: {}
período de sesiones Intervalo: 60, // Establecer intervalo de expiración de sesión en segundos
}
{
tema: 'cmq/lastwill', // El tema para publicar el mensaje LWT
payload: 'Client desconectado inesperadamente', // El mensaje LWT
qos: 1, // El nivel de QoS
conservar: verdadero // Ya sea para retener el mensaje
}
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

Ajuste Mantener Alive

MQTTmantiene conexiones cliente-broker con un mecanismo de mantenimiento. Ajuste elmantener la calmaintervalo para controlar con frecuencia el cliente envía mensajes PINGREQ al corredor.

Modifique el código de abajo para satisfacer sus requisitos:

/ Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v5
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws', // WebSocket protocol
protocoloVersión: 5, // MQTT versión 5
mantenimiento: 60, // Establecer intervalo de mantenimiento en segundos
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
propiedades: {}
período de sesiones Intervalo: 60, // Establecer intervalo de expiración de sesión en segundos
}
{
tema: 'cmq/lastwill', // El tema para publicar el mensaje LWT
payload: 'Client desconectado inesperadamente', // El mensaje LWT
qos: 1, // El nivel de QoS
conservar: verdadero // Ya sea para retener el mensaje
}
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

// Eventos del cliente
cliente.on('connect', (connack) = {
consola.log('Connected successfully with MQTT Broker.', connack);

// Suscribirse a un tema con propiedades MQTT v5
const topic = 'cmq/topic';
document.getElementById('topic').textContent = topic;
cliente.subscribe(topic, { qos: 2, nl: true, rap: true, rh: 0 }, (err, granted) = título {}
si
consola.log('Suscrito al tema.', concedido);
document.getElementById('subscriptionStatus').textContent = Suscrito al tema.

// Publicar un mensaje con propiedades MQTT v5
const message = 'Hello CMQ';
client.publish(topic, message, { qos: 2, conserva: true, properties: {} MensajeExpiryInterval: 60 } } }, (err) = confianza {}
si
consola.log('Message published.');
document.getElementById('publishedMessage').textContent = Mensaje;
}
});
}
});
});

Configuración de la Persistencia de Sesión

Datos de sesión de un cliente MQTT incluyen Suscripciones hechas por el Cliente y los datos que el Cliente recibiría con QoS confía0. El Cliente puede conseguir que el MQTT Broker almacene sus datos de sesión a través de las conexiones.

MQTT 3.1.1 Los clientes pueden establecer sesión limpia = 0 para solicitar el M

MQTT 3.1.1

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v3.1.1
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws', // WebSocket protocol
protocoloVersión: 4, // Versión MQTT 3.1.1
limpio: falso, // Establecer sesión limpia a 0
mantenimiento: 60, // Establecer intervalo de mantenimiento en segundos
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
{
tema: 'cmq/lastwill', // El tema para publicar el mensaje LWT
payload: 'Client desconectado inesperadamente', // El mensaje LWT
qos: 1, // El nivel de QoS
conservar: verdadero // Ya sea para retener el mensaje
}
};
// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

MQTT 5 Los clientes pueden establecer el inicio limpio = 0 y el gasto de sesión Interval = 'N' para solicitar al MQTT Broker que mantenga su información de sesión almacenada a través de conexiones para 'N' segundos.

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Establecer la Intervalación de Expiración de Sesión en segundos (N)
const session Intervalo de gastos = 3600; // 1 hora

// Configurar las opciones de cliente MQTT para MQTT v5
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws', // WebSocket protocol
protocoloVersión: 5, // MQTT versión 5
cleanStart: false, // Set Clean Start to 0
período de sesiones Intervalo: sesiónExpiryInterval, // Set Session Expiry Interval
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
{
tema: 'cmq/lastwill', // El tema para publicar el mensaje LWT
payload: 'Client desconectado inesperadamente', // El mensaje LWT
qos: 1, // El nivel de QoS
conservar: verdadero // Ya sea para retener el mensaje
}
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

Configuración Máxima Tamaño del paquete

MQTT5 Client puede solicitar el MQTT Broker para enviar solo datos paquetes de menos de un tamaño específico configurando así:

// Generar ID de cliente
const client Id = generateClientId('crystalmq_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v5
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 10443,
protocolo: 'ws', // WebSocket protocol
protocoloVersión: 5, // MQTT versión 5
maxPacketTamaño: 1024, // Tamaño máximo del paquete en bytes
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
{
tema: 'cmq/lastwill', // El tema para publicar el mensaje LWT
payload: 'Client desconectado inesperadamente', // El mensaje LWT
qos: 1, // El nivel de QoS
conservar: verdadero // Ya sea para retener el mensaje
}
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}/mqt`, opciones);

Publish

Envío de datos

Distribución eficiente de datos a múltiples suscriptores por publicarlo a temas designados con el siguiente fragmento de código:

MQTT 3.1.1

// Generar ID de cliente
const client Id = generateClientId('mqt_publisher_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v3.1.1
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 1883,
protocolo: 'mqtt', // protocolo MQTT
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Publicar un mensaje a varios temas
tópicos = ['topic1', 'topic2', 'topic3'];
const message = 'Hello MQTT';

temas.porCada(tema = {}
cliente.publish(topic, message, { qos: 2 }, (err) = título {}
si
consola.log(`Message published to ${topic}`);
document.getElementById('publishedMessages').innerHTML += " Recorrido a ${topic}: ${message} buscado/li título`;
}
});
});
});

MQTT 5

// Generar ID de cliente
const client Id = generateClientId('mqt5_publisher_', 10);
document.getElementById('clientId').textContent = cliente Id;

// Configurar las opciones de cliente MQTT para MQTT v5
const options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 1883,
protocolo: 'mqtt', // protocolo MQTT
protocoloVersión: 5, // MQTT versión 5
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT
const client = mqtt.connect(`ws://${options.hostname}:${options.port}`, opciones);

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Publicar un mensaje a varios temas
tópicos = ['topic1', 'topic2', 'topic3'];
const message = 'Hello MQTT v5';

temas.porCada(tema = {}
cliente.publish(topic, message, { qos: 2 }, (err) = título {}
si
consola.log(`Message published to ${topic}`);
document.getElementById('publishedMessages').innerHTML += " Recorrido a ${topic}: ${message} buscado/li título`;
}
});
});
});

Configuración de mensajes retenidos

Permitir la bandera de retención al publicar un mensaje para asegurar broker almacena el último mensaje para cada tema. Esto garantiza que los nuevos suscriptores recibir el mensaje más reciente al conectarse.

Para implementar esto, utilice el siguiente fragmento de código:

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Publicar un mensaje con bandera retenida a varios temas
tópicos = ['topic1', 'topic2', 'topic3'];
mensaje const = 'Hola MQTT v5 con Retain';

temas.porCada(tema = {}
client.publish(topic, message, { qos: 2, keep: true }, (err) = prenda {}
si
consola.log(`Message published to ${topic} with retain.`);
document.getElementById('publishedMessages').innerHTML += " Recorrido a ${topic}: ${message} buscado/li título`;
}
});
});
});

Especificación de los niveles de QoS

MQTT proporciona tres niveles de calidad de servicio (QoS) Entrega del mensaje:

  • QoS 0 (Al menos una vez)
  • QoS 1 (Al menos una vez)
  • QoS 2 (Exactamente una vez)

Especifique el nivel QoS requerido al publicar mensajes MQTT utilizando este código:

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Publicar un mensaje con QoS 0 (Al menos una vez)
cliente.publish('topic/qos0', 'Message with QoS 0', { qos: 0 }, (err) = {}
si
consola.log('Message publicado con QoS 0.');
document.getElementById('publishedMessages').innerHTML += " Secuestrado " con QoS 0: Mensaje con QoS 0 observado/li título`;
}
});

// Publicar un mensaje con QoS 1 (Al menos una vez)
cliente.publish('topic/qos1', 'Message with QoS 1', { qos: 1 }, (err) = {}
si
consola.log('Message publicado con QoS 1.');
document.getElementById('publishedMessages').innerHTML += " Secuestrado " con QoS 1: Mensaje con QoS 1
}
});

// Publicar un mensaje con QoS 2 (Exactamente una vez)
cliente.publish('topic/qos2', 'Message with QoS 2', { qos: 2 }, (err) = {}
si
consola.log('Message publicado con QoS 2.');
document.getElementById('publishedMessages').innerHTML += " Secuestrado " con QoS 2: Mensaje con QoS 2 escrito/li título`;
}
});
});

Intervalo de viaje

La propiedad 'intervalo de caducidad del mensaje' establece la vida útil del mensaje en segundos; si no se entrega dentro de este tiempo, el corredor lo descarta. MQTT5 admite esta función. MQTT5 Los clientes pueden configurar esto mientras publican datos.

Tema Alias

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Publicar un mensaje con Interval de Expiración de Mensajes (30 segundos) a un Tema
const topic = 'topic/message_expiry';
const message = 'Message with Message Expiry Interval';
mensaje const Intervalo de gastos = 30; // Intervalo de Expiración de Mensajes en segundos

cliente.publish(topic, message, { qos: 1, retener: false, properties: {} Mensaje Intervalo: mensajeExpiryInterval * 1000 } }, (err) = confianza {}
si
consola.log(`Message published to ${topic} with Message Expiry Interval. ");
document.getElementById('publishedMessages').innerHTML += " Recorrido a ${topic}: ${message} (Expiry Interval: ${messageExpiryInterval} segundos) " i "
}
});
});

Tema Alias

La propiedad 'Topic Alias' permite a los clientes utilizar un breve alias en lugar de un nombre completo del tema, reduciendo el tamaño del paquete de mensajes y mejorando la red eficiencia.

MQTT 5

// Eventos del cliente
cliente.on('connect', () = {
consola.log('Connected successfully with MQTT Broker.');

// Publicar un mensaje usando Alias Tema a un tema
const topicAlias = 1; // Topic Alias number (numeric identifier for the Tema)
const topic = 'topic/alias';
const message = 'Message with Topic Alias';

// Publicar con Alias Tema
cliente.publish(topic, message, { qos: 1, retener: false, properties: {} temaAlias: temaAlias } }, (err) = Conf {}
si
consola.log(`Message published to ${topic} with Topic Alias ${topicAlias}.`);
document.getElementById('publishedMessages').innerHTML += " Recorrido a ${topic}: ${message} (Tema Alias: ${topicAlias}) se hizo/li
}
});
});

Propiedades asociadas con MQTT PUBLISH mejorar el manejo de mensajes, proporcionar contexto o instrucciones para los corredores y clientes. Estas propiedades, incluyendo intervalos de expiración de mensajes y alias tópicos, optimizar la entrega de mensajes y la red ancho de banda.

Suscríbete

Suscribirse al filtro del tema

Para recibir datos publicados por otros clientes, este cliente tiene que Suscríbete a un Filtro de Tema igualado como este:

// Inscripción de tarjetas silvestres multinivel
cliente.subscribe('sensors/#', (err) = {
si
consola.log('Suscrito a todos los temas de sensores.');
}
});
// Suscripción de tarjetas silvestres de un solo nivel
cliente.subscribe('sensors/+/temperature', (err) = {
si
consola.log('Suscrito a sensores/+/temperatura.');
}
});

Este filtro de tema puede coincidir con un tema exacto o puede tener como # y +

Datos de recepción

Para recibir los datos enviados para las suscripciones, una función callback debe definirse así:

// Definir función callback para manejar mensajes entrantes
cliente.on('message', (topic, message, packet) = {}
consola.log(`Recibido mensaje sobre el tema: ${topic}`);
consola.log(`Contenido de mensajería: ${message.toString()}`);
// Procesamiento adicional basado en el mensaje recibido

// Ejemplo: Mostrar mensaje en HTML
const received Mensajes = document.getElementById('receivedMessages');
recibidoMessages.innerHTML += `Seguido: ${topic}, Mensaje: ${message.toString()}traducido/li título`; });

Suscripción de Temas

Para dejar de recibir actualizaciones de un tema, utilice el código proporcionado a Suscribe.

// Tema para darse de baja
const topicToUnsubscribe = 'sensors/temperature';
// Describirse del tema
cliente.unsubscribe(topicToUnsubscribe, (err) = {}
si
consola.log(`Unsubscribed from topic: ${topicToUnsubscribe}`);
. ♫ ... {
console.error(`Failed to unsubscribe from topic: ${topicToUnsubscribe}`, err);
}
});

Desconectar al cliente

Asegurar una terminación adecuada de la conexión de su cliente con la broker to avoid issues and resource leaks on both sides, thereby maintaining system estabilidad.

Utilice el siguiente código para desconectar al cliente del broker:

cliente.end(true, () = Conf {}
consola.log('Disconnected from MQTT Broker.');
});

// Maneja evento cercano para confirmar la desconexión
cliente.on('close', () = {}
consola.log('Connection to MQTT Broker closed.');
// Opcional: Implementar la lógica de reconexión aquí
setTimeout(() = título {}
Inténtalo.
cliente.reconnect(); // Intente reconectarse después de un retraso
Atrapados
consola.log('Reconectar falló');
}
}, 5000); // Reconectarse después de 5 segundos (según sea necesario)
});

Construcción de su lógica de negocio

Usted tiene la oportunidad de desarrollar y personalizar su propio lógica de negocio intrincada dentro de este entorno, adaptándolo precisamente a su necesidades y objetivos.

Aplicación de las mejores prácticas

Personalización de identificación del cliente

Proporcionar cada dispositivo con un ID de cliente único para facilitar la identificación precisa. In configuraciones privadas, c) Distinta asignación IDs to clients, while in shared contexts, incorporate a random string en cada ID de cliente para mantener la singularidad.

Planificación eficaz de los datos

Diseñe estratégicamente su marco de datos de antemano. Ya sea la gestión de texto simple, Los formatos de datos JSON, o conjuntos de datos numéricos, aseguran que la estructura es compatible óptimamente con su la aplicación está destinada a usar.

Manejo de error robusto

Implementar una gestión de errores sólida para manejar la conexión MQTT fallas, problemas de suscripción y errores de publicación de mensajes eficazmente.

Verificación de credenciales

Guardar información confidencial como nombres de usuario, contraseñas y IDs de cliente por no codificación dura en su código fuente. Use variables ambientales o archivos de configuración seguros en su lugar.

Pruebas periódicas " Monitoreo

Prueba continuamente la comunicación de MQTT y monitorea las métricas del cliente tales como el estado de conexión, el rendimiento de mensajes y las tasas de error para identificar y identificar rápidamente solucionar problemas.

Optimización de la gestión de las sesiones

Elija entre sesiones limpias y persistentes (`limpia: verdadera` o `claran: false`) basado en su necesidad de retener suscripciones y mensajes apagados a través de conexiones cliente.

Reconnect on Disconnect

Reconnect on Disconnect Agregar código para intentar la reconexión con el MQTT Broker cuando hay un inesperado desconexión. Esto asegurará que su cliente permanezca conectado y no pierda nada datos.

Descargar Código

Descargar el código completo para el cliente que utiliza Java script MQTT Client Biblioteca para conectar con nuestro corredor o cualquier corredor de su elección.

MQTT 3.1.1 js file

document.addEventListener('DOMContentLoad', (event) = confianza {}
función principal() {}
// Iniciación del cliente MQTT
const client Id = generateClientId('crystalMQ_', 10);
document.getElementById('mqtV4ClientId').textContent = client Id;

// Configuración MQTT v4
const mqt V4Options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 1883,
protocolo: 'ws', // protocolo MQTT
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT v4
const mqt V4 Cliente = mqtt.connect(`ws://${mqttV4Options.hostname}:${mqttV4Options.port}`, mqttV4Options);

// MQTT v4 Event Handlers
mqttV4Client.on('connect', () = {
consola.log('Connected with MQTT v4 Broker.');
document.getElementById('mqtV4Status').textContent = 'Connected';
});

mqttV4Client.on('message', (topic, message) = {}
consola.log(`Recibido mensaje en MQTT v4: ${topic} - ${message.toString()}`);
document.getElementById('mqttV4Received').innerHTML += `Seguidoli confianzaTema: ¿Qué? Mensaje: ${message.toString()} obtenidos/li titulado`;
});

mqttV4Client.on('close', () = {
consola.log('Disconnected from MQTT v4 Broker.');
document.getElementById('mqtV4Status').textContent = 'Disconnected';
});

// Función de publicación para MQTT v4
ventana.publishMessageV4 = función(topic, message) {
mqttV4Client.publish(topic, message, { qos: 1 }, (err) = {}
si
consola.log (`Published message on MQTT v4: ${topic} - ${message}`);
document.getElementById('mqttV4Published').innerHTML += `Seguido ${topic}: ${message} buscado/li título`;
. ♫ ... {
consola.error(`Failed to publish message on MQTT v4: ${err}`);
}
});
};

// Función de suscripción para MQTT v4
ventana.subscribeTopicV4 = función(topic) {}
mqttV4Client.subscribe(topic, (err) = {}
si
consola.log(`Subscrita al tema MQTT v4: ${topic}`);
document.getElementById('mqtV4Subscribed').textContent = topic;
. ♫ ... {
consola.error(`Failed to subscribe to MQTT v4 topic: ${err}`);
}
});
};

// Función de desconexión para MQTT v4
ventana.disconnectClientV4 = función() {}
mqttV4Client.end(true, () = {
consola.log('Disconnected MQTT v4 client.');
document.getElementById('mqtV4Status').textContent = 'Disconnected';
});
};
}

función generaClientId(prefijo, longitud) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
dar resultado = prefijo;
para (let i = 0; i) {}
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
Resultado de retorno;
}

principal();
});

MQTT 3.1.1 html file

¡Atención! DOCTYPE html
"Lang="en"
■head
################################################################################################################################################################################################################################################################
■meta name="viewport" content="width=device-width, initial-scale=1.0"
▪ título Ejemplo:
لscript src="https://unpkg.com/mqtt/dist/mqtt.min.js"
"Src="mqt-v4.js" tipo="text/javascript"
Identificado/cabeza

< > > > >

- Sección MQTT v4 - título
■h2 títuloMQTT v4
Id. de identificación: id="mqttV4ClientId" indicaron/span título
No se trata de nada. id="mqttV4Status" Desconectado/span]
() MQTT v4 obtenidos/button
■hr
■h3 títuloSubscriben
Tipo de entrada="texto" id="mqtV4SubscribeTopic" placeholder="Tema suscribirse"
# Button # onclick="subscribeTopicV4(document.getElementById('mqttV4SubscribeTopic').value)"
■p No se entiende por: id="mqttV4Suscribido"
■hr
< > > >
id="mqttV4PublishTopic" placeholder="Tema publicar"
id="text" id="mqttV4PublishMessage" placeholder="Message to publicar"
# Button # onclick="publishMessageV4(document.getElementById('mqttV4PublishTopic').value, document.getElementById('mqtV4PublishMessage').value)"
<h3] Mensajes publicados
id="mqttV4Published"
<h3] Mensajes recibidos
id="mqttV4Recibido"

Identificado/cuerpo
Identificado/html

MQTT 5 Js archivo

document.addEventListener('DOMContentLoad', (event) = confianza {}
función principal() {}
// Iniciación del cliente MQTT
const client Id = generateClientId('mqt5_client_', 10);
document.getElementById('mqtV5ClientId').textContent = client Id;

// Configuración MQTT v5
const mqt V5Options = {
cliente Id: client Id,
hostname: 'public-mqtt-broker.bevywise.com',
puerto: 1883,
protocolo: 'ws', // protocolo MQTT
protocoloVersión: 5,
// nombre de usuario: 'nombre de usuario', // Agregar nombre de usuario si es necesario
// contraseña: 'password', // Agregar contraseña si es necesario
};

// Crear cliente MQTT v5
const mqt V5 Cliente = mqtt.connect(`ws://${mqttV5Options.hostname}:${mqttV5Options.port}`, mqttV5Options);

// MQTT v5 Event Handlers
mqttV5Client.on('connect', () = {
consola.log('Connected with MQTT v5 Broker.');
document.getElementById('mqtV5Status').textContent = 'Connected';
});

mqttV5Client.on('message', (topic, message) = {}
consola.log(`Recibido mensaje en MQTT v5: ${topic} - ${message.toString()}`);
document.getElementById('mqttV5Received').innerHTML += `Seguidoli confianzaTema: ¿Qué? Mensaje: ${message.toString()} obtenidos /li titulado`;
});

mqttV5Client.on('close', () = {}
consola.log('Disconnected from MQTT v5 Broker.');
document.getElementById('mqtV5Status').textContent = 'Disconnected';
});

// Función de publicación para MQTT v5
ventana.publishMessageV5 = función(topic, message) {
mqttV5Client.publish(topic, message, { qos: 1 }, (err) = {}
si
consola.log(`Publicshed message on MQTT v5: ${topic} - ${message}`);
document.getElementById('mqttV5Published').innerHTML += `Seguido ${topic}: ${message} buscado/li título`;
. ♫ ... {
consola.error(`Failed to publish message on MQTT v5: ${err}`);
}
});
};

// Suscripción de la función MQTT v5
ventana.subscribeTopicV5 = función(topic) {}
mqttV5Client.subscribe(topic, (err) = {
si
consola.log(`Subscrita al tema MQTT v5: ${topic}`);
document.getElementById('mqtV5Subscribed').textContent = topic;
. ♫ ... {
consola.error(`Failed to subscribe to MQTT v5 topic: ${err}`);
}
});
};

// Función de desconexión para MQTT v5
ventana.disconnectClientV5 = función() {}
mqttV5Client.end(verdad, () = {}
consola.log('Disconnected MQTT v5 client.');
document.getElementById('mqtV5Status').textContent = 'Disconnected';
});
};
}

función generaClientId(prefijo, longitud) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
dar resultado = prefijo;
para (let i = 0; i) {}
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
Resultado de retorno;
}

principal();
});

¡Atención! DOCTYPE html
"Lang="en"
■head
################################################################################################################################################################################################################################################################
■meta name="viewport" content="width=device-width, initial-scale=1.0"
▪ título Ejemplo:
لscript src="https://unpkg.com/mqtt/dist/mqtt.min.js"
"Src="mqt-v5.js" tipo="text/javascript"
Identificado/cabeza


- MQTT v5 Sección - título
■h2 títuloMQTT v5
Id. de identificación: id="mqttV5ClientId"
No se trata de nada. id="mqtV5Status" Desconectado/span]
"Desconectar" MQTT v5 obtenidos/button
■hr
■h3 títuloSubscriben
id="mqttV5SubscribeTopic" placeholder="Tema suscribirse"
# Button # onclick="subscribeTopicV5(document.getElementById('mqttV5SubscribeTema').value)"
■p No se entiende por: id="mqttV5Suscribido"
■hr
&lt; &gt; &gt; &gt;
id="mqttV5PublishTopic" placeholder="Tema publicar"
id="text" id="mqttV5PublishMessage" placeholder="Message to publicar"
# Button # onclick="publishMessageV5(document.getElementById('mqttV5PublishTopic').value, document.getElementById('mqtV5PublishMessage').value)"
<h3] Mensajes publicados
id="mqttV5Published"
<h3] Mensajes recibidos
id="mqttV5Recibido"

Identificado/cuerpo
Identificado/html

Crear un Bundle ejecutable

Conecte a su cliente a nuestro bróker MQTT de última generación o a cualquier bróker de su elección. Esta potente combinación garantizará un rendimiento óptimo y confiabilidad para todas sus necesidades de mensajería, allanando el camino para un sistema robusto y eficiente integración.