Suite aux déboires actuels avec Renault, mon fils a trouvé un moyen pour récupérer quelques infos (Charge Batterie, et km range au minimum sur une Zoé !)
Tout d’abord, dans jeedom, il faut créer 3 variables:
« zoe_kamereon_id » à laisser vide
« zoe_token_gigya » à laisser vide
« zoe_vin » à renseigner avec votre n° de Vin
Il y a 2 scripts à renommer en .php :
« zoe_token » , à lancer toutes les heures à minima, (je n’ai pas essayé des temps plus longs!)
<?php
require_once "/var/www/html/core/php/core.inc.php";
// définitions
define("USERNAME", "email_renault");
define("PASSWORD", "passwork_renault");
define("GIGYA_APIKEY", "3_4LKbCcMMcvjDm3X89LU4z4mNKYKdl_W0oD9w-Jvih21WqgJKtFZAnb9YdUgWT9_a");
define("GIGYA_ROOT", "https://accounts.eu1.gigya.com");
// on se connecte au SAP de Gigya
$url = GIGYA_ROOT . "/accounts.login?ApiKey=" . urlencode(GIGYA_APIKEY) . "&loginID=" . urlencode(USERNAME) . "&password=" . urlencode(PASSWORD);
$curl = curl_init($url);
$aCurlOptions = array
(
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($curl, $aCurlOptions);
$ret = curl_exec($curl);
curl_close($curl);
$gigya = json_decode($ret);
$cookie = $gigya->sessionInfo->cookieValue;
if(!$cookie)
{
exit();
}
// on récupère les infos du compte
$url = GIGYA_ROOT . "/accounts.getAccountInfo?ApiKey=" . urlencode(GIGYA_APIKEY) . "&login_token=" . urlencode($cookie);
$curl = curl_init($url);
$aCurlOptions = array
(
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($curl, $aCurlOptions);
$ret = curl_exec($curl);
curl_close($curl);
$person = json_decode($ret);
$personId = $person->data->personId;
echo "Id person Gigya : $personId<br>";
if(!$personId)
{
exit();
}
// on récupère le token
$url = GIGYA_ROOT . "/accounts.getJWT?ApiKey=" . urlencode(GIGYA_APIKEY) . "&login_token=" . urlencode($cookie) . "&fields=data.personId,data.gigyaDataCenter&expiration=4000";
$curl = curl_init($url);
$aCurlOptions = array
(
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($curl, $aCurlOptions);
$ret = curl_exec($curl);
curl_close($curl);
$token = json_decode($ret);
$idToken = $token->id_token;
if(!$idToken)
{
exit();
}
// on écrit dans la variable
scenario::setData("zoe_token_gigya",$idToken);
scenario::setData("zoe_kamereon_id",$personId);
echo $idToken;
?>
et
« zoe_battery_status » , à lancer toutes les 5 mn
<?php
require_once "/var/www/html/core/php/core.inc.php";
$curl = curl_init("https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/" . scenario::getData("zoe_kamereon_id") . "/kamereon/kca/car-adapter/v2/cars/" . scenario::getData("zoe_vin") . "/battery-status?country=FR");
$aCurlOptions = arrayc
(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array
(
"apiKey: YjkKtHmGfaceeuExUDKGxrLZGGvtVS0J",
"x-gigya-id_token: " . scenario::getData("zoe_token_gigya")
)
);
curl_setopt_array($curl, $aCurlOptions);
$ret = curl_exec($curl);
curl_close($curl);
$bat = json_decode($ret);
if(!$bat->data->attributes->batteryLevel)
{
echo "erreur";
exit(0);
}
// on écrit dans le virtuel
cmd::byString("#[Zoé][zoe_infos][battery_level]#")->event((int)$bat->data->attributes->batteryLevel);
$time = new DateTime($bat->data->attributes->timestamp);
cmd::byString("#[Zoé][zoe_infos][battery_time]#")->event($time->format("d/m/Y H:i:s"));
cmd::byString("#[Zoé][zoe_infos][battery_temp]#")->event((int)$bat->data->attributes->batteryTemperature);
cmd::byString("#[Zoé][zoe_infos][battery_km]#")->event((int)$bat->data->attributes->batteryAutonomy);
cmd::byString("#[Zoé][zoe_infos][plugged]#")->event((int)$bat->data->attributes->plugStatus);
$charging = (float)$bat->data->attributes->chargingStatus;
cmd::byString("#[Zoé][zoe_infos][charging]#")->event($charging);
// si on est en charge on récupère les autres infos
$remain = "";
$power = 0;
if($charging == 1.0)
{
$remainMin = $bat->data->attributes->chargingRemainingTime;
$remain = round($remainMin/60) . "h" . $remainMin%60;
$power = $bat->data->attributes->chargingInstantaneousPower;
}
cmd::byString("#[Zoé][zoe_infos][charging_remain]#")->event($remain);
cmd::byString("#[Zoé][zoe_infos][charging_power]#")->event($power);
echo "Date dernière récup : " . $time->format("d/m/Y H:i:s");
?>
Pour celui-ci, il faut créer un virtuel qui reprends les commandes à remplir (à partir de la ligne 25)
Je fourni ces scripts (avec l’accord de mon fils qui n’a pas le temps) sans aucune assistance, pour usage en dépannage pour ceux qui maîtrisent les script et leurs usages.
ça tourne depuis plusieurs jours chez moi, et me permet de piloter la charge.
Mais ça serait mieux qu’ @anto35 fasse un correctif à son plugin !
Bonne journée !