Garmin у меня на руке два года. Сон, пульс, HRV, стресс, Body Battery, каждая тренировка по секундам, каждый подход в зале. Всё это оседает в Garmin Connect и там же и остаётся.
Хотелось просто спросить у ChatGPT, как прошла неделя. По своим цифрам, а не общими словами про сон вообще. ChatGPT их не видит, поэтому спрашивал по-другому: открывал Garmin Connect, скринил график сна, скринил HRV, скринил тренировку, кидал скрины в чат один за другим. Работало, но криво. На одном скрине сон, на другом HRV, а связать их между собой должен был я сам, руками, в голове. ChatGPT видел кусок картинки, а не то, что происходило со мной за неделю целиком.
Задолбался. Написал скрипт, который сам забирает сон и HRV за сегодня и складывает в файл. Без плана на будущее, просто чтобы не переписывать руками. А дальше пошло по накатанной: файла быстро стало мало, появился отчёт за неделю, потом бот в Телеграме, потом бот научился не только отвечать, но и сам создавать тренировки в Garmin. Сейчас это открытый проект. Ставится на свою машину.
Про архитектуру и код у меня отдельная статья, там кэш и все технические подробности. Здесь про другое: что реально можно спросить и зачем вообще этим заниматься.
Цифра без разбора ничего не значит
Garmin честно всё считает. HRV 47 мс, статус UNBALANCED. Body Battery упала с 83 до 10 за день. Sleep score 83 из 100. Цифры настоящие, часы их реально насчитали по мне. Что с ними делать, часы не говорят.
Можно погуглить, что вообще такое HRV. Можно вставить скрин в ChatGPT, только он видит одну цифру без истории: не знает, какой у меня HRV обычно и что изменилось за неделю. Разбираться, что нормально конкретно для меня, приходилось самому, за пару лет ношения часов методом накопленного опыта.
У бота есть история моих же данных: какой HRV был на прошлой неделе, какой обычно RHR, сколько в среднем сна. Спрашиваю не «что такое HRV», а «почему сегодня ниже». Ответ строится по моим цифрам за предыдущие недели, не по общей статье про HRV из интернета.
Это не диагноз и не замена врача. Это просто разбор того, что уже насчитали часы, с оглядкой на то, что было у меня раньше.
Просто спросить
Открыл Garmin, сделал три скрина, вставил в чат по одному. Так было раньше.
Сейчас пишу боту «как прошла неделя» и получаю ответ по своим настоящим данным. Без переписывания.
Разница не в том, что ответ красивее оформлен. Разница в том, что бот сам решает, куда за ним лезть. Спросил про последнюю тренировку, он сам понял, какая это была тренировка, вытащил пульс, длительность, калории, разбил силовую по подходам и сказал, какие группы мышц работали:

Мышечные группы Garmin сам наружу не отдаёт, официального доступа к этому нет. Пришлось отдельно разбираться, какая категория упражнения относится к какой группе мышц, и собрать таблицу самому. Для того, кто просто пишет боту, вся эта возня не видна вообще. Видно только ответ.
Тренировку можно попросить словами
В приложении Garmin есть конструктор тренировок: шаги, пульсовые зоны, сохранить, отправить на часы. Сам я туда почти не заходил. Открывать конструктор ради одной пробежки с интервалами всегда казалось лишней задачей поверх основной.
Оказалось, что если у бота есть доступ не только читать, но и писать в Garmin, работает это не только для меня. Написал боту, что хочу интервальную тренировку на велосипеде по образцу последней реальной поездки, с алертом по пульсу на спринтах. Он собрал шаги, выставил зоны, отправил. Тренировка появилась на часах.
Для силовых устроено иначе: не разминка и заминка, а конкретные упражнения, подходы, повторы, вес. Попросил тренировку на кор и ягодицы, два подхода по двадцать повторений, тридцать секунд отдыха между подходами. Собралась и легла в библиотеку.
Перед тем как что-то реально уходит в Garmin, бот показывает план и просит подтвердить: сколько шагов, сколько минут, какие зоны. Не из-за недоверия к себе, а потому что один раз модель перепутала логику интервалов, и обычная тридцатиминутная тренировка превратилась в четырёхчасовую. С подтверждением такую вещь видно сразу, а не после того, как она уже легла на часы.

