Programador diario para HA

Este pequeño tutorial para Home Assistant nos permitirá poder seleccionar de forma dinámica que días de la semana queremos que se activen ciertos automations como por ejemplo encender un A/C, la calefacción, un riego, etc

Lo primero es crear el sensor.día_de_la_semana:

sensor:

  - platform: template
    sensors:
      dia_de_la_semana:
        value_template: " {{ ['Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo'][now().weekday()] }}"
        entity_id: sensor.time

Lo siguiente es crear los input_select de cada día o los input_boolean según lo que necesitemos:

input_select:

  lunes:
    name: Lunes
    options:
      - Libre
      - Lunes

  martes:
    name: Martes
    options:
      - Libre
      - Martes

  miercoles:
    name: Miercoles
    options:
      - Libre
      - Miercoles

  jueves:
    name: Jueves
    options:
      - Libre
      - Jueves

  viernes:
    name: Viernes
    options:
      - Libre
      - Viernes

  sabado:
    name: Sabado
    options:
      - Libre
      - Sabado

  domingo:
    name: Domingo
    options:
      - Libre
      - Domingo
input_boolean:

  lunes:
    name: Lunes

  martes:
    name: Martes

  miercoles:
    name: Miercoles

  jueves:
    name: Jueves

  viernes:
    name: Viernes

  sabado:
    name: Sabado

  domingo:
    name: Domingo

Ahora solo nos falta añadir una condición en el automation correspondiente, este ejemplo es con input_select:

  - alias: 'Encender Yeelight'
    initial_state: true
    hide_entity: false
    trigger:
      platform: mqtt
      topic: 'zigbee2mqtt/0x00158d0001f9c4f1'
    condition:
      - condition: template
        value_template: "{{ 'single' == trigger.payload_json.click }}"
      - condition: template  ##Condition necesaria para el programador
        value_template: >
          {%- if (states.sensor.dia_de_la_semana.state == states.input_select.lunes.state) or
          (states.sensor.dia_de_la_semana.state == states.input_select.martes.state) or 
          (states.sensor.dia_de_la_semana.state == states.input_select.miercoles.state) or
          (states.sensor.dia_de_la_semana.state == states.input_select.jueves.state) or
          (states.sensor.dia_de_la_semana.state == states.input_select.viernes.state) or
          (states.sensor.dia_de_la_semana.state == states.input_select.sabado.state) or
          (states.sensor.dia_de_la_semana.state == states.input_select.domingo.state) %}
            True
          {% else %}
            False
          {% endif %}
    action:
      - service_template: >-
          {%- if is_state( 'light.yeelight_salon', 'off') %}
            script.yeelight_on
          {%- elif is_state( 'light.yeelight_salon', 'on') %}
            script.yeelight_off
          {% endif %}
        entity_id: light.yeelight_salon

Y aquí utilizando input_boolean:

  - alias: 'Encender Yeelight'
    initial_state: true
    hide_entity: false
    trigger:
      platform: mqtt
      topic: 'zigbee2mqtt/0x00158d0001f9c4f1'
    condition:
      - condition: template
        value_template: "{{ 'single' == trigger.payload_json.click }}"
      - condition: template
        value_template: >
          {%- if (states.sensor.dia_de_la_semana.state == 'Lunes' and states.input_boolean.lunes.state == 'on') or
          (states.sensor.dia_de_la_semana.state == 'Martes' and states.input_boolean.martes.state == 'on') or 
          (states.sensor.dia_de_la_semana.state == 'Miercoles' and states.input_boolean.miercoles.state == 'on') or
          (states.sensor.dia_de_la_semana.state == 'Jueves' and states.input_boolean.jueves.state == 'on') or
          (states.sensor.dia_de_la_semana.state == 'Viernes' and states.input_select.viernes.state == 'on') or
          (states.sensor.dia_de_la_semana.state == 'Sabado' and states.input_select.sabado.state == 'on') or
          (states.sensor.dia_de_la_semana.state == 'Domingo' and states.input_select.domingo.state == 'on') %}
            True
          {% else %}
            False
          {% endif %}
    action:
      - service_template: >-
          {%- if is_state( 'light.yeelight_salon', 'off') %}
            script.yeelight_on
          {%- elif is_state( 'light.yeelight_salon', 'on') %}
            script.yeelight_off
          {% endif %}
        entity_id: light.yeelight_salon

Para activar o desactivar un día es suficiente con declarar los input_select o boolean en una card de lovelace y luego seleccionar el día de la semana que corresponda.

Para añadir otro programador que no coincida en días activos con el que ya tenemos habrá que duplicar los input de los días y declararlos según el nuevo nombre que le designemos.

Espero que más de uno le pueda dar buen uso a este pequeño aporte y cualquier duda lo mejor es pasarse por el grupo de telegram de @Domology

Deja un comentario

Síguenos

Siguenos en facebook