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

Pas besoin de chercher loin, regarde d’abord ce que ça donne dans les outils de dev

Oui ça remonte bien et j’ai les bonnes valeurs. Certaines dates pour l’E10 sont vides mais je ne pense pas que ce soit ça ?

Donc commence par reduire les élements de la carte. 1 carburant, uniquement le prix. Ajoute sa date etc… Quand ça plante, tu as le coupable

J’ai trouvé, j’avais un vieux sensor en cache (qui était dans la card à cause du « carburant_* »), que je viens de supprimer… ! Merci pour l’aide :wink:

2 « J'aime »

Bon j’ai cherché à être notifié dès lors que la station la moins chère change.

Sachant que mes 2 véhicules roulent au diesel, je n’avais pas besoin de gérer une diversité, et je voulais éviter de créer de nouveaux sensors pour cette automation.

Par conséquent l’automation s’appuie sur 2 input_text que je compare pour déclencher ou non la notif.

Le code :

alias: 'test carbu'
description: ''
trigger:
  - platform: state
    entity_id:
      - sensor.carburants_carrefour_AAA
      - sensor.carburants_carrefour_BBB
      - sensor.carburants_intermarche_CCC
      - sensor.carburants_intermarche_DDD
      - sensor.carburants_leclerc_DDD
      - sensor.carburants_intermarche_EEE
      - sensor.carburants_carrefour_EEE
action:
  - service: input_text.set_value
    target:
      entity_id: input_text.carbu_cheap_tmp
    data:
      value: |
        {% set mini = (state_attr('sensor.carburants_carrefour_AAA', 'diesel_price'),
                       state_attr('sensor.carburants_carrefour_BBB', 'diesel_price'),
                       state_attr('sensor.carburants_intermarche_CCC', 'diesel_price'),
                       state_attr('sensor.carburants_intermarche_DDD', 'diesel_price'),
                       state_attr('sensor.carburants_leclerc_DDD', 'diesel_price'),
                       state_attr('sensor.carburants_intermarche_EEE', 'diesel_price'),
                       state_attr('sensor.carburants_carrefour_EEE', 'diesel_price'))|min %}
        {% set mylist = 'sensor.carburants_carrefour_AAA',
                        'sensor.carburants_carrefour_BBB',
                        'sensor.carburants_intermarche_CCC',
                        'sensor.carburants_intermarche_DDD',
                        'sensor.carburants_leclerc_DDD',
                        'sensor.carburants_intermarche_EEE',
                        'sensor.carburants_carrefour_EEE' %}
        {% for item in mylist %}
        {% if state_attr(item, 'diesel_price') == mini %}
        {{ state_attr(item, 'friendly_name') }} {{ state_attr(item, 'diesel_price') }}
        {% endif %}
        {% endfor %}
  - choose:
    - conditions: "{{ 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.sms_moi
          data:
            message: |
              ⛽ Station la moins chère
              {{ states('input_text.carbu_cheap') }}
mode: single

Même si ça fonctionne, ça reste un premier jet et j’imagine qu’il y’a forcement moyen d’améliorer le code :wink:

2 « J'aime »

J’utilise la méthode de @WarC0zes pour créer les capteurs pour les stations mais ça ne marche pour celle-ci pour le SP95 (E10) :
https://carbu.com/france/index.php/station/geant-casino/saint-andre-de-cubzac/33240/7836

Une idée ?

Salut,
Cette station n’est pas différente des autres, le SP95 est en div:nth-child(**2**)

Avec la méthode de @WarC0zes, j’obtiens : div:nth-of-type(3) h1 pour le prix du E10 mais ça ne remonte rien.

Oui 2 => E5 et 3 => E10. Au temps pour moi
Si ça s’affiche pas, c’est que le reste de la formule n’est pas bon. Copié/collé à vérifier

Essais avec ça :

select: ".col-xs-12:nth-of-type(3) h1"

ça fonctionne Herbs mais bizarrement pour toutes les stations, j’obtiens quelque chose du genre div.col-xs-12:nth-of-type(1) h1.price mais avec celle-ci, j’obtiens ça div:nth-of-type(3) h1 et ça ne remonte rien.

Ouais j’ai eu le même cas de figure pour certaines infos, j’y suis allé au bluff avec l’exemple que je t’ai donné plus haut.

Et finalement ça a fonctionné, honnêtement j’ai pas cherché plus loin à essayer de comprendre si ça venait du code source de la page web ou d’un bug de l’extension « Web Scraper » :wink:

1 « J'aime »

Bonjour,

Je n’arrive pas à mettre toutes les infos des stations que j’aimerais sur la card donnée par @Herbs. En effet j’aimerais ajouter l’image en icône comme je l’ai fait ici

mais du coup dans la card de @Herbs qui gère le tri et couleur. Sachant que je ne peux pas mettre l’image pour le « Multiscrape » dans mon fichier « Configuration.YAML ».

Le code de la card :

type: custom:flex-table-card
sort_by: b7_price
entities:
  - entity: sensor.carburants_leclerc_riorges
  - entity: sensor.carburants_carrefour_riorges
  - entity: sensor.carburants_carrefour_roanne
  - entity: sensor.carburants_carrefour_mably
  - entity: sensor.carburants_carrefour_le_coteau
  - entity: sensor.carburants_intermarche_commelle
  - entity: sensor.carburants_intermarche_lentigny
  - entity: sensor.carburants_intermarche_riorges
  - entity: sensor.carburants_super_u_le_coteau
columns:
  - data: name
    icon: mdi:gas-station
    align: left
  - name: Diesel
    data: b7_price
    align: center
  - name: SP95
    data: sp95_price
    align: center
  - name: SP98
    data: sp98_price
    align: center
  - name: Date
    data: b7_date
    align: center
css:
  tbody tr:nth-child(odd): 'background-color: rgba(255, 255, 255, 0.1)'
  tbody tr:nth-child(even): 'background-color: rgba(255, 255, 255, 0.2)'
  tbody tr:nth-child(1): 'color: #00ff00'
  tbody tr:nth-child(9): 'color: #f00020'
card_mod: null
style: |
  :host {
    font-size: 13px;
    border-radius: 10px;
    border-style: solid;
    border-width: 2px 2px 0px 2px;
    border-color: #ffffff;
  }

Merci pour votre aide

Hum j’ai pas l’impression que ce soit possible avec uniquement « flex-table-card ».

Par contre en jouant avec « multiscrape » , et avec une légère modif de la carte peut-être.

  • Côté « multiscrape » faudrait essayer d’ajouter une entrée « picture » au sensor :
- name: carburants_carrefour_xxxxxxxxxxxx
  resource: "https://carbu.com/france/index.php/station/carrefour-contact/xxxxxxxxxxxx/27520/9128"
  scan_interval: 3600
  sensor:
    - unique_id: carburants_carrefour_xxxxxxxxxxxx
      name: 'xxxxxxxxxxxx'
      picture: '/local/chemin/image'
      select: "[itemtype='http://data-vocabulary.org/Organization'] h1"
      value_template: "{{ value }}"
      attributes:
        - name: diesel_name
          select: ".col-xs-12:nth-of-type(5) h2"
        - name: diesel_price
          select: ".col-xs-12:nth-of-type(5) h1"
          value_template: "{{ value|replace(',','.') }}"
        - name: diesel_update
          select: ".col-xs-12:nth-of-type(5) p"
          value_template: "{{ value.split(' ')[0] }}"
  • Et ensuite dans la carte ajouter la colonne correspondante :
type: custom:flex-table-card
sort_by: diesel_price
entities:
  include: sensor.carburants*
columns:
  - data: picture
    align: left
  - 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;
  }

Bon je n’ai pas testé, donc c’est sans garantie :wink: !!!

Tiens nous au courant.

J’ai essayé avec « image » dans mon fichier de configuration mais ça ne passe pas. Et de ce que j’ai vu dans la documentation de « multiscrape » je n’ai pas vu d’attribuer du genre. Je teste quand je rentre mais pas grand espoir…

en direct du dépôt multiscrape :wink:

1 « J'aime »

ça le créé ok mais c’est un type « string » et il n’y a pas d’interprétation du chemin comme pour « image » dans la carte « entities ».

Du coup soit c’est pas possible soit je suis une quiche

Salut,

Je suis pas convaincu que la flex-table-card permette d’afficher une image. En tout cas j’ai rien qui en parle dans les docs

Oui je pense aussi. Faudrait que je trouve une card où je puisse faire le tri et mettre une image…un mix entre les 2 que j’ai postées

Dans l’absolu j’étais pas trop confiant à la base, mais en partant de ça :

Y’a pas moyen de le forcer à interpréter le chemin et de lui faire afficher l’image ?

Après le css est moi on est pas trop copain :grin: