evcc-io / evcc

Sonne tanken ☀️🚘
https://evcc.io
MIT License
3.57k stars 660 forks source link

VW API unterstützt ID.3 nicht #485

Closed StefanSchoof closed 3 years ago

StefanSchoof commented 3 years ago

Describe the bug Ich habe einen ID.3 den ich versuche in evcc einzubinden. Ich dem ich den Consent auf https://www.portal.volkswagen-we.com gegeben habe, bekomme ich die Meldung:

State: unexpected status: 403
Charge status: unexpected status: 403
Finish time:   unexpected status: 403
Climater:      unexpected status: 403

Auf https://www.portal.volkswagen-we.com wird kein aktives Fahrzeug angezeigt. Wenn ich versuche das Fahrzeug dort hinzufügen bekomme ich die Meldung "Das Fahrzeug konnte nicht hinzugefügt werden Die von Ihnen eingegebene FIN kann zu einem Fahrzeug gehören, für das die mobilen Online-Dienste nicht genutzt werden können. Bitte prüfen Sie zur Sicherheit noch mal die Groß- und Kleinschreibung der eingegebenen FIN und achten Sie auf die Verwechslungsmöglichkeit der Zahl „0“ und des Buchstabens „O“."

Wird also noch ein Schritt benötigt, um den ID.3 einzufügen?

To Reproduce

  1. Neuen ID.3 zu evcc.yaml hinzufügen
  2. Consent auf https://www.portal.volkswagen-we.com geben
  3. evcc vehicle
  4. Fehlermeldung 403

Expected behavior Das die Werte ausgelesen werden oder das eine Fehlermeldung mit Informationen, was zu tun ist um das zum Laufen zu bekommen.

EVCC details: Show output of evcc -v between the quotes below:

evcc version 0.33 (403e953)

Show evcc configuration file evcc.yaml between the quotes below:

vehicles:
- type: vw
  title: ID.3
  capacity: 58 # kWh
  user: <user>
  password: <password>
  vin: <VIN>
  cache: 5m

Show evcc log output with --log trace between the quotes below:

Erstelle ich wenn benötigt (aber da sind Token und co drin)

If using Docker: Show output of docker run andig/evcc -v between the quotes below:

<- paste here

Show evcc log output with docker logs <container id> between the quotes below:

<- paste here
obiwan007 commented 3 years ago

@fsdschmidt doch ich hab die Abbrüche auch. Sehe ich im IOBroker mit Flotedit ganz gut. Jede Stunde werden die Werte mit 0 geschrieben. Die SOC und Restreichweite wird per MQTT schon weitergegeben. Ob per REST weiss ich nicht. mqtt.0.evcc.loadpoints.1.socCharge mqtt.0.evcc.loadpoints.1.range

Der Range ist fast immer mit dem SOC synchron. Hier läuft offenbar nur eine leichte zeitversetzte Mittelung im Fahrzeug. Auch ändert sich der SOC nur in 10% Schritten. Denke das Fahrzeug sendet das auch nur so. Funktioniert erstaunlicherweise auch in der Tiefgarage mit schlechtem Empfang.

andig commented 3 years ago

Für soc in 10% Schritten könnt ihr mal estimate: true setzen.

fsdschmidt commented 3 years ago

Ach man sollte die API auch einfach mal abrufen. Klar im state Endpunkt wird ja ein JSON mit allen möglich Infos geliefert. Sorry, hatte irgendwie nicht erwartet dass da so viel beim state zurück kommt. Danke! Genau was ich gesucht habe. :)

andig commented 3 years ago

Ok. Man sollte auch einen neuen Token nicht einfach nur abrufen, sonder auch benutzen. Jetzt sollte es gehen!

obiwan007 commented 3 years ago

[id ] TRACE 2020/12/03 08:53:33 GET https://identity.vwgroup.io/signin-service/v1/4fb52a96-2ba3-4f99-a3fc-583bb197684b@apps_vw-dilab_com/login/authenticate?relayState=9d6b24d3178870a59d6171780d132c84a55a6d9e&email=markus.miertschink%40hotmail.com 200 OK [id ] TRACE 2020/12/03 08:53:33 POST https://identity.vwgroup.io/signin-service/v1/4fb52a96-2ba3-4f99-a3fc-583bb197684b@apps_vw-dilab_com/login/authenticate 303 See Other [id ] TRACE 2020/12/03 08:53:33 GET https://identity.vwgroup.io/signin-service/v1/4fb52a96-2ba3-4f99-a3fc-583bb197684b@apps_vw-dilab_com/terms-and-conditions?relayState=9d6b24d3178870a59d6171780d132c84a55a6d9e&updatedDataPrivacy=true 200 OK [id ] TRACE 2020/12/03 08:53:33 GET https://www.volkswagen.de/app/authproxy/vw-de/user 401 Unauthorized [main ] FATAL 2020/12/03 08:53:33 cannot create vehicle 'ID.3': cannot create type 'id': unexpected status: 401

fsdschmidt commented 3 years ago

@obiwan007: Hatte ich gestern Nachmittag auch. Melde dich mal unter volkswagen.de an, da gab es gestern Nachmittag eine Änderung und die brauchte erneute Zustimmung. Ist vielleicht auch etwas worauf evcc noch mit einem Hinweis reagieren könnte.

Danke @andig, aktuellen Stand probiere ich aus.

StefanSchoof commented 3 years ago

Das mit den Änderungen an den Terms and conditions scheint aktuell öfter vor zu kommen. Gefühlt alle 2 Wochen gibt es eine neue Fassung.

andig commented 3 years ago

https://identity.vwgroup.io/signin-service/v1/4fb52a96-2ba3-4f99-a3fc-583bb197684b@apps_vw-dilab_com/terms-and-conditions?relayState=9d6b24d3178870a59d6171780d132c84a55a6d9e&updatedDataPrivacy=true

Ich möchte die nicht für Euch akzeptieren, aber eine Warning könnte gehen. Die sieht man leider nur wenn man im System ist :O

StefanSchoof commented 3 years ago

Ja, das eine Warnung finde ich gut.

andig commented 3 years ago

Dann brauche ich einen Testaccount der das Problem hat.

StefanSchoof commented 3 years ago

Leider bei mir die schon weggeklickt. Hatte das im order status Script so gelöst: https://github.com/StefanSchoof/vwidentity/blob/341ca65f41584a6cad0b7fcf9be2f71c1aa6d3fd/main.go#L190

fsdschmidt commented 3 years ago

Läuft bei jetzt seit 3h stabil. Top!

obiwan007 commented 3 years ago

Sieht auch soweit gut aus hier.

andig commented 3 years ago

Falls noch jemand eine Idee hat, wie man über das API den Ladevorgang anstossen kann wäre das für "eingeschlafene" IDs noch hilfreich. Im VW Portal scheint das allerdings nicht zu existieren.

goebelmeier commented 3 years ago

Wie gesagt, beim Up hilft einmal Auto unlock und lock. Aber 1. möchte ich glaube ich nicht dass das irgendeine Art Software für mich auslöst und beim Up tritt es auch selten auf.

obiwan007 commented 3 years ago

Wie gesagt, beim Up hilft einmal Auto unlock und lock. Aber 1. möchte ich glaube ich nicht dass das irgendeine Art Software für mich auslöst und beim Up tritt es auch selten auf.

Leider gibt es kein API um das Auto zu unlocken... Die We Connect ID App kann das auch noch nicht. Dort kann man zumindest den Ladevorgang anstoßen/beenden. Somit muss zumindest dafür die API schon da sein. Das kann man allerdings nicht über die Website reverse engineeren. Eine App hab ich bislang auch noch nicht gehacked um an die API Calls heranzukommen. Wird eh alles über HTTPS gehen.

premultiply commented 3 years ago

Man kann das Android-APK auseindernehmen und findet dann oft in einem JS-Gulasch die hinterlegten URLs.

StefanSchoof commented 3 years ago

Ist eine Flutter App mit Dart, da gibt es wenig decomplier. Ich denke man braucht ein gerootet Telefon, muss sich ein eigens Root Cert als System Cert installieren und dann über Proxy den Verkehr mitschneiden. Und dann muss man noch Hoffen das kein Cert Pinning im Einsatz ist.

andig commented 3 years ago

...oder das Cert Pinning rausfrickeln. Ist viel Arbeit...

StefanSchoof commented 3 years ago

In der libapp.so gibt es ein paar URLs die nach api aussehen:

Da gibt es noch die URL https://mobileapi.apps.emea.vwapps.io von einem Backend

obiwan007 commented 3 years ago

Klingt doch schon gut :) Scheinen aber nur queries zu sein, keine Set functions. Bekomme bei den meisten Endpoints auch nur ein 401. Einer der wenigen funktionierenden Requests ist scheinbar momentan https://cardata.apps.emea.vwapps.io/vehicles/{{FIN}}/fuel/status Ich denke viele andere Funktionen sind noch nicht freigegeben für die Fahrzeuge, da das große Update noch fehlt.

