Comparer les prix des carburants de vos stations préférées

C’est fait, je viens de mettre à jour ma présentation → 🎨 [Mon Dashboard] - @Clemalex

1 « J'aime »

Tout d’abord Merci Clemalex pour ton aide :slight_smile:

Je me suis demander si la création de divers sensors en value template pouvais être éviter en réalisant la recherche directement dans le code de la card lovelace.

Même si j’avoue ne pas avoir réussit jusqu’à présent mais cela n’est peut être pas possible tout simplement.

Citation
- type: ‹ custom:button-card ›
color_type: icon
custom_fields:
price: |
[[[
return <span style="color: var(--text-color-sensor);">${ state_attr['sensor.PrixCarburant_888888888','Gasoil'].state_attr}</span>
]]]

CitationButtonCardJSTemplateError: ReferenceError: state_attr is not defined in 'return ` ${ state_attr['sensor.

Le code a utiliser pour afficher l’attribut d’une entité.

  price: |
    [[[
     return `
       <span style="color: var(--text-color-sensor);">${states['sensor.prixcarburant_12345678'].attributes.gasoil}</span>`
    ]]]

Ou si tu as défini la clé entity dans la carte :

  price: |
    [[[
     return `
       <span style="color: var(--text-color-sensor);">${entity.attributes.gasoil}</span>`
    ]]]

Un Grand merci :slight_smile:

Maintenant je vais essayer de créer ton sensor bestprice avec l’intégration

1 « J'aime »

J’ai fait une découverte chez certaines station c’est encore noté en E95 et chez d’autre en E10 (qui est la nouvelle essence 95 avec 10% bio carburant)
Est-il possible de faire un If entity_is{entity.attributes.E95} « none » / « uknow »
else: {entity.attributes.E10} ?

tu peux la faire en français plutôt ? :sweat_smile: :sweat_smile:

Oui Bien sur :slight_smile:

type: ‹ custom:button-card ›
entity: « [[entity]] »
color_type: icon
custom_fields:
price: |
[[[
return <span style="color: var(--text-color-sensor);">${entity.attributes.E95} €/L</span>
]]]

J’aimerai faire si entity.attributes.E95 est « None » alors indiquer atribut E10.

PS: Pour celle et ceux qui trouve le code lovelace tres…Long car il faut le repeter a chaque essence et station, j’ai une astuce que certain connaissent deja le FRONTEND => decluterring_template Merci a son auteur @MiquelAlvarez.

####################################################################################################################################################################################################################################################################################################################################################     
####    CARBURANT GAZOIL
######################################################################################################################################################################################
carburantgasoil:
  card:
    type: 'custom:button-card'
    entity: "[[entity]]"
    color_type: icon
    custom_fields:
      price: |
        [[[
         return `
           <span style="color: var(--text-color-sensor);">${entity.attributes.Gasoil} €/L</span>`
        ]]]
    name: "[[name]]"
    show_icon: false
    show_last_changed: false
    show_name: true
    styles:
      card:
        - border: 2px solid var(--primary-color)
        - border-radius: 5px
        - height: 1em
      custom_fields:
        price:
          - background-color: 'rgba(0, 0, 0, 0)'
          - position: absolute
          - bottom: '-10px'
          - right: 5px
          - font-size: 15px
          - line-height: 20px
      #    - '--text-color-sensor': |
      #        [[[
      #          if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'green';
      #          else return 'var(--primary-color)';
      #        ]]]
      grid:
        - position: relative
      name:
        - font-variant: small-caps
        - justify-self: start
        - padding: 0 15px
      #  - color: |
      #      [[[
      #        if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'green';
      #        else return 'var(--primary-color)';
      #      ]]]

Et dans votre lovelace cela donne:

      - type: custom:decluttering-card
        template: carburantgasoil
        variables:
          - name: #le nom que vous souhaiter afficher       
          - entity: sensor.prixcarburant_8888888 #le sensor de la station qui contient les differents attribut E95 E10 Gasoir ect...

C’est avec du Javascript qu’il faut travailler :

entity: sensor.prixcarburant_XXX
color_type: icon
custom_fields:
  price: |
    [[[
      var carburant = '' //Variable contenant le nom du carburant disponible
      var prix = ''  //Variable contenant le prix du carburant disponible
      if (entity.attributes.E95 && entity.attributes.E95 != 'None'){
        //E95 disponible
        carburant = 'E95'
        prix = entity.attributes.E95 + ' €'
      } else if (entity.attributes.E10 && entity.attributes.E10 != 'None') {
        //E10 disponible (et E95 non disponible)
        carburant = 'E10'
        prix = entity.attributes.E10 + ' €'
      } else {
        //E95 et E10 non disponible
        carburant = 'Non disponible'
        prix = ''
      }
     return `
       <span style="color: var(--text-color-sensor);">
         ${prix} (${carburant})
       </span>`
    ]]]
name: Intermarché
show_icon: false
show_last_changed: false
show_name: true
styles:
  card:
    - border: 2px solid var(--primary-color)
    - border-radius: 5px
    - height: 1em
  custom_fields:
    price:
      - background-color: 'rgba(0, 0, 0, 0)'
      - position: absolute
      - bottom: '-10px'
      - right: 5px
      - font-size: 15px
      - line-height: 20px
      - '--text-color-sensor': |
          [[[
            if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'var(--sp95-color)';
            else return 'var(--primary-color)';
          ]]]
  grid:
    - position: relative
  name:
    - font-variant: small-caps
    - justify-self: start
    - padding: 0 15px
    - color: |
        [[[
          if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'var(--sp95-color)';
          else return 'var(--primary-color)';
        ]]]
type: 'custom:button-card'

1 « J'aime »

Mille Merci encore une fois @Clemalex je n’aurai jamais réussit a trouver sans toi cette fois encore :slight_smile:

ps: Si je voudrai partager le résultat final car la je suis encore vouloir mettre en couleur le moins cher et pourquoi pas un classement 1er / 2eme / 3eme :wink: puis-je le poster à la suite ou dois-je refaire un topic ?

a la suite, mais tu utilises qu’elle intégration ? Celle de ce sujet (scrape) ou celle de @max5962 https://forum.hacf.fr/t/recuperer-les-prix-de-carburants/644 ?

J’utilise l’intégration de @max5962

Comme dit plus haut, depuis hier j’essaie de réaliser un comparatif entre les station et mettre en couleur Verte comme tu l’as fait avec best.price.

Puis-je abuser encore une fois de ton aide dans ma démarche.

  - platform: template
    sensors:
      gazole_best_price:
        value_template: >
            {% set attribut.sensor.PrixCarburant_1 =  states.sensor.PrixCarburant_1.state  %}
            {% set attribut.sensor.prixcarburant_2 =  states.sensor.prixcarburant_2.state  %}
            
            {% if attribut.sensor.PrixCarburant_1 <= attribut.sensor.prixcarburant_2 %}
                Ville_1
            {% elif attribut.sensor.prixcarburant_1 <= attribut.sensor.PrixCarburant_2 %}
                ville_2
            {% else %}
                valeur inconnue
            {% endif %} 

J’obtiens :

 Invalid config for [sensor.template]: invalid template (TemplateSyntaxError: expected token 'end of statement block', got '.') for dictionary value @ data['sensors']['gazole_best_price']['value_template']. Got '{% set attribut.sensor.PrixCarburant_1 =  states.sensor.PrixCarburant_1.state  %} {% set attribut.sensor.prixcarburant_2 =  states.sensor.prixcarburant_2.state  %}\n{% if attribut.sensor.PrixCarburant_1 <= attribut.sensor.prixcarburant_2 %}\n    Ville_1\n{% elif attribut.sensor.prixcarburant_2 <= attribut.sensor.PrixCarburant_1 %}\n    Ville_2\n{% else %}\n    test\n{% endif %} \n'. (See ?, line ?).
              

Fait comme l’exemple et ne mets pas de « . » dans les noms… :upside_down_face:

Tu peux les remplacer par des « _ » par exemple

J’ai sans doute mal compris @Clemalex cela m’a donner une succession d’erreur que j’ai essayé temps bien que mal de corrigé sans succès.
Je suis partie sur ce code ou Home assistant me dit que le code est sans erreur toutefois l’état dans outils de développement apparait comme « unavailable »

Peux-tu me dire ou j’ai fauté stp ?

- platform: template
  sensors: 
    essence_gazole_best_price_for_loop_min:
        entity_id: sensor.time
        value_template: >
            {%set price = ["{{ state_attr.sensor.PrixCarburant_3','Gasoil') }}", "{{ state_attr.sensor.prixcarburant_2','Gasoil') }}", "{{ state_attr.sensor.prixcarburant_1','Gasoil') }}"]-%}
            {%set name = ["Ville_1", "'Ville_2", "Ville_3"]-%}
            {%set best_station = namespace(price=price[0],name=name[0])  %}
            {% for i in [1, 2, 3] -%}
              {% if price[i] < best_station.price-%}
                {% set best_station.price = price[i] %}
                {% set best_station.name = name[i] %}
              {%  endif -%}
            {%- endfor %}
            {{best_station.name}}

Ici, ce n’est pas comme ça que s’utilise cette fonction…

Ici, une quote en trop

Bonjour @Clemalex ,

