En detalle: Todo lo necesario para dominar la temperatura de tu casa con Home Assistant

Bien sea porque el termostato que tenemos no funciona del todo bien, porque nos apetece crear nuestro propio algoritmo para controlar la temperatura, porque queremos tener en cuenta la temperatura de varias habitaciones, o la previsión meteorológica. Siempre hay una buena razón para ponernos manos a la obra y cambiar la forma en que funcionan los dispositivos a través de … lo habéis adivinado, a través del software Home Assitant.

En este viaje vamos a crear desde cero varias automatizaciones en nuestro sistema Home Assistant y de paso también vamos a aprender a usar un Timer, Templates, etc y todo con la idea de inspiraros y que no sea simplemente un copia/pega.

Plan para el control de la temperatura

El funcionamiento de un termostato básico no puede ser más simple: Se activa cuando la temperatura excede cierto valor, y se apaga cuando cae por debajo de otro valor. De esta manera creamos una zona de temperatura confortable entre estos valores mínimo y el máximo.

A la hora de diseñar una nueva forma de funcionamiento, es conveniente pensar un poco cómo sería el resultado final. Imaginemos por un momento que ya está realizado, que ya existe y que así es justo como queremos que funcione:

  • Queremos una forma de funcionamiento (vamos a llamarla «Modo Día») que tome el valor de un termómetro (el que decidamos nosotros), y encienda/apague nuestro aire acondicionado entre digamos 25ºC y 26.5ºC porque hemos comprobado que ese es el rango en el que estamos cómodos.
  • También queremos decirle durante cuánto tiempo queremos tener activo ese «Modo Día»

Visto así, parece que simplemente hemos replicado el funcionamiento de un termostato normal, pero este diseño os dará la base para desarrollar otros más complejos como por ejemplo:

  • En vez de mirar la temperatura en una sala, podremos controlar la temperatura media de varias habitaciones, o la máxima temperatura de ellas. O usar un sensor 2oo3 más robusto.
  • Podremos tener en cuenta no solo la temperatura, sino también el coste de la electricidad, o la previsión metorológica, la humedad, o cualquier otro parámetro.
  • Si no hay nadie en casa (por ejemplo instalando la aplicación móvil de Home Assistant en los móviles de la familia), inhabilitamos el control para no gastar inútilmente.
  • Las posibilidades como véis son infinitas.

Todo lo que necesitamos para empezar

Vamos a necesitar lógicamente un termostato conectado, pero aquí no tendremos problemas porque hay donde elegir:

Y sensores de temperatura ambiente, la mayoría incluyendo la medida de humedad también:

Y por supuesto, si no lo tenemos ya, tendremos que instalar el software totalmente gratuito Home Assistant en algún equipo que tengamos disponible, o aprovechar y comprar uno específico para usarlo como controlador domótico general en nuestro hogar.

Si está todo, ya tenemos todo lo necesario para implementar nuestro propio control.

Automatización principal en Home Assistant

Como hemos explicado al principio, nuestro control principal arrancará el aire acondicionado cuando superemos un valor de 26.5 ºC, y parará al bajar de 25ºC.

Esta simple automatización la podemos hacer bien de forma gráfica o usando el modo de texto (yaml).

Se accede en ambos casos desde el menú de Home Assistant, en la opción Settings > Automations & Scenes > Botón + CREATE AUTOMATION y escogemos la opción de crear desde cero:

Al principio nos abrirá el entorno de creación de automatizaciones en modo visual. Os pondremos capturas en este modo, y os enseñaremos cómo cambiar a modo texto para copiar directamente el código y modificar de manera más cómoda. Siempre podremos cambiar de un modo a otro.

Toda automatización en Home Assistant tendrá de forma genérica 3 partes:

  • Triggers – En esta sección pondremos qué evento o condición activa nuestra automatización. Si hay más de un trigger deben cumplirse todos ellos para considerarse activo.
  • Conditions – La condición debe cumplirse para dar paso a las acciones. Es opcional, por lo que si no ponemos ninguna tan pronto se cumplan el Trigger se ejecutarán las acciones.
  • Actions – Lo que queremos que haga nuestra automatización.

Este esquema tan simple puede complicarse para hacer todo tipo de cosas, pero centrándonos en nuestro ejemplo tendremos:

  • Nuestro trigger será un patrón de tiempo, por ejemplo cada 5 minutos (se especifica con la nomenclatura similar a la utilidad cron: /5) . Es decir, cada 5 minutos se activará esta automatización.
  • Condition en este caso lo dejaremos vacío. Es decir, no hay una condición previa a cumplir, por lo que cada 5 minutos ejecutaremos las acciones.
  • Nuestra Action se compondrá de varias ramas de ejecución, por lo que elegiremos el tipo Choose, y tendrá 2 opciones:
    • Option 1: Si temperatura < 25 –> apagamos aire acondicionado
    • Option 2: Si temperatura > 26.5 –> establecemos el modo cool en aire acondicionado, dejamos pasar 10 segundos y además seleccionamos un target o consigna de temperatura de 25ºC para que salga frío suficiente.

