Systemarchitektur
LibreScoot läuft auf zwei eingebetteten Linux-Rechnern, die per Redis über USB-Ethernet miteinander sprechen.
Überblick
Die beiden Rechner
MDB – Middle Driver Board
Der Haupt-Controller. Spricht mit ECU, Akkus, NFC-Leser, Modem und nRF52-Co-Prozessor.
Hardware-Schnittstellen:
- CAN-Bus (ECU-Kommunikation)
- I2C/GPIO (Akku-BMS, Sensoren)
- NFC-Leser (Keycard-Authentifizierung)
- 4G-Modem (Mobilfunk-Anbindung)
- GPS-Empfänger
Wichtige Services:
- vehicle-service – Zustandsautomat, Sperren/Entsperren, LED-Steuerung
- battery-service – BMS-Kommunikation, Ladezustand
- ecu-service – Motor-Controller (Bosch/Votol)
- uplink-service – Remote-Telemetrie und -Befehle
- alarm-service – Bewegungserkennung
DBC – Dashboard Computer
Kümmert sich um Benutzeroberfläche, Navigation und Display.
Hardware-Schnittstellen:
- LCD-Display (480x480)
- Umgebungslichtsensor
Wichtige Services:
- scootui-qt – Qt-Dashboard-UI
- dbc-backlight-service – Display-Helligkeit
- carplay-service – Unterstützung für CarPlay-Dongles
Redis-IPC
Services kommunizieren über Redis-Pub/Sub und Hash-Felder. Die redis-ipc-Bibliothek stellt eine gemeinsame Schnittstelle bereit.
Wichtige Patterns:
- State-Hashes –
vehicle,battery:0,engine-ecu - Command-Queues –
scooter:state,scooter:power - Pub/Sub-Channels – Echtzeit-Benachrichtigungen bei Zustandsänderungen
Das MDB betreibt die primäre Redis-Instanz. Das DBC verbindet sich über USB-Ethernet damit (192.168.7.1:6379).
Energiezustände
Der Roller hat zwei Zustandsautomaten: den Vehicle-State (Betriebsmodus) und den Power-Manager-State (Power/Suspend).
Vehicle States
stateDiagram-v2
state "stand-by" as stand_by
state "ready-to-drive" as ready_to_drive
state "shutting-down" as shutting_down
[*] --> stand_by: Boot
stand_by --> ready_to_drive: Unlock (Bedingungen erfüllt)
stand_by --> parked: Unlock (Ständer unten)
ready_to_drive --> parked: Ständer unten (1s)
parked --> ready_to_drive: Ständer oben + ready
parked --> shutting_down: Lock
shutting_down --> stand_by: ~5s
Ready-to-drive verlangt: Dashboard bereit, Ständer oben, Helmfach geschlossen, Lenker entriegelt.
Power-Manager-States
stateDiagram-v2
state "suspending-imminent" as suspending_imminent
state "hibernating-imminent" as hibernating_imminent
[*] --> booting
booting --> running: ~5s
running --> suspending_imminent: Suspend angefordert
suspending_imminent --> suspending: ~60s Verzögerung
suspending_imminent --> running: Abbruch
suspending --> running: Aufwachen
suspending --> hibernating_imminent: Akku schwach / manuell
hibernating_imminent --> hibernating: ~20s
hibernating --> booting: Aufwachen (Bremsen 10s / BLE)
Aufwachen aus Hibernate: beide Bremsen 10 Sekunden halten oder BLE-Verbindung. Eine Keycard weckt nicht aus Hibernate.
OTA-Updates
Updates managt der update-service per Mender mit atomaren A/B-Partitions-Updates.
- Delta-Updates – Nur geänderte Bytes werden heruntergeladen
- Kanäle – stable, testing, nightly
- Unabhängige Updates – MDB und DBC werden getrennt aktualisiert