Sync weight data from withings to intervals.icu
  • Python 98.4%
  • Dockerfile 1.6%
Find a file
2026-05-15 20:24:35 +02:00
.gitignore Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00
docker-compose.yml Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00
Dockerfile Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00
env.example Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00
README.md Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00
requirements.txt Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00
sync.py Initial commit: withings → intervals.icu sync 2026-05-15 20:24:01 +02:00

withings-icu-sync

Synchronisiert Gewicht (und Körperfett) von Withings zu intervals.icu Wellness.

Setup

1. Withings Developer App anlegen

  1. Account anlegen auf https://developer.withings.com/dashboard/
  2. Neue App erstellen (Typ: "Public Cloud")
  3. Redirect URI eintragen: http://localhost:8080/callback
  4. Client ID und Client Secret notieren

2. intervals.icu API Key

  • intervals.icu → Settings → ganz unten: API Key kopieren
  • Athlete ID steht in der URL: intervals.icu/athlete/iXXXXXX/...

3. .env anlegen

cp .env.example .env
# .env mit deinen Werten befüllen

4. Erstes OAuth-Login (einmalig, läuft lokal)

Der Auth-Flow öffnet einen Browser und fängt den Callback auf Port 8080 ab. Das muss auf deinem Desktop laufen (nicht im Container), weil ein Browser benötigt wird.

pip install -r requirements.txt
python sync.py --auth

Danach liegt tokens.json im Verzeichnis. Kopiere sie nach ./config/:

mkdir -p config
cp tokens.json config/

5. Docker Build & Test

docker compose build
docker compose run --rm withings-icu-sync --days 7   # letzten 7 Tage nachholen

6. Täglicher Cronjob (auf dem Host)

# täglich um 08:00 Uhr
0 8 * * * cd /pfad/zu/withings-icu-sync && docker compose run --rm withings-icu-sync >> /var/log/withings-icu-sync.log 2>&1

Was wird synchronisiert?

Withings Feld intervals.icu Feld Anmerkung
Gewicht weight in kg
Körperfettanteil bodyfat in %, nur wenn vorhanden

Körpermasse und Muskelmasse werden von der ICU-Wellness-API nicht als separate Felder unterstützt und daher nicht übertragen.

Token-Verwaltung

Withings Access Tokens laufen nach ~3 Stunden ab. Das Script refresht sie automatisch über den Refresh Token (der nicht abläuft). Die aktuellen Tokens werden immer in config/tokens.json gespeichert.

Backfill

docker compose run --rm withings-icu-sync --days 90  # letzten 90 Tage