myTIER Forum › Foren › App / Steuergerät / Controller IoT › Akkustand via Bluetooth auslesen
Schlagwörter: Decompiling
- Dieses Thema hat 60 Antworten sowie 7 Teilnehmer und wurde zuletzt vor vor 4 Jahren, 6 Monaten von Goodvibe25 aktualisiert.
-
AutorBeiträge
-
19. Mai 2020 um 11:21 Uhr #3727MPSv3Teilnehmer
Ja das Forum hier spinnt total und wird auch nicht mehr wirklich administriert. Du hattest oben ja schon ein kleines Tutorial gepostet so, dass ich mir den Code gestern schon näher angeguckt hab.
Das ganze ist relativ gut überschaubar jedoch ohne Programmierkenntnisse kaum reproduzierbar was die Funktionen genau callen. Das mit den Strings ist soweit korrekt wie ich das einschätzen kann. Jedoch erwartet der Roller sicherlich mehr als ein „return this.unlocked“ mit gesicherter BLE Verbindung. Das wäre schon fast zu einfach.
Meine Programmierkenntnisse reichen definitiv nicht aus um ein komplettes Bild zu erlangen. Wäre echt super wenn sich da noch jemand anschließt, der sich mit Programmieren und RE auskennt.
19. Mai 2020 um 12:18 Uhr #3728pilpopTeilnehmerWisst ihr wo das bluetooth im scooter sitzt? In der lot bob oder unterhalb des displays?
19. Mai 2020 um 12:35 Uhr #3729fionnlaghTeilnehmerHabe mit dem ESP32 mal versucht, eine Verbindung aufzubauen (Standard AT-Firmware):
at+bleinit=0
at+bleinit=1
at+bleconn=0,”B8:xx:xx:xx:xx:xx” (Verbindung zum Scooter aufbauen, kein Pairing)
at+blegattcprimsrv=0 (Primäre Services auslesen)
[2020-05-17_10:15:47]+BLEGATTCPRIMSRV:0,1,0×1801,1
[2020-05-17_10:15:47]+BLEGATTCPRIMSRV:0,2,0×1800,1
[2020-05-17_10:15:47]+BLEGATTCPRIMSRV:0,3,0x2C00,1
AT+BLEGATTCINCLSRV=0,1
nix.
AT+BLEGATTCCHAR=0,1 (Charakteristika anzeigen)
[2020-05-17_10:17:49]+BLEGATTCCHAR:”char”,0,1,1,0x2A05,0x20
[2020-05-17_10:17:49]+BLEGATTCCHAR:”desc”,0,1,1,1,0×2902
AT+BLEGATTCCHAR=0,2
[2020-05-17_10:18:11]+BLEGATTCCHAR:”char”,0,2,1,0x2A00,0x4e
[2020-05-17_10:18:11]+BLEGATTCCHAR:”char”,0,2,2,0x2A01,0x4e
[2020-05-17_10:18:11]+BLEGATTCCHAR:”char”,0,2,3,0x2A04,0x02
AT+BLEGATTCCHAR=0,3
[2020-05-17_10:18:22]+BLEGATTCCHAR:”char”,0,3,1,0x2C01,0x18
[2020-05-17_10:18:22]+BLEGATTCCHAR:”desc”,0,3,1,1,0×2902
[2020-05-17_10:18:22]+BLEGATTCCHAR:”char”,0,3,2,0x2C02,0x18
[2020-05-17_10:18:22]+BLEGATTCCHAR:”desc”,0,3,2,1,0×2902
[2020-05-17_10:18:22]+BLEGATTCCHAR:”char”,0,3,3,0x2C03,0x18
[2020-05-17_10:18:22]+BLEGATTCCHAR:”desc”,0,3,3,1,0×2902
[2020-05-17_10:18:22]+BLEGATTCCHAR:”char”,0,3,4,0x2C04,0x18
[2020-05-17_10:18:22]+BLEGATTCCHAR:”desc”,0,3,4,1,0×2902
[2020-05-17_10:18:22]+BLEGATTCCHAR:”char”,0,3,5,0x2C10,0x18
[2020-05-17_10:18:22]+BLEGATTCCHAR:”desc”,0,3,5,1,0×2902Nun ist rauszufinden, mit welchen Parametern (Verschlüsselung etc) man die Kopplung durchführt und an welchen dieser “Ports” man die Befehle senden muss bzw man Feedback bekommt 🙂
Das Bluetooth dürfte in der IOT Box sitzen.
20. Mai 2020 um 13:06 Uhr #3732careyerTeilnehmerDas Bluetooth stitzt in der IoT Box und zwar oberhalb der GPS Antenne.
Ich vermute der myTier Bereich (dessen Code Anteil ja wirklich sehr überschaubar ist), ist in der Tat ziemlich einfach gestrickt. Würde mich zumindest wundern, wenn man für eine Hand voll Scooter die man seitens TIER quasi “fachmännisch entsorgt” hat, viel Arbeit und Entwicklungaufwand investiert hätte.
@fionnlagh: Du schreibst du hast versucht dich mit einem ESP32 via BLE zu verbinden und suchst nur noch nach dem passenden Parametern und der Verschlüsselung. Ich gehe davon aus du hast beim BLE-Connect das Scooter-Passwort mitgegeben? Wenn’s dumm läuft ist das die einzige Sicherheit. Gut Baudrate usw.. muss man ml verschiedenen Varianten probieren. Aber Code-seitig sieht es so aus, als ob du einfach Befehle via String an den Scooter senden kannst, wenn du dich erfolgreich via BLE connected hast.20. Mai 2020 um 13:40 Uhr #3733careyerTeilnehmerWenn ich das richtig sehen und hiernach interpretiere (https://randomnerdtutorials.com/esp32-bluetooth-low-energy-ble-arduino-ide/), dann haben wir hier:
1 Profil
– Service 1
— Characteristic 1.1 + Description
Service 2
— Characteristic 2.1
— Characteristic 2.2
— Characteristic 2.3
– Service 3
— Characteristic 3.1 + Description
— Characteristic 3.2 + Description
— Characteristic 3.3 + Description
— Characteristic 3.4 + Description
— Characteristic 3.5 + DescriptionKannst du den ESP32 Sketch teilen, den du verwendet hast?
20. Mai 2020 um 14:44 Uhr #3737careyerTeilnehmer21. Mai 2020 um 14:22 Uhr #3738fionnlaghTeilnehmer@careyer: Habe keinen Sketch an sich genommen, es war die Standard-Firmware, die auf einem ESP32 drauf ist. Diese kann man mit AT-Befehlen steuern: https://www.espressif.com/en/support/download/at
24. Mai 2020 um 16:35 Uhr #3745fionnlaghTeilnehmerSo, ich habe eine etwas andere Herangehensweise versucht:
2 PCs, 2 Bluetooth Dongles und die Software “btlejuice”. Ich habe mich also zwischen den E-Scooter und meinem Handy geschaltet.
Folgendes habe ich rausgefunden:
1. Handy verbindet sich per Bluetooth LE (mit einer zufälligen MAC) mit dem Scooter, offenbar ohne Sicherheit bzw Pairing 😉
2. Sobald die beiden verbunden sind, wird an das Charakteristika 0x2c10 ein AT-Befehl gesendet, der den Akkustand etc.. ausliest. Dies sieht so aus: AT+BKINF=(Bluetooth Passwort),0$\r\n. Geantwortet wird via Notification auf dem gleichen Kanal mit “+ACK:BKINF,1,0.0,0.00,1634.4,0,57,0$\r\n” . In diesem Fall hat mein Scooter ein Batteriestand von 57%. Was die anderen Werte sind, weiß ich nicht (Vielleicht Geschwindigkeit? 🙂 )
3. Sperren und Entsperren des Scooters: Er sendet an 0x2c10 den Befehl AT+BKSCT=(Bluetooth Passwort),0$\r\n (bzw 1), die Antwort: “+ACK:BKSCT,0$\r\n”
Ich denke, damit lässt sich arbeiten 😉
24. Mai 2020 um 20:27 Uhr #3746fionnlaghTeilnehmerHab weiter getestet..
Die Ausgabe des Befehls AT+BKINF gibt folgendes in der Reihenfolge zurück:
+ACK:BKINF,0,0.0,0.00,1634.4,7,57,1$ oder +ACK:BKINF,0,21.3,0.00,1634.4,9,57,1$
- Ist scheinbar immer 0
- Aktuelle Geschwindigkeit, wie sie auf dem Scooter Display angezeigt wird (KM/h. Hatte meinen aufgebockt zum testen)
- (Vermutlich) Gefahrene km seit Entsperren. Beginnt nach Entsperren bei 0, zählt dann beim Beschleunigen hoch.
- (Vermutlich) Gefahrene Kilometer seit Inbetriebnahme? Zählt wie der vorherige Wert auch hoch, setzt sich beim Sperren nicht zurück, ist bei meinem Scooter auf (eben diesem) Wert
- Der Wert zählt irgendwie +1, sobald das Rad sich dreht und der Befehl AT+BKINF ausgeführt wird. Zweck unbekannt, vermutlich Startgeschwindigkeitskontrolle?
- Akkukapatizät in %
- 0 wenn Wegfahrsperre aktiv (Gesperrt), 1 wenn nicht(Entsperrt)
24. Mai 2020 um 20:36 Uhr #3747MPSv3TeilnehmerGute Arbeit bis hier hin! Bin gespannt!
24. Mai 2020 um 20:38 Uhr #3748fionnlaghTeilnehmerIrgendwie kann ich nicht editieren…
Zum obigen Beitrag folgende Ergänzungen:
Parameter 1 ist der Status der Wegfahrsperre (1 = ist an, 0 = ist aus)
Parameter 7 ist Aktivierungsstatus (0 = ist gesperrt Display ist aus, 1= ist entsperrt und Display zeigt was an)
24. Mai 2020 um 22:09 Uhr #3753careyerTeilnehmer@fionnlagh : Mega! Du bist der Mann!!! … Das sind sehr gute Neuigkeiten! Ich lag mit meiner Vermutung also offenbar richtig, dass man sich seitens TIER nicht sehr viel Mühe gegeben hat die Kommunikation über Bluetooth extra abzusichern. Ich denke damit sind wir auf einem super weg uns von dieser verflixten App unabhängig zu machen. Tolle Arbeit!!!! 🙂 #highFive
P.S: Mega! Ich sehe gerade du hast es sogar hinbekommen den Gesamtkilometerstand auszulesen! Cool
- Diese Antwort wurde geändert vor 4 Jahren, 7 Monaten von careyer.
25. Mai 2020 um 10:31 Uhr #3756careyerTeilnehmerHmm… ich frage mich, ob man das auch mit der App “nRF Connect” (iOS + Android) machen kann. Die App erlaubt es einem zum BLE des Scooters zu verbinden und die einzelnen Characteristika abzufragen bzw. Commandos an diese zu senden…. ich hab das mal probiert, aber leider ohne Erfolg. Vielleicht hab ich den String nicht korrekt formatiert oder den falschen Datentypen ausgewählt (UTF-8)? Das wäre auf jeden Fall schon mal ein guter Anfang, den jeder mal ausprobieren könnte.
25. Mai 2020 um 13:01 Uhr #3760careyerTeilnehmerAlso ich hab jetzt mal mit “nRF Connect” und mit “LightBlue” probiert… beides sind Universal BLE Apps für Android und iOS. Man kann mit beiden Daten an die jeweiligen Characteristka schicken, allerdings will es bei mir auf’s verrecken nicht klappen. Vieleicht formatiere ich den String irgendwie falsch? Ich habs versucht mit “AT+BKINF=(Bluetooth Passwort),0$\r\n.” wobei ich die Klammern um das Kennwort auch mal weggelassen habe und auch den “.” am Ende mal mitgeben habe und mal weggelassen habe. Aber irgedwie kommt vom Scooter nichts zurück. Was mache ich da wohl falsch?
25. Mai 2020 um 16:13 Uhr #3762fionnlaghTeilnehmertipp, mit \r\n meine ich Steuerzeichen oder ein klassisches “Enter”
Ich hatte irgendwie mit nRF Connect es auch mal probiert (Den ganzen Befehl hexadezimal eingegeben).
Was mir beim Schnüffeln auch auffiel, dass die Befehle in 2 Schritten gesendet werden:
1. AT+BKINF=btpasswort,
2. 0$/r/n
Vermutung liegt nahe, dass das Bluetooth LE Interface nur 20 Bytes auf einmal empfangen kann.
Habe noch was weiteres versucht. Ich erinnere mich an Höllenhund, der die IoT Box ja ausgelesen hat. Sowas könnte ich auch, jedoch sind mir die Spannungen, das Pinout des Anschlusses und die Baudrate unbekannt. Wäre lustig, so könnte man noch weitere Befehle probieren. Ich bin durchaus im Besitz zweier CP2102 UART Wandler 🙂 🙂 .. In der “Gebrauchsanweisung” der IoT-Box (die man bei FCC bekommt) steht z.b. n AT-Befehl, der NFC aktivieren soll… Wäre nice.
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.