Renault Zoe Anbindung

Kleine Korrektur:

„Charging Status“ wird bei mir nicht aktualisiert, das Feld gibt es wohl bei der PH1 nicht. Steht bei mir immer auf „true“

Aktualisierung alle 30 Minuten oder wenn das Fahrzeug an- oder abgestöpselt wird. Ist jetzt nicht rasend schnell, aber besser als alles, was ich seither hatte :wink:

Hab es noch mit den Zählerdaten aus meiner Wallbox kombiniert, da habe ich das Wichtigste auf einen Blick.

Das würde ich gern benutzen.

Meine ZOE ist jetzt 3,5 Jahre alt und hat fast 70.000 km runter.

Gruß
Bernd

Sollte funktionieren! Du kannst halt „nur“

  • Reichweite km
  • Ladestand %
  • letzte Aktualisierung Batterie
  • Eingesteckt

bekommen.

Die Energiewerte (Leistung, Verbrauch, kumulierte Werte für Tag, Woche, Monat, Jahr) kommen von meinem ModBus-Zähler und einem Auswerte-Skript, das bei mir schon einige Jahre läuft. Da sind die Ladungen, die ich unterwegs mache, nicht dabei.

Reichweite und Ladestand habe ich jetzt auch mal geloggt.

Ich hatte mich ja schon seit längerem über diese albernen SMS geärgert, die man jetzt zu Ladebeginn und Ladeende bekommt. Mir wären eigentlich Faxe lieber gewesen :wink:

Seit ich nun den Abfrage-Dienst eingerichtet habe, bekomme ich währen der Ladung alle 30 Minuten per SMS den Hinweis: „Laden des Fahrzeugs nicht möglich. Kommunikationsfehler oder Laden schon begonnen. Das Renault Team“

Ich hab den Quatsch in der App abgeschaltet. Das Auto lädt tatsächlich. Vermutlich ist der Dienst, der diese SMS versendet, jetzt beleidigt, weil das Konto alle 5 min abgefragt wird. Überfordert die Renault-Server.

Hi,

juhu, Willige Tester :smiley:

Also soweit ich das sehe gehen bestimmte Dinge bei der Phase 1 nicht. bspw die GPS Daten.

Dafür fehlen bei der Phase 2 die Batterietemperatur und die Außentemperatur. Die gibt es nur bei der 1.

@Bernd
Phase 1 wurde bis ca 2019 gebaut und danach Phase2, sollte also klappen.

Ihr könnt ja in der Kategorie folgendes Script einfügen und ausführen:

<?php

function GetBatteryData(){
    $ObjektInfo = IPS_GetObject(IPS_GetParent($_IPS['SELF']));
    $ObjectID = $ObjektInfo['ObjectID'];

    $TokenID =      GetValue(IPS_GetObjectIDByIdent($ObjectID."_TokenID", $ObjectID));
    $AccountID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_AccountID", $ObjectID));
    $KameronID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_KAMEREON_API", $ObjectID));
    $VinID =        GetValue(IPS_GetObjectIDByIdent($ObjectID."_VIN", $ObjectID));
    $CountryID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_COUNTRY", $ObjectID));

    $postData = array(
        'apikey: '.$KameronID,
        'x-gigya-id_token: '.$TokenID
    );
    $ch = curl_init('https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/'.$AccountID.'/kamereon/kca/car-adapter/v2/cars/'.$VinID.'/battery-status?country='.$CountryID);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $postData);
    $response = curl_exec($ch);
    if ($response === FALSE) die(curl_error($ch));
    $md5 = md5($response);
    $responseData = json_decode($response, TRUE);
    print_r($responseData);
}

