Zum Inhalt springen
hilfmirmal...Arbeit abgeben. Digitale Mitarbeiter entlasten dich.
Erstgespräch

n8n-Lernpfad · Präsentation · Teil 3

Erste Automatisierung

Folien zum n8n-Lernpfad: Expression mit Node-Namen, Schedule Trigger, HTTP Request und If. Mit Schirmcheck zum Nachbauen und Hilfe bei Fehlern.

Ein Kurs von Erik Lorenscheit, Gründer von hilfmirmal · Zuletzt aktualisiert am

Teil 3 · Erste Automatisierung

Vom Knopfdruck zur Uhr

In Teil 2 hast du deinen ersten Workflow auf Knopfdruck gebaut und getestet. Hier kommen zwei dazu: einer, an dem du Input und Output in Ruhe liest und Werte über den Node-Namen holst, und einer, der jeden Morgen von allein startet.

Workflow 1: Mein erster Flow
  1. Manuell startenManual Trigger
  2. Profil anlegenEdit Fields
  3. Begrüßung bauenEdit Fields
Workflow 2: Automatischer Schirmcheck
  1. Täglich um 7Schedule Trigger
  2. Wetter abrufenHTTP Request
  3. Regenchance ab 50 %?If
  4. Schirm mitnehmenEdit Fields

hilfmirmal.de · n8n-Lernpfad

Erklärung zur Folie

Der erste Workflow ist absichtlich winzig und hat dieselbe Form wie dein Workflow aus Teil 2: drei Nodes, kein Internet, keine Zugangsdaten. Er nimmt einen Namen und baut daraus einen Satz. Neu ist, wie der letzte Node an den Namen kommt: Er nennt den Node, aus dem der Name stammt, beim Namen. Was du aus Teil 2 schon kennst, wiederholen die nächsten Folien kurz, zum Nachschlagen.

Der zweite ist schon eine echte Automation. Jeden Morgen um sieben holt er das Wetter aus dem Internet und sagt dir, ob du einen Schirm brauchst. Zeitplan, Schnittstelle, Entscheidung. Du baust ihn nach und änderst ihn danach so lange, bis er deiner ist.

Kurz wiederholt: Wo finde ich was in n8n?

Stelle Was dort ist
Linkes Menü, Overview alle Workflows, Suche, Neu anlegen
Canvas in der Mitte die Arbeitsfläche, hier liegen die Nodes
Plus oben rechts oder am Node-Ausgang Node-Menü mit Suchfeld
Oben links Workflow-Name, anklicken zum Umbenennen
Oben rechts Publish, Drei-Punkte-Menü mit Settings und Duplicate, je nach Version oder Einstellung auch Save
Reiter Editor und Executions bauen oder alte Läufe ansehen
Unten Mitte Execute workflow

Lektion 7 im Lernpfad zeigt denselben Bildschirm zum Anklicken.

Erklärung zur Folie

Die wichtigsten Stellen kennst du aus Teil 2, hier stehen alle auf einen Blick. Leg einen neuen Workflow an: Overview, dann Create Workflow. Du siehst einen leeren Canvas, die Arbeitsfläche. Da kommen die Nodes drauf.

Gib dem Workflow als Erstes einen Namen: oben links auf „My workflow“ klicken, tippen, Enter. Dann findest du ihn in der Liste wieder. Oben rechts steht Publish, den brauchst du erst, wenn ein Workflow wirklich von allein laufen soll. Gespeichert wird in neueren n8n-Versionen beim Bearbeiten von selbst. Siehst du dort zusätzlich Save, speicherst du selbst, und zwar oft: mit dem Knopf oder Cmd+S, unter Windows Strg+S. Unten in der Mitte sitzt der wichtigste Knopf: Execute workflow lässt alles einmal laufen.

Ein Workflow ist eine Kette

  1. Triggerstartet
  2. Nodetut eine Sache
  3. Nodetut eine Sache
  4. Ergebniskommt raus
  • Trigger: startet die Kette. Immer der erste Node.
  • Node: tut eine Sache: Daten anlegen, prüfen, verändern, holen, senden.
  • Verbindung: vom Ausgang rechts zum Eingang links des nächsten Nodes.
  • Execute workflow: die ganze Kette läuft einmal. Execute step: dieser Node, mit den Daten davor. Fehlen sie, laufen die Nodes davor mit.

