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
-
7. Mai 2020 um 16:33 Uhr #3633careyerTeilnehmer
Hallo zusammen,
ich habe hier ein eigenes Home-Automation System auf Basis RaspberryPi/Node-RED laufen. Hierin habe ich auch ein Dashboard integriert, welches mir den aktuellen Akkustand aller im Haushalt befindlichen Geräte auf einen Blick anzeigt und mich bei Bedarf alarmiert, wenn es Zeit ist das ein oder andere Gerät mal wieder aufzuladen.
Ich würde hier gerne auch meinen Scooter integrieren, sprich: Ich möchte in zyklischen Abständen Kontakt via Bluethooth zum Scooter aufnehmen und den Akkustand abfragen, um ihn anschließend an mein Dashboard zu melden.
Hat jemand hier ggf. Erfahrung mit dem Datenformat welches über Bluetooth ausgetauscht wird?
Ich würde gernen einen ESP32 oder dergleichen als Sensor in den Fahrradkeller packen, der dann 1-2x am Tag aufwacht, sich per Bluetooth mit dem Roller verbindet, den Akkustand abfragt um ihn dann anschließend per WLAN an die Home-Automation zentrale zu melden (z.B. per MQTT).
So hätte man stets Gewissheit, ob man nochmal nachladen muss oder alles im grünen Bereich für die nächste Fahrt ist.
Streng genommen könnte die Home-Automation-Zentrale den Scooter bei Unterschreiten eines bestimmten Schwellwerts auch automatisch nachladen lassen. Man steckt beim Abstellen einfach immer das Ladekabel an und die Zentrale entscheidet selbsttätig wann und wie lange Strom aufs Ladegerät geschalten wird 😉Über Hilfe/Feedback würde ich mich freuen.
8. Mai 2020 um 12:33 Uhr #3637MPSv3TeilnehmerOhne IOT Modifikationen wird das schwer. Soweit ich das hier gelesen habe, ist unsere Box jedoch closed und sehr speziell. Es gibt eine Lösung aus Polen, jedoch bin ich mir nicht sicher ob damit dein Usecase abgedeckt wird. Ich glaube nicht das du ohne weiteres den „Hack“ aus Polen um Funktionen erweitern kannst. Ohne Mod bist du ziemlich sicher auf die Funktionen angewiesen, die myTIER uns mit der App zur Verfügung stellt. Allerdings ist dies alles Halbwissen von mir und beruht nur auf eigenen Erfahrungen.
8. Mai 2020 um 13:41 Uhr #3639MichaAdministratorDas einfachere wäre sicher, den ESP vom Bordnetz des myTIERs zu speisen und die Spannung direkt am Akku auszulesen. Fürs iPhone und vermutlich auch für Android gibts ne App die heißt “LightBlue” mit der man Bluetooth Services und Datenformat von Geräten auslesen kann.
Vielleicht hilft das
Grüße
11. Mai 2020 um 17:09 Uhr #3648fionnlaghTeilnehmerMan müsste die Tier-App, speziell den MyTier-Bereich genauer unter die Lupe nehmen. Wenn man durch Reverse Engineering rausfindet, wie man sich damit verbindet, ließe sich dies auslesen (und theoretisch auch n ESP32-basierter Schlüsselanhänger entwickeln zum Sperren + Entsperren entwickeln 😀 ).
Die entsprechenden Befehle, die an den Controller per Bluetooth LE gesendet werden, sind ähnlich wie “AT”-Kommandos mit denen man z.b. Modems steuert. Diese beinhalten im übrigen auch als Parameter das “Bluetooth-Passwort”.
Verbindung zwischen Handy und Scooter ist so wie ich das sehe verschlüsselt (Natürlich, sonst könnte man durch Sniffen kostenlos Scooter “ausleihen”).
Das Bluetooth LE des Scooters wird aktiviert, sobald man die App startet. Verbindet sich in dieser Kürze ein anderes Gerät (über Bluetooth LE) mit dem Scooter, hängt die App übrigens fest ohne Fehlermeldung.
Komme aber nicht weiter tatsächlich. Es fehlt, wie die Befehle an den Roller gesendet werden und wie das Bluetooth LE “gestartet” wird und wohin diese gesendet werden. Im Bereich Reverse Engineering bin ich relativ neu.
12. Mai 2020 um 10:08 Uhr #3651careyerTeilnehmerHi,
danke erstmal an alle für die tollen Beiträge. Ja, irgendwie müsste man doch dahinter kommen. Ich denke fionnlagh, du bist schon auf dem richtigen Weg. Klar die Verbidnung zwischen Scooter und App ist verschlüsselt. Es würde mich aber schwer wundern, wenn die dort noch eine zusätzliche Layer-7 Verschlüsselung eingesetzt hätten. Ich denke das ganze wird auf “Transportebene” spricht nur mit dem BT-Kennwort verschlüsselt. Das Kennwort kennen wir ja, d.h. es sollte möglich sein mit einem ESP32 eine erfolgreiche Bluetooth Kopplung mit dem Scooter herzustellen. Wenns dumm läuft plappert der Scooter nach erfolgreichem Verbindungsaufbau über BT einfach drauf los und sendet erstmal seine ganzen Telemetriedaten zwecks Anzeige auf dem Handy (Sperrzustand, Akkustand, Reichweite, …) ohne dass die App das aktiv anfordern muss. Dann müsste man sich nur das Format angucken, ob das was lesbares ist (z.B. JSON String, XML oder dergleichen).
Was die Steuerung anbelangt denke ich hast du Recht. das wird irgendwas AT-Command mäßiges sein (oder ebenfalls JSON). Da man BLE aber m.W. nicht ohne weiteres Sniffen kann müsste man wohl die App dekompilieren um an die passenden Kommandos ranzukommen.
Ich dachte bisher, dass es ganz normales BT ist… aber du hattest jetzt BLE erwähnt. Kann ein ESP überhaupt BLE? BLE bin ich noch nicht wirklich fit drin.VG
12. Mai 2020 um 18:38 Uhr #3652fionnlaghTeilnehmerJop ESP32 hat Bluetooth LE.
Könnte man also wunderbar nutzen 🙂
Und die App dekompilieren.. Den Hinweis mit den “AT-Kommandos” habe ich tatsächlich in der dekompilierten App finden. Kommando zum Sperren, Steuern des Lichts, Infos anfordern und Passwort ändern.
Aber da es sich um ein Dekompilat handelt, ist das Lesen nicht sehr leicht. Jadx oder Ghidra könnte man hierzu nutzen.
15. Mai 2020 um 22:55 Uhr #3670careyerTeilnehmerHi fionnlagh,
wow! Du kennst dich gut aus! Vielleicht könnte man hier zusammen daran arbeiten? Ich habe das .apk file mal hier durch geschleust: http://www.javadecompilers.com/apk … Das Ergebnis is ein ZIP mit decompiliertem Code. In “TIERScooterSharing_v3.7.1_apkpure.com_source_from_JADX\TIERScooterSharing_v3.7.1_apkpure.com_source_from_JADX\sources\com\tier\mytier” finden sich hochinteressante Sachen und leserlicher Code! 😉
Vielleicht können wir damit was anfangen?
VG
careyer- Diese Antwort wurde geändert vor 4 Jahren, 7 Monaten von careyer.
15. Mai 2020 um 23:31 Uhr #3672careyerTeilnehmerHier was zum Fahrzeugstatus:
public VehicleStatus(boolean z, String str, String str2, boolean z2) {
C11815l.m36450b(str, “batteryPercentage”);
C11815l.m36450b(str2, “range”);
this.unlocked = z;
this.batteryPercentage = str;
this.range = str2;
this.isHeadLampTurnedOn = z2;
}Und hier was zum Steuern?
public final String getBatteryPercentage() {
return this.batteryPercentage;
}public final String getRange() {
return this.range;
}public final boolean getUnlocked() {
return this.unlocked;
}16. Mai 2020 um 1:57 Uhr #3673MPSv3TeilnehmerJungs ihr seid klasse. Weiter so! Vergesst bitte nicht die iOS User! Wenn man helfen kann ohne Programmierkenntnisse, lasst es wissen. Ich bin zum Beispiel Grafikdesigner und könne ein UI beisteuern oder so. Gute Arbeit bis hier hin.
18. Mai 2020 um 8:58 Uhr #3703careyerTeilnehmerTest
18. Mai 2020 um 9:06 Uhr #3704careyerTeilnehmerIch bin leider kein Software Entwickler/Programmierer, aber die dekompilierte App gibt schon eine Menge Insights. So gibt es in den Sourcen die Unterverzeichnisse “com/tier” und “com/tier/mytier/model”. Schaut man sich den Code an, so wird klar, dass die Kommunikation der App mit dem Scooter über enfache Strings erfolgt. Das Betrifft sowohl Status-/Telemetrie Nachrichten als auch Steuerkommandos. Zumindest die lokale Kommunikation mit der App (also im myTier Betrieb lokal über Bluetooth) scheint nicht kryptografisch gesichert zu sein. D.h. jemand mit etwas Softwareentwicklungs-/Programmierbackground kann hier sicher etwas Code zusammenklöppeln, der die offizielle App ablöst.
18. Mai 2020 um 9:15 Uhr #3705careyerTeilnehmerWenn jemand etwas Webspace hat, dann könnte ich die dekompilierte Version der App dort mal hochladen, sodass wir vielleicht gemeinsam dran arbeiten könnten.
Als mögliche Lösungen kommen zwei Varianten in Frage:
– Eine einfache eigene App, die uns unabhängig von der viel gehassten und instabilen Tier-App macht
– Eine Lösung den Scooter ohne Handy zu nutzen (z.B. über einen ESP32, der die Bluetooth-Kommunikation mit dem Scooter übernimmt).
Den ESP könnte man z.B. in eine Art Schlüssel-Plip einbauen und den Scooter einfach über Kopfdruck (Ent-)sperren. Genau wie mit einem Autoschlüssel.Das ganze hat m.E. den Vorteil, dass man nicht in die Hardware- und Softare des Scooeters eingreifen muss. Man simuliert lediglich die Kommunikation mit der App über ein kleines externes Bluetooth Gerät.
18. Mai 2020 um 13:12 Uhr #3706MPSv3TeilnehmerHabe selber leider kein Public Webspace mehr. Wie wäre es mit einem Repository? Github wäre doch eine Möglichkeit. Alternativ GoogleDrive oder Dropbox?
- Diese Antwort wurde geändert vor 4 Jahren, 7 Monaten von MPSv3.
19. Mai 2020 um 9:27 Uhr #3724careyerTeilnehmerIrgendwie spinnt das Forum… das was ich schreiben möchte kann ich nicht schreiben… der Beitrag verschwindet einfach
19. Mai 2020 um 9:29 Uhr #3725careyerTeilnehmerDann eben so:
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.