6.2 KiB
TCX Parser - Instruktioner
Översikt
parse_tcx.py är ett script som extraherar all viktig träningsdata från stora TCX-filer och skapar kompakta JSON-sammanfattningar.
Storlek:
- TCX-fil: ~1.3 MB
- JSON-fil: ~8 KB
- Besparing: 99.4% mindre!
Installation
Scripten kräver bara Python 3 och Bash (ingen extra paket).
# Gör scripten körbara (behöver bara göras en gång)
chmod +x scripts/parse_tcx.py
chmod +x scripts/parse_all_tcx.sh
chmod +x scripts/quick_parse.sh
Optional: Lägg till alias i din shell
För extra bekvämlighet, lägg till detta i din ~/.bashrc eller ~/.zshrc:
# Lägg till i ~/.bashrc eller ~/.zshrc
source ~/Documents/training/scripts/aliases.sh
Efter detta kan du använda korta kommandon som parse-all istället för bash scripts/parse_all_tcx.sh.
Användning
🚀 Rekommenderat: Automatisk parsning av alla filer
Enklast - kör detta efter varje träning:
./scripts/parse_all_tcx.sh
eller (om du laddat alias):
parse-all
Detta script:
- ✅ Hittar alla TCX-filer i
Data/training/ - ✅ Parsar bara filer som inte redan har JSON-motsvarigheter
- ✅ Uppdaterar JSON om TCX-filen är nyare
- ✅ Ger en fin sammanfattning av vad som gjordes
Output:
🔍 Söker efter TCX-filer i Data/training
📝 Parsar ny fil: activity_20922168380.tcx
✓ Redan parsad: activity_12345678901.tcx
════════════════════════════════════════
📊 Sammanfattning
════════════════════════════════════════
Total TCX-filer funna: 2
Redan parsade: 1
Nyligen parsade: 1
✅ Klart! 1 fil(er) parsade.
⚡ Snabbparsning av senaste filen
Bara vill parsa den senaste TCX-filen?
./scripts/quick_parse.sh
eller:
parse-latest
🎯 Parsa en specifik fil
python3 scripts/parse_tcx.py Data/training/activity_20922168380.tcx
eller:
parse-tcx Data/training/activity_20922168380.tcx
Output:
Parsar Data/training/activity_20922168380.tcx...
✓ Klar! Sammanfattning sparad i: Data/training/activity_20922168380.tcx.json
Snabb sammanfattning:
Sport: Biking
Datum: 2025-11-07
Tid: 29:42
Distans: 11.51 km
Genomsnittshastighet: 23.3 km/h
Genomsnittspuls: 161.2 bpm
Max puls: 184 bpm
Genomsnittseffekt: 106.0 W
Data som extraheras
JSON-filen innehåller:
1. Grundläggande info
- Sport (Biking, Running, Swimming, etc.)
- Datum och tid
- Total tid, distans, hastighet
- Kalorier
2. Pulsdata
- Genomsnitt, min, max puls
- Pulszonfördelning (%) - mycket viktigt för analys!
- Zon 1: <110 bpm (Återhämtning)
- Zon 2: 110-129 bpm (Grundträning)
- Zon 3: 129-147 bpm (Tempo)
- Zon 4: 147-166 bpm (Högt tempo)
- Zon 5: >166 bpm (Maximum)
3. Effektdata (om tillgänglig)
- Genomsnitt, min, max watt
4. Kadansdata
- Genomsnitt, min, max rpm
5. Höjddata
- Min, max höjd
- Total stigning
6. Varvdata
- Detaljerad data för varje varv/intervall
Använda JSON-filen för analys
När du vill att jag ska analysera ett träningspass:
Istället för att be mig läsa den stora TCX-filen:
"Kan du analysera activity_20922168380.tcx?" ❌
Be mig läsa JSON-filen:
"Kan du analysera activity_20922168380.tcx.json?" ✅
Fördelar:
- 99.4% mindre fil = mycket snabbare
- Färre tokens = sparar kostnader
- Alla viktiga data finns kvar
- Lättare att läsa för både människa och AI
Exempel: Komplett workflow
Workflow 1: Automatiskt (Rekommenderat)
- Exportera träning från Garmin/Strava/Zwift som TCX
- Spara i Data/training/
mv ~/Downloads/activity_12345.tcx Data/training/ - Parsa alla nya filer
parse-all # eller: ./scripts/parse_all_tcx.sh - Be Claude om analys
"Kan du analysera Data/training/activity_12345.tcx.json?"
Workflow 2: Snabb (för senaste filen)
- Exportera och spara TCX-fil
mv ~/Downloads/activity_*.tcx Data/training/ - Parsa senaste filen
parse-latest # eller: ./scripts/quick_parse.sh - Be Claude om analys - filnamnet visas i output
Workflow 3: Manuellt (specifik fil)
- Exportera träning från Garmin/Strava/Zwift som TCX
- Spara i Data/training/
mv ~/Downloads/activity_12345.tcx Data/training/ - Parsa TCX-filen
parse-tcx Data/training/activity_12345.tcx - Be om analys
"Kan du analysera Data/training/activity_12345.tcx.json?"
Uppdatera pulszoner
Om din maxpuls ändras (t.ex. ny maxpuls 190 bpm), uppdatera zonerna i scriptet:
Öppna scripts/parse_tcx.py och ändra raderna ~107-111:
# Gamla zoner (baserat på maxpuls 184 bpm)
zone1 = sum(1 for hr in hr_data if hr < 110)
zone2 = sum(1 for hr in hr_data if 110 <= hr < 129)
zone3 = sum(1 for hr in hr_data if 129 <= hr < 147)
zone4 = sum(1 for hr in hr_data if 147 <= hr < 166)
zone5 = sum(1 for hr in hr_data if hr >= 166)
# Nya zoner (exempel för maxpuls 190 bpm)
zone1 = sum(1 for hr in hr_data if hr < 114) # <60%
zone2 = sum(1 for hr in hr_data if 114 <= hr < 133) # 60-70%
zone3 = sum(1 for hr in hr_data if 133 <= hr < 152) # 70-80%
zone4 = sum(1 for hr in hr_data if 152 <= hr < 171) # 80-90%
zone5 = sum(1 for hr in hr_data if hr >= 171) # >90%
Eller använd dynamiska zoner baserat på uppmätt maxpuls - kontakta mig om du vill ha den funktionen!
Felsökning
Problem: Fel: Filen X hittades inte
- Kolla att sökvägen är korrekt
- Använd relativ sökväg från repository-roten
Problem: Ingen aktivitet hittades i TCX-filen
- TCX-filen kan vara korrupt
- Kontrollera att den är exporterad korrekt från din enhet
Problem: Script kraschar
- Rapportera felet så fixar jag det!
Framtida förbättringar
Möjliga tillägg:
- Auto-detektera maxpuls och beräkna dynamiska zoner
- Markdown-export istället för JSON
- Automatisk uppdatering av träningsdagbok
- Jämförelse mellan flera pass
- Graf-generering (puls över tid, etc.)
Support
Vid problem eller frågor, kontakta Claude Code!