Merk dir

Grün heißt: ist durchgelaufen. Ob das Ergebnis stimmt, siehst du erst, wenn du in den Node schaust.

Erklärung zur Folie

Execute step nimmst du beim Bauen ständig, weil es schneller ist: Der geöffnete Node läuft mit den Daten, die vor ihm liegen. Fehlen davor noch Daten, laufen die Nodes davor mit. Execute workflow lässt die ganze Kette von vorne laufen.

Und ein Satz, der in jedem Teil wiederkommt: Grün heißt nur, dass der Node durchgelaufen ist. Ob das Ergebnis stimmt, siehst du erst, wenn du hineinschaust.

Kurz wiederholt: der Manual Trigger

  • Im Menü: Add first step, dann „Trigger manually“.
  • Heißt auf dem Canvas „When clicking ‘Execute workflow’“. Umbenennen ist erlaubt, etwa in „Manuell starten“.
  • Startet nur, wenn du klickst. Nie von allein.
  • Liefert selbst keine Daten. Die kommen vom nächsten Node.

Merk dir

Das ist der Trigger zum Lernen und Testen. Später in diesem Teil startet eine Uhr den Workflow.

Erklärung zur Folie

Den Manual Trigger kennst du aus Teil 2. Bei einem leeren Canvas zeigt dir „Add first step“ nur Trigger, weil vorne nur ein Trigger stehen kann. Zum Umbenennen markierst du den Node und drückst F2, oder du klickst im geöffneten Node oben auf seinen Namen.

Was der Manual Trigger macht? Nichts, bis du klickst. Genau deshalb ist er zum Lernen richtig: Nichts läuft weg, nichts passiert nachts. Führst du ihn aus, siehst du rechts ein leeres Item. Die Daten kommen erst mit dem nächsten Node.

Kurz wiederholt: Edit Fields

  • Im Menü: Plus am Ausgang, Suche „Edit Fields“, dann Edit Fields (Set).
  • Add Field: Name, Typ, Wert. Für den Anfang reichen String (Text) und Number (Zahl).
  • Jedes Feld hat einen Schalter Fixed | Expression. Fixed: fester Wert. Expression: wird ausgerechnet.
  • Include Other Input Fields: an, wenn die eingehenden Felder mitkommen sollen.

Beispiel: name = Alex, thema = Automatisierung. Nach Execute step steht rechts ein Item mit zwei Feldern.

Erklärung zur Folie

Edit Fields kennst du aus Teil 2, und er bleibt der wichtigste Node für den Anfang. Er macht eine Sache: Er legt Felder an oder ändert sie. Benenn ihn gleich um, diesmal in „Profil anlegen“.

Nach Execute step siehst du rechts ein Item mit zwei Feldern, das ist ein Datensatz. Oben rechts im Output schaltest du die Ansicht um: Table zeigt eine Tabelle, JSON zeigt die Daten so, wie sie wirklich gespeichert sind, Schema zeigt nur die Feldnamen.

Zum Nachbauen: Mein erster Flow

  1. Manuell startenManual Trigger
  2. Profil anlegenEdit Fields
  3. Begrüßung bauenEdit Fields
  • Drei Nodes, kein Internet, keine Zugangsdaten.
  • „Begrüßung bauen“ ist ein zweites Edit Fields mit dem Feld nachricht, gefüllt per Expression.
  • Ergebnis: ein Satz, der den Namen aus dem Node davor enthält, etwa „Hallo Alex!“.

Merk dir

Ändere in „Profil anlegen“ den Namen und führ den Workflow noch einmal aus. Der Satz ändert sich mit.

Erklärung zur Folie

So sieht das fertig aus: drei grüne Haken nach Execute workflow. Im letzten Node steht rechts das Feld nachricht mit deinem Satz. Woher kommt der Name? Der letzte Node holt ihn aus „Profil anlegen“, mit einer Expression wie in Teil 2. Neu ist, dass sie den Node beim Namen nennt. Wie das aussieht, kommt gleich.

Gewöhn dir von Anfang an eine Sticky Note an: Rechtsklick auf den Canvas, „Add sticky note“. Darin steht, was der Workflow tut und wie man ihn testet.

