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

Cela ne se passe pas dans l’application.

L’application n’est là que pour te faire un ‹ écran de contrôle › de ton installation et te permettre de récupérer plusieurs capteurs au passage (localisation, batteries)

Lorsque je parle de multi-dashboard c’est ça :


et du coup, tu peux te créer plusieurs Tableau de bord (=Dashboard)
*

Personnellement, j’ai un dashboard pour mon téléphone, un autre pour ma tablette et un dernier pour le Nest.

Du coup, pour les applications, cela donne pour l’url de connexion :
Téléphone : https://adresse-ha.duckdns.org/lovelace1
Tablette (qui a un écran plus grand): https://adresse-ha.duckdns.org/lovelace2
Nest: https://adresse-ha.duckdns.org/lovelace3

Concernant la page c’est une vue fourre tout de toutes les cartes que je peux ajouter car au fur et à mesure ça en fait pas mal, et je m’étais fait une vue spéciale pour toutes les afficher.

1 « J'aime »

Ok merci @Clemalex, c’est très clair et ça va me permettre une fois de plus grâce à toi d’élargir mon champ d’investigation :+1::grin:

Pas de soucis.

Je me rappelle m’être vite perdu…et j’avais fait une pause de 2 semaines, puis repris par le début.

J’ai beaucoup lu la doc en la parcourant rapidement pour avoir connaisance (même minime) de ce que Home Assistant permet et il permet beaucoup de chose :heart_eyes:

Un conseil vraiment important, pense à mettre à jour le plus souvent possible Home Assistant sans attendre plusieurs version car après tu va te retrouver submergé par les mise a jour de cartes,composants mais surtout la suppression ou traitement d’obsolescence… j’étais en 0.96 et je m’étais dis que je m’occuperais des mises a jour plus tard…Ça m’a pris 3 semaines à cause des changements (breaking changes).

Et avant chaque mise a jour, faire un tour sur

pour vérifier ces changements (breaking changes)

1 « J'aime »

C’est effectivement le réflexe que j’ai pris depuis le début de faire les mises à jour le plus souvent possible. Là j’attends juste de rentrer de vacances pour faire une sauvegarde sd (en plus du snapshot Google drive déjà automatisé ) car j’ai un autre logiciel domotique sur ma carte.

Merci pour le tuto je vais le mettre en place

par contre une chose que je ne comprend pas en position 4

pourquoi il y a 4 fois les meme ligne pour le B7 et B10 ?

et tu pourrais aussi expliquer comment tu a fait pour metre de la couleur etc sur ta card lovelace

@barto_95 :

Au point 4, les lignes identiques sont simplement ici pour donner un exemple de la syntaxe de la condition if elif else*.
En réalité :

  • Pour une comparaison avec 2 stations :
value_template: >
    {% set hacf_essence_bordeaux_auchan_gazole_b10_price =  states.sensor.hacf_essence_bordeaux_auchan_gazole_b10_price.state  %}
    {% set hacf_essence_bordeaux_inter_gazole_b7_price =  states.sensor.hacf_essence_bordeaux_inter_gazole_b7_price.state  %}
    
    {% if (hacf_essence_bordeaux_auchan_gazole_b10_price <= hacf_essence_bordeaux_inter_gazole_b7_price) %}
        Auchan
    {% else %}
        Intermaché
    {% endif %}  

et pour 4 stations comme j’utilise :

- platform: template
  sensors: 
    essence_gazole_best_price_for_loop_min:
        entity_id: sensor.time
        value_template: >
            {%set price = [states.sensor.essence_bordeaux_leclerc_gazole_b7_price.state, states.sensor.essence_bordeaux_intermarche_gazole_b7_price.state, states.sensor.essence_bordeaux_carrefour_gazole_b7_price.state, states.sensor.essence_bordeaux_casino_gazole_b7_price.state, states.sensor.essence_bordeaux_intermarche2_gazole_b7_price.state]-%}
            {%set name = ["Leclerc", "Intermarché", "Carrefour", "Casino", "Intermarché 2"]-%}
            {%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}}


Concernant la coloration, je viens d’y repondre ici mais des infos utiles se trouvent ici, et ici et .

N’hésite pas si tu as des questions.

OK car je comprenais pas pourquoi dans ton exemple il y avais plusieurs fois la meme ligne :slight_smile:
merci

5 messages ont été scindés en un nouveau sujet : Récupérer les prix de carburants

Bonjour,
Je suis nouveau sur le forum et j’admire chaque nouveaux membre qui partage leur travaux.
Je ne suis pas un expert et j’adore ce que Clemalex a fait « Mon Utilisation », serait-il possible de partager votre cade lovelace.

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 ?).