Here is a small description to do the integration between your home assistant, and your Peugeot vehicle (Citroën), to have all information in a dashboard:
Use this full external tutorial that describes the entire installation process of this integration, including the PSA Car Controller configuration.
To do this, you need:
- A running Home Assistant with Lovelace installed: https://www.home-assistant.io/lovelace/
- The psa_car_controller (on a dedicated machine or on your home assistant server): https://github.com/flobz/psa_car_controller OR The psa_car_controller plugin available on the Flobz's repo: https://github.com/flobz/psacc-ha/tree/main/psacc-ha
The goal will be to retrive information, from the URL http://yourIP:5000/get_vehicleinfo/yourVIN and http://yourIP:5000/charge_control?vin=yourVIN. It is a JSON, that will be parsed by Home Assistant.
This script will evolve, depending of releases of the psa_car_controller. And my time :)
Edit the file /config/sensor.yaml and add the following code, by replacing the URL with your own:
# Peugeot e2008
- platform: rest
name: peugeot_e2008
resource: http://IPofTheSoftware:5000/get_vehicleinfo/YourVIN?from_cache=1
scan_interval: 60
timeout: 30
value_template: 'OK'
json_attributes:
- energy
- timed_odometer
- battery
- platform: template
sensors:
e2008_battery_voltage:
friendly_name: "Battery Voltage"
unit_of_measurement: "V"
value_template: '{{ states.sensor.peugeot_e2008.attributes["battery"]["voltage"] * 4 }}'
e2008_battery_level:
friendly_name: "Battery"
unit_of_measurement: "%"
value_template: '{{ states.sensor.peugeot_e2008.attributes["energy"][0]["level"] }}'
e2008_battery_autonomy:
friendly_name: "Autonomy"
unit_of_measurement: "km"
value_template: '{{ states.sensor.peugeot_e2008.attributes["energy"][0]["autonomy"] }}'
# Uncomment for miles instead of km
#e2008_battery_autonomy:
#friendly_name: "Autonomy"
#unit_of_measurement: "m"
#value_template: "{{ ((state_attr('sensor.peugeot_e2008', 'energy')[0]['autonomy']) / 1.609) | round(0)}}"
e2008_charging_status:
friendly_name: "Charging Status"
value_template: '{{ states.sensor.peugeot_e2008.attributes["energy"][0]["charging"]["status"] }}'
e2008_mileage:
friendly_name: "Mileage"
unit_of_measurement: "km"
value_template: '{{ states.sensor.peugeot_e2008.attributes["timed_odometer"]["mileage"] }}'
# Uncomment for miles instead of km
#e2008_mileage:
#friendly_name: "Mileage"
#unit_of_measurement: "m"
#value_template: "{{ ((state_attr('sensor.peugeot_e2008', 'timed_odometer')['mileage']) / 1.609) | round(2)}}"
# Peugeot e2008 charge_control
- platform: rest
name: peugeot_e2008_charge_control
resource: http://IPofTheSoftware:5000/charge_control?vin=YourVIN&?always_check=true
scan_interval: 60
timeout: 30
value_template: 'OK'
json_attributes:
- _next_stop_hour
- percentage_threshold
- platform: template
sensors:
e2008_stop_hour:
friendly_name: "Next Stop Time"
value_template: '{{ states.sensor.peugeot_e2008_charge_control.attributes["_next_stop_hour"]}}'
e2008_threshold:
friendly_name: "Threshold"
unit_of_measurement: "%"
value_template: '{{ states.sensor.peugeot_e2008_charge_control.attributes["percentage_threshold"] }}'
Edit the file /config/command_line.yaml and add the following code, by replacing the URL with your own:
# e2008 communication
- switch:
name: e2008_change_threshold
unique_id: e2008_change_threshold
command_on: curl -s "http://IPofTheSoftware:5000/charge_control?vin=YourVIN&percentage=80"
command_off: curl -s "http://IPofTheSoftware:5000/charge_control?vin=YourVIN&percentage=100"
- switch:
name: e2008_change_charge_hour
unique_id: e2008_change_charge_hour
command_on: curl -s "http://IPofTheSoftware:5000/charge_control?vin=YourVIN&hour=5&minute=0"
command_off: curl -s "http://IPofTheSoftware:5000/charge_control?vin=YourVIN&hour=0&minute=0"
- switch:
name: e2008_clim
unique_id: e2008_clim
command_on: curl -s "http://IPofTheSoftware:5000/preconditioning/YourVIN/1"
command_off: curl -s "http://IPofTheSoftware:5000/preconditioning/YourVIN/0"
Edit the file /config/configuration.yaml and add the following code, by replacing the URL with your own:
# e2008 WakeUp
rest_command:
e2008_wakeup:
url: "http://IPofTheSoftware:5000/wakeup/YourVIN"
# e2008 custom charging threshold
e2008_change_charge_threshold:
url: "http://IPofTheSoftware:5000/charge_control?vin=YourVIN&percentage={{ states('input_number.e2008_charge_threshold_slider') | int }}"
method: GET
input_number:
e2008_charge_threshold_slider:
name: Charging threshold
initial: 80
min: 50
max: 100
step: 1
unit_of_measurement: "%"
input_button:
e2008_apply_charge_threshold_button:
name: Set charging threshold
icon: mdi:battery-charging
The first part is to change values and the second part is to wake up the vehicle, every morning at 6 AM and to apply the charging threshold:
- id: '1617352487'
alias: WakeUp e2008
description: ''
trigger:
- platform: time
at: '6:00:00'
condition: []
action:
- service: rest_command.e2008_wakeup
mode: single
- id: '1617352488'
alias: Change charging threshold e2008
description: ''
trigger:
- platform: state
entity_id:
- input_button.e2008_apply_charge_threshold_button
condition: []
action:
- service: rest_command.e2008_change_charge_threshold
data: {}
mode: single
In my customize.yaml file, I also added this:
# Add an entry for each entity that you want to overwrite.
switch.e2008_change_threshold:
assumed_state: false
switch.e2008_change_charge_hour:
assumed_state: false
switch.e2008_clim:
assumed_state: false
Restart the Home assistant.
You should now be able to see these entities:
You can now add a beautiful dashboard, to see your values:
type: entities
entities:
- entity: sensor.e2008_mileage
secondary_info: last-updated
- entity: sensor.e2008_battery_level
secondary_info: last-updated
- entity: sensor.e2008_battery_voltage
secondary_info: last-updated
- entity: sensor.e2008_battery_autonomy
secondary_info: last-updated
- entity: sensor.e2008_charging_status
secondary_info: last-updated
- entity: sensor.e2008_stop_hour
secondary_info: last-updated
- entity: sensor.e2008_threshold
secondary_info: last-updated
- entity: switch.e2008_change_threshold
name: Change Threshold
secondary_info: last-updated
- entity: switch.e2008_change_charge_hour
secondary_info: last-updated
name: Charge before 5AM
- entity: switch.e2008_clim
secondary_info: last-updated
name: Activate Clim
- entity: input_number.e2008_charge_threshold_slider
- entity: input_button.e2008_apply_charge_threshold_button
secondary_info: none
- entity: automation.wakeup_e2008
secondary_info: last-triggered
title: Peugeot e2008
header:
type: picture
image: /local/images/e2008.png
tap_action:
action: none
hold_action:
action: none
show_header_toggle: false
state_color: false
To have a more viewable view of the battery, like this:
Use the following code in your dashboard:
type: gauge
entity: sensor.e2008_battery_level
min: 0
max: 100
name: e2008 Battery
severity:
green: 60
yellow: 40
red: 20
Don't hesitate if you have any remarks/suggestions/questions :)