Написал боту «как прошла неделя». Он сам полез в Garmin и ответил. garmin.. garmin. Garmin Connect.. garmin. Garmin Connect. HRV.. garmin. Garmin Connect. HRV. Open source.. garmin. Garmin Connect. HRV. Open source. Гаджеты.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье. ИИ.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье. ИИ. искусственный интеллект.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье. ИИ. искусственный интеллект. Носимая электроника.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье. ИИ. искусственный интеллект. Носимая электроника. носимые устройства.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье. ИИ. искусственный интеллект. Носимая электроника. носимые устройства. тренировки.. garmin. Garmin Connect. HRV. Open source. Гаджеты. здоровье. ИИ. искусственный интеллект. Носимая электроника. носимые устройства. тренировки. Читальный зал.

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, сделал три скрина, вставил в чат по одному. Так было раньше.

Сейчас пишу боту «как прошла неделя» и получаю ответ по своим настоящим данным. Без переписывания.

Разница не в том, что ответ красивее оформлен. Разница в том, что бот сам решает, куда за ним лезть. Спросил про последнюю тренировку, он сам понял, какая это была тренировка, вытащил пульс, длительность, калории, разбил силовую по подходам и сказал, какие группы мышц работали:

Telegram-бот отвечает на вопрос о последней тренировке: тип, длительность, пульс, упражнения по подходам и задействованные группы мышц

Telegram-бот отвечает на вопрос о последней тренировке: тип, длительность, пульс, упражнения по подходам и задействованные группы мышц

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

Тренировку можно попросить словами

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

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

Для силовых устроено иначе: не разминка и заминка, а конкретные упражнения, подходы, повторы, вес. Попросил тренировку на кор и ягодицы, два подхода по двадцать повторений, тридцать секунд отдыха между подходами. Собралась и легла в библиотеку.

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

Telegram-бот получает команду удалить тренировку по id и показывает кнопки Подтвердить/Отменить вместо мгновенного удаления

Telegram-бот получает команду удалить тренировку по id и показывает кнопки Подтвердить/Отменить вместо мгновенного удаления

Данные твои

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

Не стал так делать. Свой сон и свой пульс не хочется класть в коробку, которую нельзя открыть и посмотреть внутрь.

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

Завести это несложно

Скачал архив, распаковал, дважды кликнул по иконке. Всё. Открывается страница настройки в браузере, на своём же компьютере. Вписал почту и пароль от Garmin, вставил ключ от LLM или выбрал локальную модель, добавил токен бота от @BotFather. Сохранил, и всё, окно можно закрывать: пайплайн работает сам, а разговор с ним идёт в Телеграме с телефона.

Собрано под Windows и под macOS. Код руками трогать не нужно вообще.

Веб-мастер настройки /setup: статусы Garmin/LLM/Telegram/Ollama, поля логина и BYOK/BYOM-провайдера

Веб-мастер настройки /setup: статусы Garmin/LLM/Telegram/Ollama, поля логина и BYOK/BYOM-провайдера

Если у тебя не Garmin

Работает всё это только с Garmin. Причина простая: на руке у меня Garmin, и весь разбор начался именно с него.

У кого-то другой велостанок, другие часы, другой источник данных о сне, и разрыв между этим устройством и ИИ точно такой же. Если это твой случай, напиши. Каталог всех брендов заранее не обещаю, разбор конкретной ситуации обещаю.

Если хочется разобраться, как это работает под капотом

Отдельная статья с кодом и архитектурой: https://habr.com/ru/articles/1071224/. Здесь её не пересказываю.

Репозиторий открыт: github.com/TolmachevKirill/garmin_ai. Готовая версия лежит в релизах.

Автор: Babaji

Источник