Redis-API-Referenz
Alle LibreScoot-Services kommunizieren über Redis auf dem MDB. Hier findest du State-Hashes, Command-Queues und Pub/Sub-Channels.
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>
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
| Feld | Werte | Beschreibung |
|---|---|---|
state | stand-by / ready-to-drive / parked / booting / shutting-down / hibernating / updating | Betriebszustand des Fahrzeugs |
handlebar:position | on-place / off-place | Lenkerposition-Sensor |
handlebar:lock-sensor | locked / unlocked | Lenkschloss-Zustand |
seatbox:lock | open / closed | Helmfach-Verschluss |
seatbox:button | on / off | Helmfach-Öffner-Taste |
kickstand | up / down | Seitenständer |
brake:left / brake:right | on / off | Bremshebel-Zustand |
blinker:switch | left / right / both / off | Blinker-Schalterposition |
blinker:state | on / off | Blinker aktuell aktiv |
main-power | on / off | Hauptstrom-Zustand |
horn:button | on / off | Hupen-Taste |
battery:0 / battery:1
redis-cli -h 192.168.7.1 HGETALL battery:0
| Feld | Typ | Beschreibung |
|---|---|---|
present | true / false | Ist ein Akku eingelegt |
state | string | Akkuzustand |
charge | integer (%) | Ladestand |
voltage | integer (mV) | Akkuspannung |
current | integer (mA) | Akkustrom |
temperature:0–temperature:3 | integer (°C) | Temperatursensoren |
state-of-health | integer (%) | Akku-Gesundheit |
cycle-count | integer | Ladezyklen |
serial-number | string | Seriennummer des Akkus |
fw-version | string | BMS-Firmware-Version |
engine-ecu
redis-cli -h 192.168.7.1 HGETALL engine-ecu
| Feld | Typ | Beschreibung |
|---|---|---|
speed | integer (km/h) | Geschwindigkeit |
rpm | integer | Motor-Drehzahl |
odometer | integer (m) | Gesamtstrecke |
motor:voltage | integer (mV) | Motorspannung |
motor:current | integer (mA) | Motorstrom |
temperature | integer (°C) | ECU-Temperatur |
throttle | on / off | Gasgriff aktiv |
kers | on / off | Rekuperation aktiv |
kers-reason-off | string | Warum KERS aus ist (none / cold / hot) |
gear | integer | Gangstufe |
fw-version | hex string | ECU-Firmware-Version |
internet
| Feld | Beschreibung |
|---|---|
status | Verbindungsstatus (connected / disconnected) |
access-tech | Access-Technologie (z.B. LTE) |
signal-quality | Signalstärke 0–100 |
ip-address | Aktuelle IP-Adresse |
modem-state | Modem-Power-State |
gps
| Feld | Beschreibung |
|---|---|
state | off / searching / fix-established / error |
latitude / longitude | Aktuelle Position (6 Nachkommastellen) |
altitude | Höhe in Metern |
speed | GPS-Geschwindigkeit |
course | Kurs in Grad |
timestamp | GPS-Zeitstempel (ISO-Format) |
alarm
| Feld | Werte |
|---|---|
status | disabled / 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:
| Key | Beschreibung |
|---|---|
alarm.enabled | true/false, Alarmanlage an/aus |
alarm.honk | true/false, Hupe während des Alarms |
alarm.duration | Alarmdauer in Sekunden |
updates.mdb.channel | OTA-Kanal: testing / nightly / stable |
updates.mdb.method | full oder delta |
dashboard.valhalla-url | Routing-Engine-Endpunkt |
dashboard.map.type | online / offline |
scooter.auto-standby-seconds | Timeout für automatisches Abschließen (0 = aus) |
hibernation-timer | Hibernate-Timeout in Sekunden (0 = aus) |
ota
| Feld | Beschreibung |
|---|---|
status:mdb / status:dbc | idle / downloading / installing / rebooting / error |
download-progress:mdb | Download-Fortschritt 0–100 |
update-version:mdb | Zielversions-String |
error-message:mdb | Fehlerbeschreibung 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.
| Queue | Befehle |
|---|---|
scooter:state | lock, unlock, lock-hibernate |
scooter:seatbox | open |
scooter:power | run, suspend, hibernate, hibernate-manual, reboot |
scooter:blinker | left, right, both, off |
scooter:horn | on, off |
scooter:alarm | enable, disable, start:<seconds>, stop |
scooter:modem | enable, disable, gps:enable, gps:disable |
scooter:update | check-now |
scooter:bluetooth | advertising-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.