Files
smartphone-n8n-tracking/README.md
2025-11-14 09:58:21 +00:00

240 lines
6.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Telegram Location Tracker
Ein n8n-Workflow zur Verfolgung von Standorten über Telegram, ohne Datenbank-Anforderungen.
## Überblick
Dieser Workflow ermöglicht es Nutzern, ihre Standorte über einen Telegram-Bot zu teilen. Die Standortdaten werden in einer einfachen JSON-Datei gespeichert und können über eine API abgerufen werden, um sie auf einer Karte anzuzeigen.
## Funktionen
- **Standort-Erfassung**: Empfängt Standorte über Telegram und speichert sie automatisch
- **Historien-Verwaltung**: Behält die letzten 100 Standorte
- **API-Endpunkt**: Stellt Standortdaten per REST-API zur Verfügung
- **Web-Oberfläche**: Interaktive Karte mit Leaflet.js zur Visualisierung (index.html)
- **Bestätigungs-Nachrichten**: Sendet Bestätigungen mit Koordinaten und Kartenlink
- **Keine Datenbank**: Verwendet einfache dateibasierte Speicherung
## Voraussetzungen
- Eine laufende n8n-Instanz
- Ein Telegram-Bot mit gültigem API-Token
- Schreibrechte für `/tmp/n8n-locations.json` auf dem n8n-Server
## Installation
1. **Workflow importieren**:
- Öffne deine n8n-Instanz
- Navigiere zu "Workflows" → "Import from File"
- Wähle die `tracker.json` Datei aus
2. **Telegram-Bot konfigurieren**:
- Erstelle einen Bot über [@BotFather](https://t.me/botfather)
- Kopiere das API-Token
- In n8n: Gehe zu "Credentials" und füge die Telegram-API-Credentials hinzu
- Weise die Credentials dem "Telegram Trigger" und "Telegram Bestätigung" Node zu
3. **Workflow aktivieren**:
- Öffne den importierten Workflow
- Klicke auf "Active" um den Workflow zu aktivieren
4. **Testen**:
- Sende einen Standort an deinen Telegram-Bot
- Du solltest eine Bestätigungsnachricht mit den Koordinaten erhalten
## Verwendung
### Standort senden
1. Öffne den Chat mit deinem Telegram-Bot
2. Klicke auf das Büroklammer-Symbol (Anhang)
3. Wähle "Standort"
4. Sende deinen aktuellen Standort oder wähle einen auf der Karte
5. Der Bot bestätigt den empfangenen Standort mit Details
### Standorte abrufen
Der Workflow stellt einen API-Endpunkt zur Verfügung:
```
GET https://deine-n8n-instanz.de/webhook/location
```
**Beispiel-Antwort**:
```json
{
"success": true,
"current": {
"latitude": 48.1351,
"longitude": 11.5820,
"timestamp": "2025-11-14T10:30:00.000Z",
"user_id": 123456789,
"first_name": "Max",
"last_name": "Mustermann",
"username": "maxmuster",
"marker_label": "Max Mustermann",
"display_time": "14.11.2025, 11:30:00",
"chat_id": 123456789
},
"history": [...],
"total_points": 42,
"last_updated": "2025-11-14T10:30:00.000Z"
}
```
### Karten-Ansicht
Die Bestätigungsnachricht enthält einen Link zur Karten-Ansicht:
```
https://web.unixweb.home64.de/tracker/index.html
```
**Web-Oberfläche (index.html)**
Das Repository enthält eine vollständige Web-Oberfläche zur Visualisierung der Standortdaten:
**Features**:
- 📍 Interaktive Karte mit [Leaflet.js](https://leafletjs.com/)
- 🔄 Auto-Refresh alle 5 Sekunden (kann umgeschaltet werden)
- 📊 Aktuellster Standort als Marker mit Popup
- 📈 Standort-Historie als blaue Linie
- Status-Info mit Anzahl der Datenpunkte
- 🎯 Automatische Zentrierung auf aktuellen Standort
**Verwendung**:
1. Öffne die `index.html` in einem Browser
2. Die Karte lädt automatisch die neuesten Standorte
3. Klicke auf Marker für Details (Name, Zeitstempel)
4. Schalte Auto-Refresh nach Bedarf um
**Konfiguration**:
Passe die API-URL in `index.html` an deine n8n-Instanz an:
```javascript
// Zeile 85:
const API_URL = 'https://deine-n8n-instanz.de/webhook/location';
```
**Deployment**:
- Hoste die `index.html` auf einem Webserver (Apache, nginx, etc.)
- Oder öffne sie direkt als Datei im Browser (für lokale Tests)
- CORS muss in n8n aktiviert sein (ist standardmäßig der Fall)
## Workflow-Struktur
### Standort-Erfassung (Hauptfluss)
```
Telegram Trigger
Hat Location? (Filter)
Location verarbeiten (JS: Daten extrahieren)
Lade existierende Daten (Shell: cat JSON-Datei)
Merge mit History (JS: Neue Daten hinzufügen)
Speichere in File (Shell: JSON schreiben)
Telegram Bestätigung (Nachricht an User)
```
### API-Endpunkt
```
Webhook - Location API
Lade Daten für API (Shell: cat JSON-Datei)
Format API Response (JS: JSON formatieren)
JSON Response (CORS-Header + JSON zurückgeben)
```
## Datenspeicherung
- **Speicherort**: `/tmp/n8n-locations.json`
- **Format**: JSON-Array mit Standort-Objekten
- **Maximale Einträge**: 100 (älteste werden automatisch entfernt)
- **Persistenz**: Die Datei überlebt n8n-Neustarts, kann aber bei System-Neustarts verloren gehen (da in `/tmp`)
### Empfehlung für Produktion
Für produktiven Einsatz sollte der Speicherort von `/tmp/n8n-locations.json` zu einem persistenten Pfad geändert werden:
```javascript
// In den Nodes "Lade existierende Daten" und "Lade Daten für API":
cat /var/lib/n8n/locations.json 2>/dev/null || echo '[]'
// In dem Node "Speichere in File":
echo '...' > /var/lib/n8n/locations.json
```
## Anpassungen
### Anzahl gespeicherter Standorte ändern
Im Node "Merge mit History" die Zeile ändern:
```javascript
// Von 100 zu z.B. 500 ändern:
if (locations.length > 500) {
locations = locations.slice(0, 500);
}
```
### Datumsformat ändern
Im Node "Location verarbeiten" das Locale ändern:
```javascript
// Von 'de-DE' zu z.B. 'en-US' ändern:
const displayTime = new Date(messageDate * 1000).toLocaleString('en-US');
```
### CORS-Beschränkung
Im Node "Webhook - Location API" unter Options → Response Headers:
```javascript
// Aktuell: Alle Origins erlaubt
"Access-Control-Allow-Origin": "*"
// Besser für Produktion:
"Access-Control-Allow-Origin": "https://deine-domain.de"
```
## Sicherheitshinweise
- Der API-Endpunkt ist öffentlich zugänglich - implementiere ggf. Authentifizierung
- CORS ist für alle Origins geöffnet - beschränke dies in Produktion
- Die Telegram-Bot-Credentials sollten sicher verwahrt werden
- Standortdaten sind sensibel - beachte DSGVO-Anforderungen
## Fehlerbehebung
### "Standort gespeichert" wird nicht angezeigt
- Prüfe, ob der Workflow aktiv ist
- Prüfe die Telegram-Bot-Credentials
- Schau in die Workflow-Execution-Historie für Fehler
### API gibt leere Daten zurück
- Prüfe, ob die Datei `/tmp/n8n-locations.json` existiert
- Teste den Shell-Befehl: `cat /tmp/n8n-locations.json`
- Prüfe Dateiberechtigungen (n8n muss lesen können)
### Standorte gehen nach Neustart verloren
- Ändere den Speicherort von `/tmp/` zu einem persistenten Pfad
- Siehe "Empfehlung für Produktion" oben
## Lizenz
Dieses Projekt steht zur freien Verfügung.
## Support
Bei Fragen oder Problemen, erstelle bitte ein Issue in diesem Repository.