Comparateur de stations service - KeithBolton/Home-Assistant GitHub Wiki

Merci d'indiquer l'url de cette page pour tout partage

Si vous aimez ce tutoriel, cliquez sur ⭐️ en haut à droite de l'écran pour dire que vous avez appréciez. Plus j'aurai d'⭐️ et plus je serai heureux de partager mes autres codes avec vous 😉

Vous cherchez un comparateur de stations service afin de connaitre la station la moins cher en fonction du carburant alors ce petit Wiki est là pour vous ;) Bien évidement, ceci est utile si vous avez plusieurs stations service regroupées dans une petite zone, par exemple j'en ai 3 dans un rayon d'un ou deux kilomètre.

Ce que je vous propose donc c'est le résultat suivant :

image

Pour commencer, vous devez ajouter et configurer l'intégration PrixCarburant sur votre HA, pas de panique, tout est très bien expliqué sur la page du dépot.

Une fois ceci fait, il ne vous reste plus qu'à ajouter une carte Markdown pour récupérer les informations dans des variables et créer les conditions.

Je commence avec la première variable à la ligne 3 qui indique le tarif d'un carburant à 999€ pour un carburant en rupture. Les autres variables sont simplement les informations des carburants par stations. En créant des variables comme celles là, la suite du code sera plus lisible et plus simple à utiliser. Notez que ces variables sont rangées par type de carburant.

image

Vous pouvez copier/coller le code :

{% set Tarif_Rupture = 999 %}

{# Récupération des données des stations #}
{% set Gasoil_Leclerc_1     = states.sensor.station_limoise_distr_gazole.state    %}
{% set Gasoil_Intermarche_1 = states.sensor.station_intermarche_gazole.state      %}
{% set Gasoil_Carrefour_1   = states.sensor.station_carrefour_market_gazole.state %}
{% set Gasoil_Fougere_1     = states.sensor.station_fougere_auto_gazole.state     %}

{% set E10_Leclerc_1        = states.sensor.station_limoise_distr_e10.state       %}
{% set E10_Intermarche_1    = states.sensor.station_intermarche_e10.state         %}

{% set E95_Leclerc_1        = states.sensor.station_limoise_distr_sp95.state      %}
{% set E95_Intermarche_1    = states.sensor.station_intermarche_sp95.state        %}
{% set E95_Carrefour_1      = states.sensor.station_carrefour_market_sp95.state   %}
{% set E95_Fougere_1        = states.sensor.station_fougere_auto_sp95.state       %}

{% set E98_Leclerc_1        = states.sensor.station_limoise_distr_sp98.state      %}
{% set E98_Intermarche_1    = states.sensor.station_intermarche_sp98.state        %}
{% set E98_Carrefour_1      = states.sensor.station_carrefour_market_sp98.state   %}

Une fois ces variables créées, nous devons vérifier si les carburants sont ou non en rupture comme le montre la capture suivante: image

Pour information, cette partie du code va vérifier si le tarif du gasoil Leclerc est égale à "unavailable" si oui alors le tarif du gasoil à Leclerc est égale au tarif de la variable Tarif_Rupture soit 999 (première varaible du code du comparateur). Sinon le tarfi est égale au tarif.

Vous pouvez copier/coller le code suivant et faites ceci pour tous les carburants que vous désirez analyser.

{# Vérification des données des stations en cas de rupture de carburant #}
{% if Gasoil_Leclerc_1  == "unavailable" %}
  {% set Gasoil_Leclerc = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Leclerc = Gasoil_Leclerc_1 %}
{%- endif %}
{% if Gasoil_Intermarche_1  == "unavailable" %}
  {% set Gasoil_Intermarche = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Intermarche = Gasoil_Intermarche_1 %}
{%- endif %}
{% if Gasoil_Carrefour_1  == "unavailable" %}
  {% set Gasoil_Carrefour = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Carrefour = Gasoil_Carrefour_1 %}
{%- endif %}
{% if Gasoil_Fougere_1  == "unavailable" %}
  {% set Gasoil_Fougere = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Fougere = Gasoil_Fougere_1 %}
{%- endif %}

Maintenant que cette vérification est faite, il est possible de comparer les tarifs des carburants entre eux afin de sélectionner le plus intéressant niveau prix au litre et d'identifier le nom de la station.

image

Ici le code est relativement simple puis que ça fonction est de comparer le tarif du gasoil de la station Leclerc avec celui de cher Intermarché puis celui d'intermarché avec celui de Carrefour et ainsi de suite dons la première condition. Pour la seconde condition, le code compare le tarif d'Intermarché avec celui de Leclerc puis avec celui de Carrfour et ainsi de suite. Une condition pas station, c'est un peu long mais pas le choix que de faire comme ça.

Vous pouvez copier/coller le code suivant. Faites ceci pour tous les type de carburants de vous souhaitez analyser.

{# Comparatif des carburants par stations #}
{% if (Gasoil_Leclerc <= Gasoil_Intermarche and Gasoil_Leclerc <= Gasoil_Carrefour and Gasoil_Leclerc <= Gasoil_Fougere) %}
  {% set Station_Gasoil_Nom  = "Leclerc"%}
  {% set Station_Gasoil_Prix =  Gasoil_Leclerc %}
{% elif (Gasoil_Intermarche <= Gasoil_Leclerc and Gasoil_Intermarche <= Gasoil_Carrefour and Gasoil_Intermarche <= Gasoil_Fougere)  %}
  {% set Station_Gasoil_Nom  = "Intermarché"%}
  {% set Station_Gasoil_Prix =  Gasoil_Intermarche %}
{% elif (Gasoil_Carrefour <= Gasoil_Leclerc and Gasoil_Carrefour <= Gasoil_Intermarche and Gasoil_Carrefour <= Gasoil_Fougere)  %}
  {% set Station_Gasoil_Nom  = "Carrefour"%}
  {% set Station_Gasoil_Prix =  Gasoil_Carrefour %}
{% elif (Gasoil_Fougere <= Gasoil_Leclerc and Gasoil_Fougere <= Gasoil_Intermarche and Gasoil_Fougere <= Gasoil_Carrefour)  %}
  {% set Station_Gasoil_Nom  = "Fougère Auto"%}
  {% set Station_Gasoil_Prix =  Gasoil_Fougere %}
{%- endif %}

Maintenant que toutes les informations sont traitées, il ne reste plus qu'à les intégrer dans un tableau HTML pour l'affichage.

On commence par créer l'entête du tableau avec le code suivant que vous pouvez copier/coller.

 <table>
    <tr>
      <th>Carburant</th>
      <th> </th>
      <th>Station</th>
      <th> </th>
      <th>Prix L</th>
      <th> </th>
      <th>Tarif Plein</th>
    </tr>

Juste après, nous allons placer une condition pour vérifier si le gasoil est en rupture dans toutes les stations avec le code suivant:

{% if Station_Gasoil_Prix == Tarif_Rupture %}
    <tr>
      <td>Gasoil</td>
      <td> </td>
      <td colspan="5"> RUPTURE </td>
    </tr>
{% else %}

Si, il est en rupture dans toutes les stations le message suivant sera affiché (SP98 dans mon cas):

image

Dans le cas contraire, il faut alors afficher le nom de la station la moins cher ainsi que le tarif du litre avec le code suivant :

<tr>
      <td>Gasoil</td>
      <td> </td>
      <td>{{ Station_Gasoil_Nom }}</td>
      <td> </td>
      <td>{{ Station_Gasoil_Prix }} €</td>
      <td> </td>
      <td style="text-align:right">{{(Station_Gasoil_Prix | float * 71)|round(2) }} €</td>
    </tr>
{%- endif %}

C'est aussi dans cette partie que je calcule le tarif du plein de ma voiture diesel avec ce bout de code tout simple. Remplacez le "71" par le nombre de litre du réservoir de votre voiture.

{{(Station_Gasoil_Prix | float * 71)|round(2) }} €

Si vous analysez plusieurs types de carburants comme moi, vous devez ajouter les 2 derniers codes ci-dessus pour analyser tous les types de carburants que vous désirez afficher dans votre carte.

Voici que que ça donne pour le gasoil et le E10 :

image

Ensuite, vous devez indiquer que le tableau HTML est terminé avec la balise suivante :

 </table>

Et voilà, votre comparateur est terminé ;)

Code entier dans mon cas :

{## Imitate available variables: ##}

{% set Tarif_Rupture = 999 %}

{# Récupération des données des stations #}
{% set Gasoil_Leclerc_1     = states.sensor.station_limoise_distr_gazole.state    %}
{% set Gasoil_Intermarche_1 = states.sensor.station_intermarche_gazole.state      %}
{% set Gasoil_Carrefour_1   = states.sensor.station_carrefour_market_gazole.state %}
{% set Gasoil_Fougere_1     = states.sensor.station_fougere_auto_gazole.state     %}

{% set E10_Leclerc_1        = states.sensor.station_limoise_distr_e10.state       %}
{% set E10_Intermarche_1    = states.sensor.station_intermarche_e10.state         %}

{% set E95_Leclerc_1        = states.sensor.station_limoise_distr_sp95.state      %}
{% set E95_Intermarche_1    = states.sensor.station_intermarche_sp95.state        %}
{% set E95_Carrefour_1      = states.sensor.station_carrefour_market_sp95.state   %}
{% set E95_Fougere_1        = states.sensor.station_fougere_auto_sp95.state       %}

{% set E98_Leclerc_1        = states.sensor.station_limoise_distr_sp98.state      %}
{% set E98_Intermarche_1    = states.sensor.station_intermarche_sp98.state        %}
{% set E98_Carrefour_1      = states.sensor.station_carrefour_market_sp98.state   %}


{# Vérification des données des stations en cas de rupture de carburant #}
{% if Gasoil_Leclerc_1  == "unavailable" %}
  {% set Gasoil_Leclerc = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Leclerc = Gasoil_Leclerc_1 %}
{%- endif %}
{% if Gasoil_Intermarche_1  == "unavailable" %}
  {% set Gasoil_Intermarche = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Intermarche = Gasoil_Intermarche_1 %}
{%- endif %}
{% if Gasoil_Carrefour_1  == "unavailable" %}
  {% set Gasoil_Carrefour = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Carrefour = Gasoil_Carrefour_1 %}
{%- endif %}
{% if Gasoil_Fougere_1  == "unavailable" %}
  {% set Gasoil_Fougere = Tarif_Rupture %}
{% else %}
  {% set Gasoil_Fougere = Gasoil_Fougere_1 %}
{%- endif %}


{% if E10_Leclerc_1  == "unavailable" %}
  {% set E10_Leclerc = Tarif_Rupture %}
{% else %}
  {% set E10_Leclerc = E10_Leclerc_1 %}
{%- endif %}
{% if E10_Intermarche_1  == "unavailable" %}
  {% set E10_Intermarche = Tarif_Rupture %}
{% else %}
  {% set E10_Intermarche = E10_Intermarche_1 %}
{%- endif %}


{% if E95_Leclerc_1  == "unavailable" %}
  {% set E95_Leclerc = Tarif_Rupture %}
{% else %}
  {% set E95_Leclerc = E95_Leclerc_1 %}
{%- endif %}
{% if E95_Intermarche_1  == "unavailable" %}
  {% set E95_Intermarche = Tarif_Rupture %}
{% else %}
  {% set E95_Intermarche = E95_Intermarche_1 %}
{%- endif %}
{% if E95_Carrefour_1  == "unavailable" %}
  {% set E95_Carrefour = Tarif_Rupture %}
{% else %}
  {% set E95_Carrefour = E95_Carrefour_1 %}
{%- endif %}
{% if E95_Fougere_1  == "unavailable" %}
  {% set E95_Fougere = Tarif_Rupture %}
{% else %}
  {% set E95_Fougere = E95_Fougere_1 %}
{%- endif %}


{% if E98_Leclerc_1  == "unavailable" %}
  {% set E98_Leclerc = Tarif_Rupture %}
{% else %}
  {% set E98_Leclerc = E98_Leclerc_1 %}
{%- endif %}
{% if E98_Intermarche_1  == "unavailable" %}
  {% set E98_Intermarche = Tarif_Rupture %}
{% else %}
  {% set E98_Intermarche = E98_Intermarche_1 %}
{%- endif %}
{% if E98_Carrefour_1  == "unavailable" %}
  {% set E98_Carrefour = Tarif_Rupture %}
{% else %}
  {% set E98_Carrefour = E98_Carrefour_1 %}
{%- endif %}


{# Comparatif des carburants par stations #}
{% if (Gasoil_Leclerc <= Gasoil_Intermarche and Gasoil_Leclerc <= Gasoil_Carrefour and Gasoil_Leclerc <= Gasoil_Fougere) %}
  {% set Station_Gasoil_Nom  = "Leclerc"%}
  {% set Station_Gasoil_Prix =  Gasoil_Leclerc %}
{% elif (Gasoil_Intermarche <= Gasoil_Leclerc and Gasoil_Intermarche <= Gasoil_Carrefour and Gasoil_Intermarche <= Gasoil_Fougere)  %}
  {% set Station_Gasoil_Nom  = "Intermarché"%}
  {% set Station_Gasoil_Prix =  Gasoil_Intermarche %}
{% elif (Gasoil_Carrefour <= Gasoil_Leclerc and Gasoil_Carrefour <= Gasoil_Intermarche and Gasoil_Carrefour <= Gasoil_Fougere)  %}
  {% set Station_Gasoil_Nom  = "Carrefour"%}
  {% set Station_Gasoil_Prix =  Gasoil_Carrefour %}
{% elif (Gasoil_Fougere <= Gasoil_Leclerc and Gasoil_Fougere <= Gasoil_Intermarche and Gasoil_Fougere <= Gasoil_Carrefour)  %}
  {% set Station_Gasoil_Nom  = "Fougère Auto"%}
  {% set Station_Gasoil_Prix =  Gasoil_Fougere %}
{%- endif %}

{% if (E10_Leclerc <= E10_Intermarche) %}
  {% set Station_E10_Nom = "Leclerc"%}
  {% set Station_E10_Prix =  E10_Leclerc %}
{% else %}
  {% set Station_E10_Nom = "Intermarché"%}
  {% set Station_E10_Prix =  E10_Intermarche %}
{%- endif %}

{% if (E95_Leclerc <= E95_Intermarche and E95_Leclerc <= E95_Carrefour and E95_Leclerc <= E95_Fougere) %}
  {% set Station_E95_Nom  = "Leclerc"%}
  {% set Station_E95_Prix =  E95_Leclerc %}
{% elif (E95_Intermarche <= E95_Leclerc and E95_Intermarche <= E95_Carrefour and E95_Intermarche <= E95_Fougere)  %}
  {% set Station_E95_Nom  = "Intermarché"%}
  {% set Station_E95_Prix =  E95_Intermarche %}
{% elif (E95_Carrefour <= E95_Leclerc and E95_Carrefour <= E95_Intermarche and E95_Carrefour <= E95_Fougere)  %}
  {% set Station_E95_Nom  = "Carrefour"%}
  {% set Station_E95_Prix =  E95_Carrefour %}
{% elif (E95_Fougere <= E95_Leclerc and E95_Fougere <= E95_Intermarche and E95_Fougere <= E95_Carrefour)  %}
  {% set Station_E95_Nom  = "Fougère Auto"%}
  {% set Station_E95_Prix =  E95_Fougere %}
{%- endif %}

{% if (E98_Leclerc <= E98_Intermarche and E98_Leclerc <= E98_Carrefour) %}
  {% set Station_E98_Nom  = "Leclerc"%}
  {% set Station_E98_Prix =  E98_Leclerc %}
{% elif (E98_Intermarche  <= E98_Leclerc  and E98_Intermarche  <= E98_Carrefour )  %}
  {% set Station_E98_Nom  = "Intermarché"%}
  {% set Station_E98_Prix =  E98_Intermarche %}
{% elif (E98_Carrefour <= E98_Leclerc and E98_Carrefour <= E98_Intermarche )  %}
  {% set Station_E98_Nom  = "Carrefour"%}
  {% set Station_E98_Prix =  E98_Carrefour %}
{%- endif %}


 <table>
    <tr>
      <th>Carburant</th>
      <th> </th>
      <th>Station</th>
      <th> </th>
      <th>Prix L</th>
      <th> </th>
      <th>Tarif Plein</th>
    </tr>
{% if Station_Gasoil_Prix == Tarif_Rupture %}
    <tr>
      <td>Gasoil</td>
      <td> </td>
      <td colspan="5"> RUPTURE </td>
    </tr>
{% else %}
<tr>
      <td>Gasoil</td>
      <td> </td>
      <td>{{ Station_Gasoil_Nom }}</td>
      <td> </td>
      <td>{{ Station_Gasoil_Prix }} €</td>
      <td> </td>
      <td style="text-align:right">{{(Station_Gasoil_Prix  | float * 71)|round(2) }} €</td>
    </tr>
{%- endif %}
{% if Station_E10_Prix == Tarif_Rupture %}
<tr>
      <td>E10</td>
      <td> </td>
      <td colspan="5"> RUPTURE </td>
    </tr>
{% else %}
<tr>
     <td>E10</td>
     <td>   </td>
     <td>{{ Station_E10_Nom }}</td>
     <td>   </td>
     <td>{{ Station_E10_Prix }} €</td>
     <td>   </td>
     <td style="text-align:right">{{(Station_E10_Prix | float * 50)|round(2) }}  €</td>
    </tr>
{%- endif %}
{% if Station_E95_Prix == Tarif_Rupture %}
<tr>
      <td>SP95</td>
      <td> </td>
      <td colspan="5"> RUPTURE </td>
    </tr>
{% else %}
<tr>
     <td>SP95</td>
     <td>   </td>
     <td>{{ Station_E95_Nom  }}</td>
     <td>   </td>
     <td>{{ Station_E95_Prix  }} €</td>
     <td>   </td>
     <td style="text-align:right">{{(Station_E95_Prix | float * 50)|round(2) }}   €</td>
    </tr>
{%- endif %}
{% if Station_E98_Prix == Tarif_Rupture %}
   <tr>
      <td>SP98</td>
      <td> </td>
      <td colspan="5"> RUPTURE </td>
    </tr>
{% else %}
    <tr>
     <td>SP98</td>
     <td>   </td>
     <td>{{ Station_E98_Nom  }}</td>
     <td>   </td>
     <td>{{ Station_E98_Prix  }} €</td>
     <td>   </td>
     <td style="text-align:right">{{(Station_E98_Prix | float * 50)|round(2) }}   €</td>
    </tr>
{%- endif %}

  </table>
⚠️ **GitHub.com Fallback** ⚠️