Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

Ai Ways U5 SOC abgreifen

Hi Jens,

ich antworte Dir in Deutsch, das ist hier vermutlich für mehr Leute lesbar.
Der Grund, warum der Weg über mitmproxy überhaupt funktioniert hat, war ein Fehler in der alten Appversion. Die App hat damals einen unverschlüsselten HTTP-Request (also nicht HTTPS) zum Laden eines Bildes verwendet, und dabei auch noch die Login Credentials mitgeschickt. Das war sicherheitstechnisch ein totaler Fail. Aber für uns eine große Hilfe, um das Token und die RegisterId zu bekommen.

Nun hat Aiways diese Sicherheitslücke aber geschlossen. Jetzt braucht man bessere Werkzeuge, wie z.B. Pcapdroid. Damit ist es möglich, den Datenverkehr zu entschlüsseln, weil man in Android ein Zertifikat von Pcapdroid als vertrauenswürdig hinterlegt.

BTW: Der Verbrauch unseres U5 über seine bisher 33.000 km liegt bei 27,3 kWh / 100 km. Das ist viel, enthält aber die Ladeverluste, die sonst meist nicht angegeben werden (und den Fahrstiel meiner Frau :). Ein Tesla kommt aber auch mit Ladeverlusten auf sehr viel niedrigere Werte - bedingt durch Siliziumkarbid-Halbleiter, selbst entwickelte Motoren, viel besseren cw-Wert und sicher noch viele weitere Faktoren.

@dvbhannes:
Kannst Du den EVCC-Code nicht selbst anpassen? Gegenüber der ursprünglichen Version mit drei Requests musst Du alle Requests weglassen außer dem einen, der die Daten bezieht. In diesem Request fügst Du Dein Token und Deine RegisterId fest ein und fügst die Parameter version und plattform hinzu und es sollte wieder funktionieren.
Mein Token ist bisher seit vielen Monaten stabil. Wenn es wirklich ein Verfallsdatum haben sollte, kann mit Pcapdroid jederzeit wieder das neue abgegriffen werden. Einmal im Jahr wäre das z.B. für mich ok. Besser als garkeine Daten.

Gruß Jörg

@ Jpsy:

Wie EVCC-Code? Meinst Du in der Konfigurationsdatei einfach Token und RegisterId einfügen???

Gruß Henrik

Grüße dvbhannes Airways U5 Aubergin, Interieur schwarz bestellt und bekommen...
Zitat von dvbhannes am 24. April 2023, 15:35 Uhr

Wie EVCC-Code? Meinst Du in der Konfigurationsdatei einfach Token und RegisterId einfügen???

Nein, ich meine den Quellcode von EVCC. Das ist ja ein OpenSource-Projekt und die Quellen liegen offen.
Falls Du dazu in der Lage bist, kannst das Aiways-Modul von EVCC selbst modifizieren und das Projekt neu kompilieren.
Ich denke, die dafür relevanten Dateien stehen hier:
https://github.com/evcc-io/evcc/tree/master/vehicle/aiways

Könnte es sein, dass man mit einer API  ABRP mit den Live-Daten des Aiways versorgen kann...

siehe https://www.iternio.com/

Grüße dvbhannes Airways U5 Aubergin, Interieur schwarz bestellt und bekommen...
Zitat von Jpsy am 28. April 2023, 12:03 Uhr
Zitat von dvbhannes am 24. April 2023, 15:35 Uhr

Wie EVCC-Code? Meinst Du in der Konfigurationsdatei einfach Token und RegisterId einfügen???

Nein, ich meine den Quellcode von EVCC. Das ist ja ein OpenSource-Projekt und die Quellen liegen offen.
Falls Du dazu in der Lage bist, kannst das Aiways-Modul von EVCC selbst modifizieren und das Projekt neu kompilieren.
Ich denke, die dafür relevanten Dateien stehen hier:
https://github.com/evcc-io/evcc/tree/master/vehicle/aiways

Danke Dir, aber dazu bin ich leider nicht in der Lage...

Grüße dvbhannes Airways U5 Aubergin, Interieur schwarz bestellt und bekommen...

Hallo zusammen,

erstmal toll, was so viele hier schon so geleistet haben!
Ich werkel jetzt auch schon ein paar Tage daran rum, den Abruf der Daten über JS in iobroker zu integrieren.
Mit den vorhandenen Anleitungen erreiche ich auch immerhin schon den Aiways-Server. Token und den ganzen Spaß habe ich auch aus der App ausgelesen.
Es wird in meinem Skript nur auch noch der getCondition request ausgeführt.

Leider erhalte ich aber nach wie vor die Meldung
{"code":702,"message":"The detection environment is not safe, please try again later","timestamp":1690467531139}

Ich vermute, ich habe noch einen Fehler im Header.

Kann mir dazu eventuell jemand einen Hinweis liefern, was daran falsch ist?

Mein Header sieht derzeit wie folgt aus:

const requestHeaders = {
        "language":language,
        "token":token,
        "requesttime":Date.now(),
        "appsignid":appsignid,
        "reqtimestamps":Date.now(),
        "authorization":authorization,
        "registerid":registerid,
        "deviceid":deviceid,
        "version":version,
        "platform":platform,
        "apptimezone":apptimezone,
        "apptimezoneid":apptimezoneid,
        "content-type":"application/json; charset=utf-8",
        "accept-encoding":"gzip",
        "user-agent":"okhttp/4.3.1",

    };

Vielen Dank schon einmal!

EDIT:

Problem ist gefunden. Die aktuelle App-Version ist 1.4.1, jedoch scheint der Aiways-Server mit dieser einen anderen Zugriff zu erwarten. Dieser muss sämtliche Informationen enthalten, welche ich oben aufgelistet habe. Am Ende scheitert das bei mir an der "authorization". Ich weiß nicht, wie diese generiert wird. Sie ändert sich auch bei jeder Anfrage an den Server.
Das alles scheint aber kein Problem zu sein, so lange man die "version": "1.3.0" an den Server schickt. In diesem Fall kann man sich die authorization, die appsignid und die zwei timestamps sparen und man erhält die Daten.

Gruß
Valentin
__________________________________
Kia e-Niro Spirit von 11/20
Tesla Model Y LR von 02/22
Aiways U5 Premium von 12/22 mit AHK