Probieren Sie es zuerst aus: Öffnen Sie die Orbit-Postkarte und drücken Sie den Knopf. Nach ein paar Sekunden liegt eine Karte vor Ihnen, abgeschickt von der Internationalen Raumstation, genau von dem Ort, über dem sie in diesem Moment fliegt.
Auf der Karte finden Sie das echte Satellitenbild der Gegend unter der ISS, den Ortsnamen, Flughöhe, Geschwindigkeit, die Ortszeit dort unten und zwei bis vier Sätze Grüße, die eine KI in Ihrer Sprache geschrieben hat. Jede Karte hat einen eigenen Link zum Teilen, und auf der Seite hängt eine Wand mit den neuesten Karten aller Besucher.
Was dahinter passiert
Die Arbeit macht ein n8n-Workflow auf meinem Server, sieben Knoten von links nach rechts. Wenn Sie n8n noch nicht kennen: In meiner Einführung zu n8n erkläre ich die Grundlagen.
- Besucher-Knopf (Webhook): Der Knopf ruft zuerst PHP auf meiner Website auf. Das prüft die Grenzen, erzeugt eine zufällige Karten-ID und ruft den Webhook mit dieser ID und Ihrer Sprache auf.
- Wo ist die ISS?: ein HTTP-GET an
api.wheretheiss.at/v1/satellites/25544. Zurück kommen Breite, Länge, Höhe (rund 420 km), Geschwindigkeit (rund 27.600 km/h) und ob die Station gerade im Sonnenlicht oder im Erdschatten fliegt. - Was liegt darunter?: Reverse-Geocoding bei OpenStreetMap Nominatim, Zoomstufe 5 (Region und Land), in Ihrer Sprache.
- Postkarte schreiben: ein Code-Knoten. Er sammelt die Fakten und baut daraus den Prompt mit klaren Regeln.
- KI schreibt (IONOS): ein OpenAI-kompatibles Sprachmodell (gpt-oss-120b, bei IONOS in Deutschland gehostet) antwortet mit JSON:
{greeting, text}. - Antwort prüfen: ein zweiter Code-Knoten. Ist die Antwort leer oder kaputt, setzt er eine Vorlagen-Karte ein. Sie bekommen also immer eine Karte.
- An die Seite senden: ein HTTP-POST mit geheimem Token an meine Website. Dort lädt PHP das Satellitenbild, speichert Karte und Bild und hängt die Karte an die Wand.
Die interessanten Details
Das Bild ist ein Komposit. Es stammt aus NASA GIBS (Global Imagery Browse Services), und zwar die Echtfarben-Aufnahme des MODIS-Sensors auf dem Satelliten Terra. Ich nehme das Bild von gestern, weil das von heute erst im Laufe des Tages vollständig wird. Auch das gestrige hat Lücken: Terra tastet die Erde in Streifen ab, und zwischen zwei Überflügen bleiben in Äquatornähe Keile ohne Daten. Deshalb liegt darunter NASA Blue Marble, ein wolkenfreies Mosaik. Wo MODIS etwas gesehen hat, sehen Sie gestrige Wolken; wo nicht, die Erde ohne Wolken. Der Ausschnitt ist etwa 12° × 8° groß, rund 1.300 × 900 km, mit der ISS-Position in der Mitte.
Den Ozean benennt der Code. Die ISS fliegt etwa alle 92 Minuten einmal um die Erde, und meistens ist unter ihr Wasser. Dort findet Nominatim nichts. Deshalb ordnet der Code-Knoten die Position grob einem Ozean zu, anhand einfacher Koordinaten-Kästen:
const { latitude: lat, longitude: lon } = $('Wo ist die ISS?').first().json;
const now = new Date();
const solar = ((now.getUTCHours() + now.getUTCMinutes() / 60 + lon / 15) % 24 + 24) % 24;
const clock = String(Math.floor(solar)).padStart(2, '0') + ':' + String(Math.floor(solar % 1 * 60)).padStart(2, '0');
function ocean(lat, lon) {
if (lat < -55) return 'southern';
if (lat > 66) return 'arctic';
if (lon > 20 && lon < 147 && lat < 30) return 'indian';
if (lon > -100 && lon <= 20 && (lat > 8 || lon > -70)) return 'atlantic';
return 'pacific';
}
const geo = $('Was liegt darunter?').first().json;
const place = geo.error ? OCEANS[lang][ocean(lat, lon)] : geo.display_name;
Die Ortszeit ist die Sonnenzeit: UTC plus Längengrad geteilt durch 15. Das ist nicht die Uhrzeit auf den Handys dort, aber sie sagt ehrlich, ob unten Morgen, Mittag oder Nacht ist.
Die KI bleibt ehrlich und freundlich. Der Prompt enthält nur Fakten und Regeln: zwei bis vier Sätze, verspielt, Zahlen genau so wie angegeben, über den Ort nichts erfinden außer Allgemeinwissen. Keine Witze über Krieg, Katastrophen oder Unglücke; wenn der Ort damit verbunden ist, bleibt der Text neutral. Der Prüf-Knoten danach vertraut der Antwort nicht blind.
Grenzen gegen Missbrauch. Jeder Klick kostet einen KI-Aufruf. Deshalb gilt: höchstens eine Karte alle 20 Sekunden für alle zusammen, fünf pro Stunde und Besucher, dazu eine Tagesgrenze. Das prüft PHP, bevor n8n überhaupt etwas erfährt.
Die Website lädt das Bild selbst. Ich könnte das Bild direkt bei der NASA einbinden. Dann würde aber jeder Browser, der eine Karte ansieht, eine Anfrage an einen fremden Server schicken, mit IP-Adresse. Außerdem müsste ich die Content-Security-Policy für fremde Bildquellen öffnen. So bleibt img-src 'self', und die Karte sieht auch in einem Jahr noch genauso aus.
Wofür das Muster taugt
Die Postkarte ist eine Spielerei. Das Muster dahinter ist ernst gemeint: Auf Knopfdruck aus Live-Daten einen persönlichen Inhalt erzeugen, prüfen und mit festem Link ablegen. Damit baut man zum Beispiel:
- einen Bericht, den ein Kunde selbst anfordert, mit seinen aktuellen Zahlen;
- Teilnahme-Zertifikate nach einer Schulung, mit Namen und Datum;
- Onboarding-Karten für neue Mitarbeitende, mit Team, Ansprechpartnern und erstem Termin;
Weitere Beispiele dieser Art finden Sie in meiner wöchentlichen n8n-Reihe, und wer lieber einen Workflow in Zeitlupe laufen sieht, drückt den Knopf in der n8n-Live-Demo.
Selbst ausprobieren
Den Workflow können Sie hier als JSON herunterladen. Geheimnisse sind durch Platzhalter ersetzt.
- In n8n oben rechts im Menü „Import from File“ wählen und die Datei laden.
- Im Knoten „KI schreibt (IONOS)“ eine Credential vom Typ Header Auth anlegen: Name
Authorization, WertBearerplus Ihr API-Schlüssel eines OpenAI-kompatiblen Anbieters. Bei Bedarf Basis-URL und Modell anpassen. - Im Knoten „An die Seite senden“ die Platzhalter für URL und Token durch Ihr eigenes Ziel ersetzen, etwa einen eigenen Webhook, eine Mail oder eine Datei.
- Den Workflow aktivieren und die Webhook-URL einmal mit
{"id": "test000001", "lang": "de"}aufrufen.
Und dann zurück zur Orbit-Postkarte: Die ISS ist inzwischen ein paar tausend Kilometer weiter.