Calendar
The calendar integration provides calendar entities, allowing other integrations to integrate calendars into Home Assistant. Calendars are shown on the calendar dashboard and can be used with automations.
A calendar entity has a state and attributes representing the next event (only). A calendar trigger is much more flexible, has fewer limitations, and is recommended for automations instead of using the entity state.
Calendar entities are here to be consumed and provided by other integrations.
This page, therefore, does not provide instructions on how to create calendar entities. Please see the “Calendar” category on the integrations page to find integration offering calendar entities.
Viewing and managing calendars
Each calendar is represented as its own entity in Home Assistant and can be viewed and managed on a calendar dashboard. You can find the calendar dashboard in the main sidebar of your Home Assistant instance.
Some calendar integrations allow Home Assistant to manage your calendars directly from Home Assistant. In this case, you can add new events by clicking the “Add event” button in the lower right corner of the calendar dashboard.
Also see Services below.
Automation
Calendar Triggers enable automation based on an event’s start or end. Review the Automating Home Assistant getting started guide on automations or the Automation documentation for full details.
An example of a calendar trigger in YAML:
automation:
- trigger:
- platform: calendar
# Possible values: start, end
event: start
# The calendar entity_id
entity_id: calendar.personal
# Optional time offset to fire a set time before or after event start/end
offset: -00:15:00
Calendar triggers should not generally use automation mode single
to ensure
the trigger can fire when multiple events start at the same time (e.g., use
queued
or parallel
instead). Note that calendars are read once every 15
minutes. When testing, make sure you do not plan events less than 15 minutes
away from the current time, or your trigger might not fire.
See Automation Trigger Variables: Calendar for additional trigger data available for conditions or actions.
Automation Recipes
Below are a few example ways you can use Calendar triggers.
This example automation consists of:
- For the calendar entity
calendar.personal
. - At the start of any calendar event.
- Send a notification with the title and start time of the event.
- Allowing multiple events starting at the same time.
automation:
- alias: Calendar notification
trigger:
- platform: calendar
event: start
entity_id: calendar.personal
action:
- service: persistent_notification.create
data:
message: >-
Event {{ trigger.calendar_event.summary }} @
{{ trigger.calendar_event.start }}
This example consists of:
- For the calendar entity
calendar.device_automation
. - When event summary contains
Front Lights
. - Turn on and off light named
light.front
when the event starts and ends.
automation:
- alias: Front Light Schedule
trigger:
- platform: calendar
event: start
entity_id: calendar.device_automation
- platform: calendar
event: end
entity_id: calendar.device_automation
condition:
- condition: template
value_template: "{{ 'Front Lights' in trigger.calendar_event.summary }}"
action:
- if:
- "{{ trigger.event == 'start' }}"
then:
- service: light.turn_on
entity_id: light.front
else:
- service: light.turn_off
entity_id: light.front
Services
Some calendar integrations allow Home Assistant to manage your calendars directly using services. The services provided by some calendar entities are described below or you can read more about Service Calls.
Service calendar.create_event
Add a new calendar event. A calendar target
is selected with a Target Selector and the data
payload supports the following fields:
Service data attribute | Optional | Description | Example |
---|---|---|---|
summary |
no | Acts as the title of the event. | Bowling |
description |
yes | The description of the event. | Birthday bowling |
start_date_time |
yes | The date and time the event should start. | 2019-03-10 20:00:00 |
end_date_time |
yes | The date and time the event should end (exclusive). | 2019-03-10 23:00:00 |
start_date |
yes | The date the whole day event should start. | 2019-03-10 |
end_date |
yes | The date the whole day event should end (exclusive). | 2019-03-11 |
in |
yes | Days or weeks that you want to create the event in. | “days”: 2 |
location |
yes | The location of the event. | Bowling center |
You either use start_date_time
and end_date_time
, or start_date
and end_date
, or in
.
This is a full example of service call in YAML:
service: calendar.create_event
target:
entity_id: calendar.device_automation_schedules
data:
summary: "Example"
start_date: "2022-10-01"
end_date: "2022-10-02"
Home Assistant Calendars do not allow zero duration Calendar events. The following would create a one minute long event starting “now”. This could be used to record an external event in a Calendar.
service: calendar.create_event
target:
entity_id: calendar.device_automation_schedules
data:
summary: "Example"
start_date_time: "{{ now() }}"
end_date_time: "{{ now() + timedelta(minutes=1) }}"
Service calendar.list_events
This service populates Response Data with calendar events within a date range.
Service data attribute | Optional | Description | Example |
---|---|---|---|
start_date_time |
yes | Return active events after this time (exclusive). When not set, defaults to now. | 2019-03-10 20:00:00 |
end_date_time |
yes | Return active events before this time (exclusive). Cannot be used with ‘duration’. | 2019-03-10 23:00:00 |
duration |
yes | Return active events from start_date_time until the specified duration. | days: 2 |
Use only one of end_date_time
or duration
.
service: calendar.list_events
target:
entity_id: calendar.school
data:
duration:
hours: 24
response_variable: agenda
The response data field events
is a list of events with these fields:
Response data | Description | Example |
---|---|---|
summary |
The title of the event. | Bowling |
description |
The description of the event. | Birthday bowling |
start |
The date or date time the event starts. | 2019-03-10 20:00:00 |
end |
The date or date time the event ends (exclusive). | 2019-03-10 23:00:00 |
location |
The location of the event. | Bowling center |
This example uses a template with response data in another service call:
service: notify.gmail_com
data:
target: [email protected]
title: Daily agenda for {{ now().date() }}
message: >-
Your agenda for today:
<p>
{% for event in agenda.events %}
{{ event.start}}: {{ event.summary }}<br>
{% endfor %}
</p>