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