14 KiB
14 KiB
Форматы импорта/экспорта тренировок: обзор и рекомендации
Дата составления: 17.10.2026 Привязка к проекту: приложение для силовых тренировок «Феникс 6X» (Garmin Fenix 6 Edition), см. «Техническое задание.md»
1. Общая картина: две категории форматов
Все популярные форматы делятся на две принципиально разные группы, и их часто путают:
- Форматы активностей — файлы с записью уже выполненной тренировки: телеметрия (пульс, GPS, мощность), круги/подходы, время.
- Форматы структурированных планов — файлы с планом тренировки: последовательность интервалов с целевой мощностью/пульсом/темпом, которую тренажёр или часы показывают пользователю в реальном времени.
Для «Феникса 6X» основная категория — первая (запись выполненных силовых тренировок), но формат планов важен, если в будущем появится загрузка готовых программ на часы.
2. Форматы активностей (записанные тренировки)
2.1. FIT (Flexible and Interoperable Data Transfer) — основной стандарт
- Разработчик: Garmin (спецификация открыта, есть официальный FIT SDK).
- Тип: компактный бинарный формат с типизированными «сообщениями» (Activity, Session, Record, Lap, Set, Hr и т.д.).
- Поддержка: Garmin, Strava, Polar, Suunto, Coros, Zwift, TrainerRoad, intervals.icu, Komoot и практически вся индустрия.
- Плюсы:
- Самые полные данные при минимальном размере файла (в разы меньше TCX/GPX при том же объёме телеметрии).
- Поддерживает данные силовых тренировок: тип активности
strength_training, сообщенияSet(подходы),Lap(круги), счётчики повторений, вес, отдельные замеры пульса с миллисекундной точностью. - Хранит метаданные устройства, зон пульса, FTP и др.
- Минусы: бинарный — нельзя читать «глазами» или обычным парсером XML/JSON; нужен SDK или библиотека.
- Роль в индустрии: де-факто стандарт «первичного» формата. Strava и Garmin рекомендуют именно FIT как оригинал; TCX/GPX считаются производными.
2.2. TCX (Training Center XML)
- Разработчик: Garmin (наследие Garmin Training Center).
- Тип: XML.
- Плюсы: читается любым XML-парсером; поддерживает круги (Lap), курс-поинты, базовую телеметрию (пульс, каденс, мощность).
- Минусы: объём файла значительно больше FIT; нет ряда современных полей (силовые подходы, вес в подходе, расширенные данные датчиков); формат фактически заморожен в развитии.
- Роль: распространённый «запасной» формат импорта/экспорта. Поддерживается Strava, MapMyFitness, TrainingPeaks и др.
2.3. GPX (GPS Exchange Format)
- Тип: XML, открытый стандарт.
- Плюсы: максимальная универсальность — понимают все картографические сервисы и спортивные приложения; идеален для маршрутов.
- Минусы: по сути только GPS-трек и отметки времени (waypoints); пульс и каденс — лишь в виде нестандартных расширений, мощность и силовые данные отсутствуют.
- Роль: формат для маршрутов и треков, а не для полноценной телеметрии. Для силовых тренировок бесполезен (нет перемещения), но полезен для будущего функционала бега/велосипеда.
2.4. Прочие
- HRM — текстовый формат старых нагрудных датчиков Garmin; встречается только как legacy-импорт.
- PWX — XML-формат Peaksware (TrainingPeaks); нишевый, для обмена с Train/Lift-инструментами.
- CSV — не спортивный формат, а универсальная табличная выгрузка; используется в отчётах (веб-интерфейс сервера в ТЗ уже предусматривает экспорт в CSV).
3. Форматы структурированных планов (интервальные тренировки)
- ZWO — XML-формат Zwift, современный стандарт де-факто для структурированных тренировок в помещении: шаги с целевой мощностью в % FTP, пульсом, каденсом, текстовыми подсказками. Поддерживается intervals.icu, TrainingPeaks, большинством тренажёрных приложений (кроме некоторых, например MyWhoosh).
- ERG — простой текстовый формат времён TrainerRoad: пары «время → целевая мощность в % FTP».
- MRC — то же, что ERG, но мощность в абсолютных ваттах.
- FIT (workout-профиль) — тот же бинарный FIT, но с workout-сообщениями; основной способ доставки структурированной тренировки на устройства Garmin (через Garmin Connect).
- PWX — также используется TrainingPeaks для планов.
Конвертация между ZWO / FIT / ERG / MRC — рутинная операция, есть онлайн-инструменты (What's on Zwift, GOTOES) и открытые парсеры.
4. Сравнительная таблица
| Формат | Категория | Тип | Полнота данных | Размер | Силовые тренировки | Поддержка индустрией |
|---|---|---|---|---|---|---|
| FIT | активность | бинарный | максимальная | минимальный | да (strength_training, Set, Lap) |
практически повсеместная |
| TCX | активность | XML | средняя | средний/большой | частично (только Lap) | широкая |
| GPX | активность | XML | только GPS-трек | большой | нет | универсальная |
| ZWO | план | XML | хорошая (мощность/пульс) | малый | нет | тренажёрные приложения |
| ERG/MRC | план | текст | мощность | минимальный | нет | TrainerRoad-наследие |
| PWX | активность/план | XML | хорошая | средний | частично | экосистема TrainingPeaks |
| CSV | выгрузка | текст | произвольная | минимальный | да (как таблица) | все, но без телеметрии |
5. Рекомендации для проекта «Феникс 6X»
5.1. Канал данных из Garmin
ТЗ (п. 2.3) уже выбрано верно: данные силовых тренировок забираются из Garmin Connect API в виде .fit — это правильный выбор, поскольку:
- FIT — единственный формат, в котором часы Fenix 6 пишут полный набор данных силовой тренировки (подходы-Set, круги-Lap, непрерывный трек пульса, счёт повторений).
- TCX/GPX-экспорт из Garmin Connect теряет значительную часть этой информации (в TCX остаются только круги, в GPX — ничего силового).
5.2. Парсинг FIT на сервере
- Python: официальный
garmin-fit-sdk(Garmin) или community-библиотекиfitdecode/python-fitparse. - Node.js: официальный
@garmin-fit/sdkилиfit-file-parser. - Java/C#: официальный FIT SDK от Garmin.
- Что извлекать для «Феникса 6X»:
Session(тип активности, время),Lap(границы подходов — соответствуют нажатиям кнопки Lap по ТЗ),Record(дискретный пульс для графика и средних за подход),Set(повторения/вес, если писал профиль Strength).
5.3. Импорт/экспорт приложения
Рекомендуемый набор:
- Экспорт активности: FIT (основной) + GPX (опционально, для будущих видов спорта с треками). FIT-файл, сгенерированный приложением, можно положить в Garmin Connect / Strava вручную или через API.
- Импорт: FIT, TCX, GPX. Покрывает данные из Garmin, Strava, HealthFit (Apple Watch), Suunto, Polar и почти любых сервисов. Импорт TCX/GPX нужен как fallback для источников без FIT.
- Внутренний формат хранения и API сервера: JSON (структура собственной БД), CSV — только как отчётная выгрузка веб-интерфейса (уже предусмотрено ТЗ).
- Планы тренировок (если появятся): целевой формат — FIT workout для доставки на часы Garmin; при необходимости конвертация из ZWO.
5.4. Чего избегать
- Не использовать GPX как основной формат — для силовых тренировок он бесполезен.
- Не изобретать собственный бинарный формат — FIT закрывает все потребности и обеспечивает совместимость с экосистемой Garmin, ради которой проект и затевался.
- Не опираться на TCX для силовых данных — формат не хранит подходы/вес/повторения.
6. Полезные инструменты
- Garmin FIT SDK (официальный, бесплатный): https://developer.garmin.com/fit/ — спецификация, SDK для C/C++/Java/JS/C#/Python.
- What's on Zwift converter — конвертация ZWO ↔ ERG ↔ MRC ↔ FIT: https://whatsonzwift.com/convert/workouts
- GOTOES — объединение и конвертация FIT/GPX/TCX/CSV: https://gotoes.org/strava/Combine_GPX_TCX_FIT_Files.php
- FitFileViewer — десктопный просмотрщик FIT-файлов (Electron, открытый код) для отладки парсинга.
- GoldenCheetah / intervals.icu — референсные реализации разбора FIT-данных.
7. Источники
- GPX, TCX, FIT: How to choose the best file extension for sport activity transfer — Decathlon Digital: https://medium.com/decathlondigital/gpx-tcx-fit-how-to-choose-the-best-file-extension-for-sport-activity-transfer-403487337c04
- MapMyFitness: Importing TCX, GPX, HRM, and FIT Files: https://help.mapmyfitness.com/hc/en-us/articles/36780201550871-Importing-TCX-GPX-HRM-and-FIT-Files
- TrainerRoad forum: TCX vs FIT: https://www.trainerroad.com/forum/t/download-tcx-instead-of-fit-used-to-be-tcx/8094
- TrainingPeaks: Structured Workout sync and Manual Export: https://help.trainingpeaks.com/hc/en-us/articles/115000325647-Structured-Workout-sync-and-Manual-Export
- TrainingPeaks: Import Planned Workouts into TrainingPeaks: https://help.trainingpeaks.com/hc/en-us/articles/32432105650573-Import-Planned-Workouts-into-TrainingPeaks
- intervals.icu forum: типичные форматы тренировок: https://forum.intervals.icu/t/import-workout-fit-file-on-calendar/17647
- Zwift Insider: intervals.icu ↔ Zwift Training API: https://zwiftinsider.com/intervals-integration
- HealthFit: экспорт тренировок Apple Watch в FIT/TCX/GPX: https://theapplewatchtriathlete.com/blog-1/2017/10/6/exporting-your-apple-workout-data-to-fit-files-with-the-healthfit-app
- What's on Zwift: Workout converter: https://whatsonzwift.com/convert/workouts