Redis-API-Referenz

Alle LibreScoot-Services kommunizieren über Redis auf dem MDB. Hier findest du State-Hashes, Command-Queues und Pub/Sub-Channels.

Verbindung
Redis läuft auf dem MDB unter 192.168.7.1:6379. Das DBC verbindet sich per USB-Ethernet. Von einem verbundenen Rechner aus:
redis-cli -h 192.168.7.1
# Oder per SSH-Tunnel:
ssh -L 6379:localhost:6379 root@<mdb-ip>
redis-ipc-Bibliothek
Go-Services nutzen die redis-ipc-Bibliothek, die go-redis um Helfer für Hash-Publishing, Queue-Verarbeitung und Pub/Sub erweitert. Im README stehen die Patterns, die quer durch alle Services verwendet werden.

State-Hashes

Zustand wird in Redis-Hashes abgelegt. Services aktualisieren Felder per HSET und publizieren Änderungsbenachrichtigungen auf gleichnamigen Channels.

vehicle

redis-cli -h 192.168.7.1 HGETALL vehicle
FeldWerteBeschreibung
statestand-by / ready-to-drive / parked / booting / shutting-down / hibernating / updatingBetriebszustand des Fahrzeugs
handlebar:positionon-place / off-placeLenkerposition-Sensor
handlebar:lock-sensorlocked / unlockedLenkschloss-Zustand
seatbox:lockopen / closedHelmfach-Verschluss
seatbox:buttonon / offHelmfach-Öffner-Taste
kickstandup / downSeitenständer
brake:left / brake:righton / offBremshebel-Zustand
blinker:switchleft / right / both / offBlinker-Schalterposition
blinker:stateon / offBlinker aktuell aktiv
main-poweron / offHauptstrom-Zustand
horn:buttonon / offHupen-Taste

battery:0 / battery:1

redis-cli -h 192.168.7.1 HGETALL battery:0
FeldTypBeschreibung
presenttrue / falseIst ein Akku eingelegt
statestringAkkuzustand
chargeinteger (%)Ladestand
voltageinteger (mV)Akkuspannung
currentinteger (mA)Akkustrom
temperature:0temperature:3integer (°C)Temperatursensoren
state-of-healthinteger (%)Akku-Gesundheit
cycle-countintegerLadezyklen
serial-numberstringSeriennummer des Akkus
fw-versionstringBMS-Firmware-Version

engine-ecu

redis-cli -h 192.168.7.1 HGETALL engine-ecu
FeldTypBeschreibung
speedinteger (km/h)Geschwindigkeit
rpmintegerMotor-Drehzahl
odometerinteger (m)Gesamtstrecke
motor:voltageinteger (mV)Motorspannung
motor:currentinteger (mA)Motorstrom
temperatureinteger (°C)ECU-Temperatur
throttleon / offGasgriff aktiv
kerson / offRekuperation aktiv
kers-reason-offstringWarum KERS aus ist (none / cold / hot)
gearintegerGangstufe
fw-versionhex stringECU-Firmware-Version

internet

FeldBeschreibung
statusVerbindungsstatus (connected / disconnected)
access-techAccess-Technologie (z.B. LTE)
signal-qualitySignalstärke 0–100
ip-addressAktuelle IP-Adresse
modem-stateModem-Power-State

gps

FeldBeschreibung
stateoff / searching / fix-established / error
latitude / longitudeAktuelle Position (6 Nachkommastellen)
altitudeHöhe in Metern
speedGPS-Geschwindigkeit
courseKurs in Grad
timestampGPS-Zeitstempel (ISO-Format)

alarm

FeldWerte
statusdisabled / disarmed / armed / level-1-triggered / level-2-triggered

settings

Persistente Konfiguration, verwaltet vom settings-service. Alle Felder sind per lsc settings get/set les- und schreibbar. Wichtige Keys:

KeyBeschreibung
alarm.enabledtrue/false, Alarmanlage an/aus
alarm.honktrue/false, Hupe während des Alarms
alarm.durationAlarmdauer in Sekunden
updates.mdb.channelOTA-Kanal: testing / nightly / stable
updates.mdb.methodfull oder delta
dashboard.valhalla-urlRouting-Engine-Endpunkt
dashboard.map.typeonline / offline
scooter.auto-standby-secondsTimeout für automatisches Abschließen (0 = aus)
hibernation-timerHibernate-Timeout in Sekunden (0 = aus)

ota

FeldBeschreibung
status:mdb / status:dbcidle / downloading / installing / rebooting / error
download-progress:mdbDownload-Fortschritt 0–100
update-version:mdbZielversions-String
error-message:mdbFehlerbeschreibung bei Status error

version:mdb / version:dbc

Wird vom version-service aus /etc/os-release geschrieben. Enthält Felder wie version_id, build_id, id.

Command-Queues

Services nehmen Befehle über Redis-Listen entgegen. Senden per LPUSH, Services lesen per BRPOP.

QueueBefehle
scooter:statelock, unlock, lock-hibernate
scooter:seatboxopen
scooter:powerrun, suspend, hibernate, hibernate-manual, reboot
scooter:blinkerleft, right, both, off
scooter:hornon, off
scooter:alarmenable, disable, start:<seconds>, stop
scooter:modemenable, disable, gps:enable, gps:disable
scooter:updatecheck-now
scooter:bluetoothadvertising-start-with-whitelisting, advertising-restart-no-whitelisting, advertising-stop, delete-all-bonds

Beispiel:

redis-cli -h 192.168.7.1 LPUSH scooter:state unlock
redis-cli -h 192.168.7.1 LPUSH scooter:alarm start:30

Pub/Sub

Sobald ein Service ein Hash-Feld aktualisiert, veröffentlicht er den geänderten Feldnamen auf einem Channel mit demselben Namen wie der Hash. Abonnent*innen lesen danach gezielt nur dieses eine Feld neu.

# Auf Änderungen am Vehicle-State subscriben
redis-cli -h 192.168.7.1 SUBSCRIBE vehicle

# Auf Akku-Updates subscriben
redis-cli -h 192.168.7.1 SUBSCRIBE battery:0 battery:1

Als Message-Payload kommt der Feldname, der sich geändert hat (z.B. "state", "charge"). Empfänger*innen holen den neuen Wert mit HGET <hash> <field>.

Dieses Pattern ist in der redis-ipc-Bibliothek umgesetzt.

← Build-Guide