Sensación térmica de OpenData AEMET en Home Asssistant.

Hoy vamos a mejorar la integración de una estación de la Agencia Estatal de Meteorología, usando OpenData AEMET para calcular la Sensación térmica en Home Assistant para condiciones extremas de frío y calor, como siempre… con Paciencia.

Una de las integraciones más útiles que podemos usar en nuestro sistema Home Assistant son los datos de alguna estación meteorológica cercana, con la garantía de estar mantenida y calibrada por la Agencia Estatal de Meteorología.

Una vez tengamos los datos en nuestro sistema, crearemos templates para realizar los cálculos y ver su riesgo asociado, tanto en situaciones de mucho frío como de mucho calor.

Para ver condiciones en el interior de la vivienda os recomiendo la siguiente oferta , y el post relacionado:

  • [Captura cambios de temperatura y humedad] La temperatura y la humedad del aire están estrechamente relacionados con nuestra salud. Los cambios repentinos pueden provocar sequedad de boca, resfriados, fiebre, alergias y molestias. El termómetro e higrómetro Mijia pueden experimentar cambios de temperatura y humedad.
  • [Conecta dispositivos inteligentes con la red Bluetooth Mijia] el tiempo caliente, el aire acondicionado automático se alcanza en la aplicación Mijia. Enciende o apaga el aire acondicionado automáticamente.
  • [Modo especial para el bebé] Desarrolla el modo de bebé Si la temperatura o la humedad supera la comodidad del bebé, Mijia App te recuerda automáticamente las propuestas de gestión y te da la posibilidad de darle a ti y a tu familia un sabio.
  • [Muy preciso] Sensación suiza incorporada, alta precisión, para no perder la temperatura de 0,1 °C y la humedad del aire del 1% de humedad relativa, recuerdan a usted y a su familia a tiempo.
  • Almacenamiento de datos, cambios que usted puede comprobar] Abra la aplicación Mijia y añada el medidor de temperatura y humedad Bluetooth Mijia 2 para mostrar la curva de temperatura y cambio de humedad en tiempo real. Los datos del cambio de temperatura y humedad se almacenan en el cuerpo del termómetro y en la nube.

Vamos paso a paso:

Paso 1. Obtención de API Key para OpenData AEMET

Lo primero es obtener una clave API para poder acceder a los datos en abierto. Desde openData de AEMET solicitaremos dicha clave:

AEMET OpenData API

Nos pedirán nuestro email para el siguiente paso:

AEMET OpenData

Finalmente nos habrá llegado un email con un enlace para confirmar. Tendremos que esperar muy poco hasta recibir, de nuevo por email, la clave API de acceso.

Guardad esta clave, pues nos hará falta para este u otros proyectos. La agencia estatal pone a dispoción del público información muy valiosa si se sabe usar, y van ampliando el catálogo.

Paso 2. Elección de la estación

Desde la página de observación, seleccionamos «hoy y últimos días», y podréis buscar vuestra población desde un mapa o directamente en una tabla:

Identificación estación AEMET

En el encabezado de los datos obtenidos tendremos nuestra identificación de estación. La anotamos:

Identificación estación AEMET Home Assistant

Paso 3. Integración AEMET

Con la API key y el código de nuestra estación, el siguiente paso es la instalación en nuestro propio sistema HA.

La manera más fácil de integrar la podemos encontrar en HACS. Si no tenéis instalado HACS os lo recomiendo, y podéis verlo en un apartado dentro de este otro post

Una vez tengamos HACS, buscaremos el addon en el repositorio:

Temperatura AEMET Home Assistant

Nos queda incluir las siguientes líneas en el fichero configuration.yaml, y mejor si se pone la api_key en secrets (yo lo dejo para que se vea la posición donde va). Recordad reemplazar los datos de API key y la id de estación con los vuestros:

- platform: aemet
    name: "AEMET"
    api_key: "xxxbGciOiJIUzIxxxxxyJzdWvbmlvLxxxxxxGxhLnNpbHZhQGdtYWlsL..."
    station_id: "5911A"
    monitored_conditions:
      - temperature
      - humidity
      - pressure
      - precipitation
      - snow
      - visibility
      - wind_speed
      - wind_max_speed
      - wind_bearing

Otra opción más fácil si quieres todos y cada uno de los atributos disponibles es desde la propia instalación de la integración:

Hasta 37 entidades rescata con la API de OpenData de AEMET, tomando los datos de la estación más cercana a la ubicación definida en la aplicación. Entre dichos datos estará (como un sensor más expuesto del sistema) el código de la estación, precipitaciones. nieve, temperaturas, etc… todo guardado en histórico si os apetece.

AEMET proporciona datos codificados. La interpretación de cada código nos la puede facilitar la propia AEMET en los metadatos, pero mucho más fácil que esta integración nos la traduzca directamente, ¿verdad?

Paso 4. Cálculo de expresiones de sensación térmica en Home Assistant

