In dieser Anleitung bauen wir ein GPS-Überwachungssystem auf, mit einem Teltonika FMC230 GPS-Tracker für ein Fahrzeug/Objekt welches überwacht werden soll. Das System sorgt dafür, dass ein Alarm aufs Handy gesendet wird, sobald der Tracker eine definierte Geofence-Zone (virtueller Zaun) verlässt. Wir nutzen dafür folgende Komponenten:
- Traccar als GPS-Tracking-Server, der die Positionen vom Tracker empfängt und Geofence-Ereignisse generiert
- n8n als Automatisierungs-Workflow, um Webhook-Meldungen von Traccar zu verarbeiten
- Pushover als App für Push-Benachrichtigungen aufs Smartphone
- Traefik als Reverse Proxy mit Let’s Encrypt, um die Web-Dienste (n8n, Traccar) unter eigenen Subdomains via HTTPS erreichbar zu machen
- Docker & Docker Compose zum containerisierten Betrieb aller Dienste auf einem Server (hier: Ubuntu 22.04)
Voraussetzungen
- Server: Ein laufender Server mit Ubuntu 22.04 (64-Bit) und Internetzugang, am besten einen v-Server bei von einem guten Anbieter. Root- oder Sudo-Zugriff ist erforderlich.
- Domain & DNS: Eine eigene Domain, für die Sie Subdomains anlegen können. In diesem Beispiel nutzen wir n8n.example.com für n8n und gps.example.com für Traccar. Beide sollten per DNS auf die IP des Servers zeigen. Stelle sicher, dass Ports 80 und 443 (für HTTP/HTTPS) sowie der Geräte-Port (Standard für Teltonika: 5027, wobei wir 5055 verwenden da o2 5027 in meinem Fall blockiert) eingehend erreichbar sind.
- Docker installiert: Docker Engine und Docker Compose sollten installiert sein.
Auf Ubuntu z.B.:
sudo apt update && sudo apt install -y docker.io docker-compose
Prüfe mit docker -v und docker compose version, ob beides verfügbar ist. - Teltonika FMC230 Tracker: Ein eingerichteter GPS-Tracker mit aktiver SIM-Karte (inkl. Datentarif). Zugang zur Teltonika-Configurator Software
- Pushover Account: Registriere dich bei Pushover und installiere die Pushover-App auf deinem Smartphone. Erstelle in deinem Pushover-Dashboard eine neue Anwendung, um ein API-Token zu erhalten, und notieren Sie Ihren User Key (diesen findet man im Pushover-Profil). Diese beiden Angaben werden wir in n8n hinterlegen, um Benachrichtigungen versenden zu können.
Schritt 1: Docker-Umgebung einrichten
Stelle sicher, dass Docker und Docker Compose auf dem Server installiert sind.
Falls nicht, installiere sie wie oben beschrieben. Optional kannst du deinen Benutzer zur Docker-Gruppe hinzufügen, damit du Docker-Befehle ohne sudo ausführen kannst:
sudo usermod -aG docker $USER
newgrp docker
Erstelle außerdem ein gemeinsames Docker-Netzwerk, das von Traefik und den Diensten genutzt wird, um sich intern zu verbinden.
Du nennst es zum Beispiel web:
docker network create web
Schritt 2: Domain und DNS konfigurieren
Lege bei deinem Domain-Provider zwei A-Records an, die auf die IP-Adresse deines Servers zeigen:
n8n.example.com - wird für den n8n-Dienst verwendet (Automatisierungs-Workflow)
gps.example.com - wird für den Traccar-Server (GPS-Tracking) verwendet
Schritt 3: Traefik und n8n per Docker Compose aufsetzen
Erstelle ein Verzeichnis auf deinem Server, zum Beispiel:
~/docker/n8n-traefik
Wechsel in das Verzeichniss und erstelle dort eine Datei „docker-compose.yml“ ersetze example.com durch deine eigenen Domain.
version: "3.9"
services:
traefik:
image: traefik:v3.1
container_name: traefik
restart: unless-stopped
command:
- --api.insecure=false
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.web.http.redirections.entryPoint.to=websecure
- --entrypoints.web.http.redirections.entryPoint.scheme=https
- --certificatesresolvers.le.acme.httpchallenge=true
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
- --certificatesresolvers.le.acme.email=<YOUR_EMAIL>
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- web
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
environment:
- N8N_HOST=n8n.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- NODE_ENV=production
- TZ=Europe/Berlin
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`n8n.example.com`)
- traefik.http.routers.n8n.entrypoints=websecure
- traefik.http.routers.n8n.tls.certresolver=le
- traefik.http.services.n8n.loadbalancer.server.port=5678
- traefik.http.middlewares.n8n-headers.headers.sslRedirect=true
- traefik.http.middlewares.n8n-headers.headers.stsSeconds=31536000
- traefik.http.middlewares.n8n-headers.headers.browserXssFilter=true
- traefik.http.middlewares.n8n-headers.headers.contentTypeNosniff=true
- traefik.http.middlewares.n8n-headers.headers.forceSTSHeader=true
- traefik.http.middlewares.n8n-headers.headers.sslHost=example.com
- traefik.http.middlewares.n8n-headers.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.n8n-headers.headers.stsPreload=true
- traefik.http.routers.n8n.middlewares=n8n-headers@docker
expose:
- "5678"
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- traefik
networks:
- web
volumes:
n8n_data:
networks:
web:
external: true
n8n & Traefik Container starten
Speichere die Datei und starte Traefik und n8n mit Docker Compose:
docker compose up -d
Im Hintergrund ruft jetzt Traefik die SSL Zertifikate ab, gehst du jetzt in deinen Broswer kommst du schon auf deine n8n Oberfläche.
https://n8n.deindomainname.de
Schritt 4: Traccar via Docker Compose bereitstellen
Als Nächstes richtest du den Traccar-Server ein, der die GPS-Daten vom Tracker empfängt und verarbeitet.
~/docker/traccar
Wechsle in dieses Verzeichnis und erstelle dort ebenfalls eine docker-compose.yml für Traccar:
version: "3.9"
services:
traccar:
image: traccar/traccar:latest
container_name: traccar
restart: unless-stopped
networks:
- web
ports:
- "5055:5027" #Port für Teltonika-Protokoll (extern:intern)
volumes:
- ./conf:/opt/traccar/conf
- ./logs:/opt/traccar/logs
- ./data:/opt/traccar/data
labels:
- traefik.enable=true
- traefik.docker.network=web
- traefik.http.routers.traccar.rule=Host(`gps.example.com`)
- traefik.http.routers.traccar.entrypoints=websecure
- traefik.http.routers.traccar.tls.certresolver=le
- traefik.http.services.traccar.loadbalancer.server.port=8082
networks:
web:
external: true
Du bindest Traccar in das gleiche Docker-Netzwerk web ein, damit Traefik den Container erreichen kann.
Die Traefik-Labels sorgen dafür, dass die Web-Oberfläche von Traccar unter:
https://gps.deindomainname.de
per HTTPS erreichbar ist.
Speichere die Compose-Datei und starte Traccar mit
docker compose up -d
Schritt 5: Traccar konfigurieren (Event Forwarding einrichten)
Damit Traccar deine Geofence-Ereignisse an n8n weiterleitet, aktivierst du das Event Forwarding in der Traccar-Konfiguration.
Erstelle in:
~/docker/traccar/conf/
eine Datei traccar.xml mit folgendem Inhalt:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
<properties>
<!-- Standard-Datenbank (H2) Konfiguration -->
<entry key='database.driver'>org.h2.Driver</entry>
<entry key='database.url'>jdbc:h2:./data/database</entry>
<entry key='database.user'>sa</entry>
<entry key='database.password'></entry>
<!-- Event Forwarding: Geofence-Events an n8n senden -->
<entry key='event.forward.enable'>true</entry>
<entry key='event.forward.url'>https://n8n.example.com/webhook/traccar</entry>
<entry key='event.forward.type'>json</entry>
</properties>
Starte deinen Container mit der neuen Konfiguration:
docker compose up -d
Schritt 6: n8n-Workflow für Geofence-Alarm erstellen
Jetzt richtest du den automatischen Workflow in n8n ein, der die von Traccar empfangenen Events filtert und bei Geofence-Verletzungen einen Alarm via Pushover sendet.
Klicke oben rechts auf Create Workflow, es erscheint ein leeres Workflow-Canvas, gib diesem am besten direkt einen Namen links oben in der Leiste.
Fangen wir mit dem Webhook Trigger an, klicke auf das + „Add first step“, in der Auswahl suchst du einfach nach „Webhook“.
Der Webhook-Node öffnet sich, stelle ein:
HTTP Mothod: POST
Path: traccar
Die restlichen Einstellungen können so bleiben, lediglich dem Node sollten wir noch einen Namen verpassen bsp. „Traccar Webhook“
IF-Bedingung hinzufügen
Wir möchten nur Geofence-Verletzungen als Pushbenachrichtigung auf das Handy erhalten, daher bauen wir als nächstes einen IF-Node ein. Klicke auf das + neber deinem Webhook und suche nach IF und wähle es aus.
In den Einstellungen bei value1 tragen wir ein Ergebnis aus dem JSON von unserem Webhook ein:
{{ $json.body.event.type }}
als Operator „is equal to“ und bei value2
geofenceExit
Speichern und weiter geht es zum nächsten Node, neben deinem Node hast du jetzt true und false als Möglichkeiten, wir möchten ja einen Alarm bekommen wenn der Tracker geofenceExit sendet, also klicken wir neben true auf das +.
Hier wählen wir jetzt als App „Pushover“ aus und „Push a message“, wir müssen Zugangsdaten für unsere Application anlegen, „Credential to connect with“ hier auf „Create new credential“ unter „API Key“ trägst du den Key welchen du bei Pushover bekommst ein für deine Application. Als nächstes füllst du noch deinen „User Key“ von Pushover aus.
Unser „Additional Fields“ klickst du auf „Add Field“ und wählst „Sound Name or ID“ hier nimmst du am besten „Persistent (long)“
Wir fügen ein weiteres Feld mit „Add Field“ hinzu, hier diesmal „URL“, hier tragen wir folgenden Link ein:
https://maps.google.com/maps?q={{ $json.body.position.latitude }},{{ $json.body.position.longitude }}
So bekommst du mit dem Push direkt einen Link mit wo das Fahrzeug/Objekt gerade ist, jetzt Workflow nur noch aktivieren, den Workflow kannst du dir hier auch einfach kopieren und direkt einfügen wenn du in der Canvas übersicht bist:
{
"nodes": [
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "44067995-bf17-43b0-b09a-cec0f133c7bc",
"leftValue": "={{ $json.body.event.type }}",
"rightValue": "geofenceExit",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
-352,
-48
],
"id": "3844a683-88cd-40af-aeb8-32d79624e8ee",
"name": "If"
},
{
"parameters": {
"httpMethod": "POST",
"path": "edad7d20-52e6-4141-a6c1-6da03f42b81b",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-560,
-48
],
"id": "5db342a7-90a3-479d-a0df-f38c80c40513",
"name": "Traccar Webhook",
"webhookId": "edad7d20-52e6-4141-a6c1-6da03f42b81b"
},
{
"parameters": {
"message": "Bagger hat den Geofence verlassen!",
"priority": 2,
"expire": 600,
"additionalFields": {
"sound": "persistent",
"url": "=https://www.google.com/maps/@{{ $json.body.position.latitude }},{{ $json.body.position.longitude }},17z"
}
},
"type": "n8n-nodes-base.pushover",
"typeVersion": 1,
"position": [
-96,
-64
],
"id": "d6cf6fc4-15fa-42fe-8058-21be4494e98a",
"name": "PushOver Alarm1",
"credentials": {
"pushoverApi": {
"id": "----",
"name": "Pushover account"
}
}
}
],
"connections": {
"If": {
"main": [
[
{
"node": "PushOver Alarm1",
"type": "main",
"index": 0
}
]
]
},
"Traccar Webhook": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "a63f2f7e8684f2ea888767552daf35106e4ece0da1bccf0fdad8e88015e005e2"
}
}
Schritt 7: Traccar Weboberfläche – Gerät und Geofence einrichte
Gehe auf die Weboberfläche von Traccar https://gps.deindomainname.de, im 1. Step wirst du aufgefordert einen Account anzulegen. Nachdem dieser erstellt ist legen wir den Teltonika FMC230 an, hierzu auf das + klicken und einen Namen deiner Wahl eintippen, unter Kennung muss die IMEI von deinem Teltonika eingetragen werden.
Soweit ist nun alles Vorbereitet und es fehlt nur noch die Konfiguration von unserem Teltonika FMC230, auf der Webseite ladest du dir nur noch den Konfigurator runter und startest diesen. Hier der Link zur Downloadseite : https://wiki.teltonika-gps.com/view/Teltonika_Configurator_versions#For_IP67_Series
Im Configurator unter dem Punkt „GPRS“ müssen wir folgende einstellungen erledigen:
Server Domain: gps.deinedomain.de
Port: 5055
Protokoll: TCP
Verschlüsselung: None
Zu beachten ist die SIM-Karte sollte OHNE PIN-CODE eingelegt werden!
Mit diesem Setup hast du dir eine zuverlässige, flexible und komplett selbst gehostete GPS-Überwachung aufgebaut.
Ohne Cloud-Zwang, ohne laufende Kosten pro Gerät und mit voller Kontrolle über deine Daten.
Gerade bei teuren Maschinen wie Baggern, Fahrzeugen oder Anhängern ist ein Geofence-Alarm kein „Nice-to-have“, sondern ein echtes Sicherheitsfeature. Du wirst nicht erst Stunden später informiert, sondern in dem Moment, in dem etwas passiert.
Das Schöne an dieser Lösung ist ihre Offenheit:
Du kannst sie jederzeit erweitern, anpassen oder auf andere Anwendungsfälle übertragen – egal ob Bau, Landwirtschaft, Fuhrpark oder private Projekte. Traccar, n8n und Docker geben dir dafür alle Freiheiten.
Wenn du das Setup nachgebaut hast und Fragen, Ideen oder Verbesserungsvorschläge hast, melde dich gern.
Viel Erfolg beim Nachbauen – und ein gutes Gefühl, wenn dein Equipment genau dort bleibt, wo es hingehört 🚜📍

