Repository navigation
Releases: acdcnow/Timetree-Import-for-Home-Assistant
Release list
TimeTree Calendar 2.0.3 — sum of the changes below, no configuration changes needed
Fixed
- Blocking call in the event loop: every start-up logged
Detected blocking call to listdir ... custom_components/timetree/api.py, line 94.
curl_cffiwas imported lazily insidecreate_transport(), which runs during
async_setup_entry()and therefore in the event loop; importing it scans
site-packagesviaimportlib.metadata. The transport libraries are now imported at
module level (Home Assistant loads integration modules in the import executor) and
create_transport()imports nothing. - Building the HTTP session (which loads a native TLS library) no longer happens in the
event loop: the client is created through the newTimeTreeApi.async_create(), which
constructs it in the executor. All three call sites (setup, config flow, options flow)
use it. uuidis no longer imported inside_login()andasynciono longer inside the
export.pyhelper.
Changed
- Four regression tests covering the module level imports, the transport fallback, the
executor based construction and the absence of inlineTimeTreeApi(...)call sites
(46 tests / 247 checks). - Version
2.0.3inmanifest.jsonand the README badge.
Full changelog: https://github.com/acdcnow/Timetree-Import-for-Home-Assistant/blob/2.0.3/CHANGELOG.md
TimeTree Calendar 2.0.2
TimeTree Calendar 2.0.2
Brand and maintenance release on top of 2.0.1. It brings the new brand artwork
derived from the project banner and two export fixes.
Added
- New brand images in
custom_components/timetree/brand/, derived from the
project banner:icon.png/icon@2x.pngcarry the TimeTree wordmark, and
logo.png/logo@2x.pngplusdark_logo.png/dark_logo@2x.pngcarry the full
banner. All six files keep the Home Assistant sizes (icon 256/512, logo shortest
side 256/512). - The project banner (
ha_timetree.jpg) is shown at the top of the README. - Export attendee filter — the export can be restricted to events that include
at least one of the selected members. The member list is discovered dynamically
from your calendars, and a separate switch decides whether events without any
attendee are exported as well.
Fixed
newest_winsis now applied toboth_changedconflicts instead of leaving them
queued indefinitely.- Unmanaged-import fingerprints no longer raise a false conflict on every poll once
the initial import has settled.
Changed
- Version bumped to
2.0.2inmanifest.jsonand in the README version badge. - Repository housekeeping: the stale
ha2026_09_devbranch was removed, somain
is again the only branch.
Upgrade notes
- Requires Home Assistant 2026.9 or newer. No configuration changes are needed.
Full changelog:
https://github.com/acdcnow/Timetree-Import-for-Home-Assistant/blob/main/CHANGELOG.md
TimeTree Calendar 2.0.1
What's Changed
- fix(export): resolve recurring event duplication, target switch false conflicts, and occurrence state mismatch by @rutj87 in #10
New Contributors
Full Changelog: 2.0.0...2.0.1
TimeTree Calendar 2.0.1
First stable release of the 2.0.x line — the complete rework of the integration. It
promotes the two pre-releases (2.0.0-beta.1, 2.0.0-beta.2) to a normal release.
There are no functional changes to the integration compared to 2.0.0-beta.2.
Highlights
All calendars of your account — select any number during setup; each one becomes
its own calendar.* entity and its own device.
Complete event import — chunked sync, recurring events expanded into single
occurrences (EXDATE/RDATE/COUNT/UNTIL), correct exclusive all-day end,
negative timestamps, labels, attendees, optional comments and memos.
Create, update and delete events from Home Assistant — the full browser payload,
a fresh CSRF token and a browser-shaped TLS fingerprint via curl_cffi.
Export / sync loop to any calendar entity (for example Google Calendar) with a
selectable interval, window, one-way (export_only) or two-way mode and a dry run.
Conflict management — policies manual, source_wins, target_wins and
newest_wins; pending conflicts surface in a sensor, a notification and the
timetree_conflict_detected event and are resolved with timetree.resolve_conflict /
timetree.resolve_all_conflicts.
New services — timetree.refresh_now, timetree.export_now,
timetree.list_conflicts, timetree.resolve_conflict,
timetree.resolve_all_conflicts and timetree.get_event.
Fixed
The reported issues #1–#6: recurring events breaking month views, the
create_event keyword mismatch, 422 responses on writes, all-day off-by-one,
missing labels and stalled views.
Plus the recurring-event analysis from #7.
See the changelog
for the full, per-change list.
Upgrade notes
Requires Home Assistant 2026.9 or newer.
The integration is now hub-style: one config entry holds the account
(e-mail/password) and the selected calendars. Old 1.x config entries are migrated
automatically.
curl_cffi is installed as a requirement. Reading works without it; writes may be
refused by TimeTree's anti-bot layer.
Nothing is written to a second calendar until the export loop is enabled in the
options — the default is disabled with the manual conflict policy.
License
Starting with this release the project is licensed under the GNU General Public
License v3.0 (GPL-3.0-only). It was MIT before.
Documentation
README
CHANGELOG
Wiki —
Architecture Design Document, Software Design Document and Workflow Diagrams
TimeTree Calendar 2.0.0
TimeTree Calendar 2.0.0
First stable release of the 2.0.x line — the complete rework of the integration. It
promotes the two pre-releases (2.0.0-beta.1, 2.0.0-beta.2) to a normal release.
There are no functional changes to the integration compared to 2.0.0-beta.2.
Highlights
- All calendars of your account — select any number during setup; each one becomes
its owncalendar.*entity and its own device. - Complete event import — chunked sync, recurring events expanded into single
occurrences (EXDATE/RDATE/COUNT/UNTIL), correct exclusive all-day end,
negative timestamps, labels, attendees, optional comments and memos. - Create, update and delete events from Home Assistant — the full browser payload,
a fresh CSRF token and a browser-shaped TLS fingerprint viacurl_cffi. - Export / sync loop to any calendar entity (for example Google Calendar) with a
selectable interval, window, one-way (export_only) or two-way mode and a dry run. - Conflict management — policies
manual,source_wins,target_winsand
newest_wins; pending conflicts surface in a sensor, a notification and the
timetree_conflict_detectedevent and are resolved withtimetree.resolve_conflict/
timetree.resolve_all_conflicts. - New services —
timetree.refresh_now,timetree.export_now,
timetree.list_conflicts,timetree.resolve_conflict,
timetree.resolve_all_conflictsandtimetree.get_event.
Fixed
- The reported issues
#1–#6: recurring events breaking month views, the
create_eventkeyword mismatch,422responses on writes, all-day off-by-one,
missing labels and stalled views. - Plus the recurring-event analysis from
#7.
See the changelog
for the full, per-change list.
Upgrade notes
- Requires Home Assistant 2026.9 or newer.
- The integration is now hub-style: one config entry holds the account
(e-mail/password) and the selected calendars. Old 1.x config entries are migrated
automatically. curl_cffiis installed as a requirement. Reading works without it; writes may be
refused by TimeTree's anti-bot layer.- Nothing is written to a second calendar until the export loop is enabled in the
options — the default is disabled with themanualconflict policy.
License
Starting with this release the project is licensed under the GNU General Public
License v3.0 (GPL-3.0-only). It was MIT before.
Documentation
- README
- CHANGELOG
- Wiki —
Architecture Design Document, Software Design Document and Workflow Diagrams
Full changelog:
https://github.com/acdcnow/Timetree-Import-for-Home-Assistant/blob/main/CHANGELOG.md
TimeTree Calendar 2.0.0-beta.1
TimeTree Calendar 2.0.0-beta.1
Complete rework for Home Assistant 2026.9: multiple calendars, real read and write support, an export loop into other calendars (for example Google) and conflict management with manual decisions.
This is a pre-release and is not merged into
mainyet. Install it by enabling beta versions for this repository in HACS.
Added
- All calendars of an account: pick as many as you like during setup. Each one becomes its own
calendar.*entity and device, and the options flow can add or remove calendars later. - Write support for
calendar.create_event,calendar.update_eventandcalendar.delete_event(used by the WebSocket API, scripts and automations). - Export loop: mirror TimeTree events into any calendar entity (Google Calendar, ...) with a selectable interval (5-1440 min), a past/future window,
export_onlyortwo_way, a dry run, optional deletion, optional recreation and optional import of events that only exist in the target. - Conflict management: pending conflicts in a sensor, a persistent notification, the
timetree_conflict_detectedevent and the servicestimetree.list_conflicts,timetree.resolve_conflictandtimetree.resolve_all_conflictswith the resolutionsuse_timetree,use_export_target,use_newest,skipandignore_forever. - New services:
timetree.refresh_now,timetree.export_now,timetree.get_event. - New entities: one calendar entity per calendar, plus
Last updated,Sync conflicts,Last exportandExport statussensors. - Recurrence expansion with
EXDATE/RDATE/COUNT/UNTILand all-day series. Non standard rules (lunar) fall back to the stored occurrence instead of breaking a view. - Richer event data: labels with colours, attendees, coordinates, event URL, optional comments and memos.
- Multiple calendars, diagnostics with redacted credentials, brand images in
custom_components/timetree/brand/,strings.jsonplus German and English translations,CHANGELOG.md,info.mdand a local test harness with 41 tests and 224 checks.
Fixed
- Recurring events no longer break month and week views: the
RRULE:prefix is stripped, rules are validated and occurrences are expanded per range (issue #2 and the analysis in #7). calendar.create_eventworks: the entity reads thedtstart/dtendkeys that Home Assistant actually sends (issue #3).- All-day events are no longer off by one day in either direction: TimeTree stores an inclusive end, Home Assistant expects an exclusive one (issue #5).
- Writes are accepted by TimeTree: singular
/api/v1/calendar/{id}/eventresource, full browser payload (label_id,attendees,attachment,recurrences,alerts), scrapedX-CSRF-Token, browser shaped headers and a browser TLS fingerprint throughcurl_cffi(issue #5). - Negative timestamps (events before 1970) no longer raise an error.
- The whole
events/synccursor chain is imported, not just the first page. - Labels and attendees are exposed on events (issue #6).
- Home Assistant 2026.9 compatibility:
entry.runtime_data,ConfigFlowResult, options flow without the removed constructor argument and the device registry deprecations.
Changed
- Hub style config entry (account plus the list of calendars) and a menu based options flow (calendars, polling and events, export, conflicts). The scan interval range is now 5-1440 minutes.
- Existing 1.x entries keep working, the legacy single calendar layout is picked up automatically.
Upgrade notes
- Home Assistant 2026.9 or newer is required.
curl_cffiis installed automatically. Reading works without it, but writes may be rejected by the TimeTree anti bot layer.- Nothing is written to a second calendar until the export loop is enabled. The default conflict policy is
manual, so nothing is ever overwritten silently.
Full details: CHANGELOG.md
Timetree Import for Home Assistant V1.1.3
🚀 Release v1.1.3: Two-Way Sync & Stability Improvements (still in progress for write mode, missing APi endpoints)
Big update! This release creates a fully interactive integration. You can now create events in TimeTree directly from Home Assistant, adjust the update frequency on the fly, and monitor the connection status with a new sensor.
We also crushed several bugs related to initial setup and date handling.
✨ New Features
- Create Events (Write Support): You can now use the
calendar.create_eventservice in Home Assistant scripts and automations to push new events to your TimeTree calendar. - Configurable Update Interval: Added a slider in the "Configure" menu. You can now adjust the polling frequency between 5 minutes and 120 minutes (default: 60) without re-installing.
- New Sensor: Added
sensor.timetree_last_updated. This timestamp sensor shows exactly when the last successful sync occurred, useful for dashboards and connection monitoring. - Localization: Added multi-language support. The setup wizard and configuration dialogs are now available in English 🇺🇸 and German 🇩🇪.
🐛 Bug Fixes
- Fixed Config Flow Crash (500 Error): Resolved an issue where selecting a calendar during setup would cause an "Internal Server Error" due to invalid selector syntax.
- Fixed Date Comparisons: Resolved
TypeErrorcrashes when the calendar contained a mix of All-Day events (dates) and Timed events (datetimes). - Fixed Options Flow: Fixed a crash when trying to save new settings in the "Configure" dialog (read-only property error).
- Fixed Sensor Error: Resolved an
AttributeErrorwhere the new sensor couldn't find the success timestamp in the coordinator.
🛠 Technical Changes
- Enhanced Logging: Added verbose debug logging. Enabling debug logs for
custom_components.timetreenow reveals full JSON payloads and raw API responses for easier troubleshooting. - Robust Error Handling: The API client now gracefully handles 401 (Unauthorized) errors by auto-refreshing the session cookie before retrying requests.
📦 How to Update
HACS
- Open HACS.
- Navigate to the TimeTree integration.
- Click Update.
- Restart Home Assistant.
Manual
- Download the source code zip.
- Replace the contents of
/config/custom_components/timetree/with the new files. - Restart Home Assistant.
Timetree Import for Home Assistant
🚀 Release v1.0.1: Initial Release
🎉 First public release of the TimeTree Calendar integration for Home Assistant!
This integration allows you to view your TimeTree events directly within Home Assistant as a standard Calendar entity. It uses the internal API logic from timetree-exporter to sync your events securely.
✨ Features
- Calendar Entity: Adds a native
calendarentity to Home Assistant. - Auto-Sync: Automatically fetches new events every 60 minutes.
- UI Configuration: Fully supports Home Assistant's Config Flow—just enter your email/password and select your calendar from a dropdown list.
- Multi-Calendar Support: Choose exactly which TimeTree calendar you want to sync during setup.
- Read-Only: Safely views events without modifying your actual TimeTree data.
📦 Installation
Option 1: HACS (Recommended)
- Add this repository as a Custom Repository in HACS.
- Search for "TimeTree Calendar" and install.
- Restart Home Assistant.
Option 2: Manual
- Download
source codefrom this release. - Copy the
custom_components/timetreefolder to your Home Assistantconfig/custom_components/directory. - Restart Home Assistant.
❤️ Credits
Huge thanks to [eoleedi](https://github.com/eoleedi) for the original [TimeTree-Exporter](https://github.com/eoleedi/TimeTree-Exporter), which provided the reverse-engineered API logic required to make this integration possible.