# Changelog

Alle nennenswerten Änderungen an diesem Projekt stehen hier. Das Format folgt [Keep a Changelog 1.1.0](https://keepachangelog.com/de/1.1.0/), die Versionsnummern folgen [Semantic Versioning 2.0.0](https://semver.org/lang/de/).

Solange die Version mit `0.` beginnt, ist das Projekt in Entwicklung: Auch eine Minor-Version darf Verhalten, Ausgabeformat oder Konfiguration ändern. Was als Bruch zählt, steht unter [Versionierung](README.md#versionierung).

## [Unreleased]

## [0.5.0] - 2026-09-28

### Added
- **Android-App „ZT3 Wheelie“** (`android/`, Kotlin, Jetpack Compose, Material 3 Expressive): Live-3D-Ansicht der Platine, Lage, Wheelie-Ansicht mit Kippachse X/Y/Z, Grenze, Richtung und Nullpunkt, g-Kräfte mit X/Y-Grafik und Spitze, Verlauf über 10 s, Rohdaten, Meldungen, Kalibrieren und Status. Deutsch und Englisch, helles und dunkles Theme.
- App: Bluetooth LE mit Kopplung per PIN, automatische Neuverbindung mit Backoff, Verbindung nur im Vordergrund, Bildschirm bleibt an, solange die App vorne ist.
- App: Update aus der App von der Produktseite, mit SHA-256-Prüfung und Androids Paketinstaller, Prüfung beim Start und alle 12 Stunden.
- App: About-Seite mit Version, Git-Stand, Firmware-Version, proprietärer Lizenz und Drittanbieter-Lizenzen. Demo-Modus nur in Debug-Builds.
- **Firmware: Bluetooth LE** (NimBLE, Nordic UART Service). Alle Ausgaben gehen an USB und an ein gekoppeltes Handy, Befehle kommen von beiden. Kopplung nur mit PIN, verschlüsselt und authentifiziert.
- Firmware: PIN je Gerät, beim ersten Start zufällig erzeugt und im NVS gespeichert, nur über USB sichtbar (`pin`, `pin new`), Kopplungen löschen mit `unpair`. BLE-Ereignisse als Meldungen, `status` zeigt BLE-Zustand, MTU, gesendete Bytes und verworfene Zeilen.
- `protocol/PROTOCOL.md` als gemeinsamer Vertrag von Firmware, Lageanzeige und App, dazu `protocol/test-vectors.json` aus der Lageanzeige als Referenz.
- `tools/ble-smoke.py` (Rauchtest der BLE-Verbindung vom Rechner), `tools/release.sh` (Release in das öffentliche Repo `pepperonas/zt3-pro-wheelie-control-releases`).
- Produktseite `zt3-pro-wheelie-control.celox.io` (`website/`, gebaut mit dem Website-Baukasten).
- Proprietäre `LICENSE`.
- Bilder in den READMEs: Lageanzeige, nachgestellte Terminalausgabe (Vorlage `docs/mockups/terminal.html`) und App-Screenshots aus dem Demo-Modus.

### Changed
- Lageanzeige: Testschnittstelle um Zurücksetzen und Achsenwahl erweitert (für die Testvektoren).
- Flash der Firmware durch NimBLE von 22,8 % auf 48,9 %, RAM von 6,7 % auf 12,5 %.

## [0.4.0] - 2026-09-27

### Added
- Lageanzeige: Karte „g-Kräfte“ mit Gesamtbetrag, dynamischem Anteil ohne Schwerkraft, Spitzenwert mit Reset, X/Y-Kreisgrafik mit Spur und Hinweis bei Sättigung des Messbereichs (±4 g).
- Lageanzeige: Zähler „gestört“ für verfälschte Datenzeilen.
- Lageanzeige: Versionsanzeige für App und Firmware im Kopf.
- Firmware meldet ihre Version und den Git-Stand beim Start (`Firmware: zt3-wheelie imu-mpu6050 v…`) und in `status`.
- Versionierung nach SemVer: `VERSION` als einzige Quelle, `CHANGELOG.md`, Git-Tags, `tools/check-version.sh`.
- Ausführliche Dokumentation, eigenes README für die Lageanzeige, Badges.

### Changed
- Lageanzeige übernimmt nur noch vollständige Datenzeilen im Format von `printStreamLine()`, deren Werte im Messbereich liegen. Vorher reichte ein Teiltreffer.
- Verfälschte Zeilen erscheinen nicht mehr unter „Serielle Meldungen“, sie werden gezählt und verworfen.

## [0.3.0] - 2026-09-27

### Added
- Lageanzeige: Wahl der Kippachse X, Y oder Z für die Wheelie-Ansicht. Gezeigt wird die Drehung um diese Sensorachse relativ zum Nullpunkt, dadurch passt die Ansicht zu jeder Einbaulage.
- Lageanzeige: Achse, Richtung und Grenze bleiben im Browser gespeichert.

### Changed
- Lageanzeige: Karte „Aktionen“ steht oben im Seitenmenü.
- Lageanzeige: „Pitch umkehren“ heißt „Richtung umkehren“ und gilt für jede Achse. Die Lage-Karte zeigt immer den echten Pitch.

### Fixed
- Lageanzeige: Im 3D-Modell der GY-521 waren X und Y vertauscht. An der echten Platine liegt X quer (kurze Seite, zeigt von der Stiftleiste weg) und Y längs der Stiftleiste. Die berechneten Winkel waren richtig, nur die Zeichnung nicht.

## [0.2.0] - 2026-09-27

### Added
- Lageanzeige im Browser (`imu-mpu6050/viewer/`): liest die Stream-Zeilen per Web Serial, Mahony-Filter aus Accel und Gyro, 3D-Modell, Seitenansicht des Rollers mit einstellbarer Grenze, Verlauf über 10 s, Rohdaten, Demo-Modus ohne Hardware.
- `viewer/start.sh` startet einen lokalen Webserver auf Port 47281 und öffnet Chrome.

## [0.1.0] - 2026-09-27

### Added
- ESP32-Firmware `imu-mpu6050`: MPU6050 per Registerzugriff mit 1000 Hz über I²C, ein 14-Byte-Burst je Sample (~465 µs bei 400 kHz).
- Ausgabe mit 50 Hz auf eigenem Zeitraster, schneller Pfad ohne Serial, Heap und Floats.
- Gyro-Kalibrierung im Messtakt mit Bewegungserkennung.
- Leitungsprüfung beim Start, Kommando `pins`, Wiederanlauf nach Wackelkontakten, Erkennung eines Sensor-Neustarts im Sleep-Modus.
- Kommandos `help status raw stream stop calibrate pins`.

[Unreleased]: https://github.com/pepperonas/zt3-pro-wheelie-control/compare/v0.5.0...HEAD
[0.5.0]: https://github.com/pepperonas/zt3-pro-wheelie-control/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/pepperonas/zt3-pro-wheelie-control/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/pepperonas/zt3-pro-wheelie-control/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/pepperonas/zt3-pro-wheelie-control/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/pepperonas/zt3-pro-wheelie-control/releases/tag/v0.1.0
