EV-Ladesäulen-Finder
Freie Ladepunkte automatisch abfragen und melden
Autor: Wolfgang Lessat
Originalquelle:
lessat.net
https://lessat.net/technik/ki-und-automation/projekte/ev-ladesaeulen-finder/
Die Idee
Seit ich den Opel Corsa-e fahre, ist eine Frage morgens regelmäßig relevant: Ist die Ladestation in der Nähe frei?
Das manuelle Öffnen einer Lade-App, Warten auf den Ladescreen, Zoomen auf die Karte – das kostet täglich ein paar Minuten und fühlt sich unnötig an. Die Information, die ich brauche, ist einfach: Ist Ladestation X gerade frei, und welchen Ladestrom liefert sie?
Die Idee: Ein n8n-Workflow fragt jeden Morgen automatisch die nächstgelegenen Ladestationen ab und schickt mir eine Telegram-Nachricht mit den relevanten Ergebnissen – bevor ich das Haus verlasse.
Beispiel-Nachricht die ankommt:
⚡ Ladestationen Hamburg-Winterhude – 07:30 Uhr
✅ Winterhuder Marktplatz · AC 22 kW · frei
✅ Barmbeker Straße · DC 50 kW · frei
❌ Hofweg · AC 11 kW · belegt
2 von 3 Stationen frei.
Was das Projekt können soll
Klare Anforderungen vor dem Start – damit der Scope kontrollierbar bleibt.
✓ Täglich automatisch zur gewünschten Uhrzeit starten.
✓ Ladestationen im definierten Umkreis abfragen.
✓ Nur freie Stationen melden.
✓ Ladetyp (AC/DC) und Leistung (kW) anzeigen.
✓ Ergebnis per Telegram senden.
✗ Keine Echtzeit-Überwachung (kein Webhook auf Statusänderungen).
✗ Keine Kartenansicht oder grafische Darstellung.
✗ Keine Routenplanung oder Entfernungsberechnung.
✗ Keine Reservierung von Ladepunkten.
Die Lösung im Überblick
Fünf Nodes, ein Workflow, eine tägliche Nachricht.
Workflow-Ablauf:
[Schedule Trigger] täglich 07:30
↓
[HTTP Request] Open Charge Map API abfragen
↓ Liste aller Stationen im Umkreis
[IF Node] Status = Available?
↓ true: freie Stationen
[Code Node] Nachricht formatieren
↓
[Telegram Node] Nachricht senden
Open Charge Map API:
Kostenlose, öffentliche Datenbank aller
registrierten Ladestationen weltweit.
Liefert Status, Ladetyp, Leistung und Standort.
Kostenloser API-Key nach Registrierung.
Telegram Bot API:
Nachrichten an einen persönlichen Telegram-Chat senden.
Kostenlos, zuverlässig, kein eigener Server nötig.
Bot wird in zwei Minuten über @BotFather eingerichtet.
Voraussetzungen
Was vor dem ersten Node vorhanden sein muss.
Desktop-App oder Docker – beide funktionieren.
Für den automatischen Tagesstart empfiehlt sich Docker,
da die Desktop-App nur läuft, wenn der PC eingeschaltet ist.
→
n8n installieren
Kostenlos nach Registrierung unter
openchargemap.org/site/develop
Nach der Registrierung erscheint der Key
im Benutzerprofil unter „API Key".
Bot erstellen:
In Telegram @BotFather öffnen →
/newbot → Namen vergeben →
Token notieren (Format: 123456:ABC-DEF...).
Chat-ID ermitteln:
Dem eigenen Bot eine Nachricht schicken, dann im Browser:
https://api.telegram.org/botTOKEN/getUpdates
In der JSON-Antwort unter
message → chat → id
steht die eigene Chat-ID (eine Zahl).
Breitengrad und Längengrad des Ausgangspunkts –
z.B. der eigene Wohnort oder Stellplatz.
Hamburg-Winterhude als Beispiel:
lat=53.5872, lng=10.0082
Google Maps: Rechtsklick auf den Kartenort →
die Koordinaten werden direkt angezeigt.
Schritt 1: Trigger – täglich um 7:30 Uhr
Der Schedule Trigger startet den Workflow jeden Morgen zur gleichen Zeit.
Node: Schedule Trigger
Name: „Täglich 07:30"
Trigger interval: Days
Hour: 7
Minute: 30
Während der Entwicklung: Den Schedule Trigger durch einen Manual Trigger ersetzen – so kann der Workflow jederzeit per Knopfdruck getestet werden, ohne auf 7:30 Uhr zu warten. Erst wenn alles funktioniert, auf Schedule Trigger umstellen.
Schritt 2: API abfragen – Open Charge Map
Der HTTP Request Node holt die aktuellen Ladestations-Daten aus der Open Charge Map API.
Node: HTTP Request
Name: „OCM API abfragen"
Method: GET
URL:
https://api.openchargemap.io/v3/poi/
Query Parameters:
latitude → 53.5872
(eigene Koordinate eintragen)
longitude → 10.0082
distance → 2
(Umkreis in km)
distanceunit → KM
maxresults → 20
compact → true
verbose → false
countrycode → DE
Authentication:
Header Auth →
Credential mit Name X-API-Key
und dem Open Charge Map API-Key als Value.
Die API gibt ein Array von Stationen zurück.
Jede Station enthält u.a.:
AddressInfo.Title – Name der Station
AddressInfo.Distance – Entfernung in km
StatusType.IsOperational – in Betrieb?
Connections[0].PowerKW – Ladeleistung
Connections[0].CurrentType.Title – AC oder DC
Schritt 3: Filtern – nur freie Stationen
Der IF Node filtert die Liste auf Stationen, die gerade in Betrieb sind.
Node: IF
Name: „Nur verfügbare Stationen"
Condition:
Value 1 (Expression):
{{ $json.StatusType.IsOperational }}
Operation: Equal
Value 2: true
Hinweis zur OCM-API:
Open Charge Map liefert Echtzeit-Status
nur für Stationen, die mit einem
Live-Status-System verbunden sind.
Viele Stationen haben keinen Echtzeit-Status –
IsOperational ist dann null
oder fehlt ganz.
In diesem Fall zeigt der Workflow alle
betriebsbereiten Stationen als potenziell frei an.
Das ist eine bekannte Einschränkung
der kostenlosen API-Stufe.
Schritt 4: Nachricht formatieren
Ein Code Node baut aus den gefilterten Stationen eine lesbare Telegram-Nachricht zusammen.
Node: Code
Name: „Nachricht bauen"
Language: JavaScript
const items = $input.all();
const now = new Date().toLocaleTimeString('de-DE',
{ hour: '2-digit', minute: '2-digit', timeZone: 'Europe/Berlin' });
let lines = [`⚡ *Ladestationen Hamburg* – ${now} Uhr\n`];
for (const item of items) {
const s = item.json;
const name = s.AddressInfo?.Title ?? 'Unbekannt';
const dist = s.AddressInfo?.Distance
? `${s.AddressInfo.Distance.toFixed(1)} km`
: '';
const conn = s.Connections?.[0];
const kw = conn?.PowerKW ? `${conn.PowerKW} kW` : '';
const type = conn?.CurrentType?.Title ?? '';
lines.push(`✅ ${name} · ${type} ${kw} · ${dist}`);
}
if (items.length === 0) {
lines.push('ℹ️ Keine verfügbaren Stationen im Umkreis gefunden.');
}
return [{ json: { message: lines.join('\n') } }];
Schritt 5: Telegram-Nachricht senden
Der Telegram Node sendet die fertige Nachricht direkt in den eigenen Chat.
Node: Telegram
Name: „Telegram senden"
Credential:
Telegram-Bot-Token als n8n-Credential hinterlegen.
Operation: Send Message
Chat ID:
Die eigene Chat-ID eintragen (Zahl, z.B. 123456789).
Text (Expression):
{{ $json.message }}
Parse Mode: Markdown
(damit der fette Text und Emojis korrekt dargestellt werden).
Workflow exportieren und importieren
Der vollständige Workflow steht als JSON-Datei zum Download bereit und kann direkt in n8n importiert werden.
1. n8n öffnen →
Workflows → oben rechts das
Drei-Punkte-Menü → „Import from File".
2. Die heruntergeladene workflow.json auswählen.
3. Der Workflow erscheint sofort auf dem Canvas.
4. Koordinaten in Schritt 2 auf den eigenen Standort anpassen.
5. Credentials für OCM API und Telegram hinterlegen.
6. Chat-ID in Schritt 5 eintragen.
7. Einmal manuell testen, dann auf Schedule Trigger umstellen
und aktivieren.
Alternativ zum Download: Inhalt kopieren und in n8n über Workflows → Import from clipboard einfügen.
Sicherheit & Credentials
Zwei API-Keys im Einsatz – beide sicher als n8n-Credentials gespeichert.
Credential-Typ: Header Auth
Name: X-API-Key
Value: eigener OCM-Key
Berechtigungen: nur Lesezugriff (GET).
Kein Schreibzugriff möglich mit diesem Key-Typ.
Risiko bei Leak: gering – keine Kosten, nur Datenlesen.
Credential-Typ: Telegram API (n8n built-in)
Value: Bot-Token aus @BotFather
Der Token erlaubt ausschließlich Aktionen
über diesen spezifischen Bot –
kein Zugriff auf den eigenen Telegram-Account.
Bei Leak: Token in @BotFather mit
/revoke sofort sperren,
neuen Token generieren.
Was ich gelernt habe
Ein ehrliches Fazit – was lief, was nicht, was länger gedauert hat als gedacht.
Die Open Charge Map API ist gut dokumentiert und antwortet zuverlässig. Der Telegram Node in n8n ist erstaunlich einfach – Bot-Token rein, Chat-ID rein, fertig. Der Code Node zum Formatieren der Nachricht war die beste Entscheidung: Mehr Kontrolle über das Ausgabeformat als mit einem Set-Node.
Die Datenstruktur der OCM-API ist verschachtelt –
Connections[0].PowerKW statt einem
einfachen power-Feld.
Das Verständnis der Expressions in n8n
($json, $input.all(),
Unterschied zwischen Item und Array) hat
etwas Einarbeitung gebraucht.
Echtzeit-Verfügbarkeit ist mit der kostenlosen OCM-API nicht zuverlässig. Viele Stationen haben keinen Live-Status. Eine Alternative wäre die Ladesäulenkarte der Bundesnetzagentur oder der ChargePrice API – für eine spätere Version des Projekts.
Troubleshooting
Die häufigsten Probleme und ihre Lösung.
Ursache:
Der API-Key fehlt oder ist falsch gesetzt.
Lösung:
Im HTTP Request Node prüfen ob das Credential
ausgewählt ist. Header-Name muss exakt
X-API-Key heißen (Groß-/Kleinschreibung!).
Ursache:
Koordinaten falsch eingetragen,
oder Radius zu klein gewählt.
Lösung:
Koordinaten mit Google Maps prüfen.
Radius testweise auf 5 erhöhen.
Ursache A:
Dem Bot wurde noch keine Nachricht geschickt –
Telegram erlaubt keine Erstinitiierung durch den Bot.
Lösung:
Im Telegram-App dem eigenen Bot
eine beliebige Nachricht schicken,
dann nochmals testen.
Ursache B:
Chat-ID falsch.
Lösung:
getUpdates-URL im Browser aufrufen
und Chat-ID ablesen (siehe Voraussetzungen).
Ursache:
$input.all() gibt leeres Array zurück,
weil der IF Node alle Items herausgefiltert hat.
Lösung:
Den IF Node vorübergehend deaktivieren
und direkt mit allen Stationen testen.
So ist sichtbar, ob die API-Antwort
die erwartete Struktur hat.
Ideen für Weiterentwicklung
Was das Projekt in einer späteren Version können könnte.
Nicht nur den Heimatstandort, sondern auch häufig besuchte Orte (Arbeit, Einkauf) abfragen – als separater Workflow-Zweig oder über eine Konfigurationsliste.
Nachricht nur dann senden, wenn weniger als eine bestimmte Anzahl Stationen frei ist – statt täglich eine Meldung auch wenn ohnehin alles frei ist.
Integration einer API mit echtem Live-Status – z.B. über OCPI-fähige Netzbetreiber oder den Bundesnetzagentur-Datensatz.
Zusätzlich zum Tagesplan: Workflow auch per Telegram-Nachricht abrufbar machen – „/laden" → sofortige Statusabfrage. Das erfordert einen Webhook-Trigger statt eines Schedule Triggers.
Zurück zur Übersicht KI & Automation
Titel: EV-Ladesäulen-Finder
Druckdatum: 18.07.2026
Domain: www.lessat.net