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 Index
  • add_package() – Fuegt ein neues Paket hinzu
  • track_package() – Fragt DHL API ab
  • update_status() – Speichert aktuellen Status
  • get_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! 📦🗄️