Input und Output lesen

Links: Input

Was in den Node reinkam: die Daten vom Node davor.

Rechts: Output

Was der Node rausgibt: die Daten für den Node danach.

  • Oben rechts im Output steht die Item-Zahl. In diesem Teil ist sie immer 1.
  • Ansichten: Table zum Lesen, JSON zum Verstehen, Schema zum Ziehen.

Achtung

Fehlt rechts ein Feld, das links da war? Dann ist Include Other Input Fields aus.

Erklärung zur Folie

Die drei Spalten eines geöffneten Nodes kennst du aus Teil 2: links der Input, in der Mitte die Einstellungen, rechts der Output. In dieser Ansicht verbringst du beim Bauen die meiste Zeit.

Schau in „Begrüßung bauen“: Links stehen name und thema, rechts nur nachricht. Die beiden Felder fehlen, weil Include Other Input Fields aus ist. Der Node gibt dann nur aus, was er selbst angelegt hat. Schaltest du den Schalter an und führst den Node aus, stehen rechts alle Felder. Die Item-Zahl wird spannend, sobald mehrere Datensätze durch die Kette laufen.

Expression mit Node-Namen

$json aus Teil 2 liest nur den Node direkt davor. Hier nennst du den Node beim Namen:

Hallo {{ $('Profil anlegen').item.json.name }}!
Teil Bedeutung
{{ und }} hier wird gerechnet, nicht getippt
$('Profil anlegen') hol das Item aus dem Node mit diesem Namen
.item.json.name das Feld name
  • Schalter auf Expression, name aus dem Input links ins Wertfeld ziehen. Steht dort $json.name, ersetz $json durch $('Profil anlegen').item.json.
  • Unter dem Feld zeigt „Result“ den echten Wert. [undefined] heißt: Feld falsch geschrieben. Bei falschem Node-Namen meldet n8n einen Fehler.
Erklärung zur Folie

Der Unterschied zu $json: $json meint immer das Item, das gerade aus dem Node davor hereinkommt. Mit $('Profil anlegen') holst du ein Feld aus genau diesem Node, auch wenn später noch weitere Nodes dazwischen stehen.

Ziehst du name herüber, schreibt n8n je nach Version {{ $json.name }} oder gleich die Form mit dem Node-Namen. $json.name funktioniert hier auch, denn „Profil anlegen“ steht direkt davor. Für diese Übung ersetzt du $json trotzdem durch $('Profil anlegen').item.json und schaust, ob die Vorschau gleich bleibt. So hast du die Form einmal selbst gebaut, die du brauchst, sobald ein weiterer Node dazwischen steht.

Lies die Expression einmal laut: Hol aus dem Node „Profil anlegen“ das Item, davon json, davon das Feld name. Die Vorschau unter dem Feld zeigt dir sofort, was herauskommt. Steht dort [undefined], ist der Feldname falsch geschrieben. Das ist der häufigste Fehler am Anfang, und er ist in Sekunden gefunden, wenn du auf die Vorschau schaust. Stimmt dagegen der Node-Name in $('…') nicht, meldet n8n den Fehler „Referenced node doesn't exist“: Diesen Node gibt es nicht. Dann vergleichst du ihn Zeichen für Zeichen mit dem Namen auf dem Canvas, samt Leerzeichen und Groß- und Kleinschreibung.

Noch ein Feld zum Ausprobieren: erstellt_am mit {{ $now.toFormat('dd.LL.yyyy HH:mm') }}. $now ist die aktuelle Zeit, die hat n8n immer dabei. Mehr Formeln zum Zusammenklicken findest du im Expression-Baukasten.

Schedule Trigger: die Uhr startet den Workflow

  • Im Menü: Add first step, dann „On a schedule“.
  • Trigger Interval: Days. Trigger at Hour: 7. Minute: 0.
  • Zeitzone: Drei-Punkte-Menü, Settings, Timezone, Europe/Berlin.
  • Execute workflow testet sofort, egal wie spät es ist.
  • Von allein läuft er erst nach Publish. Ein gespeicherter Workflow tut nichts.

Merk dir

Beim Start liegen noch keine Daten vor. Die holt der nächste Node.

Erklärung zur Folie

Benenn den Trigger gleich in „Täglich um 7“ um, wie in der Kette zum Nachbauen. Dann sagt dir der Canvas schon, wann der Workflow läuft.

Die Zeitzone vergessen fast alle. Sie steht nicht im Trigger, sondern in den Einstellungen des Workflows. Ohne sie rechnet n8n womöglich in einer anderen Zeitzone, und dein Sieben-Uhr-Workflow läuft zur falschen Stunde.

Führst du den Schedule Trigger aus, siehst du rechts nur Zeitangaben. Kein Wetter, keine Daten: Die Uhr startet, aber sie bringt nichts mit. Und von allein läuft er erst, wenn du Publish drückst. Zum Üben lässt du das weg.

HTTP Request: Wetter aus dem Internet holen

Feld Wert
Method GET
URL https://api.open-meteo.com/v1/forecast
Send Query Parameters an
latitude 52.52
longitude 13.41
daily precipitation_probability_max,temperature_2m_max
timezone Europe/Berlin
forecast_days 1

Node umbenennen in „Wetter abrufen“: Unter diesem Namen holen If und Ergebnis-Nodes die Werte. Antwort: ein Item mit Listen unter daily. Keine Zugangsdaten nötig.

Erklärung zur Folie

So baust du es: Plus am Ausgang von „Täglich um 7“, Suche „HTTP Request“. Benenn den Node gleich in „Wetter abrufen“ um, mit F2 oder oben im geöffneten Node. Das If und die beiden Ergebnis-Nodes holen ihre Werte später mit $('Wetter abrufen'). Heißt der Node noch „HTTP Request“, findet die Expression ihn nicht.

Der HTTP Request ist der Node, mit dem n8n eine Frage an eine Schnittstelle stellt. GET heißt: fragen. Open-Meteo ist ein Wetterdienst, der ohne Anmeldung antwortet. Die Query Parameters sind die Angaben hinter dem Fragezeichen der Adresse: wo (Berlin als Breiten- und Längengrad), was (Regenwahrscheinlichkeit und Höchsttemperatur), welche Zeitzone und wie viele Tage.

Schalt den Output nach Execute step auf JSON. Unter daily stehen drei Listen: time, precipitation_probability_max und temperature_2m_max. Jede steht in eckigen Klammern und hat genau einen Eintrag, weil du einen Tag abgefragt hast. Stell im Reiter Settings des Nodes noch Retry On Fail an: Antwortet der Wetterdienst kurz nicht, versucht n8n es mehrmals.

If: eine Regel, zwei Wege

  • Im Menü: Plus, Suche „If“. Linker Wert:
{{ $('Wetter abrufen').item.json.daily.precipitation_probability_max[0] }}
  • In der Mitte: Number, is greater than or equal to. Rechts: 50.
  • true oben: Regenchance ab 50 Prozent. false unten: darunter.
  • An jeden Ausgang kommt ein Edit Fields mit dem Feld empfehlung.

Merk dir

[0] heißt: der erste Eintrag der Liste. Gezählt wird ab null.

Erklärung zur Folie

Ein If stellt eine Frage, die man mit ja oder nein beantworten kann, und hat deshalb zwei Ausgänge. Links steht der Wert, den du prüfst: die Regenwahrscheinlichkeit, am einfachsten aus dem Input herübergezogen. In der Mitte, wie du vergleichst. Rechts die Schwelle. Benenn das If in „Regenchance ab 50 %?“ um, dann steht die Regel auch auf dem Canvas.

Nach Execute step landet das Item je nach Wetter auf true oder auf false. Oben hängst du „Schirm mitnehmen“ an, unten „Schirm eher nicht nötig“. Diese Bauart siehst du ab jetzt ständig: Trigger, Daten holen, prüfen, je Weg ein Ergebnis.

Zum Nachbauen: Automatischer Schirmcheck

  1. Täglich um 7Schedule Trigger
  2. Wetter abrufenHTTP Request
  3. Regenchance ab 50 %?If
  4. verzweigt in:
    • trueSchirm mitnehmenEdit Fields
    • falseSchirm eher nicht nötigEdit Fields
  • Fünf Nodes, eine echte Automation.
  • Beide Wege testen: die Schwelle im If kurz auf 0 stellen (true), dann auf 101 (false), danach zurück auf 50.
  • Am Ende steht ein Item mit Empfehlung, Ort, Regenchance, Höchsttemperatur und Datum.
Erklärung zur Folie

Das Wetter kannst du nicht ändern, die Schwelle schon. Mit 0 ist jede Regenchance mindestens null, also true. Mit 101 kommt nie ein Wert darüber, also false. So siehst du beide Wege, ohne auf Regen zu warten. Danach stellst du die Schwelle wieder auf 50.

Damit hast du alles, was eine Automation ausmacht: Zeitplan, Daten von außen, Entscheidung, Ergebnis. Und das in fünf Nodes. Welche Felder in die zwei Ergebnis-Nodes kommen, steht auf der nächsten Folie.

Die zwei Ergebnis-Nodes ausfüllen

  • empfehlung, String: oben „Schirm mitnehmen“, unten „Schirm eher nicht nötig“
  • ort, String: Berlin, fest eingetippt
  • regen_prozent, Number: daily.precipitation_probability_max[0]
  • temperatur_max, Number: daily.temperature_2m_max[0]
  • datum, String: daily.time[0]

Hinter dem If holst du die Werte mit dem Node-Namen, wie im If selbst:

{{ $('Wetter abrufen').item.json.daily.time[0] }}
Erklärung zur Folie

Beide Ergebnis-Nodes sind Edit Fields mit denselben fünf Feldern. Nur empfehlung ist verschieden, daran siehst du später, welchen Weg das Item genommen hat. Den Ort tippst du fest ein, denn die Antwort von Open-Meteo enthält keinen Ortsnamen, nur die Koordinaten.

Die anderen drei Werte stehen in daily. Stell bei jedem Feld den Schalter auf Expression und schreib den Pfad aus der Liste so wie beim Datum oben: $('Wetter abrufen').item.json. davor, außen die doppelten geschweiften Klammern. Ziehst du den Wert stattdessen aus dem Input links herüber, steht dort womöglich $json am Anfang. Das klappt hier auch, weil der If das Item unverändert weiterreicht. Mit dem Node-Namen bleibt die Expression aber richtig, auch wenn später ein Node dazwischen kommt.

Include Other Input Fields bleibt aus. Dann steht im Ergebnis nur, was du brauchst, und nicht die ganze Wetterantwort.

Testen, speichern, aufräumen

Wann Was
nach jedem Node Execute step, Output prüfen
nach jeder Änderung speichern: neuere Versionen tun es selbst, sonst Save, Cmd+S oder Strg+S
bevor du aufhörst der Name sagt, was der Workflow tut: „Schirmcheck Berlin“ statt „My workflow“
bei jedem Workflow eine Sticky Note oben links: Was tut er, wie teste ich ihn?
bei jedem Node umbenennen: „Wetter abrufen“ statt „HTTP Request“

Merk dir

Publish nur, wenn der Zeitplan wirklich laufen soll. Zum Üben nicht.

Erklärung zur Folie

Fünf Gewohnheiten, die dir später Stunden sparen. Nach jedem Node reinschauen, statt drei Nodes zu bauen und zu hoffen. Speichern, falls n8n es nicht selbst tut: Neuere Versionen sichern jede Änderung nach wenigen Sekunden, ältere brauchen Save. Gespeichert heißt aber nur Entwurf, von allein läuft erst, was du veröffentlicht hast. Einen Namen, unter dem du den Workflow auch später noch findest. Eine Sticky Note, die dir in einem Monat erklärt, was du dir gedacht hast. Und umbenannte Nodes, damit der Canvas lesbar bleibt.

Wenn es beim Bauen hakt

Symptom Ursache Was tun
[undefined] in der Vorschau Feldname falsch geschrieben aus dem Input ziehen statt tippen
Fehler „Referenced node doesn't exist“ Node-Name in $('…') falsch geschrieben oder Node noch nicht umbenannt Node umbenennen oder Namen genau wie auf dem Canvas schreiben
roter Node die Fehlermeldung steht im Node Meldung lesen, Input und Einstellung prüfen
Feld fehlt im Output Include Other Input Fields aus Schalter prüfen
links steht kein Input Node nicht verbunden, oder das Item lief über den anderen Ausgang des If Verbindung prüfen, zum Testen die Schwelle ändern
If rot: „Wrong type“ die Zahl kommt als Text an, etwa "51" statt 51 Typ prüfen, mehr in Lektion 5
Erklärung zur Folie

