Hoy hablaremos de los sensores REST, JSON REST y cómo 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: Editor JSON
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 árbol:
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.
Crearemos un sensor tal que así:
1 2 3 4 5 |
- 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 |
Explicación de las configuraciones:
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 custom_components, donde dentro del mismo viene varios archivos. Lo tendremos que copiar en la carpeta custom_components/jsonrest/
Una vez realizado el paso anterior deberemos crearnos un sensor tal que así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
- 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 quedaría tal que así: