- Python 99.2%
- Shell 0.8%
Added - create_todo and update_todo set a parent, start, due date, recurrence, the four statuses, percent complete, priority, categories, location, URL, classification, attendees and alarms. They take the fields of todo.add_item and todo.update_item and find an item by its name or UID - search_todos returns the to-dos of a list with these properties and parent_uid, the UID of the to-do each is a subtask of - move_todo moves or copies a to-do and its subtasks to another to-do list - import_ics, export_ics and set_calendar_color take the to-do list of a calendar that holds no events Changed - Completing or canceling a to-do does the same to its open subtasks, reopening one reopens the completed or canceled to-dos it is a subtask of, and deleting one deletes its subtasks, as in Nextcloud Tasks. The to-do list in Home Assistant follows this too Closes #24 |
||
|---|---|---|
| .github | ||
| custom_components/ha_caldav | ||
| tests | ||
| .gitignore | ||
| AGENTS.md | ||
| CONTRIBUTING.md | ||
| hacs.json | ||
| LICENSE | ||
| pytest.ini | ||
| README.md | ||
| requirements_test.txt | ||
| ruff.toml | ||
CalDAV Complete is a Home Assistant integration that connects calendars and to-do lists on CalDAV servers such as Nextcloud, including editing and deleting events and changing recurring series, which the built-in CalDAV integration cannot do.
Features
- 🔁 Change a single occurrence, all following ones or the whole series
- ⏰ Reminders, attendees, meeting links, categories, priority and free/busy
- 📝 Subtasks, start dates, priority, progress and reminders on to-dos
- ✅ Recurring to-dos move to their next due date when completed, and to-dos can be reordered
- 🎨 Calendar colors from the server, unless set in Home Assistant
- 🔎 Actions to search, import, export and move events and to-dos and to manage calendars
- 🛡️ Writes check for changes made on the server in the meantime, and read-only calendars stay read-only
- ⚡ On servers that report changes, a calendar is fetched in full when something changed and otherwise once an hour
Installation
Requires Home Assistant 2026.3 or newer, HACS and an account on a CalDAV server.
Or add https://github.com/ivenos/ha_caldav to HACS as a custom repository of type Integration. Download it, restart Home Assistant and add the integration:
Or open Settings → Devices & services → Add integration and search for CalDAV Complete.
Configuration
Setup asks for the server URL, username and password. The host name is usually enough, the CalDAV address is found through /.well-known/caldav. Certificate verification can be turned off, and under Certificates a CA bundle and a client certificate and key can be set.
Each calendar gets a calendar.<calendar> entity for its events and a todo.<calendar> entity for its to-dos, depending on what it holds. Both are named after the calendar on the server, which is also the name Assist uses for them. A calendar renamed on the server is renamed in Home Assistant at the next poll, one deleted there loses its entities after two more polls, and renaming one of its entities in Home Assistant renames the calendar on the server, unless it is read-only. The last three options can also be set per calendar.
| Option | Default | Description |
|---|---|---|
| Calendars to include | all |
The calendars that get entities. With every calendar ticked, one added on the server gets them at the next poll too |
| Minutes between polls | 15 |
How often to look for changes made outside Home Assistant, 1-1440 |
| Seconds a request may take | 30 |
How long to wait for the server to answer, 5-120 |
| Days ahead | 7 |
How far ahead to look for the upcoming event, 1-365 |
| Include all-day events | on |
Whether an all-day event can be the upcoming event |
| Read-only | off |
Hides the create, edit and delete controls, and the actions refuse to write |
Actions
The event actions target a calendar entity and the to-do actions a to-do list entity. import_ics, export_ics and set_calendar_color target the calendar entity, or the to-do list entity of a calendar that holds no events. create_calendar and delete_calendar take the account.
| Action | What it does |
|---|---|
ha_caldav.create_event / update_event |
Create or change an event with alarms, attendees, organizer, URL, categories, status, transparency, classification and priority |
ha_caldav.delete_event |
Delete an event, a single occurrence of a series or an occurrence and everything after it |
ha_caldav.search_events |
Search by summary, description, location, category, status or uid, returns events, one per occurrence within a start and end |
ha_caldav.get_free_busy |
Busy periods in a time window, returns periods |
ha_caldav.move_event |
Move or copy an event to another calendar |
ha_caldav.create_todo / update_todo |
Create or change a to-do with a parent, start, due date, recurrence, status, percent complete, priority, categories, location, URL, classification, attendees and alarms. Both take the fields of todo.add_item and todo.update_item and find an item by its name or UID |
ha_caldav.search_todos |
The to-dos of a list with all of these properties and parent_uid, the UID of the to-do each is a subtask of, optionally filtered by text or status, returns todos |
ha_caldav.move_todo |
Move or copy a to-do and its subtasks to another to-do list |
ha_caldav.import_ics / export_ics |
Import or export iCalendar data, the export returns ics |
ha_caldav.set_calendar_color |
Set the calendar color on the server |
ha_caldav.respond_to_invitation |
Accept, decline or tentatively accept an invitation |
ha_caldav.create_calendar / delete_calendar |
Create or delete a calendar, administrators only |
The upcoming event has the attributes url, status, transparency, classification, priority, categories, attendees, organizer and alarms, which are not recorded in the history.
A to-do list shows subtasks as items of their own. Completing or canceling a to-do does the same to its open subtasks, reopening one reopens the completed or canceled to-dos it is a subtask of, and deleting one deletes its subtasks. A to-do that is in progress shows as open and a canceled one as completed.
Compatibility
Tested with Nextcloud, Radicale, Xandikos, Baikal and SOGo. Not supported: email alarms, attachments, journal entries, switching a recurring event between all-day and timed, and splitting a series at a date added by hand.
License
Copyright © Iven Schlösser. CalDAV Complete is free software, licensed under the GNU General Public License v3.0 only. You may use, modify and redistribute it. Anyone distributing a modified version must release it under the same license and make its source code available.
CalDAV Complete builds on caldav, licensed under the GNU General Public License v3.0 or later or the Apache License 2.0, icalendar, licensed under the BSD 2-Clause License, vobject, licensed under the Apache License 2.0, and python-dateutil, licensed under the Apache License 2.0 and the BSD 3-Clause License.
CalDAV Complete is not affiliated with or endorsed by the Open Home Foundation. "Home Assistant" and the "Home Assistant" logo are trademarks of the Open Home Foundation.