Diese sechs Dinge gehen am Anfang fast immer schief. Wenn du sie vorher kennst, erkennst du sie sofort. Lies eine Fehlermeldung ganz, meistens sagt sie genau, was fehlt. Und bei Namen gilt: Felder ziehst du aus dem Input, statt sie zu tippen. Node-Namen vergleichst du Zeichen für Zeichen mit dem Canvas.

Den Node davor musst du übrigens nicht erst von Hand ausführen. Fehlen ihm noch Daten, lässt Execute step ihn mit laufen. Steht links trotzdem nichts, liegt es an der Verbindung oder am Weg, den das Item genommen hat.

Die Regel für die Fehlersuche

Such den ersten Node von links, dessen Output nicht stimmt. Nicht den letzten roten.

Der rote Node ist meistens nur die Folge. Das Fehlerlabor trainiert genau diesen Blick.

Erklärung zur Folie

Ein Fehler wandert durch die Kette. Der Node, der rot wird, ist oft nur der erste, der über falsche Daten stolpert. Darum gehst du von links nach rechts und vergleichst bei jedem Node: Ist das, was rauskommt, das, was ich erwartet habe?

Dein Auftrag

  1. Mein erster Flow: ein eigener Workflow mit drei Nodes wie oben. Läuft er, kommen zwei eigene Felder dazu, eines davon in der Nachricht per Expression.
  2. Schirmcheck nachbauen: ein zweiter Workflow mit fünf Nodes. Beide Wege mit den Schwellen 0 und 101 testen.
  3. Eigene Variante: anderer Ort, andere Regel. Schreib vorher drei Testfälle auf, mit dem, was rauskommen soll.

Koordinaten zum Ausprobieren: Hamburg 53.55 und 9.99, Köln 50.94 und 6.96, München 48.14 und 11.58.

Merk dir

Eine Regel als Beispiel: Jacke mitnehmen, wenn die Höchsttemperatur unter 12 Grad liegt.

Erklärung zur Folie

Für die Variante änderst du im HTTP Request latitude und longitude und in beiden Ergebnis-Nodes den Wert von ort. Für die Jacken-Regel prüft das If daily.temperature_2m_max[0] mit Number, is less than, rechts 12. Die Ergebnis-Nodes heißen dann „Jacke mitnehmen“ und „Jacke nicht nötig“, und empfehlung bekommt jeweils denselben Text. Gute Testfälle: Schwelle 100 (immer true), Schwelle -50 (immer false), Schwelle 12 (je nach Wetter, die Erwartung liest du vorher im Output des HTTP Request ab).

Zum Schluss: beide Workflows gespeichert, benannt, mit Sticky Note, ohne Publish. Und dann zwei Sätze für dich: Welchen Node kann ich erklären? Wo habe ich am längsten gehangen, und was war die Lösung?

Was bleibt hängen?

  1. Was macht Execute step anders als Execute workflow?

    Antwort

    Execute step führt den geöffneten Node aus, bei Bedarf auch die Nodes davor. Execute workflow lässt die ganze Kette laufen.

  2. Woher weiß „Begrüßung bauen“ den Namen?

    Antwort

    Aus „Profil anlegen“, über $('Profil anlegen').item.json.name. $json.name geht hier auch, weil der Node direkt davor liegt.

  3. Warum startet der Schirmcheck nicht von allein, obwohl er gespeichert ist?

    Antwort

    Ein Zeitplan läuft erst nach Publish. Speichern allein reicht nicht.

  4. Wo schaust du zuerst, wenn im Ergebnis ein Feld fehlt?

    Antwort

    Im ersten Node, in dessen Output es fehlt. Meist ist dort Include Other Input Fields aus.

Erklärung zur Folie

Beantworte die Fragen zuerst für dich, dann klapp die Antworten auf. Wenn eine Antwort hakt, geh zurück zur passenden Folie oder klick dich durch Lektion 5 und 6 im Lernpfad: Mapping und Fehler finden, genau das, was du hier gebaut hast.

Wohin darf ich dich bringen?