Tendremos que darle un nombre a nuestra automatización. En nuestro caso se llamará «aire_modo_dia«

De manera visual para que podáis replicarlo en vuestro caso os dejamos las capturas correspondientes:

Personalmente creo que cuando existen varias acciones anidadas dentro de las options os puede confundir un poco, pero lo cierto es que en parte es muy cómodo elegir el device correspondiente de un desplegable como ocurre en el modo visual.

Y ahora os pondremos el código en formato yaml. Para cambiar de un modo visual a otro de texto y viceversa, en el menú (3 puntos) de la esquina superior derecha:

A algunos les gusta más trabajar en este formato, pero no tenemos porqué renunciar a lo mejor de ambos mundos. Podemos empezar en visual y cambiar a yaml según nos convenga:

alias: aire_modo_dia
description: ''
trigger:
  - platform: time_pattern
    minutes: /5
condition: []
action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: sensor.ble_temperature_a
            below: '25'
        sequence:
          - service: climate.turn_off
            data: {}
            target:
              device_id: 7390a2e6dbfc9f628a0946d97244444
      - conditions:
          - condition: numeric_state
            entity_id: sensor.ble_temperature_a
            above: '26.5'
        sequence:
          - service: climate.set_hvac_mode
            data:
              hvac_mode: cool
            target:
              device_id: 7390a2e6dbfc9f628a0946d972444444
          - delay:
              hours: 0
              minutes: 0
              seconds: 10
              milliseconds: 0
          - service: climate.set_temperature
            data:
              temperature: 27
            target:
              device_id: 7390a2e6dbfc9f628a0946d972444444
    default: []
mode: single

Aquí ya si podéis copiar/pegar y modificar con vuestro device_id o los valores que más os convenzan. Cuidado con respetar los espacios.

Automatización para empezar a contar el tiempo

Ya tenemos la rutina principal de funcionamiento, y ahora vamos a «adornarla» con un Timer que nos permita establecer un tiempo máximo de funcionamiento y ver el tiempo restante.

Os ponemos primero como queda en el panel para que sea más fácil de enternder lo que queremos conseguir:

Lo primero es crear los Helpers o ayudantes que nos permitan establecer el tiempo en Horas, y el Timer para ver el tiempo restante.

Para ello, iremos a la sección del menú de Home Assistant: Settings > Devices & Services y elegimos en la pestaña Helpers la opción + CREATE HELPER

Para establecer las horas un helper será del tipo Number. Le hemos llamado aire_hh:

Al Helper de tipo Timer lo hemos denominado aire_timer:

Por último crearemos la automatización que nos permita poner en marcha el timer cuando activemos el modo día (de off a on), tomando como duración el valor que hemos establecido en aire_hh pero en segundos.

A esta automatización la hemos llamado aire_temporizador_on:

alias: aire_temporizador_on
description: ''
trigger:
  - platform: state
    entity_id:
      - automation.aire_modo_dia
    from: 'off'
    to: 'on'
condition: []
action:
  - service: timer.start
    data:
      duration: '{{ states(''input_number.aire_hh'') | int * 3600 }}'
    target:
      entity_id: timer.aire_timer
mode: single

Si os fijáis, hemos usado un template con la sintaxis de Jinja2 para multiplicar las horas por 3600 y pasarlos así a segundos como duración del timer.

El funcionamiento fonal de esta parte la podéis ver en el siguiente fagmento de vídeo:

Automatización al acabar el tiempo

Y la última automatización que nos queda es precisamente la de desactivar todo apagando incluso el aire cuando el Timer llega a 0, o lo que es lo mismo cuando pasa a estado Idle. La llamaremos aire_temporizador_off:

alias: aire_temporizador_off
description: ''
trigger:
  - platform: state
    entity_id:
      - timer.aire_timer
    to: idle
condition: []
action:
  - service: automation.turn_off
    data: {}
    target:
      entity_id: automation.aire_modo_dia
  - service: climate.turn_off
    data: {}
    target:
      device_id: 7390a2e6dbfc9f628a0946d972444444
mode: single

Hemos llegado al final, y sinceramente espero que os haya servido de inspiración y pongáis en comentarios cómo habéis modificado o qué otras rutinas habéis usado en el día a día.

Os dejo otras entradas por si os apetece seguir leyendo sobre este fascinante mundo:

Deja un comentario