mirror of
https://github.com/flobz/psa_car_controller.git
synced 2026-08-23 18:06:15 +00:00
110 lines
4.4 KiB
Markdown
110 lines
4.4 KiB
Markdown
# Remote Control of PSA car
|
|
### This is a python program to control a psa car with connected_car v4 api. Using android app to retrieve credentials.
|
|
I test it with a Peugeot e-208 but it works with others PSA vehicles (Citroen, Opel, Vauxhall, DS).
|
|
|
|
With this app you will be able to :
|
|
- get the status of the car (battery level for electric vehicle, position ... )
|
|
- start and stop the charge
|
|
- set a charge threshold to limit the battery level to a certain percentage
|
|
- set a stop hour to charge your vehicle only on off-peak hours
|
|
- control air conditioning
|
|
- control lights and horn if your vehicle is compatible (mine isn't)
|
|
- get consumption statistic
|
|
- visualize your trips on a map
|
|
|
|
The official api is documented [here](https://developer.groupe-psa.io/webapi/b2c/quickstart/connect/#article) but it is not totally up to date, and contains some errors.
|
|
|
|
|
|
## I. Get credentials
|
|
We need to get credentials from the android app.
|
|
We will retrieve these informations:
|
|
- client-id and client-secret for the api
|
|
- some url to login
|
|
|
|
1.1 Download the app on your computer, the original MyPeugeot app can be downloaded [here](https://apkpure.com/fr/mypeugeot-app/com.psa.mym.mypeugeot) for example.
|
|
|
|
1.2 Install requirements :
|
|
|
|
- On debian based distribution you can install some requirement from repos:
|
|
|
|
```sudo apt-get install python3-typing-extensions python3-pandas python3-plotly python3-paho-mqtt python3-six python3-dateutil python3-brotli libblas-dev liblapack-dev gfortran python3-pycryptodome python3-numpy libatlas3-base```
|
|
|
|
- For everyone :
|
|
```pip3 install -r requirements.txt```
|
|
|
|
1.3 run the decoder script : ```python3 app_decoder.py <path to my apk file>```
|
|
|
|
mypeugeot email: <write your mypeugeot email>
|
|
mypeugeot password: <write your mypeugeot password>
|
|
What is the car api realm : clientsB2CPeugeot, clientsB2CDS, clientsB2COpel, clientsB2CVauxhall
|
|
clientsB2CPeugeot
|
|
What is your country code ? (ex: FR, GB, DE, ES...)
|
|
FR
|
|
save config change
|
|
|
|
Your vehicles: {'VINNUBMER': {'id': 'vehicule id'}}
|
|
|
|
1.4 If it works you will have VIN of your vehicles and there ids in the last line. The script generate a test.json file with all credentials needed.
|
|
|
|
## II. Use the app
|
|
|
|
|
|
1. start the app:
|
|
|
|
Start the app with charge control enabled :
|
|
|
|
``python3 server.py -f test.json -c charge_config1.json``
|
|
|
|
At the first launch you will receive a SMS and you will be asked to give it and also give your pin code (the four-digit code that your use on the android app).
|
|
If it failed you can remove the file otp.bin and retry.
|
|
|
|
You can see all options available with :
|
|
``python3 server.py -h``
|
|
|
|
|
|
2. Test it
|
|
|
|
2.1 Get the car state :
|
|
http://localhost:5000/get_vehicleinfo/YOURVIN
|
|
|
|
2.2 Stop charge (only for solution 1)
|
|
http://localhost:5000/charge_now/YOURVIN/0
|
|
|
|
2.3 Set hour to stop the charge to 6am
|
|
http://localhost:5000/charge_control?vin=yourvin&hour=6&minute=0
|
|
|
|
2.4 Change car charge threshold to 80 percent
|
|
http://localhost:5000/charge_control?vin=YOURVIN&percentage=80
|
|
|
|
2.5 See the dashboard (only if record is enabled)
|
|
http://localhost:5000
|
|
|
|
3. Dashboard and stats (Beta)
|
|
|
|
You can add the -r argument to record the position of the vehicle and retrieve this information in a dashboard.
|
|
|
|
``python3 server.py -f test.json -c charge_config1.json -r``
|
|
|
|
You will be able to visualize your trips, your consumption and some statistics:
|
|
|
|
|
|

|
|
You can add an api key for https://home.openweathermap.org/ in your config file.
|
|
In the future version of the dashboard you will be able to see your consumption vs exterior temperature.
|
|
|
|
## API documentation
|
|
The api documentation is described here : [api_spec.md](api_spec.md).
|
|
You can use all functions from the doc, for example :
|
|
```myp.api().get_car_last_position(myp.get_vehicle_id_with_vin("myvin"))```
|
|
## More information
|
|
To analyse the traffics between the app and psa server, you can use mitmproxy.
|
|
You will need the client certificate present in the apk at asssets/MWPMYMA1.pfx
|
|
```bash
|
|
# decrypt the pfx file (there is no password)
|
|
openssl pkcs12 -in MWPMYMA1.pfx -out MWPMYMA1.pem -nodes
|
|
```
|
|
Then you can use mitmproxy for example:
|
|
|
|
```
|
|
mitmproxy --set client_certs=MWPMYMA1.pem
|
|
``` |