Projekt 2 – Untersuchung einer Kommuniktation zwischen ESP32 via MQTT ====================================================================== Notwendige Schritte ------------------- - Konfiguration von: hostapd, DHCP-Server, MQTT_Broker - Einrichtung von Tasmota auf ESP32 und folgend MQTT auf Tasmota Einrichtung des eigenen WLANs mit MQTT-Broker --------------------------------------------- Ziel dieses Versuchs ist es, ein separates WLAN bereitzustellen, in dem ESP32-Geräte (z. B. mit Tasmota geflasht) miteinander über das MQTT-Protokoll reden können. Ein eigenes WLAN lässt sich gezielt überwachen, ohne dass anderer Netzwerkverkehr stört. Die Kommunikation erfolgt über einen gehosteten Mosquitto-Broker auf Kali-Linux. Dies ermöglicht einen gezielten Mitschnitt von MQTT-Kommunikation. Benötigte Softwarepakete ^^^^^^^^^^^^^^^^^^^^^^^^ Für die Realisierung des Versuchs werden drei zentrale Softwarekomponenten benötigt, die direkt über die Paketverwaltung von Kali Linux installiert werden können. Diese Komponenten ermöglichen den Aufbau eines lokalen Netzwerks, die automatische Zuweisung von IP-Adressen an Geräte sowie die Kommunikation über das MQTT-Protokoll. Erklärung der eingesetzten Tools: - **hostapd**: Das Tool „hostapd“ (Host Access Point Daemon) ermöglicht es, aus einem WLAN-Adapter einen vollwertigen Access Point (AP) zu machen. Damit können sich andere Geräte, wie ESP32-Boards, direkt mit dem System verbinden. [Quelle](https://linux.die.net/man/8/hostapd) - **dnsmasq**: „dnsmasq“ ist ein kompakter DHCP- und DNS-Server. In diesem Setup wird er ausschließlich für DHCP verwendet, also für die Vergabe von IP-Adressen an die verbundenen Geräte. [Quelle](https://linux.die.net/man/8/dnsmasq) - **mosquitto**: Der Mosquitto-Broker stellt die MQTT-Kommunikation bereit. MQTT ist ein leichtgewichtiges Publish/Subscribe-Protokoll, das ideal für IoT-Geräte geeignet ist. Mosquitto ist Open Source und bietet umfangreiche Konfigurationsmöglichkeiten für Sicherheit, Topic-Management und Logging. [Quelle](https://mosquitto.org/) Installation der Pakete: .. code-block:: bash sudo apt update sudo apt install hostapd dnsmasq mosquitto Konfiguration von hostapd ^^^^^^^^^^^^^^^^^^^^^^^^^ Erstelle eine Konfigurationsdatei unter `~/hostapd.conf`. Diese steuert, wie der Access Point funktioniert: .. code-block:: bash interface=wlan0 ssid=MQTTLab channel=6 hw_mode=g driver=nl80211 wpa=2 wpa_passphrase=12345678 auth_algs=1 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP ap_isolate=0 **Erklärung wichtiger Parameter:** - ``interface=wlan0``: Der WLAN-Adapter, der als Access Point genutzt wird - ``ssid=MQTTLab``: Der Name des WLANs - ``hw_mode=g`` und ``channel=6``: Setzt den WLAN-Modus (2.4GHz) und den Kanal - ``wpa=2``, ``wpa_passphrase=...``: Aktiviert WPA2-Verschlüsselung - ``ap_isolate=0``: Erlaubt Kommunikation zwischen verbundenen Clients (z. B. ESPs) Um das WLAN zu konfigurieren werden folgende Befehle benötigt: .. code-block:: bash sudo ip link set wlan0 down sudo ip addr flush dev wlan0 sudo iw dev wlan0 set type __ap sudo ip link set wlan0 up sudo ip addr add 192.168.10.1/24 dev wlan0 **Starte Access Point:** .. code-block:: bash sudo hostapd ~/hostapd.conf DHCP-Server einrichten ^^^^^^^^^^^^^^^^^^^^^^ Erstelle eine Datei `~/dnsmasq.conf` mit: .. code-block:: bash interface=wlan0 dhcp-range=192.168.10.100,192.168.10.200,12h dhcp-option=3,192.168.10.1 dhcp-option=6,8.8.8.8 port=0 log-dhcp **Erklärung:** - ``dhcp-range``: IP-Adressbereich, den Clients bekommen können - ``dhcp-option=3``: Gateway (unser Kali-PC mit 192.168.10.1) - ``dhcp-option=6``: DNS (hier Google DNS, 8.8.8.8) - ``log-dhcp``: Aktiviert Logging, um DHCP-Vorgänge live zu sehen **Starte DHCP-Server (im neuen Terminal):** .. code-block:: bash sudo dnsmasq -d -C ~/dnsmasq.conf MQTT-Broker konfigurieren ^^^^^^^^^^^^^^^^^^^^^^^^^^ Mosquitto muss manuell angepasst werden. Öffne `/etc/mosquitto/mosquitto.conf` und stelle sicher: .. code-block:: bash listener 1883 allow_anonymous true Danach starten: .. code-block:: bash sudo systemctl start mosquitto Überprüfen mit: .. code-block:: bash sudo systemctl status mosquitto Der Broker lauscht nun auf Port 1883. Die ESP32-Geräte können sich verbinden. Tasmota auf ESP32 einrichten ----------------------------- Tasmota ist eine Open-Source-Firmware für ESP-Geräte, die sich besonders gut für MQTT-Anwendungen eignet. Sie kann über einen Webinstaller oder über Kommandozeilen-Tools wie `esptool.py` installiert werden. In diesem Beispiel wurde der einfachere Weg über [tasmota.github.io](https://tasmota.github.io/docs/) genutzt. Während des Flashens muss der ESP32 in den Bootloader-Modus versetzt werden. Dies geschieht durch gleichzeitiges Drücken von Reset- und Boot-Taster beim Anschließen über USB. .. image:: ./img/project2/tasmota.png :alt: Tasmota Oberfläche auf ESP32 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Nach dem Flash startet der ESP32 im Access-Point-Modus. Man verbindet sich über WLAN mit dem temporären Netzwerk (z. B. `tasmota-XXXX`) und ruft im Browser die Konfigurationsseite unter `http://192.168.4.1` auf. Dort gibt man die Zugangsdaten zum WLAN "MQTTLab" ein (SSID und Passwort). .. image:: ./img/project2/wlan.png :alt: AP-Log des Servers Modulkonfiguration: LED verbinden und testen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Nach dem Reboot und erfolgreicher Verbindung zum Access Point bekommt der ESP32 vom DHCP-Server eine IP-Adresse. .. image:: ./img/project2/dhcp.png :alt: DHCP-Log des Servers Diese IP kann man sich z. B. im Terminal über `dnsmasq` anschauen oder per Ping scannen. Im Browser öffnet man dann die Weboberfläche des Geräts (z. B. `http://192.168.10.114`). Dann folgt: 1. Menüpunkt: `Configuration` 2. `Configure Module` 3. `GPIO14` (oder ein anderer benutzter Pin) auf **Relay1** setzen Die LED wird folgendermaßen angeschlossen: - **Lange Seite** der LED → Vorwiderstand (z. B. 220 Ohm) → GPIO14 - **Kurze Seite** → GND Erscheint nun auf der Mainpage ein Toggle Button und leuchtet beim Drücken die LED, ist der ESP richtig eingerichtet. Nun kann mit der MQTT-Einrichtung weitergemacht werden. MQTT-Konfiguration in Tasmota ----------------------------- In diesem Abschnitt wird erklärt, wie MQTT auf einem Tasmota-Gerät konfiguriert wird. Hier wird exemplarisch gezeigt, wie das bei einem einzelnen ESP32 erfolgt. Bei mehreren Geräten muss man entsprechend mehrere Topics und Clientnamen definieren. Grundeinstellungen ^^^^^^^^^^^^^^^^^^ In `Configuration > Configure MQTT` werden folgende Parameter gesetzt: | Feld | Beispiel | | --------- | ----------------- | | Host | 192.168.10.1 | | Port | 1883 | | Client | tasmota1 | | Topic | tasmota1 | | FullTopic | %prefix%/%topic%/ | Jedes Gerät muss einen eindeutigen Client- und Topic-Namen haben, damit Nachrichten richtig zugeordnet werden können. Nachrichten senden und empfangen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Zum Testen der MQTT-Kommunikation auf dem Kali-System kann das Tool `mosquitto_pub` verwendet werden. Dieses gehört zum Mosquitto-Paket und erlaubt es, manuell MQTT-Nachrichten an einen bestimmten Topic auf dem Broker zu senden. Damit lassen sich Nachrichten simulieren, als kämen sie von einem Gerät. Es erlaubt auch den Live-Mitschnitt der einzelnen Nachrichten der anderen Clients. LED ein- und ausschalten: .. code-block:: bash mosquitto_pub -h 192.168.10.1 -t cmnd/tasmota1/POWER -m ON mosquitto_pub -h 192.168.10.1 -t cmnd/tasmota1/POWER -m OFF Nachrichtenüberwachung: .. code-block:: bash mosquitto_sub -h 192.168.10.1 -t "#" -v [Quelle](https://mosquitto.org/) Erweiterte MQTT-Nutzung mit Tasmota ----------------------------------- Kommunikation zwischen zwei ESP32 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ESP A (Topic: tasmota1) kann ESP B (Topic: tasmota2) direkt schalten, über die Konsole die man unter Tools findet: .. code-block:: bash Publish cmnd/tasmota2/POWER ON Beispiel: Gerät test3 über MQTT schalten ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. image:: ./img/project2/Bildschirmfoto_2025-04-19_00-48-37.png :alt: MQTT-Konfiguration eines Clients Um dieses Gerät zu schalten, sendet man: .. code-block:: bash Publish cmnd/test3/POWER ON .. image:: ./img/project2/led-anschalten.png :alt: MQTT Befehl zum schalten → Die LED an diesem Gerät sollte sich einschalten. Abbau und Zurücksetzen ----------------------- Wenn der Versuch fertig ist oder man den Rechner neu starten will, ist es sinnvoll, das System wieder in den Ursprungszustand zu bringen. Dazu gehören das Beenden aller Dienste sowie das Zurücksetzen des WLAN-Interfaces. So wird verhindert, dass der Access Point beim nächsten Systemstart automatisch weiterläuft oder dass der Rechner keine normale WLAN-Verbindung mehr herstellen kann. Dienste beenden ^^^^^^^^^^^^^^^^ .. code-block:: bash sudo pkill hostapd sudo pkill dnsmasq sudo systemctl stop mosquitto WLAN-Interface zurücksetzen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash sudo ip link set wlan0 down sudo ip addr flush dev wlan0 sudo iw dev wlan0 set type managed sudo ip link set wlan0 up NetworkManager reaktivieren ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash sudo systemctl enable NetworkManager sudo systemctl start NetworkManager Fazit ----- In diesem Projekt konnten mit Hilfe von dnsmasq und hostapd ein eigenes Netzwerk erstellen werden. Dieses Netzwerk wurde benutzt um mithilfe von einem MQTT-Broker, von Mosquitto, in einer isolierten Wlan-Umgebung eine Verbindung und Kommunikation zwischen zwei ESP32-Geräten aufzubauen. Die LED-Schaltung diente als ein praktischer Beweis für die Verbindung. Dabei haben wir Tasmota als Firmware benutzt um die Einrichtung und Konfiguration zu vereinfachen, da diese eine Weboberfläche bietet. Durch den Broker konnte die ganze Kommunikation mitgeschnitten und analysiert werden.