Значок приложения HeartRate Broadcaster

Ваша частота сердечных сокращений,
на любом велокомпьютере.

HeartRate Broadcaster (HRB) считывает частоту сердечных сокращений в реальном времени с ваших Apple Watch и AirPods Pro и объединяет их в одно значение. Оно передает эти данные по Bluetooth LE как стандартный датчик частоты сердечных сокращений: ваше приложение для тренировок видит нагрудный ремень.

Одно сердце, один поток

Ваши часы измеряют. Ваши AirPods измеряют. Два датчика, показывающих разные значения в один момент, хуже, чем один датчик, который немного ошибается, поэтому HRB согласовывает их и передает в эфир ровно одно число.

HeartRate Broadcaster показывает 97 уд/мин с Apple Watch, строка «Соглашение о датчике» содержит надпись «Только часы», подключено головное устройство.

Согласование датчиков, открыто

Он называет датчики, которые он может слышать в данный момент, выводит разницу между ними в ударах в минуту и показывает, какое именно значение он выбрал и отправил.

Apple Watch
Основной датчик. Он запускает настоящую тренировку — единственный способ измерять частоту сердечных сокращений с полезной частотой дискретизации и продолжать измерять её при выключенном экране.
AirPods Pro 3
Второй, полностью необязательный датчик. Одних часов достаточно для полноценного источника; одни AirPods тоже.
iPhone
Усредняет показания, которые совпадают, отбрасывает выброс, когда они не совпадают, и рекламирует результат как стандартную службу частоты сердечных сокращений Bluetooth LE (0x180D). Когда датчик замолкает, в строке указывается это, а не тихое сравнение со старым числом.
Головное устройство
MyWhoosh, Zwift, TrainerRoad, Wahoo и устройства Garmin Edge с поддержкой Bluetooth видят один обычный нагрудный ремень.

Джоули на входе, калории на выходе

Мощность измеряет работу. Перевод этой работы в калории требует двух констант, обе из которых указаны ниже.

Сводка сессии: 37 активных калорий, 40 всего с учетом отдыха, 40 кДж работы, среднее 217 Вт, и четыре датчика, пара PowerTap P1 отмечена как подсчитанная.
Каждый результат арифметики ниже — на одной карточке. 40 кДж работы при эффективности 0,24 дают 40 ккал, что является общим значением; если вычесть долю за отдых, то 37 — это то, что сообщается Health.

От педалей до цифры

Ватт — это джоуль в секунду. 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. Там же доступен полный исходный код.

Релизы на GitHub

App Store — 4,99 USD

Одна покупка. Никакой подписки, никаких покупок внутри приложения, никакой рекламы, никакой учетной записи, и оно обновляется само, как и любое другое приложение. Вы платите, чтобы избежать обоих способов выше, и за работу, стоящую за этим.

Посмотреть в App Store

Попробовать в 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 тем же способом.

MyWhoosh Zwift TrainerRoad Wahoo Garmin Edge (Bluetooth) nRF Connect

А вот что он показывает. Указанные устройства — те, с которыми приложение разрабатывалось и тестировалось в реальных поездках; любой другой счётчик или тренажёр тоже работает, потому что приложение читает стандартные профили Cycling Power и FTMS, а не конкретные модели.

Wahoo KICKR CORE 2 PowerTap P1 SRAM Red crank Any Bluetooth power meter Apple Watch AirPods Pro 3 OpenBikeControl shifting

Нет 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.