Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

S01, S02, S03, Mó
Antworten
Gerold
Beiträge: 443
Registriert: Fr 7. Feb 2020, 10:23
Roller: Silence S01
PLZ: 55*
Kontaktdaten:

Re: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Gerold »

Den Provider meiner SIM-Karte hatte ich schon mal hier gepostet.

Die Telefonnummer der SIM Karte erhalte ich auch über den $PARA Befehl.

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

Re: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Gerold »

Wie versprochen, hier die Aufschlüsselung der SCUTUM S01 Datenstruktur.

Der Datensatz, den das Modul versenden besteht aus einem Paket-Header, ein oder mehreren Reports und 2 Checksum Bytes. Mit den Checksum Bytes überprüft der Server die empfangenen Daten und quittiert diese im Erfolgsfall durch Senden eines ACK Bytes. Das Modul löscht dann nach Erhalt des ACK Bytes den kompletten Datensatz. Wird z.B. wegen Serverausfall oder Netzproblemen das ACK Byte nicht empfangen, speichert das Modul diesen und evtl. folgende Report Datensätze auf einem internen Memory solange ab, bis die Störung behoben ist.

Der Paket-Header enthält neben Verwaltungsdaten noch die IMEI. Damit können die versendeten Daten auf dem Server einem Roller zugeordnet werden. Der Report Datensatz besteht zu einem aus Daten, die im Modul selbst generiert werden. Dazu zählen die GPS-Daten aber auch z,B, der Ladezustand der Pufferbatterie oder die Schalterstellung der Ausgänge. Daneben enthält er aber auch eine Auswahl aus den Daten, die über den CAN-Bus von BMS, ECU, Controller und dem Display gesendet werden. Diese sind in der SCUTUM S01 Struktur zusammengefasst.

Wie eine solche Struktur aussieht ist hier exemplarisch dargestellt:

Code: Alles auswählen

SCUTUM S01:2A 1F 1D 02 00 FF 97 00 00 10 6F 00 00 03 CA 01 90 39 28 05 52 8A 7E 00 00 00 00 00 00 06 9C 00 00 21 D7 15 04 00 00 19 F0 00 00 02 31 0A
Eine Zusammenfassungder Hexbytes so, wie sie darin enthaltenen Parametern entsprechen, ergibt:

Code: Alles auswählen

  a  b  c  d    e    f        g  h  i    j    k  l  m        n  o      p  q      r        s  t  u  v  w    x  y  z  a1 b1 
  2A 1F 1D 0200 FF97 0000106F 00 00 03CA 0190 39 28 05528A7E 00 000000 00 00069C 000021D7 15 04 00 00 19F0 00 00 02 31 0A 
und die Aufschlüsselung:

Code: Alles auswählen

 a) 0x2A = 42 : SoC [%]
 b) 0x1F = 31 : Akku Temp max [°C]
 c) 0x1D = 29 : Akku Temp min [°C] ; der Akku hat 3 Temperatursensoren, hier werden die Min- und Maxwerte ausgegeben
 d) 0x0200 = 512 : Akkuspannung * 10 [V] --> 51,2V
 e) 0xFF97 = -105 : Strom * 10 [A] --> -10,5A; negative Werte: Strom wird entnommen; positive Werte: Laden/Rekuperation
 f) 0x0000106F : BAT ID
 g) 0x00 : Warnflags aus dem BMS
 h) 0x00 : Errorflags aus dem BMS
 i) 0x03CA = 970 Motortemp * 10 [°C] --> 97,0°C
 j) 0x0190 = 400 Inverter Temp * 10 [°C] --> 40,0°C 
 k) 0x39 = 57 Tachogeschwindigkeit [km/h]
 l) 0x28 = 40 Restreichweite [km]
 m) 0x0552BA7E : irgend ein Zähler, der bei einem Neustart des Moduls auf 0 gesetzt und nur während der Fahrt hochgezählt wird. Was gezählt wird, ist mir nicht bekannt.
 n) 0x00 unklar, da immer 0
 o) 0x00000000 = 0 : Ladeenergie [Ws]
 p) 0x00 : unklar, immer 0
 q) 0x00069C = 1692 : Rekuperationsenergie [Ws]
 r) 000021D7 = 8663 : Energieverbrauch während der Fahrt [Ws]
 s) 0x15 = 21 : Außentemperatur [°C]
 t) 0x04 : Status   00: Zündung aus; 01: BMS an; 02: Zündung an, nicht ready, 03; ready + v=0km/h; 04: v>0km/h  
 u) 0x00 : unklar, da immer 0
 v) 0x00 : dito
 w) 0x19F0 = 6640 : Odometer (Tacho) [km]
 x) 0x00 : wahrscheinlich Fehler aus ECU, Bei einer Motortemp > 100°C wir ein Wert von 0x40 ausgegeben
 y) 0x00 : unklar, da immer 0
 z) 0x02 : Lichtschalter   Bit 0: Blinker links; Bit 1: Blinker rechts; Bit 2: Fernlicht; Bit 3: Fahrlicht, Bit 7: Warnblinker 
 a1) 0x31 : Modus, Seitenständer und Rückwärtsgang
 b1) 0x0A : unklar, hängt aber mit 31 zusammen 
Die Warn- und Errorflags können über die Abb. 37, S.55 aus dieser Arbeit entnommen werden.
So enthält z.B. Bit 1 der Warnungen das WUV-Flag (Warn UV/Volt im Display) wenn U den Werte von etwa 47V unterschreitet, Bit 7 das WLS-Flag ( Warnung low SoC) wenn SoC < 20%.
Bei den Errors wird z.B. Bit 1 = LUV (lim UV/Volt im Display) bei dem Unterschreiten von etwa 46V gesetzt.

Ich hoffe, das dies hier so halbwegs verständlich herüberkommt. Es gibt noch einige offene Punkte, die vielleicht gemeinsam geklärt werden können.

patba
Beiträge: 818
Registriert: Do 28. Nov 2019, 09:04
Roller: Silence S01
PLZ: 93***
Kontaktdaten:

Re: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von patba »

Ein oder mehrere der noch unbekannten Parameter könnte eine Auswertung der Beschleunigungssensoren sein, also z.B. ein "Alarm" bei Überschreiten bestimmter Grenzwerte (Unfall), oder eine generelle Meldung, wenn der Roller umgefallen ist, und die Erdbeschleunigung nicht mehr senkrecht nach unten wirkt. Wäre im Verleihbetrieb sicher informativ.
Klar, will man nicht am ganzen Roller austesten... Aber evtl. am losgeschraubten Modul.

Patrick

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1915
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: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Pfriemler »

Bei meiner Version eines Parser eliminiere ich zuerst die Leerzeichen.
Gerolds Beispiel von oben verglichen mit einem Datensatz von mir. In Gerolds Struktur wird mein letzter Ladewert falsch interpretiert (BEC09100 ist falsch, 00BEC091 ist korrekt (laut klarschriftlicher Ausgabe im Log). alles gut, war ein Fehler von mir, hätte gepasst. Dennoch:
Ich frage mich, ob es die Werte n und p überhaupt gibt oder ob nicht die o)Ladeenergie, q)Reku.energie und r)Energieverbrauch seit Einschalten nicht einfach drei aufeinanderfolgende 4Byte-Werte sind. 3-Byte-Zähler würden maximal FF FF FF -> 4,66 kWh abbilden, mit 7F FF FF FF wären 596 kWh möglich.
Leider fehlt mir zu der These noch ein höherer Reku-Zähler-Wert

Code: Alles auswählen

'a b c d   e   f       g h i   j   k l m       n o     p q     r       s t u v w   x y z a1b1 Gerold
'2A1F1D0200FF970000106F000003CA0190392805528A7E000000000000069C000021D71504000019F0000002310A Gerold
'630C0C023EFFF9195555A600000000000000660000000000BEC019000000000000000A0002000000000000000000 Pfriemler
'a b c d   e   f       g h i   j   k l m       o       q       r       s t u v w   x y z a1b1 Pfriemler
'         1         2         3         4         5         6         7         8         9
'12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
Sonst bisher ACK zu den Werten, ergibt hier Sinn.
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

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

Re: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Gerold »

Bei n) gebe ich Dir recht. Ich hatte in der Zusammenfassung den Energieverbrauch nur mit 3 statt 4 Hexbytes, in der Aufschlüsselung den Energieverbrauch aber richtigerweise mit 4 Bytes angegeben das mit dem n) ist daher falsch.

Beim q) bin ich mir nicht so sicher. Da bei mir die Reku-Werte beim Ausschalten des Rollers immer auf Null zurückgesetzt werden, reichen 3 Bytes zur Darstellung der Reku vollkommen aus. Selbst wenn man 10% der verbrauchten Energie rekuperiert, was ich übrigens noch nie erreicht habe, kommt man bei einer Nettokapazität des Akkus von maximal 5kWh auf 0,5kWh Rekuperation. Es ist aber auch möglich, das alle Energiewerte mit 4 Bytes versendet werden, dann ist q) obsolet.

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1915
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: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Pfriemler »

Meine Vermutung mit den Energiewerten folgt nur irgendeiner Logik: Was sollte man zwischen den drei Energiewerten noch was anderes einbringen.
Habe heute auf 18 Realkilometern durch B 1,054 kWh verbraucht und 0,1006 kWh rekuperiert. Das sind zwar keine 10%, aber nahe dran.
Modusbyte: ..10....=SPORT, ..11....=CITY, ..01....=ECO und ....1...=Seitenständer ausgeklappt - hast Du das auch so?
Und Schalterstellungen: Warnblinker setzt auch BlinkerLinks und BlinkerRechts?
Der "m) unbekannte Zähler" vor den drei Energiewerten war bei meinen Tests immer 00000000 und hatte heute nach der Fahrt FFFFFFFF.
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

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

Re: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Gerold »

Modi und Seitenständer sind wie bei Dir, allerdings ist Bit 0 bei eingeklapptem Seitenständer gesetzt. Rückwärtsgang setzt Bit 2.

Ist nur der Warnblinker eingeschaltet, wird bei mir Bit 7 gesetzt. Es gab aber auch schon Situationen, bei denen zusätzlich die Blinkerbits gesetzt waren. Ich habe das aber nicht weiter verfolgt, da ich den Warnblinker bisher nicht genutzt habe.

Der unbekannte Zähler lief bei mir bis vor etwa einem halben Jahr nach einem Reboot des Astra Moduls beim Fahren auch innerhalb weniger Kilometer auf FFFFFFFF. Seitdem zählt er nur sehr langsam, FFFFFFFF habe ich seitdem noch nicht erreicht. Keine Ahnung,warum sich das Verhalten geändert hat. Ich weiß auch nicht, wo diese Daten erzeugt werden. In den CAN Bus Daten habe ich sie bislang nicht gefunden.

Mir ist noch aufgefallen, das der Mo die Daten auch an den Silence Server api.connectivity.silence .eco sendet. Auf Grund der Unterschiedlichkeit der Silence/Seat-Apps hatte ich hier mal vermutet, dass Seat die Daten evtl. auf der eigenen Infrastruktur speichert.

Das Modul des Silence kennt ja noch zusätzliche Kommandos wie $PWON,1, $PBAT,0, etc, welche nicht in der Ausgabe des $SHOW Kommandos erscheinen und anscheinend nur für den Bluetooth Zugriff auf den Roller genutzt werden. Wie man diese Kommandos aus Apps wie ERF Connect aufrufen kann, wird hier beschrieben. Es wäre jetzt interessant zu wissen, ob das auch beim Mo funktioniert.

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1915
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: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Pfriemler »

Modusbyte: Sehe jetzt auch Bit0 gesetzt, aber nur wenn Roller fahrbereit, d.h. nicht nur wenn Ständer hochgeklappt ist, sondern auch ein "t)" Status von 3 oder 4 (fahrbereit oder in Fahrt) gesetzt ist. Beim Abstellen und Ausklappen des Ständers geht BIt0 auf 0 und Bit3 auf 1 und bleibt auch da, wenn der Roller laut t) auf "00"=aus geht (also ausgeschaltet wird).
Beim anschließenden Laden des Akkus im Roller wechselt t) auf "06". Gleichzeitig wird das Ständer-Bit3 gelöscht. Wird die Ladung beendet, wechselt der Status zu 02 (Zündung an, nicht bereit), kurz darauf auf 00 (aus). Das Modus/Ständerbyte bleibt da aber auf 00.

Mit ERF connect finde ich vier Einträge, davon zwei "unknown services", davon einer beschreibbar. edit: exakt so wie im zitierten Paper beschrieben. (Übrigens koppelt das Roller-BTLE ums Verrecken nicht mit meinem Xiaomi Poco X4 (Android11) - mit dem Samsung S8 (Android9) sofort und ohne dass der Roller dazu irgendwie eingeschaltet oder andweitig freigegeben wird.)
Die Befehle an sich kennt auch der Mo - über die serielle lässt sich der Roller ein- und ausschalten und die Sitzbank öffnen.
edit: Nach Studium des Papers ist es m.M.n. ausreichend, 1x einen passenden RSDK im Modul zu hinterlegen und so eine spätere Authentifizerung vorzunehmen. Nach meinem Verständnis kann das die App leisten: sie generiert einen RSDK und lässt ihn über den Server hinterlegen (oder bekommt von dort einen zugewiesen, ebenso wie der Roller), um sich anschließend per Bluetooth koppeln zu können. Kennt man diesen Key, etwas weil man ihn stattdessen manuell über ein $RSDK-Kommando über die serielle "einpflegt", kann man sich später damit gegenüber dem Roller authentifizieren und die genannten Befehle ausführen. Das ist ja dann schon fast so wie bei PKWs, wo Ganoven über den Bord-OBD neue Schlüssel anlernen (gern auch mit Einbruchsspuren) und dann, wenn der Besitzer das Auto hat reparieren lassen, den Wagen einfach mit ihrem Schlüssel abholen kommen.
Es juckt mich förmlich, einen eigenen RSDK im Roller zu hinterlegen und den Zugriff mal auszuprobieren - das ist es wohl auch, was Gerold interessiert...
SuperSoco CUx '19-'21 (36Wh/km in 2000 km), Piaggio Medley 125 '20-'22 (26,6 ml/km in 5000 km). Seat Mó: Bild

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

Re: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Gerold »

Das Modusbyte verhält sich bei mir identisch mit deinem. Bit 0 im Modusbyte wird vermutlich beim Vorwärtsfahren gesetzt, beim Rückwärtsfahren geht es auch auf 0. Das Statusbyte habe ich beim Laden noch nicht auf "06" gecheckt.

Bevor man eine neue RSDK anlegt, kann man versuchen, mit $RSDK,DISPLAY die vorhandenen auszulesen und dann evtl. diese benutzen. Ich selbst habe aber auch Neue hinterlegt und kann so vom Sofa auf das Modul zugreifen. Leider hängt sich bei meinem Roller das Bluetooth Modul öfter auf und lässt sich dann nur durch einen Reboot wieder aktivieren.

Benutzeravatar
Pfriemler
Moderator
Beiträge: 1915
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: Rund um das Telemetriemodul: Infos, Nutzen, Hacks...

Beitrag von Pfriemler »

Ohne die Antwort schon gelesen zu haben habe ich mich am Roller zu schaffen gemacht. $RSDK,DISPLAY war auch meine Idee - und liefert 0 Datensätze. Ich hatte mich vor dem Handywechsel über die Mo-App auf dem alten vom Roller abgemeldet und auf dem neuen gelingt ja die BT-Kopplung einfach nicht. Vielleicht verwendet die Mo-App aber generell kein Bluetooth. Egal: $RSDK,ADD,... war erfolgreich:

Code: Alles auswählen

$RSDK,DISPLAY
BLE RSDK [DISPLAY]
#1: 11121314151617... # ist natürlich nicht der Schlüssel aus dem Paper...
expires in 4 weeks (last used 1 min ago)
Ich hatte ein Timeout von 30 Tagen vorgegeben.
Die im Paper angegebene App "Blue Gecko Android" nennt Silicon Labs nun "EFR Connect". Das Eintragen des Schlüssels in zwei Schritten wurde mit Erfolg bestätigt und der Mo reagiert auf alle Kommandos inkl. Ein/Ausschalten und Sitzbank. Auch $STMS wird beantwortet.
QED.
Zuletzt geändert von Pfriemler am Mi 18. Okt 2023, 21:21, 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

Antworten

Zurück zu „Silence / SEAT“

Wer ist online?

Mitglieder in diesem Forum: c-h-b, Nobelhobel, Peter51, Pfriemler, Semrush [Bot] und 20 Gäste