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

Ok,

value_template: "<img src='/local/images/brand/auchan.png' style='height:20px;'> {{ value }}"

Ton image auchan.png , c’est l’image du site qu’on télécharge et copie dans /local/images/ ?

C’est bien ça.
Tu dois pouvoir utiliser une url aussi si tu préféres

d’accord, merci pour ces précisions.

Finalement j’ai prit des logos sur le web avec fond transparent. Encore merci @Pulpy-Luke

logo carbu

1 « J'aime »

J’aurais besoin d’un coup de main, pour récupérer les infos sur ce site Andorra les prix du diesel, 15-agosto-2022 | GlobalPetrolPrices.com.

1/ pour le prix, c’est juste 1.785 et je voudrais rajouter €/L. Que dois je mettre dans value_template: ?

     value_template: "{{ value|replace(',','.') }} €/L"
ou
     value_template: "{{ value }} €/L"

2/ pour la date, c’est dans la colonne h1 et dans c’est colonne l’info est: Andorra Les prix du diesel, 04-juillet-2022.
es ce que c’est possible de convertir la date 04-juillet-2022 en 04/07/22 et de filtrer le texte Andorra Les prix du diesel, ?

Salut

1 À priori ça dépend beaucoup de la carte si elle accepte bien le sigle euro. Attention également le fait d’ajouter la devise casse un peu les fonctionnalités de tri (string versus float). Personnellement je préfère la 1ère variation (en français le point, c’est pas le séparateur de décimale) , mais les 2 font le job

2 Oui, en fait la meilleure méthode aurait été de faire une conversion de format genre :

{% set value="10/07/2022" %}
{{ strptime(value,"%d/%m/%Y").strftime("%d %B %Y") }}

Sauf que ça fait pas la traduction … (sur ce point HA c’est naze)

Du coup, il faut faire ça

{% set value="10/07/2022" %}
{% set months = ["", "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"] %}
{{value.split('/')[0] }} {{months[value.split('/')[1]|int]}} {{value.split('/')[2] }}


EDIT: J’ai fait l’inverse pour les dates :face_with_head_bandage:
Voilà le bon code

{% set value_brute="Andorra Les prix du diesel, 04-juillet-2022" %}
{{ value_brute }}
{% set value=value_brute.split(',')[1]|trim %}
{% set months = {"janvier":"01","fevrier":"02","mars":"03","avril":"04","mai":"05","juin":"06","juillet":"07","août":"08","septembre":"09","octobre":"10","novembre":"11","décembre":"12"} %}
{{value.split('-')[0] }}/{{months[value.split('-')[1]]}}/{{value.split('-')[2] }}

Pour le prix c’est bon. C’est la partie date que je comprends pas bien.

voila mon code

  - name: carburants_andorre
    resource: "https://fr.globalpetrolprices.com/Andorra/diesel_prices/"
    scan_interval: 3600
    sensor:
      - unique_id: carburants_andorre
        value_template: "<img src='/local/images/gpp.png' style='height:20px;'> Carburant Andorre"
        attributes:
          - name: b7_name
            value_template: "Gazole (B7)"
          - name: b7_price
            select: "tbody tr:nth-of-type(1) td:nth-of-type(1)"
            value_template: "{{ value }} €/L"
          - name: b7_date
            select: "h1"
            value_template: >-
              {% set value_brute="value" %}
              {{ value_brute }}
              {% set value=value_brute.split(',')[1]|trim %}
              {% set months = {"janvier":"01","fevrier":"02","mars":"03","avril":"04","mai":"05","juin":"06","juillet":"07","août":"08","septembre":"09","octobre":"10","novembre":"11","décembre":"12"} %}
              {{value.split('-')[0] }}/{{months[value.split('-')[1]]}}/{{value.split('-')[2] }}"

Résultat:
carbu andorre

Comment adapter ton code pour la date, vu que la valeur récuperer est value ?

Edit:
c’est bon pour le logo et nom.
Carbu andorre logo

Et voilà le code final pour la date

        - name: b7_date
          select: "h1"
          value_template: >-
            {% set value=value.split(',')[1]|trim %}
            {% set months = {"janvier":"01","fevrier":"02","mars":"03","avril":"04","mai":"05","juin":"06","juillet":"07","août":"08","septembre":"09","octobre":"10","novembre":"11","décembre":"12"} %}
            {{value.split('-')[0] }}/{{months[value.split('-')[1]]}}/{{value.split('-')[2] }}
1 « J'aime »

T’es un chef !
merci beaucoup :wink:

resultat:
carbu final

Pour fignoler et que ca soit homogène avec les autres valeurs, faudrait split l’année 2022 en 22 :stuck_out_tongue:
je vais pas t’embêter pour aujourd’hui, t’en a déja fais pas mal. Mais a l’occase si ta 5 min.

Pour le 22, il faut changer ça en

            {{value.split('-')[0] }}/{{months[value.split('-')[1]]}}/{{value.split('-')[2] }}

en ça

            {{value.split('-')[0] }}/{{months[value.split('-')[1]]}}/{{value.split('-')[2][2:4] }}

Il va falloir potasser la syntaxe jinja :wink:

1 « J'aime »

merci , trop rapide @Pulpy-Luke

carbu andorre ok

oui va falloir que j’apprenne le jinja …

Bonjour

et merci pour le travail réalisé ici mais aussi sur d’autre sujet toujours une mine d’or de lecture et parfois de mise en œuvre pour moi.

Je pose la question ici mais c’est souvent un sujet qui me donne des maux de tête :slight_smile:
J’ai un fichier sensors.yaml avec un include

donc ce bout de code multiscrape je le mets bien dans ce fichier ?
Si oui (c’est ce que j’ai fait) et à la vériification il me met :

Invalid config for [sensor]: required key not provided @ data['platform']. Got None. (See /config/configuration.yaml, line 54).13.8313.

je ne comprends pas ce qui lui dérange, je mets un screen pour ne pas fausser l’indentation au cas où mais j’ai regardé normalement c’est OK

Merci par avance de l’aiguillage car je tourne en rond à chercher un truc que je ne connais du coup

Salut,

Je te remercie, malgré tout c’est normal que je partage un peu mes exemples, l’idée c’est de profiter des connaissances et des créations de chacun à travers le forum

Pour ton défaut, c’est probablement du au fait qu’il ne faut pas mettre ça dans le fichier sensors.yaml (même si c’est un sensor qui est généré).

  • ajoute une ligne dans le configuration.yaml :
    multiscrape: !include multiscrape.yaml
    
  • Créer le fichier multiscrape.yaml et ajoute le contenu de ton image
  • Supprime la première ligne - multiscrape:
  • Retire un niveau d’indentation PARTOUT (- name: sans espace)
  • Sauvegarde et redémarrage du core

En principe, ça devait mieux marcher

Merci de ta réponse rapide comme toujours tu es sur le pont du partage :wink:
Je comprends et apprécie à sa juste valeur l’investissement que vous apportez tous, je le produis moi même sur Jeedom en parallèle de ma découverte de HA :stuck_out_tongue:

:scream: je suis passé complètement à coté de cette organisation d’include sur le multiscrape
Je vais encore me faire des cheveux blancs :grin:

Je vais de ce pas tester cette solution et ensuite je vais pouvoir tester la mise en place des logos de stations

Je pourrais ensuite supprimer l’intégration que j’ai à date je suppose

Bon voilà c’est fait et ça marche effectivement beaucoup mieux :slight_smile:

En dehors du fait qu’ils ne savent pas écrire le nom comme il faut j’ai mon sensor

Prochaine étape la mise en place du logo, voir la récupération du nom de la ville dans l’adresse de la station et le tour sera joué pour 1 station
ensuite on passera à 2 puis 3 etc…
Puis coloriage et classement des stations si possible à la vitesse de mon apprentissage

Voici ce que cela donne pour le coup :slight_smile:
Merci pour le guidage

image
Faut encore améliorer ça avec des logos plus jolie et uniforme, le nom des statation mettre le name que j’ai défini ou juste la ville

mais un peu plus sympa que ceci qui est déjà très bien
image

2 « J'aime »

Bien joué.
Pense aussi à virer le €/L de chaque ligne/tarif (et garde sur le titre de la colonne seulement), ça rendra l’alignement plus sympa encore

Oui oui effectivement très bonne idée
Les fondations sont là je pense avoir compris des choses donc maintenant c’est du travail de mise en forme mais pas toujours le plus facile je trouve mais ludique et prise de tête aussi :wink:

Bonjour

Du coup suite l’idée de supprimer l’unité €/L sur les différentes valeurs que je trouve très bonne j’ai un peu regardé mais c’est directement dans le {{state_attr("sensor.carburants_auchan_saint_genis_laval", "e10_price")}}

Du coup il faudrait faire un gauche de cette valeur et ne retenir que les 5 premiers caractères ?

Voir même ne pas l’importer directement mais celle ci est formatée comme ça sur le site
Donc peut être en jouant sur

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(',','.') }}"

Au niveau du value_template par exemple ?

Je ne sais pas trop par où chercher ce point

J’ai modifié les nom déjà mais cela reste encore très dense
image

Pour aider je mets déjà juste le carburant nécessaire

image

Mais je n’arrive pas non plus à donner de l’air dans les différentes colonne par des padding-left margin-left etc… :frowning:

Salut

Si on reprends ton exemple, on note que :

  • ça prends la valeur value et on chaine avec le | le remplacement de la virgule par un point
          select: ".col-xs-12:nth-of-type(1) h1.price"
          value_template: "{{ value|replace(',','.') }}"

Donc le première approche ça pourrait être de dire :

  • on remplace €/L par une chaine vide par exemple

C’est la soluce facile parce que tu as déjà un exemple de remplacement

Il y aussi la possibilité de

  • séparer la chaine en 2 morceaux (un tableau) dont le séparateur est l’espace (entre le prix et l’unité)

C’est la fonction split jinja

Je te laisse chercher ?

Oui oui je cherche quand même un peu :slight_smile:

image

Bon j’ai perdu le point dans l’histoire mais c’est pas si grave non plus