От учёта времени к наблюдению за физической жизнью

В продолжение поста про автоматизацию учёта времени.

Для полноты картины всегда хотелось иметь в дневниковых записях или где-то рядом статистику, которую собирают умные часы: количество шагов, продолжительность и качество сна и т.п.
Изначально хотелось “просто потому что”, но потом я себе обосновал, что для правильного стратегирования нужно понимать, почему неделя сложилась именно так, а для лучшего понимания ИИ-стратега нужно кормить как можно более разнообразной пищей: не только списками задач и данными о работе за компьютером, но и данными о физической жизни: сон, подвижность, восстановление. Иначе часть реальности просто не попадает в анализ.

Именно поэтому следующим шагом я занялся выгрузкой и данных с умных часов Amazfit.
Долго запрягал, а потом быстро поехал и за три сеанса с Cursor сделал готовый инструмент для вытягивания данных из облаков Amazfit/Huami :wink:

Нашёл reverse-engineered материалы по Mi Fit / Huami и начал с них. Попутно узнали с курсором много нового, нагуглили правильные эндпоинты, придумали, как парсить получаемые данные.

Для формирования списка показателей применял FPF.

В результате сделали трёхслойную архитектуру:

raw JSON -> normalized JSON -> Markdown для Obsidian

Сначала сохраняются сырые ответы API. Потом из них строится стабильный нормализованный слой. И только потом формируется человекочитаемый экспорт в Obsidian.

При этом не все данные имеет смысл сохранять. Нам нужны не красивые отчёты сами по себе, а наблюдаемые носители данных, аккуратные утверждения и понимание, насколько эти утверждения вообще обоснованы. Ведь часть данных в умных часах - это первичные более-менее точные данные, а другая часть - это производные от них, посчитанные “на глазок” по каким-то среднестатистическим коэффициентам.

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

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

Тем не менее, теперь недельное стратегирование начинает опираться не только на факт трудозатрат и фокуса, но и на физический фон недели. То есть в разбор можно включать не только вопросы вроде “чем я занимался вместо приоритетного проекта?”, но и вопросы вроде “как я соблюдаю режим дня?” и “какие есть корреляции между показателями физической активности и рабочими продуктами?”

Это и есть главный сдвиг.

Раньше у меня был в основном контур:

план недели -> факт трудозатрат -> разбор отклонений -> планирование следующей недели с поправкой на отклонения

Теперь постепенно собирается более полная схема:

план недели -> факт трудозатрат -> факт физического режима -> разбор отклонений и ограничений -> планирование следующей недели с рекомендациями по режиму дня

Отдельно отмечу, что Cursor здесь оказался полезен не просто как способ быстрее писать код, но также и как исследователь.
Он ускорил цикл гипотеза -> проверка -> фиксация решения, который мы многократно прошли, пока доводили решение до работоспособного состояния в ситуации, когда нет нормальной спецификации по API.
И в итоге всё получилось :slight_smile:

Выложил на github: GitHub - dimonier/amazfit-sync: Python utility for fetching Amazfit/Zepp data into local JSON storage and then exporting normalized daily notes to Obsidian. · GitHub

Ниже пример ежедневного отчёта.


2026-03-14 physical activity report based on Amazfit smart watch

Trends (14d)

  • Steps: baseline 5583.1 | today 9526 (+3942.9)
  • Sleep: baseline 06:19 | today 05:47 (-00:33)
  • Resting HR: baseline 56 | today 57 (+1)

Steps

  • Steps: 9526
  • Distance: 6811 m
  • Walk minutes: 131 min
  • Peak steps per minute: 105 steps/min

Steps By Hour

Hour and steps done within the hour

  • 1: 37
  • 4: 7
  • 6: 41
  • 7: 239
  • 8: 341
  • 9: 679
  • 10: 352
  • 11: 259
  • 12: 894
  • 13: 123
  • 14: 818
  • 15: 486
  • 16: 2825
  • 17: 950
  • 18: 375
  • 19: 416
  • 20: 293
  • 21: 204
  • 22: 55
  • 23: 132

Body

  • Weight: 89.5 kg
  • BMI: 27.1
  • Body fat: n/a

Activity

  • Calories: 349 kcal
  • Detected activity sessions: 16
  • Minutes of activity: 178 min
  • Longest activity session: 30 min
  • Peak activity hour: 16:00

Sleep

  • Sleep start: 2026-03-13 23:35
  • Sleep end: 2026-03-14 06:41
  • Time in bed: 07:06
  • Total sleep: 05:47
  • Deep sleep: 01:12
  • Light sleep: 04:35
  • Resting heart rate: 57 bpm
2 лайка

Обновил GitHub - dimonier/amazfit-sync: Python utility for fetching Amazfit/Zepp data into local JSON storage and then exporting normalized daily notes to Obsidian. · GitHub

Раньше получение данных этим скриптом приводила к разлогину в приложении на телефоне.
Теперь сетап чуть сложнее: нужно залогиниться на сайте и скопировать из браузера app token (он живёт несколько месяцев), зато разлогин не происходит.

1 лайк