Systemarchitektur

LibreScoot läuft auf zwei eingebetteten Linux-Rechnern, die per Redis über USB-Ethernet miteinander sprechen.

Überblick

MDB · Middle Driver Board 192.168.7.1
vehicle-service battery-service ecu-service bluetooth-service alarm-service modem-service uplink-service update-service pm-service keycard-service settings-service version-service boot-led-service ums-service onboot-service
Redis
Akku-BMS (I2C) · NFC · 4G-Modem · GPS
USB-Ethernet
DBC · Dashboard Computer 192.168.7.2
scootui-qt dbc-backlight-service carplay-service brightness-reader valhalla update-service version-service onboot-service
Display · Sensoren
CAN-Bus
ECU

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-Hashesvehicle, battery:0, engine-ecu
  • Command-Queuesscooter: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

Services-Referenz →