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

Dans le cas de l’utilisation du min/max automatique par carburant, c’est pas un souci, mais pour le tri des lignes, c’est moins bien
Note : tu peux ‹ chainer › plusieurs actions => {{ value | action1 | action2}}

J’ai trouvé le chainage pendant que tu écrivais :slight_smile: je pense
image

Bon là je vais retourner dans le dure de la mise en forme.

Agrandir les colonnes pour donner de l’espace, centrer le tarif sur la colonne, tenter d’utiliser une partie de la largeur de la carte en fait

1 « J'aime »

Bonjour,

Merci @Pulpy-Luke pour le partage et aux autres pour les évolutions.

J’habite dans une zone rurale et plusieurs stations autours de moi ne sont pas à jour sur carbu com, en ces temps de forte volatilité des prix ça rend la comparaison des prix inutile (y a par exemple des prix datant de 3mois pour une).

J’ai donc regardé les autres sites afin de trouver une alternative. Celui du gouvernement est plus à jour, et contient des mise à jour plus récentes sur ces stations. Mais il n’y a pas de page par station, faut donc retrouver les données d’une station parmi une liste, donc la récupération des infos est plus difficile et sera plus sensible à des changements comme ajout ou suppression de stations. J’utilise régulièrement sur mobile « essence & co », et je trouve les résultats justes. Pour mes stations, les données sont identiques au site du gouvernement. J’ai donc essayé de répliquer la méthode, ça fonctionne bien avec une petite différence sur les dates qui sont en ici le nombre de jours depuis dernière mise à jour.

Voici le code que j’utilise pour le multiscraping:

  - name: carburants_intermarche_longnyauperche2
    resource: "https://mon-essence.fr/station/longny-au-perche/intermarche-longny-au-perche"
    scan_interval: 3600
    sensor:
      - unique_id: carburants_intermarche_longnyauperche2
        name: Prix Carburants
        select: "h1[itemprop='name']"
        value_template: "{{ value }}"
        attributes:
          - name: sp98_name
            select: "th:nth-of-type(1)"
          - name: sp98_price
            select: "td:nth-of-type(1) span"
            value_template: "{{ value|replace(',','.')|replace('€','')}}"
          - name: sp98_date
            select: "td:nth-of-type(1) div"
            value_template: "{{ value }}"
          - name: b7_name
            select: "th:nth-of-type(2)"
          - name: b7_price
            select: "td:nth-of-type(2) span"
            value_template: "{{ value|replace(',','.')|replace('€','')}}"
          - name: b7_date
            select: "td:nth-of-type(2) div"
            value_template: "{{ value }}"

2 « J'aime »

Super top !
Merci pour le multiscraping sur le site mon-essence.fr ! Cela fonctionne chez moi pour les 2 stations qui ne sont pas à jour.
Par contre j’ai du laisser value_template: "-" pour les dates comme j’utilise la présentation pour le site carbu.com pour mes autres stations.
Avez-vous une solution pour transformer le « nombre de jours depuis la dernière mise à jour » en « date » ?
Merci !

J’ai commencé à regarder un « bout » de code…
Mais je suis vraiment nul avec cela !
Voici mon idée, est-ce que quelqu’un a un petit peu de temps pour réfléchir avec moi ?
X sont les possibilités que l’on peut retrouver sur mon-essence.fr.

{% set X = ['Auj .', 'Hier', '+ 2 J','+ 3 J','+ 4 J','+ 5 J','+ 6 J'] %}
{% set today = 'Auj .' %}
{% set date = now().strftime('%d/%m/%Y') %}
{{ X[date] }}
{{ X[(date+1)] }}

Salut.
C’est pas forcément le chemin que je prendrai pour faire ça mais plutôt :

  • Transformer la date du jour en timestamp (une valeur en nombre de secondes)
  • Transformer le nb de jours en secondes
  • Soustraire les 2
  • Retransformer le résultat en date (inverse de timestamp)

Il doit même y voir moyen d’utiliser la fonction delta (je me souviens plus de son nom exact) pour soustraire le nombre de jours directement

Bonjour @Herbs

J’ai utilisé ton automatisation pour avoir un message du meilleures prix , je reçois bien le prix par telegram, mais comment faire pour avoir le nom de la station a la place de Multiscrape Sensor et aussi le prix ?

Etant pas très bon en Yaml (pour pas dire mauvais) j’aurais besoin de votre aide pour y arriver.

Merci par avance

Salut @pascal_ha

Normalement si tu as bien adapté le code avec les noms de tes sensor.carburants_xxxxxxx et aussi bien créé les 2 input_text, ça devrait le faire d’office.

Si tu peux partager le code de ton automation complète stp ?

