DomotiqueTutoriaux

Tuto : Piloter une Tesla avec la domotique Jeedom

Bonjour à tous,

Aujourd’hui un article assez particulier puisque nous allez hacker une voiture Tesla!
Non allez, je rigole on reste quand même loin du hack mais nous allons mettre en place un certains nombre de script pour permettre à la solution domotique Jeedom de récupérer les informations de la célèbre voiture électrique mais aussi de pour la piloter en exécutant un certain nombre de commande.

Présentation

Pour ceux qui ne connaissent pas, Tesla propose des voitures 100% électriques disposant d’une (vraie) autonomie allant jusqu’à 450km. Ces voitures haut de gamme sont des bijoux de technologies, et sont entièrement connectées grâce une connexion réseau VPN permanente entre la voiture et les serveurs Tesla.
Une partie de ces données sont utilisable dans l’application Smartphone :

 

En faisant le reverse engineering de cette application, des furieux (oui parce que pour cela il y a du niveau…) en ont tiré l’API Rest non officielle des serveurs TESLA.
Tout est documenté dans le site de Tim Dorr : http://docs.timdorr.apiary.io/

Je vais rassurer beaucoup de monde en disant que bien sur, en utilisant cette API, nous ne pouvons pas mettre en danger les passagers du véhicule… au pire, vous coupez la clim aux occupants pendant une canicule :p

 

Intégration d’une Tesla dans Jeedom

Le tutoriel suivant se décompose en plusieurs scripts, pour chaque script, vous devez vous munir de :
• L’adresse IP de votre serveur Jeedom
• De la clé API de votre Jeedom
• De votre email et mot de passe utilisé par votre compte MyTesla (équivalent à l’app)

Pour rappel, la clé API de Jeedom se trouve dans le menu configuration de Jeedom

Les scripts

Pour chacun des scripts ci-dessous, vous allez devoir renseigner les variables en début de scripts.

 

Obtenir un Token d’authentification

Ce premier script permet d’interroger les serveurs afin de récuperer un Token API REST, il sera indispensable pour la suite des scripts. En effet, les scripts suivants ne nécessitent pas votre email et mot de passe Tesla mais juste le code qui sera considéré comme un Token.
Attention ce Token API Rest est valable 45 jours, il faut donc éxécuter ce script tous les 45 jours afin de récuperer un nouveau Token. Nous verrons cela dans les scénarios ci-dessous.

Voici le script.

<?php

// ************* DEBUT DES VARIABLES
$grant_type="password"; // information lié à l'appel API, NE PAS MODIFIER
$client_id="e4a9949fcfa04068f59abb5a658f2bac0a3428e4652315490b659d5ab3f35a9e"; // information lié à l'appel API, NE PAS MODIFIER
$client_secret="c75f14bbadc8bee3a7594412c31416f8300256d7668ea7e6e7f06727bfb9d220"; // information lié à l'appel API, NE PAS MODIFIER
$email="votreemail@FAI.fr"; //votre identifiant MyTesla
$password="votremotdepasse"; // votre mot de passe MyTesla

$my_file=fopen("/var/www/html/plugins/script/core/ressources/Tesla_Token.json", 'w');
$data_url = "grant_type=$grant_type&client_id=$client_id&client_secret=$client_secret&email=$email&password=$password";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/oauth/token");
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_url);
curl_setopt($ch, CURLOPT_FILE, $my_file);

$response = curl_exec($ch);
curl_close($ch);


?>

 

 

Pensez à récupérer l’identifiant de la commande du Token en cliquant sur les petits engrenages :

 

Obtenir les caractéristiques de votre véhicule Tesla

Ce script contient toutes les informations de votre véhicule comme les options, couleurs, type de jantes, mais aussi sont code identifiant véhicule que nous avons besoin pour les scripts suivant.
Attention, par défaut nous allons interroger le véhicule 0 (le 1er véhicule de la liste), si vous avec plusieurs Tesla enregistrées sur votre compte, il faudra modifier le nombre (+1)

Voici le script

<?php

// --------------------------
// ----------  VEHICLES UPDATE
// --------------------------


// ************* DEBUT DES VARIABLES
$ip = "http://192.168.1.100"; //IP de votre box jeedom
$apikey = "APIJEEDOM"; //Clé API de votre box jeedom
$urltoken = $ip.'/core/api/jeeApi.php?apikey='.$apikey.'&type=cmd&id=18651'; //id jeedom de votre token

//token permettant l'accès à l'API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urltoken);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$token = curl_exec($ch); 
curl_close($ch);

// fichier Json de sortie
$response_json = '/var/www/html/plugins/script/core/ressources/Tesla_Vehicles.json'; 




$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$token));

//execute la requête
$response = curl_exec($ch);
curl_close($ch);

//enregistre le contenu de la page santé dans un fichier json
file_put_contents($response_json, $response);


?>

 

Pensez à récupérer l’identifiant de la commande du Token en cliquant sur les petits engrenages :

 

Obtenir les informations de votre véhicule Tesla

Nous avons maintenant le tolen et le code identifiant du véhicule, nous allons pouvoir commencer à piloter la Tesla.
J’ai intégré dans ce script l’intégralité des retours d’informations. Nous allons récuperer un fichier JSON par type d’état (Climate, Charge, Vehicle, Drive).

Voici le script pour récuperer les 4 JSON.

<?php
// ************* DEBUT DES VARIABLES
$ip = "http://192.168.1.100"; //IP de votre box jeedom
$apikey = "9prhe"; //Clé API de votre box jeedom
$urltoken = $ip."/core/api/jeeApi.php?apikey=".$apikey."&type=cmd&id=18651"; //id jeedom de votre token
$urlvehicle = $ip."/core/api/jeeApi.php?apikey=".$apikey."&type=cmd&id=20079"; //id jeedom de votre vehicle

//token permettant l'accès à l'API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urltoken);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$token = curl_exec($ch); 
curl_close($ch);

//Identifiant du véhicule
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlvehicle);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$vehicle = curl_exec($ch); 
curl_close($ch);

// --------------------------
// ----------  CLIMATE UPDATE
// --------------------------
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles/".$vehicle."/data_request/climate_state");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$token));

$response = curl_exec($ch);
curl_close($ch);

file_put_contents("/var/www/html/plugins/script/core/ressources/climate_state.json",$response);

// --------------------------
// ----------  CHARGE UPDATE
// --------------------------
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles/".$vehicle."/data_request/charge_state");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$token));

$response = curl_exec($ch);
curl_close($ch);

file_put_contents("/var/www/html/plugins/script/core/ressources/charge_state.json",$response);


// --------------------------
// ----------  VEHICLE UPDATE
// --------------------------
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles/".$vehicle."/data_request/vehicle_state");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$token));

$response = curl_exec($ch);
curl_close($ch);

file_put_contents("/var/www/html/plugins/script/core/ressources/vehicle_state.json",$response);


// --------------------------
// ----------  DRIVE UPDATE
// --------------------------

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles/".$vehicle."/data_request/drive_state");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$token));

$response = curl_exec($ch);
curl_close($ch);

file_put_contents("/var/www/html/plugins/script/core/ressources/drive_state.json",$response);

?>

 

 

 

 

 

Puis, nous allons créer 4 scripts pour récuperer les infos de chaque JSON.
Pour chaque information que vous souhaitez récuperer, il faut créer une commande script ayant un type script JSON puis un type Info (Numérique, Autre, Booléen suivant l’information).
Chaque commande lira le fichier JSON que vous devez mettre en Options : http://192.168.1.100/plugins/script/core/ressources/climate_state.json

 

Climate State

Je vous mets les captures écrans de mon script afin de vous donner les informations à reprendre et en dessous la liste des requêtes :
response > inside_temp
response > outside_temp
response > driver_temp_setting
response > passenger_temp_setting
response > is_auto_conditioning_on
response > is_front_defroster_on
response > is_rear_defroster_on
response > fan_status
response > seat_heater_left
response > seat_heater_right

 

 

Charge State

Je vous mets les captures écrans de mon script afin de vous donner les informations à reprendre et en dessous la liste des requêtes :
response > charging_state
response > charge_limit_soc
response > charge_limit_soc_std
response > charge_limit_soc_min
response > charge_limit_soc_max
response > charge_to_max_range
response > battery_heater_on
response > not_enough_power_to_heat
response > max_range_charge_counter
response > fast_charger_present
response > fast_charger_type
response > battery_range
response > est_battery_range
response > ideal_battery_range
response > battery_level
response > usable_battery_level
response > battery_current
response > charge_energy_added
response > charge_miles_added_rated
response > charge_miles_added_ideal
response > charger_voltage
response > charger_pilot_current
response > charger_actual_current
response > charger_power
response > time_to_full_charge
response > trip_charging
response > charge_rate
response > charge_port_door_open
response > motorized_charge_port
response > scheduled_charging_start_time
response > scheduled_charging_pending
response > user_charge_enable_request
response > charge_enable_request
response > eu_vehicle
response > charger_phases
response > charge_port_latch
response > charge_current_request
response > charge_current_request_max
response > managed_charging_active
response > managed_charging_user_canceled
response > managed_charging_start_time

 

 

Vehicle State

Je vous mets les captures écrans de mon script afin de vous donner les informations à reprendre et en dessous la liste des requêtes :
response > vehicle_name
response > car_version
response > locked
response > df
response > pf
response > dr
response > pr
response > odometer
response > sun_roof_percent_open
response > sun_roof_state
response > api_version

 

 

Drive State

Je vous mets les captures écrans de mon script afin de vous donner les informations à reprendre et en dessous la liste des requêtes :
response > shift_state
response > speed
response > latitude
response > longitude
response > heading
response > gps_as_of

Commander des actions sur votre véhicule Tesla

Le script ici permet de faire éxécuter des commandes par la Tesla comme par exemple :
Réveiller la voiture
Verrouiller/déverouiller le véhicule
Ouvrir/Fermer/Dévérouiller la prise de recharge
Allumer/Eteindre la climatisation

Nous verrons dans les scénarios mes cas d’usage.
Le script est commun pour toute les actions, on lui passe juste en parametre le type de commande a éxécuter.
Par exemple
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=wake_up
La commande va réveiller la voiture

Un autre exemple :
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=honk_horn
La commande fera klaxonner la voiture

Voici toute les commandes :
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=wake_up
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=door_unlock
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=door_lock
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=auto_conditioning_start
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=auto_conditioning_stop
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=charge_port_door_open
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=charge_standard
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=charge_max_range
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=honk_horn
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=charge_start
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=charge_stop
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=flash_lights
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=roofopen
http://192.168.1.100/plugins/script/core/ressources/Tesla_Command.php?cmd=roofclose

 

 

Voici le script, pensez à le créer avec le nom Tesla_Command.php si vous voulez réutilisez mes lignes de commandes ci-dessus 😉

<?php

// ************* DEBUT DES VARIABLES
$ip = "http://192.168.1.100"; //IP de votre box jeedom
$apikey = "APIJEEDOM"; //Clé API de votre box jeedom
$urltoken = $ip."/core/api/jeeApi.php?apikey=".$apikey."&type=cmd&id=18651"; //id jeedom de votre token
$urlvehicle = $ip."/core/api/jeeApi.php?apikey=".$apikey."&type=cmd&id=20079"; //id jeedom de votre vehicle

//token permettant l'accès à l'API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urltoken);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$token = curl_exec($ch); 
curl_close($ch);

//Identifiant du véhicule
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlvehicle);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$vehicle = curl_exec($ch); 
curl_close($ch);


$response_json = '/var/www/html/plugins/script/core/ressources/Tesla_Command.json'; //json créé à partir de la réponse

$cmd=$_GET["cmd"]; // on récupere la commande à executer


//initialisation curl
$ch = curl_init();

//active HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_TIMEOUT,5000); // 5000 seconds

curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles/".$vehicle."/command/".$cmd);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, FALSE);



curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$token));

//execute la requête
$response = curl_exec($ch);
curl_close($ch);

//enregistre le contenu de la page santé dans un fichier json
file_put_contents($response_json, $response);
//file_put_contents($cmd_json, $cmd);



//change les droits sur le fichier - écriture
chmod($response_json,0777);

//convertis certains caractères pour ne pas avoir de souci d'affichage dans les tuiles
//correspondance trouvée ici http://www.eteks.com/tips/tip3.html
$bad_letters = array('\u00e0','\u00e2','\u00e4','\u00e7','\u00e8','\u00e9','\u00ea','\u00eb','\u00ee','\u00ef','\u00f4','\u00f6','\u00f9','\u00fb','\u00fc'); //lettres à remplacer
$good_letters   = array('à','â','ä','ç','è','é','ê','ë','î','ï','ô','ö','ù','û','ü'); //lettres de remplacement
$text   = file_get_contents($response_json); //récupération du contenu du fichier
$output  = str_replace($bad_letters, $good_letters, $text); // remplacement des caractères
//echo $output;
//réécris le fichier avec les caractères remplacés
file_put_contents($response_json, $output);


//récupère le contenu du json
$json = file_get_contents($response_json);

//analyse du contenu
$result = json_decode($json, true);

echo utf8_decode(['response']['reason']['result']);
?>​

 

Le virtuel

Pour afficher tout cela, j’utilise un virtuel dans Jeedom. Bien sur a vous de voir ce que vous souhaitez afficher, voici mon usage :

 

 

 

 

Les scénarios

Encore une fois, à vous de voir suivant vos besoins, mais voici quelques exemples de mes usages :

La mise à jour

Ce script est obligatoire pour mettre à jour régulièrement vos informations de votre Tesla. Moi je récupère toutes les 5 minutes les infos :

 

 

La notifications de charge

Certes cela vient en doublon de la notification de l’application, mais on peux compléter par plein d’information.

 

La vérification de limite de recharge

Par défaut, on ne charge pas une Tesla à 100% tout le temps, cela permet d’économiser les batteries. Donc tous les jours je charge à 90%, sauf la nuit entre jeudi et vendredi car le vendredi j’ai besoin des 100% de charges. Voici donc un petit scénario pour faire des rappels.

 

 

 

Vous noterez l’utilisation de la fonction ASK dans le scénario, qui permet une interaction par SMS (un grand merci à DJUL et JEROME84 pour leur super boulot sur JPI et le plugin associé)

 

 

Le dévérouillage de la prise de recharge

Ce petit scénario vient en complément de mon gros scénario matinal (pour lire l’article  tuto-le-scenario-domotique-matinal-avec-jeedom), en effet, dès que je rentre dans le garage et que je suis en partance pour le travail, alors la prise de recharge se déverrouille automatiquement, ce qui m’évite de sortir ma clé.

 

Le petit tweet sur le bilan du mois

Un petit scénario pour publier le bilan du mois, les km parcourus sur le mois et le nombre de tonnes de CO2 économisé.

avec le plugin IFTT :

 

voici le résultat (spéciale dédicace à Domadoo pour le concours).

 

 

 

Les historiques

Avec Jeedom, la gestion de l’historique est vraiment sympa. je m’en sers beaucoup notamment sur mon miroir connecté pour afficher l’état de la charge et mes consommations.

 

 

 

Ça sert à quoi d’intégrer une Tesla dans la domotique Jeedom

Les voitures Tesla sont les plus gros objets connectés, alors les intégrer dans un système domotique comme Jeedom me semblait indispensable. Comme vous avez pu le voir dans ce tutoriel de mise en place, je m’en sers pour beaucoup de chose plus ou moins sérieuses (gestion de la charge à la publication de tweet…).

L’avantage aussi de cette solution est le NO CLOUD! donc vous n’aurez pas à donner vos identifiants Tesla à un tiers, vous pourrez donc faire de la télémétrie tranquillement et facilement 🙂

J’ai bien conscience que cette intégration via script va freiner quelques ardeurs mais j’ai bien tenté de créer un plugin Jeedom pour faciliter cette gestion mais mes compétences en dev me bloque pas mal pour le moment, j’aurais surtout besoin que quelqu’un m’aide à monter la premiere marche… :p mais je ne désespère pas! j’y arriverai un jour à faire mon premier vrai plugin!

 

 

Voilà, j’espère que la découverte de cette intégration d’une Tesla dans Jeedom vous a plu. N’hésitez pas à poser vos questions et remarques dans les commentaires.

Tags

Julien

Passionné depuis mon plus jeune âge par les nouvelles technologies et doublé d’un acheteur compulsif, j’ai toujours adoré les nouveaux produits HighTech. Je m’aperçois que les « gadgets » deviennent plutôt des outils du quotidien voire du futur, mais le regard de beaucoup de personnes n’évolue pas aussi vite que les technologies. Qui n’a jamais fait face à la fameuse question « Ça sert à quoi? » en montrant sa nouvelle acquisition à son entourage.

26 thoughts on “Tuto : Piloter une Tesla avec la domotique Jeedom”

    1. C’est vrai que cela peut paraitre un peu complexe au premier abord. Dis moi ce que je peux améliorer? As tu lu la présentation de Jeedom que j’avais faite?

      1. C’est juste que je suis absolument incompétent en la matière mais admiratif devant tant de génie informatique !!👏👏

  1. Bonjour. Merci pour ce tuto et bravo !
    La méthode est-elle utilisable pour une BMW électrique (i3, i8, X5 40e…) ? Je suppose qu’il faut trouver les adresses des serveurs et demander un token aussi…

    1. malheureusement chaque voiture et constructeur est différent. par contre, on peux adapter la méthode si on connait l’API. en se moment, je suis en train de faire pour la Zoé de ma femme

  2. Bravo pour le reverse. Pour la partie dev as tu envoyé un mot à Sarakah63 ? Par contre je ne sais pas combien de temps tiendra le reverse vu que les TESLA font leur update en OTA (dont je ne sais pas si on peut bloquer au même titre qu’un smartphone)…

  3. Super. Je vais me faire un script d’alerte lorsque j’oublie de brancher ma tesla le soir. Un autre également pour lancer la charge en fin de nuit pour arriver à 100% à mon heure de départ les jours où j’ai besoin de 100%.

    1. exactement cela! regarde mon scénario sur le chargement, à la fin si la voiture n’est pas branché je suis averti

      Dans le JSON, on récupère le temps de recharge restant mais je ne l’utilise pas encore.

      1. Vu. Merci. Je vais l’adapter légèrement car j’utilise slack pour ma part pour les notifications. Vivement qu’on ait l’Amazon echo ou Google home (cet été a priori !) en France.

      2. Bon, tout fonctionne nickel. J’ai juste dû modifier un peu le script pour les « vehicles » car mon id de voiture était interprété par le PHP comme un grand nombre en notation scientifique… J’utilise le plugin Task Launcher pour programmer l’heure de départ de la mise en charge à 100% pour que la voiture soit prête à l’heure du départ. Je charge à 85% à partir de 23h30 (heures creuses) puis le déclenche les 15 derniers % 2h00 avant le départ prévu (genre 5h du matin pour départ à 7h) grâce au plugin Task Launcher. Pratique car on peut modifier l’heure de déclenchement de la page jeedom via la page pour tél portable par exemple sans aller dans les paramètres du plugin. On peut aussi très facilement mettre on ou off la tâche de l’interface.

        L’alerte de non branchement via Slack est ok aussi.
        Prochaine étape, intégration à Imperihome : j’avais déjà intégré quelques infos basiques de la voiture mais là je vais aussi ajouter la programmation du démarrage de la recharge.

        Encore merci pour tout ce travail !

  4. Tu as de l’humour d’appeler ta nouvelle voiture Survivor.
    Je vais m’atteler à faire la même chose pour BMW Connected Drive en attendant que Désirée ne me soit livrée

  5. Super Tuto ! Un argument de plus pour passer à la Zoe en s’inspirant de ce tuto.

    J’avais une question à propos de la fonction ask JPI.
    Lorsque je réponds par ‘Oui’, j’ai en retour la réponse : ‘Jeedom: Désolé, je n’ai pas compris la demande’
    Comment as-tu modifié JPI pour le traitement de la réponse ?

    Merci.

  6. c est pas mal toutes ces infos 🙂
    pour ma part je me suis pas cassé la tete, j utilise le plugin Leaf 🙂 …. pour la nissan .
    mis a part lancer la charge ou la clim , on est vite limité , mais bon, le principal est là

Laisser un commentaire