CITS-to-go

Ein mobiler Empfänger für C‑ITS-Nachrichten im 5,9-GHz-Band (ITS-G5). Ein ESP32‑C5 empfängt die Funkpakete von Ampeln und Fahrzeugen und überträgt sie per Bluetooth an ein iPhone, das sie dekodiert, anzeigt und auf Wunsch weiterleitet.

Diese Seite enthält die Firmware mit Webflasher, die Einrichtung des iPhones und die technischen Details.

HardwareSeeed Studio XIAO ESP32‑C5
EmpfangITS-G5, Kontrollkanal 5900 MHz (Kanal 180)
NachrichtenCAM, DENM, SPATEM, MAPEM, IVIM, CPM, SREM/SSEM; signiert und unsigniert
Verbindung zum TelefonBluetooth LE, verschlüsselt und gekoppelt
AppsiOS 17 oder neuer (TestFlight), Android (Original-App)
FirmwareCITS-to-go v2.42.3
StatusExperimentell, nicht für sicherheitsrelevante Zwecke

Einrichtung

Die Einrichtung erfolgt einmalig an einem Computer mit Chrome oder Edge und einem USB‑C-Datenkabel. Danach arbeitet der Empfänger nur noch mit dem Telefon und einer Stromquelle.

Firmware flashen

Den ESP32‑C5 per USB anschließen, den Knopf verwenden und im Auswahlfenster das Gerät „USB JTAG/serial debug unit“ wählen. Der Vorgang dauert etwa eine Minute.

Version 2.42.3, 1,1 MB (Datei herunterladen)

SHA‑256 9e51dab3…07757a736. Erscheint kein Gerät: BOOT-Taste beim Einstecken gedrückt halten.

App installieren

Die iOS-App befindet sich im Test und wird über Apple TestFlight verteilt. Nach Annahme der Einladung wird sie in der TestFlight-App installiert. Beim ersten Start den Bluetooth-Zugriff erlauben.

iPhone koppeln

Die Firmware akzeptiert per Bluetooth nur ein gespeichertes Telefon. Ein neues Telefon wird nur angenommen, nachdem die Kopplung über USB freigegeben wurde. Das verhindert, dass fremde Geräte in Funkreichweite den Empfänger nutzen.

  1. Den ESP am Computer angeschlossen lassen und die App öffnen.
  2. „Kopplung freigeben“ wählen und den ESP auswählen.
  3. Innerhalb von 30 Sekunden in der App auf Verbinden tippen und die iOS-Abfrage Koppeln bestätigen.
Ersetzt ein zuvor gekoppeltes Telefon.

Danach verbindet sich die App selbstständig, auch im Hintergrund. Nach einem erneuten Flashen das Gerät zuvor in den iOS-Einstellungen unter Bluetooth ignorieren.

Nutzung

Kreuzungsansicht der iOS-App mit nach Signalphase eingefärbten Spuren und Restzeiten

Der Empfänger benötigt nur eine Stromversorgung über USB, etwa eine Powerbank oder ein Kfz-Ladegerät. Die App besteht aus fünf Bereichen:

LiveEmpfangene Nachrichten im Klartext: Fahrzeugtyp und Geschwindigkeit (CAM), Warnungen wie Stau, Panne oder Baustelle (DENM), dazu Rohdaten
KreuzungenMAPEM-Geometrie mit SPATEM-Phasen: frei, Übergang, Halt, mit Restzeit
KarteSender an ihrer GeoNetworking-Position
AufnahmenPCAP-Mitschnitte für Wireshark; vorhandene Mitschnitte lassen sich in der App abspielen
EinstellungenWeiterleitung, Diagnoseprotokoll, Demo-Kreuzung

Fahrzeuge mit Car2X senden CAM-Nachrichten und sind nahezu überall zu empfangen. SPATEM und MAPEM gibt es nur an ausgestatteten Lichtsignalanlagen, DENM nur bei konkreten Ereignissen.

Datenweiterleitung

Die App leitet empfangene Pakete per MQTT an den gemeinsamen Server mqtt.dirksreich.de weiter; alle Empfänger erscheinen dann auf der Live-Seite. Zusätzlich lässt sich OpenTrafficMap oder ein eigener Broker einschalten. Beide Ziele sind in den Einstellungen einzeln abschaltbar. Übertragen werden die empfangenen Funkpakete, nicht die Position des Telefons. Das Format entspricht dem Empfänger von OpenTrafficMap:

TopicInhalt
its/<node>/packetRohes IEEE-802.11-Frame, binär, QoS 0
its/<node>/statusonline (retained), Last Will offline
its/<node>/infoJSON mit Node-Kennung, App-Version und Hardware
its/<node>/statsJSON mit Laufzeit in Sekunden, einmal pro Minute

Ohne Verbindung puffert die App bis zu 5000 Pakete und sendet sie nach dem Wiederverbinden.

Fehlerbehebung

SymptomAbhilfe
Kein Gerät beim FlashenDatenkabel verwenden, BOOT-Taste beim Einstecken halten, andere Programme mit Zugriff auf den Port schließen
„Gerät belegt“ beim KoppelnFlash-Dialog schließen oder Seite neu laden
„Keine Antwort“ beim KoppelnEs läuft noch keine CITS-to-go-Firmware: Schritt 1 wiederholen
App meldet „Nicht angelernt“Kopplung in Schritt 3 erneut freigeben
Kopplung schlägt nach Neu-Flashen fehlGerät in iOS unter Einstellungen › Bluetooth ignorieren, dann Schritt 3
Nur CAM, keine AmpeldatenNormal abseits ausgestatteter Kreuzungen

Die App schreibt ein Diagnoseprotokoll nach diagnostics.log, erreichbar in der Dateien-App unter „Auf meinem iPhone › CITS-to-go“.

Technische Details

Bluetooth

Service6e400001-b5a3-f393-e0a9-e50e24dcca9e
RX (Schreiben)6e400002-…, Verschlüsselung erforderlich
TX (Notify)6e400003-…
SicherheitLE Secure Connections, Just Works, Bonding; ein Besitzer

Datenformat

USB und Bluetooth übertragen denselben Bytestrom aus CTG1-Datensätzen: COBS-kodiert, durch 0x00 getrennt, mit CRC-32 gesichert. Ein Capture-Datensatz enthält Sequenznummer, Zeitstempel, Frequenz, RSSI und das vollständige 802.11-Frame.

Kopplung freigeben

Die Freigabe ist ein CTG1-Datensatz vom Typ 4 über USB. Die Firmware bestätigt mit Typ 5 und akzeptiert danach 30 Sekunden lang genau ein neues Telefon. Der Knopf in Schritt 3 sendet über Web Serial:

08 43 54 47 31 01 04 0c 02 01 01 01 05 12 46 f8 46 00

Alternativ per Kommandozeile:

esptool --chip esp32c5 write-flash 0x0 CITS-to-go-firmware-v2.42.3.bin
python3 arm_enrollment.py

Quellen und Lizenz

Firmware und Android-App stammen aus cits-to-go von sascha8a und stehen unter der GPL‑3.0. Das Projekt baut auf der Arbeit von OpenTrafficMap auf. Die iOS-App ist eine Portierung für iPhone mit eigenem Bluetooth-Client, MAPEM/SPATEM-Decoder und Kreuzungsansicht.

Kein offizielles Angebot von OpenTrafficMap.