Node.js MQTT Client Setup

Text geknüpft

Einleitung

Diese Dokumentation bietet einen umfassenden Leitfaden zur Integration von Node.js mit unserenMQTT Broker(CrystalMQ) oder jeder MQTT Broker Ihrer Wahl. Es umfasst wesentliche Aufgaben wie die Einrichtung von Verbindungen, die Anmeldung zu Themen, Abschreiben und Nachrichten austauschen. Durch die folgenden Schritte können Sie effektiv implementierenMQTKommunikation innerhalb Node.js Anwendungen.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden:

  • Node JS- Stellen Sie sicher, dass Sie Node JS mit Version 18 oder höher installiert haben.
  • MQT Bibliothek

npm install mqtt

MQT Verbindung

Dieser Abschnitt umfasst verschiedene Möglichkeiten, um mit Node JS mit einem MQTT-Broker zu verbinden. Stellen Sie sicher, dass Ihr Broker die gewünschte Verbindungsmethode unterstützt (TCP, TLS, WebSocket, etc.) und Sie haben die richtigen Verbindungsparameter:

  • Angemeldet bleiben
  • Hafen
  • Benutzername/Passwort(falls erforderlich)
  • CA Zertifikat(für TLS-Verbindungen)

Basis TCP Verbindung

const mqtt = Bett('mqt');
const broker Url = 'mqt://broker-url:1883';
const conn_params = {
In den Warenkorb Id: "testclient1",
};
const client = mqt.connect(brokerUrl, conn_params);
client.on('connect', () => {
Konsole.log('Connected to MQTT broker');
})

Verbindung mit Authentication

Um einen MQTT Broker zu verbinden, der Authentication erfordert, setzen Sie Benutzername & Passwort in Verbindung Parameter.

const conn_params = {
In den Warenkorb Id: "testclient1",
Benutzername: "Name",
Passwort: "password",
};

Über TLS/SSL verbinden

Sichere Verbindung mit TLS/SSL:

const fs = Bett('fs');
const conn_params = {
Protokoll: "mqts",
Gastgeber: 'localhost',
Hafen: 8883,
In den Warenkorb Id: "testclient1",
ca. [fs.readFileSync('/path/to/root.crt')],
};

Verbindung über WebSocket

Um WebSocket anstelle von TCP zu verbinden, halten Sie den Broker url wie folgt:

const broker Url = 'ws://broker-url:10443/mqt';

MQTT Publizieren

Daten an ein Thema senden:

const pubInterval = 2000;
const topic = 'testtopic';
client.on('connect', () => {
Konsole.log('Connected to MQTT broker');
const message = JSON.stringify({"Temperatur": 27.6, "humidity": 34})
setInterval(((((((()) => (STÖHNT)
Client. pub(topic, message, (err) => {\cHFF}
wenn (err)
Konsole.error('Error-Veröffentlichungsnachricht:', err);
auch
Konsole.log('Message veröffentlicht:', message);
}
})
}, pubInterval;
})

MQT Anmeldung

Um Nachrichten zu erhalten, abonnieren Sie einen Themenfilter. Der Broker sendet die passenden Nachrichten an Ihr Mandant.

client.on('connect', () => {
Konsole.log('Connected to MQTT broker');
client.subscribe('some_topic', (err) => {
wenn (err)
Konsole.error('Abonnementfehler:', err);
auch
`Bezeichnet zum Thema: ${topic}`;
}
})
})
client.on('message', (topic, message) => {\cHFFFF}
Versuch's!
Daten der Konsortien = JSON.parse(message.toString()); // parse JSON fällt konsequent
Konsole.log(`Receive on '${topic}':`, data);
Fang (e) {
Konsole.log(`Erhaltene Nicht-JSON-Nachricht auf '${topic}':`, message.toString());
}
})


client.unsubscribe('testtopic', (err) => {
wenn (err)
Konsole.error('Fehler abmelden:', err);
auch
('Bezeichnet vom Thema:
}
})

MQTT Disconnect

Trennen Sie immer sauber, um Ressourcenlecks zu vermeiden und sicherzustellen, richtige Sitzung Umgang mit dem Broker:

client.end((((() => (STÖHNT)
Konsole.log('Disconnected from MQTT broker');
})

Beispiel MQTTv311 Client

const mqtt = Bett('mqt');
const fs = Bett('fs');
// Authentifizierung (auf "ENABLED" oder "DISABLED")
const AUTH = "ENABLED";
// --------- MQTT Broker Konfiguration -------
const broker Url = 'mqt://broker-url:1883'; // Ersetzen Sie mit Ihrer aktuellen Broker URL/IP
// MQTT Anschlussparameter
const conn_params = {
In den Warenkorb Id: "testclient1", // Einzigartige Client-ID
// Uncoming unter Zeilen, wenn Broker Authentifizierung
// Benutzername: "Name",
// Passwort: "password",
// Uncoming unter Leitungen für TLS/SSL abgeschlossene Verbindung
// Protokoll: "mqts"
// Gastgeber: 'broker-url',
// port: 8883,
// ca. [fs.readFileSync('/path/to/root.crt')], // Root CA Zertifikat
};
Kunden lassen
// -------- MQTT Client Initialisierung -------
(AUTH === "ENABLED") {\cHFF}
Client = mqt.connect(brokerUrl, conn_params); // Mit URL und Optionen
auch
Client = mqt.connect(conn_params); // Ohne Broker URL
}
// -------- MQTT Thema & Publish Interval ---------
const topic = 'testtopic'; // Das ist ein Thema.
const pubInterval = 2000; // Alle 2 Sekunden veröffentlichen
// ------- Auf dem Weg zur...
client.on('connect', () => {
Konsole.log('Connected to MQTT broker');
~ Das ist ein Tag
client.subscribe(topic, (err) => {\cHFF}
wenn (err)
Konsole.error('Abonnementfehler:', err);
auch
`Bezeichnet zum Thema: ${topic}`;
}
})
// Beispiel JSON wohnhaft zu veröffentlichen
const message = JSON.stringify({ Temperatur: 27.6, gemessen: 34 });
// Mitteilungen
setInterval(((((((()) => (STÖHNT)
Client. pub(topic, message, { speichern: true }, (err) => {\cHFF}
wenn (err)
Konsole.error('Error-Veröffentlichungsnachricht:', err);
auch
Konsole.log('Message veröffentlicht:', message);
}
})
}, pubInterval;
})
// -------- Nachricht empfangen Callback
client.on('message', (topic, message) => {\cHFFFF}
Versuch's!
// Versuch, Nachricht als JSON zu parse
Daten der Konsortien = JSON.parse(message.toString());
Konsole.log(`Receive on '${topic}':`, data);
Fang (e) {
// Fallback, wenn Nachricht nicht JSON
Konsole.log(`Erhaltene Nicht-JSON-Nachricht auf '${topic}':`, message.toString());
}
})
// ------- Event Callbacks ----------
client.on('error', (err) => {\cHFFFF}
Konsole.error('Error:', err);
})
client.on('close', () => {\cHFF}
Konsole.log('Disconnected from MQTT broker');
})
client.on('reconnect', () => {\cHFF}
Konsole.log('Reconnecting to MQTT broker...');
})
client.on('offline', () => {
Konsole.warn('MQTT Der Kunde ist offline');
})
// -------
// Abonnieren des Themas
// client.unsubscribe('testtopic', (err) => {\cHFF}
// wenn (err) {
// Konsole.error('Fehler abmelden:', err);
- Noch nicht.
// Konsole.log('Bezeichnet vom Thema:
//
//
// Den Client deaktivieren
// client.end((((() => {\cHFFFF}
// console.log('Disconnected from MQTT broker');
//

Beispiel MQTTv5 Client

Stellen Sie sicher, dass die Verbindung Ihres Kunden mit dem Broker ordnungsgemäß beendet wird, um Probleme zu vermeiden und Ressourcenlecks auf beiden Seiten, wodurch die Systemstabilität erhalten bleibt.

