- C++ 100%
|
|
||
|---|---|---|
| .vscode | ||
| include | ||
| lib | ||
| src | ||
| test | ||
| .gitignore | ||
| platformio.ini | ||
| README.md | ||
| version.json | ||
Lüftersteuerung ESP8266
Temperaturgesteuerte Lüftersteuerung für einen ESP8266 (NodeMCU v2). Die Temperatur kommt per MQTT, der Lüfter hängt an Pin D1 (PWM). Status und Konfiguration laufen über ein Webinterface, der Status wird per MQTT publiziert und in Home Assistant automatisch angelegt.
Funktionen
- Lüftersteuerung: ab dem Temperatur-Schwellenwert (Standard 60 °C) 100 %, darunter aus
- Failsafe: ohne MQTT-Verbindung oder ohne aktuelle Temperatur läuft der Lüfter auf 100 % (Erstinstallation, WLAN- oder Broker-Ausfall)
- MQTT: Temperatur abonnieren, Status (
fan_percent,fan_on,temperature,threshold) als JSON publizieren - Home Assistant: MQTT-Auto-Discovery für Lüfter-Prozent, Temperatur und Lüfter an/aus
- Webinterface: Live-Status, Dark-Mode, Konfiguration, Reset
- Optionaler Passwortschutz (Benutzer
admin) für Einstellungen und Firmware-Update - Updates: PlatformIO-OTA, Upload der
.binim Browser, HTTPS-Update überversion.json - WLAN-Fallback: ohne Verbindung öffnet sich ein Access Point, der ESP versucht im Hintergrund weiter, sich zu verbinden
Hardware
| Teil | Anschluss |
|---|---|
| NodeMCU v2 (ESP8266) | – |
| Lüfter-Steuerung (PWM) | D1 (GPIO5) |
Erste Inbetriebnahme
- Firmware per USB flashen:
pio run -e nodemcuv2_usb -t upload - Der ESP öffnet den Access Point Hoymiles-Lüfter (Passwort
12345678). - Mit dem AP verbinden,
192.168.4.1aufrufen und WLAN-SSID und -Passwort eintragen. - Nach dem Neustart ist der ESP im WLAN erreichbar. Die IP steht im seriellen Monitor (115200 Baud).
- Unter
/mqttconfigMQTT-Server, Topics und Schwellenwert eintragen.
Bis eine Temperatur per MQTT ankommt, läuft der Lüfter auf 100 %.
Webinterface
| Pfad | Zweck | Passwortschutz* |
|---|---|---|
/ |
Status (im AP-Modus: WLAN-Konfiguration) | nein |
/data |
Live-Daten als JSON | nein |
/mqttconfig |
MQTT, OTA, Schwellenwert, Passwort | ja |
/update |
Firmware (.bin) im Browser hochladen | ja |
/trigger-ota |
gefundenes Update installieren | ja |
/check-ota |
nach Update suchen | nein |
/reset |
alle gespeicherten Daten löschen | nein |
* nur, wenn ein Passwort gesetzt ist. /reset ist bewusst immer erreichbar, damit man bei einem vergessenen Passwort zurücksetzen kann. Der Reset löscht auch das Passwort.
Hinweis: Der Passwortschutz gilt nur fürs Webinterface. Der PlatformIO-OTA-Port ist ohne Passwort offen. Wer im selben Netz ist, kann darüber Firmware aufspielen.
MQTT
- Subscribe-Topic: liefert die Temperatur als Zahl (z. B.
62.5) - Publish-Topic: bekommt den Status als JSON:
{"fan_percent":100,"fan_on":1,"temperature":62.5,"threshold":60.0}
- Home Assistant: Beim Verbinden werden unter
homeassistant/…drei Entitäten angelegt (retained). Sie hängen an einem Gerät "Luefter ESP8266".
Firmware aktualisieren
Per PlatformIO (OTA): In platformio.ini die IP des ESP bei upload_port eintragen, dann pio run -e nodemcuv2 -t upload.
Per USB: pio run -e nodemcuv2_usb -t upload
Per Browser: /update aufrufen und die Datei firmware.bin hochladen.
Per Update-Check (HTTPS):
- Unter
/mqttconfigdie URL zurversion.jsoneintragen. Bei einem privaten Repo zusätzlich Benutzer und Zugriffstoken. - Auf der Statusseite "Auf Updates prüfen" klicken. Der ESP prüft außerdem alle 24 Stunden von selbst.
- Gibt es eine neuere Version, erscheint "Jetzt aktualisieren".
Die version.json sieht so aus:
{"version":"1.0.10","bin":"https://forgejo.black-mail.org/conny/luefter-steuerung/releases/download/v1.0.10/firmware.bin"}
HTTPS-Zertifikate werden nicht geprüft (setInsecure()).
Neue Version veröffentlichen
FW_VERSIONinsrc/main.cpperhöhen.- Bauen:
pio run -e nodemcuv2_usb. Die Datei liegt unter.pio/build/nodemcuv2_usb/firmware.bin. - Auf dem Forgejo ein Release
vX.Y.Zanlegen undfirmware.binals Anhang hochladen. version.jsonauf die neue Version setzen, committen und pushen. Erst danach sehen die Geräte das Update.
Projektstruktur
src/main.cpp gesamte Firmware
platformio.ini Build- und Upload-Umgebungen (nodemcuv2 = OTA, nodemcuv2_usb = USB)
version.json aktuelle Version für den Update-Check
Bibliotheken
PubSubClient, ArduinoJson (v7), Preferences (vshymanskyy/Preferences) sowie die ESP8266-Arduino-Standardbibliotheken.