Skip to content

Releases: acdcnow/Timetree-Import-for-Home-Assistant

TimeTree Calendar 2.0.3 — sum of the changes below, no configuration changes needed

Choose a tag to compare

@acdcnow acdcnow released this 10 Oct 11:52

Fixed

  • Blocking call in the event loop: every start-up logged
    Detected blocking call to listdir ... custom_components/timetree/api.py, line 94.
    curl_cffi was imported lazily inside create_transport(), which runs during
    async_setup_entry() and therefore in the event loop; importing it scans
    site-packages via importlib.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 new TimeTreeApi.async_create(), which
    constructs it in the executor. All three call sites (setup, config flow, options flow)
    use it.
  • uuid is no longer imported inside _login() and asyncio no longer inside the
    export.py helper.

Changed

  • Four regression tests covering the module level imports, the transport fallback, the
    executor based construction and the absence of inline TimeTreeApi(...) call sites
    (46 tests / 247 checks).
  • Version 2.0.3 in manifest.json and 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

Choose a tag to compare

@acdcnow acdcnow released this 09 Oct 22:23

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.png carry the TimeTree wordmark, and
    logo.png/logo@2x.png plus dark_logo.png/dark_logo@2x.png carry 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_wins is now applied to both_changed conflicts 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.2 in manifest.json and in the README version badge.
  • Repository housekeeping: the stale ha2026_09_dev branch was removed, so main
    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

Choose a tag to compare

@acdcnow acdcnow released this 08 Oct 07:41
1dc5ae7

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

Choose a tag to compare

@acdcnow acdcnow released this 03 Oct 20:19

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 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

Full changelog:
https://github.com/acdcnow/Timetree-Import-for-Home-Assistant/blob/main/CHANGELOG.md

TimeTree Calendar 2.0.0-beta.1

Pre-release

Choose a tag to compare

@acdcnow acdcnow released this 19 Sep 14:21

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 main yet. 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_event and calendar.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_only or two_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_detected event and the services timetree.list_conflicts, timetree.resolve_conflict and timetree.resolve_all_conflicts with the resolutions use_timetree, use_export_target, use_newest, skip and ignore_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 export and Export status sensors.
  • Recurrence expansion with EXDATE/RDATE/COUNT/UNTIL and 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.json plus German and English translations, CHANGELOG.md, info.md and 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_event works: the entity reads the dtstart/dtend keys 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}/event resource, full browser payload (label_id, attendees, attachment, recurrences, alerts), scraped X-CSRF-Token, browser shaped headers and a browser TLS fingerprint through curl_cffi (issue #5).
  • Negative timestamps (events before 1970) no longer raise an error.
  • The whole events/sync cursor 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_cffi is 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

Choose a tag to compare

@acdcnow acdcnow released this 31 Dec 11:12
2f15cf5

🚀 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_event service 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 TypeError crashes 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 AttributeError where 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.timetree now 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

  1. Open HACS.
  2. Navigate to the TimeTree integration.
  3. Click Update.
  4. Restart Home Assistant.

Manual

  1. Download the source code zip.
  2. Replace the contents of /config/custom_components/timetree/ with the new files.
  3. Restart Home Assistant.

Timetree Import for Home Assistant

Choose a tag to compare

@acdcnow acdcnow released this 30 Dec 23:57
7a40f79

🚀 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 calendar entity 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)

  1. Add this repository as a Custom Repository in HACS.
  2. Search for "TimeTree Calendar" and install.
  3. Restart Home Assistant.

Option 2: Manual

  1. Download source code from this release.
  2. Copy the custom_components/timetree folder to your Home Assistant config/custom_components/ directory.
  3. 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.