Buenos días, si andas buscando una solución a controlar quien trabaja o no en casa para los automatismos de encendido de luces por la mañana, calefacción, etc encontré una forma de hacerlo con Google calendario.
Lo primero que hay que hacer es integrar Google calendario en Homeassistant, en la página oficial de Homeassistant viene como hacerlo, es muy sencillo y no se va a explicar en este tutorial.
En el configuratión tendreis esto:
1 2 3 |
google: client_id: !secret google_client_id_calendar client_secret: !secret google_client_secret_calendar |
Y despues de reiniciar os va a generar un archivo google_calendars.yaml
dentro de /config
en el que hay una configuración para cada uno de los calendarios que tengas en tu cuenta de Google calendario.
Esta es la estructura básica de un calendario:
1 2 3 4 5 6 7 |
- cal_id: tu_cuenta_google@gmail.com entities: - device_id: miguel_angel ignore_availability: true name: Miguel Angel track: true max_results: 10 |
Lo que vamos a hacer es usar el sensor binario workday de Homeassistant para definir que dias son los que trabajamos normalmente, usando eso y los días que le marquemos como de "vacaciones" vas a poder saber a través de sensores binarios si trabajas hoy o no.
Este sería el sensor binario Workday
1 2 3 4 5 6 |
binary_sensor: - platform: workday name: Workday country: ES workdays: [mon, tue, wed, thu, fri] excludes: [sat, sun] |
Con eso le indicamos que solo marque en el sensor binario dias laborables de lunes a viernes, si quieres modificarlo porque trabajas sabados puedes hacerlo.
AVISO: Este sistema vale perfectamente para los que trabajan por turnos o en dias alternos, tendrias que decirle que trabajas todos los días en el sensor Workday y luego definir los dias que no trabajas en Google calendario como veremos mas adelante.
Vamos a definir como sería la estrategia para definir los dias que va a marcar como de trabajo o de vacaciones, primeramente definimos los sensores que vamos a necesitar, yo lo he hecho de esta manera:
Los sensores de vacaciones son los que recogen desde el calendario de Google si estas de vacaciones o no, buscan un mensaje determinado para hacerlo y comparan si la hora actual now().strftime('%Y-%m-%d %H:%M:%S')
esta dentro del periodo de vacaciones, si es así marcará el sensor vacaciones correspondiente como ON.
Vamos a definir una serie de calendarios extras en el archivo yaml google_calendars.yaml,
en el definimos un calendario por cada evento que queremos monitorizar, en mi caso:
Debajo de nuestro calendario copiamos el primero y los editamos para dejarlos así como mi ejemplo, modificando lo que queráis en función de vuestros nombres.
Lo importante es que en cada calendario definais el
Este ultimo dato que ponemos en "search" es como tenemos que nombrar los enventos en Google calendario para que nos lo detecte y marque el sensor binario ON según nuestras indicaciones.
Nota: Es muy importante el uso correcto de las mayúsculas y minúsculas, si definis en el search "#Vacaciones Miguel" tenéis que poner luego en el evento en Google calendario "Vacaciones Miguel" en el tramo de vacaciones, si lo poneis de diferente forma no va a funcionar, por ejemplo "vacaciones Miguel"
Así es como quedan los calendarios en mi ejemplo en el archivo google_calendars.yaml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
- cal_id: cuentagoogle@gmail.com entities: - device_id: miguel_angel ignore_availability: true name: Miguel Angel track: true max_results: 10 - device_id: miguel_vacaciones ignore_availability: true name: miguel_vacaciones search: "#Vacaciones Miguel" track: true - device_id: vanesa_vacaciones ignore_availability: true name: vanesa_vacaciones search: "#Vacaciones Vanesa" track: true - device_id: alejandro_vacaciones ignore_availability: true name: alejandro_vacaciones search: "#Vacaciones Alejandro" track: true |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
binary_sensor: - platform: template sensors: vane_trabajo: value_template: >- {{ is_state('binary_sensor.vane_vacaciones', 'off') and is_state('binary_sensor.workday', 'on') }} miguel_trabajo: value_template: >- {{ is_state('binary_sensor.miguel_vacaciones', 'off') and is_state('binary_sensor.workday', 'on') }} alejandro_colegio: value_template: >- {{ is_state('binary_sensor.alejandro_vacaciones', 'off') and is_state('binary_sensor.workday', 'on') }} vane_vacaciones: value_template: >- {{ is_state_attr('calendar.vanesa_vacaciones', 'message', 'Vacaciones Vanesa') and state_attr('calendar.vanesa_vacaciones', 'start_time') < now().strftime('%Y-%m-%d %H:%M:%S') and state_attr('calendar.vanesa_vacaciones', 'end_time') > now().strftime('%Y-%m-%d %H:%M:%S') }} miguel_vacaciones: value_template: >- {{ is_state_attr('calendar.miguel_vacaciones', 'message', 'Vacaciones Miguel') and state_attr('calendar.miguel_vacaciones', 'start_time') < now().strftime('%Y-%m-%d %H:%M:%S') and state_attr('calendar.miguel_vacaciones', 'end_time') > now().strftime('%Y-%m-%d %H:%M:%S') }} alejandro_vacaciones: value_template: >- {{ is_state_attr('calendar.alejandro_vacaciones', 'message', 'Vacaciones Alejandro') and state_attr('calendar.alejandro_vacaciones', 'start_time') < now().strftime('%Y-%m-%d %H:%M:%S') and state_attr('calendar.alejandro_vacaciones', 'end_time') > now().strftime('%Y-%m-%d %H:%M:%S') }} |
En estos sensores tenéis que modificar los nombres de vuestros calendarios y el "message" que queréis que os busque.
Aquí os pongo el customize que uso yo en mi ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
homeassistant: customize: binary_sensor.workday: friendly_name: "Dia laborable" icon: mdi:briefcase binary_sensor.vane_trabajo: friendly_name: "Dia laborable Vanesa" icon: mdi:face-woman binary_sensor.alejandro_colegio: friendly_name: "Colegio Alejandro" icon: mdi:baby-face-outline binary_sensor.miguel_trabajo: friendly_name: "Dia laborable Miguel" icon: mdi:face binary_sensor.vane_vacaciones: friendly_name: "Vacaciones Vanesa" icon: mdi:beach binary_sensor.miguel_vacaciones: friendly_name: "Vacaciones Miguel" icon: mdi:beach binary_sensor.alejandro_vacaciones: friendly_name: "Vacaciones Alejandro" icon: mdi:beach |
De esta manera podéis usar los sensores binarios que se generan para definir cosas como cuando tiene que encenderse la calefacción si es un dia laborable o encendidos de luces por ejemplo.