//Abfrage Kilometerstand
function GetCockpitData(){
    $ObjektInfo = IPS_GetObject(IPS_GetParent($_IPS['SELF']));
    $ObjectID = $ObjektInfo['ObjectID'];

    $TokenID =      GetValue(IPS_GetObjectIDByIdent($ObjectID."_TokenID", $ObjectID));
    $AccountID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_AccountID", $ObjectID));
    $KameronID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_KAMEREON_API", $ObjectID));
    $VinID =        GetValue(IPS_GetObjectIDByIdent($ObjectID."_VIN", $ObjectID));
    $CountryID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_COUNTRY", $ObjectID));

    $postData = array(
         'apikey: '.$KameronID,
          'x-gigya-id_token: '.$TokenID
    );
    $ch = curl_init('https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/'.$AccountID.'/kamereon/kca/car-adapter/v1/cars/'.$VinID.'/cockpit?country='.$CountryID);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $postData);
    $response = curl_exec($ch);
    if ($response === FALSE) die(curl_error($ch));
    $responseData = json_decode($response, TRUE);
    print_r($responseData);
}

// hole Positionsdaten
function GetPosition(){
    $ObjektInfo = IPS_GetObject(IPS_GetParent($_IPS['SELF']));
    $ObjectID = $ObjektInfo['ObjectID'];

    $TokenID =      GetValue(IPS_GetObjectIDByIdent($ObjectID."_TokenID", $ObjectID));
    $AccountID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_AccountID", $ObjectID));
    $KameronID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_KAMEREON_API", $ObjectID));
    $VinID =        GetValue(IPS_GetObjectIDByIdent($ObjectID."_VIN", $ObjectID));
    $CountryID =    GetValue(IPS_GetObjectIDByIdent($ObjectID."_COUNTRY", $ObjectID));

    $postData = array(
      'apikey: '.$KameronID,
      'x-gigya-id_token: '.$TokenID
      );
    $ch = curl_init('https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/'.$AccountID.'/kamereon/kca/car-adapter/v1/cars/'.$VinID.'/location?country='.$CountryID);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $postData);
    $response = curl_exec($ch);
    if ($response === FALSE) die(curl_error($ch));
    print_r($response);
}

echo "################# Hole Batteriedaten ab
";
GetBatteryData();
echo "################# Hole Cockpitdaten ab
";
GetCockpitData();
echo "################# Hole Positionsdaten ab
";
GetPosition();

Die daten stehen mir zur Verfügung… Ich brauch noch ein wenig Zeit, am WE hat mein Kind Geburtstag, da schaff ich wahrscheinlich nix

Viele Grüße

Da will man Doch Deinen Er-Finder-Geist auf keinen Fall ausbremsen.

Hier meine Ergebnisse:


################# Hole Batteriedaten ab
Array
(
    [data] => Array
        (
            [type] => Car
            [id] => VF1AGVYA052xxxxx
            [attributes] => Array
                (
                    [timestamp] => 2020-12-03T17:28:13+01:00
                    [batteryLevel] => 96
                    [batteryTemperature] => 5
                    [batteryAutonomy] => 193
                    [batteryCapacity] => 0
                    [batteryAvailableEnergy] => 0
                    [plugStatus] => 0
                    [chargingStatus] => -1
                )

        )

)
################# Hole Cockpitdaten ab
Array
(
    [type] => FUNCTIONAL
    [messages] => Array
        (
            [0] => Array
                (
                    ((code)) => err.func.403  # [ ] Klammern von mir durch (( )) ersetzt
                    [message] => {"errors":[{"status":"403","code":"security.access","detail":"Access is denied for this resource"}]}
                )

        )

    [errors] => Array
        (
            [0] => Array
                (
                    [errorCode] => err.func.403
                    [errorMessage] => {"errors":[{"status":"403","code":"security.access","detail":"Access is denied for this resource"}]}
                )

        )

    [error_reference] => FUNCTIONAL
)
################# Hole Positionsdaten ab
{"type":"FUNCTIONAL","messages":[{"code":"err.func.403","message":"{\"errors\":[{\"status\":\"403\",\"code\":\"security.access\",\"detail\":\"Access is denied for this resource\"}]}"}],"errors":[{"errorCode":"err.func.403","errorMessage":"{\"errors\":[{\"status\":\"403\",\"code\":\"security.access\",\"detail\":\"Access is denied for this resource\"}]}"}],"error_reference":"FUNCTIONAL"}


Das mit dem Wochenende ist verständlich :wink: Aber wozu gibt es diese Nächte :smiley:

[batteryTemperature] => 5 # Wert in °C

