MQTT nodejs Erklärung
Erklärung der server.js für MQTT und Node.js
Import von Modulen
Zu Beginn importierst du die benötigten Bibliotheken:
- const mqtt = require('mqtt'); // Für MQTT-Verbindungen
- const fs = require('fs'); // Um Dateien zu lesen (z.B. Zertifikate)
- const express = require('express'); // Für den Webserver
- const path = require('path'); // Um Dateipfade zu verwalten
Diese Module fügen Funktionen zu Node.js hinzu, die du für die Verarbeitung von MQTT-Nachrichten, Zertifikate und den Webserver benötigst.
MQTT-Verbindung herstellen
Hier baust du die Verbindung zu deinem MQTT-Broker auf:
const options = {
port: 8883, // Der verschlüsselte MQTT-Port
host: 'mqtt.lab.int', // Der Hostname oder die IP deines MQTT-Brokers
protocol: 'mqtts', // Das Protokoll (verschlüsselt)
username: 'xinux', // Dein MQTT-Benutzername
password: 'geheim', // Dein Passwort
ca: fs.readFileSync('/root/home-control/ca.crt') // Das CA-Zertifikat, um die Verbindung zu sichern
};
const client = mqtt.connect(options); // Stellt die Verbindung zum Broker her
Diese Verbindung stellt sicher, dass Node.js sich sicher über TLS mit deinem Broker verbindet und das Zertifikat verwendet, um die Verbindung zu authentifizieren.
MQTT-Nachrichten abonnieren
Sobald die Verbindung steht, abonnierst du die relevanten MQTT-Themen:
client.on('connect', () => {
console.log('Verbunden mit dem Broker');
client.subscribe('home/+/status', (err) => {
if (!err) {
console.log('Alle Topics abonniert');
}
});
});
- home/+/status** bedeutet, dass du alle Statusmeldungen für Räume wie Wohnzimmer, Schlafzimmer etc. abonnierst. Das `+` ist ein Platzhalter.
Verarbeitung von MQTT-Nachrichten
Wenn eine Nachricht auf einem der abonnierten Themen ankommt, wird sie verarbeitet:
client.on('message', (topic, message) => {
const room = topic.split('/')[1]; // Extrahiert den Raum (z.B. wohnzimmer)
status[room] = message.toString(); // Speichert den Status (on/off) für den Raum
console.log(`Status von ${room}: ${status[room]}`);
});
Hier wird das MQTT-Thema analysiert (z.B. `home/wohnzimmer/status`), und der Status (z.B. "on" oder "off") wird in der Variable **status** für den jeweiligen Raum gespeichert.
Webserver erstellen
Du startest einen Webserver, der die aktuellen Status der Lichter und der Haustür bereitstellt:
app.get('/status', (req, res) => {
res.send(status); // Sendet den Status der Lichter und der Haustür an den Browser
});
app.listen(port, () => {
console.log(`Webserver läuft auf http://localhost:${port}`);
});
Wenn du in deinem Browser **http://localhost:3000/status** aufrufst, bekommst du den aktuellen Status der Lichter und der Haustür angezeigt.
Zusammenfassung
- **Node.js** verbindet sich über **TLS** sicher mit dem MQTT-Broker. - Es werden MQTT-Nachrichten empfangen und verarbeitet, die den Status der Lichter und der Haustür angeben. - Diese Informationen werden in einem kleinen Webserver zur Anzeige bereitgestellt.