Eine Aiways Community App
  • Java 90.4%
  • Dart 9.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
depe c90bba4313
Some checks are pending
CI / analyze (push) Waiting to run
CI / gate (push) Waiting to run
CI / release (push) Blocked by required conditions
CI / deploy-web (push) Blocked by required conditions
CI / publish (push) Blocked by required conditions
Update project files - 2026-10-10 06:58
2026-10-10 06:58:53 +02:00
.github/workflows Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
android Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
assets Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
icon-backup-old-drawables Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
ios Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
lib Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
reference Referenz: kuratiertes jadx-Decompilat der Original-Aiways-App (v1.4.1) 2026-08-27 23:09:25 +02:00
scripts Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
store release: App-Icon als Adaptive Icon (Issue #44) 2026-09-09 21:01:30 +02:00
test Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
tool release: App-Icon als Adaptive Icon (Issue #44) 2026-09-09 21:01:30 +02:00
web release: App-Icon als Adaptive Icon (Issue #44) 2026-09-09 21:01:30 +02:00
.gitattributes Referenz: kuratiertes jadx-Decompilat der Original-Aiways-App (v1.4.1) 2026-08-27 23:09:25 +02:00
.gitignore release: Fahrzeug einrichten als Ein-Knopf-Ablauf (smooth flow) 2026-09-02 15:27:47 +02:00
.metadata Flutter-App v0.1: dark, Aiways-Look, Backend-Anbindung 2026-08-27 23:27:01 +02:00
a_sleek_cinematic_high_end_branded_splash_poster.png Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
analysis_options.yaml Flutter-App v0.1: dark, Aiways-Look, Backend-Anbindung 2026-08-27 23:27:01 +02:00
codemagic.yaml Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
IOS_RELEASE.md Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
IOS_SIDELOAD.md Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
l10n.yaml release: App spricht fuenf Sprachen und kann Meilen (Issue #38) 2026-09-08 13:54:01 +02:00
localization_source.zip Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
PLAY_STORE_RELEASE.md Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
POST release: Fahrzeug-Key per VIN + Teilen/Beitreten (geteilte Fahrzeuge) 2026-09-02 11:53:49 +02:00
pubspec.lock release: #2b Key-Storage verschluesselt (Keystore/Keychain) + Migration 2026-09-17 21:14:33 +02:00
pubspec.yaml Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
README.md Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
README.txt Update project files - 2026-10-10 06:58 2026-10-10 06:58:53 +02:00
VIN release: Fahrzeug-Key per VIN + Teilen/Beitreten (geteilte Fahrzeuge) 2026-09-02 11:53:49 +02:00

AnywaysEV App (AnywaysEV)

Flutter-App fürs Smartphone, die mit unserem AnywaysEV-Backend (aiways/Backend, https://host.anywaysev.eu) spricht — Look & Feel inspiriert von der originalen Aiways-App, dunkles Design, Akzentfarbe Aiways-Türkis #00CFB4.

Teil des AnywaysEV-Projekts — Steuerung & Telemetrie des eigenen Aiways U5, nachdem der Hersteller die Cloud abgeschaltet hat.

Features

  • Login gegen das Backend (/auth/login, Token wird lokal gespeichert).
  • Erstinbetriebnahme — „Mit Fahrzeug starten" direkt auf dem Login-Screen: den Head-Unit-QR scannen, Backend-URL daraus übernehmen, anmelden (oder Konto anlegen, falls das Backend allowRegistration meldet) und weiter ins Provisionieren. Später liegt derselbe Weg unter Mehr → Profil → Fahrzeuge → Fahrzeug hinzufügen.
  • Fahrzeug hinzufügen — geführter Assistent: pro Abschnitt ein Screen mit animiertem Symbolbild, einem Satz Klartext und höchstens zwei Knöpfen (QR scannen → Schlüssel holen → im TBox-WLAN aufspielen → Bluetooth-Test → Erst-Daten hochladen). Scheitert der Scan (1 Minute oder drei fremde Codes), bietet die App die Texteingabe an. Das frühere Protokoll steckt hinter „Details" (Knopf oben rechts).
    • WLAN-Schritt: ab Android 10 verbindet die App selbst (WifiNetworkSpecifier, MainActivity.kt) — ein Systemdialog mit genau diesem Netz, ein Tipp, kein Passwort abtippen; danach trennt sie es auch selbst wieder. Wichtig dabei: das TBox-AP hat kein Internet, deshalb bindet die App ihren Prozess ausdrücklich an das WLAN (bindProcessToNetwork). Ohne das lässt Android den Standard-Weg aller Sockets auf Mobilfunk stehen und 192.168.x.1:9000 ist trotz „verbunden" unerreichbar (Issue #26). Rückfall (iOS/Android 9/abgelehnt): Knopf öffnet die WLAN-Auswahl und legt das Passwort in die Zwischenablage — die App bindet sich dann an das von Hand gewählte Netz.
    • Solange der Assistent läuft, pausiert der BLE-Verbindungshalter (BleLink.suspend): sonst verbraucht seine Hintergrundsuche das Scan-Budget, das Android pro 30 s vergibt, und der Bluetooth-Test im vorletzten Schritt findet „kein Fahrzeug in Reichweite".
  • Übersicht — SoC-Ring, Reichweite, Spannung/Strom, Speed, Kilometerstand, Gang, Ladezustand, Standort (GPS). Pull-to-refresh.
  • Telemetrie — Zeitreihen-Chart (SoC/Spannung/Strom/Speed/Reichweite) aus /vehicles/:id/timeseries (fl_chart).
  • Fahrten — Standort → Uhr-Symbol oben rechts: Fahrtenhistorie der letzten 90 Tage, nach Tagen gruppiert; dahinter je Fahrt von/bis, Strecke, Akkuverbrauch, Durchschnittsverbrauch und der Streckenzug auf der Karte. Die Fahrten leitet die App aus der Telemetrie ab (lib/drive_session.dart) — einen Fahrten-Endpunkt gibt es im Backend nicht. Grundlage sind Tempo und Kilometerstand aus dem dbcvpage/cache_data-Pfad; die GPS-Spur wird getrennt nachgeladen.
  • Steuerung — Command-Queue: Befehle (verriegeln/entriegeln/Klima/Hupe/Blinken) einreihen (POST /commands) + Status der letzten Befehle.
  • Einstellungen — Sprache, Einheiten, Backend-URL umstellbar, Nutzer/Rolle, Logout.
  • Sprachen & Einheiten (Issue #38) — Deutsch, Englisch, Französisch, Italienisch, Spanisch. Vorgabe ist die Systemsprache; passt keine, fragt die App beim ersten Start (Auswahl in der jeweiligen Landessprache) und merkt sich die Antwort. Später umstellbar unter Mehr → Einstellungen → Sprache. Ebenda die Einheiten: metrisch (km, km/h, °C, kWh/100 km) oder imperial (mi, mph, °F, mi/kWh) — umgerechnet wird nur die Anzeige, gespeichert und ans Fahrzeug geschickt wird weiter metrisch (lib/units.dart). Die Texte liegen als ARB unter lib/l10n/, der erzeugte Code unter lib/l10n/gen (nach Änderungen an einer .arb: flutter gen-l10n). Übersetzt ist der Alltagsteil der App; Einrichtungs-Assistenten, Diagnose, Bluetooth-Seite und die Dienste-Anbindung sprechen vorerst weiter Deutsch.

Design-Vorlage

Die Farb-/Icon-Anker stammen aus dem jadx-Decompilat der Original-App unter reference/original-app-jadx/ — u.a. app_base_color = #00CFB4. Das Original ist selbst eine Flutter-App; die Dart-Logik ist kompiliert (nicht lesbar), die Ressourcen dienen als Inspiration.

Entwicklung

flutter pub get
flutter run                 # auf angeschlossenem Gerät / Emulator
flutter analyze             # statische Prüfung (aktuell: keine Issues)

Build (Android-APK)

flutter build apk --release
# Ergebnis: build/app/outputs/flutter-apk/app-release.apk

Projektstruktur

lib/
  main.dart              App-Einstieg, Provider, Dark-Theme, Auth-Routing
  theme.dart             Dark-Theme + Aiways-Farben (#00CFB4)
  api.dart               HTTP-Client fürs Backend
  app_state.dart         Zustand (Auth-Token, Fahrzeuge) + Persistenz
  models.dart            Vehicle / Telemetry / Command
  widgets/soc_gauge.dart SoC-Ring (CustomPainter)
  screens/               Login, Übersicht, Telemetrie, Steuerung, Einstellungen
reference/               jadx-Decompilat der Original-App (Design-Lookup, LFS)

Stack

Flutter (dark-only), http, provider, fl_chart, shared_preferences, intl.