Ps : je vais être absent une bonne partie de la journée, je ne pourrai y jeter un oeil que dans la soirée :wink:

Slut @Herbs
Merci pour ton aide

voici le code :

alias: Best prix carburant
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.carburants_auchan_taverny_6278
      - sensor.carburants_leclerc_franconville_10230
      - sensor.carburants_total_argenteuil_balmont_5926
      - sensor.carburants_total_argenteuil_chateaubriand_15326
      - sensor.carburants_total_argenteuil_impressionnistes_8589
      - sensor.carburants_total_montigny_bordier_11429
      - sensor.carburants_total_sannois_butte_6590
      - sensor.carburants_total_sannois_peri_5826
      - sensor.carburants_total_pierrelaye_a15_15242
action:
  - service: input_text.set_value
    target:
      entity_id: input_text.carbu_cheap_tmp
    data:
      value: >
        {% set mini = (state_attr('sensor.carburants_auchan_taverny_6278',
        'e10_price'),
                       state_attr('sensor.carburants_leclerc_franconville_10230', 'e10_price'),
                       state_attr('sensor.carburants_total_argenteuil_balmont_5926', 'e10_price'),
                       state_attr('sensor.carburants_total_argenteuil_chateaubriand_15326', 'e10_price'),
                       state_attr('sensor.carburants_total_argenteuil_impressionnistes_8589', 'e10_price'),
                       state_attr('sensor.carburants_total_montigny_bordier_11429', 'e10_price'),
                       state_attr('sensor.carburants_total_sannois_butte_6590', 'e10_price'),
                       state_attr('sensor.carburants_total_sannois_peri_5826', 'e10_price'),
                       state_attr('sensor.carburants_total_pierrelaye_a15_15242', 'e10_price'))|min %}
        {% set mylist = 'sensor.carburants_auchan_taverny_6278',
                        'sensor.carburants_leclerc_franconville_10230',
                        'sensor.carburants_total_argenteuil_balmont_5926',
                        'sensor.carburants_total_argenteuil_chateaubriand_15326',
                        'sensor.carburants_total_argenteuil_impressionnistes_8589',
                        'sensor.carburants_total_montigny_bordier_11429',
                        'sensor.carburants_total_sannois_butte_6590',
                        'sensor.carburants_total_sannois_peri_5826',
                        'sensor.carburants_total_pierrelaye_a15_15242' %}
        {% for item in mylist %}

        {% if state_attr(item, 'e10_price') == mini %}

        {{ state_attr(item, 'friendly_name') }} {{ state_attr(item, 'e10_price')
        }}

        {% endif %}

        {% endfor %}
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ states('input_text.carbu_cheap_tmp') !=
              states('input_text.carbu_cheap') }}
        sequence:
          - service: input_text.set_value
            target:
              entity_id: input_text.carbu_cheap
            data:
              value: "{{ states('input_text.carbu_cheap_tmp') }}"
          - service: notify.telegram_pascal_ha
            data:
              message: |
                ⛽ Station la moins chère
                {{ states('input_text.carbu_cheap') }}
mode: single

J’ai bien les 2 input_text et je pense avoir bien mis les noms des sensors

Code multiscrape:

#multiscrape
  - name: carburants_auchan_taverny
    resource: "https://carbu.com/france/index.php/station/auchan/taverny/95150/6278"
    scan_interval: 3600
    sensor:
      - unique_id: carburants_auchan_taverny_6278
        select: "[itemtype='http://data-vocabulary.org/Organization'] h1"
        #value_template: "{{ value }}"
        #value_template: "<img src='/local/images/carburants/auchan-logo.png' style='height:2px;'> {{ value }}"
        picture: "/local/images/carburants/auchan-logo.png"
        attributes:
          - name: e10_name
            #select: ".col-sm-6:nth-of-type(n+2) h2"
            select: ".col-sm-6:nth-of-type(4) h2.title"
          - name: e10_price
            select: ".col-sm-6:nth-of-type(4) h1"
            value_template: "{{ value|replace(',','.')|replace(' €/L','') }}"
          - name: e10_date
            select: ".col-sm-6:nth-of-type(4) p.sources"
            value_template: "{{ value.split(' ')[0] }}"

Dans le multiscrape j’ai mis name, il faut peut être rajouter friendly name ?

@pascal_ha

si tu peux aussi partager le code (le multiscrape) de tes sensors stp ?

Je l’ai rajouté au post precedent

@pascal_ha

Ok j’ai vu :wink:

Dans tes sensors en dessous de unique_id et au même niveau d’indentation, ajoutes une ligne « name: »

Exemple :

- name: carburants_carrefour_bourgtheroulde
  resource: "https://carbu.com/france/index.php/station/carrefour-contact/bourgtheroulde-infreville/27520/9128"
  scan_interval: 3600
  sensor:
    - unique_id: carburants_carrefour_bourgtheroulde
      name: 'Carrefour Bourgtheroulde'
      select: "[itemtype='http://data-vocabulary.org/Organization'] h1"
      value_template: "{{ value|replace('Contact Bourgtheroulde-Infreville','Bourgtheroulde') }}"
      attributes:
         blablabla................................

Je pense que ça vient ça :wink:

1 « J'aime »

Ok je vais test, Merci encore et bonne journée.

Merci à toi aussi :wink:

Ps : en gros cette ligne ajoutes au sensor le « friendly_name » dont a besoin l’automation.

C’est parfait, sa fonctionne. :grinning:

best prix T2

Avec 1 plein par semaine, mon épouse va être contente de recevoir l’information…
:+1:

1 « J'aime »

effectivement, la totale sur la A15 est la moins cher sur plusieurs kilomètre autour de chez moi (herblay) :slight_smile:

bonjour @Herbs

L’automatisation ne s’exécute que si le prix mini change, si celui ci ne varie pas on ne reçois pas de message. c’est bien cela ?

Est il possible de recevoir un message au moins une fois par jour à 15H pour avoir un rappel ?

Salut @pascal_ha

C’est exactement ça :wink:

Je regarde dans la soirée, si j’ai le temps de modifier le code.

@pascal_ha tu peux tester avec ça :

alias: Best prix carburant
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.carburants_auchan_taverny_6278
      - sensor.carburants_leclerc_franconville_10230
      - sensor.carburants_total_argenteuil_balmont_5926
      - sensor.carburants_total_argenteuil_chateaubriand_15326
      - sensor.carburants_total_argenteuil_impressionnistes_8589
      - sensor.carburants_total_montigny_bordier_11429
      - sensor.carburants_total_sannois_butte_6590
      - sensor.carburants_total_sannois_peri_5826
      - sensor.carburants_total_pierrelaye_a15_15242
    - platform: time
      at: "15:00:00"      
action:
  - service: input_text.set_value
    target:
      entity_id: input_text.carbu_cheap_tmp
    data:
      value: >
        {% set mini = (state_attr('sensor.carburants_auchan_taverny_6278',
        'e10_price'),
                       state_attr('sensor.carburants_leclerc_franconville_10230', 'e10_price'),
                       state_attr('sensor.carburants_total_argenteuil_balmont_5926', 'e10_price'),
                       state_attr('sensor.carburants_total_argenteuil_chateaubriand_15326', 'e10_price'),
                       state_attr('sensor.carburants_total_argenteuil_impressionnistes_8589', 'e10_price'),
                       state_attr('sensor.carburants_total_montigny_bordier_11429', 'e10_price'),
                       state_attr('sensor.carburants_total_sannois_butte_6590', 'e10_price'),
                       state_attr('sensor.carburants_total_sannois_peri_5826', 'e10_price'),
                       state_attr('sensor.carburants_total_pierrelaye_a15_15242', 'e10_price'))|min %}
        {% set mylist = 'sensor.carburants_auchan_taverny_6278',
                        'sensor.carburants_leclerc_franconville_10230',
                        'sensor.carburants_total_argenteuil_balmont_5926',
                        'sensor.carburants_total_argenteuil_chateaubriand_15326',
                        'sensor.carburants_total_argenteuil_impressionnistes_8589',
                        'sensor.carburants_total_montigny_bordier_11429',
                        'sensor.carburants_total_sannois_butte_6590',
                        'sensor.carburants_total_sannois_peri_5826',
                        'sensor.carburants_total_pierrelaye_a15_15242' %}
        {% for item in mylist %}

        {% if state_attr(item, 'e10_price') == mini %}

        {{ state_attr(item, 'friendly_name') }} {{ state_attr(item, 'e10_price')
        }}

        {% endif %}

        {% endfor %}
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ states('input_text.carbu_cheap_tmp') !=
              states('input_text.carbu_cheap') }}
        sequence:
          - service: input_text.set_value
            target:
              entity_id: input_text.carbu_cheap
            data:
              value: "{{ states('input_text.carbu_cheap_tmp') }}"          
  - service: notify.telegram_pascal_ha
    data:
      message: |
        ⛽ Station la moins chère
        {{ states('input_text.carbu_cheap') }}
mode: single
1 « J'aime »

Bonjour !
Avez-vous un problème avec vos cartes ces jours ci ?
La pénurie d’essence dans certaines stations fait que la carte ne s’affiche plus car il n’y a plus de données à remonter via le multiscraping.
Autre question, est-ce que quelqu’un a essayé le multiscraping avec le site du gouvernement ? Le site est assez lent en ce moment, j’imagine que pas mal de personne l’utilise !