Automatisches Tracking fuer DHL-Pakete mit SQLite-Datenbank. Pakete werden zentral gespeichert, automatisch ueberwacht und du erhaelst nur bei Status-Aenderungen Benachrichtigungen.
Features
- 🔌 Direkte DHL API (kein Browser noetig)
- 🗄️ SQLite-Datenbank fuer alle Pakete
- 🔄 Automatische Status-Aktualisierung
- 🔔 Nur bei Aenderungen benachrichtigen
- 📊 Historische Daten behalten
SQLite Datenbank-Funktionen
Das Script enthaelt alle noetigen Datenbank-Funktionen:
init_db()– Erstellt die SQLite-Datenbank mit Indexadd_package()– Fuegt ein neues Paket hinzutrack_package()– Fragt DHL API abupdate_status()– Speichert aktuellen Statusget_all_active()– Holt alle aktiven Pakete
Datenbank-Schema
CREATE TABLE packages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tracking_number TEXT UNIQUE NOT NULL,
carrier TEXT NOT NULL,
description TEXT,
status TEXT,
last_check TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
posted BOOLEAN DEFAULT 0
);
CREATE INDEX idx_carrier ON packages(carrier);
Installation
mkdir -p data
mkdir -p scripts
dhl_tracker.py
#!/usr/bin/env python3
"""DHL Sendungsverfolgung mit SQLite-Datenbank"""
import sqlite3
import requests
import sys
from datetime import datetime
DB_PATH = "data/tracking.db"
def init_db():
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS packages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tracking_number TEXT UNIQUE NOT NULL,
carrier TEXT NOT NULL,
description TEXT,
status TEXT,
last_check TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
posted BOOLEAN DEFAULT 0
)""")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_carrier ON packages(carrier)")
conn.commit()
conn.close()
def add_package(tracking_number, description=""):
init_db()
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
try:
cursor.execute(
"INSERT INTO packages (tracking_number, carrier, description) VALUES (?, 'dhl', ?)",
(tracking_number, description)
)
conn.commit()
print(f"✅ DHL-Paket {tracking_number} hinzugefuegt")
except sqlite3.IntegrityError:
print(f"⚠️ Paket existiert bereits")
finally:
conn.close()
def track_package(tracking_number):
url = f"https://www.dhl.de/int-api/trackandtrace-public/search?language=de&search={tracking_number}"
headers = {'User-Agent': 'Mozilla/5.0', 'Accept': 'application/json'}
try:
response = requests.get(url, headers=headers, timeout=30)
data = response.json()
if data.get('sendungen'):
shipment = data['sendungen'][0]
return {
'status': shipment.get('status', 'Unbekannt'),
'details': shipment.get('statusDetailliert', 'Keine Details'),
'location': shipment.get('ort', 'Unbekannt'),
'timestamp': shipment.get('datum', 'Unbekannt')
}
return None
except Exception as e:
print(f"❌ Fehler: {e}")
return None
def update_status(tracking_number, status):
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute(
"UPDATE packages SET status = ?, last_check = ? WHERE tracking_number = ?",
(status, datetime.now(), tracking_number)
)
conn.commit()
conn.close()
def get_all_active():
init_db()
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("SELECT tracking_number, description FROM packages WHERE carrier = 'dhl'")
packages = cursor.fetchall()
conn.close()
return packages
Verwendung
Paket hinzufuegen (speichert in DB)
python3 scripts/dhl_tracker.py add 00340434886241560288 "Amazon Bestellung"
Einzelnes Paket tracken (aktualisiert DB)
python3 scripts/dhl_tracker.py track 00340434886241560288
Alle Pakete aus DB anzeigen
python3 scripts/dhl_tracker.py list
Automatisches Tracking via Cron
Ein Cron-Job prueft automatisch um 10:00 und 16:00 Uhr alle aktiven Pakete. Bei Status-Aenderungen erhaelst du eine Benachrichtigung.
# Cron-Job: 10:00 und 16:00 Uhr pruefen
0 10 * * * cd /pfad/zu/openclaw && python3 scripts/dhl_tracker.py check-all
0 16 * * * cd /pfad/zu/openclaw && python3 scripts/dhl_tracker.py check-all
Automatisches Loeschen bei Zustellung
Nach erfolgreicher Zustellung wird das Paket automatisch aus dem aktiven Tracking entfernt. Der Cron ueberspringt bereits zugestellte Pakete, sodass keine weiteren Pruefungen mehr stattfinden.
Status-Beispiele fuer automatisches Entfernen:
- ✅ „Zugestellt“ – Paket aus Tracking entfernt
- ✅ „Ausgeliefert“ – Keine weitere Ueberwachung
- ✅ „An Nachbar uebergeben“ – Tracking beendet
- ✅ „Im Paketshop hinterlegt“ – Keine Cron-Pruefung mehr
Fertig!
Jetzt hast du eine zentrale Paketverwaltung mit automatischem Tracking und SQLite-Datenbank! 📦🗄️