Para ampliar la información que nos facilitan desde la Agencia, haremos el cálculo en HA, haciendo uso de dos índices establecidos por la propia Agencia, llamados Wind Chill para el caso de frío, y Heat Index en el caso de calor. Esto nos dará información muy util sobr estos conceptos.

Lo primero es aclarar un error muy común: El resultado de estos cálculos NO es una temperatura y NO tiene unidades de ºC. Es un número adimensional para luego evaluar en varios tramos de peligrosidad cada caso.

Las expresiones que implementaremos para el cálculo de la sensación térmica usarán la temperatura como una de las variables, además de la velocidad del viento:

Para el caso de sensación de frío:

Sensación térmica por frío. Home Assistant

Y para la sensación de calor:

Sensación Térmica por calor. Home Assistant
  • T = temperatura del aire ambiente en grados Celsius
  • V = velocidad del viento en km/h a la altura estándar de medida (10 m), que tendremos que multiplicar por 1.5 para adaptar a la altura de la cara.
  • HR = humedad relativa del aire en %

Los posibles valores podemos verlos representados en las siguientes tablas:

Cálculo de sensación térmica en Home Assistant.

Cálculo de sensación térmica en Home Assistant.

Como véis las variables que necesitamos las tenemos ya disponibles en la integración de (temperatura, humedad relativa y velocidad de viento):

También, para hacer las cosas bien, tendremos en cuenta los rangos de aplicación de estas dos fórmulas:

  • Para el caso de frío el cálculo será válido para -50ºC < T < 10ºC
  • Para el caso de calor el cálculo será váliso para T > 26ºC y HR > 40%

Pues bien, con todos estos datos, ya podemos empezar. Primero averiguando los nombres de nuestras variables en nuestro sistema:

  • T = sensor.aemet_temperature
  • V = sensor.aemet_wind_speed
  • HR = sensor.aemet_humidity

Y haciendo uso de la magia de Jinja, los template de los nuevos sensores nos quedarán de la siguiente forma en nuestro fichero configuration.yaml:

  - platform: template
    sensors:

      aemet_stf:
        friendly_name: "Sensac térmica por frío"
        unit_of_measurement: ''
        value_template: "
		{% set T=states('sensor.aemet.temperature')|float %}
		{% set V=states('sensor.aemet_wind_speed')|float %}
		{%- if T>-50 and T<10 -%}
		  {{ (( 13.1267 + 0.6215*T)-11.37*(V*1.5)**0.16 + 0.3965*T*(V*1.5)**0.16 ) | round(0)}}
		{%- else -%}
		  No evaluado
		{%- endif -%}"


      aemet_stc:
        friendly_name: "Sensac térmica por calor"
        unit_of_measurement: ''
        value_template: "
		{% set T=states('sensor.aemet_temperature')|float %}
		{% set HR=states('sensor.aemet_humidity')|float %}
		{%- if T>26 and HR>40 -%}
		  {{ (-8.78469476 + 1.61139411*T + 2.338548839*HR - 0.14611605*T*HR - 0.012308094*T**2 - 0.016424828*HR**2 + 0.002211732*T**2*HR + 0.00072546*T*HR**2 - 0.000003582*T**2*HR**2) | round(0)}}
		{%- else -%}
		  No evaluado
		{%- endif -%}"

Estos índices numéricos de sensación térmica de por sí no nos dicen mucho. Deberemos evaluarlos usando las siguiente tablas facilitadas por la Agencia:

Para el caso de frío:

Evaluación riesgo frío. Home Assistant

Y para el caso de calor:

Evaluación riesgo calor. Home Assistant

Por tanto, tendremos estos otros dos sensores a incluir en la misma sección que los dos anteriores en nuestro fichero configuration.yaml para luego mostrarlos en nuestro dashboard:

      aemet_stf_riesgo:
        friendly_name: "Riesgo térmico por frío"
        unit_of_measurement: ''
        value_template: "
		{% set stf=states('sensor.aemet_stf') %}
        {%- if stf!='No evaluado' -%}
          {% set stf=states('sensor.aemet_stf')|int %}
		  {%- if stf>-10 -%}
            Sin riesgo
          {%- elif stf<=-10 and stf>=-27 -%}
		    Riesgo bajo
          {%- elif stf<=-28 and stf>=-39 -%}
            Riesgo moderado
          {%- elif stf<=-40 and stf>=-54 -%}
            Riesgo alto
          {%- elif stf<=-55 -%}
            Riesgo muy alto
          {%- endif -%}
		{%- else -%}
          No evaluado
        {%- endif -%}"
        

      aemet_stc_riesgo:
        friendly_name: "Riesgo térmico por calor"
        unit_of_measurement: ''
        value_template: "
        {% set stc=states('sensor.aemet_stc') %}
        {%- if stc!='No evaluado' -%}
          {% set stc=states('sensor.aemet_stc')|int %}
	      {%- if stc<27 -%}
            Sin riesgo
          {%- elif stc>=27 and stc<=32 -%}
	        Precaución
          {%- elif stc>=33 and stc<=40 -%}
            Precaución extrema
          {%- elif stc>=41 and stc<=53 -%}
            Peligro
          {%- elif stc>=54 -%}
            Peligro extremo
          {%- endif -%}
	    {%- else -%}
          No evaluado
        {%- endif -%}"

