Health-Sync: Voedings- en sportdata automatisch naar Obsidian met Python
Sinds begin 2025 gebruik ik Obsidian als centraal punt voor mijn dagelijkse planning: trainingsschema’s, studieblokken, voedingsdoelen en reflecties, alles staat in gestructureerde dagnotities. Het systeem werkt goed voor plannen, maar het bijhouden van werkelijke prestaties was nog steeds een handmatig proces, cijfers overnemen uit Eetmeter, door Strava scrollen, plakken in markdown tabellen. Het kostte tijd en was vaak incompleet.
Daarom bouwde ik health-sync: een Python CLI-tool die data ophaalt uit de Eetmeter API (Voedingscentrum) en de Strava API, en deze rechtstreeks in mijn Obsidian vault schrijft.
Wat het doet
Health-sync haalt twee soorten data op:
Voeding (Eetmeter): Dagelijkse macro-inname uitgesplitst per maaltijd (ontbijt, lunch, avondeten, tussendoor), met een vergelijking tegen mijn kcal- en eiwitdoelen:
| Maaltijd | Kcal | Eiwit (g) | Vet (g) | KH (g) |
|------------|----------|-----------|---------|--------|
| Ontbijt | 484 | 13 | 20 | 59 |
| Lunch | 813 | 41 | 40 | 66 |
| Avondeten | 750 | 23 | 31 | 88 |
| Tussendoor | 421 | 17 | 7 | 69 |
| Totaal | 2468 | 95 | 97 | 282 |
Target vs werkelijk: 2468/3350 kcal (74%), Eiwit 95/150g (63%)
Sport (Strava): Alle activiteiten van de dag met afstand, tempo, hoogtemeters, calorieën en materiaal:
Trailrun — 13,83 km — 1:41:54 — 7:22 /km
Hoogte 468 m | Calorieën 1.216 | Schoenen: Kiprun fast 2
Beide secties worden in bestaande dagnotities ingevoegd met onzichtbare HTML comment markers. Dit maakt het proces idempotent, twee keer draaien geeft exact hetzelfde resultaat, en content buiten de markers wordt nooit aangeraakt.
Weekreflecties krijgen een samenvattende tabel met dagelijkse macro’s en een eiwit-target check over alle zeven dagen.
De feedbackloop
Wat het echt nuttig maakt is de combinatie met mijn dagnotitie-workflow. Elke ochtend genereer ik een dagnotitie met geplande training, berekende voedingsdoelen (op basis van activiteitenniveau) en studieblokken. Aan het eind van de dag, of de volgende ochtend, vult health-sync de werkelijke waarden in.
Dit creëert een simpele feedbackloop:
- Plan: dagnotitie met targets (kcal, eiwit, training)
- Uitvoeren: voeding loggen in Eetmeter, activiteiten getrackt via Strava
- Review: health-sync schrijft de werkelijke waarden naast de targets
- Reflecteren: weekreflectie toont patronen (haal ik consistent mijn eiwitdoel? hoe is mijn trainingsvolume?)
Het weekoverzicht is bijzonder waardevol. Zeven dagen naast elkaar zien maakt trends zichtbaar die individuele dagen niet onthullen, zoals consistent te weinig eiwit op rustdagen, of een patroon van hogere calorie-inname midden in de week.
Technische details
Health-sync is geschreven in Python en gebruikt:
- requests voor de Eetmeter API (ongedocumenteerd, reverse-engineered)
- stravalib voor de Strava API (OAuth2 met automatische token refresh)
- Idempotente markdown-manipulatie met HTML comment markers die onzichtbaar zijn in Obsidian reading mode
Gebruik is eenvoudig:
# Vandaag synchen
python -m health_sync
# Specifiek datumbereik synchen
python -m health_sync --from 2026-02-16 --to 2026-02-22
# Preview zonder bestanden te wijzigen
python -m health_sync --dry-run -v
Het project is open source onder de EUPL-1.2 licentie: github.com/hylke-rozema/health-sync
Waarom dit ertoe doet
Quantified self tools zijn overal, maar ze leven meestal in hun eigen silo’s. Strava heeft zijn eigen dashboard, Eetmeter heeft zijn eigen overzicht. Door alles naar Obsidian te trekken, leeft de data daar waar ik al denk en plan. Geen context switch. De dagnotitie wordt één single source of truth: wat ik gepland had, wat ik gedaan heb, en hoe het zich verhoudt.
Het is een kleine tool die misschien 10 minuten per dag bespaart. Maar de consistentie die het mogelijk maakt, elke dag complete, gestructureerde data zonder handmatig werk, stapelt zich over weken en maanden op tot echt inzicht in wat werkt en wat niet.