Entités pour api Psa car controller

Mon problème

j’ai réussis à installer l’api de psa car controller et tout fonctionne dans celle ci. le problème vient des entités que je récupère pour créer une carte avec les informations de la voiture (C5 aircross) qui reste désespérément en indisponible (elles sont bien toutes présentes dans mes entités)

Le tutoriel d’origine

J’ai suivit ce tuto:

je pense que le soucis peut venir soit de l’ IPofTheSoftware qui n’est pas le bon (j’ai pris l’ip du raspberry pi car celui du soft était au format 0.0.0.0) soit du port 5000 qui reste en désactiver dans les options de l’api mais je ne trouve pas comment l’activer (quel chiffre mettre pour l’activer ?
j’espère avoir donné toutes les infos nécessaire mais n’hésitez pas à m’en demander plus.
Merci d’avance pour votre aide :slight_smile:

Ma configuration


System Health

version core-2021.12.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.63-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4850
Installed Version 1.18.0
Stage running
Available Repositories 934
Installed Repositories 23
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 7.1
update_channel stable
supervisor_version supervisor-2021.12.2
docker_version 20.10.9
disk_total 14.1 GB
disk_used 4.1 GB
healthy true
supported true
board rpi3-64
supervisor_api ok
version_api ok
installed_addons Samba share (9.5.1), Duck DNS (1.14.0), File editor (5.3.3), Mosquitto broker (6.0.1), PSA Car Controller (v2.6.0)
Lovelace
dashboards 3
resources 8
views 8
error /config/UI-lovelace.yaml not found
mode storage

Peux-tu partager ?


J’ai aussi du mal à visualiser correctement les informations de la voiture. Mais moi, ça vient bien du sensor qui a du mal à se mettre à jour je pense.
Il faudrait que tu nous partage les screenshot de la vue et des états dans le panneau de développement.

Merci pour vos réponses.


C’est bien ça que vous me demandez?

C’est bizarre. Partage nous ta configuration peutetre. Voici la mienne si tu veux t’en inspirer:

Configuration :


Basic sensor
sensor PSA:
  - platform: rest
    resource_template: http://[IP]:5000/get_vehicleinfo/[VIN]?from_cache=1
    scan_interval: 60
    timeout: 30
    verify_ssl: false
    name: PSA
    device_class: timestamp
    value_template: "{{ value_json.energy[0].updated_at }}"
    json_attributes:
      - energy
      - kinetic
      - timed_odometer
      - last_position
      - preconditionning

Sensor, switch, automation...
template:
  binary_sensor:
    - name: e208 Alimentation
      unique_id: c5f46109-4cda-49b2-8c11-2a6b5d233aae
      state: >-
        {{ state_attr('sensor.psa', 'energy')[0].charging.plugged }}
      device_class: connectivity
      icon: >-
        {% if state_attr('sensor.psa', 'energy')[0].charging.plugged %}
          {% if state_attr('sensor.psa', 'energy')[0].charging.charging_mode == 'Slow' %}
            mdi:ev-plug-type2
          {% elif state_attr('sensor.psa', 'energy')[0].charging.charging_mode == 'Quick' %}
            mdi:ev-plug-ccs2
          {% endif %}
        {% else %}
          mdi:power-plug-off-outline
        {% endif %}
    - name: e208 Déplacement
      unique_id: dc7f3ff8-ad77-42d4-8523-ddec9dc821e0
      state: >-
        {{ state_attr('sensor.psa', 'kinetic').moving }}
      device_class: moving
      attributes:
        latitude: "{{ state_attr('sensor.psa', 'last_position').geometry.coordinates[1] }}"
        longitude: "{{ state_attr('sensor.psa', 'last_position').geometry.coordinates[0] }}"
  sensor:
    - name: e208 Charge
      unique_id: 8fbe0b19-447e-4e0b-b1c9-2d855437e63f
      state: >-
        {% set value = state_attr('sensor.psa', 'energy')[0].charging.status %}
        {% if value == 'Failure' %}
          Defaut
        {% elif value == 'InProgress' %}
          En charge
        {% elif value == 'Stopped' %}
          Pause
        {% elif value == 'Finished' %}
          Terminé
        {% elif value == 'Disconnected' %}
          Déconnecté
        {% else %}
          Inconnu
        {% endif %}
      icon: >-
        {% set value = state_attr('sensor.psa', 'energy')[0].charging.status %}
        {% if value == 'Failure' %}
          mdi:alert
        {% elif value == 'InProgress' %}
          mdi:play
        {% elif value == 'Stopped' %}
          mdi:pause
        {% elif value == 'Finished' %}
          mdi:stop
        {% else %}
          mdi:power-plug-off-outline
        {% endif %}
    - name: e208 Batterie
      unique_id: acf1f4f5-4180-43ba-9d1c-feb978f6b1eb
      state: >-
        {{ state_attr('sensor.psa', 'energy')[0].level }}
      unit_of_measurement: "%"
      device_class: battery
    - name: e208 Kilometrage
      unique_id: 4fe63f50-67f8-45f7-b148-e1f5554a85c9
      state: >-
        {{ state_attr('sensor.psa', 'timed_odometer').mileage }}
      unit_of_measurement: "Km"
      icon: 'mdi:road-variant'
    - name: e208 Autonomie
      unique_id: 0016a6a1-fed5-4a41-abb3-b1d6ca54bbab
      state: >-
        {{ state_attr('sensor.psa', 'energy')[0].autonomy }}
      unit_of_measurement: "Km"
      icon: 'mdi:map-marker-distance'
    - name: e208 Pré-conditionnement Defaut
      unique_id: a78793bf-1c13-4281-bf9f-d4abaed72d2f
      state: >-
        {% set value = state_attr('sensor.psa', 'preconditionning').failure_cause %}
        {% if value == 'Defect' %}
          Defectueux
        {% elif value == 'DoorOpened' %}
          Porte ouverte
        {% elif value == 'LowBattery' %}
          Batterie faible
        {% elif value == 'LowFuelLevel' %}
          Plus d'essence
        {% elif value == 'TooManyUnusedProg' %}
          Erreur de programmation
        {% else %}
          Inconnu
        {% endif %}
      icon: >-
        {% set value = state_attr('sensor.psa', 'preconditionning').failure_cause %}
        {% if value == 'Defect' %}
          mdi:information
        {% elif value == 'DoorOpened' %}
          mdi:information
        {% elif value == 'LowBattery' %}
          mdi:information
        {% elif value == 'LowFuelLevel' %}
          mdi:information
        {% elif value == 'TooManyUnusedProg' %}
          mdi:information
        {% else %}
          mdi:information-off
        {% endif %}
    - name: e208 Pré-conditionnement
      unique_id: b7c7350c-32ba-495a-aff0-7b88c2a134d5
      state: >-
        {{ state_attr('sensor.psa', 'preconditionning').air_conditioning.status }}
    - name: e208 Puissance de charge
      unique_id: e30a2bf6-3211-4859-abf1-17aa5f132ba6
      state: >-
        {{ state_attr('sensor.psa', 'energy')[0].charging.charging_rate * 0.163 }}
      unit_of_measurement: "kWh"
      icon: mdi:speedometer
############################################################################################################
    - name: e208 Parcouru
      unique_id: 7348f2e2-851f-4dc3-890f-4c73f571fb7e
      state: >-
        {% if is_state('binary_sensor.e208_alimentation', 'on') %}
          {{ states('sensor.e208_autonomie') }}
        {% else %}
          {{ (states('sensor.e208_parcouru')) - (states('sensor.e208_kilometrage') - state_attr('sensor.beta_test_timestamp', 'km')) }}
        {% endif %}
      attributes:
        km: >
          {% if is_state('binary_sensor.e208_alimentation', 'on') %}
            {{ states('sensor.e208_kilometrage') }}
          {% else %}
            {{ state_attr('sensor.e208_parcouru', 'km') }}
          {% endif %}
      unit_of_measurement: "Km"
      icon: 'mdi:map-marker-right'



############################################################################################################
    - name: e208 Fin de charge estimée
      unique_id: c249f813-62dc-474d-bb9f-f94220636f87
      state: >-
        {% set value = state_attr('sensor.psa', 'energy')[0].charging.status %}
        {% if value == 'InProgress' %}

          {% set value = state_attr('sensor.psa', 'energy')[0].charging.remaining_time %}
          
          {% if value.find("H") > 0 %}
            {% set hr = value[value.find("T")+1:value.find("T")+ 3] %}
            {% if hr[1:2] == "H"  %}
              {% set hr = "0" + hr[0] %}
            {% endif %}
          {% else %}
            {% set hr = "00" %}
          {% endif %}

          {% if value.find("M") > 0 %}
            {% set mn = value[value.find("M")-2:value.find("M")] %}
            {% if mn[0:1] == "H" or mn[0:1] == "T" %}
              {% set mn = "0" + mn[1] %}
            {% endif %}
          {% else %}
            {% set mn = "00" %}
          {% endif %}

          {% set result = hr + ":" + mn %}

          {% if result == "00:00" %}
            {{ result }}
          {% else %}
            {{ as_datetime((now() + timedelta( hours = int(hr), minutes = int(mn) )).isoformat()).strftime("%H:%M") }}
          {% endif %}

        {% else %}
          Déconnecté
        {% endif %}
      icon: "mdi:timer-outline"




automation:
  - id: "63a2f136-91ad-4fb7-8f75-0644db525be5"
    alias: "e208 GPS Tracking"
    trigger:
      - platform: state
        entity_id: binary_sensor.e208_deplacement
        attribute: latitude
      - platform: state
        entity_id: binary_sensor.e208_deplacement
        attribute: longitude
    condition: []
    action:
      - service: device_tracker.see
        data:
          dev_id: "e208"
          battery: "{{ state_attr('sensor.psa', 'energy')[0].level }}"
          gps:
            - "{{ state_attr('sensor.psa', 'last_position').geometry.coordinates[1] }}"
            - "{{ state_attr('sensor.psa', 'last_position').geometry.coordinates[0] }}"



switch:
  - platform: command_line
    switches:
      e208_clim:
        command_on: curl -s "http://[IP]:5000/preconditioning/[VIN]/1"
        command_off: curl -s "http://[IP]:5000/preconditioning/[VIN]/0"
        command_state: 'curl -k --silent "http://[IP]:5000/get_vehicleinfo/[VIN]?from_cache=1"'
        value_template: >
          {{ value_json.preconditionning.air_conditioning.status == 'Enabled' }}
        icon_template: >-
          {% set value = value_json.preconditionning.air_conditioning.status %}
          {% set switch = states('switch.e208_clim') %}
        
            {% if value == 'Enabled' %}
              mdi:car-defrost-front
            {% elif value == 'Disabled' or value == 'Finished' %}
              mdi:air-conditioner
            {% else %}
              mdi:alert
            {% endif %}

        command_timeout: 180

rest_command:
  maj:
    url: http://[IP]:5000/wakeup/[VIN]

script:
  e208_maj:
    alias: e208 Rafraichir
    sequence:
      - data: {}
        service: rest_command.maj

Lovelace

  - title: '208'
    path: '208'
    icon: mdi:car-sports
    badges: []
    cards:
      - type: vertical-stack
        cards:
          - type: picture
            image: /local/images/e208.png
            tap_action:
              action: none
            hold_action:
              action: none
          - type: glance
            entities:
              - entity: sensor.e208_kilometrage
              - entity: binary_sensor.e208_deplacement
              - entity: sensor.e208_autonomie
            show_name: true
            state_color: true
          - type: entities
            entities:
              - entity: sensor.entree_frostrisk
              - entity: switch.e208_clim
                secondary_info: last-updated
              - entity: sensor.e208_pre_conditionnement_defaut
              - entity: script.e208_maj
              - entity: sensor.release_psa
      - type: map
        entities:
          - entity: zone.home
          - entity: zone.travail_benjamin
          - entity: zone.travail_celine
          - entity: device_tracker.e208
        hours_to_show: 18
      - type: vertical-stack
        cards:
          - type: gauge
            entity: sensor.e208_batterie
            min: 0
            max: 100
          - type: glance
            entities:
              - entity: binary_sensor.e208_alimentation
              - entity: sensor.e208_charge
              - entity: sensor.e208_puissance_de_charge
            state_color: true
            show_name: true
          - type: entities
            entities:
              - entity: sensor.e208_temps_restant_de_charge
          - type: history-graph
            entities:
              - entity: sensor.e208_parcouru
              - entity: sensor.e208_autonomie
            hours_to_show: 24
            refresh_interval: 0

merci j’ai pu solutionner mon soucis. tout fonctionne maintenant :slight_smile:

Bonjour, je me permets de faire appel à vos connaissances concernant le plug-in PSA.

J’ai pu faire l’installation et tout fonctionne correctement, cependant il y a régulièrement des défauts de connexion.
Et j’ai remarqué que cela venait de quand il fallait que je rentre le code PIN à quatre chiffres sur l’application smartphone.
Il semblerait que le plug-in sous home assistant Ne gère pas cela ?
Avez-vous également ce problème ?
Comment gérez vous pour le code pin lorsque qu’il est demandé ?

Merci à vous

Marque le post qui t’as aidé comme solution.

Merci

:hacf:

Salut,
Après une restauration d’une sauvegarde, impossible de demarrer PSA Car controler.
J’ai desinstallé, restauré des savergardes ou autre, bien configurer le sur 5000 mais impossible a lancer.
Il avait pourtant bien fonctionné jusqu’a present…
image
Des idées ?

Salut à tous,
Pas d’avis sur mon pb ?
J’ai réinstallé l’addon mais rien n’y fait !
J’ai refait le fichier configuration.yaml qui semble correct.



Regarde mon message, je pense que sa arrangerais ton problème.

1 « J'aime »

Tu es un génie !!!
Je cherche depuis lundi et maintenant ça fonctionne.
J’ai déjà vidé le cache, redémarré mais pas débranché le PI. :clap:

2 « J'aime »

Bonjour,
AsthomV, pourrais tu dire comment tu as configuré ton C5 pour que cela fonctionne ?
J’ai un e208 et une C5.

  • La 208 j’arrive à configurer.
  • La C5 seule impossible à remonter les infos.
  • Et alors les 2 ensemble…

Bonjour,

Désolé je ne suis pas souvent sur le forum.
Voilà ce que j’ai du mettre pour le C5 dans les sensors:

# C5  
  - platform: rest
    name: c5
    resource: http://xxx.xx.xx.xx:5000/get_vehicleinfo/VOTREVIN?from_cache=1
    scan_interval: 5
    timeout: 30
    value_template: 'OK'
    json_attributes:
     - energy
     - timed_odometer
     - battery
     - last_position
  - platform: template
    sensors:
      c5_battery_voltage:
        friendly_name: " Tension de batterie"
        unit_of_measurement: "V"
        value_template: '{{ states.sensor.c5.attributes["battery"]["voltage"] * 4 }}'
      c5_battery_level:
        friendly_name: "Niveau de batterie"
        unit_of_measurement: "%"
        value_template: '{{ states.sensor.c5.attributes["energy"][0]["level"] }}'
      c5_battery_autonomy:
        friendly_name: "Autonomie"
        unit_of_measurement: "km"
        value_template: '{{ states.sensor.c5.attributes["energy"][0]["autonomy"] }}'
      c5_fuel_autonomy:
        friendly_name: "Autonomie essence"
        unit_of_measurement: "km"
        value_template: '{{ states.sensor.c5.attributes["energy"][1]["autonomy"] }}'
      c5_charging_status:
        friendly_name: "Statut de charge"
        value_template: '{{ states.sensor.c5.attributes["energy"][0]["charging"]["status"] }}'
      # Uncomment for miles instead of km
      c5_mileage:
        friendly_name: "Kilometrage"
        unit_of_measurement: "km"
        value_template: "{{ ((state_attr('sensor.c5', 'timed_odometer')['mileage']) ) | round(2)}}"
      c5_locationlatitude:
        friendly_name: "latitudec5"
        value_template: 
             "{{ ((state_attr('sensor.c5', 'last_position').geometry.coordinates[0]) ) }}"
      c5_locationlongitude:
        friendly_name: "longitudec5"
        value_template:
             "{{ ((state_attr('sensor.c5', 'last_position').geometry.coordinates[1]) ) }}"

C’était le plus compliqué à trouver car les emplacements des informations ne sont pas les mêmes que les autres véhicules électriques. J’ai ajouté également l’autonomie essence.
J’espère que ça t’aidera!

et ça dans le fichier config:

# c5 WakeUp
rest_command:
  c5_wakeup:
    url: http://xxx.xx.xx.xx:5000/wakeup/VOTREVIN

Merci.
Pour le fichier à mettre dans les sensors. Tu as mis dans les 2 ?
image

Et dans le configuration.yaml tu as mis que ça ?
image

Mais j’ai tj une erreur bizarre qui fait référence au pourcentage de batterie.

Alors il y a ça en plus dans le config qui va solutionner ton problème je pense:

  # c5 communication
switch:
  - platform: command_line
    switches:
      c5_change_threshold:
        friendly_name: "Seuil fin charge (100%-->80%)"
        command_on: curl -s "http://xxx.xx.xx.xx:5000/charge_control?vin=VOTREVIN&percentage=80"
        command_off: curl -s "http://xxx.xx.xx.xx:5000/charge_control?vin=VOTREVIN&percentage=100"
      c5_change_charge_hour:
        friendly_name: "fin de charge à 7h26"
        command_on: curl -s "http://xxx.xx.xx.xx:5000/charge_control?vin=VOTREVIN&hour=7&minute=26"
        command_off: curl -s "http://xxx.xx.xx.xx:5000/charge_control?vin=VOTREVIN&hour=0&minute=0"
      c5_clim:
        friendly_name: "Preconditionnement"
        command_on: curl -s "http://xxx.xx.xx.xx:5000/preconditioning/VOTREVIN/1"
        command_off: curl -s "http://xxx.xx.xx.xx:5000/preconditioning/VOTREVIN/0"

Tu peux changer l’heure de fin de la charge programmé bien sûr (moi 7h26)

Merci je n’ai plus d’erreur…
Et pour le fichier des sensor ?
Tu as mis dans les 2 ?
image

moi je n’ai pas le dossier sensor. C’est toi qui l’a créé? normalement c’est le sensor.yaml à remplir uniquement. Tout fonctionne ou il te manque encore des choses?

Il 'y a pas d’obligation à avoir un fichier séparé, ni avoir un répertoire. ça dépends des directives !include_dir_named ou !include contenues dans le configuration.yaml
Par contre, il faut éviter de mélanger les méthodes, sinon c’est vite le souci