Sync weight data from withings to intervals.icu
- Python 98.4%
- Dockerfile 1.6%
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| env.example | ||
| README.md | ||
| requirements.txt | ||
| sync.py | ||
withings-icu-sync
Synchronisiert Gewicht (und Körperfett) von Withings zu intervals.icu Wellness.
Setup
1. Withings Developer App anlegen
- Account anlegen auf https://developer.withings.com/dashboard/
- Neue App erstellen (Typ: "Public Cloud")
- Redirect URI eintragen:
http://localhost:8080/callback - 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