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.
- 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 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 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é ( )
-
« 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 )
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 › : 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
-
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.