Flodu31 / HomeAssistant-PeugeotIntegration

Integration between Peugeot API and Home Assistant

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

HomeAssistant - Peugeot Integration

About

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:

image

Pre-requirements

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:

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 :)

Configuration

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.

User Interface / Dashboard

You should now be able to see these entities:

image

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:

image

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 :)

About

Integration between Peugeot API and Home Assistant