Verwenden Sie den folgenden Code, um den Client vom Broker zu trennen:

const mqtt = Bett('mqt');
const fs = Bett('fs');
// Authentifizierung (auf "ENABLED" oder "DISABLED")
const AUTH = "ENABLED";
// --------- MQTT Broker Konfiguration -------
const broker Url = 'mqt://broker-url:1883'; // Ersetzen Sie mit Ihrem aktuellen Broker-URL oder IP
// MQTT v5 Anschlussparameter
const conn_params = {
In den Warenkorb Id: "testclient1", // Einzigartige Client-ID
ProtokollVersion: 5, // MQTT Version 5 verwenden
sauber: wahr, // Starten Sie eine saubere Sitzung
// Nichtzutreffen, wenn eine Authentifizierung erforderlich ist
// Benutzername: "Name",
// Passwort: "password",
// Uncoming für TLS-Verbindung
// Protokoll: "mqts"
// Gastgeber: 'broker-url',
// port: 8883,
// ca. [fs.readFileSync('/path/to/root.crt')],
};
Kunden lassen
// -------- MQTT Client Initialisierung -------
(AUTH === "ENABLED") {\cHFF}
Client = mqt.connect(brokerUrl, conn_params);
auch
Client = mqt.connect(conn_params);
}
// -------- MQTT Thema & Publish Interval ---------
const topic = 'testtopic';
const pubInterval = 2000; // Alle 2 Sekunden veröffentlichen
// ------- Auf dem Weg zur...
client.on('connect', (packet) => {\cHFF}
Konsole.log('Connected to MQTT broker using MQTT v5');
// Abonnieren mit v5 Optionen (optional)
client.subscribe(topic, { qos: 0 }, (err, erteilt) ={\cHFF}
wenn (err)
Konsole.error('Abonnementfehler:', err);
auch
`Bezeichnet zum Thema: ${topic}`, erteilt);
}
})
// Payload zu veröffentlichen
const message = JSON.stringify({ Temperatur: 27.6, gemessen: 34 });
Ich bin nicht da.
setInterval(((((((()) => (STÖHNT)
Client. veröffentlichen(topisch, Nachricht, {
zurückhalten:
Eigenschaften: {\cHFF}
Nachricht ExpiryInterval: 60, // Nachricht läuft nach 60 Sekunden ab (MQTT v5 Feature)
},
}, (err) =>
wenn (err)
Konsole.error('Error-Veröffentlichungsnachricht:', err);
auch
Konsole.log('Message veröffentlicht:', message);
}
})
}, pubInterval;
})
// -------- Nachricht empfangen Callback
client.on('message', (topisch, Nachricht, Paket) => {\cHFF}
Versuch's!
Daten der Konsortien = JSON.parse(message.toString());
Konsole.log(`Receive on '${topic}':`, data);
Fang (e) {
Konsole.log(`Erhaltene Nicht-JSON-Nachricht auf '${topic}':`, message.toString());
}
})
// ------- Event Callbacks ----------
client.on('error', (err) => {\cHFFFF}
Konsole.error('Error:', err);
})
client.on('close', () => {\cHFF}
Konsole.log('Disconnected from MQTT broker');
})
client.on('reconnect', () => {\cHFF}
Konsole.log('Reconnecting to MQTT broker...');
})
client.on('offline', () => {
Konsole.warn('MQTT Der Kunde ist offline');
})
// -------- Abmelden Trennen und -----
// client.unsubscribe('testtopic', (err) => {\cHFF}
// wenn (err) {
// Konsole.error('Fehler abmelden:', err);
- Noch nicht.
// Konsole.log('Bezeichnet vom Thema:
//
//
// client.end((((() => {\cHFFFF}
// console.log('Disconnected from MQTT broker');
//

Wenden Sie Daten in Aktion!

Power Your Node.js Client sofort

Streamen Sie IoT-Messaging, visualisieren Sie Live-Updates und erstellen Sie reaktionsschnelle Anwendungen mit unserem MQTT-Broker.