Integración google calendario con Homeassistant

Buenos días, 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.

Configuración inicial

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:

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:

- 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

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.

Estrategia

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:

  • Sensor dia laborable: Sensor Workday. 
  • Sensor dia laborable parienta: SI es dia laborable y NO es fin de semana y NO tiene vacaciones, sensor ON
  • Sensor dia laborable mio: SI es dia laborable y NO es fin de semana y NO tiene vacaciones, sensor ON
  • Sensor colegio niño: SI es dia laborable y NO es fin de semana y NO tiene vacaciones, sensor ON
  • Sensor vacaciones parienta: SI tiene vacaciones AHORA, sensor ON
  • Sensor vacaciones mio: SI tiene vacaciones AHORA, sensor ON
  • Sensor vacaciones niño: SI tiene vacaciones AHORA, sensor ON

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.

Calendarios extras

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:

  • miguel_vacaciones
  • vane_vacaciones
  • alejandro_vacaciones

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 

  • device_id: miguel_vacaciones
  • search: «#Vacaciones Miguel»

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 archivogoogle_calendars.yaml:

- 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

Sensores binarios

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 teneis que modificar los nombres de vuestros calendarios y el «message» que quereis que os busque.

Customize

Aquí os pongo el customize que uso yo en mi ejemplo:

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

Conclusión

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.

Esto es todo, nos vemos como siempre por el canal oficia de Telegram de Domology.

Deja una respuesta

Síguenos

Siguenos en facebook
Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de sus datos para estos propósitos. Ver
Privacidad