MQTT Projekt I.: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „{#drawio:mqtt-plan1}}“)
 
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{#drawio:mqtt-plan1}}
+
=Grundaufbau=
 +
{{#drawio:mqtt-plan1}}
 +
=Connectivity=
 +
==ssh==
 +
;mqtt
 +
*ssh xinux@opnsense -p 9822
 +
;sensor
 +
*ssh xinux@opnsense -p 9823
 +
;aktor
 +
*ssh xinux@opnsense -p 9824
 +
==http==
 +
;sensor
 +
*http://opnsense:9723
 +
;aktor
 +
*http://opnsense:9724
 +
 
 +
=Unverschlüsselt ohne Passwort=
 +
==mqtt==
 +
;Konfiguration kopieren
 +
*cp -v /etc/mosquitto/conf.d/defaults.conf.unverschlüsselt /etc/mosquitto/conf.d/defaults.conf
 +
;Konfigurationsdatei
 +
<pre>
 +
# Öffnet den MQTT-Broker auf Port 1883 und bindet ihn an alle verfügbaren Netzwerkinterfaces.
 +
listener 1883 0.0.0.0
 +
 
 +
# Erlaubt anonyme Verbindungen, d. h. ohne Benutzername und Passwort.
 +
allow_anonymous true
 +
 
 +
# Aktiviert alle Log-Typen für eine detaillierte Protokollierung.
 +
log_type all
 +
 
 +
# Zeigt Verbindungs- und Trennungsmeldungen von Clients im Log an.
 +
connection_messages true
 +
</pre>
 +
;Restarten
 +
*systemctl restart mosquitto.service
 +
;Checken
 +
*systemctl status  mosquitto.service
 +
 
 +
==Aktor==
 +
Der Aktor '''abonniert (subscribed)''' die Nachrichten und reagiert darauf.
 +
*mosquitto_sub -h mqtt.lab.intern -t test
 +
 
 +
==Sensor==
 +
Der Sensor '''sendet (published)''' die Nachrichten an das Topic.
 +
*mosquitto_pub -h mqtt.lab.intern -t test -m "Hello World"
 +
*mosquitto_pub -h mqtt.lab.intern -t test -m "2 Nachricht"
 +
==kali==
 +
Hier kann man auf Wireshark mitschneiden. Der Text ist Hexadezimal codiert.
 +
;Beispiel
 +
*'''536368616c7465206469652054757262696e656e20766f6d2041746f6d6b726166747765726b20617573'''
 +
;Die kann man mit Follow TCP Stream oder auf der Konsole decodieren.
 +
*echo -n "536368616c7465206469652054757262696e656e20766f6d2041746f6d6b726166747765726b20617573" | xxd -r -p
 +
Schalte die Turbinen vom Atomkraftwerk aus
 +
=Node.js Umsetzung=
 +
==Einführung in das Node.js-MQTT-Projekt==
 +
Dieses Projekt dient zur steuerbaren MQTT-basierten Hausautomation mit Node.js und Mosquitto als MQTT-Broker. Es ermöglicht das Schalten und Überwachen von Geräten wie Lichtquellen und Türschlössern über eine Web-Oberfläche.
 +
 
 +
==Hauptbestandteile des Projekts==
 +
Mosquitto MQTT-Broker
 +
 
 +
==Verwaltung der Nachrichten zwischen Sensoren und Aktoren.==
 +
Zunächst ohne Authentifizierung, später mit Benutzer/Passwort und TLS.
 +
Node.js-Backend mit Express.js
 +
 
 +
==Verbindet sich als MQTT-Client zum Broker.==
 +
Abonniert Status-Topics und aktualisiert den Gerätestatus.
 +
Bietet eine REST-API, um den Status abzufragen und Geräte zu steuern.
 +
Web-Interface
 +
 
 +
==Zeigt den aktuellen Gerätestatus in einer einfachen Oberfläche.==
 +
Ermöglicht das Schalten der Geräte per Klick.
 +
Aktualisiert sich automatisch über API-Anfragen.
 +
==Schrittweise Absicherung==
 +
Das Projekt startet mit einer offenen MQTT-Verbindung, wird dann um Benutzer/Passwort ergänzt und am Ende mit TLS-Verschlüsselung abgesichert.
 +
=Node.js konkret=
 +
==Sensor==
 +
;Verzeichnis
 +
*/usr/local/control-switch
 +
===Wichtige Dateien===
 +
;Java Sript Datei
 +
*server.js
 +
;HTML Datei
 +
*index.html
 +
;Die Umgebungsvariablen
 +
*.env
 +
;Service Unit
 +
*systemctl restart control-switch.service
 +
==Zugriff==
 +
*http://opnsense:9723/
 +
==Aktor==
 +
;Verzeichnis
 +
*/usr/local/control
 +
===Wichtige Dateien===
 +
;Java Sript Datei
 +
*server.js
 +
;HTML Datei
 +
*index.html
 +
;Die Umgebungsvariablen
 +
*.env
 +
;Service Unit
 +
*systemctl restart control.service
 +
==Zugriff==
 +
*http://opnsense:9724/

Aktuelle Version vom 28. Februar 2025, 13:40 Uhr

Grundaufbau

Connectivity

ssh

mqtt
  • ssh xinux@opnsense -p 9822
sensor
  • ssh xinux@opnsense -p 9823
aktor
  • ssh xinux@opnsense -p 9824

http

sensor
aktor

Unverschlüsselt ohne Passwort

mqtt

Konfiguration kopieren
  • cp -v /etc/mosquitto/conf.d/defaults.conf.unverschlüsselt /etc/mosquitto/conf.d/defaults.conf
Konfigurationsdatei
# Öffnet den MQTT-Broker auf Port 1883 und bindet ihn an alle verfügbaren Netzwerkinterfaces.
listener 1883 0.0.0.0

# Erlaubt anonyme Verbindungen, d. h. ohne Benutzername und Passwort.
allow_anonymous true

# Aktiviert alle Log-Typen für eine detaillierte Protokollierung.
log_type all

# Zeigt Verbindungs- und Trennungsmeldungen von Clients im Log an.
connection_messages true
Restarten
  • systemctl restart mosquitto.service
Checken
  • systemctl status mosquitto.service

Aktor

Der Aktor abonniert (subscribed) die Nachrichten und reagiert darauf.

  • mosquitto_sub -h mqtt.lab.intern -t test

Sensor

Der Sensor sendet (published) die Nachrichten an das Topic.

  • mosquitto_pub -h mqtt.lab.intern -t test -m "Hello World"
  • mosquitto_pub -h mqtt.lab.intern -t test -m "2 Nachricht"

kali

Hier kann man auf Wireshark mitschneiden. Der Text ist Hexadezimal codiert.

Beispiel
  • 536368616c7465206469652054757262696e656e20766f6d2041746f6d6b726166747765726b20617573
Die kann man mit Follow TCP Stream oder auf der Konsole decodieren.
  • echo -n "536368616c7465206469652054757262696e656e20766f6d2041746f6d6b726166747765726b20617573" | xxd -r -p
Schalte die Turbinen vom Atomkraftwerk aus

Node.js Umsetzung

Einführung in das Node.js-MQTT-Projekt

Dieses Projekt dient zur steuerbaren MQTT-basierten Hausautomation mit Node.js und Mosquitto als MQTT-Broker. Es ermöglicht das Schalten und Überwachen von Geräten wie Lichtquellen und Türschlössern über eine Web-Oberfläche.

Hauptbestandteile des Projekts

Mosquitto MQTT-Broker

Verwaltung der Nachrichten zwischen Sensoren und Aktoren.

Zunächst ohne Authentifizierung, später mit Benutzer/Passwort und TLS. Node.js-Backend mit Express.js

Verbindet sich als MQTT-Client zum Broker.

Abonniert Status-Topics und aktualisiert den Gerätestatus. Bietet eine REST-API, um den Status abzufragen und Geräte zu steuern. Web-Interface

Zeigt den aktuellen Gerätestatus in einer einfachen Oberfläche.

Ermöglicht das Schalten der Geräte per Klick. Aktualisiert sich automatisch über API-Anfragen.

Schrittweise Absicherung

Das Projekt startet mit einer offenen MQTT-Verbindung, wird dann um Benutzer/Passwort ergänzt und am Ende mit TLS-Verschlüsselung abgesichert.

Node.js konkret

Sensor

Verzeichnis
  • /usr/local/control-switch

Wichtige Dateien

Java Sript Datei
  • server.js
HTML Datei
  • index.html
Die Umgebungsvariablen
  • .env
Service Unit
  • systemctl restart control-switch.service

Zugriff

Aktor

Verzeichnis
  • /usr/local/control

Wichtige Dateien

Java Sript Datei
  • server.js
HTML Datei
  • index.html
Die Umgebungsvariablen
  • .env
Service Unit
  • systemctl restart control.service

Zugriff