Skip to content

Releases: sturimcode/eufy-sync

v1.13.2 - Clear sync notifications and summaries

Choose a tag to compare

@sturimcode sturimcode released this 11 Sep 18:58
fa1773c

Sync notifications now explain what happened at each service. Sending one weigh-in to Strava and Zwift no longer appears as two measurements, and a Garmin skip includes the date of the reading already there.

  • Terminal summaries count completed syncs separately for Garmin, Strava, and Zwift.
  • Partial failures produce one failure notification that also names the services that completed a sync.
  • Dry-run sync failures stay in the terminal without sending notifications or changing the network-failure count.
  • First-run and multiple-profile summaries retain partial results. Garmin logs use the correct local date and distinguish weight-only uploads from full body composition.

Verified with 517 tests covering service combinations, existing readings, retries, partial failures, dry runs, multiple profiles, backfills, repairs, and time-zone boundaries.

Full changes: v1.13.1...v1.13.2

v1.13.1 - Choose all sync targets during setup

Choose a tag to compare

@sturimcode sturimcode released this 07 Sep 16:12
9505744

First-run setup now offers Garmin Connect, Strava, and Zwift together. Choose any combination, including Zwift alone, before entering service credentials. After a successful first sync, macOS and Windows users can enable the existing four-hour schedule.

Zwift remains experimental and opt-in. Setup verifies the Zwift login before saving the configuration. If that check fails during first-run setup, the recovery message sends you back to the same wizard. The separate --setup-zwift command still works for existing installations.

The README now focuses on installation and first sync, with linked guides for commands, Linux scheduling, and troubleshooting. It also clarifies Garmin history repair, raw Eufy weights arriving before full body composition, and Strava's API-app subscription requirement. GitHub has a CI badge and a bug-report form, and the shared test and release workflows use the updated checkout and Python setup actions.

To update an existing installation, run eufy-sync --update.

v1.13.0 - Experimental Zwift weight sync

Choose a tag to compare

@sturimcode sturimcode released this 07 Sep 06:22
7f4bc47

Zwift weight sync is back as an optional experimental target. Run eufy-sync --setup-zwift to connect it, then eufy-sync to sync.

The tool sends only the latest valid weight for your selected Eufy profile. It reads Zwift's saved weight after an update and records success only when that value matches. Matching weights skip the write, and Zwift failures let Garmin and Strava continue.

Setup saves your login in the existing credential store, and later runs reuse and renew the session. Use --target zwift to run only Zwift, --doctor to check the connection, and --disconnect-zwift to remove it.

A real weight change, restoration, and token refresh have been verified on one account. This uses an unofficial route; longer-term reliability across accounts and connected services is still unproven.

This release also prevents a saved Garmin recovery reading from reaching current-weight targets when Eufy returns a fresh reading with the same ID.

v1.12.0 - Recover interrupted Garmin upgrades and keep Strava current

Choose a tag to compare

@github-actions github-actions released this 07 Sep 01:59
b8f3b20

Eufy Sync now saves a Garmin replacement before deleting the weight-only reading it replaces. If the upload fails or the process stops, a later run can finish the replacement from the saved measurement.

  • Garmin revisits older weight-only readings so body composition can arrive after the initial WiFi sync. Readings with different IDs must match within 120 seconds and 0.1 kg, with only one possible match.
  • Profile selection checks raw and processed history together. Raw readings with missing or unknown profile IDs cannot slip through the selected profile's filter.
  • Strava receives only the newest valid weight from each run. Backfill cannot overwrite a newer recorded weight with an older one.
  • --doctor checks live Garmin and Strava access and shares the sync lock when refreshing tokens.
  • Scheduled runs retry once after 60 seconds when a temporary network failure is the only error.

The existing sync database is updated automatically. Configuration and the four-hour schedule stay the same.

All 447 tests passed on Linux, macOS, and Windows with Python 3.12, 3.13, and 3.14. Ruff and live Garmin and Strava connection checks also passed.

Full changelog

v1.11.0 - Optional browser extra, fallback only on real login failures, lint in CI

Choose a tag to compare

@github-actions github-actions released this 02 Sep 20:28
041e44d

What's Changed

  • Optional browser extra, fallback only on real login failures, lint in CI; 1.11.0 by @sturimcode in #64

Full Changelog: v1.10.2...v1.11.0

v1.10.2 - Time out the prompts on the toast-driven recovery path

Choose a tag to compare

@github-actions github-actions released this 29 Aug 00:12
f257f6d

What's Changed

  • Time out the prompts on the toast-driven recovery path; 1.10.2 by @sturimcode in #63

Full Changelog: v1.10.1...v1.10.2

v1.10.1 - Heal a dead Garmin session in the read paths too

Choose a tag to compare

@github-actions github-actions released this 29 Aug 00:05
c885723

What's Changed

  • Heal a dead Garmin session in the read paths too; 1.10.1 by @sturimcode in #62

Full Changelog: v1.10.0...v1.10.1

v1.10.0 - Reliability sweep: self-healing Garmin sessions, honest task results, safer deletes

Choose a tag to compare

@github-actions github-actions released this 28 Aug 18:23

What's Changed

  • Fix sweep: 13 findings from the 2026-08-28 Windows review by @sturimcode in #61

Full Changelog: v1.9.1...v1.10.0

v1.9.1 - Raise dependency floors, test on Python 3.14, README upkeep

Choose a tag to compare

@github-actions github-actions released this 14 Aug 19:36
89843ec

What's Changed

  • Raise dependency floors, test on Python 3.14, README upkeep; 1.9.1 by @sturimcode in #60

Full Changelog: v1.9.0...v1.9.1

v1.9.0 - Backfill dates from create_time and add --repair-days

Choose a tag to compare

@github-actions github-actions released this 14 Aug 19:18
de40248

What's Changed

  • Backfill dates from create_time and add --repair-days; 1.9.0 by @sturimcode in #59

Full Changelog: v1.8.1...v1.9.0