Récupérer son prix de carburant (encore) avec le multiscraping

Bonsoir,

Chez moi l’intégration de max5962 pour récuperer les prix du carburant fonctionne de moins en moins bien :

  • Plusieurs erreurs de connexion dans les logs pendant le journée …
  • Les fichiers data qui trainent (15Mo) si on les purge pas à la main etc, virés par un cron !

Du coup, j’ai décidé d’utiliser le multiscraping :

L’idée c’est d’avoir un sensor par station et tous les attributs qui vont bien, sans pour autant télécharger des dizaines de Mo, le tout en une seule requête, et en ayant la main sur la fréquence de mise à jour

J’ai donc crée mon nouveau sensor :

multiscrape:
  - name: carburants_auchan_bordeaux
    resource: "https://carbu.com/france/index.php/station/auchan/bordeaux/33000/5246"
    scan_interval: 3600
    sensor:
      - unique_id: carburants_auchan_bordeaux
        select: "[itemtype='http://data-vocabulary.org/Organization'] h1"
        value_template: "{{ value }}"
        attributes:
          - name: sp98_name
            select: ".col-xs-12:nth-of-type(1) h2"
          - name: sp98_price
            select: ".col-xs-12:nth-of-type(1) h1.price"
            value_template: "{{ value|replace(',','.') }}"
          - name: sp98_date
            select: ".col-xs-12:nth-of-type(1) p.sources"
            value_template: "{{ value.split(' ')[0] }}"
          - name: e10_name
            select: ".col-xs-12:nth-of-type(3) h2"
          - name: e10_price
            select: ".col-xs-12:nth-of-type(3) h1.price"
            value_template: "{{ value|replace(',','.') }}"
          - name: e10_date
            select: ".col-xs-12:nth-of-type(3) p.sources"
            value_template: "{{ value.split(' ')[0] }}"
          - name: gpl_name
            select: ".col-xs-12:nth-of-type(6) h2"
          - name: gpl_price
            select: ".col-xs-12:nth-of-type(6) h1.price"
            value_template: "{{ value|replace(',','.') }}"
          - name: gpl_date
            select: ".col-xs-12:nth-of-type(6) p.sources"
            value_template: "{{ value.split(' ')[0] }}"

L’astuce c’est de changer les nth-of-type(XXXX) dans le select: pour basculer d’un tableau à l’autre. @Clemalex en parle très bien dans son sujet, pour trouver les bonnes valeurs : 0/1/2/3/4

Le reste c’est de la mise en forme / tri pour récupérer les carburants qui vous concernent

Au final le sensor est comme ceci :

Et du coup l’affichage est ultrasimple
image

type: entities
card_mod:
  class: top-level-card
title: Prix carburants
entities:
  - entity: sensor.carburants_auchan_bordeaux
    type: custom:multiple-entity-row
    name: Auchan
    icon: mdi:gas-station
    show_state: false
    entities:
      - attribute: sp98_price
        name: SP98
      - attribute: e10_price
        name: E10
      - attribute: gpl_price
        name: GPL

Petite astuce, pour trouver facilement le bon select, je suis passé par cette extension Chrome :

3 « J'aime »

Petite amélioration :

  • nom dymanique
  • tri
  • tableau/alignements

Nouvelle carte :

type: custom:flex-table-card
title: Carburants
sortby: e10_price+
entities:
  include:
    - sensor.carburants_leclerc
    - sensor.carburants_auchan
    - sensor.carburants_intermarche
columns:
  - data: state
    icon: mdi:gas-station
    align: center
  - data: sp98_price
    name: SP98 €/L
    align: center
  - data: sp95_price
    name: SP95 €/L
    align: center
  - data: e10_price
    name: E10 €/L
    align: center
  - data: e85_price
    name: E85 €/L
    align: center
  - data: gpl_price
    name: GPL €/L
    align: center

image

Pour avoir le même nombre d’attributs dans les sensors, j’ai ajouté des valeurs fixes sur les carburants qui manquent

        - name: gpl_name
          value_template: "-"
        - name: gpl_price
          value_template: "-"
        - name: gpl_date
          value_template: "-"
4 « J'aime »

Merci pour le partage @Pulpy :wink:

1 « J'aime »

Merci @Pulpy pour le partage, comme toi j’ai des soucis avec l’intégration de @max5962.
Je vais me tester ca des que possible.