Данные твои
Тут можно было сделать закрытое приложение с подпиской. Такие сервисы в России уже есть: платишь, получаешь отчёты, а что происходит на чужом сервере с твоим сном, не знаешь.
Не стал так делать. Свой сон и свой пульс не хочется класть в коробку, которую нельзя открыть и посмотреть внутрь.
Весь пайплайн ставится на своей машине. Данные попадают в двух местах: в Garmin, откуда их и забираем, и там, куда сам укажешь для анализа, обычный ключ от провайдера или локальная модель на своём же компьютере через Ollama. С локальной моделью цифры вообще не выходят из дома.
Завести это несложно
Скачал архив, распаковал, дважды кликнул по иконке. Всё. Открывается страница настройки в браузере, на своём же компьютере. Вписал почту и пароль от Garmin, вставил ключ от LLM или выбрал локальную модель, добавил токен бота от @BotFather. Сохранил, и всё, окно можно закрывать: пайплайн работает сам, а разговор с ним идёт в Телеграме с телефона.
Собрано под Windows и под macOS. Код руками трогать не нужно вообще.

Если у тебя не Garmin
Работает всё это только с Garmin. Причина простая: на руке у меня Garmin, и весь разбор начался именно с него.
У кого-то другой велостанок, другие часы, другой источник данных о сне, и разрыв между этим устройством и ИИ точно такой же. Если это твой случай, напиши. Каталог всех брендов заранее не обещаю, разбор конкретной ситуации обещаю.
Если хочется разобраться, как это работает под капотом
Отдельная статья с кодом и архитектурой: https://habr.com/ru/articles/1071224/. Здесь её не пересказываю.
Репозиторий открыт: github.com/TolmachevKirill/garmin_ai. Готовая версия лежит в релизах.
Комментарии (29)

Kwisatz
20.08.2026 04:17Как именно вы получаете доступ к данным гармин? Я не нашел нормального способа выцарапать их

Babaji Автор
20.08.2026 04:17Через
python-garminconnect(cyberjunky на GitHub) неофициальную библиотеку, которая имитирует запросы из веб-версии Garmin Connect: логинишься своей учёткой, дальше через неё дёргаешь эндпоинты, которые обычно ходят из браузера. Официального публичного API у Garmin для такого нет, поэтому это ровно reverse-engineered доступ, а не что-то задокументированное самим Garmin.Про архитектуру и детали, что конкретно тянется и как кэшируется, у меня отдельная статья, там технически: https://habr.com/ru/articles/1071224/.

Syzd
20.08.2026 04:17Я не могу понять, вот ИИ скажет вам завтра бегать с 19:00 до 19:30 и вы побежите? Т.е. не вы принимаете решение, а ИИ? А может вам с 19:30 удобнее?

Babaji Автор
20.08.2026 04:17Не так. ИИ ничего не решает и не навязывает. Он делает то, что я попросил словами, показывает план и ждёт подтверждения, прежде чем что-то уйдёт в Garmin. Решение всегда моё.
И тренировка привязана к дате, не к конкретному часу. 19:00 или 19:30 бежать, решаю я сам, глядя на часы, а не бот.

vaslobas
20.08.2026 04:17А чего не поставить https://www.bevel.health/ и там все эти данные подтянутся из часов скорее всего и будет тоже какая никакая аналитика типа вупа.

Babaji Автор
20.08.2026 04:17Bevel реальный, по отзывам неплохой. Но у меня другая задача: важно было именно свои данные из Garmin донести до моего ChatGPT, у меня там переписка с 2023 года, ещё с версией GPT-3.5, и весь контекст моего образа жизни уже накоплен в ней. Заводить отдельного встроенного коуча в новом закрытом приложении смысла не было, хотелось кормить данными именно этот чат.
Плюс Bevel облачная подписка, закрытый код, только iOS, и по Garmin историю тянет всего месяц (ограничение самого Garmin API, в их же фидбеке люди жалуются и ссылаются на ту же библиотеку, что у меня, как на обходной путь). У меня открытый код, локальный кэш без такого ограничения, и агент, который не только показывает цифры, но может создать тренировку прямо в Garmin.

Kwisatz
20.08.2026 04:17А вот эта вот чехарда она везде. У гармин еще совершенно лайтовая версия. Бытует мнение что все самозабвенно делают дурные деньги на продажи массивов данных и потому везде так.

randomsimplenumber
20.08.2026 04:17все самозабвенно делают дурные деньги на продажи массивов данных
Готов продать массив данных со своих часов. К кому обратиться за дурными деньгами? Могу и на вторую руку поцепить ;)

yujinn
20.08.2026 04:17Спасибо что поделились своим опытом. Даже задумался над тем, чтобы и свои данные покрутить с ИИшкой.
Радует, что у меня Polar, который предоставляет API для доступа к данным (и для желающих - SDK для работы со своими датчиками по Bluetooth):
Babaji Автор
20.08.2026 04:17Polar с официальным API это прямо тот случай про открытость к другим устройствам: если данные можно получить легально через API, а не выцарапывать руками, задача сильно проще, чем то, что было с Garmin.
Готов посмотреть на Polar AccessLink и попробовать собрать под него ту же логику: кэш, отчёты, бот. Но у меня самого нет Polar, вслепую писать интеграцию рискованно, легко сделать то, что выглядит правильно в коде, но ломается на реальных данных. Если вы готовы потестировать на своём аккаунте, получить токены, прогнать пару запросов, проверить, что реально приходит, можно собрать рабочий прототип. Пиши, договоримся, как организовать.

ikeima
20.08.2026 04:17А поддержка часов серии CMF рассматривается? Как я понимаю с их приложения Nothing X без костылей данные вообще никак не вытащить.

Babaji Автор
20.08.2026 04:17Сомнительно, у CMF/Nothing X закрыто, публичного API не нашёл. Данные с часов уходят в Apple Health на iOS и в Health Connect на Android через само приложение, но это не облачный API, который можно дёргать с сервера, а хранилище на самом телефоне. Чтобы забрать оттуда данные, нужен не скрипт, а отдельное мобильное приложение с разрешением на чтение Health Connect/HealthKit, это совсем другая по объёму задача, чем с Garmin или Polar, где есть облачный API.
Единственный официальный путь без костылей, письмо на privacy@nothing.tech с запросом выгрузки по EU Data Act, но это разовый архив, а не что-то, что можно синхронизировать регулярно.
Так что пока не обещаю, слишком другая архитектура интеграции.

vikarti
20.08.2026 04:17Чтобы забрать оттуда данные, нужен не скрипт, а отдельное мобильное приложение с разрешением на чтение Health Connect/HealthKit, это совсем другая по объёму задача, чем с Garmin или Polar, где есть облачный API.
А не надо его делать - тот же rouse context можно использовать(если что - он в исходниках, с openwebui интеграции делается гдето за полчаса, с chatgpt free/plus(именно Plus) НЕ делается, вроде Pro надо, с Claude Free - ограничено).

Babaji Автор
20.08.2026 04:17Спасибо, не знал про Rouse Context,гляну. Действительно закрывает именно ту часть, о которой я писал: не нужно самому писать Android-приложение для чтения Health Connect, кто-то уже это сделал и раздаёт как MCP-сервер.
Но тут есть нюанс, который сам же и назвал: это решает задачу "достать данные", только если у пользователя вообще есть AI-клиент с поддержкой произвольных MCP-серверов. С ChatGPT Free/Plus, как понимаю, не заведётся вообще, с Claude Free ограниченно, нормально работает с openwebui/Cursor/Claude Pro. У меня в проекте задача была прямо противоположная: чтобы человек без всякого MCP и без платных тарифов просто поставил бота в Telegram и написал ему текстом. Rouse Context, получается, отличный вариант для тех, кто уже сидит в экосистеме MCP-клиентов, но не отменяет отдельную задачу для тех, кто в неё не встроен.
Для CMF/Nothing X всё равно придётся смотреть отдельно, сам факт, что данные лежат в Health Connect, не значит, что телефон должен быть постоянно доступен как сервер, плюс не проверял, что там по факту приходит от CMF конкретно. Но как отправная точка, спасибо, буду иметь в виду

Ksandr73
20.08.2026 04:17Интересный кейс. А где у вас сейчас проходит граница между решениями LLM и обычной детерминированной логикой?
Например, когда бот собирает интервальную тренировку: модель непосредственно формирует структуру шагов/зон/повторов, которая потом уходит в Garmin, или LLM только переводит запрос пользователя в промежуточную модель, а уже её отдельно валидирует код?
История с 30-минутной тренировкой, превратившейся в четырёхчасовую, как раз заставляет задуматься, насколько далеко вообще безопасно пускать LLM в write-операции :)

Babaji Автор
20.08.2026 04:17Модель придумывает саму тренировку какие шаги, сколько интервалов, какие пульсовые зоны. Но записать это в Garmin напрямую она не может. Между её ответом и реальной записью стоит обычный код с жёсткими проверками: если суммарная длительность выходит за разумные границы или структура похожа на тот самый баг (когда одна тренировка на 30 минут превращается в повторяющийся блок на 4 часа) код просто отказывается отправлять план дальше, до Garmin он не доходит вообще.
И даже если проверки пройдены, бот не отправляет тренировку сразу. Он показывает мне готовый план текстом (сколько по времени, что за шаги, какие зоны) и ждёт, что я нажму подтвердить или отменить. То есть модель придумывает содержание, а решение "действительно отправлять или нет" всегда остаётся за проверкой кода и за мной, а не за LLM.
sstas
Как мне кажется, не долго осталось до того момента, когда появятся "личные" ии-агенты, которые будут с рождения отслеживать и состояние здоровья, и активность и всё остальное прочее у конкретного человека, что-то вроде личной няньки. А всего каких-то лет 15 назад в такое даже верилось с трудом.
vaslobas
Основная проблема то не в анализе данных, а получить эти самые данные точно.
Фитнес-часы и браслеты не самые точные штуки и часто я себя чувствую отлично, а часы говорят, что я истощен. Делаю 2-3 часа трени и все отлично. То есть часы врали.
randomsimplenumber
Основная проблема в том, что никто не понимает какая задача решается, и зачем ее воще нужно решать. Что это воще такое? Генератор отчетов о тренировках? Кому его показывать? Персональный тренер? Непохоже.
vaslobas
Для меня геймификация. Тренируюсь и смотрю как растут графики и цифры тренированности. Больше никакой пользы не нашел.
randomsimplenumber
Спорт сам по себе геймификация.
Babaji Автор
Геймификация это не вся польза, а один из сценариев, и не самый интересный. Можно спросить не «как растёт график», а «почему нагрузка растёт, а восстановление нет», и это уже не про красивые цифры, а про риск перетрена. Просто это другой вопрос, чем тот, который ты задавал.
Babaji Автор
Конкретно: это агент, который отвечает по твоим собственным данным Garmin в диалоге, а не общими фразами. Закрывает несколько задач:
Тренер: разбирает пульс, зоны, восстановление, историю тренировок, может сам создать и запланировать тренировку в Garmin по запросу.
Аналитик: отвечает на разовые вопросы типа «сколько я пробежал в мае» или «сравни эту неделю с прошлой по пульсу», без ручного копания в приложении.
Нутрициолог, но только если сам расскажешь ему, что ел, тогда сопоставит с тренировками и калориями. Само по себе питание не трекает.
Память: держит контекст за месяцы, а не только последний скрин, который принёс в чат.
Это не диагностика и не медицинский совет, просто разбор твоих же цифр вместо ручного анализа.
Almaz-kh
просто 5 баллов за комментарий. у меня были разные часы и трекеры. отключил большую часть уведомлений и отслеживалок, потому что это генератор красивых чисел и графиков. в какой-то момент просто пришло осознание, что вся эта жизнь по графику от задачника и фитнес-трекера не для меня. сразу снизился уровень тревожности и стал лучше спать и продуктивнее работать. при этом задачником от тудуист продолжаю активно пользоваться, но не для самоконтроля, а чтобы не забыть важные дела или перенести их на более удобные даты, если сегодня не до них или банально не хочется. и это намного более приятное применение, чем успешно-успешное стремление к выполнению какого-то надуманного плана описанного в книге про планирование задач автор которой в результате повесился.
Babaji Автор
Согласен, разумная позиция. У меня инструмент не про то, чтобы жить по графику или гнаться за цифрами. Он вообще не про мотивацию и не про план. Просто чтобы не листать самому экраны в Garmin Connect и не скидывать скрины в чат по одному, когда хочется спросить что-то про свои же данные.
Almaz-kh
сама по себе реализация описанная в статье прикольная. как умная система для сбора данных в одном месте выглядит интересно.
Babaji Автор
Благодарю!
Babaji Автор
Тут соглашусь наполовину. Часы не идеальны, это правда. У меня кроме часов ещё нагрудный датчик пульса, который включаю именно на тренировках, для пульса это точнее часов. А вот сон, HRV, стресс, Body Battery всё равно только с часов, там альтернативы нет. Так что часть данных надёжнее часов, часть завязана на них полностью, и это ограничение я не скрываю.