API ZE. Services über Drittanwendungen (z.B. fhem) anzapfen

Renault ZOE Themen, zu denen es kein eigenes Unterforum gibt

API ZE. Services über Drittanwendungen (z.B. fhem) anzapfen

marcus72
  • Beiträge: 236
  • Registriert: Mo 12. Okt 2015, 20:49
  • Wohnort: Dülmen
  • Danke erhalten: 12 Mal
read
Hallo zusammen,

in den letzten Tagen bin ich auf einige Links gestoßen, die sich damit beschäftigen, die API der ZE-Services anzuzapfen und sie für eigene Zwecke bzw. Anwendungen zu verwenden:

Reverse Engineering der Schnittstellen API
https://shkspr.mobi/blog/2016/10/revers ... t-zoe-api/

Webanwendung
https://github.com/nabossha/ZEServices

Amazon Echo
https://blog.dantup.com/2016/12/using-a ... ry-status/

Um mir die Wartezeit auf meine 2. Zoe etwas versüßen, habe mal (wieder) versucht, die ZE-Schnittstelle für meine Haussteuerungssoftware http://fhem.de nutzbar zu machen.

Mein erster Versuch hatte ich gestartet, kurz bevor Renault die Apps bzw. Schnittstelle komplett umgebaut hatte:
vgl. https://github.com/mschlappa/fhem/blob/master/ze.pl

Aufgrund der Umstellung war das hierfür zum Einsatz gekommene Perl-Skript bald nicht mehr funktionsfähig, obwohl es recht zuverlässig funktionierte (Was man von den Renault Servern nicht unbedingt behaupten konnte).

Mein neuer Ansatz ist es, fhem Bordmittel (genauer: das Modul HTTPMOD) zu verwenden.
Anbei eine Kurzanleitung, wie man das Modul konfigurieren kann, damit der Zugriff klappt:

Zunächst das Device erstellen

Code: Alles auswählen

define zoe HTTPMOD https://www.services.renault-ze.com/api/user/login 3000
Danach müssen ziemlich viele User-Attribute erstellt werden. Einfach mit viel Kopierpaste nach "userattr" kopieren:

Code: Alles auswählen

   userattr   get01Header1 get01Name get01Replacement01Mode:reading,internal,text,expression,key get01Replacement01Regex get01Replacement01Value get01Replacement02Mode:reading,internal,text,expression,key get01Replacement02Regex get01Replacement02Value get01URL get02Header1 get02Name get02Replacement01Value get02Replacement02Value get02URL replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value requestData requestHeader1 
Danach werden die Attribute mit Leben gefüllt:

Code: Alles auswählen

   enableControlSet 1 
   extractAllJSON 1 
   get01Header1 Authorization: Bearer %token% 
   get01Name  batteryStatus 
   get01Replacement01Value token 
   get01Replacement02Value user_vehicle_details_VIN 
   get01URL   https://www.services.renault-ze.com/api/vehicle/%user_vehicle_details_VIN%/battery 
   get02Header1 Authorization: Bearer %token% 
   get02Name  ac_last 
   get02Replacement01Value token 
   get02Replacement02Value user_vehicle_details_VIN 
   get02URL   https://www.services.renault-ze.com/api/vehicle/%user_vehicle_details_VIN%/air-conditioning/last 
   replacement01Mode reading 
   replacement01Regex %token% 
   replacement02Mode reading 
   replacement02Regex %user_vehicle_details_VIN% 
   replacement03Mode key 
   replacement03Regex %%username%% 
   replacement03Value username 
   replacement04Mode key 
   replacement04Regex %%password%% 
   replacement04Value password 
   requestData {"username":"%%username%%","password":"%%password%%"} 
   requestHeader1 Content-Type: application/json 
Damit username/password nicht im Klartext direkt im Device sichtbar sind kann man sie mit dem folgenden Befehlen ein wenig schützen. Die Ablage erfolgt dann im Filesystem.
set storeKeyValue username <DeinUsername>
set storeKeyValue password <DeinPasswort>
Nachdem das Device nun konfiguriert ist, kann man mit
get zoe batteryStatus
den Akkustand, Reichweite, Ladezustand etc. abfragen

Mit
get zoe ac_last
bekommt man Rückmeldung, wann das letzte Mal vorklimatisiert wurde.

Nach dem gleichen Schema können nach Belieben weitere Abfragen gebaut werden (vgl. obigen Blogeintrag).

Das Starten der Vorklimatisierung habe ich noch nicht eingebaut, da ich aktuell keine Zoe habe, bei der ich das ausprobieren könnte. Ich habe zwar noch Zugriff auf eine Zoe *hüstel*, möchte den aktuellen Besitzer jedoch nicht mit meiner Fernsteuerung erschrecken :-)

