"Lauschangriff" am CAN-Bus - Theorie und Praxis

S01, S02, S03, Mó
Antworten
Benutzeravatar
Pfriemler
Moderator
Beiträge: 1857
Registriert: Di 7. Mai 2019, 17:41
Roller: SEAT Mó 125 (Mj. 2021, Votol)
PLZ: 14513
Wohnort: Südrandberlin
Tätigkeit: Tonkünstler
Kontaktdaten:

"Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Pfriemler »

Über den CAN-Bus gibt es bisher hier nur wenige Informationen, meist als Beifang zu anderen Diskussionen. Ich fände es gut, wenn wir neue Informationen, Ideen und praktische Umsetzungen hier bündeln.

Vom Urschleim: In unseren Rollern existieren diese Steuergeräte, die mit einem CAN-Bus untereinander Daten austauschen:
  • ECU: fragt alle Schalter und Taster ab (nur INFO ist direkt mit dem Display verbunden), schaltet alle Lichter und die Hupe, wertet den Gasdrehgriff aus (1), steuert das Display an, liefert Fahrbefehle an den Motor, beeinflusst die Rekuperation (Temperatur/Akkuzustand)
  • Display: beinhaltet offenbar die Verwaltung des Gesamtkilometerzählers ODO (2), bekommt Anzeigeinformationen von der ECU. Auch die Helligkeit der Hintergrundbeleuchtung wid möglicherweise extern gesteuert
  • BMS (Batteriemanagement) im Akku: liefert Zellspannungen und -zustände, misst Stromflüsse (3)
    [*}MCU (motor control unit): Ab 2020 Sevcon GEN4, ab ca Mitte 2021 beginnend VOTOL EM150-2SP, beide CAN-gesteuert (= die analogen Eingänge der Controller werden nicht verwendet) (4)
    [*}TCU (Telemetriemodul): Astra Telematics AT400 oder AT240: beinhaltet GPS-Empfänger und Mobilfunkmodem, sammelt Daten aus dem Roller und stellt sie als Reports über Mobilfunk an Silences App-Infrastruktur zu (5)
Weiterführende Hinweise zu den soeben aufgestellen Behauptungen:
(1): Schaltplan des S01
(2): Userbericht über ODO-Reset nach Displaytausch
(3): Tasmota-Mod zeigt klarschriftlich detaillierte BMS-Werte
(4): diverse Quellen im Forum, Sevcon-Umprogrammierung, VOTOL-Modifikationen. Diskussionen zu den jeweiligen Motorcontrollern sind sicher dort besser aufgehoben
(5) Rund um das Telemetriemodul

Hardware, um mit dem CAN-Bus zu kommunizieren:
  • IXXAT USB-to-CAN Interface (z.B. hier oder hier erhältlich). Ein solches universelles Interface verwenden wohl auch Silence-Werkstätten, um mit einem Rudel unterschiedlicher und nicht frei zugänglicher (regelmäßig zu lizensierender) Software alle Geräte zu updaten und zu konfigurieren. Möglicherweise ist eine davon die im Rahmen einer Facharbeit an der Uni Barcelona entstandene Software
  • Für die VOTOL-MCU's gibt es einen speziellen USB-CAN-Adapter (erhältlich bei Ali-Express, auch über ebay, ca 50 Euro), mit dem über eine frei erhältliche Software der Controller konfiguriert werden kann (offenbar aber nur teilweise)
  • Arduino, ESP8266 oder ESP32 + universelles MCP2515-Modul (<10 Euro): Adaption einer für den Renault Twizy kreierten Software. Zum Sammeln von Rohdaten eignet sich auch prima can_recevie.ino.
Mehr Einzelfunde:
Hier gibt es eine Beschreibung eines Eigenbaus einer kompletten Box mit Anzeige von BMS- und Antriebsdaten inkl. Blinkergeräusch.
work in progress: Hardwareentwicklung eines kompakten Interfaces mit Arduino oder ESP
und dann ein Versuch der Auflistung der bisher "durchgesickerten" CAN-IDs:
0x280: erstes Byte: Modus, zweites Byte: Schalterstellungen (nach meiner Vermutung Daten, die an das Display gesendet werden). (Quelle)
0x300: Geschwindigkeit in km/h als Dezimal (ein Byte) (Quelle)
0x391: Motordrehzahl (2 (4?) Bytes, LSB->MSB (Quelle)
0x401: Daten für den Sevcon (auch Votol?)

Vielleicht empfiehlt es sich, die bekannten Infos in einer Tabelle zu bündeln und hier zum Download anzubieten.

(wird ggf. ergänzt und fortgesetzt)
Zuletzt geändert von Pfriemler am Sa 5. Nov 2022, 15:01, insgesamt 1-mal geändert.
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1857
Registriert: Di 7. Mai 2019, 17:41
Roller: SEAT Mó 125 (Mj. 2021, Votol)
PLZ: 14513
Wohnort: Südrandberlin
Tätigkeit: Tonkünstler
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Pfriemler »

zweite Fassung, fehlerkorrigiert mit neuen Schlussfolgerungen, Diagramm statt Liste:
Da war noch ein klitzekleiner Fehler in meinem Programm ... jetzt aber.

Zur Diskussion: Ich habe mit einer MCP2515-Platine und dem can_receive.ino für den Arduino (der Sketch ist auch Bestandteil der Demos der MCP-Bibliothek) in weniger als 5 Minuten 40.000 Datentelegramme "mitgeschnitten". Ich habe dabei nur ein paar Schalter betätigt, ein paar Mal den Modus umgeschaltet und etwa 10 Beschleunigungen und Bremsungen auf dem Hauptständer durchgeführt.
CAN-IDs Häufigkeit.png
Die übermittelten Bytes in 0x280 entsprechen in der Struktur dem vorletzten und drittletzten Byte im SCUTUM-Report der TCU. Allerdings ist mir im Replay aufgefallen, dass die Modus-Einstellung zunächst "blinkt", bevor sie dauerhaft bleibt, weswegen ich vermute, dass dies die Daten an das Display sind, das den passenden Schriftzug entsprechend ein- und ausschaltet (der Motorcontroller ändert seinen Modus erst, wenn diese Blinkphase beendet ist). Auch ein betätigter Blinker wird nicht nur stoisch als aktiv gemeldet, sondern seine Werte in diesem Byte ändern sich mit dem Blinkrhythmus. Auch beim Warnblinker bleibt dessen Bit gesetzt, während die zugehörigen "Blinker-Bits" eben ständig kippen.
In 0x300 kann ich die Geschwindigkeit sehen und in den ersten beiden Bytes von 0x391 die Motordrehzahl (Byte 3 und 4 bleiben immer 0x00)
0x401 wird in meinem Mo gar nicht ebenfalls adressiert. Der Votol hat offenbar eine andere die gleiche ID wie der Sevcon?[/s]
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

gmarg
Beiträge: 12
Registriert: Fr 21. Okt 2022, 21:58
Roller: SEAT MO
PLZ: 73100
Wohnort: Greece
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von gmarg »

Pfriemler hat geschrieben:
Fr 4. Nov 2022, 23:18

Hardware, um mit dem CAN-Bus zu kommunizieren:
  • IXXAT USB-to-CAN Interface (z.B. hier oder hier erhältlich). Ein solches universelles Interface verwenden wohl auch Silence-Werkstätten, um mit einem Rudel unterschiedlicher und nicht frei zugänglicher (regelmäßig zu lizensierender) Software alle Geräte zu updaten und zu konfigurieren. Möglicherweise ist eine davon die im Rahmen einer Facharbeit an der Uni Barcelona entstandene Software
  • Für die VOTOL-MCU's gibt es einen speziellen USB-CAN-Adapter (erhältlich bei Ali-Express, auch über ebay, ca 50 Euro), mit dem über eine frei erhältliche Software der Controller konfiguriert werden kann (offenbar aber nur teilweise)
  • Arduino, ESP8266 oder ESP32 + universelles MCP2515-Modul (<10 Euro): Adaption einer für den Renault Twizy kreierten Software. Zum Sammeln von Rohdaten eignet sich auch prima can_recevie.ino.

Toller Beitrag, viele, viele Dinge haben sich für mich geklärt ...
Nur eine Frage zur CAN-Bus-Hardware: Die zweite Option (USB-CAN-Adapter für VOTOL) ist nicht für alle Signale im CAN-Bus geeignet? Ich dachte, dass es ein "Konverter" ist und alles andere von einem Computerprogramm gehandhabt wird, aber ich scheine mich zu irren, da der erste "Universaladapter" viel teurer ist ...

Gerold
Beiträge: 436
Registriert: Fr 7. Feb 2020, 10:23
Roller: Silence S01
PLZ: 55*
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Gerold »

Ich habe die CAN-Daten, soweit ich sie bisher getract und dekodiert habe, in folgender Tabelle zusammengefasst.
Bildschirmfoto vom 2022-11-30 14-05-04.png
Wie man an den Fragezeichen sieht, enthält die Dekodierung noch Lücken, vielleicht hat ja der Ein oder Andere noch eine Idee, was sich dahinter verbirgt. Die Daten stammen aus dem Sevcon, BMS, ECU und dem Display, vom Astra Modul habe ich nichts gefunden.

Die ID 0x183 wird nur dann gesendet, wenn man zuvor einen sogenannten remote transmission request sendet. Dieser besteht in diesem Fall aus einem leeren Frame mit der ID 0x183, in dem das RTR Bit gesetzt ist.

Parameter, deren Werte mehr als einem Byte enthalten, werden als "little endiean" ausgegeben.

In der Facharbeit der Uni Barcelona, die @Pfriemler bereits erwähnte, werden noch weitere ID's im Bereich zwischen 0x18A und 0x196 aufgelistet, die ich aber bisher nicht in meinen Daten gefunden habe.

Für die Konfiguration von BMS und ECU werden weitere ID's verwendet. Die ID 0x233 dient zum Schreibern, die ID's 0x234 und 0x235 zum Lesen der Parameter des BMS. Für die ECU sind die die ID's 0x31A, 0x13b und 0x31C.

Für das Update der ECU Firmware werden je nach Firmware Version die ID's 0x666 bzw. 0x321 genutzt.

edit: Tabelle um ID's von @Pfriemler und @Rudi Ratlos ergänzt (30.11.22)
Zuletzt geändert von Gerold am Mi 30. Nov 2022, 14:09, insgesamt 1-mal geändert.

Rudi Ratlos
Beiträge: 202
Registriert: Di 1. Nov 2022, 08:12
Roller: Seat Mo 125 (2022)
PLZ: 79
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Rudi Ratlos »

Hi Gerold,

laut Profil hast du ja einen S01, dein Diagramm sagt aber "Seat Mo". Ich habe jedenfalls eine Mo. Hier gibt's wohl kleine Unterschiede - ich habe meinen CAN-Bus gescannt (bisher alles im Stand ohne irgendwelche Schalterbetätigungen). Einige der von dir beschriebenen IDs fehlen bei mir, dafür kann mein Mo mit folgenden zusätzlichen dienen:

0x197, alle 300ms, DLC=8
0x19b, 300, 5
0x1b0, 5000, 8
0x1b1, 5000, 8
0x230, sporadisch, 7
0x231, sporadisch, 2
0x321, sporadisch, 1

Die sporadisch auftretenden IDs könnten doch von der Telemetrie kommen, die erscheinen nur alle paar Minuten und sind dann ganz schnell wieder still...?

Ich forsche weiter ;-)

Gruß Rudi

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1857
Registriert: Di 7. Mai 2019, 17:41
Roller: SEAT Mó 125 (Mj. 2021, Votol)
PLZ: 14513
Wohnort: Südrandberlin
Tätigkeit: Tonkünstler
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Pfriemler »

Kreuzpost. Das Diagramm ist von mir, nicht von Gerold. Und dort sind einige Deiner genannten Parameter auch vertreten.

@Gerold: :thumbsup::thumbsup::thumbsup: Ich hatte befürchtet, dass Du schon so weit bist ;) ... werde versuchen das alles zu verifizieren. ()Vielleicht schaffe ich es, meinen händisch programmierten offline-Parser direkt anzudocken, um Live-Daten sehen zu können...

@gmarg: Natürlich ist nicht jedes CAN-Interface gleich - die Unterschiede liegen aber mehr in der Umsetzung in Richtung Computer. Das IXXAT arbeitet vermutlich mit eigenen Treibern mit eigenen setzbaren Parametern, während VOTOL auf eine (eher einfache) serielle Schnittstelle setzt. Der Initialisierungsstring "LDGET", den die Votol-Software beim "Conect" abschickt, ist für mich Indiz auf eine Art Befehlssatz (den wir nicht kennen). Auf CAN-Seite muss bspw. die Datenrate eingestellt werden, da ist das Votol-Interface sicher nicht festgelegt. Prinzipiell wird das Votol-Interface auch für alle CAN-Daten funktionieren, aber in welchem Format es die CAN-Daten übersetzt und liefert, ist ebenso unbekannt. Möglicherweise wird es auch nur auf bestimmte IDs festgelegt und liefert dann nur diese Daten und ignoriert die anderen.
Mit dem Arduino legt man die Datenrate (250kBit/s) der Einfachheit halber gleich per Code-Zeilen in der Software fest. Denkbar wäre auch eine Art Befehlssatz, mit dem man zur Laufzeit etwa die Bitrate ändern kann, aber dafür gibt es keinen Standard. Da jeder Arduino von sich aus eine serielle Schnittstelle als Kommunikation über USB anbietet, ist deren Nutzung ohne umständliche Treiber halt am einfachsten. can_receive.ino "übersetzt" die Binärdaten vor der Übergabe gleich in ein weit umfänglicheres menschenlesbares Format, zudem ist die geringere Bitrate von 115 kBit/s ein Flaschenhals - ich denke, mit einer komplexen Kommunikation von mehr als 30 Steuergeräten auf einem 1MBit-Bus wird diese einfache Lösung ebenso wie der Votol-Stick heillos überfordert sein - nicht aber das IXXAT.
So meine nichtfundierte und von solidem Halbwissen geprägte Meinung dazu.
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

