Dieses Projekt steuert eine intelligente Paketbox mit einem Raspberry Pi. Die Box kann Pakete sicher aufnehmen, automatisch verriegeln und entleeren. Die Steuerung erfolgt über Motoren, Sensoren und Relais mit professioneller Fehlerbehandlung und Logging.
- Automatisches Öffnen und Schließen der Entleerungsklappen
- Intelligente Türverriegelung nach Paketeingang
- Umfassende Sensorüberwachung für alle Klappen und Türen
- Robuste Fehlerbehandlung mit automatischen ERROR-States
- Professionelles Logging mit Datei- und Console-Output
- Mock-Modus für lokale Entwicklung ohne Hardware
- MQTT-Integration für IoT-Benachrichtigungen
- Thread-sichere Zustandsverwaltung mit Locking-Mechanismen
- Automatische Versionierung basierend auf Commit-Types
- Modulare Architektur mit separaten Komponenten
- Raspberry Pi mit GPIO-Steuerung
- 2 Motoren für Entleerungsklappen mit Endlagensensoren
- Relais-Board für Motorsteuerung und Türverriegelung
- Sensoren:
- Endlagensensoren für beide Klappen (offen/geschlossen)
- Türsensoren für Paketzustellertür
- Briefkastensensoren für Entnahme
- Bewegungsmelder für Einklemmschutz
- Taster für Gartentüröffner (Nr. 6 und 8)
- Beleuchtung für Mülltonne und Paketbox
- Python 3 installieren (3.7+)
- Repository klonen:
git clone https://github.com/AndreasBeyer/paketbox.git cd paketbox - Automatische Versionierung einrichten:
python setup_versioning.py
- Abhängigkeiten (optional):
pip install paho-mqtt # Für MQTT-Funktionalität pip install RPi.GPIO # Nur auf Raspberry Pi
# Lokaler Test (Mock-Modus)
python paketbox.py
# Tests ausführen (empfohlen)
python tests/run_tests.py
# Version manuell erhöhen
python update_version.py patch# Auf Raspberry Pi mit Hardware
python paketbox.py# Mock-Modus für Entwicklung ohne Hardware
python paketbox.py
# Ausgabe: "[MOCK] GPIO setmode(BCM)" zeigt Simulation an
# Tests ausführen (umfassend)
python tests/run_tests.py
# Spezifische Tests
python -m unittest tests.test_paketbox.TestPaketBox.test_Klappen_oeffnen_success -vDas Projekt enthält eine umfassende Test-Suite:
- GPIO-Simulation: Vollständige Hardware-Simulation ohne Raspberry Pi
- Unit Tests: Testen einzelne Komponenten und Funktionen
- Integration Tests: Testen komplette Arbeitsabläufe
- Thread-Safety Tests: Prüfen gleichzeitige Operationen
# Alle Tests ausführen (dauert ~1-2 Minuten)
PYTHONPATH=. python tests/run_tests.py
# Einzelne Test-Klasse
PYTHONPATH=. python -m unittest tests.test_paketbox.TestPaketBox -v# Log-Datei überwachen
tail -f paketbox.log
# Debug-Level erhöhen (in paketbox.py)
logging.basicConfig(level=logging.DEBUG)- GPIO-Debouncing: Verhindert Mehrfachauslösung von Sensoren
- Thread-Safe: Alle Zustandsänderungen sind thread-sicher implementiert
- Error Recovery: Automatische ERROR-States bei Hardware-Fehlern
- Zentrale Konfiguration: Alle Parameter in
config.py - Timer-Management: Sichere Verwaltung von Motor-Timern
max_paket_box/
├── paketbox.py # Hauptsteuerung (Version 0.7.0)
├── handler.py # Handler-Funktionen für GPIO und Motoren
├── state.py # Zentrale Zustandsverwaltung
├── config.py # Konfiguration und GPIO-Pin-Zuordnungen
├── PaketBoxState.py # Zustandsklassen (Door/Motor States)
├── TimerManager.py # Timer-Verwaltung für Motoren
├── mqtt.py # MQTT-Integration für IoT-Benachrichtigungen
├── tests/
│ ├── test_paketbox.py # Umfassende Unit Tests
│ └── run_tests.py # Test Runner mit detailliertem Output
├── update_version.py # Automatische Versionsverwaltung
├── setup_versioning.py # Installation der Versionierung
├── pre-commit-hook.sh # Git Hook (Unix/Linux/Mac)
├── pre-commit-hook.bat # Git Hook (Windows)
├── deploy_paketbox.* # Deployment Scripts
├── paketbox.log # Strukturierte Log-Datei
└── README.md # Diese Datei
Das System wurde in separate Module aufgeteilt:
paketbox.py: Hauptsteuerung und GPIO-Event-Loophandler.py: GPIO-Handler und Motor-Steuerungsfunktionenstate.py: Zentrale Zustandsverwaltung für Thread-Sicherheitconfig.py: Alle Konfigurationen und GPIO-Pin-ZuordnungenPaketBoxState.py: Enum-Definitionen für Tür- und MotorstatusTimerManager.py: Sichere Verwaltung von Motor-Timernmqtt.py: MQTT-Integration mit Fallback-Mechanismus
Das Projekt verwendet automatische Versionierung basierend auf Conventional Commits:
feat: neue Funktion → MINOR Version (0.7.0 → 0.8.0)
fix: Bugfix → PATCH Version (0.7.0 → 0.7.1)
BREAKING CHANGE: → MAJOR Version (0.7.0 → 1.0.0)Setup: python setup_versioning.py
Dokumentation: Siehe VERSIONING.md
Das System unterstützt MQTT für IoT-Benachrichtigungen:
# MQTT-Konfiguration über Umgebungsvariablen
export MQTT_BROKER="your-mqtt-broker.local"
export MQTT_USER="username"
export MQTT_PASS="password"
# Oder Standard-Fallback-Werte verwenden (für Tests)
python paketbox.py # Verwendet Fallback-Werte wenn MQTT nicht verfügbarMQTT-Topics:
home/raspi/paketbox_text- Statusnachrichtenhome/raspi/paketbox- Paket-Zusteller-Eventshome/raspi/briefkasten- Briefkasten-Eventshome/raspi/paketboxleeren- Paketbox-Entleerungs-Events
- Motor-Blockage: Erkennung wenn Klappen nicht öffnen/schließen
- GPIO-Fehler: Behandlung von Hardware-Fehlern
- Timer-Management: Sichere Abbruchfunktionen für alle Timer
- Error-Recovery: Automatische Wiederherstellung nach Fehlern
# Manueller Reset bei Fehlerzuständen
handler.ResetErrorState() # Setzt alle Fehler zurück
handler.ResetDoors() # Bringt Türen in sicheren Zustand# Lokal testen (immer zuerst!)
python paketbox.py
# Tests ausführen vor Deployment
python tests/run_tests.py
# Auf Raspberry Pi übertragen
./deploy_paketbox.sh pi 192.168.1.100 /home/pi/paketbox # Linux/macOS
deploy_paketbox.bat pi 192.168.1.100 /home/pi/paketbox # WindowsDie Test-Suite deckt ab:
- ✅ Alle GPIO-Event-Handler (Klappen, Türen, Sensoren)
- ✅ Alle Motor-Steuerungsfunktionen (Öffnen/Schließen mit Timern)
- ✅ Tür-Verriegelung/Entriegelung
- ✅ Komplette Lieferzyklen (End-to-End)
- ✅ Fehlererkennung und Wiederherstellung
- ✅ Thread-sichere Zustandsverwaltung
- ✅ GPIO-Debouncing und Timer-Operationen
- ✅ MQTT-Integration (mit Fallback)
- ✅ Motor-Blockage-Szenarien
# Kritische Validierung nach Änderungen
python tests/run_tests.py # Alle Tests müssen bestehen
python paketbox.py # Anwendung muss ohne Fehler starten- Python 3.7+: Hauptsprache
- Standard-Bibliotheken: threading, logging, time, enum
- Optional: paho-mqtt (für MQTT-Funktionalität)
- Hardware: RPi.GPIO (nur auf Raspberry Pi)
- unittest: Für Tests (integriert)
- unittest.mock: Für Hardware-Mocking (integriert)
- Keine externen Tools: Vollständig in Python implementiert
MIT
Andreas Beyer