# Форматы импорта/экспорта тренировок: обзор и рекомендации Дата составления: 17.10.2026 Привязка к проекту: приложение для силовых тренировок «Феникс 6X» (Garmin Fenix 6 Edition), см. «Техническое задание.md» --- ## 1. Общая картина: две категории форматов Все популярные форматы делятся на две принципиально разные группы, и их часто путают: 1. **Форматы активностей** — файлы с записью уже выполненной тренировки: телеметрия (пульс, GPS, мощность), круги/подходы, время. 2. **Форматы структурированных планов** — файлы с *планом* тренировки: последовательность интервалов с целевой мощностью/пульсом/темпом, которую тренажёр или часы показывают пользователю в реальном времени. Для «Феникса 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. Импорт/экспорт приложения Рекомендуемый набор: 1. **Экспорт активности: FIT (основной) + GPX (опционально, для будущих видов спорта с треками).** FIT-файл, сгенерированный приложением, можно положить в Garmin Connect / Strava вручную или через API. 2. **Импорт: FIT, TCX, GPX.** Покрывает данные из Garmin, Strava, HealthFit (Apple Watch), Suunto, Polar и почти любых сервисов. Импорт TCX/GPX нужен как fallback для источников без FIT. 3. **Внутренний формат хранения и API сервера: JSON** (структура собственной БД), CSV — только как отчётная выгрузка веб-интерфейса (уже предусмотрено ТЗ). 4. **Планы тренировок (если появятся):** целевой формат — 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