baldav/docs/session-logs/2026-10-24_hydration-reminder.md
4aiman 6183f0c529 Hydration reminder: level-based drink alerts during a ride or VR
A shared Hydration singleton (ticked by the GPS ride service and the HR/VR
service, deduped in one process) accrues the body's water need over an active
session and subtracts what you logged via the "+вода" button. It stays silent
while you keep up — can be quiet for hours — and only beeps LOUD on the alarm
stream (cuts through media volume) once the running deficit passes a threshold,
then re-beeps on a cooldown. Not a fixed timer.

Rust set_hydration_config / hydration_drink bridge JS settings and the "+вода"
button to hydration.json / water_drink.txt that the native service reads.
2026-10-24 01:13:43 +03:00

2.8 KiB
Raw Blame History

2026-10-24 - Уровневое напоминание пить на тренировке

Что

Напоминание пить во время велозаезда и VR. НЕ фиксированный таймер (в норме молчит часами) - уровневая модель: во время активности копится потребность в воде (пот), кнопка «+вода» гасит отставание; громкий сигнал только когда дефицит превышает порог.

Реализация

  • Hydration.kt (новый) - синглтон на процесс (оба сервиса в одном процессе -> дедуп, нет двойных бипов на заезде с ремнём). tick() копит sweatMlPerHour за время, вычитает выпитое из water_drink.txt, сигналит (ToneGenerator STREAM_ALARM - пробивает громкость + вибро + уведомление) при дефиците >= alertMl, повтор через reAlertMin. Конфиг hydration.json.
  • GpsRecorderService.kt (велозаезд) и BleHrService.kt (VR) тикают Hydration (reset при старте).
  • Rust: set_hydration_config(enabled, alert_ml, sweat_ml_per_hour, re_alert_min), hydration_drink(ml) (пишет в water_drink.txt, оба пути корня). Манифест: VIBRATE.
  • JS: настройка в профиле (вкл, сигнал при отставании мл, +вода за нажатие мл); кнопка «+вода» на экране записи -> hydration_drink + DB.logWaterDrink (ищет 100%-воду, идёт в дневной итог).

Эволюция (несколько итераций по уточнениям)

  • Сначала привязал к HR-сервису (VR). Исправлено: главное - велик, значит GPS-сервис.
  • Сначала фиксированный интервал. Исправлено: не таймер, а УРОВЕНЬ (дефицит), молчит пока пьёшь.

Статус

Собрано (0.1.519), JS/Rust/Kotlin компилируются. Залито на роутер (http://192.168.1.1:88/baldav/baldav.apk) и VPS (https://4aiman.top/baldav/baldav.apk) - build 519. НА УСТРОЙСТВЕ НЕ ПРОВЕРЕНО (телефон был отключён). Проверка: профиль -> включить, старт «Вело», подождать, «+вода» гасит.

Дальше

  • Кнопка «+вода» на экране VR (сейчас только на записи-карте).
  • Возможно вынести sweatMlPerHour/reAlertMin в настройки (сейчас 600/15 по умолчанию).