Details zum Modul HTTPMOD sind übrigens auch hier zu finden:
https://wiki.fhem.de/wiki/HTTPMOD

Vielleicht kann ja jemand damit etwas anfangen
Unterwegs mit einem Model 3 SR+
Anzeige

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
read
Oh yes, ich hatte das für ein nächstes Wochenende auf dem Plan … Wireshark und so … und nun hast du mir ein freies Wochenende verschafft :)

Top! Danke!
– Der obige Post kann Spuren von Ironie und/oder Sarkasmus enthalten –

- EV-Freak (chargEV)

Leaf, Zoe, e-up, Enyaq und Model 3 in der Flotte

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

marcus72
  • Beiträge: 236
  • Registriert: Mo 12. Okt 2015, 20:49
  • Wohnort: Dülmen
  • Danke erhalten: 12 Mal
read
Dann hat sich mein Posting ja schon gelohnt
Unterwegs mit einem Model 3 SR+

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
  • mcluki99
  • Beiträge: 362
  • Registriert: Mo 6. Feb 2017, 21:05
  • Wohnort: St. Georgen im Attergau
  • Hat sich bedankt: 22 Mal
  • Danke erhalten: 87 Mal
read
Hab mich da auch mal damit gespielt - aber dieser Bearer-Token, den ich aus der eingeloggten Browser-Session gestohlen habe, ändert sich ja täglich (?).


Das HTTPMOD modul macht ein komplettes Login und zieht danach die nötigen Attribute ab, seh' ich das richtig? :-/

Gibts sowas FHEM-Unabhängig auch? Zur Verwendung in C#, PHP, Python, ...irgendsowas
ZOE Intens seit 2017, Enyaq iv80 seit 2021

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
  • sirprize
  • Beiträge: 340
  • Registriert: So 4. Dez 2016, 13:52
  • Wohnort: Ulm
  • Danke erhalten: 6 Mal
read
Das Bearer-Token ist im jwt-Format und hat eine Lebensdauer von 10 Stunden, kann aber über einen ganz simplen Aufruf erneuert werden. So mache ich es mit QuickZE.
Hier die API-Doku zum Refresh. Sie ist von Terence Eden, den marcus72 bereits verlinkt hat. Den Refresh-Teil habe ich selbst geschrieben.

Ich würde davon abraten, beim Ablauf des Tokens ein neues Login zu machen, denn Renault behält auch die abgelaufenen Logins in der User-Datenbank. Wenn man 20 bis 30 Logins "produziert" hat, mag das für Renault OK sein, aber was werden die bei über 1000 sagen?
Tesla S85 CPO seit August 2018 (ersetzt TM3-Reservierung) / Zoe R90 von 03/17 bis 09/18 / verbrennerfrei
Strom: Bürgerwerke

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
  • tango
  • Beiträge: 950
  • Registriert: Mo 10. Mär 2014, 16:37
  • Wohnort: im heißen Süden
  • Danke erhalten: 8 Mal
read
Ich habe IP-Symcon im Einsatz, das man ganz wunderbar mit PHP programmieren kann.
Hat da schon jemand was gemacht? Für etwas Start-Code wäre ich sehr dankbar.

Insbesondere würde mich das im Zusammenspiel mit dem OpenWB-Projekt interessieren, bei dem man ja wunderbar die Ladeleistung für einen oder mehrere Ladeplätze zusammen mit der Ereugungs- und restlichen Verbrauchssituation managen kann. Die Kenntnis des Ladezustands wäre Gold wert, weil man dann bei Fräulen ZOE recht effektiv z.B. eine Ladung auf 80% programmieren könnte, was jetzt doch eher schwierig ist.
Gruß

tango

___________________________________
4/2014 - 12/2014 10.000 km Twizy
12/2014 ZOE Intens black
07/2019 "alte ZOE mit 41 kWh Batterie

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
  • sirprize
  • Beiträge: 340
  • Registriert: So 4. Dez 2016, 13:52
  • Wohnort: Ulm
  • Danke erhalten: 6 Mal
read
Hi tango,

am besten nimmst du eine PHP-Bibliothek, die solche REST-Anfragen unterstützt, beispielsweise https://github.com/tcdent/php-restclient

Der erste Login wäre etwa so (ohne Fehlerbehandlung):

Code: Alles auswählen

$username = "meinrenaultlogin@example.com";
$password = "supergeheim";
$api = new RestClient([
    'base_url' => "https://www.services.renault-ze.com/api", 
    'format' => "json"
]);
$logindata = $api->post("user/login", ['username' => $username, 'password' => $password]);
// Notwendige Daten aus der Antwort lesen:
$token = $logindata['token'];
$refresh_token = $logindata['refresh_token'];
$vin = $logindata['user']['associated_vehicles'][0]['vin'];
// Token, Refresh_token und VIN (oder gleich die gesamte Antwort) an dieser
// Stelle unbedingt lokal abspeichern, da man diese Daten sonst nur
// über einen neuen Login wieder bekommt
// Bei allen weiteren Anfragen muss das Token mitgeschickt werden:
$api->set_option('headers', ['Authorization' => 'Bearer '.$token]); 
Damit hast du bei Renault einen neuen Client für die Anfragen registriert. Der Token ist 10 Stunden gültig und kann mittels des refresh_token erneuert werden.

Bei Fragen einfach melden :)
Tesla S85 CPO seit August 2018 (ersetzt TM3-Reservierung) / Zoe R90 von 03/17 bis 09/18 / verbrennerfrei
Strom: Bürgerwerke

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
  • tango
  • Beiträge: 950
  • Registriert: Mo 10. Mär 2014, 16:37
  • Wohnort: im heißen Süden
  • Danke erhalten: 8 Mal
read
Ja supi, danke. Damit werde ich mal loslaufen.

Ich werde auch im IP-Symcon Forum mal nch Leuten suchen, die da noch interesse dran haben, vielleicht ist das auch für das OpenWB-Team @snaptec und @UmalI interessant.
Gruß

tango

___________________________________
4/2014 - 12/2014 10.000 km Twizy
12/2014 ZOE Intens black
07/2019 "alte ZOE mit 41 kWh Batterie

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

UliZE40
  • Beiträge: 3726
  • Registriert: Mi 16. Nov 2016, 20:14
  • Hat sich bedankt: 304 Mal
  • Danke erhalten: 760 Mal
read
tango hat geschrieben:Die Kenntnis des Ladezustands wäre Gold wert, weil man dann bei Fräulen ZOE recht effektiv z.B. eine Ladung auf 80% programmieren könnte, was jetzt doch eher schwierig ist.
Das geht nur mit Interpolation, da der Ladezustand nur zyklisch alle 30 Minuten während des Ladens (sowie zum Start und Ende) übermittelt wird.
Aber wozu sollte man das überhaupt tun? Wenn der Akku voll ist wird abgeschaltet. :roll:

Re: API ZE. Services über Drittanwendungen (z.B. fhem) anzap

USER_AVATAR
  • tango
  • Beiträge: 950
  • Registriert: Mo 10. Mär 2014, 16:37
  • Wohnort: im heißen Süden
  • Danke erhalten: 8 Mal
read
Richtig, über die Renault-api bekommt man nur einen "Startwert" und eine Aktualisierung alle 30 Minuten! Aber immerhin. Wenn man den Startwert nicht hat, weiß man auch nicht, bei welchem Ladestand man anfängt zu Laden. Auf 80% SoC zu kommen ist ja fast ein bisschen trivial, wenn man den Startwert des SoC hat.

80% SoC (oder irgendein anderer Wert unter 100%) ist deshalb interessant, weil es erstens als batterieschonend gilt, nicht vollzuladen (jetzt bitte keine Batteriemiete-Diskussion!), zweitens ein bestimmter SoC auch einen bestimmten Aktionsradius gewähleistet und es drittens einen gewissen Puffer gewährt, wenn man in mehreren Stufen Laden möchte. Z.B. SoCmin (bis zum Mindestradius), SoCnormal (schonend Laden, ohne Ballancing) und SoCmax (Vollladen, mit Ballancing).

Da ist der Phantasie fast keine Grenze gesetzt.

Mit der API wäre es vielleicht auch möglich, die ZOE aus dem Ladeschlaf zu wecken, ohne das Auto zu entriegeln. Das müßte man noch mal verifizieren. Denn es ist sehr ärgerlich, wenn man nachts heimkommt, dem Lademanagement sagt: "lade bis SoCmin sofort, dann bis SoCnormal, sobald genug PV-Strom da ist" und es wird nur der erste Befehl ausgeführt und der zweite wird von Fräulein ZOE tapfer verschafen.
Gruß

tango

___________________________________
4/2014 - 12/2014 10.000 km Twizy
12/2014 ZOE Intens black
07/2019 "alte ZOE mit 41 kWh Batterie
Anzeige
AntwortenAntworten

Zurück zu „ZOE - Allgemeine Themen“

Gehe zu Profile
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag