da ich (wie einige andere hier auch) nur noch eine Keycard für meinen Unu Pro 4kW habe und befürchten musste, bald einen teuren Klumpen Elektroschrott rumstehen zu haben, habe ich mich auf die Suche nach Möglichkeiten begeben, eigene Keycards zu erstellen.
Weil die Karten vom Typ "Mifare DESFire" sind und man sie ohne den Master Key nicht kopieren kann, hatte ich die Hoffnung, eventuell aus der Unu-Hardware etwas schlauer zu werden. Also habe ich mir kurzerhand bei Kleinanzeigen eine DBC-/MDB-Kombo gekauft und aufgeschraubt.
Spoiler: Ich bin jetzt in der Lage, den Roller ohne Keycards und ohne App zu starten und wieder zu verriegeln.
Ich möchte nun hier meine bisherigen Erkenntnisse präsentieren und dazu aufrufen, bei weiteren Experimenten zu unterstützen. Achtung, es wird technisch.
Hardware
Beide Module haben zugängliche UART-Kontakte, auf die sich Stiftleisten auflöten lassen. Die Baudrate ist 115200.
Auf jedem der beiden Module befindet sich ein Female USB Mini-B Anschluss, sie sind mit einem Mini-B auf Mini-B - Kabel miteinander verbunden.
DBC (Dashboard Computer)
- i.MX6 32bit ARM Cortex A9, 800 MHz
- 1GB RAM
- 8GB eMMC
Zusätzlich befindet sich auf der Platine ein NXP PN7150 NFC-Reader. Dieser ist via i2c mit dem MDB verbunden, nicht mit dem DBC - obwohl sie sich eine Platine teilen.
MDB (Main Driver Board)
- i.MX6 32bit ARM Cortex A7, 696 MHz
- 512MB RAM
- 8GB eMMC
- SIMCom SIM7100E LTE-Modem + GPS-Receiver Kombimodul
- Aufgelötete SIM-Karte (vmtl. im MFF2-Format, habe eigene SIM-Karten bestellt und werde einen Tauschversuch unternehmen, um den Roller wieder online und in mein privates VPN zu bekommen)
Software
DBC
- U-Boot 2017.03
- "scooterOS v1.13.0": OSTree-basiertes Linux
- Kernel: Linux dbc-3783732812 5.4.24-2.0.0+g8115d570b280 #1 SMP PREEMPT Tue Sep 21 14:56:23 UTC 2021 armv7l GNU/Linux
3 Unu-spezifische Dienste:
- unu-backlight
- unu-dashboard-ui
- unu_alpha
"unu-backlight" ist ein einfaches Shell-Skript, welches via "cat /sys/bus/iio/devices/iio:device0/in_illuminance_input" den Helligkeitssensor abfragt und entsprechend einen von 3 Helligkeitswerten in "/sys/class/backlight/backlight/brightness" setzt.
"unu-dashboard-ui" ist eine Qt-Applikation und enthält das Tacho-UI.
MDB
- U-Boot 2017.03
- "scooterOS v1.13.0": OSTree-basiertes Linux
- Kernel: Linux mdb-4378251754 5.4.24-2.0.0+g8115d570b280 #1 SMP PREEMPT Tue Sep 21 14:56:23 UTC 2021 armv7l GNU/Linux
- Python 3.8.13 vorinstalliert
Auf dem MDB laufen 12 Unu-spezifische Dienste:
- unu-activation
- unu-battery
- unu-bluetooth
- unu-engine-ecu
- unu-keycard
- unu-modem
- unu-netconfig
- unu-ota-update
- unu-pm
- unu-sam
- unu-uplink
- unu-vehicle
Zusätzlich läuft eine Redis-Instanz, die als zentraler Kommunikationspunkt zwischen den Diensten fungiert.
Bisher habe ich herausgefunden, dass "unu-keycard" den NFC-Reader im Tacho ansteuert und die Kartenvalidierung durchführt. Im Anschluss wird in Redis vermerkt, dass eine erfolgreiche Kartenvalidierung stattgefunden hat - woraufhin "unu-vehicle" den Roller entsperrt.
An dieser Stelle habe ich erfolgreich eingehakt: Wenn man entsprechende Werte händisch in Redis published, startet der Roller.
Ich möchte nun versuchen, den "unu-keycard"-Service komplett zu deaktivieren und den NFC-Reader mit einem eigenen Stück Software anzusteuern. Hier fehlt mir bisher noch das hinreichende Wissen über NFC - ich bin dran.
Denkbar wäre auch, den eingebauten Card Reader stillzulegen und ein eigenes Entsperrmodul via i2c anzubinden: Schlüssel, Keycard... Wer Langeweile hat, könnte sich sicherlich auch eine Sprachaktivierung basteln

Ähnliches lässt sich ggf. auch für den Bluetooth-Part umsetzen.
Sonstiges
- DBC und MDB spannen über das "USB Ethernet Gadget"-Kernelmodul ein LAN auf. Die IPs sind hardcoded: MDB hat 192.168.7.1, DBC die 192.168.7.2.
- Im DBC ist der SSH-Pubkey des root-Users vom MDB hinterlegt.
- Das Navigationsfeature scheint zumindest in Teilen schon implementiert gewesen zu sein. Per binwalk aus dem "unu-dashbord-ui"-Binary extrahierte Bilder enthalten typische Navi-Piktogramme.
- DBC und MDB kennen ihre jeweiligen Seriennummern. Ich vermute (Versuch ist noch ausstehend), dass man durch Anpassung der Seriennummern in den entsprechenden SQLite-Datenbanken sowie durch Hinterlegen des SSH Public Key des MDB im DBC auch "fremde" Kombinationen aus DBC und MDB nutzen kann.
- Der Roller versucht durchgehend, eine Mobilfunkverbindung aufzubauen und Telemetrie zu Unu zu senden. Ich schätze, dass sich der Standby-Batterieverbrauch deutlich reduzieren lässt, wenn man die dazugehörigen Dienste deaktiviert.
- Bremshebel und Blinkerschalter verursachen Input-Events im MDB-Kernel. Die Lampen von Blinker und Bremslicht werden (sofern ich das richtig verstanden habe) per PWM angesteuert.
- Die Kernel-Konfiguration ist unter /proc/config.gz abrufbar.
"But can it run DOOM?"
Vermutlich! Ich werde das mal in einem Moment der Langeweile ausprobieren

An dieser Stelle möchte ich gerne jeden, der sich in der Lage sieht, was zu den Recherchen beizutragen, das zu tun. Egal ob Elektronik-Experte oder Entwickler-Guru - ich freue mich über reges Mitwirken!
Ich hänge momentan im Discord rum, den jemand freundlicherweise für die Community erstellt hat und der bereits im Insolvenz-Thread verlinkt wurde: https://discord.gg/BefNCt9pas
Meine Hoffnung ist, hier eine Lösung zu entwerfen, die ich dann ggf. an Roller-Werkstätten herantragen kann - es wäre wirklich schade, wenn die Unus nach und nach verschrottet werden, nur weil die Keycards kaputt gehen oder verloren sind.
Viele Grüße aus Berlin!