Calendario CalDAV en Home Assistant con alertas de la IA
Hoy un post de los que me gustan :-), le daremos acceso a Home Assistant a nuestros calendarios, sea el uso que le demos, sean calendarios personales, corporativos, de citas, santos, partidos de fútbol… y posteriormente crearemos alguna automatización, para que, a la mañana cuando nos despertemos nos diga las citas del día y por supuesto cuando llegue alguna cita, nos lo recuerde.
En este documento suscribiremos Home Assistant a unos calendarios que tenemos ya, en un servidor CalDAV que ya vimos hace algún tiempo, llamado Radicale; podremos suscribirlo por supuesto a cualquier otro servicio de calendario que usemos. Una vez tengamos acceso a los calendarios podremos visualizarlos, crear citas manualmente o con automatizaciones, así como conocer las citas entre otras. Lo dicho, al final del post veremos una automatización que 5 minutos antes de la cita nos lo recordará por los altavoces del hogar inteligente, además de una manera random, ya que usaremos la IA de Ollama para personalizar los mensajes y que cada vez sean distintos. Así como una segunda automatización que a las mañanas cuando lleguemos a la cocina, a parte de darnos los buenos días de una manera distinta cada día, nos recuerde las citas que tenemos durante el día, fabuloso 🙂
En Home Assistant vamos a “Ajustes” > “Dispositivos y servicios”, y pulsamos en “+ Añadir integración”, y buscamos CAlDAV, pinchamos en él.
Nos pedirá la URL CalDAV del calendario, así como los credenciales para poder acceder a él, pulsamos en “Enviar”,
Perfecto, pulsamos en “Terminar”,
Una vez dados de alta los veremos como entidades,
Así como tendremos una vista de los calendarios desde el menú izquierdo,
Tendremos en cuenta que los calendarios se sincronizan cada 15 minutos, si queremos forzar una sincronización, sobre todo ahora para hacer alguna prueba, pues iremos a las “Herramientas para desarrolladores” y desde “Servicios”, buscamos el servicio ‘Home Assistant ore Intgration: Volver a cargar la entrada de configuración’ y en los objetos seleccionamos los calendarios que nos interesen refrescar, por si añadimos alguna cita…
Automatización notifica próximo evento
Esta es una automatización que lo que hará es notificar por todos los altavoces del hogar si hay una cita en algún calendario en 5 minutos, en tal caso la IA entrará en juego y mandará un mensaje random indicándonos que tenemos tal cita y que no se nos vaya a olvidar, cada vez de una manera distinta y sin usar frases repetitivas.
En la automatización, en el Cuando, seleccionaremos el objeto de tipo calendario que nos interese, indicando que sea al Inicio del evento y con 5 minutos de antelación, así saltará esta automatización.
Y qué hará, pues varias cosas, por un lado le mandará a la IA de Ollama el prompt que queremos, o sea, que sea amable, que le recuerde (en este caso) a Héctor que tiene una cita, en 5 minutos.
metadata: {} data: agent_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx text: >- Por favor, genera un texto para una notificación que será enviada al smartphone del usuario. Eres un agente personal útil que genera texto para el usuario. Tus respuestas son útiles, amables, cálidas, perspicaces. Tus respuestas no son técnicas. El mensaje que tienes que informar es: Que Héctor tiene una cita en el calendario dentro de 5 minutos. El evento es {{ trigger.calendar_event.summary }}. response_variable: Respuesta enabled: true action: conversation.process
La primera acción de procesar preguntará a la IA y obtendrá una respuesta en una variable.
metadata: {} data: cache: true media_player_entity_id: media_player.volumio_mpd message: "{{ Respuesta.response.speech.plain.speech }}" target: entity_id: tts.piper action: tts.speak
Tras sonar una amable alerta por los altavoces de casa, será Piper el encargado de transformar ese texto de la variable en una voz casi humana por los altavoces.
Automatización lee citas del día
Y esta otra automatización la uso para cuando nos saluda a la mañana nuestro hogar, depende quien vaya llegando antes a la cocina, pues a parte de saludarle y decirle algunos datos que le puedan interesar, pues le leemos las citas del calendario que tendrá a lo largo del día, indicando como siempre con la IA de una manera random todos los días las frases.
data: start_date_time: "{{ today_at('00:00').strftime('%Y-%m-%d %H:%M:%S') }}" end_date_time: "{{ today_at('23:59').strftime('%Y-%m-%d %H:%M:%S') }}" target: entity_id: - calendar.calendario_hector_personal response_variable: my_agenda_hector action: calendar.get_events
Crearemos una primera acción que leerá todos los eventos del calendario indicado, en dicho horario; los meterá en una variable.
data: agent_id: 491350952da2d957ebc0eb37da8c24a2 text: >- Por favor, genera un texto para una notificación que será enviada al smartphone del usuario. Eres un agente personal útil que genera texto para el usuario. Tus respuestas son útiles, amables, cálidas, perspicaces. Tus respuestas no son técnicas, no hace falta que saludes. Tienes que recordar las citas que tiene Hector hoy en el calendario, que son: {%- if my_agenda_hector['calendar.calendario_hector_personal'].events %} {%- for event in my_agenda_hector['calendar.calendario_hector_personal'].events %} {{ event.summary }} {% if event.start is defined %} a las {{ as_timestamp(event.start)|timestamp_custom('%H:%M',True)}} {% else %} All Day {% endif %} {%- if event.descripton is defined %} - {{ event.description }} Details: {{ event.descripton }} {% endif-%} {%- if event.location is defined %} at {{event.location }} {% endif -%} <br> {%- endfor %} {%- else %} No hay citas en el calendario hoy.{%- endif %} Ordenalas de más reciente a menos reciente. No pongas dobles comillas. Tu respuesta en español. response_variable: Respuesta action: conversation.process
Posteriormente un segundo servicio cogerá esos datos de la variable y se los pasaremos a la IA de Ollama para que nos los interprete y nos los lea, nos haga un resumen y nos diga de una manera random los eventos del día.
metadata: {} data: cache: true media_player_entity_id: media_player.volumio_mpd message: "{{ Respuesta.response.speech.plain.speech }}" target: entity_id: tts.piper enabled: true action: tts.speak
Y ya finalmente, con una tercera acción que cogerá el texto generado por la IA y lo convertirá a audio, a voz humana, y lo reproducirá por todos los altavoces del hogar.
Espero que os haya gustado, un post algo curioso de cómo ir dotándole de más inteligencia al hogar y que vaya cogiendo forma, este post es un ejemplo con calendarios, pero si lo piensas seguro que puedes usar estas automatizaciones para otras cosas, ya os iré dando alguna idea 😉 Os mando un abrazo, portarse bien y cuidaros!