msgbartop
Ph´nglui mglw´nafh Cthulhu R´lyeh wgah´nagl fhtagn
msgbarbottom

02 abr 22 Monitorización de precios de gasolineras con Node Red y Home Assistant

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.

VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)
Monitorización de precios de gasolineras con Node Red y Home Assistant, 10.0 out of 10 based on 1 rating
Comparte este artículo:
  • Twitter
  • Facebook
  • email
  • StumbleUpon
  • Delicious
  • Google Reader
  • LinkedIn
  • BlinkList

Etiquetas: , ,

Comentarios de los lectores

  1. |

    Buenas, me parece muy interesante, muchas gracias! Podrias exportar el flujo de Node Red? Muchas gracias de nuevo! Un saludo.

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    Responder a este comentario
    • |

      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”: “”
      }
      ]

      VN:F [1.9.20_1166]
      Rating: 0.0/5 (0 votes cast)
      Responder a este comentario

Deje un comentario







cuatro − = 0