En nuestro dashboard la representación de la sensación térmica nos quedaría de la siguiente manera:

Cálculo de sensación térmica en Home Assistant.

En mi opinión las estaciones de la Agencia Estatal de Meteorología son la solición ideal para estos temas tratados, pero para aquellos enamorados de le meteorología, lo ideal es montar tu estación a medida por ejemplo con el equipo de Netatmo:

  • Medición de la temperatura ambiente interior y exterior en tiempo real: temperatura, humedad, calidad del aire interior y exterior, nivel de ruido interior, presión atmosférica
  • Alertas en tiempo real Con nuestra estación meteorológica, puedes configurar alertas interiores y exteriores, que luego recibirás en tu smartphone
  • Análisis de los valores de medición: tiene acceso a los valores de medición y, por lo tanto, puede comprender mejor los cambios climáticos mediante el análisis de gráficos.
  • Previsiones para el futuro Consulta las previsiones para los próximos 7 días y adapta tu ropa y actividades al clima que se avecina
  • Consejo para la solución de problemas Desconecte y vuelva a conectar el módulo interior. Comprueba que el LED parpadea tres veces. Si no parpadea, prueba con otro cable micro USB y otro adaptador de corriente en el módulo interior. Oblígalo a salir e inicia el Netatmo Nueva aplicación Weather en tu smartphone. La estación puede tardar hasta 10 minutos en volver a conectarse

Aparte de mostrarlos, podréis usarlo para otros casos en automatizaciones basados en la sensación térmica, avisos por telegram, etc. Podéis dejar vuestras ideas en los comentarios.

1 comentario en «Sensación térmica de OpenData AEMET en Home Asssistant.»

  1. Hola, estamos haciendo un proyecto para automatizar determinados sensores en función de la sensación térmica, pero los valores no están funcionando correctamente. Hoy por ejemplo el valor de sensación térmica por frío está en valor 4, pero el riesgo térmico por frío siempre aparece como desconocido, o sea, que no está funcionando…
    Te paso mi configuration.yaml a ver si encuentras el error:
    # Loads default set of integrations. Do not remove.
    default_config:

    # Load frontend themes from the themes folder
    frontend:
    themes: !include_dir_merge_named themes

    automation: !include automations.yaml
    script: !include scripts.yaml
    scene: !include scenes.yaml

    aemet:
    api_key: «eyJhb…»
    station_id: «5515X»
    monitored_conditions:
    – temperature
    – humidity
    – pressure
    – precipitation
    – snow
    – visibility
    – wind_speed
    – wind_max_speed
    – wind_bearing

    sensor:
    – platform: template
    sensors:
    aemet_stf:
    friendly_name: «Sensac térmica por frío»
    unit_of_measurement: »
    value_template: >
    {% set T=states(‘sensor.aemet_temperature’)|float %}
    {% set V=states(‘sensor.aemet_wind_speed’)|float %}
    {%- if T > -50 and T
    {% set T=states(‘sensor.aemet_temperature’)|float %}
    {% set HR=states(‘sensor.aemet_humidity’)|float %}
    {%- if T > 26 and HR > 40 -%}
    {{ (-8.78469476 + 1.61139411*T + 2.338548839*HR – 0.14611605*T*HR – 0.012308094*T**2 – 0.016424828*HR**2 + 0.002211732*T**2*HR + 0.00072546*T*HR**2 – 0.000003582*T**2*HR**2) | round(0) }}
    {%- else -%}
    No evaluado
    {%- endif -%}
    aemet_stf_riesgo:
    friendly_name: «Riesgo térmico por frío»
    unit_of_measurement: »
    entity_id: sensor.aemet_stf_riesgo # Agregado el ID único
    value_template: >
    {% set stf=states(‘sensor.aemet_stf’) %}
    {%- if stf != ‘No evaluado’ -%}
    {% set stf=stf|int %}
    {%- if stf > -10 -%}
    Sin riesgo
    {%- elif stf = -27 -%}
    Riesgo bajo
    {%- elif stf = -39 -%}
    Riesgo moderado
    {%- elif stf = -54 -%}
    Riesgo alto
    {%- elif stf
    {% set stc=states(‘sensor.aemet_stc’) %}
    {%- if stc != ‘No evaluado’ -%}
    {% set stc=stc|int %}
    {%- if stc = 27 and stc = 33 and stc = 41 and stc = 54 -%}
    Peligro extremo
    {%- endif -%}
    {%- else -%}
    No evaluado
    {%- endif -%}

Los comentarios están cerrados.