Con el nivel tan disparatado de precios que están alcanzando los combustibles en estas fechas, es interesante tener una manera rápida de consultar los precios en diferentes estaciones de servicio, a fin de poder reposar en la que más nos convenga. Por razones de trabajo y sus subsecuentes desplazamientos, hay varias gasolineras que nos interesa a Ana y a mí tener monitorizadas. Existe una página del Ministerio para la Transición Ecológica (Geoportal de Gasolineras) que permite acceder a los precios de todas las estaciones de servicio de España, pero que no es especialmente usable para hacer consultas rápidas y recurrentes de las mismas estaciones, ya que lo que hace es desplegar un mapa y un buscador, pero que no proporciona URLs de acceso directo ni nada que se le parezca.

Captura de pantalla del Geoportal de Gasolineras
Captura de pantalla del Geoportal de Gasolineras

Al menos, no lo hace a la vista del usuario. Pero si trasteas un poco con el funcionamiento de la página, es posible ver que sí se hace uso a nivel interno de URLs únicas que proporcionan en el mapa los valores de cada una de las gasolineras en formato XML, para poder reflejar dichos valores al pulsar sobre las gasolineras, con un aspecto como este:

Información en XML de una gasolinera de Santiponce
Información en XML de una gasolinera de Santiponce

Y ya teniendo esta información, haciendo uso de Node Red es sencillo procesar los parámetros, jugar un poco con ellos, e insertarlos en topics MQTT. En mi caso, me quedo con el valor de la gasolina sin plomo 95, de tres estaciones de servicio determinadas, realizando consultas una vez a la hora para cada una de ellas.

Flujo de procesamiento definido en Node Red
Flujo de procesamiento definido en Node Red

Por último, al existir esta información en un topic MQTT, es sencillo consumirla desde Home Assistant. En mi caso, he optado por mostrarla en tres diales, para que sea sencillo comparar los precios entre estaciones. Además, como valor añadido, me guarda el histórico de cotizaciones y cuándo se produjeron cambios en las mismas.

Precios de la gasolina 95 en tres estaciones, mostrados en Home Assistant
Precios de la gasolina 95 en tres estaciones, mostrados en Home Assistant
Histórico de cambios
Histórico de cambios

Con todo esto, es sencillo comprobar el precio de los combustibles en nuestro Home Assistant, al que accedemos desde nuestro móvil, de un solo vistazo, y escoger el sitio óptimo para repostar. Estoy pensando en darle una vuelta de tuerca, e integrar un sistema de consulta en los sistemas de infoentretenimiento de los coches, pero eso quedará para otra ocasión.

2 comentarios en «Monitorización de precios de gasolineras con Node Red y Home Assistant»

    1. Hola, Javi. Me alegra que te haya parecido interesante. Te pego el flujo por aquí:

      [
      {
      «id»: «cedb77e.8151288»,
      «type»: «tab»,
      «label»: «Gasolineras»,
      «disabled»: false,
      «info»: «»
      },
      {
      «id»: «4bf097d3.91c9c8»,
      «type»: «http request»,
      «z»: «cedb77e.8151288»,
      «name»: «Forcarey Petrol Station»,
      «method»: «GET»,
      «ret»: «txt»,
      «paytoqs»: false,
      «url»: «https://geoportalgasolineras.es/rest/10535/busquedaEstacionPrecio»,
      «tls»: «»,
      «persist»: false,
      «proxy»: «»,
      «authType»: «»,
      «x»: 160,
      «y»: 240,
      «wires»: [
      [
      «82d2847b.287278»
      ]
      ]
      },
      {
      «id»: «9bb52fac.228a»,
      «type»: «inject»,
      «z»: «cedb77e.8151288»,
      «name»: «Request petrol price each hour»,
      «topic»: «»,
      «payload»: «»,
      «payloadType»: «date»,
      «repeat»: «3600»,
      «crontab»: «»,
      «once»: true,
      «onceDelay»: «»,
      «x»: 162.99998474121094,
      «y»: 142.99999713897705,
      «wires»: [
      [
      «4bf097d3.91c9c8»,
      «af3087a2.147a88»,
      «80cd5818.e0d808»
      ]
      ]
      },
      {
      «id»: «edaa287b.f245d8»,
      «type»: «mqtt out»,
      «z»: «cedb77e.8151288»,
      «name»: «»,
      «topic»: «system/petrol/forcarey»,
      «qos»: «0»,
      «retain»: «»,
      «broker»: «96bfde3d.44d32»,
      «x»: 820,
      «y»: 280,
      «wires»: []
      },
      {
      «id»: «dfa8a753.8f8eb8»,
      «type»: «debug»,
      «z»: «cedb77e.8151288»,
      «name»: «»,
      «active»: true,
      «tosidebar»: true,
      «console»: false,
      «tostatus»: false,
      «complete»: «false»,
      «x»: 650,
      «y»: 200,
      «wires»: []
      },
      {
      «id»: «52a126c1.f4c088»,
      «type»: «function»,
      «z»: «cedb77e.8151288»,
      «name»: «Parse Petrol 95 data»,
      «func»: «var gas_data = {\n \»town\»:msg.payload.EstacionPrecioVO.municipio[0],\n \»petrol95\»:Number(msg.payload.EstacionPrecioVO.precioGasolina95E5[0])\n }\n//msg.payload=msg.payload[54].toString().split(\» \»)[0], \nmsg.payload=gas_data;\n\nreturn msg;»,
      «outputs»: 1,
      «noerr»: 0,
      «x»: 520,
      «y»: 280,
      «wires»: [
      [
      «2bd39b92.ab4a34»
      ]
      ]
      },
      {
      «id»: «82d2847b.287278»,
      «type»: «xml»,
      «z»: «cedb77e.8151288»,
      «name»: «»,
      «property»: «payload»,
      «attr»: «»,
      «chr»: «»,
      «x»: 350,
      «y»: 280,
      «wires»: [
      [
      «52a126c1.f4c088»
      ]
      ]
      },
      {
      «id»: «1612ab1a.72a175»,
      «type»: «mqtt out»,
      «z»: «cedb77e.8151288»,
      «name»: «»,
      «topic»: «system/petrol/bueu»,
      «qos»: «0»,
      «retain»: «»,
      «broker»: «96bfde3d.44d32»,
      «x»: 810,
      «y»: 340,
      «wires»: []
      },
      {
      «id»: «af3087a2.147a88»,
      «type»: «http request»,
      «z»: «cedb77e.8151288»,
      «name»: «Bueu Petrol Station»,
      «method»: «GET»,
      «ret»: «txt»,
      «paytoqs»: false,
      «url»: «https://geoportalgasolineras.es/rest/300/busquedaEstacionPrecio»,
      «tls»: «»,
      «persist»: false,
      «proxy»: «»,
      «authType»: «»,
      «x»: 150,
      «y»: 280,
      «wires»: [
      [
      «82d2847b.287278»
      ]
      ]
      },
      {
      «id»: «fbc3960.79a3f68»,
      «type»: «mqtt out»,
      «z»: «cedb77e.8151288»,
      «name»: «»,
      «topic»: «system/petrol/santiponce»,
      «qos»: «0»,
      «retain»: «»,
      «broker»: «96bfde3d.44d32»,
      «x»: 830,
      «y»: 420,
      «wires»: []
      },
      {
      «id»: «80cd5818.e0d808»,
      «type»: «http request»,
      «z»: «cedb77e.8151288»,
      «name»: «Santiponce Petrol Station»,
      «method»: «GET»,
      «ret»: «txt»,
      «paytoqs»: false,
      «url»: «https://geoportalgasolineras.es/rest/6481/busquedaEstacionPrecio»,
      «tls»: «»,
      «persist»: false,
      «proxy»: «»,
      «authType»: «»,
      «x»: 170,
      «y»: 320,
      «wires»: [
      [
      «82d2847b.287278»
      ]
      ]
      },
      {
      «id»: «2bd39b92.ab4a34»,
      «type»: «switch»,
      «z»: «cedb77e.8151288»,
      «name»: «»,
      «property»: «payload.town»,
      «propertyType»: «msg»,
      «rules»: [
      {
      «t»: «eq»,
      «v»: «Forcarei»,
      «vt»: «str»
      },
      {
      «t»: «eq»,
      «v»: «Bueu»,
      «vt»: «str»
      },
      {
      «t»: «eq»,
      «v»: «Santiponce»,
      «vt»: «str»
      }
      ],
      «checkall»: «true»,
      «repair»: false,
      «outputs»: 3,
      «x»: 610,
      «y»: 420,
      «wires»: [
      [
      «edaa287b.f245d8»
      ],
      [
      «1612ab1a.72a175»
      ],
      [
      «fbc3960.79a3f68»
      ]
      ]
      },
      {
      «id»: «96bfde3d.44d32»,
      «type»: «mqtt-broker»,
      «z»: «»,
      «name»: «»,
      «broker»: «192.168.0.3»,
      «port»: «1883»,
      «clientid»: «»,
      «usetls»: false,
      «compatmode»: false,
      «keepalive»: «60»,
      «cleansession»: true,
      «birthTopic»: «»,
      «birthQos»: «0»,
      «birthPayload»: «»,
      «closeTopic»: «»,
      «closeQos»: «0»,
      «closePayload»: «»,
      «willTopic»: «»,
      «willQos»: «0»,
      «willPayload»: «»
      }
      ]

Responder a yuri Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *