MQTT Pseudo-Glühbirnenprojekt mit Node.js und HTML: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 36: Zeile 36:
  
 
==== Starte den Mosquitto-Dienst und aktiviere ihn ====
 
==== Starte den Mosquitto-Dienst und aktiviere ihn ====
*'''sudo systemctl start mosquitto'''
+
*'''sudo systemctl enable mosquitto --now'''
*'''sudo systemctl enable mosquitto'''
 
  
 
==== Überprüfe, ob der Mosquitto-Dienst läuft ====
 
==== Überprüfe, ob der Mosquitto-Dienst läuft ====

Version vom 21. Oktober 2024, 18:43 Uhr

Voraussetzungen

Du benötigst die folgenden Programme und Tools:

  • Node.js (Version 20.x oder höher)
  • MQTT Broker (Mosquitto)

Projektstruktur

Verzeichnisstruktur:

mqtt-webserver/
├── index.html
└── server.js

Installation von Node.js und npm

Entferne, falls vorhanden, die alte Node.js-Version

  • sudo apt update && sudo apt upgrade
  • sudo apt install curl
  • sudo apt remove nodejs

Füge das Repository für die neueste LTS-Version von Node.js hinzu

Installiere Node.js (Version 20.x) und npm

  • sudo apt install -y nodejs

Überprüfe die Installation

  • node -v
  • npm -v
 * Es sollte eine Version 20.x für Node.js und eine aktuelle Version von npm angezeigt werden.

Installation von Mosquitto

Aktualisiere die Paketliste und installiere den Mosquitto MQTT Broker und die MQTT-Clients

  • sudo apt install mosquitto mosquitto-clients

Starte den Mosquitto-Dienst und aktiviere ihn

  • sudo systemctl enable mosquitto --now

Überprüfe, ob der Mosquitto-Dienst läuft

  • sudo systemctl status mosquitto

Abhängigkeiten für das Node.js-Projekt installieren

Erstelle ein Verzeichnis für dein Projekt

  • mkdir mqtt-webserver
  • cd mqtt-webserver

Initialisiere das Node.js-Projekt

  • npm init -y

Installiere die benötigten Pakete

  • npm install mqtt express

Konfiguration des Servers

Erstelle die Datei server.js im Projektverzeichnis mit folgendem Inhalt:

const mqtt = require('mqtt');
const express = require('express');
const path = require('path');
const app = express();
const port = 3000;

let bulbStatus = 'Unbekannt';

// MQTT-Verbindung herstellen
const client = mqtt.connect('mqtt://localhost:1883');

client.on('connect', () => {
  client.subscribe('gluebirne/status', (err) => {
    if (!err) {
      console.log('MQTT-Client abonniert');
    }
  });
});

client.on('message', (topic, message) => {
  bulbStatus = message.toString();
  console.log('Glühbirnenstatus: ', bulbStatus);
});

// API-Route für den Status der Glühbirne
app.get('/status', (req, res) => {
  res.send({ status: bulbStatus });
});

// Statisches Verzeichnis für die Webseite
app.use(express.static(path.join(__dirname)));

// Starte den Webserver
app.listen(port, () => {
  console.log(`Webserver läuft auf http://localhost:${port}`);
});

HTML-Datei erstellen

Erstelle eine Datei index.html im selben Verzeichnis, die den Status der Pseudo-Glühbirne anzeigt:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Pseudo Glühbirne</title>
  <script>
    function fetchStatus() {
      fetch('/status')
        .then(response => response.json())
        .then(data => {
          document.getElementById('status').innerText = 'Status: ' + data.status;
        });
    }

    setInterval(fetchStatus, 1000); // Alle 1 Sekunde den Status abrufen
  </script>
</head>
<body>
  <h1>Pseudo Glühbirne</h1>
  <p id="status">Status: Unbekannt</p>
</body>
</html>

Server starten

Starte den Node.js-Server im Projektverzeichnis

  • node server.js

Öffne deinen Browser und gehe zu

MQTT-Nachrichten senden

Nachricht für "An" senden

  • mosquitto_pub -h localhost -t gluebirne/status -m "on"

Nachricht für "Aus" senden

  • mosquitto_pub -h localhost -t gluebirne/status -m "off"

Zusammenfassung

Dieses Projekt demonstriert, wie ein Node.js-Server MQTT-Nachrichten von einem Mosquitto-Broker empfängt und den Status einer Pseudo-Glühbirne über eine Webseite darstellt. Die Webseite wird kontinuierlich aktualisiert, um den aktuellen Status der Glühbirne anzuzeigen.