Récupération du prix des carburant selon les données de l'API gouvernementale.
Récupère les stations à x kilomètres de votre domicile (ou via une liste définie si utilisation de configuration.yaml
).
Rafraîchissement des données toutes les heures, il est possible de lancer un rafraîchissement manuel via l'entité button
.
Un service est mis à disposition pour trouver le meilleur prix d'un carburant donné autour de soi ou de n'importe quelle entité possédant une localisation (device_tracker
, person
, sensor
...).
Faire une PR en ajoutant/modifiant la station dans le fichier stations_name.json. Bien vérifier que le champs brand
corresponde à une marque existante en respectant la casse. Il est possible de surcharger par rapport aux données fournis par l'API les informations suivantes:
name
: Nom de la stationbrand
: Marque de la stationaddress
: Adresse de la stationpostal_code
: Code postal de la stationcity
: Ville de la station
Faire une PR en ajoutant/corrigeant l'image dans le fichier tools.py, dans la fonction get_entity_picture
.
HACS > Integrations > Explorer et télécharger des dépôts > Prix Carburant > Télécharger
Copier le dossier prix_carburant
dans le dossier config/custom_components
de votre Home-Assistant.
Ajoutez une nouvelle intégration, recherchez Prix Carburant
et remplissez les champs demandés.
Récupérer l'ID des stations voulues sur https://www.prix-carburants.gouv.fr/. Pour cela chercher la station, cliquer sur le logo station sur la carte, passer le curseur sur Voir plan
et noter le numéro qui apparait en bas de votre navigateur. Exemple avec Firefox :
Puis dans le fichier configuration.yaml, mettre par exemple :
sensor:
platform: prix_carburant
stations:
- 59000009
- 59000080
Station Carrefour Market La Poterie E10
- sensor.station_carrefour_market_la_poterie_e10
:
value: 1.808
name: Carrefour Market La Poterie
brand: Carrefour Market
address: Boulevard Paul Hutin Desgrées
postal_code: 35200
city: Rennes
latitude: 48.091297777798
longitude: -1.6418527606305
updated_date: 2023-10-24 09:51:21
days_since_last_update: 0
unit_of_measurement: €
device_class: monetary
icon: mdi:gas-station
friendly_name: Station Carrefour Market La Poterie E10
Si le nom d'une station n'apparait pas, vous pouvez contribuer en ajoutant les informations dans le fichier stations_name.json.
Pour le logo sensor.py, après match self.station_info[ATTR_BRAND]:
.
Exemple de configuration avec multiple-entity-row:
type: entities
entities:
- entity: sensor.station_mastation_sp98
type: custom:multiple-entity-row
name: Ma Station
show_state: false
entities:
- entity: sensor.station_mastation_e10
name: E10
- entity: sensor.station_mastation_sp98
name: SP98
type: custom:auto-entities
card:
type: entities
filter:
template: |-
{% for state in states.sensor -%}
{%- if state.entity_id | regex_match("sensor.station\_.*\_e10", ignorecase=True) -%}
{{
{
'entity': state.entity_id,
'name': state.attributes.friendly_name.split()[1:-1] | join(" "),
'type': "custom:multiple-entity-row",
'show_state': false,
'entities': [
{
'entity': state.entity_id,
'name': "E10"
},
{
'entity': state.entity_id.replace('e10', 'sp98'),
'name': "SP98"
},
{
'entity': state.entity_id,
'attribute': 'days_since_last_update',
'name': "MaJ"
},
]
}
}},
{%- endif -%}
{%- endfor %}
type: custom:flex-table-card
clickable: true
sort_by: state
max_rows: 15
title: Gasoil
entities:
include: sensor.station*gazole
columns:
- name: nom station
data: name, address
multi_delimiter: <br />
- name: dist.
data: distance
- name: prix
data: state
- name: Valid.
data: days_since_last_update
align: right
css:
tbody tr:nth-child(1): 'color: #00ff00'
tbody tr:nth-child(15): 'color: #f00020'
style: null
Préparations:
- Pour rajouter les logos, utiliser File Editor, puis aller dans le dossier www, enfin créer un sous-dossier nommé « logos » par exemple. Dans ce dossier, vous devez charger les différents images representant les logos de vos stations service
- Puis éditer le fichier configuration.yaml, et rajouter et adapter pour chacune de vos stations (exemple ci-dessous avec 2 stations en gazole)
homeassistant:
customize:
sensor.station_exemple1_gazole:
entity_picture: /local/logos/carrefour.png
sensor.station_exemple2_gazole:
entity_picture: /local/logos/auchan.png
Enfin utiliser l’exemple de card comme ci-dessous
- optionel: Modifier le nom des entités pour éviter les noms de stations trop longs
type: custom:flex-table-card
sort_by: state+
clickable: true
entities:
include:
- sensor.station_carrefour_market_sp95
- sensor.station_geant_casino_e10_2
- sensor.station_intermarche_e10
- sensor.station_relais_rond_point_j_rose_e10
columns:
- data: entity_picture
align: center
icon: mdi:gas-station
modify: '''<img src="'' + x + ''"style="height: 35px">'''
- data: name
name: ' Stations Le Creusot'
align: left
- icon: mdi:currency-eur
data: state
align: center
- icon: mdi:calendar-clock
data: days_since_last_update
align: center
prefix: J+
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: #00C62D; font-weight: bold'
tbody tr:nth-last-child(1): "color: #dd2c00",
card_mod: null
style: |
:host {
font-size: 18px;
border-radius: 10px;
}
type: custom:auto-entities
card:
type: map
show_empty: false
filter:
template: >
[{% set ns = namespace(count=0) %} {% for x in expand(states.sensor)|
sort(attribute='state')| map(attribute='entity_id') %} {% if 'station' in x
and 'gazole'in x and ns.count < 20 %}'{{x}}',{% set ns.count = ns.count + 1
%}{% endif %}{%- endfor %}]
type: vertical-stack
cards:
- type: picture
image: /local/pictures/essence.jpg
- type: custom:flex-table-card
clickable: true
sort_by: state
max_rows: 5
entities:
include: sensor.station*gazole
columns:
- name: nom station
data: name, address
multi_delimiter: <br />
- name: dist.
data: distance
- name: prix
data: state
- name: Valid.
data: updated_date
modify: Math.round((Date.now() - Date.parse(x)) / 36000 / 100 /24)
align: left
suffix: J
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: #0033ff'
tbody tr:nth-child(5): 'color: #FF0000'
card_mod:
style: |
ha-card {
border-radius: 10px;
padding-bottom: 10px;
background-color: rgba(0, 0, 0, 0.1)
}
:host {
font-size: 13px;
border-radius: 10px;
}
- type: custom:flex-table-card
clickable: true
sort_by: state
max_rows: 5
entities:
include: sensor.station*E85
columns:
- name: nom station
data: name, address
multi_delimiter: <br />
- name: dist.
data: distance
- name: prix
data: state
- name: Valid.
data: updated_date
modify: Math.round((Date.now() - Date.parse(x)) / 36000 / 100 /24)
align: left
suffix: J
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: #0033ff'
tbody tr:nth-child(5): 'color: #FF0000'
card_mod:
style: |
ha-card {
border-radius: 10px;
background-color: rgba(0, 0, 0, 0.1)
}
:host {
font-size: 13px;
border-radius: 10px;
}
card_mod:
style: |
ha-card {
--ha-card-background: rgba(0, 0, 0, 0.1);
ha-card {
margin-top: 0em;
}
Note: c'est un exemple donc on peut changer comme on veut.
- Créer le sensor avec des stations autour de 'toi' Utiliser le service (action)
template:
- trigger:
- platform: time_pattern
minutes: /1
action:
- action: prix_carburant.find_nearest_stations
data:
distance: 10
entity_id: device_tracker.mydevicetracker (ou mobile)
fuel: Gazole
response_variable: stations_feed
sensor:
- name: test_stations
unique_id: test_stations
state: "{{ now().isoformat() }}"
attributes:
stations: "{{ stations_feed.stations }}"
- l'automatisation pour créer des zones qui représentent les stations Important: il faut installer 'spook' pour avoir les services/actions 'create zone' et 'delete zone' Ici par exemple chaque minute une maj (trops je pense) mais on peut aussi utiliser un trigger quand le mobile bouge
alias: Station Zones
description: ""
trigger:
- platform: time_pattern
minutes: /1
condition: []
action:
- repeat:
for_each: >-
{{states.zone |selectattr('entity_id', 'search',
'station_')|map(attribute='entity_id') | list }}
sequence:
- action: zone.delete
data:
entity_id: "{{ repeat.item }}"
- repeat:
for_each: "{{ state_attr('sensor.test_stations', 'stations') | list }}"
sequence:
- action: zone.create
data:
radius: 100
icon: mdi:gas-station-in-use-outline
name: "{{ 'station_' + repeat.item.name }}"
latitude: "{{ repeat.item.latitude }}"
longitude: "{{ repeat.item.longitude }}"
mode: single
- Créer la carte
type: custom:auto-entities
card:
type: map
auto_fit: true
filter:
include:
- entity_id: 'zone.station*'
exclude:
- state: unavailable
show_empty: true