-
-
Save Progaros/63db96fa4d77a662cfbb5b199d0613c1 to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Conversation agent Agenda Notification
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
blueprint: | |
name: Daily Conversation Agent Agenda Notification | |
description: | | |
Conversation agent generates a personalized notification based on the | |
upcoming calendar agenda, tasks, birthday reminders, location, and weather information in your language. | |
domain: automation | |
input: | |
language: | |
name: Language | |
description: Language of Assistant Response | |
selector: | |
language: | |
default: "en" | |
user: | |
name: User | |
description: User who is being addressed | |
selector: | |
entity: | |
multiple: false | |
filter: | |
domain: | |
- person | |
notify_time: | |
name: Notification time | |
description: Time the automation is triggered to send the notification. | |
selector: | |
time: {} | |
default: 07:00:00 | |
notify_service: | |
name: Notify service name | |
description: The name of the notify service where the notification should be sent. | |
selector: | |
text: {} | |
default: notify.notify | |
notify_target: | |
name: Notify target | |
description: The target of the notify service. | |
selector: | |
text: {} | |
default: | |
task_entities: | |
name: Tasks | |
description: The tasks entities to use for finding upcoming todos. | |
selector: | |
entity: | |
multiple: true | |
filter: | |
domain: | |
- todo | |
calendar_entities: | |
name: Calendar | |
description: The calendar entities to use for finding upcoming calendar events. | |
selector: | |
entity: | |
multiple: true | |
filter: | |
domain: | |
- calendar | |
calendar_duration: | |
name: Calendar Event duration | |
description: How many hours ahead to look for upcoming calendar events. | |
selector: | |
duration: | |
default: | |
hours: 18 | |
birthday_calendar: | |
name: Birthday Calendar | |
description: The calendar entity to use for finding upcoming birthdays. | |
selector: | |
entity: | |
multiple: false | |
filter: | |
domain: | |
- calendar | |
birthday_duration: | |
name: Birthday Reminder duration | |
description: How many days ahead to look for upcoming birthdays. | |
selector: | |
duration: | |
enable_day: true | |
default: | |
days: 7 | |
weather_entity: | |
name: Weather Entity | |
description: The weather entity to use for upcoming weather forecast. | |
selector: | |
entity: | |
multiple: false | |
filter: | |
domain: | |
- weather | |
zone_entity: | |
name: Home Zone Entity | |
description: The zone entity to use to determine approximate location for understanding typical weather. | |
selector: | |
entity: | |
multiple: false | |
filter: | |
domain: | |
- zone | |
conversation_agent: | |
name: Conversation Agent | |
selector: | |
conversation_agent: | |
user_prompt_task: | |
name: Conversation Agent Task | |
selector: | |
text: | |
multiline: true | |
type: text | |
default: |- | |
Please generate a short text (~100 words, no newlines) for a notification for an android smartphone with helpful information. | |
trigger: | |
platform: time | |
at: !input notify_time | |
action: | |
- variables: | |
language: !input language | |
user: !input user | |
weather_entity: !input weather_entity | |
task_entities: !input task_entities | |
calendar_entities: !input calendar_entities | |
zone_entity: !input zone_entity | |
calendar_duration: !input calendar_duration | |
birthday_calendar: !input birthday_calendar | |
birthday_duration: !input birthday_duration | |
user_prompt_task: !input user_prompt_task | |
- alias: Fetch Tasks | |
service: todo.get_items | |
data: | |
status: | |
- needs_action | |
target: | |
entity_id: !input task_entities | |
response_variable: tasks_responses | |
- alias: Fetch Calendar Agenda | |
service: calendar.get_events | |
data: | |
duration: !input calendar_duration | |
target: | |
entity_id: !input calendar_entities | |
response_variable: events_responses | |
- alias: Fetch Birthday Calendar | |
service: calendar.get_events | |
data: | |
duration: !input birthday_duration | |
target: | |
entity_id: !input birthday_calendar | |
response_variable: birthday_responses | |
- alias: Get Weather Forecast | |
service: weather.get_forecasts | |
data: | |
type: daily | |
target: | |
entity_id: !input weather_entity | |
response_variable: weekly_weather_forecast | |
- alias: "Prepare Prompt" | |
variables: | |
prompt: |- | |
You are a helpful personal agent that generates notifications for the user: | |
- Respond in the RFC 5646 language: "{{language}}" | |
- Your answers are helpful, friendly, warm and insightful | |
- Your answers are not technical, and do not include Home Assistant internal details such as entities in responses | |
- Your messages help the user prepare for their day, for example: | |
- Making note of unusual weather for the location and time of year (but not mundane details like "0% chance of precipitation") | |
- Do not tell the user obvious things like his location or the current time | |
- Tell (and encourage) them about all the tasks (do not tell the user about specific empty lists) | |
- How much time remaining until their first meeting | |
- Anything that may be special or unique, such as celebrating a birthday (but not that there are no birthdays) | |
##### Information to include in the notification ##### | |
## Name of User: {{ state_attr(user, "friendly_name") }} | |
## Time: {{ now().time().isoformat('minutes') }} | |
{%- if zone_entity is defined %} | |
## Latitude: {{ state_attr(zone_entity, 'latitude') | round(1) }} | |
## Longitude: {{ state_attr(zone_entity, 'longitude') | round(1) }} | |
{% endif %} | |
{%- if weather_entity is defined %} | |
{%- set temperature_unit = state_attr(weather_entity, 'temperature_unit') -%} | |
{%- set todays_forecast = weekly_weather_forecast[weather_entity]['forecast'][0] %} | |
## Weather: {{ todays_forecast.condition }} ({{ todays_forecast.temperature }}{{ temperature_unit }}, {{ todays_forecast.precipitation }}% precipitation) | |
{%- endif %} | |
## Tasks Lists: | |
{%- for task_entity in task_entities %} | |
Upcoming tasks for today on list "{{ state_attr(task_entity, 'friendly_name') }}": | |
{%- set tasks = tasks_responses[task_entities[loop.index0]] %} | |
{%- for task in tasks['items'] if 'due' in task and now().date() >= as_datetime(task.due, "2222-11-11").date() %} | |
- {{task['summary']}} | |
{% else %} | |
- No current Tasks. | |
{%- endfor %} | |
{%- endfor %} | |
## Calendar Events: | |
{%- for calendar_entity in calendar_entities %} | |
Calendar "{{ state_attr(calendar_entity, 'friendly_name') }}" events for the next {{ calendar_duration.hours }} hours: | |
{%- set agenda = events_responses[calendar_entities[loop.index0]] %} | |
{%- if "events" in agenda and agenda.events %} | |
{%- for event in agenda.events %} | |
- Summary: {{ event.summary }} | |
Start-End: {% if event.start is defined %}{{ event.start }} to {{ event.end }}{% else %}All Day{% endif %} | |
{%- if event.descripton is defined %} | |
Descripton: {{ event.descripton }} | |
{% endif -%} | |
{%- if event.location is defined %} | |
Location: {{ event.location }} | |
{% endif -%} | |
{%- endfor %} | |
{%- else %} | |
- No upcoming events. | |
{%- endif %} | |
{%- endfor %} | |
## Upcoming birthdays: | |
{%- set birthdays = birthday_responses[birthday_calendar] %} | |
{%- if "events" in birthdays and birthdays.events %} | |
{%- for event in birthdays.events %} | |
- Birthday Reminder: {{ event.summary }} on {{ event.start }} | |
{%- endfor %} | |
{%- else %} | |
- No upcoming birthdays. | |
{%- endif %} | |
##### Task ##### | |
{{ user_prompt_task }} | |
- alias: "Conversation Agent Notification Text" | |
service: conversation.process | |
data: | |
text: "{{ prompt }}" | |
agent_id: !input conversation_agent | |
response_variable: agent | |
- alias: "Send notification" | |
service: !input notify_service | |
data: | |
target: !input notify_target | |
title: "{{ now().strftime('%A') }} Agenda" | |
message: "{{ agent.response.speech.plain.speech }}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment