Sensores REST y JSONrest

Buenas a Todos de nuevo! Hoy hablaremos de los sensores REST, JSON rest y como añadirlos a Home Assistant.

Imaginemos que tenemos un API publica tipo: autobuses urbanos, farmacias, etc… para saber datos en el momento de Instituciones publicas o simplemente al json que nos proporcione datos que queremos añadirlos a HA. Pues con estos sensores se pueden agregar fácilmente. En este tutorial vamos a crear sensores para las frecuencias de autobuses como ejemplo.

La diferencia entre REST y JSONrest reside en el que el primero se sacan los valores individuales con peticiones individuales de HTTP, es decir, tenemos que generar un sensor por cada dato a extraer de ese JSON mientras que si queremos sacar varios valores y generar solo un sensor (con una sola petición de HTTP)  nos servirá el ultimo de todos.

Vamos por partes. Este tutorial lo vamos a realizar con un json de información sobre frecuencias de autobuses urbanos pero puede servir cualquiera. Empezamos con el sensor REST.

Lo primero de todo deberemos instalarnos un addon para el navegador chrome llamado Json editor. Podemos descargarlo desde este enlace:

Una vez instalado podremos acceder a el poniendo en la barra de direcciones: chrome://apps y clicando sobre la extension correspondiente.

Tenemos ya el json correspondiente a la parada de autobús de la que queremos sacar los datos, en este caso el link seria este: https://www.zaragoza.es/sede/servicio/urbanismo-infraestructuras/transporte-urbano/poste-autobus/tuzsa-340.json

Tenemos que abrir este enlace en la extensión de chrome en la opción OPEN/OPEN URL. Nos tiene que quedar la pantalla así:

A simple vista no salen todos los datos, para verlos todos tendremos que ir a las flechas que tenemos hacia la derecha y clicarle, empezaremos a ver como se despliegan como las ramas de un arbol:

Imaginemos que de todos estos datos solo queremos sacar 1 para lo que usaríamos solo el sensor REST. En este caso queremos sacar la frecuencia del primer autobus de la linea 39.

Creariamos un sensor tal que asi:

- platform: rest
  resource: https://www.zaragoza.es/sede/servicio/urbanismo-infraestructuras/transporte-urbano/poste-autobus/tuzsa-340.json
  name: Frecuencia Linea 39
  value_template: '{{ value_json.destinos.1.primero }}'
  scan_interval: 50

Explicacion de las configuraciones:

  • resource: aquí le pondríamos el link del json para extraer los datos.
  • name: nombre que le queramos poner al sensor
  • scan_interval: cada cuantos segundos queremos que actualice ese valor.
  • value template (Importante): siempre empezaría por ‘{{ value_json.xxx.xxx.xxx}}’ En el arbol de los datos tendremos que ir siguiendo la lógica de la pantalla siguiente. El object lo obviamos. Veremos como ponemos el primer dato (destinos) la rama siguiente seria el dato (1) y por ultimo el dato (primero).

Una vez realizado la configuración, lo agregaremos al frontend y nos saldría un sensor tipo así:

Pues hasta aquí ya hemos sabido usar el sensor REST y como sacar los datos de un JSON. Pues ahora toca el momento de explicar como seria con un JSONRest que es mas o menos igual que el anterior, con la diferencia que al no generar una petición de datos (http) por cada sensor sino que 4 o mas sensores cogen la información de 1 principal no generaremos tanto trafico para actualizarlos.

Lo primero es descargarnos este ZIP, donde dentro del mismo viene el archivo jsonrest.py. Lo tendremos que copiar en la carpeta custom_components/sensor/.

Una vez realizado el paso anterior deberemos crearnos un sensor tal que así:

- platform: jsonrest
  resource: https://www.zaragoza.es/sede/servicio/urbanismo-infraestructuras/transporte-urbano/poste-autobus/tuzsa-340.json
  name: origendatos
  scan_interval: 40

- platform: template
  sensors:
    pasobus39:
      value_template: '{{ states.sensor.origendatos.attributes.destinos.0.primero}}'
      friendly_name: Bus 39
    pasobus32:
      value_template: '{{ states.sensor.origendatos.attributes.destinos.1.primero}}'
      friendly_name: Bus 32
    pasobus21:
      value_template: '{{ states.sensor.origendatos.attributes.destinos.2.primero}}'
      friendly_name: Bus 21
    pasobus22:
      value_template: '{{ states.sensor.origendatos.attributes.destinos.3.primero}}'
      friendly_name: Bus 22

Vemos que parece idéntico al REST pero cambia la plataforma y generaremos justo debajo de este sensor varios templates donde sacaremos los datos del sensor principal que seria el de arriba. El value template recoge los attributes (datos) del sensor principal, por eso la coletilla es la misma que para el REST.

Por ultimo añadiríamos estos sensores al frontend y nos quedaria tal que asi:

Con esto doy por concluido el Tutorial, espero que os haya gustado como siempre y si teneis alguna pregunta o aclaración ya sabéis donde encontrarme!!

Un saludiko!!

 

También te podría gustar...

Deja un comentario