Aller au contenu
flobz

Controle du véhicule via l'API peugeot

Messages recommandés

Bonjour,
J'ai développé une application pour contrôler ma e208.
L'API utilisé est celle de l'application mypeugeot android.

Voici le lien :
https://github.com/flobz/psa_car_controller

 

L'application Android doit être patché pour permettre de la sauvegarder et ainsi récupérer les données, vous pouvez récupérer l'app MyPeugeot patché à l'adresse suivante:

https://megafile.cc/d/1JP8/mypeugeot-patched.apk

 

Modifié par flobz

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,
Beau travail.
Par contre c'est très compliqué a utiliser.
Quelles sont les informations qui doivent être récupérées de l'application mypeugeot ? Le token ayant une durée de vie plutôt courte ?

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 48 minutes, flobz a dit :

Bonjour,
J'ai développé une application pour contrôler ma e208.
L'API utilisé est celle de l'application mypeugeot android.

Voici le lien :
https://github.com/flobz/psa_car_controller

 

Bonjour, 

 

Merci pour le partage !

Petite question pour lancer le débat : la première étape, c'est bien de récupérer le fichier d'installation format APK?

Si oui, pourquoi ne pas le récupérer directement sur le Net ? Là par exemple ou ?

 

Le principe ensuite, c'est bien de "patcher" l'application avant de la réinstaller ? 

Ainsi, de nouvelles fonctions sont disponibles, mais qu'en ligne de commande, c'est bien ça ?

 

Parmi les nouvelles fonctions : récupérer les info (% et pré-conditionnement en cours, j'imagine), stopper la charge, limiter la charge à XX%, arrêter la charge à telle heure. 

Voire d'autres fonctions, parmi celles-ci. C'est bien cela ?   

 

Merci de nous éclairer :)

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Thomas Pré a dit :

Bonjour,
Beau travail.
Par contre c'est très compliqué a utiliser.
Quelles sont les informations qui doivent être récupérées de l'application mypeugeot ? Le token ayant une durée de vie plutôt courte ?

Bonjour,

Il y a le client id, le client secret, pour accéder à l'api et le "remote refresh token" pour contrôler le véhicule.

 

il y a 15 minutes, FFF3347 a dit :

 

Bonjour, 

 

Merci pour le partage !

Petite question pour lancer le débat : la première étape, c'est bien de récupérer le fichier d'installation format APK?

Si oui, pourquoi ne pas le récupérer directement sur le Net ? Là par exemple ou ?

 

Le principe ensuite, c'est bien de "patcher" l'application avant de la réinstaller ? 

Ainsi, de nouvelles fonctions sont disponibles, mais qu'en ligne de commande, c'est bien ça ?

 

Parmi les nouvelles fonctions : récupérer les info (% et pré-conditionnement en cours, j'imagine), stopper la charge, limiter la charge à XX%, arrêter la charge à telle heure. 

Voire d'autres fonctions, parmi celles-ci. C'est bien cela ?   

 

Merci de nous éclairer :)

Oui il faut récupérer l'APK où l'on veut, puis le patcher pour pouvoir sauvegarder et récupérer les données de l’application.

Oui après on peut utiliser toutes les fonctions de l'API. Ainsi que les fonctions de contrôle de véhicule qui sont disponible dans l'application mypeugeot.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @flobz

Effectivement, beau travail. J'étais dans la même démarche d'extraire l'API utilisée par l'Appli MyPeugeot, avec quelques premiers résultats.

Mais là je m'incline : Bravo.

 

Je vais tester.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Lelas a dit :

Bonjour @flobz

Effectivement, beau travail. J'étais dans la même démarche d'extraire l'API utilisée par l'Appli MyPeugeot, avec quelques premiers résultats.

Mais là je m'incline : Bravo.

 

Je vais tester.

 

Merci ! 😀

Partager ce message


Lien à poster
Partager sur d’autres sites

Bien joué !
 

J'étais en train de m'arracher les cheveux sur l'api v2 de PSA en pre-prod.

 

Sais tu si l'impossibilité d'utiliser les lumières ou le klaxon vient de l'état de l'API ? ( qui n'est pas encore disponible pour les end-users d'après le site de Peugeot)

Ou à la voiture elle même qui n'est pas (encore ?) compatible ?

 

En tout cas chapeau et hésites pas à nous faire savoir si tu re travailles / créés des applications autour de cette API !

Partager ce message


Lien à poster
Partager sur d’autres sites



Oui il faut récupérer l'APK où l'on veut, puis le patcher pour pouvoir sauvegarder et récupérer les données de l’application.
 


Il doit bien y avoir possibilité de récupérer ces informations via l'identifiant / mot de passe utilisé sur mypeugeot et du code pin.
Vous n'avez pas réussi a faire cela ?
Je peux essayer de regarder

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 7 heures, Lucas.D a dit :

Sais tu si l'impossibilité d'utiliser les lumières ou le klaxon vient de l'état de l'API ? ( qui n'est pas encore disponible pour les end-users d'après le site de Peugeot)

Ou à la voiture elle même qui n'est pas (encore ?) compatible ?

L'ordre est bien transmit à la voiture mais elle renvoie une erreur 111. Je suppose que cette option doit être activé pour les flottes de véhicules mais pas pour les clients particuliers où alors cela dépend du modèle...

 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Thomas Pré a dit :

Il doit bien y avoir possibilité de récupérer ces informations via l'identifiant / mot de passe utilisé sur mypeugeot et du code pin.
Vous n'avez pas réussi a faire cela ?
Je peux essayer de regarder

Je ne vois pas trop ce que vous voulez dire... Lors de la première connexion à l'application, un client-id et un client-secret sont générés (protocole oauth2) pour récupérer ces informations il y a deux façon pour moi:

  • analyser les échange entre l'app et le serveur avec un proxy
  • récupérer ces informations dans les données de l'app

Vous voyez une autre façon ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, je me disais que si on trouve comment générer le client-id et secret à partir du login/pass, alors ca évite d'extraire cela du backup de l'application bricolée

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 7 heures, Thomas Pré a dit :

Oui, je me disais que si on trouve comment générer le client-id et secret à partir du login/pass, alors ca évite d'extraire cela du backup de l'application bricolée

C'est très simple il suffit que Peugeot nous ouvre son API.
Les client_id et client_secret sur les anciennes API sont donnés lors de la création d'une application sur le site de PSA, donc ce n'est pas lié au client dans le sens compte MyPeugeot.

 

Donc une fois que l'on aura accès à la création de compte développeur on pourra fournir nos propres client_id et client_secret mais en attendant on utilise ceux de l'app.

 

Peut être que les APIs d'authentification actuels sont déjà cablés mais si c'est le cas je n'ai pas réussi à utiliser le client_id de mon application (link vers le panel de gestion de l'api dev: https://developer.groupe-psa.com/inc/). 

 

Un peu de doc que j'avais parcouru pour mes expérimentations https://developer-preprod.groupe-psa.com/inc/node/1159.
Attention les deux liens ne vont pas ensemble chacun donne des informations sur des services dans des états différents.

 

@flobz N'hésites pas à me corriger si je me trompe.

Modifié par Lucas.D

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans ce cas, le client-id et secret sont hardcodés dans mypeugeot et ne changent pas (peut être suite a une maj).

Quand est il du refresh token qui est forcément a durée de vie limitée ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne m'y connais pas trop en python, mais une fois qu'on a le client-id et le secret, on peut obtenir un refresh-token et access-token à l'aide d'un client oauth2.

Si le client-id et secret sont intégrés dans mypeugeot c'est plus facile.
Si ils sont pas dedans, il faut trouver quelle api permet de les récupérer via login/pass du compte Peugeot

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, Thomas Pré a dit :

Dans ce cas, le client-id et secret sont hardcodés dans mypeugeot et ne changent pas (peut être suite a une maj).

Quand est il du refresh token qui est forcément a durée de vie limitée ?

Soit c'est hardcodé soit Peugeot à fait quelque chose à sa sauce vu que c'est une application qui a l'air d'être réalisée en interne. Toujours est il qu'en suivant les liens et infos de @flobz on arrive à les sortir de MyPeugeot mais non sans mal.

 

En tout cas sur les liens que j'ai mis dans mon précédent message, on a la possibilité de créer un compte gratuitement et de déclarer une application. Ce qui nous donne un client_id et un client_secret :
image.png.9b3019614df6893fbcdb4c603732b574.png

 

Le problème c'est que les applications doivent souscrire à des APIs sinon elles ne peuvent pas les utiliser. Mais vu que MyPeugeot utilise des liens vers l'API v4 qui n'a pas l'air d'être sélectionnable dans la liste des abonnement disponible pour mon application il me semble impossible de l'utiliser avec notre propre client_id.

Modifié par Lucas.D

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement Peugeot ne propose pas le service "connected car v4" pour les développeurs.

Et même si il le faisait on ne pourrait pas contrôler son véhicules. Les commandes à distances utilisent un système d'authentification plus complexe avec un otp que l'on reçoit par sms...

Le refresh token peut changer quand on renouvelle l'acces token mais mon appli le  sauvegare dans le fichier de configuration json

 

Modifié par flobz

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 1 minute, flobz a dit :

Effectivement Peugeot ne propose pas le service "connected car v4" pour les développeurs.

Et même si il le faisait on ne pourrait pas contrôler son véhicules. Les commandes à distances utilisent un système d'authentification plus complexe avec un otp que l'on reçoit par sms...

Le refresh token peut changer quand on renouvelle l'acces token mais mon appli le  sauvegare dans le fichier de configuration json

 

Il serait plus exact de dire qu'elle n'est pas encore disponible

image.thumb.png.fca4a2bb4295bb34896c602082e5d470.png

source

Partager ce message


Lien à poster
Partager sur d’autres sites
Effectivement Peugeot ne propose pas le service "connected car v4" pour les développeurs.
Et même si il le faisait on ne pourrait pas contrôler son véhicules. Les commandes à distances utilisent un système d'authentification plus complexe avec un otp que l'on reçoit par sms...
Le refresh token peut changer quand on renouvelle l'acces token mais mon appli le  sauvegare dans le fichier de configuration json
 
J'avais décompiler l'application Android et c'est un vrai foutoir l'authentification (le reste aussi), donc je veux bien vous croire

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir à tous,

 

J'ai réussi à mettre en œuvre l'API V4 proposée par @flobz en utilisant sa méthode de backup de l'appli.

Quelques éléments sur ce point si cela peut aider d'autres personnes:

  • J'ai utilisé un émulateur android sur windows, pour éviter de désinstaller l'appli de mon téléphone (j'ai eu du mal à obtenir un fonctionnement complet des services connectés, et je ne voulais pas prendre le risque de les perdre)
    => Emulateur de Android Studio, Target Android 9.0 (Goggle play), CPU x86, Phone : Pixel 4
    Nota: on peut activer le mode développeur sur cet émulateur.
  • J'ai installé la version 1.25.2 de l'appli MyPeugeot, et j'ai utilisé la version "patchée" postée par flobz (en tête de ce post)
    Cela gagne quelques étapes (et en plus, ma version patchée refusait de s'installer ??)
  • Après installation de l'appli version patchée, il faut bien valider l'installation avec le téléphone de référence associé au compte MyPeugeot.(Sinon, il manque un fichier dans le backup)
  • Lors de l'étape " 2. Retrieve credentials in the backup ", il doit être préférable de lancer le script python3 sur une machine linux.
    Je l'ai fait sur windows, mais il y a des soucis avec des noms de fichier invalides.
    J'ai réussi à passer cette étape sur windows en "bricolant" le fichier "app_decoder.py"

J'ai bien obtenu le fichier "test.json" avec les "credentials"

 

J'y ai retrouvé des valeurs que j'avais obtenu dans mes propres recherches.

  • Les codes client-id et client-secret. Que j'avais effectivement considérés comme étant fixes.
  • La valeur customer_id (qui est propre au propriétaire de la voiture, mais que l'on peut obtenir par une API)
  • Et la valeur "vehicule_id" sur 225 caractères.

Mais les autres sont différents.
En particulier le champ "remote_refresh_token"

En fait, j'avais travaillé en api "connected_car" V3, car c'était la version utilisée par l'appli MyPeugeot V1.23.4

La méthode d'analyse que j'avais utilisé ne fonctionnait plus sur les versions ultérieures.

 

flobz: tu pourrais me dire si tes valeurs sont identiques pour les 2 paramètres client-id et client-secret ?
Comme cela, on sera fixé. (J'ai masqué des valeurs par x)

    "client_id": "1eexxxxx-xxxx-xxxx-xxxx-xxxxxxxx2530",
    "client_secret": "T5tPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8vU1",

 

Tu penses que le champ "remote_refresh_token" doit être extrait du backup de l'appli ?

 

Lelas

Modifié par Lelas

Partager ce message


Lien à poster
Partager sur d’autres sites

@LelasC'est vrai que c'est une bonne idée de faire un retour.

 

il y a 34 minutes, Lelas a dit :
  • J'ai utilisé un émulateur android sur windows, pour éviter de désinstaller l'appli de mon téléphone (j'ai eu du mal à obtenir un fonctionnement complet des services connectés, et je ne voulais pas prendre le risque de les perdre)
    => Emulateur de Android Studio, Target Android 9.0 (Google play), CPU x86, Phone : Pixel 4

J'ai utilisé les mêmes outils suite à l'installation de Android Studio. Mis à part le temps de téléchargement avec ma co aucun soucis la dessus.

 

 

il y a 34 minutes, Lelas a dit :
  • J'ai installé la version 1.25.2 de l'appli MyPeugeot, et j'ai utilisé la version "patchée" postée par flobz (en tête de ce post)
    Cela gagne quelques étapes (et en plus, ma version patchée refusait de s'installer ??)

 Pour ma part le patch fonctionne sur la version 1.26.1 que l'on peut récupérer grâce à cet outil de téléchargement d'APK. Pour le refus d'installation tu as surement dû rencontrer l'erreur suivante si tu lances l'installation de l'APK depuis un terminal avec adb :

 INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2

Si c'est le cas c'est parce qu'il faut changer deux choses dans le `AndroidManifest.xml` :

  1. "android:allowBackup" qui doit être passer à vrai (comme dit dans le tutoriel).
  2. "android:extractNativeLibs" qui doit aussi être passer à vrai pour faire disparaître l'erreur précédente

 

 

Citation
  • Après installation de l'appli version patchée, il faut bien valider l'installation avec le téléphone de référence associé au compte MyPeugeot.(Sinon, il manque un fichier dans le backup)

Si on lance directement des requêtes après connection et synchronisation (en rentrant le code envoyé par SMS) sans rien executer les codes ne semblent pas être récupérés. Par contre après avoir lancé un préconditionnement les informations semblent être présentes (client_id, client_secret, etc).

 

Citation
  • Lors de l'étape " 2. Retrieve credentials in the backup ", il doit être préférable de lancer le script python3 sur une machine linux.
    Je l'ai fait sur windows, mais il y a des soucis avec des noms de fichier invalides.
    J'ai réussi à passer cette étape sur windows en "bricolant" le fichier "app_decoder.py"

L'utilisation du WSL simplifie beaucoup le travail si on est habitué au terminal Linux, et évite les problèmes liés à Windows. Un problème persiste cependant, le script python tente de chercher le client_id et le client_secret à la racine du JSON qu'il génère temporairement, alors qu'ils semblent être présent en dessous du VIN dans l'arborescence (un changement entre la 1.25 et la 1.26 ?).

 

Les deux valeurs que j'ai pu observer sont identiques. Donc les client_id que l'on utilise ne sont pas fait pour notre usage et nous utilisons les identifiants propres à l'application MyPeugeot.

Je vais donc arrêter de les utiliser car il ne sont pas propre à mon compte (le doute régnait encore avant pour moi).

Et je vais attendre le déploiement de l'API V4 pour les End Users, afin de pouvoir me doter de mes propres clés et éviter de contourner trop les règles de sécurité en vigueurs (est ce que ça peut amener des problèmes légaux aussi ?).

 

Libre à vous de faire ce que vous voulez.

Modifié par Lucas.D

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 7 heures, Lucas.D a dit :

Les deux valeurs que j'ai pu observer sont identiques. Donc les client_id que l'on utilise ne sont pas fait pour notre usage et nous utilisons les identifiants propres à l'application MyPeugeot.

Je vais donc arrêter de les utiliser car il ne sont pas propre à mon compte (le doute régnait encore avant pour moi).

Et je vais attendre le déploiement de l'API V4 pour les End Users, afin de pouvoir me doter de mes propres clés et éviter de contourner trop les règles de sécurité en vigueurs (est ce que ça peut amener des problèmes légaux aussi ?).

 

Libre à vous de faire ce que vous voulez.

 

Merci à tous pour vos précisions : je me suis arrêté au téléchargement d'Android Studio pour lancer ADB... :)

 

Concernant ta remarque Lucas, une (vraie) question STP : est-ce que cela signifie que grâce à toutes ces manipulations, quand on exécute les scripts, les serveurs Peugeot pensent/croient que ce sont des ordres envoyés depuis notre smartphone Android ? 

En quoi, à tes yeux/à vos yeux cela pose souci ?

Quand par exemple je donne mes identifiants pour je ne sais quel portail à IFTTT pour exécuter des "taches" via des scripts, c'est plus ou moins la même chose, non ? Idem quand je donne à mon Domoticz mes identifiant ENEDIS pour récupérer mes données LINKY : une machine se fait passer pour une autre (ou une machine se fait passer pour un utilisateur).

 

A mes yeux, tant que c'est l'utilisateur/propriétaire du bien qui le fait, aucun problème : c'est le principe d’une API ouverte (ou pas, vous pouvez me dire).

 

Enfin, concernant le data opérateur, évoqué sur d'autres posts proche du sujet, personnellement c'est le dernier de mes soucis. 
De plus, je ne crois pas en une censure de Peugeot ou Bouygues si on abuse (on parle de quelques octets...) ou qu'il y aura des surcouts possible. Enfin, rien n'indique une limite, ni même le manuel (page 29). Les conditions générales peut être ?

 

Modifié par FFF3347

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour vos retour !

Nous avons effectivement les même client-id et client-secret, ce qui est très surprenant.

J'ai désinstallé plusieurs fois l'application. Je n'ai pas eu de soucis, une fois réinstallé je peut directement accéder aux services.

Je vais rajouter dans le README.md, il faut effectivement ajouter "android:extractNativeLibs".

Pouvez vous me donner plus de détail sur vos erreurs sur Github où par message privé pour que je les corriges ?

 

Il y a un quota de requête par jour. Que j'ai dépassé en faisant une requête par minute. Je vais le changer à deux minutes.

 

 

 

Modifié par flobz

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 4 heures, FFF3347 a dit :

Concernant ta remarque Lucas, une (vraie) question STP : est-ce que cela signifie que grâce à toutes ces manipulations, quand on exécute les scripts, les serveurs Peugeot pensent/croient que ce sont des ordres envoyés depuis notre smartphone Android ? 

En quoi, à tes yeux/à vos yeux cela pose souci ?

Le problème c'est que le client_id et le client_secret sont propres à l'application. Quand tu utilises une API PSA, tu commences par créer un compte sur leur plateforme développeur, puis tu déclares une application. Cette déclaration te permet juste de donner un nom et une description (ainsi que de préciser des redirects URI valident mais ça c'est un autre sujet) et en retour tu reçois de la part de la plateforme développeur les [ client_id & client_secret ].

 

Ces identifiants te permettent de communiquer à l'API que c'est bien l'application portant le nom indiqué et appartenant au compte développeur X qui est en train de faire cette requête. L'autre problème qui se pose c'est que sur les APIs présentent sur le site aujourd'hui il faut que les application souscrivent à des formules pour pouvoir utiliser les APIs. Ces formules définissent un maximum de requêtes par heure, par jour ou autre, et il peut exister des versions payantes de souscription qui vont au delà des 100 requêtes par jours que certaines API proposent (un exemple de nombre aléatoire).

 

Donc pour le moment certains d'entre nous somme allez chercher des informations d'identifications appartenant à PSA permettant d'identifier l'application MyPeugeot, et qui a surement un accès illimité en nombre de requêtes aux différentes APIs. Donc on ByPass tous leurs layers de sécu et on utilise notre application en tant que MyPeugeot sur une API qui n'est même pas officiellement disponible. Donc moi je ne veux pas prendre de risque, je viens de m'en rendre compte et j'arrête toute utilisation de ces identifiants qui ne m'appartiennent pas et qui ne sont pas liés à mon compte spécifiquement.

 

Donc le résumé :

  • [ client_id & client_secret ] sont des informations qui permettent d'identifier l'application MyPeugeot sur les APIs de PSA.
  • Les utiliser nous fait passer pour l'application MyPeugeot et on passe complètement à côté des restrictions qu'on est censé avoir. 
  • Tu as le droit d'utiliser l'API mais avec tes propres identifiants et aujourd'hui tu n'en as pas car ce n'est pas encore disponible.

 

Citation

A mes yeux, tant que c'est l'utilisateur/propriétaire du bien qui le fait, aucun problème : c'est le principe d’une API ouverte (ou pas, vous pouvez me dire).

Et le problème vient bien du fait que tu n'es PAS propriétaire des identifiants que tu utilises.

 

Ceci est ma compréhension du sujet qui peut être erronée.

 

Citation

Enfin, concernant le data opérateur, évoqué sur d'autres posts proche du sujet, personnellement c'est le dernier de mes soucis. 
De plus, je ne crois pas en une censure de Peugeot ou Bouygues si on abuse (on parle de quelques octets...) ou qu'il y aura des surcouts possible. Enfin, rien n'indique une limite, ni même le manuel (page 29). Les conditions générales peut être ?

C'est juste des hypothèses, mais je sais que par exemple il existe des carte SIM spécials objets connectés qui offrent la possibilité de se connecter à l'international, chaque pays ayant un ou plusieurs opérateur compatible. Le problème c'est que les coûts de ces cartes sont souvent démentiel pour la capacité qu'elles proposent parce qu'elles se bases sur les tarifs des pays les plus chers. Mais ce ne sont toujours que des hypothèses.

Modifié par Lucas.D

Partager ce message


Lien à poster
Partager sur d’autres sites



Automobile Propre

Automobile Propre est un site d'information communautaire qui est dédié à tout ce qui concerne l'automobile et l'environnement. Les thématiques les plus populaires de notre blog auto sont la voiture électrique et les hybrides, mais nous abordons également la voiture GNV / GPL, les auto à l'hydrogène, les apects politiques et environnementaux liés à l'automobile. Les internautes sont invités à réagir aux articles du blog dans les commentaires, mais également dans les différents forums qui sont mis à leur dispositon. Le plus populaire d'entre eux est certainement le forum voiture électrique qui centralise les discussions relatives à l'arrivée de ces nouveaux véhicules. Un lexique centralise les définitions des principaux mots techniques utilisés sur le blog, tandis qu'une base de données des voitures (commercialisées ou non) recense les voitures électriques et hybrides.

×
×
  • Créer...