StefanSchoof commented 3 years ago

Unter https://github.com/TA2k/ioBroker.vw-connect gibt es Code, welcher die API der App abfragt. Möglich, dass damit mehr Daten und auch Steuerung der Heizung möglich ist.

andig commented 3 years ago

Unter https://github.com/TA2k/ioBroker.vw-connect gibt es Code, welcher die API der App abfragt.

M.E. ist das das normale Portal, funktioniert aber nicht mit den IDs.

UPDATE Obwohl, das lohnt nochmal einen zweiten Blick! Da scheint auch ein Bonus für den ID drin zu sein.

StefanSchoof commented 3 years ago

Unter https://www.goingelectric.de/forum/viewtopic.php?p=1456846#p1456846 wird berichtet. dass jemand damit Daten sieht. Selber habe ich das nicht ausprobiert.

obiwan007 commented 3 years ago

Funktioniert mit IOBroker definitv mit dem ID3. Ich recorde mir damit aktuell den SOC und die anliegende Ladeleistung - damit kann man dann mal überschlagen, wieviele kWh man so im schnitt verbraucht. Ist zwar nicht supergenau - SOC wird glaub ich nur alle 10% aktualisiert - aber besser wie nichts. Der Code für den IOBroker Adapter ist etwas spagettimäßig - und schwer zu lesen, da alles in einem File ist. Sehr viele If type==='id' abfragen, die dann gegebenenfalls die entprechenden Endpoints anders abfragen. Auch der plug-state wird korrekt abgerufen. Die Klimasettings können ebenfalls gesetzt werden sowie das Laden gestartet (hab ich allerdings noch nicht getestet).

andig commented 3 years ago

Wir haben ja erstmal eine Lösung. Der neue Code wird daran nichts ändern, hat aber den Charme für alle VW Fahrzeuge weitgehend identisch zu sein. Ich werde das bei Gelegenheit mal integrieren. Diskussion dazu gerne in neuem Ticket!

andig commented 3 years ago

Der Core ist mittlerweile auf die ID APIs aus dem ioBroker umgestellt. In https://github.com/andig/evcc/pull/559 wird Unterstützung für fahrzeugseitiges „ansupsen“ der Ladung nachgerüstet.

andig commented 3 years ago

@obiwan007 hast Du aus dem ioBroker eine vollständige Liste der chargingState die ich auf die Wallbox Statuus mappen kann? Dann könnten wir das auch beim ID dazu nutzen, ein angeschlossenes Fahrzeug zu erkennen.

obiwan007 commented 3 years ago

vw-connect.0..status.chargingStatus.chargePower_kW vw-connect.0..status.chargingStatus.chargeRate_kmph vw-connect.0..status.chargingStatus.chargingState vw-connect.0..status.chargingStatus.remainingChargingTimeToComplete_min

Für chargingState hab ich gerade: readyForCharging

Ich glaube du kannst das auch daran festmachen ob ein Plug erkannt wurde vw-connect.0.*.status.plugStatus.plugConnectionState === "disconnected"

bartelul commented 3 years ago

@andig Hallo! Mein erster Auftritt bei github. Ich habe eine openWB und einen e-Up Bj. März 2020. Um den Akkuladestand in der openWB zu nutzen benutze ich z. Zeit. das "VW Carnet" Modul. Das löst aber leider nur in 10% Schritten auf und ich hätte gerne eine Auflösung von 1%. Ich benutze auch die We Connect ID App für den e-UP, die zeigt den Akkustand in 1% Schritten an. Dann habe ich für einen Test den iobroker mit dem Adapter "vw-connect.0" auf PC installiert, der gibt mir den Akkustand auch in 1% Schritten aus. Ich habe dann in der openWB das Modul "VW ID" für meinen e-Up getestet, das funktioniert leider nicht für den e-UP. Ich habe dann etwas in der openWB-Software geschaut und gesehen das die Software für das Modul "VW ID" von hier kommt. Wenn die evcc eine Schnittstelle für VW ID und auch die anderen/älteren Modelle (e-Up, etc.) werden soll, dann könnte ich wenn gewünscht beim Testen der evcc-Software an einem e-Up unterstützen. Bei der Softwareerstellung bin ich aber keine Hilfe - kenne mich nicht aus. Grüße Ulli

andig commented 3 years ago

@bartelul das sollte mittlerweile alles gehen. Falls nein bitte neues Ticket!