05Portfolio
led-auto — Bluetooth-Gateway für den Golf IV
Ein Gateway auf einem Raspberry Pi Zero 2 W in meinem Golf IV: Es schaltet das Einstiegslicht ein, wenn sich eine Tür öffnet, steuert den LED-Streifen und verbindet sich über einen verschlüsselten Kanal mit dem Smartphone. Es arbeitet im Auto mit dem Panel in Android Auto. Seine Logik habe ich automatisiert in allen möglichen Zuständen geprüft.
In Zahlen
- Regeln in allen Zuständen geprüft
- 18
- Automatisierte Tests
- 154
- Absichtliche Fehler, von Tests entdeckt
- 10/10
Aufgabe
Der LED-Streifen-Controller im Auto nimmt per Bluetooth nur eine Verbindung an, sodass Smartphone und ein zweiter Controller um sie konkurrieren würden. Nichts sagt dem Licht, dass sich gerade eine Tür öffnet — das Werksschloss liefert nur zwei nackte Signale: Riegelposition und Türzustand. Dazu hat der Streifen-Controller keinerlei Verschlüsselung und meldet seinen Zustand nicht.
Vorgehen
Ich habe in C++ ein Programm für den Pi Zero 2 W geschrieben, das vier Signale von den Türschlössern liest und als Einziges den LED-Streifen steuert, sodass nichts um die Verbindung konkurriert. Ein Spannungsteiler senkt die Spannung aus der Fahrzeuginstallation, und kurze Störungen werden herausgefiltert. Das Smartphone mit der App WireAmbi verbindet sich mit dem Gateway über den verschlüsselten Kanal WireLink, byteweise kompatibel zur Version in der App. Beim Koppeln werden sechs Farben auf dem Streifen und auf dem Smartphone verglichen und durch Öffnen der Fahrertür bestätigt. Die Logik des Gateways habe ich von der Hardware getrennt, sodass ich sie automatisiert in jeder möglichen Situation prüfen konnte: 12,6 Mio. Zustände und 18 Regeln. Darunter sind etwa: Den Streifen steuert nur ein Gerät, das Gateway schont die Batterie, und das Einstiegslicht geht immer an. Der Fernzugriff läuft über ein verschlüsseltes Relay und erlaubt bewusst kein Entriegeln des Autos.
Ergebnis
Im Auto tut das Gateway, was es soll, und zuvor habe ich es auf einem Prüfstand mit echten Schlosseingängen getestet: Das Öffnen der Tür schaltet das Einstiegslicht ein, das Schließen stellt die am Smartphone eingestellte Farbe wieder her, und das Verriegeln nach dem Aussteigen schaltet alles aus. Es ist auf plötzlichen Stromausfall vorbereitet und lief nach drei harten Resets ohne Verluste wieder an. Es belegt ca. 11 MB Speicher, und die Verzögerungen in seinem Betrieb überschreiten 1 ms nicht. Im Auto arbeitet es zusammen mit dem Panel in Android Auto. Der Code für die Steuerung von Fenstern, Zentralverriegelung und Spiegeln ist geschrieben, aber diese Funktionen habe ich im Auto noch nicht angeschlossen.