[PSA automobiles] Recherche développeur

Bonjour à tous,

Je viens vers vous car je ne suis pas capable de réaliser ce projet.

J’ai pris contact avec @oncleben31 qui à développé le projet pour les zoé.

Je suis possesseur d’une DS E-Tense et l’API Peugeot et son custom component fonctionnerait avec toutes les Peugeot et plus particulièrement au 3 sœurs e208, e2008 et DS3 e-tense.
en plus le patron de PSA vient d’annoncer 10 nouveaux véhicules électrique !

Je pense, même si je n’y comprends pas grand choses, que le travail est probablement bien avancé car un ou des développeurs ont déjà fait un projet sur cet API.

Alors si vous avez un peu de temps à consacrer à ce sujet, vous êtes les bien venus !

merci

1 « J'aime »

Je comprends pas ta demande… :sweat_smile:

Qu’est-ce que tu souhaites ? :face_with_monocle:

Alors premièrement je suis un petit contributeur pour l’intégration de la Zoe. Le contributeur principal aujourd’hui c’est @epenet

La demande est un appel pour que quelqu’un essaye de faire une intégration pour les voitures de la marque Peugeot.

Une lib Python semble déjà existante.

Bonjour,
Je suis également intéressé par le projet.

J’ai trouvé ceci sous Jeedom
https://github.com/lelas33/plugin_peugeotcars

Ainsi que 2 autres répertoires GitHub si cela peut faire avancer le chmilblick :wink:
https://github.com/arjanmels/openhab2-addons/releases
https://github.com/flobz/psa_car_controller

A priori les API sont publiques: APIs | developer-preprod.groupe-psa.com/inc

Contrairement à Renault…

Je te sens frustré @epenet :grin:

Oh non - pas du tout :stuck_out_tongue: !

Pour installer l’add-on:

Pour la configuration, cela se passe sur la page de l’add-on.

Une fois réalisé, on peut créer un rest sensor qui va venir se mettre à jour avec les données de l’add-on. On pourra se baser sur ce sensor pour mettre à jour d’autre sensor au besoin et créer un dashboard:


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

Configuration :

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] }}"
    - name: e208 Pré-conditionnement
      unique_id: b7c7350c-32ba-495a-aff0-7b88c2a134d5
      device_class: heat
      state: >-
        {{ state_attr('sensor.psa', 'preconditionning').air_conditioning.status|regex_replace(find='Enabled', replace='on', ignorecase=true)|regex_replace(find='Disabled', replace='off', ignorecase=true) }}
  sensor:
    - name: e208 Charge
      unique_id: 8fbe0b19-447e-4e0b-b1c9-2d855437e63f
      state_class: measurement
      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_class: measurement
      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"
      state_class: total_increasing
      icon: 'mdi:road-variant'
    - name: e208 Autonomie
      unique_id: 0016a6a1-fed5-4a41-abb3-b1d6ca54bbab
      state_class: measurement
      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 %}
          Sans defaut
        {% 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 Puissance de charge
      unique_id: e30a2bf6-3211-4859-abf1-17aa5f132ba6
      state_class: measurement
      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_class: measurement
#      state: >-
#        {% if is_state('sensor.e208_parcouru', 'unavailable') or is_state('binary_sensor.e208_alimentation', 'on') or state_attr('sensor.e208_parcouru', 'km') == "" %}
#          {{ states('sensor.e208_autonomie') }}
#        {% else %}
#          {{ states('sensor.e208_parcouru') - (states('sensor.e208_kilometrage') - state_attr('sensor.e208_parcouru', 'km')) }}
#        {% endif %}
#      attributes:
#        km: >
#          {% if is_state('sensor.e208_parcouru', 'unavailable') or is_state('binary_sensor.e208_alimentation', 'on') or state_attr('sensor.e208_parcouru', 'km') == "" %}
#            {{ states('sensor.e208_kilometrage') }}
#          {% 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"
    initial_state: true
    mode: single
    alias: "e208 GPS Tracking"
    description: "Mettre à jours la position du véhicule"
    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] }}"
  - id: "60015e5a-41e5-41a7-8e40-c9a786a60a12"
    initial_state: false
    mode: single
    alias: "e208 Clim Tracking"
    description: "Detecter le changement d'etat du préconditionnement"
    trigger:
      - platform: state
        entity_id: binary_sensor.e208_pre_conditionnement
    condition:
      - condition: template
        value_template: >-
          {{ states('binary_sensor.e208_pre_conditionnement') !=
          states('switch.e208_clim') }}
    action:
      - service: switch.toggle
        target:
          entity_id: switch.e208_clim



switch:
  - platform: command_line
    switches:
      e208_clim:
        friendly_name: Climatisation
        command_on: curl -s "http://[IP]:5000/preconditioning/[VIN]/1"
        command_off: curl -s "http://[IP]:5000/preconditioning/[VIN]/0"
# must evaluate if command_state can return effectiv car response...
        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 %}
          {% 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.thermal_confort_frostrisk
              - entity: switch.e208_clim
                secondary_info: last-updated
              - entity: sensor.e208_pre_conditionnement_defaut
              - entity: script.e208_maj
      - type: vertical-stack
        cards:
          - type: map
            entities:
              - entity: zone.home
              - entity: zone.travail_benjamin
              - entity: zone.travail_celine
              - entity: device_tracker.e208
            hours_to_show: 18
          - type: entities
            entities:
              - entity: sensor.e208_temps_restant_de_charge
      - 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: history-graph
            entities:
              - entity: sensor.e208_parcouru
              - entity: sensor.e208_autonomie
            hours_to_show: 24
            refresh_interval: 0

« e208_clim » peut activer ou non le préconditionnement.
L’icone « Alimentation » montre le type de charge slow ou fast, et l’icone « Charge » montre le status (play, stop, pause/delay etc)
« Fin de charge estimée » devrait montrer une heure de fin (pas vraiment fonctionnel)
« Risque de gel » Vient d’un autre add-on (Thermal confort via hacs) afin de determiner si on doit dégivrer le parbrise.

Pour information, je cherche de l’aide pour recuperer la distance parcouru entre chaque rechargement. Si quelqu’un passe par là et sais me dépanner… merci :slight_smile:

Bonjour,
J’ai tenté d’installer mais sans grand succès…
Une fois le depôt installer, je rentre mes identifiant, ça valide puis on arrive sur la page avec le code qu’on est sensé recevoir par sms (Config OTP) mais rien du tout… malgré plusieurs tentatives, aucun SMS en vu…

sur la page log j’ai ça :

2022-04-02 14:54:17,831 :: INFO :: update_data
2022-04-02 15:00:23,511 :: INFO :: save config change
2022-04-02 15:00:25,050 :: WARNING :: Can't get car model, please report an issue on github with your car model and first ten letter of your VIN : VF3CU9HP0E
2022-04-02 15:00:25,052 :: INFO ::
Your vehicles: ["{'vin': 'VF3CU9HP0E******', 'vehicle_id': '****************', 'label': '2008', 'brand': 'Peugeot', 'abrp_name': None, 'battery_power': 46, 'fuel_capacity': 0, 'max_elec_consumption': 70, 'max_fuel_consumption': 30}"] 

Mon 2008 est trouver mais une erreur est présente… D’ailleurs, il semblerai que l’apli le prenne pour un e-2008… en revanche aucune trace de ma Ion ???
Quelqu’un saurai m’aidé ?

Salut,
Qu’est ce que tu as mis dans ton scriipt ? Comment tu as fait ?


Merci