Après quelque galère pour comprendre select:, j’ai réussie a créer mes capteurs pour 2 stations.
Ca fonctionne bien et ca me bouffe pas de mémoire comparé a la solution de @max5962 .
Donc je recommande c’est solution pour les rpi3.

Merci encore pour ce tuto.

Si tu peux en dire plus pour éviter que je galère, et d’autres par la suite :slight_smile:

J’ai installer l’addon Web Scraper dans chrome ( comme expliquer dans le tuto).
ensuite je choisie ma station ex : https://carbu.com/france/index.php/station/intermarche/trebes/11800/6671
ensuite appuie sur F12 pour ouvrir l’outils de devellopement, tout en haut click sur les 2 flèche et sélectionne web scraper.
Click sur les 3 petit points et selectionne épingler en bas.

Tu click sur create new sitemap et sur sitemap.
sitemap name: carbu
Start URL: https://carbu.com/france/index.php/station/intermarche/trebes/11800/6671
et tu créer.

De la tu click sur Add new selector, type sur text et dans Selector choisir select.
Ta plus qu’a sélectionné la partie ou tu veut les infos et copier.

je sais pas si c’est la plus simple, mais j’y suis arrivé de c’est facon.

2 « J'aime »

Voila ma carte avec le code de @Pulpy et modifier pour qu’il fonctionne . sortby: > sort_by:

type: custom:flex-table-card
sort_by: b7_price-
entities:
  include: sensor.carburants*
columns:
  - data: state
    icon: mdi:gas-station
    align: left
  - name: GAZOLE €/L
    data: b7_price
    align: center
  - data: sp98_price
    name: SP98 €/L
    align: center
style: |
  :host {
    --card-mod-icon-color: rgb(31, 111, 235);
    font-size: 13px;
        }

carburant

1 « J'aime »

Merci pour tout à @Pulpy & @WarC0zes !!!

image

2 « J'aime »

Si tu peux partager ton code pour les novices :+1::slightly_smiling_face:

Tu veux juste le code de la carte, ou tout le reste ?

Il y a des exemples de code et de carte dans tout le sujet…
A voir si la question porte pas plus sur le thème, non ?

@Herbs oui le code d’une station, la card reste la même non?

@Pulpy non pas tout, simplement sa peut donner des idées, il y a un peu de couleur dans sa carte. J’aimerais voir comment il a fait cela.

D’ailleurs j’aimerais savoir si c’est faisable de tronquer le titre de la station ? Si oui, si vous pouvez m’aiguiller ce serait top.

Justement ça c’est un thème, c’est indépendant de la carte

C’est la même mécanique que pour la mise en forme du prix, par exemple…

            value_template: "{{ value|replace(',','.') }}"

Voilà le code de la card :

type: custom:flex-table-card
sort_by: diesel_price
entities:
  include: sensor.carburants*
columns:
  - data: state
    icon: mdi:gas-station
    align: left
  - name: Diesel
    data: diesel_price
    align: center
  - name: Update
    data: diesel_update
    align: center
css:
  tbody tr:nth-child(odd): 'background-color: rgba(255, 255, 255, 0.2)'
  tbody tr:nth-child(even): 'background-color: rgba(255, 255, 255, 0.1)'
  tbody tr:nth-child(1): 'color: #00ff00'
  tbody tr:nth-child(7): 'color: #FF7F50'
card_mod:
style: |
  :host {
    font-size: 13px;
    border-radius: 10px;
    border-style: solid;
    border-width: 2px 2px 0px 2px;
    border-color: #ffffff;
  }

Par contre le background de la carte vient du thème comme l’a dit @Pulpy

1 « J'aime »

Hello
Comment faites vous pour retrouver l’ID des stations essences?

Pas besoin des ID… juste l’url

Bonjour à tous,
Je sais pas vous, mais moi j’ai pas mal de problèmes avec la card flex. Elle me fait disparaitre tout mon dashboard et j’ai l’erreur suivante dans les logs :

Logger: frontend.js.latest.202112290
Source: components/system_log/__init__.py:189
First occurred: 16:10:05 (1 occurrences)
Last logged: 16:10:05

https://mondomaine.versduckdns.org/hacsfiles/flex-table-card/flex-table-card.js?hacstag=1562920589320251:22:18 Uncaught TypeError: Cannot read properties of undefined (reading 'toString')

Hello,

Ton sensor contiendrait pas des trucs bizarres (et donc fait planter la carte) ?

Franchement, je vois pas. J’ai fait des copier/coller entre les différentes stations dans le fichier configuration.yaml
Je continue de chercher…