home-assistant/core · error · HomeAssistantError
CalDAV save error: {err}
Error message
CalDAV save error: {err} What it means
HomeAssistantError raised when creating a to-do item fails because calendar.save_todo raises requests.ConnectionError, requests.Timeout, or DAVError. It aborts the create and reports 'CalDAV save error' with the underlying exception text.
Source
Thrown at homeassistant/components/caldav/todo.py:144
async def async_create_todo_item(self, item: TodoItem) -> None:
"""Add an item to the To-do list."""
item_data: dict[str, Any] = {}
if summary := item.summary:
item_data["summary"] = summary
if status := item.status:
item_data["status"] = TODO_STATUS_MAP_INV.get(status, "NEEDS-ACTION")
if due := item.due:
item_data["due"] = due
if description := item.description:
item_data["description"] = description
try:
await self.hass.async_add_executor_job(
partial(self._calendar.save_todo, **item_data),
)
# refreshing async otherwise it would take too much time
self.hass.async_create_task(self.async_update_ha_state(force_refresh=True))
except (requests.ConnectionError, requests.Timeout, DAVError) as err:
raise HomeAssistantError(f"CalDAV save error: {err}") from err
@override
async def async_update_todo_item(self, item: TodoItem) -> None:
"""Update a To-do item."""
uid: str = cast(str, item.uid)
try:
todo = await self.hass.async_add_executor_job(
self._calendar.todo_by_uid, uid
)
except NotFoundError as err:
raise HomeAssistantError(f"Could not find To-do item {uid}") from err
except (requests.ConnectionError, requests.Timeout, DAVError) as err:
raise HomeAssistantError(f"CalDAV lookup error: {err}") from err
vtodo = todo.icalendar_component # type: ignore[attr-defined]
vtodo["SUMMARY"] = item.summary or ""
if status := item.status:
vtodo["STATUS"] = TODO_STATUS_MAP_INV.get(status, "NEEDS-ACTION")
if due := item.due:View on GitHub (pinned to 58a3fdb3ea)
Solutions
- Confirm the CalDAV server is reachable and responsive
- Check whether the target calendar collection supports VTODO (some calendar collections are events-only)
- Retry the item creation after connectivity is restored
Defensive patterns
Strategy: try-catch
Try / catch
try:
await hass.async_add_executor_job(partial(self._calendar.save_todo, **item_data))
except (requests.ConnectionError, requests.Timeout, DAVError) as err:
raise HomeAssistantError(f"CalDAV save error: {err}") from err Prevention
- Confirm the target collection supports VTODO before enabling the to-do list
- Retry creates after connectivity checks when automations add items
- Keep item payloads simple (summary/status/due) for maximum server compatibility
When it happens
Trigger: Calling todo.add_item (async_create_todo_item) while the server is unreachable or the save_todo VTODO PUT fails at the transport/DAV level.
Common situations: Transient network outages during to-do edits, servers with restrictive VTODO support rejecting the item, or slow servers exceeding the client timeout.
Related errors
- CalDAV save error: {err}
- Could not find To-do item {uid}
- CalDAV lookup error: {err}
- Could not find To-do item
- CalDAV delete error: {err}
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/60be1b82eb1ac44f.
Report an issue: GitHub.