MQTT Visualisierte Steuerung Aktor: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 3: Zeile 3:
  
 
==== Neues Verzeichnis für das Projekt erstellen ====
 
==== Neues Verzeichnis für das Projekt erstellen ====
*'''mkdir /usr/local/control'''
+
* mkdir /usr/local/control
*'''cd /usr/local/control'''
+
* cd /usr/local/control
  
 
==== Initialisiere das Node.js-Projekt ====
 
==== Initialisiere das Node.js-Projekt ====
*'''npm init -y'''
+
* npm init -y
  
 
==== Installiere die benötigten Pakete ====
 
==== Installiere die benötigten Pakete ====
*'''npm install mqtt express'''
+
* npm install mqtt express
  
 
==== Konfiguration des Node.js-Servers ====
 
==== Konfiguration des Node.js-Servers ====
Erstelle die Datei '''server.js''' im Verzeichnis '''/usr/local/control''' mit folgendem Inhalt:
+
Erstelle die Datei server.js im Verzeichnis /usr/local/control mit folgendem Inhalt:
 
<pre>
 
<pre>
 
const mqtt = require('mqtt');
 
const mqtt = require('mqtt');
Zeile 61: Zeile 61:
 
   console.log(`Control Center is running at http://0.0.0.0:${port}`);
 
   console.log(`Control Center is running at http://0.0.0.0:${port}`);
 
});
 
});
 
 
</pre>
 
</pre>
  
 
==== HTML-Datei erstellen ====
 
==== HTML-Datei erstellen ====
  
Erstelle eine Datei '''index.html''' im selben Verzeichnis, die den Status der Lichter und des Haustüröffners anzeigt und eine visuelle Darstellung mit Farben bietet:
+
Erstelle eine Datei index.html im selben Verzeichnis, die den Status der Lichter und des Haustüröffners anzeigt und eine visuelle Darstellung mit Farben bietet:
  
 
<pre>
 
<pre>
Zeile 123: Zeile 122:
 
</body>
 
</body>
 
</html>
 
</html>
 
 
 
 
</pre>
 
</pre>
  
 
==== systemd-Unit erstellen ====
 
==== systemd-Unit erstellen ====
  
Erstelle eine Datei '''/etc/systemd/system/control.service''' mit folgendem Inhalt:
+
Erstelle eine Datei /etc/systemd/system/control.service mit folgendem Inhalt:
  
 
<pre>
 
<pre>
Zeile 149: Zeile 145:
  
 
==== systemd-Service starten ====
 
==== systemd-Service starten ====
*systemctl start control.service
+
* systemctl start control.service
  
 
==== systemd-Service beim Booten starten lassen ====
 
==== systemd-Service beim Booten starten lassen ====
*systemctl enable control.service
+
* systemctl enable control.service
  
 
==== Öffne deinen Browser und gehe zu ====
 
==== Öffne deinen Browser und gehe zu ====
*'''http://aktor.dkbi.com:3000'''
+
* http://aktor.dkbi.com:3000
  
 
==== MQTT-Nachrichten senden ====
 
==== MQTT-Nachrichten senden ====
Zeile 162: Zeile 158:
  
 
==== Definiere die Variable für den MQTT-Server ====
 
==== Definiere die Variable für den MQTT-Server ====
*'''export MQTTSERVER=mqtt.dkbi.int'''
+
* export MQTTSERVER=mqtt.dkbi.int
  
 
==== Licht im Wohnzimmer einschalten ====
 
==== Licht im Wohnzimmer einschalten ====
*'''mosquitto_pub -h $MQTTSERVER -t home/wohnzimmer/status -m "on" -u xinux -P geheim'''
+
* mosquitto_pub -h $MQTTSERVER -t home/wohnzimmer/status -m "on" -u xinux -P geheim
  
 
==== Licht im Wohnzimmer ausschalten ====
 
==== Licht im Wohnzimmer ausschalten ====
*'''mosquitto_pub -h $MQTTSERVER -t home/wohnzimmer/status -m "off" -u xinux -P geheim'''
+
* mosquitto_pub -h $MQTTSERVER -t home/wohnzimmer/status -m "off" -u xinux -P geheim
  
 
==== Haustür öffnen ====
 
==== Haustür öffnen ====
*'''mosquitto_pub -h $MQTTSERVER -t home/haustuer/status -m "offen" -u xinux -P geheim'''
+
* mosquitto_pub -h $MQTTSERVER -t home/haustuer/status -m "offen" -u xinux -P geheim
  
 
==== Haustür schließen ====
 
==== Haustür schließen ====
*'''mosquitto_pub -h $MQTTSERVER -t home/haustuer/status -m "geschlossen" -u xinux -P geheim'''
+
* mosquitto_pub -h $MQTTSERVER -t home/haustuer/status -m "geschlossen" -u xinux -P geheim
  
 
=== Zusammenfassung ===
 
=== Zusammenfassung ===
 
Dieses Projekt ermöglicht die Steuerung von Wohnzimmer, Schlafzimmer, Küchen Lichtern und des Haustüröffners, mit einer visuellen Darstellung des Status über eine farbcodierte Webseite. Die MQTT-Nachrichten steuern die Geräte und zeigen deren aktuellen Zustand an.
 
Dieses Projekt ermöglicht die Steuerung von Wohnzimmer, Schlafzimmer, Küchen Lichtern und des Haustüröffners, mit einer visuellen Darstellung des Status über eine farbcodierte Webseite. Die MQTT-Nachrichten steuern die Geräte und zeigen deren aktuellen Zustand an.

Version vom 30. Oktober 2024, 09:55 Uhr

Voraussetzungen

Neues Verzeichnis für das Projekt erstellen

  • mkdir /usr/local/control
  • cd /usr/local/control

Initialisiere das Node.js-Projekt

  • npm init -y

Installiere die benötigten Pakete

  • npm install mqtt express

Konfiguration des Node.js-Servers

Erstelle die Datei server.js im Verzeichnis /usr/local/control mit folgendem Inhalt:

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

let status = {
  livingRoom: 'off',
  bedroom: 'off',
  kitchen: 'off',
  frontDoor: 'closed'
};

// MQTT-Verbindung herstellen
const client = mqtt.connect('mqtt://mqtt.dkbi.int:1883', {
  // username: 'xinux',
  // password: 'secret'
});

client.on('connect', () => {
  console.log('Connected to the broker');
  client.subscribe('home/+/status', (err) => {
    if (!err) {
      console.log('Subscribed to all topics');
    }
  });
});

client.on('message', (topic, message) => {
  const room = topic.split('/')[1];
  status[room] = message.toString();
  console.log(`Status of ${room}: ${status[room]}`);
});

// API route to get the status of the lights and front door
app.get('/status', (req, res) => {
  res.send(status);
});

// Serve static directory for the web interface
app.use(express.static(path.join(__dirname)));

// Start the web server
app.listen(port, () => {
  console.log(`Control Center is running at http://0.0.0.0:${port}`);
});

HTML-Datei erstellen

Erstelle eine Datei index.html im selben Verzeichnis, die den Status der Lichter und des Haustüröffners anzeigt und eine visuelle Darstellung mit Farben bietet:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Control Center</title>
  <style>
    .device {
      margin: 20px;
      padding: 10px;
      border-radius: 10px;
      text-align: center;
      font-size: 1.5em;
    }
    .on {
      background-color: green;
      color: white;
    }
    .off {
      background-color: red;
      color: white;
    }
    .open {
      background-color: blue;
      color: white;
    }
    .closed {
      background-color: gray;
      color: white;
    }
  </style>
  <script>
    function fetchStatus() {
      fetch('/status')
        .then(response => response.json())
        .then(data => {
          document.getElementById('livingRoom').className = 'device ' + (data.livingRoom === 'on' ? 'on' : 'off');
          document.getElementById('bedroom').className = 'device ' + (data.bedroom === 'on' ? 'on' : 'off');
          document.getElementById('kitchen').className = 'device ' + (data.kitchen === 'on' ? 'on' : 'off');
          document.getElementById('frontDoor').className = 'device ' + (data.frontDoor === 'open' ? 'open' : 'closed');
        });
    }

    setInterval(fetchStatus, 1000); // Fetch status every second
  </script>
</head>
<body>
  <h1>Control Center</h1>
  <div id="livingRoom" class="device off">Living Room Light: Off</div>
  <div id="bedroom" class="device off">Bedroom Light: Off</div>
  <div id="kitchen" class="device off">Kitchen Light: Off</div>
  <div id="frontDoor" class="device closed">Front Door: Closed</div>
</body>
</html>

systemd-Unit erstellen

Erstelle eine Datei /etc/systemd/system/control.service mit folgendem Inhalt:

[Unit]
Description=Home Control Center

[Service]
Type=simple
WorkingDirectory=/usr/local/control
ExecStart=/usr/bin/node server.js
ExecStartPost=/bin/echo "Home Control Center Start"

[Install]
WantedBy=multi-user.target

Server starten

systemd-Service starten

  • systemctl start control.service

systemd-Service beim Booten starten lassen

  • systemctl enable control.service

Öffne deinen Browser und gehe zu

MQTT-Nachrichten senden

Zuerst definieren wir die Variable für den MQTT-Server:

Definiere die Variable für den MQTT-Server

  • export MQTTSERVER=mqtt.dkbi.int

Licht im Wohnzimmer einschalten

  • mosquitto_pub -h $MQTTSERVER -t home/wohnzimmer/status -m "on" -u xinux -P geheim

Licht im Wohnzimmer ausschalten

  • mosquitto_pub -h $MQTTSERVER -t home/wohnzimmer/status -m "off" -u xinux -P geheim

Haustür öffnen

  • mosquitto_pub -h $MQTTSERVER -t home/haustuer/status -m "offen" -u xinux -P geheim

Haustür schließen

  • mosquitto_pub -h $MQTTSERVER -t home/haustuer/status -m "geschlossen" -u xinux -P geheim

Zusammenfassung

Dieses Projekt ermöglicht die Steuerung von Wohnzimmer, Schlafzimmer, Küchen Lichtern und des Haustüröffners, mit einer visuellen Darstellung des Status über eine farbcodierte Webseite. Die MQTT-Nachrichten steuern die Geräte und zeigen deren aktuellen Zustand an.