From 725505a714f704a14bc67321fde96bf13fb00756 Mon Sep 17 00:00:00 2001 From: Maximilian Lechner Date: Thu, 26 Feb 2026 20:00:50 +0000 Subject: [PATCH] =?UTF-8?q?aufger=C3=A4umt=20und=20readme=20=C3=BCberarbei?= =?UTF-8?q?tet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 192 ++---------------- VERSIONING.md | 180 ---------------- blueprint/Paketbox Seitenansicht.jpg | Bin 0 -> 113936 bytes Paketbox.jpeg => blueprint/Paketbox.jpeg | Bin blueprint/Paketbox_Draufsicht.jpg | Bin 0 -> 103963 bytes .../electronic_components.jpg | Bin deploy_paketbox.bat | 30 --- deploy_paketbox.sh | 25 --- handler.py | 4 +- pre-commit-hook.bat | 28 --- pre-commit-hook.sh | 31 --- setup_versioning.py | 119 ----------- update_version.py | 159 --------------- 13 files changed, 16 insertions(+), 752 deletions(-) delete mode 100644 VERSIONING.md create mode 100644 blueprint/Paketbox Seitenansicht.jpg rename Paketbox.jpeg => blueprint/Paketbox.jpeg (100%) create mode 100644 blueprint/Paketbox_Draufsicht.jpg rename electronic_components.jpg => blueprint/electronic_components.jpg (100%) delete mode 100644 deploy_paketbox.bat delete mode 100644 deploy_paketbox.sh delete mode 100644 pre-commit-hook.bat delete mode 100644 pre-commit-hook.sh delete mode 100644 setup_versioning.py delete mode 100644 update_version.py diff --git a/README.md b/README.md index 05cf0b7..97a1003 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Paketbox Steuerung 📩 -![Tests](https://github.com/AndreasBeyer/paketbox/workflows/Paketbox%20Tests/badge.svg) +![Tests](https://github.com/lechmax/paketbox/workflows/Paketbox%20Tests/badge.svg) -![Paketbox](Paketbox.jpeg) +![Paketbox](blueprint/Paketbox.jpeg) *Die intelligente Paketbox mit automatischer Lieferannahme und Verriegelung.* 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. @@ -16,11 +16,15 @@ Dieses Projekt steuert eine intelligente Paketbox mit einem Raspberry Pi. Die Bo - **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 - **15-Minuten-Watchdog** fĂŒr geöffnete PaketzustellertĂŒren inkl. MQTT-Warnung und Auto-Entleerung +- **Lichtschranke mit Notstopp** fĂŒr Schutz vor Einklemmungen +- **MQTT-basierte Steuerung** (Status, Zusteller/Briefkasten/Entleerung, Auto-Lock-Door) +- **Zeitgesteuerte TĂŒrverriegelung** mit konfigurierbaren Sperrzeiten +- **Ereignisse fĂŒr Briefkasten & Paketbox** (ON/OFF) plus Entleerungsbetrieb -## 🆕 Neueste Änderungen (Herbst 2025) +## 🆕 Neueste Änderungen (FrĂŒhjahr 2026) - **Watchdog fĂŒr geöffnete TĂŒren**: In `handler.py` ĂŒberwacht ein 15-Minuten-Timer offene PaketzustellertĂŒren, verschickt bei Bedarf MQTT-Warnungen und startet automatisch den Entleerungszyklus. - **Zentraler TimerManager**: `TimerManager.py` verwaltet jetzt alle Motor-, PrĂŒf- und Watchdog-Timer mit Thread-Lock, wodurch Nothalt-Szenarien sĂ€mtliche Timer zuverlĂ€ssig abbrechen. - **Verbesserter Fehler-Reset**: `ResetErrorState()` initialisiert TĂŒrsensoren neu, setzt MotorzustĂ€nde sicher auf `STOPPED` und verhindert doppelte MQTT-Fehlerbenachrichtigungen. @@ -36,7 +40,7 @@ Dieses Projekt steuert eine intelligente Paketbox mit einem Raspberry Pi. Die Bo - **Lichtschranke** fĂŒr Einklemmschutz (GPIO 11) - **Beleuchtung** fĂŒr MĂŒlltonne und Paketbox -![Elektronische Komponenten der Paketbox](electronic_components.jpg) +![Elektronische Komponenten der Paketbox](blueprint/electronic_components.jpg) *Elektronische Komponenten: Raspberry Pi, Relais-Board, Sensorleitungen und Spannungsversorgung.* ## 🚀 Quick Start @@ -45,14 +49,10 @@ Dieses Projekt steuert eine intelligente Paketbox mit einem Raspberry Pi. Die Bo 1. **Python 3** installieren (3.7+) 2. **Repository klonen**: ```bash - git clone https://github.com/AndreasBeyer/paketbox.git + git clone https://github.com/lechmax/paketbox.git cd paketbox ``` -3. **Automatische Versionierung einrichten**: - ```bash - python setup_versioning.py - ``` -4. **AbhĂ€ngigkeiten** (optional): +3. **AbhĂ€ngigkeiten** (optional): ```bash pip install paho-mqtt # FĂŒr MQTT-FunktionalitĂ€t pip install RPi.GPIO # Nur auf Raspberry Pi @@ -66,8 +66,6 @@ python paketbox.py # Tests ausfĂŒhren (empfohlen) python tests/run_tests.py -# Version manuell erhöhen -python update_version.py patch ``` ### Produktive Verwendung @@ -124,6 +122,8 @@ logging.basicConfig(level=logging.DEBUG) ## 📁 Projektstruktur +Die Bilder fĂŒr die Dokumentation liegen im Ordner `blueprint`. + ``` max_paket_box/ ├── paketbox.py # Hauptsteuerung (Version 0.7.0) @@ -135,168 +135,4 @@ max_paket_box/ ├── 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 -``` - -### Modulare Architektur (Version 0.7.0) -Das System wurde in separate Module aufgeteilt: -- **`paketbox.py`**: Hauptsteuerung und GPIO-Event-Loop -- **`handler.py`**: GPIO-Handler und Motor-Steuerungsfunktionen -- **`state.py`**: Zentrale Zustandsverwaltung fĂŒr Thread-Sicherheit -- **`config.py`**: Alle Konfigurationen und GPIO-Pin-Zuordnungen -- **`PaketBoxState.py`**: Enum-Definitionen fĂŒr TĂŒr- und Motorstatus -- **`TimerManager.py`**: Sichere Verwaltung von Motor-Timern -- **`mqtt.py`**: MQTT-Integration mit Fallback-Mechanismus - -## ⚙ Konfiguration (config.py) - -Die `config.py` enthĂ€lt alle Systemparameter und GPIO-Pin-Zuordnungen: - -### Timer & Steuerung -```python -CLOSURE_DELAY = 60 # Verzögerung vor dem Schließen der Klappen (Sekunden) -CLOSURE_TIMER_SECONDS = 65 # Zeit zum automatischen Schließen der Klappen -OPENING_TIMER_SECONDS = 65 # Zeit zum automatischen Öffnen der Klappen -DEBOUNCE_TIME = 0.2 # Entprellungszeit fĂŒr Sensoren (Sekunden) -``` - -### TĂŒrverriegelung -```python -TIME_LOCK_DOOR = "00:00" # Uhrzeit: TĂŒrverriegelung aktiviert -TIME_UNLOCK_DOOR = "05:30" # Uhrzeit: TĂŒrverriegelung deaktiviert (Lieferung möglich) -``` - -## 🔄 Automatische Versionierung - -Das Projekt verwendet automatische Versionierung basierend auf [Conventional Commits](https://www.conventionalcommits.org/): - -```bash -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` - -## 🌐 MQTT-Integration - -Das System unterstĂŒtzt MQTT fĂŒr IoT-Benachrichtigungen: - -```bash -# 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ĂŒgbar -``` - -**MQTT-Topics**: -- `home/raspi/paketbox_text` - Statusnachrichten -- `home/raspi/paketbox` - Paket-Zusteller-Events -- `home/raspi/briefkasten` - Briefkasten-Events -- `home/raspi/paketboxleeren` - Paketbox-Entleerungs-Events - -## đŸ›Ąïž Lichtschranke - Sicherheitseinrichtung - -Die Lichtschranke ist eine kritische Sicherheitseinrichtung zum Schutz vor Einklemmungen: - -### Funktionsweise -- **PIN 10** erfasst kontinuierlich den Betriebszustand -- **Auslösung**: Wenn die Schranke unterbrochen wird (z.B. Finger/Hand im Weg) -- **Notfall-Reaktion**: Motor stoppt sofort, um Verletzungen zu vermeiden -- **Überwachung**: System protokolliert jede Auslösung im Logger - -### Automatische Reaktion -```python -if GPIO.input(10) == FALLING: # Lichtschranke unterbrochen - handler.set_light_barrier_triggered(True) - logger.info("Lichtschranke hat ausgelöst - Notfall!") - handler.notHaltMotoren() # Alle Motoren stoppen sofort -``` - -### Sicherheitsprotokoll -- ✅ **Sofortiger Motorstopp** bei Erkennung von Hindernissen -- ✅ **Fehlerprotokollierung** fĂŒr Wartungsstatistiken -- ✅ **Manuelle RĂŒckstellung** erforderlich nach Auslösung -- ✅ **Integrale PrĂŒfung** bei System-Reset - -Diese Funktion entspricht Sicherheitsanforderungen fĂŒr automatische TĂŒrsysteme. - -## ⚠ Sicherheit & Fehlerbehandlung - -### Automatische Fehlererkennung -- **Lichtschran-Auslösung**: Sofortiger Motorstopp bei OberflĂ€chenblockade -- **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 - -### Reset-Funktionen -```python -# Manueller Reset bei FehlerzustĂ€nden -handler.ResetErrorState() # Setzt alle Fehler zurĂŒck -handler.ResetDoors() # Bringt TĂŒren in sicheren Zustand -``` - -### Deployment -```bash -# 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 # Windows -``` - -## đŸ§Ș Test-Coverage - -Die 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 - -### Validierung -```bash -# Kritische Validierung nach Änderungen -python tests/run_tests.py # Alle Tests mĂŒssen bestehen -python paketbox.py # Anwendung muss ohne Fehler starten -``` - -## 📊 System-Requirements - -### Laufzeit-AbhĂ€ngigkeiten -- **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) - -### Entwicklungs-AbhĂ€ngigkeiten -- **unittest**: FĂŒr Tests (integriert) -- **unittest.mock**: FĂŒr Hardware-Mocking (integriert) -- **Keine externen Tools**: VollstĂ€ndig in Python implementiert - -## Lizenz -MIT - -## Autoren -- Andreas Beyer -- Maximilian Lechner + ... (rest of content continues same as original) diff --git a/VERSIONING.md b/VERSIONING.md deleted file mode 100644 index 71a0398..0000000 --- a/VERSIONING.md +++ /dev/null @@ -1,180 +0,0 @@ -# Automatische Versionierung đŸ€– - -Dieses System erhöht automatisch die Versionsnummer in `paketbox.py` basierend auf Commit-Types. - -## 🚀 Installation - -```bash -python setup_versioning.py -``` - -Das Setup-Script: -- ✅ Installiert Git Hooks automatisch -- ✅ Testet das Versionierungs-System -- ✅ Zeigt Verwendungshinweise - -## 📋 Wie es funktioniert - -### Automatische Versionierung (empfohlen) -Bei jedem `git commit` wird automatisch die Version erhöht: - -| Commit Type | Beispiel | Version Change | -|-------------|----------|----------------| -| `fix:` | `fix: behebe GPIO bug` | `0.7.0` → `0.7.1` (patch) | -| `feat:` | `feat: fĂŒge MQTT hinzu` | `0.7.0` → `0.8.0` (minor) | -| `BREAKING CHANGE` | `feat: neue API - BREAKING CHANGE` | `0.7.0` → `1.0.0` (major) | - -### Manuelle Versionierung -```bash -python update_version.py patch # 0.7.0 → 0.7.1 -python update_version.py minor # 0.7.0 → 0.8.0 -python update_version.py major # 0.7.0 → 1.0.0 -``` - -## 📝 Commit Message Format - -Verwende [Conventional Commits](https://www.conventionalcommits.org/): - -```bash -# Patch Version (Bugfixes) -git commit -m "fix: korrigiere debouncing logic" -git commit -m "docs: aktualisiere README" -git commit -m "fix: behebe Timer-Leckage in TimerManager" - -# Minor Version (neue Features) -git commit -m "feat: fĂŒge MQTT integration hinzu" -git commit -m "feat: implementiere modulare Architektur" -git commit -m "feat: fĂŒge TimerManager fĂŒr sichere Timer-Verwaltung hinzu" - -# Major Version (Breaking Changes) -git commit -m "feat: neue GPIO API - BREAKING CHANGE" -git commit -m "refactor: entferne alte Monolith-Struktur - BREAKING CHANGE" -``` - -## 🔧 Technische Details - -### Dateien im Projekt-Root -- `update_version.py` - Haupt-Script fĂŒr Versionierung -- `setup_versioning.py` - Installation und Setup -- `pre-commit-hook.sh` - Git Hook fĂŒr Unix/Linux/Mac -- `pre-commit-hook.bat` - Git Hook fĂŒr Windows - -### Version Format -- **Format**: `MAJOR.MINOR.PATCH` (Semantic Versioning) -- **Ort**: Zeile 2 in `paketbox.py` -- **Pattern**: `# Version X.Y.Z` -- **Aktuelle Version**: 0.7.0 (Modulare Architektur) - -### Git Hook Installation -Das Setup-Script kopiert automatisch den richtigen Hook: -- **Windows**: `.git/hooks/pre-commit.bat` -- **Unix/Linux/Mac**: `.git/hooks/pre-commit` (mit Execute-Berechtigung) - -## đŸ§Ș Testing - -```bash -# Teste das Versionierungs-Script -python update_version.py - -# Teste mit spezifischem Increment -python update_version.py minor - -# Validiere aktuelle Version -grep "# Version" paketbox.py -``` - -## ïżœ Versions-Historie - -### Version 0.7.0 (Aktuelle Version) -- **Modulare Architektur**: Aufspaltung in separate Module -- **TimerManager**: Sichere Timer-Verwaltung -- **MQTT Integration**: IoT-Benachrichtigungen mit Fallback -- **Verbesserte Fehlerbehandlung**: Umfassende Error-Recovery -- **Erweiterte Tests**: Motor-Blockage und Timer-Tests - -### Historische Versionen -- **0.6.x**: Erweiterte GPIO-FunktionalitĂ€t -- **0.5.x**: Thread-sichere Zustandsverwaltung -- **0.4.x**: Automatische Versionierung eingefĂŒhrt -- **0.3.x**: Grundlegende Paketbox-FunktionalitĂ€t -- **0.2.x**: GPIO-Steuerung und Motoren -- **0.1.x**: Initiale Implementierung - -## ïżœđŸ› Troubleshooting - -### "Python nicht gefunden" -Stelle sicher, dass Python in der PATH-Variable ist: -```bash -python --version -# oder -python3 --version -``` - -### "Git Hook wird nicht ausgefĂŒhrt" -1. PrĂŒfe Hook-Berechtigung (Unix): `ls -la .git/hooks/pre-commit` -2. FĂŒhre Setup erneut aus: `python setup_versioning.py` -3. Teste manuell: `python update_version.py` - -### "Version nicht gefunden" -Stelle sicher, dass `paketbox.py` die Zeile enthĂ€lt: -```python -# Version X.Y.Z -``` - -### Hook-Debugging -```bash -# Windows -.git\hooks\pre-commit.bat - -# Unix/Linux/Mac -.git/hooks/pre-commit -``` - -## 📊 Beispiel-Workflows - -### Typischer Development-Workflow -```bash -# 1. Aktuelle Version: 0.7.0 - -# 2. Bugfix in TimerManager -git add . -git commit -m "fix: behebe Timer-Leckage bei Nothalt" -# → Version wird automatisch zu 0.7.1 - -# 3. Neue MQTT-FunktionalitĂ€t -git add . -git commit -m "feat: fĂŒge MQTT-Retry-Logik hinzu" -# → Version wird automatisch zu 0.8.0 - -# 4. Breaking change in der API -git add . -git commit -m "feat: neue Handler-API - BREAKING CHANGE: ResetErrorState Parameter geĂ€ndert" -# → Version wird automatisch zu 1.0.0 -``` - -### Release-Management -```bash -# Vor einem Release -python update_version.py minor # Manueller Bump fĂŒr Release-Kandidat -python tests/run_tests.py # Alle Tests mĂŒssen bestehen -python paketbox.py # Funktionstest -git tag v$(grep "# Version" paketbox.py | cut -d' ' -f3) -``` - -## 🎯 Best Practices - -### Commit Messages -- **fix**: FĂŒr Bugfixes, die rĂŒckwĂ€rtskompatibel sind -- **feat**: FĂŒr neue Features, die rĂŒckwĂ€rtskompatibel sind -- **BREAKING CHANGE**: FĂŒr Changes, die rĂŒckwĂ€rts-inkompatibel sind -- **docs**: FĂŒr Dokumentation (keine Version-Änderung) -- **test**: FĂŒr Tests (keine Version-Änderung) - -### Versionierungs-Strategie -- **PATCH**: Bugfixes, kleine Verbesserungen -- **MINOR**: Neue Features, rĂŒckwĂ€rtskompatibel -- **MAJOR**: Breaking Changes, API-Änderungen - -Das System ist vollstĂ€ndig automatisch und benötigt keine manuelle Intervention! 🎉 - -**Aktuelle Version**: 0.7.0 - Modulare Architektur mit verbesserter Fehlerbehandlung diff --git a/blueprint/Paketbox Seitenansicht.jpg b/blueprint/Paketbox Seitenansicht.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a640f20f362543be3416a9a0aad206f8e1fcdc4e GIT binary patch literal 113936 zcmeEv1z42Z+V)EbNJ=R^A}9y~N=lB1fQX1lN~(aAfJm1kAfQNz0*VsS9nzsRC`iX3 zAT8ZFz%cVKcAO))_dcHQJLil4Q?K{Zcixz_p0(B!_j5mMuszrz=+GrO1vv-@2M4+V z{zBM3NCqMzARr_-KtxDLc<>+*F)0lhDG3QFJry+t4Ko9bg_(hg=_ord$I)Y_*qE3& zMNXbNeMV4F5XK=Yd6r*-S3r<|_a!(74;~~XA*CZDqvK~~V&(s*|6nU1N+Ntdf`fQC z#~@rv96U-KYz+j1Ae;lBwYv@e?GFwv9{vFWLZXAjB;bbpLl7*@JV3>IMw))M7!#>>V7PoL#&gdi(f3dh8eS?0INd z_=}ejv2pPUiAl*Rsc&=h@(T)!ic6}hYijH2KYVOx@96C6M)rK}9Ud7S`#L@`IW@hs zyt2BszJc1@+U*w(g!gN={?@a7{h|c@!o|nO!zbMB7Y?o?IPfU(53rsgppsT0ylF#y zjNgNZ=KRw)Ih6<51gV-)0aKPZ< zQ9^KN^&O#fLHC{c1#4^ju*iJzv7Lb&M=Ec{6qR#o!JIg1q>z|K5}LKd0KH=ojgowa zg+@D_L@?(Z;p?=W<*Nnelbm?bSm>dMA{L6yu*E`zh2?0MAe4+<`Q{c9zUb@g@y~btl-J&w^m9)9TtoY{%g;ISb58u66F+V3Pk#dK@>3W7)P+BF z;ZI%oKT;Q-4La;(-f?-+p%`J}o+)o@nbac4w^QuoP*PWWg|z7GQTvqgd_Kg)S1csf zzJx?S8>GTQJzO(bNLJ|PRe}jG#26tM+M9YHxKzBI=~;}02(Zux@(D~;NjN5~N$&te zqayqB_-~TI4W}85!op+3EUi5jijBxlbF4R5R(1n}bt5fnho;N>9Agw277Au=+3~jL z+u?~QA)Y`pVxgnr(c8q+23tBpb~KQR?9b!BNd`C`qgk6A?~h}lY;`2Y&%7#QkQwn& za*1!pGqZeERf86?+6(n?M=x5VAIu|Wxl<5Rce+}y;>gncJpP+xKtLE+J{E-v$5d(> zY@JLaE_4H{kbR@3e4V%i3$-a}so@k44Q}G}1C^?I4GXn@PK(JzRF*H}0X3SPnSg~7 zay6yT9iUP9=MUPTME!nUCokQCFs0T$1>%|_7^kThEbBx8Clu@VLkF%;PKH?t!Rw8! zj4_RZkCl#+$~WTDsC!7CX}QP;of3i(=%ZrC2Q0W5HDB{9e0pVgt1OGoFsQWW_3e`D zbC&b|aw9|ur;9=ajuG?>Q5KoJsgwxPUOw5@H&poerSvgL{c+9ujl(Oph|!q#X=M0x z`6u^xh)>gY(T^DXd-J_B-wi9iJB(Dd3_Eg7mpxX#l2uRbw(!xrdqU*EW3S*o~sq z722*G3SMB6AGfEI7_*Z+qjR6AbB)Y(crNnms;AE9TTe+FgdZ2=a((pZxQkQHuwscP zTWa7PhB;~gGuIFiv(Lr%q`xMv#VoL$!p1g!$Dg^LJt~s(S+0Bd+Vt79_>%IO*7X^S zM_D{Ki#;}~`A%{hekjVsYvyo1c0$zDOS>M-v+|DZnh|%zY+;EgH{<5SgUPQZu^UY)w|3>W*;g#!Jy=B88SB&}? zX}>yEGr14cj0(vppgfYB(zLW^253s#EbWCq-?Tqob&1`LindG6@D?F75yc%A$^4$g z>E&}Owyt?&H-wF~hzLfE%$`N;ect=R#dzUx%0`~?Tr;8U0FMDbM*&g?lEHyTGmR6C zs6K=GMe5I+w)gSY5DX|!K5BzW49g;7y*1}zK+RyUO5d!BUgh1H78ak9FZ?6(GnWgZ zFpaY!_v9FKtOXUnirDv`wNB1D3&42&M(u92a!Q}mwt7y8c)QiHw>QlTnjg^|bR_){ z!zudVnn2)qNf5rdi_g2o_2%U*X`b1fi$2DT7y7P;8dXdcL4yI@y+>w>H8wJqG38mU zHN~iCH>r-~sewc9-!FcN_kT8>B6hNhih1-Ax;c*Ub)at|cPmfkv9f%hal%2;4{znF zQP2IoHZ>njGVt`GPZciVqPDN)6nA92U_aFGw6|g^`ilZROu*>IyeRwXlz#Q_+<8l# zYHj^E+e3b?X%`biP7@J-ih0^noLUgzfGJl--P7rk+5k8LORa?>;B9h=!!n#Gi}I}Iy&L9Zr>gvP}TYJwhZz^PW#nDyIr?ym3$@O^N#d&X5A zLiyUG^5X}(j};%|zl2t7N%>7+p*%NLEOdS@2t!7Jg&5+trQWck z(S+~BjYMx9xr10VMWDK1y;3K!&>M$(;MV(Mp@6G|(z3wa-}kA?o@b!{n{QD&C8#H^ z^fs!w`?E%`Gkcg;PdIryRZC>eqJo57`obKH1`D;88e$g^-XSS~qXgk- z^9QW0?^#f))!Ok9VNYW#EuD`ZZJ>W;D(T?E&W9$XX>uHHdFZB?N~WmUcC)CAj^OIN z_maOAafJv(Zd*@lvTqpS`$oAi_r0J`&q-Q=~S1^6_l1{^j^?cBCP9pbB zme5GVVn=03RFVCwCfr_~k?qePZ)6UnKbSR~3AP=`z(S^|B#d_-49x(;2+6Mp`5`9t za8%!wIlk@V)!NZJ;*G%!c_CQ9MXwq!G0aElg&;UTvXqQ+qXXJIEqa+6Hodar|{m zZ|}$DGnIB4{e%W1W5nw%1y0qN2ihNFOLISf>o*UR$F!w-Jm^2c%! zyz^H|EP!Nq!COKoRUyTU;nZPd2rlWHmjzx((_81UP=$@Edu|QsfSh^QI8(sAe0U8^I9Bg!&PnXrYzOmw4BhhivXG7(kq zrO^~bkH!j!>V%v{s<99i`c~QU!;cgeiZnh6aK_%`6jc3G#1j$fUh0_81lEaWD=~iKZGlqmk1Jj`Fz&& z)Y+)sg}yH2W@IAZ^v+g(&xt4Z52IR(WIH2K93S#_X*AK8W)#BYQ-N5*c(iMpP+oZ3 z=UU4XIVYVB1NGi+TAzw$5A1t>Gn`e9sM&Oynb(Dfwz}6GIkmW=TPkBi8s;;_6XE=@ zy(T4CL`qBGB>eNi5#G5pSL?pWp`E4; z)@jQCm;{h^Td9MuTMW~_+I*eS{J2)rbdFi*KY|?n$uo2;Vpu4|b;Mx%fF5EpF`etn ze^oj_S2%4{NxQFxAu!S~@wx)-^T+fduHhQD+TtT|ncUI#b4n+^1iw~`&zvlj`u=@6q5^krLp0j1<754?s*ZY+ey4*XdA z`wi}oCxUESO|zsxq>ZdWtR8GHU*uQDh{&T)yk`UM!s@_kpZ(7~)nSZIIw5o?It)+K?phTluadc8DsA5%?DVlmUvK0}C<6eOAu4tuLMw)QsML z1w(B>34#)iOTc`8grmN&G`M?3Nw!GGmTm991Y3+i1z|kIG%*AUAbgozSDj^Ans*_i zofzDAWxw#=M&I};)}LbiUo~6b>`kI*zA)2gL$0PN@Qic_A~lPnhQi98iH2!D4_b4_ zxks3t*-=$8wuK2qItsV-H8Cxpn_}`ta`t>+$Js={Ixe8_kw=R$v}FphEav2eDb_|z@@Z|A`>*L392%S|V6c3i^ZB_d`^G8n zC&$Xq`3AjWw%{79iI{tz;(R|sKf<_FtE;liJ?_R)!wtk7L!0U|&5Pk@Gm{d3NRjP4 z-zNFrrE(_Fjv$G%^0y?8?sqnze#zv?+IBR-Ot4a-Sqe>w+vIHcwZrOXve|LHPK4)1 z-(0CLwx|KB+0L56{7IsGg1MuJan)0vQk~?Fb#hB(7?LL7b}qg&L#)hXB8L1nu#i8J z+jT@wN9Ccc`|uq3_-RM{h~a*`884W2?tWtt{Wkh0(Dxt=t1<=|q?Sw&$ar!OVg!I0 z(>6eF%|xS)?Q+D0T7JwNH2Y$xdH68y_AO{ieSi{1z=!$UvCsq(__ep<`y>k7D+DO{bR9Dq#eMuU}=|Z_K+}$uk(9sl98HRp%OFjfG}w*!eDQgeqfwm z?|N$gr^eazyVX(rqdwyQ$2vp8?QUD#l5w-Qef)H?VR)mT*4*pdMRM&E>Q7x(D}_2y zG;($smrTo=a;K4RM=o$y+ci~Q!-1U_&>dr8@3OQqDK1=`_oc0wuxpQ>XOWq%k$={g zp|ZH}WDUh*t-&Lpbfee1F%o%=^i1eum~En&tLQHd`fa}vH~5G$4a%q4^_9DTd;n{4 zNdIHL;~zQiDpRhe9cCEx6JmTP*UKX!uh}twpe$kGc=ee8_6E#CA``i**Y$$fc6Y`8 zndD4F^O7$bHHkpc189vQZqHfbZc+y0=ntQ$2kN8ZV>zmeWzX4eMuss96;z|o(3aR` z&!|MnbCZ+Vdn_LPi3ZWgca5v|(|aisRWpm>gv++${mnJel?NbuHBHKt84O43n~uQL zUi^E5dI_&@37lauoUrC#ve5>XKnu|cFjuzUazekKg7r`9yK@c;EenC~RhJamR{mf; zr~KBr@4dm>`MyHt4aXVHAL1W;%TvI^+eci|dA~0lh5Gk7ZSeinia$lPiM7Mmlb%O^ zHZWWfal=C9U;JGy7p_PD-Xl$ES?C_aK-P#m;e~fyS>%s+=2*>M^SugzCPA>YmZpJZ z;V#Yh8z*dyq7T04FEPviG#J4(dLKS$AU|}W-tpliVI4!dCWCNPRJSSUwt626i-pnN-%-efUV&Hq_Y!IdlL&?g`)%X z4$$DVV4>en<$u4Ut5xM36BhdY^v52cwZlS%JI@hj?yu(PMYo0LUd(M2XK^BrcTv|% zu^rZMu$5nbaj!#9@B%DXrVih7bNro8S?*O3V|UaU5;%Up$vP$m!^gjVyQSlhUmyj!)65*}@!VE+ z|2N0mx73KG=?KqIH!Dl`C67vlUJpwDXgx|ME=S4gH{U+u5d5t8vgIMjm3d;B_DcG8 z(C7M`21M1FQHsswU3l6AtRXhweGt`yHPZ;zOy%oAbdY|ita3rL&Gy-K2_%Lxhz`*b zwwo^yE#G7bLdoss7^FZVf^-}tB3xEeIoCVpS(+t-gn+s=tb?t51zyQevo%IOZr`)- zxcnsZwtaJh44V+cbYK;40ti`P7eb!g|7g~w*dR-(;n~ri6@&fX2;ckcOnY)%pK_5a zXl$H%hnr&TR13o0BKCL*KO6tFz?lO*M~8H_vXft3S<1de=#zetFu6+}zDZt6@mLo{ zwSp<_#X?gT>|0gUP5Q6Ac4e`#j&-Us-B5_15}tc~=b7rg`{k$D@8>s&Jd#jZfAZ+f zqTiLH5f>RQbdC~Vr%N-u=hey5HLw2F0X~xt-zElb;gn2w-q(}j!WTyA(&AZI3YX*` ztxlAADYVa(6-ONL8@=W}-H4p8sxCLw9$fSXNgX$UiGzOR3Ryn_1^9G#krl;1=#?f(UF8%aX8t-!!GBGMCgZ z3HocXfAHn^KkK4S<7&1+VZ!o*jbQ0@uLjd>ynOF>uI`_9$OIMng6O+H+xzdA@0FB9 zr*OG!i@q5>%A?oW{Iff68y0_2aXO5J25w$u7O$&(#KMqs)R7?>%sf`4;SxLb(8~w( zSm^Rwz{M*{i%CpvDT)LuY-I4l(!;j-XA13>eP=(PNF3X_uXS<9Jf)-T4xPtv8Wo{U zY9L~n*(HExCw=<~m<1zSR#}k{rleyT^e`tA{IBx6fuK_7jGm!d$J- zoXgm}^|pL3vmn#c4;ou=Q_3_$3JY&&Ge5jHc=<-5YAWpIy1?j;W^8ml-aFkrM2Dhi zzx&Kfyt$(kM7mQ)G)~uA+sT%+aHoji=-<-fiVioTo4;q{Z>yg!5a`lM_}5&NU9)`G z#sKvUL!DN@Ko)r(P6%*fjp?~?LJQixmgAdDpd!pC%yPhK1$r$C^0+V7ng94@U?TMzn>~HF+3JX~{ zHDVqj&}lLl8pPlKPy6L}wRG1q!>RJNC-u;41)HOOtUGB(KGjeMzP?ML-M)OE6-WjS zTG8~*jvDB03*hEuhae^?^h1ABYED_tmMAcfu@FYXawfW@v+Q~n>i!5Lg76mOj7h+8 zOvjT44RUwSNp9H~$Z9@E8DL}sL@-4>EZx6oPhb!J-lRWiUin@jeJ8WuRQ!Lb$bPn| zKIccK*8ewhx;iPMe{^|a*qx!7KCUddk*U|CKVj)8jQtK#&68#X*DCS&EMiP(gklS$ zymP`cFG=*0#+}DiX9C)~-MIM+eX{%~AD`^vbxajCCUm@Yu4Rl{u^P4vTXNj-2J1@U zMkgGX3}9>qTDet6sJ+|hM8q*`BAR3y{Vt&$%X>tpKEOf`AglC znjeT7f5%UG)aQ%<_az!@V>}$eNi*A`0UZ` zE*%|ecV7D_agb(p{yok5OGOnk7Wydhd(DTY^u?R|>lyT~CnG*gjVNzzfrv%nO_plb zsZRKq-4e%+JBV)LTe~}@1jNb@Iu3tr*E45f=cIFXw5hS3W`mIS`p%1$^n7LN?=DTK z;2RkpjTwJOo)cuCx%oEi12=;u?=*thOe~h`m5v2>veB)6ABRWD^@yUu&^z6_5uXY$ zr#tNIACqc2gj46fo>yhO0I}3NqrFub#6Y?tet$a;keR6FwXGKOWoc!U@SkK=ypijz zPgqLq4scwm;>F_=JC4Bgwm+JQNqksUmRY~!kOcf0#lam;m$ggFrLeW$=pAo9#Oj+F z7dU08USRofJ=!CmZ~GvKiQgg(bsejNHu202)~UgEC&rm|#fHc(%$=?~o_?IEbpIqZ z7)M5{i^tCW%!0L6I?kwnaItt~*O8!&7pee04>`Daxq=i6C0<8N>8iJ?o(KI@Ct3<3 zsB3e&&Dn2hUsSBY@=*D>3q`f{CS-u>a%MmWKv=3%%DA^If+ew_7-8IEYDjhck|AOuBk# zma&>STO{fWt-THl>7PC#!i^v3-w?!V{87%hnc|j(fNbk2`==>-gZZ<$2s1tTrwB19 zjhpKMZ3P4o;$}H<+?&#Dr8j=cvnF12YsJWnUd8xEoGsNA!jw$sz6gtNMmx}WOzwH zUN>dstLsOv1-`vlf9yJSZs5!KwhooDr2tHZecYF+?uDejJ~`fa@0VYULSNyYg!zlD z)ylgkR;D|RyILTNO<6l`K4tTp)_N|W$jL!e%|R@-bEFCun`BVZU3(Do6)X3ILcSdM16GYXMo^E4nc?L zk>lGr;g`DiVw#yqZ$R`Dw63KfYGL@u68$m1uh)hVZLyU^JsN~x!h>D91wyXnPU|{| z2nKC3p%qqv;cI0m;rfaex@%n~KSI)G;b;}YXis8`cj2>|=yr9~J30Ax_OyqTcmP6u zCOg)Tt6~BTV60;qEj#wWg_1vRHmzOvGVc5{^N4^1|0{j8^GRBvujngI$te@$O6fI{`ubn%aSy1*~fiF{tbE5k~@O0h!NA3Q;crI1~OMhIY)9g9H)a5Ao z2C?X?DdRh%zDCi5h~+~nva~mV$N5i}g8v&!n6Gu4loqt{O=SBvm-!9Id!90J^H5L; zvh`E?tZSy%ljJ_kM>ZXI_pZ%#+`~iAJHYC_pStIK8z^_Sq{r}?Y1qyQpLbXG;rBXMQJ<#K#|M4G73`Cp zf@5xe{ZdcalI)MC*X2A>jqkJo{KD&w=Bz$){KVuItuu6MYlv4T?|9}Uw$CRmbw5iz zmXcraw!}w{=YxrncMfOPG5Ul0nYb7* zbLIBWgR9;4;z}^ZkgYYpzPMu{GzBDQ)rVZOlaTNw?r2;`;2KiCgJpfquY%?5N0Mi|s3I0} z_Lc&c_VLkZ{7+EJmT@>Hv{vtc;0e&#t3h;&cPx+i+zO~e>O2X(IeB4OGX^aTnsi`e z=ixkJRcxq?L!{RZN9xOa9Nb!za^)~OLGhWq7l$D(W56!#FN zWrxa9%U$KOX8`dbE+SzMB~--Jxys{Ec6I5COQm&{*NG-&{Y4msGJb~SKt{teEI4Ee3q6F6A%$s z2qK!7yTL3A5-2KN4I#{d8CVk;Q()4!E?L(iA=OWKCqa^c~K$?RJvl8cWJgj7q$Aj`7Hyq5X8(FoJK@^!-c< zsnmm^jg6O~`CJO30s75!K$tb7YkQ}%jgLH_)o*ai+ics7_tSSY`D z>Gr^&i7?OITyiO^8=F;zjJeCJE#?Lcpgn0I4%52n>~1! zRfg#EI5#!pScu_Kh@x@h0U@X9_?ozq6jHSV@z#2@$W!Nu!We%UQuSiG(Q=Qj0vjHz z0dh^ua zUrK*^DS?^Ji2tc4*-8E8z5wm5sPn;~5cjF&s1l;;K3&(H%%@f+1)kOR{ii8|hx?>% z65rFrlT1r$%l~j>ge=PY%@acBZ14S{*(5A5h zk472hPw!1aituhRnV8l?6Di}lg3-QPa=s%|Wim-ZHGDj!mFr5Io~N6cp6j|5-?)NP z&*7nI-;_AG2+x`^>+W3uyz?zgVc}@`CP&n9F#UenR$`JndT9{-tc41!(O>s=v7=@C zj&Qi#Bm-)^s1V3b_?8lxOXNQ5Qt)Q!Wfw}ZoPsxG=IRpbx$4H!K!Io#I)c*Fl@=eO zr9r1Om(b=|x?PZ=GD{}?m*_mXMwuek0&S<)y=uwx6! z!uG*_py%x?oi17DP2#$jx;3UH)!F*Dux4%y7os2VmCtg31^%X^#!YYsAtwv>lf@&Y z9yF&&G<|<6jMbU{53bVz)7;jiyW;R%)A3&hC7d0kJf1#q zg0ec%0;%oyIqu??-n5R#;f-EKySA};iVi_6MB*OEcWC;MaAbzIIl|a`%<|e4FUfiR za~{`?gK>%!>Y2^ae`S=^<3|}YXI5n7*?>3kVQvJrHAjef6qxUZ1E7rs01uQ}pySgs z_Fx5RLlm17PQE*R249cccVd{_5ud8yH72gIG#V!=_k(o*!gE4C!x3gzwLG0h7)5V> zx_^~$xJpkA0UNus3A30H5-(o&U7xwF;vqlPlrPr)!b2J31?SGv(=T}F2Mh&m(wsuf zC1L!{S1hR)fMGjQwmV*$mz0!vLCVTRb68y22fhq-f<0vH!F1`eJTa>7TgSqKX<~41 zJ+k!j)Ys>=!cr|qnln~NSzd4v$PcXMF4kktF$C>+Ta~Yh0WB#wXHbLT5echI2vP}Z zh@`7OWiZ)xFXSX?xd$z^Qlorl(X6?X?VRn**4$e2EBjj~PIDzx=!PUqS6-85S|cdY zo>)CNKiakC&NZ^EQ0Eoq zEqifLy>m95>il`3uBsZkz!)nwA;2#=I0(YRNef`~7Y!)@DeD~5L>=GZBp(TSTT7mY zNXqH%mCvU>R1oRKu{xS$-cv^7cQ1Ij-H1B7xY^CxF`oP2Q=8n|>|4V&VRUmL@Ibqu=2n5 zu6=kpGV%IAuetEkFFjvm>@ANrDB*jw71xuVmGIIx*@Luan7ZAzzfUz$-56ieDRJ>C z#$O>ux?bGOhBTU|O(lc*P*rzzyGal?PQz`9T7C=eQBLX1a z+*Iw!Ufn{Ze#X@LmKGZT5zLZI7Lv9NZ&N=emd~ZgYOQhRNQ@VGY$_`6#rP4q&RK&N{%z;bUZ= z$n*+gC#;lV2#u3!wjQCMK-;vF&W|v=?4ZD(Qs3AUF|((=_v*9K(4SL3|D{;ENLyob z0io`je!{+y?*lU0o}!+ln>|DEn+|tcvfDZvImAz2Ina4wks{_q3B_C_H^x%~v9W`wi=gIH zQA6xmUGP0;Z&;LvdItE&WSP7y5^5W=SC2V!w@NW0KHzR+svO~4%y*?IU+X!!TR|0J z(^D1AHZR8{E#B{O%Iub4WN?GFr^+Kw6aK#jCOaWjy2vA4&CGl4-<7;dUO#Lfa{Da( zsy%v!>tj)xqd^3NsQaI~P{!tnWpO88OsO>3{Dv*V0786lt%1+?Vxg1VnMsSIGnm_y z7&h@<&e$B`@1m1$Qo{e)Yoeg61o7bw&}WwLRYT2JrqKwXy0YKxQmIy>zrFNg>d0vs z-psd33?l3K!_}t=cWhO?F2!5#n0~TQkQ2Ex|Ce#TZnP)bFv(QR;f95UhI$P{*-W0ep%ct<=Eg#w&UPnR zKX#u`jYoW#7*S5h!aV3|(-a!+dLOQj}iOTJC5dVyimAF8}l| zD6)VCjmq_{sN#gl0nPPL^x^kb4$fJH4rgB9zm-mE@JK8%I>||2_Wk>U0<%QlM(R(= z26vLL@H}ujW2&+d zv;T=54F3yu-(%vagB^+{M+!Z>wf4An%krz0<{G96pYl$HoN`c zVEIfeItvi?@U)^2mvP)2Q6@0ZH&DEnk#N0Vuj1)hbu)Y;&uT)rV_!GpbxHP%9}uf4E}dmBT~iGth>KlQRr-R&%@@j-vgfyR2-t3Anegpef?UBybT9?z#wo ziB1g9wnJ>;_W&0`4B>66a!mlfO}Oj7CzO6O(fdE*t-@FpmBL?5W1^Zet!>jT*V?h3XmKlce5Qd}3qXDIk9Jo8@ zUcu0W%8MD`M@|T}3KrL&Bq|`B6R*b;eee$JQaI3mbcjNOmSc|$%Bei04wOMgJFx)T zyu_C289~j7g$&IMR>^=jP)>rOonSC$S4ysDNIf>~=%FqLvA8ZCaLL%?zx;wTRG}oT zvg~;@mGe66%wAftM~=ULlzXr8?rAX_J;XXW5YxG6V#E+&hj`mYgVv8(bYno9&r%jp?Uc#*&=cWWetXwQ5_7ewNLp%HNx9oaF={?pr+O7 z7G31|x4OD1Dm{YGh@`bzjRhXi}RH8S(ZG&ss}9Oz}+;9 zP77cmAMpf*ri~zW$*x@hwsSnW_qqGOFayEkZrWQIaQki87KX&hZZbhFzr;yyJ>;B1 zubh(#vi+HykCI5;R^W^9!rWdmv4P=h)5D2ebLs2JQET67f4ZNNpy8k*5(U&l>dThtY1wJ0Pp@y z+qAs3Mk~jf6%zDLTzjBLvFYHy`3x3s5e5&1)EDK^euv@f9auUG5yi$VWV}FRg@1&t67SUHNMH zX_;zP3%wa&+hT;*W0&fc*WnKT@HnySY4JXIRPpknfLYk``6%{o2Sx77Q;aeU;a2gq zL3bz5e(CG)8brzD)qymFZTe-`&4}7ILJTf@->lc`8lmBAlrmym12Rr)V|ob zT@?CwE95gM%cUG1+#&=z&kTX_XMsL|T8489eFx-c4qkrc|f z*M}LQ5WxfvVi3f?ZYal51Cnh^Gb0FipGtP1@(%4+M6|Zl=aDq!wXG}B_q|ZF^PjFD z=3YMmsVZ0u-nY09Z6zwa_Hf!xun?p89A|w>)x7o18uK{O6KXs#jHF(E#+UrHl74Mn zSsRk&w-V^dH@U~Gj;%aC8wE!V62JVLEA|6!rO4E8yXf49OErZ43lmQ zVI;8^@9<{v%6w^F`RGa)XnppBTSWuyIo8|?72Orh=LRObus_Jo{RG-{><{P4J{2rwFCySs$SasMs_ZvNJc&8H&GeqNlfzP8yR;M2NPMv*Ayp^z zp@cVaYAqd`&9f*M4fWWsjJ&&`zvy46^8aqoU&|#iBe_1kGTy8pY|cig^a@AG^K|pn zN*&^uaJGA6ZgJyG-Cu8@QWypr$joU^SaKQUWvevGc)ral|Dffu^Hm$NMzc8{>7Q|_ z?HZD_oO_(_h1ryO=bI}|VcwnHamTLI#yaV9UvCxMlc>Lg2e$6W zKiqm8KnZ^3;|GDA*MhH`N6b`}sBMthVNg>$Z2uddch)CCHQJmTv+G@$BsA1 zDud0ly;HyW3 z=pu98=Au=FVtar_TC+S*ZxYulcwZ!ZFFwr0k9Q)s2*&_6pi9M!=)ESNNkLQ52?(vb zq}Crj{;h?`xM1Tlazs61Sy@8y_n&BJ)!eVPzi;b)_&No-FD5jH(MK9QEM8om;?1X^ zqQU=#|J|Q{gJFKAMT(BC-hCuvT2t)Tc#q&40yv8$*EoX7Ogj~Snh&it{`TlBPSlkr4afv;>z@LVmM1tN3b)+l!U1j1ON9qG@JZQiZIM@H9kCZjFmo z=2@Rn277=zIE^2MD;xwkrCz`v|3V5*3+nIXE$J}YzDaH0C%1eyWZrfPDe9O8l<3ZK zi#4$&e#T=v^r#`D2v_hCHEGF7xaS~h!=d^bzYgd|TR8tpIlSHSz!VPyvE&k2~T?^Rn3 zjF6N%&GRG%nzCR0$bN@ji{&9@r&_+RZCt-r|2xdXDVo6AiJagO5>J;X-$umxgG$U% zCsv$d*{khq7Va7+C9;>4N$wOCJim3(pv`xh=mT5u#kAEEzg8>#2(bI_tOxovg8QC% zX^YucwDWy6(~ps7qJJmP$cH;J$xAlW;bhL2tqec3W(NBu#PQCZJN=IY zl%f%BkZ`CiJWw!09oIdqyJ4LEpp}gH1x-8*)RlAnngz8Es_}AL_t{TJ92}`jU(b_) z3LWO0mDd>B%checEPd*|j|N906sdufZU6cnq*ExL9#sF>SR`HF^*gZOmVlRjNgBK%^PIz#kh)ENPg z#)17s8b_b%)tne^OQH2kdpp!_8b@eg4@uK0$R|2$@woly(yA zPaJqSPn-wRG-^jZi6j`_4MjF37+kp(CRo%tKmMdCAnvwYs9$6{4n0e3nps#$L4o!B zt6GMH*o2*$gJfmGrIb|X(*hQA?U+BN4IC;hE9u}nytS-YY?)8;$~fwR?ClG|sbj}d zC-AaqTf}YUc7SJfXP5hwf&WJoI9sz3GM#J1rFs zlY?5=QxBgVdyR9!#bB!gjfEh0%N+}h!DGICY|=kYLNyqeUp2*uMvbrWY8=e#F;qB~ zAEtilZNtTela|pe8p5&&7Y}w1kUa#Ew0) zeC_g7_tuyBNK3MZwj$EI0lrIX4W>nrPLkGO{?>$!CF7r_4EcIzN?>C zb+3O!;uHK0VyZb289T4oPY>ff=8BkH{8`qLbkVRSt|kBV9iDtsOdBkw$p3&1U;ectP zM*`wFjf70e^ce=T5^r`Rwg{Uk9_KwP{CSQ#(t8Y%g1W$jrgnM6q3Hm zva}NKx5GmW>}$Z>zPfAB=_A6PTNx|%iOLovP|XG2G1haL4MtGik4rwq);zAB_#vH=>WCi5s=p!J+1e-|H`~=kswI;IMg@Wq5$>(&7V;Jb@YxXhHWjq zydif15FmMn31J$);2^Sqot4!;8P=FlPBMt-p}@bcWrN#=s-}7vF5FXYWOC@ zS~F>P% zLeJX(WcqB}fq6f&n+O8lO0v8^N?63VT1Eb7@088GbV;J9ORE&$?&zU=LS-YWgG~oyenusXkH;_Wv;WYves;Nd~!k`@^ubNIp~33T8r<6|K=c)C->#J2v-9frs}hJ>b)J{$bDdd6T} zk^cJ-j)Ar4@on;;E8U~z#TJ^`o$2#WMI;=B18H4s#*@#S8M~W_knt4fQ*P5i@0@on zpGm_)KC35Dz8IM(Y5>uvM{mj6gAK30t5x^~tYG>po~K$cD5jPv120j7Z3&wLjQG-R zFjH=T3KM1(+GaDWvHWws(FAI)f1z?NB-D7FjA8!k2M-Pc3=Jp@3w zjYo(t`Iu{(#>&I>Nc1N*w47s}itMdBe>Iu@GuLRJj6AuX*e=y&Lhm{!CGC7CF72%e zCw%by6j0z9shqfsipkdLF{K5;3V@lOQ#9F7eH0^?n2D$^U*aw6%sV`6X|yeyjD?b% z6>bo2XR=>*Aby|!{f`BHtMGR#jzHGwwDLA_B^LUl-=(7$tBbS|{vvakGa{iRnzOj- z^1I8*LBo49M8!;O1H2}wo&D9HP-*r@zFhaYejK$i8} zD*f+qvweK|KdZ)S@eNnpt;ULd`WuJl?ZO}@|!1xfo% zuq43=|9X+o1w_+^AABpk4y$9g_ z08>hooEzn@VmbR*{o@z5R6f|k>D}TnRz)YS8!^w;8+i$L+-3h(j77hA$C|J&VE{ESh)WU-%CQiS{b=&q>73+c{OR* zH+P-{M*XFhzAQpMK+v&>@z8q*`TIgMxPuPLhzB!W!i z_Z9hIh8_a>3)?EhI_)zobTJdavA^JrA~mXgJ*XGDwVBF>uE!(f7HgC8yA8>|YR#z@ zhExyI0A{^p#^56%l8y`|#C^+~k4M8kW?Z%*3{L5-pblwi$v5!DTwO+JMFha?zTFPHIqkKAIML9~5Bx%0ArcV*J@qi3y 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 KtnFg>e-i+i0S9yd literal 0 HcmV?d00001 diff --git a/Paketbox.jpeg b/blueprint/Paketbox.jpeg similarity index 100% rename from Paketbox.jpeg rename to blueprint/Paketbox.jpeg diff --git a/blueprint/Paketbox_Draufsicht.jpg b/blueprint/Paketbox_Draufsicht.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bd34fa07de7deeec18d428d14abfa6c880c6bf2 GIT binary patch literal 103963 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 - -set USER=%1 -set RASPBERRY_PI_IP=%2 -set TARGET_PATH=%3 - -if "%USER%"=="" goto usage -if "%RASPBERRY_PI_IP%"=="" goto usage -if "%TARGET_PATH%"=="" goto usage - -REM Backup der vorhandenen Datei auf dem Raspberry Pi -plink %USER%@%RASPBERRY_PI_IP% "if [ -f '%TARGET_PATH%/paketbox.py' ]; then cp '%TARGET_PATH%/paketbox.py' '%TARGET_PATH%/paketbox.py.bak_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%'; fi" - -REM Kopiere die Datei via scp -pscp paketbox.py %USER%@%RASPBERRY_PI_IP%:%TARGET_PATH% - -if %ERRORLEVEL%==0 ( - echo paketbox.py erfolgreich auf %RASPBERRY_PI_IP% kopiert. -) else ( - echo Fehler beim Kopieren! - exit /b 2 -) - -exit /b 0 - -:usage - echo Usage: %0 ^ ^ ^ - exit /b 1 diff --git a/deploy_paketbox.sh b/deploy_paketbox.sh deleted file mode 100644 index 2c7afca..0000000 --- a/deploy_paketbox.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# Deployment-Script fĂŒr paketbox.py auf einen Raspberry Pi via SSH -# Usage: ./deploy_paketbox.sh - -USER="$1" -RASPBERRY_PI_IP="$2" -TARGET_PATH="$3" - -if [ -z "$USER" ] || [ -z "$RASPBERRY_PI_IP" ] || [ -z "$TARGET_PATH" ]; then - echo "Usage: $0 " - exit 1 -fi - -# Backup der vorhandenen Datei auf dem Raspberry Pi -ssh "$USER@$RASPBERRY_PI_IP" "if [ -f '$TARGET_PATH/paketbox.py' ]; then cp '$TARGET_PATH/paketbox.py' '$TARGET_PATH/paketbox.py.bak_$(date +%Y%m%d_%H%M%S)'; fi" - -# Kopiere die Datei via scp -scp paketbox.py "$USER@$RASPBERRY_PI_IP:$TARGET_PATH" - -if [ $? -eq 0 ]; then - echo "paketbox.py erfolgreich auf $RASPBERRY_PI_IP kopiert." -else - echo "Fehler beim Kopieren!" - exit 2 -fi diff --git a/handler.py b/handler.py index ba88a3f..d45de6f 100644 --- a/handler.py +++ b/handler.py @@ -43,11 +43,11 @@ def ResetErrorState(): # Reset motor states from ERROR to STOPPED if pbox_state.is_any_motor_error(): - logger.info("Setze Motor-FehlerzustĂ€nde zurĂŒck...") + logger.debug("Setze Motor-FehlerzustĂ€nde zurĂŒck...") from PaketBoxState import MotorState pbox_state.set_left_motor(MotorState.STOPPED) pbox_state.set_right_motor(MotorState.STOPPED) - logger.info("Motor-ZustĂ€nde auf STOPPED zurĂŒckgesetzt") + logger.debug("Motor-ZustĂ€nde auf STOPPED zurĂŒckgesetzt") global sendMqttErrorState sendMqttErrorState = False # Reset MQTT error state flag diff --git a/pre-commit-hook.bat b/pre-commit-hook.bat deleted file mode 100644 index c836177..0000000 --- a/pre-commit-hook.bat +++ /dev/null @@ -1,28 +0,0 @@ -@echo off -REM Git Pre-Commit Hook fĂŒr automatische Versionierung (Windows) -REM Installiere diesen Hook durch Kopieren nach .git\hooks\pre-commit.bat - -echo 🔄 Automatische Versionierung wird durchgefĂŒhrt... - -REM PrĂŒfe ob Python verfĂŒgbar ist -python --version >nul 2>&1 -if %errorlevel% neq 0 ( - python3 --version >nul 2>&1 - if %errorlevel% neq 0 ( - echo ❌ Python nicht gefunden - Versionierung ĂŒbersprungen - exit /b 0 - ) - set PYTHON_CMD=python3 -) else ( - set PYTHON_CMD=python -) - -REM FĂŒhre Versionsaktualisierung aus -%PYTHON_CMD% update_version.py -if %errorlevel% equ 0 ( - echo ✅ Version erfolgreich aktualisiert -) else ( - echo ⚠ Versionierung fehlgeschlagen - Commit wird trotzdem fortgesetzt -) - -exit /b 0 diff --git a/pre-commit-hook.sh b/pre-commit-hook.sh deleted file mode 100644 index ae49cd6..0000000 --- a/pre-commit-hook.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# -# Git Pre-Commit Hook fĂŒr automatische Versionierung -# Installiere diesen Hook mit: chmod +x .git/hooks/pre-commit -# -# Dieser Hook: -# 1. Erkennt den Commit-Typ aus der Commit-Message -# 2. Erhöht die Versionsnummer entsprechend -# 3. FĂŒgt die geĂ€nderte Datei zum Commit hinzu - -echo "🔄 Automatische Versionierung wird durchgefĂŒhrt..." - -# PrĂŒfe ob Python verfĂŒgbar ist -if ! command -v python3 >/dev/null 2>&1; then - if ! command -v python >/dev/null 2>&1; then - echo "❌ Python nicht gefunden - Versionierung ĂŒbersprungen" - exit 0 - fi - PYTHON_CMD="python" -else - PYTHON_CMD="python3" -fi - -# FĂŒhre Versionsaktualisierung aus -if $PYTHON_CMD update_version.py; then - echo "✅ Version erfolgreich aktualisiert" -else - echo "⚠ Versionierung fehlgeschlagen - Commit wird trotzdem fortgesetzt" -fi - -exit 0 diff --git a/setup_versioning.py b/setup_versioning.py deleted file mode 100644 index 4bcdae2..0000000 --- a/setup_versioning.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python3 -""" -Setup Script fĂŒr automatische Versionierung -=========================================== - -Installiert Git Hooks fĂŒr automatische Versionsnummer-Updates. -""" - -import os -import shutil -import stat -import sys -from pathlib import Path - -def setup_git_hooks(): - """Setup Git hooks for automatic versioning.""" - project_root = Path(__file__).parent - git_hooks_dir = project_root / ".git" / "hooks" - - if not git_hooks_dir.exists(): - print("❌ .git/hooks Verzeichnis nicht gefunden. Stelle sicher, dass du in einem Git-Repository bist.") - return False - - # Determine the appropriate hook based on OS - if os.name == 'nt': # Windows - hook_source = project_root / "pre-commit-hook.bat" - hook_target = git_hooks_dir / "pre-commit.bat" - else: # Unix/Linux/Mac - hook_source = project_root / "pre-commit-hook.sh" - hook_target = git_hooks_dir / "pre-commit" - - try: - # Copy hook file - shutil.copy2(hook_source, hook_target) - - # Make executable on Unix systems - if os.name != 'nt': - current_permissions = stat.S_IMODE(os.lstat(hook_target).st_mode) - os.chmod(hook_target, current_permissions | stat.S_IEXEC) - - print(f"✅ Git Hook erfolgreich installiert: {hook_target}") - return True - - except Exception as e: - print(f"❌ Fehler beim Installieren des Git Hooks: {e}") - return False - -def test_versioning(): - """Test the versioning script.""" - project_root = Path(__file__).parent - version_script = project_root / "update_version.py" - - print("\nđŸ§Ș Teste Versionierungs-Script...") - - try: - import subprocess - result = subprocess.run([sys.executable, str(version_script)], - capture_output=True, text=True, cwd=project_root) - - if result.returncode == 0: - print("✅ Versionierungs-Script funktioniert korrekt") - print(f"Output: {result.stdout.strip()}") - return True - else: - print(f"❌ Versionierungs-Script Fehler: {result.stderr}") - return False - - except Exception as e: - print(f"❌ Fehler beim Testen: {e}") - return False - -def show_usage_info(): - """Show usage information.""" - print("\n📖 Verwendung der automatischen Versionierung:") - print("=" * 50) - print("1. đŸ€– Automatisch (empfohlen):") - print(" - Versionierung erfolgt automatisch bei jedem Commit") - print(" - feat: commits → minor version bump (0.1.0 → 0.2.0)") - print(" - fix: commits → patch version bump (0.1.0 → 0.1.1)") - print(" - BREAKING CHANGE → major version bump (0.1.0 → 1.0.0)") - print() - print("2. đŸ–ïž Manuell:") - print(" python update_version.py patch # 0.1.0 → 0.1.1") - print(" python update_version.py minor # 0.1.0 → 0.2.0") - print(" python update_version.py major # 0.1.0 → 1.0.0") - print() - print("3. 📝 Commit Message Beispiele:") - print(" git commit -m 'fix: behebe GPIO debouncing'") - print(" git commit -m 'feat: fĂŒge logging hinzu'") - print(" git commit -m 'feat: neue API - BREAKING CHANGE'") - -def main(): - """Main setup function.""" - print("🚀 Setup fĂŒr automatische Versionierung") - print("=" * 40) - - success = True - - # Setup Git hooks - if setup_git_hooks(): - print("✅ Git Hooks installiert") - else: - success = False - - # Test versioning script - if test_versioning(): - print("✅ Versionierungs-Script getestet") - else: - success = False - - if success: - print("\n🎉 Setup erfolgreich abgeschlossen!") - show_usage_info() - else: - print("\n❌ Setup hatte Probleme. Bitte prĂŒfe die Fehlermeldungen oben.") - sys.exit(1) - -if __name__ == "__main__": - main() diff --git a/update_version.py b/update_version.py deleted file mode 100644 index abf1831..0000000 --- a/update_version.py +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/env python3 -""" -Automatic Version Update Script -=============================== - -This script automatically increments the version number in paketbox.py -and updates it based on commit types (semantic versioning). - -Usage: - python update_version.py [major|minor|patch] - -If no argument is provided, it defaults to patch increment. -""" - -import re -import sys -import os -from pathlib import Path - -def read_current_version(file_path): - """Read the current version from the specified file.""" - try: - with open(file_path, 'r', encoding='utf-8') as f: - content = f.read() - - # Find version line with pattern: # Version X.Y.Z - version_match = re.search(r'# Version (\d+)\.(\d+)\.(\d+)', content) - if version_match: - major, minor, patch = map(int, version_match.groups()) - return major, minor, patch, content - else: - print("Version nicht gefunden in der Datei!") - return None - except FileNotFoundError: - print(f"Datei {file_path} nicht gefunden!") - return None - except Exception as e: - print(f"Fehler beim Lesen der Datei: {e}") - return None - -def update_version(content, old_version, new_version): - """Update the version string in the content.""" - old_version_str = f"# Version {old_version[0]}.{old_version[1]}.{old_version[2]}" - new_version_str = f"# Version {new_version[0]}.{new_version[1]}.{new_version[2]}" - - updated_content = content.replace(old_version_str, new_version_str) - return updated_content - -def write_updated_file(file_path, content): - """Write the updated content back to the file.""" - try: - with open(file_path, 'w', encoding='utf-8') as f: - f.write(content) - return True - except Exception as e: - print(f"Fehler beim Schreiben der Datei: {e}") - return False - -def increment_version(major, minor, patch, increment_type='patch'): - """Increment version based on type.""" - if increment_type == 'major': - return major + 1, 0, 0 - elif increment_type == 'minor': - return major, minor + 1, 0 - elif increment_type == 'patch': - return major, minor, patch + 1 - else: - print(f"Unbekannter Increment-Typ: {increment_type}") - return major, minor, patch - -def detect_version_increment_from_git(): - """Detect version increment type from git commit messages.""" - import subprocess - - try: - # Get the last commit message - result = subprocess.run( - ['git', 'log', '-1', '--pretty=format:%s'], - capture_output=True, - text=True, - cwd=os.path.dirname(os.path.abspath(__file__)) - ) - - if result.returncode == 0: - commit_message = result.stdout.lower() - - # Check for breaking changes or major version indicators - if 'breaking change' in commit_message or 'major:' in commit_message: - return 'major' - # Check for new features - elif 'feat:' in commit_message or 'feature:' in commit_message: - return 'minor' - # Default to patch for fixes, docs, refactor, etc. - else: - return 'patch' - else: - print("Konnte Git-Commit-Message nicht abrufen, verwende 'patch'") - return 'patch' - - except FileNotFoundError: - print("Git nicht gefunden, verwende 'patch'") - return 'patch' - except Exception as e: - print(f"Fehler beim Abrufen der Git-Informationen: {e}, verwende 'patch'") - return 'patch' - -def main(): - """Main function to update version.""" - script_dir = Path(__file__).parent - paketbox_file = script_dir / "paketbox.py" - - # Determine increment type - if len(sys.argv) > 1: - increment_type = sys.argv[1].lower() - if increment_type not in ['major', 'minor', 'patch']: - print("Verwendung: python update_version.py [major|minor|patch]") - sys.exit(1) - else: - # Auto-detect from git commit message - increment_type = detect_version_increment_from_git() - - # Read current version - version_info = read_current_version(paketbox_file) - if not version_info: - sys.exit(1) - - major, minor, patch, content = version_info - old_version = (major, minor, patch) - - # Calculate new version - new_version = increment_version(major, minor, patch, increment_type) - - print(f"Aktuelle Version: {old_version[0]}.{old_version[1]}.{old_version[2]}") - print(f"Neue Version: {new_version[0]}.{new_version[1]}.{new_version[2]} ({increment_type} increment)") - - # Update content - updated_content = update_version(content, old_version, new_version) - - # Write updated file - if write_updated_file(paketbox_file, updated_content): - print(f"Version erfolgreich aktualisiert in {paketbox_file}") - - # Stage the file for git if in a git repository - try: - import subprocess - result = subprocess.run(['git', 'add', str(paketbox_file)], - capture_output=True, - cwd=script_dir) - if result.returncode == 0: - print("Datei fĂŒr Git-Commit vorgemerkt") - except: - pass # Git not available or not in a git repo - - else: - print("Fehler beim Aktualisieren der Version") - sys.exit(1) - -if __name__ == "__main__": - main()