Saltar al contenido

Control Horario Home Assistant Google Calendar: Guía 2026

11/10/2021

Actualizado el 22 de abril de 2026

En la domótica moderna, el seguimiento de presencia en Home Assistant es una de las herramientas más potentes. En esta guía definitiva de 2026, vamos a llevarlo al siguiente nivel: crearemos un sistema completo de control horario con Home Assistant y Google Calendar. El objetivo es registrar automáticamente en un calendario cada vez que entramos o salimos de una zona predefinida (como el trabajo, el colegio o el gimnasio), y además, cuantificar el tiempo total de permanencia.

Este proyecto no solo es fascinante desde el punto de vista técnico, sino que abre la puerta a un sinfín de aplicaciones prácticas, desde la optimización de rutinas hasta un control de acceso por geolocalización totalmente automatizado. ¡Vamos al lío!

OFERTAS · TIENDA OFICIAL

Descuentos en domótica SONOFF

Interruptores WiFi, relés, sensores, tiras LED y más. Las promociones cambian con frecuencia en la tienda oficial.

Cupón: TECNOYFOTO (10% de descuento al pagar)

Ver ofertas oficiales Enlace de afiliado · Tienda Sonoff

Requisitos Previos

Antes de empezar, asegúrate de tener todo lo siguiente a punto en tu sistema Home Assistant:

  • Home Assistant actualizado: Es crucial tener una versión reciente de Home Assistant (2026.x) para garantizar la compatibilidad de todos los componentes.
  • App Home Assistant Companion: Instalada y configurada en los móviles de las personas que quieres rastrear. Es el método más fiable para el seguimiento de la ubicación.
  • Zonas definidas: Debes haber creado las zonas geográficas que quieres monitorizar (ej. «Casa», «Trabajo», «Colegio»).
  • Personas configuradas: Cada miembro debe tener su entidad person asociada a su dispositivo de seguimiento.
  • Integración de Google Calendar: Necesitarás tener la integración de Google Calendar funcionando. Si aún no la tienes, te recomiendo seguir mi guía completa para integrar Google Calendar en Home Assistant.

Paso 1: Creación de Sensores de Tiempo y Conteo

El primer paso es crear los sensores que medirán y almacenarán el tiempo que cada persona pasa en una zona determinada. Utilizaremos la potente integración History Stats para realizar los cálculos y sensores de plantilla (template sensors) para formatear los datos.

Añade el siguiente código a tu archivo configuration.yaml. Recuerda modificar person.albert por la entidad de tu persona y colegio por el nombre exacto (en minúsculas) de tu zona.

Sensores de Tiempo en Zona (History Stats)

# configuration.yaml

sensor:
  # Sensor que cuenta las horas en la zona "colegio" para la persona "albert"
  - platform: history_stats
    name: "Tiempo en Colegio Hoy"
    entity_id: person.albert
    state: "colegio"
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"

  - platform: history_stats
    name: "Tiempo en Colegio Esta Semana"
    entity_id: person.albert
    state: "colegio"
    type: time
    start: "{{ as_timestamp(now().replace(hour=0, minute=0, second=0, microsecond=0)) - now().weekday() * 86400 }}"
    end: "{{ now() }}"

  - platform: history_stats
    name: "Tiempo en Colegio Este Mes"
    entity_id: person.albert
    state: "colegio"
    type: time
    start: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"

Sensores de Conteo de Visitas (History Stats)

De forma similar, podemos contar cuántas veces se ha entrado en una zona. Esto es útil para resúmenes semanales o mensuales.

# configuration.yaml (continuación de la sección sensor:)

  - platform: history_stats
    name: "Visitas al Colegio Hoy"
    entity_id: person.albert
    state: "colegio"
    type: count
    start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"

  - platform: history_stats
    name: "Visitas al Colegio Esta Semana"
    entity_id: person.albert
    state: "colegio"
    type: count
    start: "{{ as_timestamp(now().replace(hour=0, minute=0, second=0, microsecond=0)) - now().weekday() * 86400 }}"
    end: "{{ now() }}"

  - platform: history_stats
    name: "Visitas al Colegio Este Mes"
    entity_id: person.albert
    state: "colegio"
    type: count
    start: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"

Una vez añadido el código, guarda el archivo y reinicia Home Assistant para que los nuevos sensores aparezcan como entidades.

Paso 2: Automatización de Zonas para Registrar en Google Calendar

Ahora que tenemos los datos, es hora de crear la automatización de zonas en Home Assistant. Crearemos cuatro automatizaciones: una para registrar la entrada, otra para la salida, y dos más para enviar resúmenes semanales y mensuales al calendario.

Puedes crear estas automatizaciones desde la interfaz de usuario (en Ajustes > Automatizaciones y Escenas) o añadiendo el siguiente YAML a tu archivo automations.yaml.

Importante: Reemplaza person.albert, zone.colegio y, sobre todo, TU_CALENDAR_ID@group.calendar.google.com con tus propios valores.

# automations.yaml

- id: '1633684973186_updated_2026'
  alias: 'Control Horario - Llegada al Colegio'
  description: 'Crea un evento en Google Calendar al entrar en la zona del colegio'
  trigger:
    - platform: zone
      entity_id: person.albert
      zone: zone.colegio
      event: enter
  condition: []
  action:
    - service: google.add_event
      data:
        calendar_id: 'TU_CALENDAR_ID@group.calendar.google.com'
        summary: '✅ Llegada al Colegio'
        description: "Entrada a la zona 'Colegio' registrada a las {{ now().strftime('%H:%M') }}."
        start_date_time: '{{ now() }}'
        end_date_time: '{{ now() + timedelta(minutes=5) }}'
  mode: single

- id: '1633686513021_updated_2026'
  alias: 'Control Horario - Salida del Colegio'
  description: 'Crea un evento en Google Calendar al salir de la zona del colegio'
  trigger:
    - platform: zone
      entity_id: person.albert
      zone: zone.colegio
      event: leave
  condition: []
  action:
    - service: google.add_event
      data:
        calendar_id: 'TU_CALENDAR_ID@group.calendar.google.com'
        summary: '❌ Salida del Colegio'
        description: "Salida de la zona 'Colegio' registrada a las {{ now().strftime('%H:%M') }}. Tiempo total hoy: {{ states('sensor.tiempo_en_colegio_hoy') | float(0) | round(2) }} horas."
        start_date_time: '{{ now() }}'
        end_date_time: '{{ now() + timedelta(minutes=5) }}'
  mode: single

- id: '1633689084156_updated_2026'
  alias: 'Control Horario - Resumen Semanal Colegio'
  description: 'Envía un resumen del tiempo en el colegio al final de la semana laboral'
  trigger:
    - platform: time
      at: '21:30:00'
  condition:
    - condition: template
      value_template: '{{ now().isoweekday() == 5 }}' # Se ejecuta los viernes (5)
  action:
    - service: google.add_event
      data:
        calendar_id: 'TU_CALENDAR_ID@group.calendar.google.com'
        summary: 'Resumen Semanal Colegio'
        description: >
          Esta semana se ha estado en el colegio {{ states('sensor.visitas_al_colegio_esta_semana') }} veces, 
          con un tiempo total de {{ states('sensor.tiempo_en_colegio_esta_semana') | float(0) | round(2) }} horas.
        start_date_time: '{{ now() }}'
        end_date_time: '{{ now() + timedelta(minutes=5) }}'
  mode: single

- id: '1633689372804_updated_2026'
  alias: 'Control Horario - Resumen Mensual Colegio'
  description: 'Envía un resumen del tiempo en el colegio el último día del mes'
  trigger:
    - platform: time
      at: '22:00:00'
  condition:
    - condition: template
      value_template: '{{ (now().date() + timedelta(days=1)).day == 1 }}' # Se ejecuta el último día del mes
  action:
    - service: google.add_event
      data:
        calendar_id: 'TU_CALENDAR_ID@group.calendar.google.com'
        summary: 'Resumen Mensual Colegio'
        description: >
          Este mes se ha estado en el colegio {{ states('sensor.visitas_al_colegio_este_mes') }} veces,
          con un tiempo total de {{ states('sensor.tiempo_en_colegio_este_mes') | float(0) | round(2) }} horas.
        start_date_time: '{{ now() }}'
        end_date_time: '{{ now() + timedelta(minutes=5) }}'
  mode: single

He mejorado las automatizaciones para que los eventos del calendario sean más descriptivos, usando emojis y plantillas para añadir información dinámica como la hora o el tiempo total acumulado.

Paso 3: Visualización de los Datos en el Dashboard

Tener los datos es genial, pero visualizarlos directamente en tu panel de control de Home Assistant es aún mejor. Puedes usar una simple tarjeta de entidades para mostrar los valores actuales.

Edita tu dashboard, añade una nueva tarjeta y selecciona «Manual». Luego, pega el siguiente código YAML:

type: entities
title: Control Horario - Colegio
entities:
  - entity: person.albert
  - entity: sensor.tiempo_en_colegio_hoy
    name: Tiempo Hoy (Horas)
  - entity: sensor.visitas_al_colegio_hoy
    name: Visitas Hoy
  - type: divider
  - entity: sensor.tiempo_en_colegio_esta_semana
    name: Tiempo Esta Semana (Horas)
  - entity: sensor.visitas_al_colegio_esta_semana
    name: Visitas Esta Semana
  - type: divider
  - entity: sensor.tiempo_en_colegio_este_mes
    name: Tiempo Este Mes (Horas)
  - entity: sensor.visitas_al_colegio_este_mes
    name: Visitas Este Mes

Para una visualización más avanzada, puedes usar la tarjeta history-graph para ver un gráfico de presencia a lo largo del día:

type: history-graph
title: Gráfico de Presencia - Colegio
entities:
  - entity: person.albert
hours_to_show: 24
refresh_interval: 60

Casos de Uso Prácticos

La combinación de seguimiento de presencia y registro de tiempo abre un mundo de posibilidades. Aquí tienes algunas ideas:

Caso de UsoDescripción
Control ParentalRecibe una notificación y un registro en el calendario familiar cuando tus hijos llegan o salen del colegio, de actividades extraescolares o de casa de un amigo.
Fichaje Laboral SimplificadoSi trabajas de forma presencial o híbrida, automatiza el registro de tus horas de entrada y salida de la oficina. Ideal para autónomos o para llevar un control personal.
Optimización EnergéticaAunque no registra en el calendario, la misma lógica de «salir de zona» puede apagar luces, bajar el termostato al modo «Ausente» y apagar dispositivos cuando la última persona sale de casa.
Seguimiento de HábitosCrea una zona para tu gimnasio y registra automáticamente cuántas veces vas a la semana y cuánto tiempo pasas en cada sesión.

Privacidad y Seguridad de tus Datos de Localización

Es fundamental hablar de privacidad. Una de las mayores ventajas de usar Home Assistant es que tus datos de geolocalización se procesan y almacenan localmente en tu servidor. No se envían a nubes de terceros, excepto en los casos que tú configures explícitamente, como en esta integración con Google Calendar.

Tú tienes el control total sobre qué datos se comparten y con quién. Para mantener la seguridad, te recomiendo encarecidamente proteger tu instancia de Home Assistant. Si expones tu sistema a internet, asegúrate de usar una conexión segura (HTTPS), contraseñas robustas y, si es posible, autenticación de dos factores (2FA). Para una capa extra de protección, considera segmentar tu red doméstica.

Troubleshooting: Solución a Problemas Comunes

Si algo no funciona como esperas, aquí tienes una guía rápida para solucionar los problemas más frecuentes:

  • Geolocalización imprecisa o lenta:
    • Asegúrate de que la app Home Assistant Companion tiene permisos de localización «Siempre» y acceso a la «Ubicación precisa».
    • Desactiva la optimización de batería para la app en los ajustes de tu móvil (Android).
    • En Home Assistant, ve a Ajustes > Zonas y considera aumentar ligeramente el radio de la zona para compensar pequeñas desviaciones del GPS.
  • Los eventos no aparecen en Google Calendar:
    • Verifica que el calendar_id en tus automatizaciones es el correcto.
    • Ve a Ajustes > Dispositivos y Servicios, busca la integración de Google y prueba a recargarla. Si el problema persiste, puede que necesites volver a autenticarla.
    • Revisa los registros de Home Assistant (Ajustes > Sistema > Registros) en busca de errores relacionados con el servicio google.add_event.
  • Los sensores de tiempo (History Stats) marcan «0» o «unknown»:
    • Comprueba que el entity_id de la persona y el nombre de la state (la zona en minúsculas) son correctos en tu configuration.yaml.
    • La integración history debe estar activa (lo está por defecto). Si la has deshabilitado, estos sensores no funcionarán.
    • Recuerda reiniciar Home Assistant después de cualquier cambio en configuration.yaml.

Con esta guía, has configurado un sistema de control horario y seguimiento de presencia increíblemente robusto y personalizable, manteniendo siempre la privacidad como pilar fundamental. ¡Ahora te toca a ti experimentar y adaptarlo a tus necesidades!

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *