MQTT nodejs Erklärung

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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.