Ваша частота сердечных сокращений,
на любом велокомпьютере.
HeartRate Broadcaster (HRB) считывает частоту сердечных сокращений в реальном времени с ваших Apple Watch и AirPods Pro и объединяет их в одно значение. Оно передает эти данные по Bluetooth LE как стандартный датчик частоты сердечных сокращений: ваше приложение для тренировок видит нагрудный ремень.
Одно сердце, один поток
Ваши часы измеряют. Ваши AirPods измеряют. Два датчика, показывающих разные значения в один момент, хуже, чем один датчик, который немного ошибается, поэтому HRB согласовывает их и передает в эфир ровно одно число.
Согласование датчиков, открыто
Он называет датчики, которые он может слышать в данный момент, выводит разницу между ними в ударах в минуту и показывает, какое именно значение он выбрал и отправил.
- Apple Watch
- Основной датчик. Он запускает настоящую тренировку — единственный способ измерять частоту сердечных сокращений с полезной частотой дискретизации и продолжать измерять её при выключенном экране.
- AirPods Pro 3
- Второй, полностью необязательный датчик. Одних часов достаточно для полноценного источника; одни AirPods тоже.
- iPhone
- Усредняет показания, которые совпадают, отбрасывает выброс, когда они не совпадают, и рекламирует результат как стандартную службу частоты сердечных сокращений Bluetooth LE (
0x180D). Когда датчик замолкает, в строке указывается это, а не тихое сравнение со старым числом. - Головное устройство
- MyWhoosh, Zwift, TrainerRoad, Wahoo и устройства Garmin Edge с поддержкой Bluetooth видят один обычный нагрудный ремень.
Джоули на входе, калории на выходе
Мощность измеряет работу. Перевод этой работы в калории требует двух констант, обе из которых указаны ниже.
От педалей до цифры
Ватт — это джоуль в секунду. HRB интегрирует мощность, сообщаемую датчиком, за время его работы, а затем преобразует механическую работу в энергию, затраченную организмом.
- Работа
- Каждый образец мощности умножается на длительность интервала и суммируется. Пропуски исключаются, а не интерполируются — в сводке указано количество пропущенных секунд.
- Эффективность
- Около 24% сожжённой энергии преобразуется в работу на педалях; остальная часть рассеивается в виде тепла. Это значение,
0.24, попадает в диапазон 0,20–0,25, характерный для подготовленных велосипедистов, и объясняет, почему один килоджоуль работы примерно равен одной килокалории. - В покое
- Здоровье означает «выше уровня покоя» по показателю активной энергии, поэтому базовая доля сессии — по формуле Миффлина–Сан Жеора, исходя из вашего роста, веса, возраста и пола — вычитается перед тем, как что-либо будет записано. В итоговой сводке отображаются оба показателя.
- Нет датчика
- При отсутствии данных о мощности оценка переходит к опубликованной регрессии по частоте сердечных сокращений (Keytel et al., 2005) и указывает на это на экране. Оценка, помеченная как таковая, стоит больше, чем число, которое притворяется измеренным.
Каждый датчик на велосипеде
Мощность велосипедная (0x1818), скорость и каденс (0x1816), а также данные для велотренажеров FTMS (0x1826). Показатели передают педали, шатуны и умные тренажеры; пеальные датчики также передают левый/правый баланс, если он доступен.
Протестировано на Wahoo Kickr Core 2 и педалях PowerTap P1, данные с обоих устройств передавались одновременно.
Один датчик считается основным, остальные записываются
Педали, шатун и тренажер показывают разные значения, так как измеряют мощность в разных точках трансмиссии. Вы выбираете, от какого устройства рассчитывается количество калорий; остальные записываются рядом со своими средними значениями, чтобы вы могли видеть разброс.
Езда, бег, плавание
Сессия получает метку до начала, и по умолчанию помечается как езда, когда датчик мощности включен. Метка задает тип активности в HealthKit, и часы также помечают свою сессию в соответствии с ней.
Ваши данные о теле остаются здесь
Рост, вес, дата рождения и пол вводятся один раз и хранятся только на телефоне. Они используются для двух приведенных выше уравнений и больше ни для чего. Рост указывается в футах и дюймах или в сантиметрах.
Запись в Health
Каждая сессия сохраняется как тренировка с показателем активной энергии, поэтому данные попадают в ваши кольца и в любое приложение, читающее данные из Health. История внутри приложения сохраняет детали, для которых в Health нет полей: какие датчики были обнаружены и где были разрывы.
Он сообщает, когда данные являются приблизительными
Неполный профиль тела, потеря сигнала датчика или оценка только по частоте сердечных сокращений отображаются в разделе «Примечания» под цифрой. Ничего не скрывается и не округляется, чтобы выглядеть лучше, чем есть на самом деле.
Три способа получить приложение
Есть одно приложение и одна его сборка. Разница лишь в том, как его получить: два из этих способов бесплатны и требуют усилий или терпения, а третий — это App Store.
TestFlight — бесплатно, 90 дней
Доступно всем, приглашение не требуется. Установите приложение TestFlight от Apple, откройте публичную ссылку, и бета-версия установится параллельно с остальными приложениями. Каждая сборка остаётся активной 90 дней с момента публикации; новая сборка сбрасывает отсчёт, поэтому бета-версия продолжает работать при регулярных обновлениях.
Установка вручную — бесплатно, нужен аккаунт разработчика
Каждый релиз на GitHub содержит сборку .ipa конфигурации Release. Она подписана для распространения, поэтому для установки требуется переподписать её своим сертификатом — это делают Xcode, AltStore или Sideloadly. HealthKit и фоновая работа Bluetooth недоступны в профилях бесплатной подписи, поэтому этот способ требует платного аккаунта Apple Developer. Там же доступен полный исходный код.
App Store — 4,99 USD
Одна покупка. Никакой подписки, никаких покупок внутри приложения, никакой рекламы, никакой учетной записи, и оно обновляется само, как и любое другое приложение. Вы платите, чтобы избежать обоих способов выше, и за работу, стоящую за этим.
Попробовать в TestFlight
Бета-версия открыта: списка приглашений и этапа одобрения нет. Это то же приложение, что и платная версия, устанавливаемое через бета-канал Apple вместо магазина.
- 1 — Установите TestFlight
- Официальное бета-приложение Apple, бесплатное в App Store. Оно должно быть установлено на iPhone, чтобы ссылка начала работать.
- 2 — Откройте публичную ссылку
- На том же iPhone откройте testflight.apple.com/join/VUJCa5Gw, затем нажмите «Принять» и «Установить». Приглашение и код не требуются.
- 3 — Добавьте приложение для часов
- Установите его из приложения Watch на iPhone, так же как и любое другое приложение для часов. Часы выступают в роли датчика, поэтому этот шаг обязателен.
Сборка TestFlight работает 90 дней с момента публикации. Каждая новая сборка перезапускает этот период, поэтому бета-версия продолжает работать, пока обновляется. Версия в App Store не имеет срока действия.
Каждый экран
Скриншоты сделаны со сборки для отправки на iPhone 17 Pro Max и Apple Watch. Некоторые сделаны на телефоне во время езды, остальные — на симуляторе, у которого нет Bluetooth-модуля, поэтому датчики на этих снимках имитируют реальные показания. Все цифры на экране — это вычисления самого приложения. Здесь нет рисунков.
Что он делает
Всё, что здесь указано, уже доступно в приложении. На этой странице нет информации о будущих планах разработки.
Настоящий нагрудный датчик пульса
Передаёт стандартную службу Heart Rate Service (0x180D) с данными Heart Rate Measurement и Body Sensor Location. Любое устройство, сопрягающееся с Bluetooth-датчиком, поддерживает эту функцию без необходимости установки дополнительного приложения или плагина.
Два датчика, одно значение
Когда часы и AirPods сообщают данные, HRB усредняет согласующиеся показания и отбрасывает выброс, когда они не совпадают, предпочитая то, что ближе к тренду, который он уже видел.
Виртуальный переключатель
Этот же телефон также предлагает себя в качестве переключателя через открытый протокол Bike Control, так что кнопки под датчиком частоты сердечных сокращений управляют вашим велотренажёром в MyWhoosh или Zwift. Никаких кликов, никаких контроллеров Play, никаких дополнительных устройств.
Dynamic Island
Live Activity на экране блокировки и в Dynamic Island: текущие удары в минуту, источник сигнала и подписан ли на него головной блок. Информация доступна без разблокировки.
Плавающее окно
Режим «Картинка в картинке» позволяет отображать число на экране при использовании другого приложения — запустите тренировку в HRB, переключитесь на приложение для тренировок, и значение ЧСС будет сопровождать вас в виде плавающего окна. Оно сохраняется при переходе на Домашний экран и отображается поверх других приложений, при этом окно работает бесшумно: оно не воспроизводит звуки, не приостанавливает, не уменьшает громкость и не перехватывает управление тем, что уже воспроизводится.
Блокировка сенсорного экрана часов
Рукав, молния джерси или случайное касание руля могут прервать трансляцию во время езды. Активируйте блокировку, и приложение на часах проигнорирует случайные нажатия. Для разблокировки требуется нажатие длительностью одна секунда, при этом пульс остается читаемым всё время.
Диагностика в полном объёме
В настройках отображаются подключенные центральные устройства по идентификатору, количество отправленных кадров на подписчика, текущая частота кадров, точные байты последнего кадра и время, прошедшее с его отправки. Если что-то не работает, можно определить, какая половина соединения дает сбой.
Анимация, синхронизированная с ритмом сердца
Сердце на телефоне и часах бьется с измеренной частотой и останавливается, когда перестают поступать данные. Неподвижное сердце над правдоподобным числом означает, что датчик потерял связь.
Продолжает передачу в фоновом режиме
После подключения головного устройства связь сохраняется при блокировке телефона. HRB уведомляет раз в секунду, изменилось ли значение, что соответствует поведению настоящего ремешка и ожиданиям головного устройства.
Тестовый сигнал
Синтетический источник частоты сердечных сокращений для сопряжения и отладки без надевания датчика. Убедитесь, что головное устройство видит трансляцию, прежде чем искать проблему в датчике.
Двадцать пять языков
Каждый экран на телефоне и часах переведен на двадцать пять языков, включая арабский с правосторонней компоновкой, а не зеркально отображенный английский. Выберите один язык в настройках, и он останется выбранным независимо от настроек телефона. Этот сайт также доступен на тех же двадцати пяти языках.
Совместимость
Любое приложение или головной блок, сопрягающийся с датчиком службы Heart Rate Service по Bluetooth LE, сопрягает HRB тем же способом.
А вот что он показывает. Указанные устройства — те, с которыми приложение разрабатывалось и тестировалось в реальных поездках; любой другой счётчик или тренажёр тоже работает, потому что приложение читает стандартные профили Cycling Power и FTMS, а не конкретные модели.
Нет ANT+ — и ни одно приложение не может это добавить
HRB передает данные только по Bluetooth LE. ANT+ — это отдельный радиопроткол, а в iPhone нет оборудования для ANT+, поэтому никакое программное обеспечение не может его использовать. Это ограничение устройства, а не приложения.
Устройства, которые принимают данные о частоте сердечных сокращений только через ANT+ — включая Garmin Forerunner 935, — никогда не увидят эту трансляцию, независимо от настроек.
Настройка для MyWhoosh
Работают два варианта. Выбор зависит от того, готовы ли вы носить с собой iPhone, потому что Apple Watch не может ничего обнаружить без него.
Apple Watch + iPhone + AirPods Pro 3
Точный вариант. Оба датчика передают данные, HRB сводит их в одно значение, а MyWhoosh видит один датчик. Запустите приложение на часах, выберите Both в качестве источника на телефоне, затем сопрягите HRB в экране датчиков MyWhoosh. Телефон остается в комнате; часам не нужно находиться рядом с головным устройством, достаточно быть рядом с телефоном.
iPad + AirPods Pro 3
Одноустройственный вариант. AirPods Pro 3 подключаются напрямую к iPad, поэтому HRB, MyWhoosh и Bike Control работают на одном экране без участия телефона и часов. Установите источник AirPods — опции часов здесь скрыты, так как им не к чему подключаться.
Часы всегда работают через iPhone
Apple Watch сопрягается с iPhone и только с iPhone, и никогда не транслирует частоту сердечных сокращений по Bluetooth самостоятельно. Приложение на часах измеряет данные, передаёт показания телефону по каналу связи между часами и телефоном, а головной блок подключается именно к телефону.
Таким образом, часы добавляют второй датчик к конфигурации с iPhone, но не добавляют ничего к конфигурации с iPad. Если вы хотите одно устройство на столе, используйте AirPods на iPad и не подключайте часы.
| Сопряжение один раз, в активном окне | Оставьте HRB открытым на экране, пока MyWhoosh не сообщит об успешном подключении датчика. iOS скрывает объявляемые сервисы фоновых приложений, поэтому для обнаружения приложение должно быть в переднем плане — после этого можно переключиться на другое приложение или заблокировать устройство, и соединение сохранится. |
|---|---|
| Вещание с одного устройства | Запустите HRB на телефоне или iPad, но не на обоих устройствах одновременно. Два работающих экземпляра создают в списке MyWhoosh два одинаковых датчика HRB, и на экране сопряжения их невозможно различить. |
| Связь с часами, если строка красная | Строка Watch App на главном экране показывает, что видит телефон. «Не установлено» означает, что приложение на часах никогда не запускалось; «недоступно» обычно говорит о том, что приложение не работает — откройте его и запустите сессию. На iPad эта строка полностью отсутствует. |
| Проверка без датчика | Установите источник в Test Signal, чтобы транслировать синтетический сигнал 50–100 уд/мин. Он сопрягается в MyWhoosh точно так же, как реальные данные — это самый быстрый способ убедиться, что сторона датчика работает, прежде чем надевать что-либо на себя. |
Вопросы
Самые частые проблемы и честные ответы на них.
AirDrop перестал работать — сначала остановите трансляцию
AirDrop обнаруживает nearby устройства через Bluetooth LE, и HRB делает то же самое, используя тот же радиомодуль. Пока HRB транслирует сигнал, а головной блок подписан на него, радиомодуль занят непрерывно. В результате AirDrop либо не видит устройство на другом конце, либо показывает его, но зависает до начала передачи.
Остановите трансляцию или закройте HRB, затем AirDrop. Всё снова работает немедленно: повторное сопряжение занимает одно нажатие, как только HRB возвращается в передний план. То же самое стоит попробовать для любых других функций, которые перестают работать во время трансляции — передача на CarPlay, Bluetooth-клавиатура, начинающая пропускать нажатия, Continuity Camera.
Можно ли блокировать экран после сопряжения?
Да. Для обнаружения приложение HRB должно быть на переднем плане, но соединение сохраняется при блокировке, сворачивании и переключении приложений. Нельзя выполнить первое сопряжение, если приложение скрыто — iOS останавливает трансляцию сервиса в фоновом режиме.
Каково потребление батареи?
Сама трансляция потребляет мало энергии; значительно больше расходует сеанс тренировки, который формирует показания. Ожидайте примерно столько же, сколько потребляет любая тренировка с измерением пульса на этом устройстве. Часы потребляют больше, чем iPhone, поскольку именно они осуществляют измерение.
Могут ли два приложения одновременно считывать трансляцию?
Да. Bluetooth LE позволяет нескольким подписчикам подключаться к одному датчику, поэтому MyWhoosh и второе приложение могут одновременно получать одни и те же данные. На главном экране отображается количество активных подписчиков, чтобы вы могли убедиться, что оба устройства подключены.
Показания пульса замерли во время езды
Показание становится серым, когда данные устаревают, а не повторяет устаревшее значение. С AirPods это обычно означает, что они перестали передавать данные — переключение маршрута аудио на этой строке и обратно восстанавливает соединение без выхода из приложения.
Garmin не находит устройство
Проверьте, поддерживает ли эта модель передачу частоты сердечных сокращений только через ANT+. У iPhone нет радиомодуля ANT+, поэтому ни одно приложение не может передавать данные по этому протоколу. Устройства Garmin, принимающие данные от Bluetooth-ремешка, обычно успешно подключаются к HRB; те, что не поддерживают Bluetooth, никогда не подключатся.
Куда передаются данные?
Только в радиомодуль Bluetooth, и больше никуда. Нет учетной записи, нет сервера и нет аналитики. Данные о частоте сердечных сокращений поступают из HealthKit на устройстве и передаются как стандартное значение датчика на любое сопряженное устройство.
Требования
Что нужно для работы и сколько это стоит.
| iPhone | iOS 26 или новее. Для трансляции используется роль периферийного устройства Bluetooth, которую не поддерживает симулятор — требуется реальное устройство. |
|---|---|
| Apple Watch | watchOS 11 или новее. Приложение для часов запускает сеанс тренировки, что является единственным способом получать данные о частоте сердечных сокращений с достаточной частотой и продолжать сбор данных при выключенном экране. |
| AirPods | Необязательно. AirPods Pro 3 передают данные о частоте сердечных сокращений на устройство, на котором запущен сеанс тренировки, поэтому HRB запускает его на телефоне, когда вы включаете их в качестве источника. |
| Цена | 4,99 USD в App Store, единовременная оплата. Никакой подписки и внутриприобретений. Бета-версия TestFlight работает параллельно с релизом для всех, кто хочет получить следующую версию раньше. |
| Подключение | Держите приложение открытым до подключения вашего головного устройства. iOS скрывает UUID объявляемой службы фоновым приложением, поэтому обнаружение должно происходить в переднем плане — после этого соединение сохраняется при блокировке телефона. |
| Имя трансляции | По умолчанию HRB, можно изменить до 10 символов — рекламные пакеты имеют размер 31 байт, а головные устройства обрезают более длинные имена. |
Исходный код на GitHub
Всё приложение опубликовано под лицензией MIT — приложение для iPhone, приложение для часов, Live Activity, скрипты сборки и этот сайт. Если вы предпочитаете самостоятельно изучить код Bluetooth, а не доверять заявлению о конфиденциальности, весь код доступен.
- Прочитать
- github.com/tankbottoms/HeartRateBroadcaster — Swift, без зависимостей, без SDK аналитики.
- Собрать
- Клонируйте, запустите
xcodegen generate, откройте проект и соберите. Для подписи требуется ваш идентификатор команды; больше ничего не нужно. - Установить вручную
- Каждый релиз содержит
.ipa-файл конфигурации Release с инструкциями по ручной установке. HealthKit и фоновый Bluetooth недоступны для бесплатных provisioning-профилей, поэтому для переподписания нужен платный аккаунт Apple Developer.