# TODO.md – Einzelne Tasks _Letztes Update: 2026-08-01 23:18 CEST_ Checkliste abgeleitet aus PLAN.md. Reihenfolge entspricht der empfohlenen Umsetzungsreihenfolge. ## Phase 0 – Projekt-Grundgerüst - [ ] PlatformIO-Projekt für M5Stack Core initialisieren (`platformio.ini`: Board, Framework Arduino, M5Stack-Library) - [ ] Ordnerstruktur anlegen: `include/`, `src/screens/`, `src/api/`, `src/icons/`, `scripts/` - [ ] `include/secrets.h.example` mit Platzhaltern für WLAN SSID/Passwort erstellen - [ ] `.gitignore` vorbereiten (schließt `include/secrets.h`, `.pio/` aus) - [ ] Minimalen `src/main.cpp` schreiben, der "Hello Dashboard" anzeigt - [ ] `scripts/deploy.sh` schreiben (Build + Flash, automatische Port-Erkennung, optionaler Port-Parameter) - [ ] Deploy-Skript testen, Testtext auf echtem Gerät prüfen ## Phase 1 – WLAN & HTTP-Grundlage - [ ] WLAN-Verbindungsaufbau mit `secrets.h`-Werten implementieren - [ ] Verbindungsstatus (verbindet/verbunden/Fehler) auf Display anzeigen - [ ] Generischen HTTP-GET-Client in `src/api/` implementieren - [ ] ArduinoJson (oder Alternative) als Dependency einbinden - [ ] Wetter-API testweise abrufen und Rohdaten (Temperatur, Beschreibung) als Text anzeigen - [ ] Auf echtem Gerät gegen echte API testen ## Phase 2 – Screen-Grundgerüst & Navigation - [ ] Screen-State-Machine implementieren (Enum + Render-Dispatch) - [ ] Vier Platzhalter-Screens anlegen: Home, WeatherDetail, CalendarDetail, MVG - [ ] Button-A-Logik: Toggle zwischen WeatherDetail und CalendarDetail - [ ] Button-B-Logik: zurück zu Home - [ ] Button-C-Logik: wechsle zu MVG-Screen - [ ] 5-Minuten-Inaktivitäts-Timeout implementieren (zurück zu Home) - [ ] Theme-Datei mit Basisfarben (Schwarz/Weiß, iOS-Dark-Mode-Look) anlegen - [ ] Navigation zwischen allen vier Screens auf echtem Gerät testen ## Phase 3 – Home-Screen (final) - [ ] Wetter-API-Aufruf in Home-Screen integrieren - [ ] Kalender-API-Aufruf in Home-Screen integrieren - [ ] Regen-Hinweis-Logik implementieren (irgendein `precipitation.type == "rain"` mit `probability > 0` in den nächsten 8 Stunden) - [ ] Anzeige der nächsten 2 Kalendertermine inkl. `all_day`-Sonderbehandlung - [ ] 10-Minuten-Refresh-Timer implementieren - [ ] Layout verfeinern: große Temperaturanzeige, klare visuelle Hierarchie - [ ] Auf echtem Gerät über längeren Zeitraum (mind. 1 Refresh-Zyklus) testen ## Phase 4 – Icon-Set (farbig, RGB565) - [ ] Icon-Liste finalisieren (Sonne, bewölkt, Regen, Nacht-Varianten, U-Bahn, S-Bahn, Kalender, Regen-Warnung, Retry/Fehler) - [ ] Icon-Vorlagen erstellen/beschaffen (farbig, für kleines Display optimiert) - [ ] Konvertierung zu RGB565-Bitmap-Arrays einrichten (Skript oder Tool) - [ ] Icons in `src/icons/` ablegen und einbinden - [ ] Mapping `symbol`-Feld → Icon implementieren (`mo____`, `mb____`, `wb____`, etc.) - [ ] Icons im Home-Screen integrieren und visuell prüfen ## Phase 5 – Wetter-Detailseite - [ ] Vollständige `forecast`-Liste abrufen und verarbeiten - [ ] Darstellung pro Stunde: Zeit, Temperatur, Icon, Regenwahrscheinlichkeit - [ ] Scroll- oder Paginierungslogik implementieren, falls nötig - [ ] Auf echtem Gerät testen (Navigation über Button A von Home) ## Phase 6 – Kalender-Detailseite - [ ] Vollständige `events`-Liste (10 Termine) abrufen und anzeigen - [ ] `all_day`-Sonderbehandlung analog zur Hauptseite - [ ] Scroll-/Paginierungslogik implementieren - [ ] Auf echtem Gerät testen (Navigation über Button A Toggle) ## Phase 7 – MVG-Abfahrtsseite - [ ] Vollständige `departures`-Liste abrufen und anzeigen (ungefiltert) - [ ] Farbliche Kennzeichnung U-Bahn vs. S-Bahn - [ ] Anzeige von Verspätung (`delay_min`) und Ausfall (`cancelled`) - [ ] 1-Minuten-Refresh-Timer implementieren - [ ] Auf echtem Gerät testen (Navigation über Button C) ## Phase 8 – Fehlerbehandlung - [ ] Timeout-Handling für alle drei API-Clients implementieren - [ ] Einheitliche Fehleranzeige (Retry-Icon + Text) pro Screen implementieren - [ ] Automatischen Retry beim nächsten Refresh-Intervall sicherstellen - [ ] Manuellen Retry per erneutem Tastendruck implementieren - [ ] Fehlerfall simulieren (z.B. Docker-Service stoppen) und Verhalten prüfen ## Phase 9 – Politur & Feinschliff - [ ] Alle Screens gegen UI-Konzept prüfen (Kontrast, Schriftgrößen, Abstände) - [ ] Speicherverbrauch und Rendering-Performance prüfen - [ ] Code aufräumen und kommentieren - [ ] README.md mit Setup-Anleitung (WLAN-Konfiguration, Flash-Vorgang) schreiben - [ ] Finalen Dauertest durchführen (mehrere Stunden Betrieb ohne Absturz) ## Später (nicht Teil der Phasen) - [ ] Git-Repository initialisieren (`git init`) - [ ] `secrets.h.example` und übrige Struktur committen, `secrets.h` bleibt ausgeschlossen - [ ] Optional: Remote-Repository (GitHub/GitLab) verknüpfen