Peugeot Citroen DS cars - Connected Car

It would be awesome to have this integration. Unfortunately I’m not up to the task. Does anyone want to try or have managed to make it work?

https://developer-preprod.groupe-psa.com/inc/

Hi,

I think creating an intergration based on that old API isn’t a good idea. It was updated the last time in 2016. There is a new API which is not out for the public yet:
https://developer.groupe-psa.io/

Looks very promissing with a whole new level of possibilities like remote control of the car which wasn’t possible with the old api.

As I further investigated in a french forum, it looks like that the old api isn’t even working properly anymore, since they discontinued it back in 2019 I guess. You can only get some basic informations from your car and telemetric services won’t work anymore.

So at least we can stay hyped for that new API.

I am going to send a ticket to psa. Maybe they already have a release date.

2 Likes

Did you already get a Release Date. Also waiting for rhis

Sadly not, I already sent round about 6 mails to them since my last post. Didn’t receive any information back…

I check the website weekly to see, if there is any change, but till now - nothing.

Hope they push this out soon.

I guess the first thing which changes will be the app for mobile, and after that the API will officially be accessible.
They problably will include more functions to it, as BMW has now with their new mobileapp (at least I hope so …).

Hi !
Some awesome dude with a e208 cracked down on the phone app API and i am really looking forward to get this in an integration (also having one)


It should work on Citroen, Peugeot and Opel Car.
I tried to understand how the oauth2 helper in HA work but integration are way over my skill.

I really hop someone could make a basic custom integration from that for any PSA car

1 Like

I successfully got my credentials Like described on GitHub. But could Not Test the Python Server. Would IT be possible top use the appdaemon Integration to Run the Python Server from flobz?

Another Link for a feedom Plugin:

1 Like

Flobz Python Server ist working Well. But i saw that PSA ist using a mqtt Broker.maybe the easiest and best way is to Connect psa mqtt with HA mqtt?

From what i have read the MQTT client is using the token gathered from the API to authenticate with PSA MQTT broker.
It therefor require a special type of MQTT client, and i don’t believe the one in HA is made for.

Plus they seam to be some control only available through the API. A full implementation, maybe without the sql storage of the trip, look like a better option.

Sadly it look like we don’t have a lot of Python dev with a recent PSA car, and time to implement this right now.

1 Like

I managed to get the data through flobz Server and restful Sensors and commands in HA. For the Moment this is a workaround,but it is ok for me.

What sadden me is the lack of token renewal on this project.
You have to purge the app to avoid it from renewing it early, but also have to get a new one from scratch after a little bit.
With all the helper in HA, i’m sure it could be trivial for someone who know what they are doing to implement it. But we aren’t enough to need this. the dev time isn’t worth it to someone who don’t have a car using this.

@vlycop: Thank you for your feedback and i fully understand it.
That’s ok, i think there are thing with more importance!
Maybe you can give me a hint to optimize the workaround.
The server allows only one request euch minute, thats why it would be cool to combine the json subfolders into one request, i that possible? if yes how can i do that??

The flobz plugin, is not working the expected way. i’ve read that the openhab community already developed a binding.
Maybe anyone can port this to home assistant?

1 Like

New version with self updating token.works great again

In my opinion, better wait for the new API.
I Checked today, but still not published yet.

Car (e208 GT) is arriving very soon now. Time for some preparation ^^
So I have a few questions left unanswered.
Regarding the login data from the APK file backup, does that mean I can use the app OR flobz’, solution or both at the same time?
Does the login keep working/refreshing itself or do I have to redo the login data extraction again and again after specific time periods?

I can answer a few question by myself already. Both work fine in parallel. Login seems to refresh itself if needed by now.

New one: @ds1707 can you paste your restful sensors please? I never tinkered with restful at all yet…

Yes of course i can share my RESTFUL Sensor config.
The API only allows a request every 2 minutes that’s why i am facing the follwing problem.
I wanted to include also other sub directories of the JSON path, to put it in one request, maybe you can solve it.

And here is the config:

  - platform: rest
    name: car_corsa_energy
    json_attributes_path: "$['energy'][0]"
#    json_attributes_path: "$"    
    json_attributes:
#      - battery.current
#      - battery.voltage
      - charging.charging_rate
      - level
      - autonomy
      - updated_at
    resource: http://192.168.17.2:5000/get_vehicleinfo/VIN
#    value_template: '{{ value_json.level }}'
    value_template: '{{ value_json.energy.level }}'
    scan_interval: 750
  - platform: template
    sensors:
      battery_soc:
        friendly_name: 'Batteriestand'
        value_template: "{{ state_attr('sensor.car_corsa_energy', 'level') }}"
        unit_of_measurement: '%'
      autonomy:
        friendly_name: 'Reichweite'
        value_template: "{{ state_attr('sensor.car_corsa_energy', 'autonomy') }}"
        unit_of_measurement: 'km'
rest_command:
  charge_control100:
    url: 'http://192.168.17.2:5000/charge_control?vin=VIN&percentage=100'
  charge_control90:
    url: 'http://192.168.17.2:5000/charge_control?vin=VIN&percentage=90'
  charge_control80:
    url: 'http://192.168.17.2:5000/charge_control?vin=VIN&percentage=80'
1 Like

I tried anything to get it stay in root with it’s dictionary, but no dice. It causes nothing but errors and non working sensors. So I did what you wanted to not do in the end:

configuration.yaml

  - platform: rest
    name: car_208e_energy
    json_attributes_path: "$.energy[0]"
    json_attributes:
      - level
      - autonomy
      - updated_at
    resource: http://192.168.181.50:5000/get_vehicleinfo/FID
    value_template: '{{ value_json.energy[0].level }}'
    scan_interval: 180
  - platform: rest
    name: car_208e_battery
    json_attributes_path: "$.battery"
    json_attributes:
      - current
      - voltage
    resource: http://192.168.181.50:5000/get_vehicleinfo/FID
    value_template: '{{ value_json.battery.current }}'
    scan_interval: 180
  - platform: rest
    name: car_208e_charging
    json_attributes_path: "$.energy[0].charging"
    json_attributes:
      - charging_rate
      - charging_mode
      - plugged
      - status
    resource: http://192.168.181.50:5000/get_vehicleinfo/FID
    value_template: '{{ value_json.energy[0].charging.status }}'
    scan_interval: 180
  - platform: template
    sensors:
      energy_level:
        friendly_name: 'Batteriestand'
        value_template: "{{ state_attr('sensor.car_208e_energy', 'level') }}"
        unit_of_measurement: '%'
      energy_autonomy:
        friendly_name: 'Reichweite'
        value_template: "{{ state_attr('sensor.car_208e_energy', 'autonomy') }}"
        unit_of_measurement: 'km'
      battery_current:
        friendly_name: 'Batteriestatus'
        value_template: "{{ state_attr('sensor.car_208e_battery', 'current') }}"
      battery_voltage:
        friendly_name: 'Batterie Wearing'
        value_template: "{{ state_attr('sensor.car_208e_battery', 'voltage') }}"
        unit_of_measurement: '%'
      charging_charging_rate:
        friendly_name: 'Laderate'
        value_template: "{{ state_attr('sensor.car_208e_charging', 'charging_rate') }}"
      charging_charging_rate_kw:
        friendly_name: 'Laderate'
        value_template: "{{ state_attr('sensor.car_208e_charging', 'charging_rate') * 0.29 }}"
        unit_of_measurement: 'kW'
      charging_charging_mode:
        friendly_name: 'Lademodus'
        value_template: "{{ state_attr('sensor.car_208e_charging', 'charging_mode') }}"
      charging_plugged:
        friendly_name: 'Ladegerät Eingesteckt'
        value_template: "{{ state_attr('sensor.car_208e_charging', 'plugged') }}"
      charging_status:
        friendly_name: 'Ladevorgang Status'
        value_template: "{{ state_attr('sensor.car_208e_charging', 'status') }}"
rest_command:
  stop_charge:
    url: "http://192.168.181.50:5000/charge_now/FID/0"
  max_charge_100:
    url: "http://192.168.181.50:5000/charge_control?vin=FID&percentage=100"
  max_charge_90:
    url: "http://192.168.181.50:5000/charge_control?vin=FID&percentage=90"
  max_charge_85:
    url: "http://192.168.181.50:5000/charge_control?vin=FID&percentage=85"
  max_charge_80:
    url: "http://192.168.181.50:5000/charge_control?vin=FID&percentage=80"

Calling the website for information does not fire a refresh from flobz server solution to PSA as far as I can see, so this works quite fine. Ugly, but fine.

Only thing I still wanna have… device_tracker made off the coordinates in the REST output. But this seems to be quite impossible.

EDIT: And I have a working Device Tracker :smiley:

configuration.yaml

  - platform: rest
    name: car_208e_mapdata
    json_attributes_path: "$.last_position.geometry"
    json_attributes:
      - coordinates
    resource: http://192.168.181.50:5000/get_vehicleinfo/FID
    value_template: '{{ value_json.last_position.geometry.coordinates[2] }}'
    scan_interval: 180

automaion.yaml

- id: car_track
  alias: Tracker Car
  trigger:
  - entity_id: sensor.car_208e_mapdata
    platform: state
  - event: start
    platform: homeassistant
  action:
  - data:
      dev_id: car
      battery: '{{states.sensor.energy_level.state}}'
      gps_accuracy: '15'
      gps:
      - '{{state_attr(''sensor.car_208e_mapdata'', ''coordinates'')[1]}}'
      - '{{state_attr(''sensor.car_208e_mapdata'', ''coordinates'')[0]}}'
    service: device_tracker.see
  mode: single

known_devices.yaml

car:
  name: Mein 208e
  icon: mdi:car-hatchback
  picture: /local/peugeot.png
  track: true

image

1 Like

Awesome, thanks for the work on this everyone.

Got the SOC and range of our e208 on my dashboard now… fab!!! :+1: