Live Race Stats — бесплатное приложение (поле данных Connect IQ) для велокомпьютеров Garmin Edge и часов (Fenix, Forerunner, Venu, Instinct и др.). Прямо во время гонки, которую судит наша система хронометража, оно показывает на экране устройства ваше место, отрывы от соперников и круги — по номеру гонки и вашему стартовому номеру. В магазине приложение называется Live Race Stats, в списке полей на устройстве — RaceStats. Разработчик — DenisChernykh.
Что нужно
- Совместимое устройство Garmin (Edge или часы с Connect IQ).
- Телефон с интернетом, подключённый к устройству по Bluetooth, — он должен быть с вами во время гонки. Само поле данных не умеет ходить в сеть напрямую, запрос идёт через телефон.
- Гонка должна судиться нашей системой, и генератор протоколов должен отправлять живую статистику на сайт (это делает организатор).
Установка (с телефона)
- Установите на телефон приложение Connect IQ Store (или откройте раздел Connect IQ в приложении Garmin Connect). Войдите тем же аккаунтом Garmin, к которому привязано ваше устройство.
- Найдите Live Race Stats (поиск по названию или по разработчику DenisChernykh).
- Нажмите Install и выберите ваше устройство. Приложение зальётся на устройство по Bluetooth (устройство должно быть подключено к телефону).
Добавить поле на экран (на устройстве)
На устройстве откройте: профиль активности (например «Велозаезд») → Экраны данных → выберите или добавьте экран → раскладка → в нужную ячейку выберите Connect IQ → RaceStats.
Совет: для красивой таблицы со всеми метриками поставьте раскладку «1 поле» (на весь экран) — тогда приложение рисует сетку в две колонки, как родной экран данных Garmin.
Настройка (в приложении Connect IQ на телефоне)
Поля данных Garmin настраиваются только с телефона: Connect IQ → ваше устройство → Connect IQ Apps → Live Race Stats → Settings.
- Site URL (адрес сайта): по умолчанию
https://universalbicycle.team. Менять не нужно, если ваша гонка на нём; меняйте, только если организатор развернул систему на своём сервере. - Competition ID: числовой id из адреса страницы гонки. Пример: если гонка по адресу
.../calendar/259/, значит ID = 259. - Bib number: ваш стартовый номер.
- Rows: сколько метрик показывать одновременно (от 1 до 10).
- Row 1 … Row 10: какую метрику показывать в каждой строке.
Попробовать без гонки (демо): оставьте Site URL по умолчанию, укажите Competition ID 259, Bib number 1, Rows 10 — поле покажет данные демо-гонки («test race»). Цифры статичные, это просто проверка, что всё работает.
Какие метрики можно вывести
Всего 15 метрик на выбор. Подписи короткие, чтобы влезали на экран (слева — при английском языке устройства, справа — при русском):
- Место / всего: общий зачёт — «Place abs / Место абс»; в группе — «Place gr / Место гр».
- Отрывы (общий зачёт): к сопернику спереди «Gap ahd abs / Отрыв вп абс», сзади «Gap bhd abs / Отрыв сз абс», от лидера «Gap ldr abs / Отрыв лд абс».
- Динамика отрывов (общий): спереди «Dynam ah abs / Динам вп абс», сзади «Dynam bh abs / Динам сз абс», к лидеру «Dynam ld abs / Динам лд абс».
- Отрывы (группа): спереди «Gap ahd gr», сзади «Gap bhd gr», от лидера группы «Gap ldr gr».
- Динамика отрывов (группа): «Dynam ah gr», «Dynam bh gr», «Dynam ld gr».
- Круги (пройдено / всего): «Laps / Круги».
Сокращения: ahd/вп — соперник на одно место выше вас; bhd/сз — на одно место ниже; ldr/лд — лидер зачёта; abs/абс — общий зачёт; gr/гр — ваша группа (категория).
Как читать значения
- Место: «3/4» — вы третий из четырёх участников.
- Отрыв (Gap): время со знаком, «+M:SS» или «+H:MM:SS». «+» — вы проигрываете этому сопернику (он быстрее по времени), «−» — вы его опережаете. Примеры: «Gap ahd abs +0:22» — отстаёте от соперника спереди на 22 сек; «Gap bhd abs −0:11» — соперник сзади отстаёт от вас на 11 сек; «Gap ldr abs +0:36» — отстаёте от лидера на 36 сек.
- Динамика (Dynam): на сколько изменился этот отрыв за ваш последний круг. «+» — отрыв вырос, «−» — сократился. Помогает понять, догоняете вы или отваливаетесь.
- Круги: «3/10» — пройдено 3 из 10 кругов.
- DSQ: если участник дисквалифицирован, в месте будет «DSQ».
- «--» (два прочерка): данных пока нет — это не ошибка. Бывает, когда не задан ID гонки или номер, нет телефона/интернета рядом, гонка ещё не началась или первые данные ещё не пришли.
Важно про задержку данных
- Данные обновляются примерно раз в 5 минут — это ограничение Garmin для фоновых запросов у полей данных, обойти нельзя.
- Данные меняются только когда участник пересекает финиш круга и информация доходит до сайта. Промежуточные точки не используются — ради надёжности.
- Поэтому первые цифры появятся не сразу, а в течение ~5 минут после старта, и дальше обновляются с тем же интервалом.
- Телефон должен быть подключён к устройству и иметь интернет. Если связь пропала — поле держит последнее значение.
Как это устроено
Цепочка данных: (1) хронометристы фиксируют отсечки на финише круга; (2) генератор протоколов считает по ним для каждого номера место, отрывы, круги и динамику и отправляет «снимок» на сайт при каждой перегенерации; (3) сайт хранит снимок по каждому номеру и отдаёт его публично; (4) поле Garmin раз в ~5 минут запрашивает данные своего номера и рисует их.
Технические детали:
- Поле данных Garmin не может ходить в интернет напрямую. Запрос делает фоновый процесс и только через телефон по Bluetooth; минимальный интервал таких запросов у Garmin — 5 минут.
- Публичный запрос (авторизация не нужна, статистика открытая):
GET https://universalbicycle.team/api/v1/live-stats/{competition_id}/{bib}. Ответ — место, отрывы и т.д. по этому номеру (все значения строки). - Если снимка для пары «гонка/номер» ещё нет — сайт возвращает 404, и поле показывает «--», продолжая опрашивать.
- Поле кэширует последний снимок; отрисовка идёт из кэша. Когда вы завершаете активность, фоновый опрос выключается — чтобы не сажать батарею и сеть после гонки.
- Отрывы считаются по времени на последнем общем круге двух участников и по личному времени гонщика (корректно для раздельного и группового старта), а не по времени на часах.
Поддерживаемые устройства
Приложение поддерживает 142 устройства Garmin: велокомпьютеры серии Edge и множество часов (Fenix, Forerunner, Venu, Instinct и др.). Локализовано на 10 языков, включая русский. Бесплатно, без рекламы; персональные данные не собирает — передаёт только номер гонки и ваш стартовый номер, чтобы получить открытую статистику.
Частые вопросы
- Поле пустое / показывает «--». Проверьте по порядку: задан ли Competition ID и Bib; подключён ли телефон к устройству; есть ли на телефоне интернет; прошло ли ~5 минут после старта; есть ли для вашей гонки живая статистика (спросите организатора).
- Данные не в реальном времени. Так и задумано: обновление раз в ~5 минут и только по финишам кругов.
- Можно ли настроить прямо на устройстве? Нет, поля данных Garmin настраиваются только с телефона.
- Сколько метрик можно вывести? До 10 в одном поле. Поле занимает одну ячейку раскладки; сколько строк реально влезет, зависит от размера ячейки.
- Работает ли на часах? Да — поле доступно и на часах (Fenix, Forerunner и др.), не только на Edge.
Для организаторов
Чтобы статистика работала на вашей гонке: соревнование на сайте должно быть опубликовано (approved), не скрыто и не удалено; в генераторе протоколов включена отправка статистики (общий зачёт и/или по группам) — метрики «abs» появляются при включённой «абсолютной» статистике, «gr» — при «групповой». Если вы разворачиваете систему у себя, приложение можно направить на свой сервер, указав его адрес в поле Site URL. Исходники сайта: github.com/dchernykh1984/cycling-site.
Для владельцев других устройств
Если ваше устройство не Garmin, но поддерживает установку приложений, вы можете написать собственный клиент: данные отдаёт открытый API нашего сайта, авторизация не нужна.
Запрос: GET https://universalbicycle.team/api/v1/live-stats/{competition_id}/{bib}, где competition_id — числовой id гонки из адреса страницы соревнования, bib — стартовый номер (строка).
Ответ — JSON вида {"competition_id": 259, "bib": "1", "updated_at": "…", "stats": {…}}. Поле stats — словарь «ключ → строка»; какого-то ключа может не быть (значит, данных по этой метрике пока нет). Если снимка для пары «гонка/номер» ещё нет, сайт вернёт 404 — просто повторяйте запрос позже. На сайте данные обновляются по мере прохождения кругов, поэтому опрашивать чаще, чем раз в ~30–60 секунд, смысла нет.
Ключи в stats (все значения — строки):
place_abs/place_group— место в общем зачёте / в группе (например «3»), либо «DSQ» для дисквалифицированного.qty_abs/qty_group— число участников (общий зачёт / группа).gap_prev_abs/gap_prev_group— отрыв к сопернику спереди (со знаком «+»: вы отстаёте).gap_next_abs/gap_next_group— отрыв к сопернику сзади (со знаком «−»: он отстаёт от вас).gap_leader_abs/gap_leader_group— отрыв от лидера.gap_prev_*_delta,gap_next_*_delta,gap_leader_*_delta— динамика соответствующего отрыва за последний круг («+» вырос, «−» сократился).laps— круги «пройдено/всего» (например «3/10»).
Форматы: отрыв — «+M:SS» или «+H:MM:SS», с долями секунды по числу знаков после запятой из настройки генератора «Digits after decimal» (обычно 1, например «+0:36.1»); место и количество — целое числом-строкой. Все значения считаются только по финишам кругов (промежуточные точки не используются). Подробности — в исходниках сайта: github.com/dchernykh1984/cycling-site.
Написали такое приложение? Дайте нам знать! Оставьте комментарий под этой статьёй, отправьте предложение через форму «Отправить статью» (в базу знаний или как новость) или напишите нам через форму связи с владельцами в вашем личном кабинете на сайте. Будем рады рассказать о нём другим участникам.
Комментарии (0)
Комментариев пока нет. Будьте первым!
Войти чтобы оставить комментарий.