
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!
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
personasociada 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 Uso | Descripción |
| Control Parental | Recibe 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 Simplificado | Si 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ética | Aunque 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ábitos | Crea 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_iden 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.
- Verifica que el
- Los sensores de tiempo (History Stats) marcan «0» o «unknown»:
- Comprueba que el
entity_idde la persona y el nombre de lastate(la zona en minúsculas) son correctos en tuconfiguration.yaml. - La integración
historydebe 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.
- Comprueba que el
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!
