Nachdem ich im letzten Beitrag gezeigt habe, was n8n ist und warum es sich auch im Smarthome-Bereich lohnt, wird es heute praktisch. Ich zeige dir, wie du mit einem ESP32 und n8n Sensordaten ganz einfach in der Cloud speichern kannst – ohne eigene Authentifizierung am Mikrocontroller und ohne komplizierten Code.
n8n nutzen, um Sensordaten in der Cloud zu speichern
Der Vorteil liegt hier auf der Hand: Ich brauche auf dem Mikrocontroller lediglich eine Schnittstelle, die mir die Sensordaten als JSON-Response anbietet – also z. B.:
{
"temperature_c": 22.3,
"humidity": 44.8
}
Alles Weitere übernimmt n8n. Die Plattform holt die Daten per HTTP Request Node ab, verarbeitet sie und lädt sie anschließend z. B. in Google Sheets, Notion oder eine Datenbank in der Cloud.
Damit wird der meist umständliche Teil der Authentifizierung (z. B. OAuth2) vollständig ausgelagert. Der Mikrocontroller muss sich nicht mehr mit API-Keys, Tokens oder HTTPS-Zertifikaten auseinandersetzen – das übernimmt n8n im Hintergrund.
Das spart enorm viel Zeit und reduziert Fehlerquellen.
Aufbau des Beispiels
Für das Beispiel verwende ich folgende Komponenten:
Komponente
Beschreibung
ESP32-S3 Zero (Waveshare)
Liest Sensordaten vom DHT11 aus und stellt sie per HTTP als JSON bereit
DHT11-Sensor
Misst Temperatur und Luftfeuchtigkeit
n8n Cloud (14-Tage-Trial)
Ruft die Daten regelmäßig ab und speichert sie in Google Sheets
Google Sheets Node
Schreibt die Messwerte zeilenweise in eine Tabelle
Der DHT11 ist direkt mit dem ESP32 verbunden. In n8n wird anschließend ein Workflow eingerichtet, der die JSON-Daten des ESP32 alle fünf Minuten abruft und speichert.
Aufbau der Schaltung
Die Schaltung für dieses kleine Beispiel ist dank des fertigen DHT11-Bausteins sehr übersichtlich und in wenigen Minuten aufgebaut. Du benötigst folgende Komponenten:
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
DHT11 Sensor am ESP32-S3 Zero
Den DHT11 & DHT22 Sensor gibt es fertig auf einer kleinen Platine oder als Baustein wo du noch zusätzlich ein 10 kOhm Widerstand benötigst. Je nach Ausführung musst du deine Schaltung anpassen.
Varianten des DHT11 Sensors
Damit ist die Hardware bereits vollständig vorbereitet. Der DHT11-Sensor misst nun Temperatur und Luftfeuchtigkeit und überträgt die Daten an den ESP32, der sie später als JSON ausgibt.
Programmcode für den ESP32
Nachdem die Schaltung steht, kümmern wir uns um den Code für den ESP32-S3 Zero. Der Mikrocontroller soll die Temperatur vom DHT11-Sensor auslesen, eine WLAN-Verbindung herstellen und die Messwerte als JSON-Antwort über einen kleinen Webserver bereitstellen.
Ausgabe – Temperatur und Luftfeuchtigkeit im Browser
So kann n8n später diese Daten über eine einfache HTTP-Anfrage abrufen und weiterverarbeiten.
Für das auslesen des Sensors wird eine zusätzliche Bibliothek benötigt welche einfach über den Bibliotheksverwalter installiert werden kann.
Hier gibt es viele verschiedene welche alle ähnlich arbeiten. Ich nutze in diesem Beispiel die Version von Dhruba Saha welche mit sehr wenig Code auskommt.
Arduino IDE – Bibliotheksverwalter – DHT11 Bibliothek von Dhruba Saha
Der komplette Code sieht so aus:
/***********************************************************************************
* Projekt: n8n nutzen, um Sensordaten in der Cloud zu speichern
* Beschreibung:
* Dieses Beispiel zeigt, wie der ESP32-S3 Zero Sensordaten (Temperatur & Luftfeuchtigkeit)
* über einen DHT11-Sensor erfasst und als JSON über eine HTTP-Schnittstelle bereitstellt.
* n8n ruft diese Daten anschließend ab und speichert sie automatisch in Google Sheets.
*
* Autor: Stefan Draeger
* Webseite: https://draeger-it.blog
* Blogbeitrag: https://draeger-it.blog/n8n-nutzen-um-sensordaten-in-der-cloud-zu-speichern/
*
* Hardware:
* - ESP32-S3 Zero oder vergleichbares Board
* - DHT11 / DHT22 Sensor
* - Breadboard + 3 Jumperkabel
*
* Bibliotheken:
* - WiFi.h
* - WebServer.h
* - DHT11.h
*
* Stand: Oktober 2025
***********************************************************************************/
#include <WiFi.h>
#include <WebServer.h>
#include <DHT11.h>
// === WiFi-Zugangsdaten ===
const char* ssid = "abc";
const char* password = "12345678";
// === DHT11 an GPIO1 ===
DHT11 dht11(1);
// === Webserver auf Port 80 ===
WebServer server(80);
// === Hilfsfunktion: Temperatur auslesen ===
float readTemperatureC() {
int temp = dht11.readTemperature();
if (temp == DHT11::ERROR_CHECKSUM || temp == DHT11::ERROR_TIMEOUT) {
Serial.println(DHT11::getErrorString(temp));
return NAN;
}
return (float)temp;
}
// === Hilfsfunktion: Luftfeuchtigkeit auslesen ===
float readHumidity() {
int humidity = dht11.readHumidity();
if (humidity == DHT11::ERROR_CHECKSUM || humidity == DHT11::ERROR_TIMEOUT) {
Serial.println(DHT11::getErrorString(humidity));
return NAN;
}
return (float)humidity;
}
// === Handler für Webserver ===
void handleRoot() {
float tempC = readTemperatureC();
float humidity = readHumidity();
if (isnan(tempC) || isnan(humidity)) {
server.send(500, "application/json", "{\"error\": \"Fehler beim Lesen des DHT11 Sensors\"}");
return;
}
// JSON-Antwort erstellen
String json = "{\n";
json += " \"temperature_c\": " + String(tempC, 1) + ",\n";
json += " \"humidity\": " + String(humidity, 1) + "\n";
json += "}";
Serial.println(json);
// HTTP-Antwort senden
server.send(200, "application/json", json);
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\nStarte ESP32-S3 DHT11 Webserver...");
// WLAN verbinden
WiFi.begin(ssid, password);
Serial.print("Verbinde mit WLAN: ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWLAN verbunden!");
Serial.print("IP-Adresse: ");
Serial.println(WiFi.localIP());
// Webserver-Routen definieren
server.on("/get", handleRoot);
server.begin();
Serial.println("Webserver gestartet. Rufe im Browser die IP-Adresse + /get auf (z. B. http://192.168.x.x/get)");
}
void loop() {
server.handleClient();
}
Ausgabe auf der Konsole:
Starte ESP32-S3 DHT11 Webserver...
Verbinde mit WLAN: FRITZBox7590GI24
...........
WLAN verbunden!
IP-Adresse: 192.168.178.131
Webserver gestartet. Rufe im Browser die IP-Adresse + /get auf (z. B. http://192.168.x.x/get)
Wenn die Daten via HTTP-Request über die Adresse abgerufen werden dann wird zusätzlich das JSON auch im seriellen Monitor der Arduino IDE ausgegeben.
Ausgabe der Temperatur und rel. Luftfeuchtigkeit im Browser und Arduino IDE
ESP32 aus dem Internet erreichbar machen
Damit n8n in der Cloud die JSON-Daten vom ESP32 abrufen kann, muss der Mikrocontroller von außen erreichbar sein. Standardmäßig ist dein ESP32 nur im lokalen Heimnetz sichtbar – deshalb muss der Zugriff über den Router (in meinem Fall eine FritzBox) freigegeben werden.
Schritt 1: IP-Adresse des ESP32 ermitteln
Nach dem Start zeigt der ESP32 im Serial Monitor die zugewiesene IP-Adresse an, zum Beispiel:
IP-Adresse: 192.168.178.42
Diese Adresse ist innerhalb deines Heimnetzwerks gültig und wird später im Router benötigt.
Schritt 2: Portfreigabe in der FritzBox
Damit der ESP32 auch aus dem Internet erreichbar ist, musst du in deiner FritzBox eine Portfreigabe einrichten:
Öffne die FritzBox-Oberfläche unter http://fritz.box.
Wechsle zu Internet → Freigaben → Portfreigaben.
Klicke auf Gerät für Freigaben hinzufügen.
Wähle dein ESP32-Gerät aus (z. B. „ESP32-S3-Zero“) oder gib die lokale IP manuell ein.
Erstelle eine Freigabe für Port 80 (Verwendung: HTTP-Server, Protokoll: TCP).
Übernehmen und speichern.
Damit ist dein ESP32 nun unter deiner öffentlichen IP-Adresse erreichbar. Diese findest du unter Internet → Online-Monitor im Bereich DSL-Verbindung (siehe Grafik).
FritzBox – ESP32 freigeben
Hinweis zur Sicherheit
Die Portfreigabe macht den ESP32 aus dem Internet erreichbar – das bedeutet aber auch, dass theoretisch jeder die Daten abrufen könnte, wenn er die Adresse kennt. Für Testzwecke ist das völlig in Ordnung, aber für den Dauerbetrieb solltest du:
den Port nach den Tests wieder schließen,
oder künftig eine authentifizierte API über n8n Webhooks verwenden.
Schritt 3: Öffentliche IP-Adresse der FritzBox ermitteln
Damit du den ESP32 später über das Internet erreichen kannst, benötigst du die öffentliche IP-Adresse deiner FritzBox. Diese Adresse ist von außen sichtbar und leitet Anfragen über die eingerichtete Portfreigabe an deinen ESP32 weiter.
So findest du sie:
Melde dich in deiner FritzBox unter http://fritz.box an.
Wechsle zu Internet → Online-Monitor.
Im Bereich „DSL-Verbindung“ findest du unter „IPv4-Adresse“ deine aktuelle öffentliche IP-Adresse.
FritzBox – öffentliche IP-Adresse ermitteln
Mit dieser Adresse und der eingerichteten Portfreigabe ist dein ESP32 nun aus dem Internet erreichbar – z. B. unter:
http://80.128.78.173/get
Aufbau des Workflows in n8n
Der Workflow in n8n übernimmt alle Aufgaben automatisch: Er ruft regelmäßig die Sensordaten vom ESP32 ab, prüft sie auf Fehler und speichert sie anschließend in Google Sheets. Zusätzlich wird über Telegram eine Nachricht mit den aktuellen Messwerten versendet.
n8n – Workflow – Sensordaten vom ESP32 in Google Sheets speichern inkl. Telegram Message
Wie immer gilt: Es gibt in der IT-Welt viele Wege, um ein Ziel zu erreichen. Ich habe mir den Aufbau durch viel Lesen und Experimentieren selbst beigebracht – also sieh es mir nach, wenn der Workflow an der einen oder anderen Stelle noch Optimierungspotenzial hat. Wichtig ist: Er funktioniert zu 100 % zuverlässig.
Workflow im Detail
Schedule Trigger – Der Zeitplaner
Der Workflow startet mit dem Schedule Trigger, also einem Zeitplaner, der den Ablauf automatisch in festgelegten Intervallen ausführt. In meinem Fall wird der Workflow alle fünf Minuten gestartet.
n8n – Node Schedule Trigger – Einstellungen
HTTP Request – Daten vom ESP32 abrufen
Sobald der im Schedule Trigger festgelegte Zeitpunkt erreicht ist, ruft der HTTP Request Node die Daten direkt vom ESP32 ab. Der Mikrocontroller stellt die Messwerte über eine einfache HTTP-Schnittstelle bereit, die wir im Code zuvor definiert haben (z. B. http://87.168.23.115/get).
Da der ESP32 ohne Authentifizierung arbeitet, liefert er die Daten unmittelbar als JSON-Response zurück. Das vereinfacht den Zugriff erheblich und spart den sonst üblichen Aufwand für Token oder API-Keys.
Ein typisches Beispiel für die empfangene Antwort sieht so aus:
{
"temperature_c": 22.4,
"humidity": 45.1
}
Date & Time – Zeitstempel erzeugen
Parallel zum Abruf der Sensordaten wird mit der Date & Time Node der aktuelle Zeitstempel ermittelt. Damit kann jeder Datensatz später eindeutig zugeordnet werden – ideal, wenn du die Werte in Google Sheets oder einer Datenbank speicherst.
Als zusätzlichen Parameter habe ich die Zeitzone „Europe/Berlin“ angegeben. So wird sichergestellt, dass der Zeitstempel der lokalen Zeit entspricht und nicht in UTC ausgegeben wird.
n8n – Node Date and Time – Einstellung
Das Ergebnis ist ein Datums- und Zeitwert im ISO-Format, der später gemeinsam mit den Messwerten gespeichert wird, z. B.:
Merge – Sensordaten und Zeitstempel zusammenführen
Nachdem sowohl die Sensordaten vom ESP32 als auch der aktuelle Zeitstempel vorliegen, werden beide Informationen in der Merge Node zusammengeführt. Das Ergebnis ist ein gemeinsamer Datensatz im JSON-Format, der alle relevanten Werte enthält und so die Grundlage für die weitere Verarbeitung bildet.
Dieser Schritt ist notwendig, um später in Google Sheets oder anderen Zielen alle Daten in einer strukturierten Form zu speichern – also Temperatur, Luftfeuchtigkeit und Zeit in einer Zeile.
Mit der IF Node prüfen wir nun den Inhalt des empfangenen JSON-Datensatzes. Wenn der Mikrocontroller beim Auslesen des DHT11-Sensors ein Problem hat, wird im JSON eine Fehlermeldung mit dem Schlüssel "error" zurückgegeben, z. B.:
{
"error": "Fehler beim Lesen des DHT11 Sensors"
}
In meinem Workflow überprüfe ich deshalb, ob der Key "error" nicht vorhanden ist. Ist das der Fall, bedeutet das, dass der ESP32 erfolgreich Sensordaten geliefert hat und diese verarbeitet werden können.
Damit lassen sich fehlerhafte Messungen gezielt abfangen und separat behandeln – ein wichtiger Schritt, um später nur korrekte Werte in Google Sheets zu speichern und saubere Telegram-Benachrichtigungen zu versenden.
n8n – Node If – Einstellungen
Google Sheets – Sensordaten speichern
Abschließend werden die ermittelten Sensordaten zusammen mit dem Zeitstempel in einem Google Sheet gespeichert. Dazu habe ich ein einfaches Tabellenblatt mit folgenden Spalten angelegt:
Zeitstempel
Temperatur in °C
rel. Luftfeuchtigkeit in %
n8n erkennt die vorhandenen Spalten automatisch und zeigt sie beim Einrichten des Google Sheets Node an. Dort werden die Werte aus dem JSON – also Zeit, Temperatur und Luftfeuchtigkeit – den entsprechenden Spalten zugeordnet.
n8n – Node Google Sheets – Einstellung- Auswahl des Datenblattesn8n – Node Google Sheets – Einstellung- Mapping JSON zu Spalten
So entsteht mit jedem Workflow-Durchlauf automatisch eine neue Zeile mit den aktuellen Messwerten. Das Ergebnis ist eine übersichtliche Tabelle, die sich später einfach weiterverarbeiten oder grafisch darstellen lässt – z. B. für Trendanalysen oder Diagramme.
Google Sheets – gespeicherte Daten vom ESP32 über n8n
Ausblick: Telegram-Benachrichtigung bei Fehlern
Damit haben wir den eigentlichen Use Case – das Speichern der Sensordaten des ESP32 in einem Google Sheet mit n8n – erfolgreich umgesetzt. Die Daten werden zuverlässig erfasst, verarbeitet und automatisch protokolliert.
Was nun noch fehlt, ist die Benachrichtigung über Telegram, falls beim Auslesen der Sensordaten ein Fehler auftritt. Das Thema ist etwas komplexer, da hier z. B. die Kommunikation mit dem Telegram-Bot und der Aufbau der Nachricht berücksichtigt werden müssen.
Telegram Channel mit Nachricht aus einem n8n Workflow
Ich werde diesen Teil deshalb in einem separaten Beitrag ausführlich behandeln und dort zeigen, wie du Fehler automatisch erkennen und dich direkt auf dein Smartphone benachrichtigen lassen kannst.
Fazit
Mit diesem kleinen Praxisprojekt hast du gesehen, wie einfach sich n8n mit einem ESP32 kombinieren lässt, um Sensordaten automatisch in der Cloud zu speichern – ganz ohne komplizierte Authentifizierung oder externe Skripte. Der Mikrocontroller liefert die Messwerte, n8n übernimmt die komplette Verarbeitung, Speicherung und später sogar Benachrichtigungen.
Gerade für Maker, Entwickler und Smarthome-Fans bietet n8n eine spannende Möglichkeit, Automatisierungen umzusetzen, die sonst nur mit viel Programmieraufwand realisierbar wären. Durch die grafische Oberfläche lassen sich Workflows schnell anpassen, erweitern und auch mit anderen Diensten verknüpfen – von Google Sheets bis Telegram oder Home Assistant.
Im nächsten Beitrag zeige ich dir, wie du mit Telegram eine Push-Benachrichtigung erhältst, sobald beim Auslesen ein Fehler auftritt – damit du jederzeit den Status deiner Sensoren im Blick behältst. So wächst aus diesem kleinen Beispiel Schritt für Schritt eine komplette IoT-Automatisierung mit n8n.
FAQ – Häufige Fragen zu diesem Projekt
Funktioniert das Beispiel auch mit anderen Sensoren?
Ja, du kannst anstelle des DHT11 auch Sensoren wie den DHT22, BME280 oder DS18B20 verwenden. Achte nur darauf, die verwendete Bibliothek im Code anzupassen und die JSON-Struktur entsprechend zu erweitern.
Muss ich n8n lokal installieren oder kann ich die Cloud nutzen?
Für den Einstieg reicht die n8n Cloud (14-Tage-Trial) völlig aus. Während der Testphase kannst du bis zu 1.000 Workflow-Ausführungen kostenlos nutzen – ideal, um erste Automatisierungen auszuprobieren und eigene Szenarien zu testen.
Später kannst du n8n problemlos auf deinem Raspberry Pi 4B oder einem kleinen Server installieren, um die volle Kontrolle über deine Daten zu behalten und unbegrenzt viele Workflows auszuführen.
Ist es sicher, den ESP32 über Portfreigabe erreichbar zu machen?
Für Testzwecke ja, für den Dauerbetrieb eher nicht. Besser ist es, später Webhooks oder MQTT zu verwenden, um Daten sicher an n8n zu übertragen. Damit entfällt die offene Portfreigabe im Router.
Kann ich die Daten auch anderswo speichern?
Ja, n8n unterstützt über 400 Integrationen. Du kannst die Daten z. B. in Notion, Airtable, einer MySQL-Datenbank oder sogar auf Nextcloud speichern – alles ohne zusätzlichen Code.
günstig ist das nicht, nur wenn man bedenkt welche Arbeit man sich mit den passenden Workflows sparen kann relativiert sich dieses schnell wieder.
Und zur größten Not kann man n8n ja auch lokal Hosten dann fallen nur die Kosten an um das Stück Hardware auf welchem dieses läuft zu betreiben.
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
https://n8n.io/pricing/ -> 20€/Monat – was habe ich übersehen? Wäre mir erheblich zu viel.
Hi Martin,
günstig ist das nicht, nur wenn man bedenkt welche Arbeit man sich mit den passenden Workflows sparen kann relativiert sich dieses schnell wieder.
Und zur größten Not kann man n8n ja auch lokal Hosten dann fallen nur die Kosten an um das Stück Hardware auf welchem dieses läuft zu betreiben.
Gruß, Stefan