ScootUI is the user interface component for the Librescoot electric scooter project. It's a Flutter application designed to run on a display mounted on electric scooters, providing riders with real-time information, controls, and navigation capabilities.
Archived. ScootUI has been superseded by scootui-qt for the DBC dashboard; this repository is kept for history only.
Part of the Librescoot open-source platform.
-
Real-time Telemetry Display
- Speed, power output, battery levels, odometer, trip meter
- GPS status, connectivity indicators, and system warnings
-
Multiple View Modes
- Cluster view with speedometer and vehicle status
- Map view with navigation capabilities
- Destination selection screen
- OTA update interface
-
Navigation
- Online and offline map support (using MBTiles)
- Integration with routing services (BRouter)
- Turn-by-turn directions
-
System Integration
- Connects to the scooter's main data bus (Redis-based MDB)
- Handles battery, engine, GPS, Bluetooth, and other vehicle systems
- Support for over-the-air (OTA) updates
-
Adaptable Design
- Light and dark themes
- Flutter/Dart - UI framework and language
- Bloc/Cubit - State management
- Redis - Real-time data communication
- Flutter Map - Mapping and navigation display
- MBTiles - Offline map data storage
ScootUI includes a simulator mode for development and testing without physical scooter hardware. It's designed to run on various platforms:
- Embedded Linux systems (target hardware)
- Desktop development environments (macOS, Windows, Linux)
- Mobile devices (for testing)
If you experience screen flickering when running on WSL2 (Windows Subsystem for Linux), use software rendering:
FLUTTER_LINUX_RENDERER=software flutter run -d linux- cubits/ - State management components
- repositories/ - Data access layer
- screens/ - Main UI screens
- services/ - System services (Redis, map, settings)
- state/ - Vehicle state data models
- widgets/ - Reusable UI components
ScootUI connects to Redis on the MDB (default host: 192.168.7.1, port 6379).
The Redis host can be overridden with the SCOOTUI_REDIS_HOST environment variable:
export SCOOTUI_REDIS_HOST=127.0.0.1
flutter run -d linuxA runtime environment variable takes priority over a compile-time --dart-define value. If neither is set, the default 192.168.7.1 is used.
For reference, the compile-time approach still works but is no longer necessary for development:
flutter run -d linux --dart-define=SCOOTUI_REDIS_HOST=127.0.0.1ScootUI uses Redis for dynamic configuration. Settings are stored in the settings hash and can be modified at runtime.
| Key | Possible Values | Default | Description |
|---|---|---|---|
dashboard.show-raw-speed |
true, false |
false |
Show uncorrected speed as reported by ECU instead of wheel circumference corrected speed |
dashboard.show-gps |
always, active-or-error, error, never |
error |
GPS icon visibility: always show, when GPS has fix or error, error only, or never |
dashboard.show-bluetooth |
always, active-or-error, error, never |
active-or-error |
Bluetooth icon visibility: always show, when connected or error, error only, or never |
dashboard.show-cloud |
always, active-or-error, error, never |
error |
Cloud connection icon visibility: always show, when connected or error, error only, or never |
dashboard.show-internet |
always, active-or-error, error, never |
always |
Internet/cellular icon visibility: always show, when connected or error, error only, or never |
| Key | Possible Values | Default | Description |
|---|---|---|---|
dashboard.map.type |
online, offline |
offline |
Map source: online uses CartoDB tiles, offline uses local MBTiles |
dashboard.map.render-mode |
vector, raster |
raster |
Rendering mode for offline maps: vector for dynamic styling, raster for pre-rendered tiles |
Examples:
# Show raw GPS speed on dashboard
redis-cli hset settings dashboard.show-raw-speed true
# Always show GPS indicator
redis-cli hset settings dashboard.show-gps always
# Switch to online maps
redis-cli hset settings dashboard.map.type online
# Use vector rendering for offline maps
redis-cli hset settings dashboard.map.render-mode vector- Cluster Screen - Main dashboard with speedometer and vehicle status
- Map Screen - Navigation view with location and routing
- Address Selection - Destination input interface
- OTA Screen - System update interface
Contributions to ScootUI are welcome. When contributing, please follow the existing code style and patterns.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