Der Wert stimmt, also kann man das bei PH1 auch noch auslesen.

Allerdings scheint das ein grob gemittelter und nach unten abgerundeter Wert zu sein, der mir im CanZE auch „summarisch“ ausgegeben wird. Die Zell-Module haben wohl im Mittel etwa 6°C

Vielleicht kanntest Du die Quelle schon, hab das jetzt nicht weiter recherchiert. Mit IOBroker haben wohl schon einige herumexperimentiert und auch ein Skript für die neue API-Version 2020 erarbeitetn
https://michael-heck.net/index.php/elektromobilitaet/renault-zoe-im-smarthome-neue-api-2020

Da kann man wohl auch die restliche Ladedauer und den Ladeschluss-Zeitpunkt auslesen.

Hi,

komisch, bei dir werfen die zwei letzten Befehle einen error aus aber zumindest der km stand sollte angezeigt werden…

Kannst du es ggf nochmal versuchen. Evtl hilft es wenn du vorher das GetToken script ausführst?

Das mit dem Wochenende ist verständlich :wink: Aber wozu gibt es diese Nächte

och nöööö, lass ma :D:D

Viele Grüße

ne, da ist er sich mit den Fehlern sicher, Cockpit- und Positionsdaten mag er beide nicht.
Was Hast Du denn für eine ZOE? Hat das bei anderen PH1 schon mal geklappt?

Es gibt wohl auch andere ZOE, die keinen km-Stand auswerfen. Mein Verdacht: Die Q90 und R90 machen das noch nicht, jedenfalls die relativ frühen. Und meiner hat demnächst seinen sechsten Geburtstag. In der App kann ich den km-Stand manuell eingeben, wird aber gar nicht angezeigt. Renault halt…

Kennst Du das Repository hier:
https://github.com/db-EV/ZoePHP

Ich habe mich hier mal angemeldet, weil ich durch das goingeletric Forum darauf gestoßen bin. Und die Einbindung in symcon ganz interessant find.

Das Script habe ich mal installiert. Funktioniert soweit auch ganz gut, auch die Vorklimatisierung funktioniert tadellos. Was für mich ganz Interessant wäre, ist die Ladegrenze bis 80%. Das funktioniert gar nicht bei mir, egal welchen Wert ich einstelle. Hat das bei jmd. schon mal funktioniert?

Grüße

Hi,

Leider klappt das nicht. Ich kann maximal die ladung starten und auch das nicht immer. Muss mal sehen ob es mit pyze klappt.

Hab noch eine weitere Version in der Pipeline mit einigen Änderungen, hab aber noch ein Problem mit der Erstellung einer variable, das wollte ich noch gelöst haben.

Viele grüsse

Gesendet von meinem HD1903 mit Tapatalk

Danke für die schnelle Antwort.
Ist das seitens Renault überhaupt möglich einen Befehl per Software an das Auto zu senden, um die Ladung abzubrechen? Dachte immer, das ist nur Hardwareseitig möglich, also entweder auf der Wallboxseite, oder in dem man die Ladeklappe am Fahrzeug öffnet.

Hi,

scheinbar ist es nicht möglich von der zoe aus.

Man kann in der entsprechenden Funktion ein print_r nutzen und sehen das bei einem „stop“ die Sequenz fehlerfrei angenommen wird. Daher dachte ich, das würde funktionieren.

würdest du beispielsweise „cancel“ oder „false“ nehmen kommt es zu einem Fehler…

ich denke ich werde daher diese Funktion zur Benachrichtigung via push nutzen, wenn die lademenge erreicht ist.

Viele grüsse

Gesendet von meinem HD1903 mit Tapatalk

Hi,

geht bei Euch der zugriff noch auf die API bzw. der regelmäßige abruf der Daten?

VG
Ronny

Hi,

Ja, aber die kameron api hat sich geändert.

Die neue lautet

Ae9FDWugRxZQAGm3Sxgk7uJn6Q4CGEA2

Super hat geklappt, vielen vielen Dank:-)

Hat sich die kameron api wieder geändert?

Moin,

Ja, siehe hier

Viele grüsse