Vamos a crear un sensor del precio del carburante , para ello hay que añadir un custom_component ya que HA solo permite trabajar con JSON de 256 bytes , creáis una carpeta custom_components si no la tenéis creada. luego creáis una carpeta llamada jsonrest y ponéis el contenido del siguiente fichero :
En esta url encontrareis todos los metodos del webservice , yo utilizo esta direccion https://sedeaplicaciones.minetur.gob.es/ServiciosRESTCarburantes/PreciosCarburantes/EstacionesTerrestres/FiltroProvincia/08 para que solo me devuelva los resultados de la provincia de Barcelona que es lo que me interesa ,este seria el sensor que se encarga de descargar los datos de la url
- platform: jsonrest
resource: https://sedeaplicaciones.minetur.gob.es/ServiciosRESTCarburantes/PreciosCarburantes/EstacionesTerrestres/FiltroProvincia/08
name: gasolinera
scan_interval: 21600
Para rascar entre los resultados os recomiendo la pagina https://jsonformatter.org/json-editor , en esta pagina desde la opcion load data pondremos la URL mencionada arriba para que descargue y formatee los datos
Y en la parte derecha nos aparecerán los datos ordenados y formateados correctamente
Localizaríamos el IDEESS que es el identificador único de cada estación de servicio , en rotulo os aparecerá el nombre y luego tenéis cada uno de los productos
Una vez que hemos localizado los IDEESS de todas las estaciones que queremos monitorizar pasaríamos a definir estos sensores en sensors.yaml o en vuestro configuration.yaml
- platform: template
sensors:
gasolinera1:
friendly_name: Alcampo (Sant Boi)
value_template: >-
{%- for petrol in states.sensor.gasolinera.attributes.ListaEESSPrecio -%}
{%- if petrol["IDEESS"] | int == 3011 -%}
{{ petrol["Precio Gasoleo A"] | capitalize | replace(",",".") }}
{%- endif -%}
{%- endfor -%}
unit_of_measurement: '€/L'
- platform: template
sensors:
gasolinera2:
friendly_name: CEPSA Solanas (L'H)
value_template: >-
{%- for petrol in states.sensor.gasolinera.attributes.ListaEESSPrecio -%}
{%- if petrol["IDEESS"] | int == 2977 -%}
{{ petrol["Precio Gasoleo A"] | capitalize | replace(",",".") }}
{%- endif -%}
{%- endfor -%}
unit_of_measurement: '€/L'
- platform: template
sensors:
gasolinera3:
friendly_name: Petronieves (Collbato)
value_template: >-
{%- for petrol in states.sensor.gasolinera.attributes.ListaEESSPrecio -%}
{%- if petrol["IDEESS"] | int == 10694 -%}
{{ petrol["Precio Gasoleo A"] | capitalize | replace(",",".") }}
{%- endif -%}
{%- endfor -%}
unit_of_measurement: '€/L'
- platform: template
sensors:
gasolinera4:
friendly_name: EsclatOil (Collbato)
value_template: >-
{%- for petrol in states.sensor.gasolinera.attributes.ListaEESSPrecio -%}
{%- if petrol["IDEESS"] | int == 12825 -%}
{{ petrol["Precio Gasoleo A"] | capitalize | replace(",",".") }}
{%- endif -%}
{%- endfor -%}
unit_of_measurement: '€/L'
- platform: template
sensors:
gasolinera5:
friendly_name: Petronieves (Esparreguera)
value_template: >-
{%- for petrol in states.sensor.gasolinera.attributes.ListaEESSPrecio -%}
{%- if petrol["IDEESS"] | int == 10693 -%}
{{ petrol["Precio Gasoleo A"] | capitalize | replace(",",".") }}
{%- endif -%}
{%- endfor -%}
unit_of_measurement: '€/L'
- platform: template
sensors:
gasolinera6:
friendly_name: Saras (Prat)
value_template: >-
{%- for petrol in states.sensor.gasolinera.attributes.ListaEESSPrecio -%}
{%- if petrol["IDEESS"] | int == 1744 -%}
{{ petrol["Precio Gasoleo A"] | capitalize | replace(",",".") }}
{%- endif -%}
{%- endfor -%}
unit_of_measurement: '€/L'
En la seccion recorder: añadir los siguientes sensores :
#PRECIO CARBURANTE
- sensor.gasolinera1
- sensor.gasolinera2
- sensor.gasolinera3
- sensor.gasolinera4
- sensor.gasolinera5
- sensor.gasolinera6
En customize.yaml añadir :
sensor.gasolinera1:
icon: mdi:gas-station
sensor.gasolinera2:
icon: mdi:gas-station
sensor.gasolinera3:
icon: mdi:gas-station
sensor.gasolinera4:
icon: mdi:gas-station
sensor.gasolinera5:
icon: mdi:gas-station
sensor.gasolinera6:
icon: mdi:gas-station
Con esta automatización haremos que dos minutos después de arrancar HA actualice el sensor :
- alias: Actualizar info carburantes
initial_state: 'on'
trigger:
- platform: homeassistant
event: start
action:
- delay: "00:02:00"
- service: homeassistant.update_entity
entity_id: sensor.gasolinera
Como bonus extra os dejo el código que yo uso para que me envíe a demanda los precios por Telegram
- id: 'telegram bot carburante'
alias: 'telegram bot carburante'
initial_state: 'on'
# hide_entity: true
trigger:
- platform: event
event_type: telegram_callback
event_data:
data: '/carburante'
action:
- service: telegram_bot.answer_callback_query
data_template:
callback_query_id: '{{ trigger.event.data.id }}'
message: 'Precios de Gasoleo A'
- service: notify.notif_telegram_bot
data_template:
# title: 'Menú'
message: |
{{ "\U000026FD" }}{{ "\U000026FD" }} *Precios de Gasoleo A* {{ "\U000026FD" }}{{ "\U000026FD" }}
*Alcampo Sant Boi*:{{(states.sensor.gasolinera1.state )}} €/L., {{(((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera1.state | float )) | round(2)) }} €/L.
Diferencia al mas caro (50lts.): {{((((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera1.state | float ))*50) | round(2) ) }}€
*Saras (Prat)*:{{(states.sensor.gasolinera6.state ) }} €/L., {{(((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera6.state | float )) | round(2)) }} €/L.
Diferencia al mas caro (50lts.): {{((((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera6.state | float ))*50) | round(2) ) }}€
*Petronieves Collb.*:{{(states.sensor.gasolinera3.state ) }} €/L., {{(((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera3.state | float )) | round(2)) }} €/L.
Diferencia al mas caro (50lts.): {{((((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera3.state | float ))*50) | round(2) ) }}€
*EsclatOil Collb.*:{{(states.sensor.gasolinera4.state ) }} €/L., {{(((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera4.state | float )) | round(2)) }} €/L.
Diferencia al mas caro (50lts.): {{((((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera4.state | float ))*50) | round(2) ) }}€
*Petronieves Esp.*:{{(states.sensor.gasolinera5.state ) }} €/L., {{(((states.sensor.gasolinera2.state | float ) - (states.sensor.gasolinera5.state | float )) | round(2)) }} €/L.
Diferencia al mas caro (50lts.): {{((((states.sensor.gasolinera5.state | float ) - (states.sensor.gasolinera1.state | float ))*50) | round(2) ) }}€
*CEPSA Solanas (L'H)*:{{(states.sensor.gasolinera2.state ) }} €/L.
data:
inline_keyboard:
- 'Principal:/cancel'
En vuestra sección lovelace podéis añadir un par de gráficas que siempre quedan genial :
- type: entities
title: Precios Gasoil-A
show_name: true
show_state: false
show_header_toggle: false
columns: 3
entities:
- sensor.gasolinera1
- sensor.gasolinera2
- sensor.gasolinera3
- sensor.gasolinera4
- sensor.gasolinera5
- sensor.gasolinera6
hours_to_show: 24
refresh_interval: 3000
- type: history-graph
title: 'Precio Gasoil-A 30 dias'
entities:
- sensor.gasolinera1
- sensor.gasolinera2
- sensor.gasolinera3
- sensor.gasolinera4
- sensor.gasolinera5
- sensor.gasolinera6
hours_to_show: 720
refresh_interval: 3000