Rudi Ratlos
Beiträge: 202
Registriert: Di 1. Nov 2022, 08:12
Roller: Seat Mo 125 (2022)
PLZ: 79
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Rudi Ratlos »

Das Diagramm oben von @Pfriemler weicht ja in einigen CAN-IDs von @Gerolds Tabelle ab. Ich habe wie Pfriemler einen Mo und bei mir treten die IDs 20a, 20b, 313, 393, 422 und 701 (wie in der Tabelle) nicht auf. Hingegen treten bei mir die in der Grafik genannten IDs 298, 299, 381 und 431 auch auf. Eine Sonderrolle nimmt allerdings die ID 0x230 ein - die tritt bei mir sporadisch auf. Wann genau konnte ich noch nicht genau eingrenzen, seit ich das Astra-Modul deaktiviert habe, allerdings nicht mehr.

Die Bezeichnungen "Sevcon" in deiner Tabelle, Gerold, sollten aber wohl in "Motorsteuergerät" oder so geändert werden; ich habe einen Votol und da treten zumindest die IDs 371, 391, 411 auch auf, die du mit "Sevcon" bezeichnet hast.

Seit ich das Astra-Modul durch Entfernen der SIM-Karte stillgelegt habe, treten bei mir die vorher vorhandenen IDs 1b0, 1b1, 230, 231 und 321 nicht mehr auf.

Soviel für heute ;-)

Rudi Ratlos
Beiträge: 202
Registriert: Di 1. Nov 2022, 08:12
Roller: Seat Mo 125 (2022)
PLZ: 79
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Rudi Ratlos »

Hallo zusammen,

da ja auch schon mal danach gefragt wurde, möchte ich hier mein "Lausch-Equipment" vorstellen. Da mich das Thema sehr interessiert, habe ich drei verschiedene Ansätze, die ich hier nach und nach zeigen werde. Um zunächst einen Überblick zu bekommen, welche IDs sich denn überhaupt auf dem CAN-Bus tummeln, gibt es zwei Ansätze: Die Bastellösung für wenig Geld und evtl. viel Spass - hier ein Arduino Nano mit 2515 CAN-Bus- und Micro-SD-Karten-Erweiterung sowie etwas darum gestrickter Software (die ich gerne hier teilen werde). Hiermit wird einfach alles am Bus abgehört und als .CSV-Datei auf die SD-Karte geschrieben; die Auswertung kann dann nach verschiedenen Kriterien später am PC erfolgen.

z.B.
CAN-ID DLC Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
'185' '8' '54' '0F' '56' '0F' '56' '0F' '56' '0F'
'186' '8' '55' '0F' '55' '0F' '58' '0F' '57' '0F'
'187' '8' '58' '0F' '5A' '0F' '51' '0F' '54' '0F'
'184' '8' '03' '80' '00' '00' '01' '00' '00' '00'
usw, usw.

Ohne Basteln lässt sich das gleiche mit (fast jedem) ELM-327 (-kompatiblen) Adapter und einem Terminalprogramm durchführen. Ich persönlich bevorzuge dafür den OBDLink LX, mit dem du wirklich für jede Eventualität gerüstet bist, solltest du auch mal auf ein "großes" Motorrad umsteigen ;-)

Gruß Rudi
Dateianhänge
IMG_2135.JPG
IMG_2132.JPG
IMG_2131.JPG

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1857
Registriert: Di 7. Mai 2019, 17:41
Roller: SEAT Mó 125 (Mj. 2021, Votol)
PLZ: 14513
Wohnort: Südrandberlin
Tätigkeit: Tonkünstler
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von Pfriemler »

Das klingt interessant, und mit dem Datenformat hätte ich keine Probleme. Mein "ELM 327 mini" BT funktioniert prächtig mit Torque auch am Silence, aber ich weiß nicht, wie der da initialisiert wird. Mit "Serial Bluetooth Terminal 1.40" kann ich mich zwar mit dem Dongle verbinden, aber es kommen keine Daten, ich schätze da fehlt einfach was an Mitteilungen an den Adapter - vielleicht hat der zitierte OBDlink ja genügend Eigenintelligenz, um ein paar Settings in Eigenregie auszuprobieren, und liefert dann prompt. Ich habe das jetzt nur am ladenden Roller gecheckt, aber das Telemodul liefert auch da die ganzen üblichen Infos von der Batterie wie einem eingeschalteten Roller, also gehe davon aus, dass da auf dem CAN gerade fröhlich gesendet wird.
Die "Serial USB Terminal" des gleichen Autors nutze ich zum Auslesen des Telemetriemoduls per RS-232.
Android Arduino mit Speicherkarte wäre super, da bin ich sehr gespannt drauf. Meinem Parser (work in progress) ein solches Datenformat beizubringen wäre die leichteste Übung.
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

Benutzeravatar
conny-r
Beiträge: 1933
Registriert: Mo 29. Aug 2022, 09:21
Roller: E- - ECONELO DTR
PLZ: 36
Kontaktdaten:

Re: "Lauschangriff" am CAN-Bus - Theorie und Praxis

Beitrag von conny-r »

Gruß Conny

Antworten

Zurück zu „Silence / SEAT“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste