caldav platform allows you to connect to your WebDav calendar and generate
binary sensors. A different sensor will be created for each individual calendar,
or you can specify custom calendars which match a criteria you define (more on
that below). These sensors will be
on if you have an on going event in that
off if the event is later in time, or if there is no event at all.
The WebDav calendar get updated roughly every 15 minutes.
You might need some additional system packages to compile the Python caldav library. On a Debian based system, install them by:
$ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev
To integrate a WebDav calendar in Home Assistant,
add the following section to your
# Example configuration.yaml entry for baikal calendar: - platform: caldav username: [email protected] password: !secret caldav url: https://baikal.my-server.net/cal.php/calendars/[email protected]/default
# Example configuration.yaml entry for nextcloud, calendars will be found automatically calendar: - platform: caldav username: john.doe password: !secret caldav url: https://nextcloud.example.com/remote.php/dav
This example will generate default binary sensors for each calendar you have in
your account. Those calendars will be
on when there is an ongoing event and
off if not. Events that last a whole day are ignored in those calendars.
You have to setup custom calendars in order to take them into account or for
advanced event filtering.
You have the possibility to create multiple binary sensors for events that match certain conditions.
# Example configuration.yaml entry calendar: - platform: caldav username: [email protected] password: !secret caldav url: https://baikal.my-server.net/cal.php/calendars/[email protected]/default custom_calendars: - name: 'HomeOffice' calendar: 'Agenda' search: 'HomeOffice' - name: 'WarmupFlat' calendar: 'Agenda' search: 'Warmup'
This will create two binary sensors for the calendar name Agenda: “HomeOffice”
and “WarmupFlat”. Those sensors will be
on if there is an ongoing event
matching the regular expression specified in
In custom calendars, events that last a whole day are taken into account.
Please note that when you configure custom calendars, the default ones are not created anymore.
The full URL to your calendars.
Username for authentication.
Password for authentication.
List of the calendars to filter. Empty or absent means no filtering, i.e. all calendars will be added.
Details on any custom binary sensor calendars you want to create.
- offset_reached: If set in the event title and parsed out will be on/off once the offset in the title in minutes is reached. So the title Very important meeting !!-10 would trigger this attribute to be on 10 minutes before the event starts.
True/Falseif this is an all day event. Will be
Falseif there is no event found.
message: The event title with the
searchvalues extracted. So in the above example for
offset_reachedthe message would be set to Very important meeting
- description: The event description.
- location: The event Location.
- start_time: Start time of event.
- end_time: End time of event.
All events of the calendars “private” and “holidays”. Note that all day events are not included.
# Example configuration.yaml entry for nextcloud calendar: - platform: caldav url: https://nextcloud.example.com/remote.php/dav username: 'me' password: !secret caldav calendars: - private - holidays
Full example with automation to wake up to music if not holiday. Prerequisite: you have a calendar named “work” where you create calendar entries containing “Holiday”.
Custom calendar names are built from the main calendar + name of the custom calendar.
# configuration.yaml calendar: - platform: caldav url: https://nextcloud.example.com/remote.php/dav username: 'me' password: !secret caldav custom_calendars: - name: holiday calendar: work search: 'Holiday' # automations.yaml - id: wakeup alias: worktime wakeup trigger: platform: time at: '06:40:00' action: - service: media_player.media_play entity_id: media_player.bedroom condition: - condition: state entity_id: calendar.work_holiday state: 'off'