J’avoue n’avoir jamais trouver la solution depuis malgré avoir fait plusieurs essais, j’avais plus envie de t’embéter avec ça:p

Mais aujourd’hui je me demande si:

      #    - '--text-color-sensor': |
      #        [[[
      #          if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'green';
      #          else return 'var(--primary-color)';
      #        ]]]

a la place de faire un fichier de comparaison je pouvais faire un groupe.station_essence et aller chercher atribut E10 ou SP95 si l’un au l’autre est « none » ?

Merci

Comprends pas…

Tu remets le contexte ?

Oui bien sur :slight_smile:

Je voudrai mettre en évidence les stations dont les prix sont les plus bas.
tu avais mis un comparatif plus haut dans cette discussion.
Voici le code total:

    type: 'custom:button-card'
    entity: "[[entity]]"
    color_type: icon
    custom_fields:
      price: |
        [[[
          var carburant = '' //Variable contenant le nom du carburant disponible
          var prix = ''  //Variable contenant le prix du carburant disponible
          if (entity.attributes.E95 && entity.attributes.E95 != 'None'){
            //E95 disponible
            carburant = 'E95'
            prix = entity.attributes.E95 + ' €'
          } else if (entity.attributes.E10 && entity.attributes.E10 != 'None') {
            //E10 disponible (et E95 non disponible)
            carburant = 'E10'
            prix = entity.attributes.E10 + ' €'
          } else {
            //E95 et E10 non disponible
            carburant = 'Non disponible'
            prix = ''
          }
         return `
           <span style="color: var(--text-color-sensor);">
             ${prix} (${carburant})
           </span>`
        ]]]
    name: "[[name]]"
    show_icon: false
    show_last_changed: false
    show_name: true
    styles:
      card:
        - border: 2px solid var(--primary-color)
        - border-radius: 5px
        - height: 1em
      custom_fields:
        price:
          - background-color: 'rgba(0, 0, 0, 0)'
          - position: absolute
          - bottom: '-10px'
          - right: 5px
          - font-size: 15px
          - line-height: 20px
      #    - '--text-color-sensor': |
      #        [[[
      #          if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'green';
      #          else return 'var(--primary-color)';
      #        ]]]
      grid:
        - position: relative
      name:
        - font-variant: small-caps
        - justify-self: start
        - padding: 0 15px
      #  - color: |
      #      [[[
      #        if ( (states['sensor.essence_sp95_best_price'].state == 'intermarche') ) return 'green';
      #        else return 'var(--primary-color)';
      #      ]]]

Je voulais savoir si le « sensor.essence_sp95_best_price » pouvais creer a partir d’un groupe de sensor.

Comme le fait l’exemple sur le markdown dynamique.



type: markdown
content: >-
  {% set update = states('sensor.date') %}

  {% set midnight = now().replace(hour=0, minute=0, second=0,
  microsecond=0).timestamp() %}

  {% set sorted_station_essence = "group.carburant" | expand |
  sort(attribute='attributes.Gasoil') %}
    | Station | &nbsp;&nbsp;&nbsp;&nbsp;Gasoil&nbsp;&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;&nbsp;Gpl&nbsp;&nbsp;&nbsp;&nbsp; | Update |
    | :------- | :----: | :----: | ------: |
  {% for station in sorted_station_essence %}| {{-
  state_attr(station.entity_id, 'Station name') -}}
    |{%- if state_attr(station.entity_id, "Gasoil") == "None" -%}-{%- else -%}{{- state_attr(station.entity_id, 'Gasoil') -}}{%- endif -%}
    |{%- if state_attr(station.entity_id, "GPLc") == "None" -%}-{%- else -%}{{- state_attr(station.entity_id, 'GPLc') -}}{%- endif -%}
  {%- set event = state_attr(station.entity_id,'Last Update Gasoil') |
  as_timestamp -%}
  {%- set delta = ((event - midnight) // 86400) | int -%}
    |{{ -delta }} Jours|
  {% endfor %}
title: Prix des carburants

@Clemalex,
Salut, tu es de Bordeaux ? Si c’est le cas fais attention je vais venir te voir pour préparer mon lovelace et tout bien configurer :rofl:. Je suis de Bordeaux…
Je vais essayer de suivre à la lettre ton tuto pour la carte essence, c’est top. Merci de tes partages.

1 « J'aime »

Non pas de Bordeaux mais pas loin…

Regarde par ici également :

https://forum.hacf.fr/t/recuperer-son-prix-de-carburant-encore-avec-le-multiscraping/6379

1 « J'aime »

Ça marche, je ne suis pas de Bordeaux centre 'non plus mais côté rive droite… Avant libourne. Bref.

Merci je vais jeter un œil :+1::+1:

1 « J'aime »