136 lines
14 KiB
Markdown
136 lines
14 KiB
Markdown
# Форматы импорта/экспорта тренировок: обзор и рекомендации
|
||
|
||
Дата составления: 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
|