Comparer les prix des carburants de vos stations préférées

Bonjour à tous,

Ceci est mon premier article, il fait suite au commentaire de @Christianb233.

N’hésitez pas à me faire des remarques !

Je vous propose de (re)découvrir l’intégration ‹ scrape › de Home Assistant.

  • Scrape, Scraping ???

Le scraping est le simple fait d’extraire des données d’une page web et on va l’utiliser pour récupérer le prix du carburant de plusieurs stations afin de faire quelques économies en ciblant la station la moins chère et l’afficher sur votre dashboard.

J’ai cherché pas mal de site internet qui renseignent les prix du carburant. Celui que j’ai retenu est Carbu.com. Ce site est mis à jour aussi régulièrement que le site officiel du gouvernement.

Après plusieurs jours de suivi de prix entre les deux sites, je me suis rendu compte que les deux sites avaient constamment les mêmes prix affichés.

Le site officiel du gouvernement ne permet pas d’utiliser la plateforme ‹ scrape › car le site ne contient pas d’adresse unique pour chaque station, ce qui est le cas de Carbu.com.

  • Pré-requis

Je pars du principe que vous pouvez accéder aux fichiers de votre serveur tels que ‹ configuration.yaml › ou tout autre fichier, dossier si vous utilisez une configuration fractionner, sinon allez jeter un œil sur cet article ou cet article.

  1. Récupération des adresses web de vos stations d’essences préférées

Rendez-vous sur le site Carbu.com, renseigner votre localité, votre carburant puis cliquez sur « Comparez ! ».

En dessous de la carte de France (qui est agrandi sur votre ville), est apparue la liste des stations essences de votre ville et de votre région.

Pour chaque station pour laquelle vous voulez récupérer le prix d’un carburant, cliquer sur image afin d’ouvrir la page web de la station. Ne fermez pas la page encore, vous en aurez besoin pour configurer le capteur de prix dans l’étape 2.

2. Création manuelle des capteurs

La création des capteurs se fait dans le fichier ‹ sensors.yaml › (ou tout autre fichier suivant votre méthode de configuration)

2a. Prix du Carburant

Renseigner comme ceci :

- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".price"  
  index: 0
  name: hacf_essence_bordeaux_auchan_SP98_price

Où :

  • « resource » : correspond à l’adresse de la page web du détail de la station qui est la page web affichée lorsque vous avez cliquez sur image lors de l’étape précédente

  • « select » : correspond à la classe html/css contenant le prix du carburant récupérable en affichant les outils de dévelopement de votre navigateur préféré (image )

  • « index » : correspond au numéro de carburant de la station. Chaque station dispose de plus ou moins de carburant et donc le numéro de l’‹ index › peut varier d’une station à l’autre. Pour le site Carbu.com, la logique du numéro de l’index est le suivant :

  • « index » : correspond au nom de l’entité dans Home Assistant

2b. Nom du Carburant

Une fois, la station près de chez moi à retiré un carburant de la vente ce qui a eu pour conséquence de décaler les prix récupéré et donc m’afficher le prix du gazole au lieu du prix du SP95 (je l’ai vite remarqué au vu de la différence de prix :wink:)
J’ai donc décidé de récupérer également le nom du carburant afin de vérifier la correspondance entre le prix récupéré et le nom du carburant.

Renseigner comme ceci :

- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".title"  
  index: 0
  name: hacf_essence_bordeaux_auchan_SP98_title

Où ‹ select › change car on récupére maintenant le contenu de la classe ‹ .title › : image et ‹ name ›.

3. Fichier complet pour 2 stations

Ci dessous, les définitions des capteurs afin de récupérer le prix du gazole et de l’essence entre deux stations :

- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".title"  
  index: 0
  name: hacf_essence_bordeaux_auchan_SP98_title
- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".price"  
  index: 0
  name: hacf_essence_bordeaux_auchan_SP98_price
- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".title"  
  index: 5
  name: hacf_essence_bordeaux_auchan_gazole_b10_title
- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".price"  
  index: 5
  name: hacf_essence_bordeaux_auchan_gazole_b10_price
- platform: scrape
  resource: https://carbu.com/france/index.php/station/intermarche/bordeaux/33000/8753
  select: ".title"  
  index: 1
  name: hacf_essence_bordeaux_SP95_e5_title
- platform: scrape
  resource: https://carbu.com/france/index.php/station/intermarche/bordeaux/33000/8753
  select: ".price"  
  index: 1
  name: hacf_essence_bordeaux_SP95_e5_price
- platform: scrape
  resource: https://carbu.com/france/index.php/station/intermarche/bordeaux/33000/8753
  select: ".title"  
  index: 4
  name: hacf_essence_bordeaux_inter_gazole_b7_title
- platform: scrape
  resource: https://carbu.com/france/index.php/station/intermarche/bordeaux/33000/8753
  select: ".price"  
  index: 4
  name: hacf_essence_bordeaux_inter_gazole_b7_price

4. Le moins cher

Vous pouvez faire ressortir le carburant le moins cher en créant un autre capteur (ici pour le gazole) à partir des capteurs précédemment créés :

- platform: template
  sensors: 
    essence_gazole_best_price:
        entity_id: sensor.hacf_essence_bordeaux_auchan_gazole_b10_price, sensor.hacf_essence_bordeaux_inter_gazole_b7_price
        value_template: >
            {% set hacf_essence_bordeaux_auchan_gazole_b10_price =  states.sensor.hacf_essence_bordeaux_auchan_gazole_b10_price.state  %}
            {% set hacf_essence_bordeaux_inter_gazole_b7_price =  states.sensor.hacf_essence_bordeaux_inter_gazole_b7_price.state  %}
            
            {% if (hacf_essence_bordeaux_auchan_gazole_b10_price <= hacf_essence_bordeaux_inter_gazole_b7_price)
            and (hacf_essence_bordeaux_auchan_gazole_b10_price <= hacf_essence_bordeaux_inter_gazole_b7_price)
            and (hacf_essence_bordeaux_auchan_gazole_b10_price <= hacf_essence_bordeaux_inter_gazole_b7_price)
            and (hacf_essence_bordeaux_auchan_gazole_b10_price <= hacf_essence_bordeaux_inter_gazole_b7_price)
            %}
                Auchan
            {% elif (hacf_essence_bordeaux_inter_gazole_b7_price <= hacf_essence_bordeaux_auchan_gazole_b10_price)
            and (hacf_essence_bordeaux_inter_gazole_b7_price <= hacf_essence_bordeaux_auchan_gazole_b10_price)
            and (hacf_essence_bordeaux_inter_gazole_b7_price <= hacf_essence_bordeaux_auchan_gazole_b10_price)
            and (hacf_essence_bordeaux_inter_gazole_b7_price <= hacf_essence_bordeaux_auchan_gazole_b10_price)
            %}
                Intermaché
            {% endif %}  

5. Affichage dans Lovelace

Après avoir redémarrer votre serveur Home Assistant, vous pouvez maintenant afficher dans une cartes ‹ Entités › les prix des carburants des différentes stations:

Code de la carte :

entities:
  - entity: sensor.gazole_best_price
    name: Le moins cher
    icon: 'mdi:cart'
  - entity: sensor.hacf_essence_bordeaux_auchan_gazole_b10_title
    icon: 'mdi:gas-station'
    name: Auchan B10
  - entity: sensor.hacf_essence_bordeaux_auchan_gazole_b10_price
    icon: 'mdi:gas-station'
    name: Auchan B10 (Prix)
  - entity: sensor.hacf_essence_bordeaux_auchan_sp98_title
    icon: 'mdi:gas-station-outline'
    name: Auchan SP98
  - entity: sensor.hacf_essence_bordeaux_auchan_sp98_price
    icon: 'mdi:gas-station-outline'
    name: Auchan SP98 (Prix)
  - entity: sensor.hacf_essence_bordeaux_inter_gazole_b7_title
    icon: 'mdi:gas-station'
    name: Intermaché B7
  - entity: sensor.hacf_essence_bordeaux_inter_gazole_b7_price
    icon: 'mdi:gas-station'
    name: Intermaché B7 (Prix)
  - entity: sensor.hacf_essence_bordeaux_sp95_e5_title
    icon: 'mdi:gas-station-outline'
    name: Intermaché SP95
  - entity: sensor.hacf_essence_bordeaux_sp95_e5_price
    icon: 'mdi:gas-station-outline'
    name: Intermaché SP95 (Prix)
title: Carburant
type: entities
  1. Mon utilisation

Personnellement, j’affiche le prix du carburant de la façon suivante :

La liste des stations est affichée par distance par rapport à mon domicile et mon travail et le prix le moins cher est coloré.


Merci d’avoir suivi ce tuto et je le répète, n’hésitez pas à me faire des remarques !

A plus tard sur le forum.

Edit: une intégration de @max5962 permet également de récupérer les prix de carburants en France depuis l’open data du gouvernement.

8 « J'aime »

Merci beaucoup @Clemalex pour ce tuto qui me permet de découvrir cette fonction scrape qui peut être très intéressante même si dépendante d’une source Web (mais il ne pouvait en être autrement dans ce cas de figure). Je vais donc m’y atteler. Merci encore :wink:

Je suis content de faire découvrir aux autres, ce que moi-même j’ai découvert soit en passant du temps à lire la documentation de Home Assistant ou le forum officiel, soit complètement par hasard :wink:

1 « J'aime »

Très intéressant reçu pour cette explication et cet exemple.

Très sympa, merci!
Est-ce qu’on sait quand se fait la mise à jour des prix du côté du site ?

@erz Oui, tu peux très bien te créer un troisième capteur qui vient récupérer la date de mise à jour qui est indiquée sous le prix.


image

- platform: scrape
  resource: https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246
  select: ".sources"  
  index: 0
  name: hacf_essence_bordeaux_auchan_SP98_sources

et si tu veux virer systeme et ne garder que la date tu crée un nouveau sensor à partir du capteur qui contient (en prenant exemple sur l’image jointe) 06/08/20 systeme :

- platform: template
  sensors:
    hacf_essence_bordeaux_auchan_SP98_date:
        friendly_name: "SP98 Bordeaux (Date)"
        entity_id:
          - sensor.hacf_essence_bordeaux_auchan_SP98_price
        value_template: "{{ states.sensor.hacf_essence_bordeaux_auchan_SP98_sources.state.split(' ')[0]}}"

N’hésite pas à mettre un :heart:.

2 « J'aime »

Clair et mis en application sur mon lovelace :+1:
Super et bien pratique :wink:

1 « J'aime »

N’hésite pas à partager une image de son intégration dans ton lovelace pour donner des idées aux autres (et à moi :wink:)

Hello,
Je vous partage ma page principale, mais c’est un vrai chantier (pas fier de moi) car 1) certaines cartes comme la clim attendent de finir la mise au point du device pour remplacer une carte « rustine » 2) d’autres comme la météo attendent un peu de retour d’expérience avant de faire un choix 3) la forme/fond actuel ne me convient pas et je dois justement travailler cela.
Bref, vraiment pas satisfait de ma page principale.


2 « J'aime »

c’est normal ton ressenti au début, et plus tu va être à l’aise et découvrir d’autre configuration, plus tu changera ton lovelace pour finir par en trouvé un qui te plait.

J’ai du mettre 1an avant de trouver mon lovelace…pour téléphone, qui n’est pas le même que pour tablette…et pas le même que pour cast sur Nest.
:wink:

Et en plus au début tu cherche plus à savoir quels capteurs, scripts, automations tu veux que le rendu visuel…

Car ce n’est qu’une fois que tu saura où tu va que tu pourra y arriver…

je me rappelle mes début, je partais dans tous les sens en voulant maintenir mon lovelace mais tous les jours je changais soit d’intégration, soit de components…

Le truc cool des dernières versions est le multi-dashboard ! Tu peux faire un dashboard de test et un autre de visuel.

Au début, je mettais fait une page (maintenant le mieux c’est un dashboard) ou je faisait apparaître toutes mes cartes lovelaces. Cela permet de centraliser toutes tes cartes disponibles , original ou custom, et de les copier/coller rapidement.

1 « J'aime »

Merci @Clemalex pour ton soutien :wink:
Excuses moi mais je n’ai pas bien compris les 2 derniers paragraphes sur la page et le dashboard, sans doute car je n’ai pas encore découvert cette fonctionnalité sur HA et l’app smartphone (je ne vois pas grand chose de configurable dans "configuration de l’application) :thinking:

Cela ne se passe pas dans l’application.

L’application n’est là que pour te faire un ‹ écran de contrôle › de ton installation et te permettre de récupérer plusieurs capteurs au passage (localisation, batteries)

Lorsque je parle de multi-dashboard c’est ça :


et du coup, tu peux te créer plusieurs Tableau de bord (=Dashboard)
*

Personnellement, j’ai un dashboard pour mon téléphone, un autre pour ma tablette et un dernier pour le Nest.

Du coup, pour les applications, cela donne pour l’url de connexion :
Téléphone : https://adresse-ha.duckdns.org/lovelace1
Tablette (qui a un écran plus grand): https://adresse-ha.duckdns.org/lovelace2
Nest: https://adresse-ha.duckdns.org/lovelace3

Concernant la page c’est une vue fourre tout de toutes les cartes que je peux ajouter car au fur et à mesure ça en fait pas mal, et je m’étais fait une vue spéciale pour toutes les afficher.

1 « J'aime »

Ok merci @Clemalex, c’est très clair et ça va me permettre une fois de plus grâce à toi d’élargir mon champ d’investigation :+1::grin:

Pas de soucis.

Je me rappelle m’être vite perdu…et j’avais fait une pause de 2 semaines, puis repris par le début.

J’ai beaucoup lu la doc en la parcourant rapidement pour avoir connaisance (même minime) de ce que Home Assistant permet et il permet beaucoup de chose :heart_eyes:

Un conseil vraiment important, pense à mettre à jour le plus souvent possible Home Assistant sans attendre plusieurs version car après tu va te retrouver submergé par les mise a jour de cartes,composants mais surtout la suppression ou traitement d’obsolescence… j’étais en 0.96 et je m’étais dis que je m’occuperais des mises a jour plus tard…Ça m’a pris 3 semaines à cause des changements (breaking changes).

Et avant chaque mise a jour, faire un tour sur


pour vérifier ces changements (breaking changes)
1 « J'aime »

C’est effectivement le réflexe que j’ai pris depuis le début de faire les mises à jour le plus souvent possible. Là j’attends juste de rentrer de vacances pour faire une sauvegarde sd (en plus du snapshot Google drive déjà automatisé ) car j’ai un autre logiciel domotique sur ma carte.

Merci pour le tuto je vais le mettre en place

par contre une chose que je ne comprend pas en position 4

pourquoi il y a 4 fois les meme ligne pour le B7 et B10 ?

et tu pourrais aussi expliquer comment tu a fait pour metre de la couleur etc sur ta card lovelace

@barto_95 :

Au point 4, les lignes identiques sont simplement ici pour donner un exemple de la syntaxe de la condition if elif else*.
En réalité :

  • Pour une comparaison avec 2 stations :
value_template: >
    {% set hacf_essence_bordeaux_auchan_gazole_b10_price =  states.sensor.hacf_essence_bordeaux_auchan_gazole_b10_price.state  %}
    {% set hacf_essence_bordeaux_inter_gazole_b7_price =  states.sensor.hacf_essence_bordeaux_inter_gazole_b7_price.state  %}
    
    {% if (hacf_essence_bordeaux_auchan_gazole_b10_price <= hacf_essence_bordeaux_inter_gazole_b7_price) %}
        Auchan
    {% else %}
        Intermaché
    {% endif %}  

et pour 4 stations comme j’utilise :

- platform: template
  sensors: 
    essence_gazole_best_price_for_loop_min:
        entity_id: sensor.time
        value_template: >
            {%set price = [states.sensor.essence_bordeaux_leclerc_gazole_b7_price.state, states.sensor.essence_bordeaux_intermarche_gazole_b7_price.state, states.sensor.essence_bordeaux_carrefour_gazole_b7_price.state, states.sensor.essence_bordeaux_casino_gazole_b7_price.state, states.sensor.essence_bordeaux_intermarche2_gazole_b7_price.state]-%}
            {%set name = ["Leclerc", "Intermarché", "Carrefour", "Casino", "Intermarché 2"]-%}
            {%set best_station = namespace(price=price[0],name=name[0])  %}
            {% for i in [1, 2, 3] -%}
              {% if price[i] < best_station.price-%}
                {% set best_station.price = price[i] %}
                {% set best_station.name = name[i] %}
              {%  endif -%}
            {%- endfor %}
            {{best_station.name}}


Concernant la coloration, je viens d’y repondre ici mais des infos utiles se trouvent ici, et ici et .

N’hésite pas si tu as des questions.

OK car je comprenais pas pourquoi dans ton exemple il y avais plusieurs fois la meme ligne :slight_smile:
merci

5 messages ont été scindés en un nouveau sujet : Récupérer les prix de carburants

Bonjour,
Je suis nouveau sur le forum et j’admire chaque nouveaux membre qui partage leur travaux.
Je ne suis pas un expert et j’adore ce que Clemalex a fait « Mon Utilisation », serait-il possible de partager votre cade lovelace.