baldav/docs/session-logs/2026-10-24_hydration-reminder.md
4aiman 9a8ef04230 Hydration: water intake from the food log, drop the "+вода" button
Intake is what you already log (liquids count via water_pct), so there is
nothing to tap mid-ride and no guessing an amount. At session start JS seeds
the native deficit from the food log — need-so-far for the time of day minus
logged intake — via set_hydration_config(start_deficit_ml); the service then
accrues sweat on top. Removes the +вода button, hydration_drink and water_drink.txt.
2026-10-24 01:29:30 +03:00

34 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-10-24 - Уровневое напоминание пить на тренировке
## Что
Напоминание пить во время велозаезда и VR. НЕ фиксированный таймер (в норме молчит часами) -
уровневая модель: во время активности копится потребность в воде (пот), кнопка «+вода» гасит
отставание; громкий сигнал только когда дефицит превышает порог.
## Реализация (финал)
- `Hydration.kt` (новый) - синглтон на процесс (оба сервиса в одном процессе -> дедуп, нет двойных
бипов на заезде с ремнём). `reset()` при старте сессии -> `tick()` сидит стартовый дефицит
`startDeficitMl` и копит `sweatMlPerHour`; сигнал (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, start_deficit_ml)`.
Манифест: VIBRATE.
- JS: настройка в профиле (вкл, сигнал при отставании мл); `seedHydrationDeficit()` на старте записи
считает стартовый дефицит из ЛОГА (норма ко времени дня минус выпитое из `getDailyWaterMl`).
Вода берётся из залогированной жидкости, отдельной кнопки НЕТ.
## Эволюция (несколько итераций по уточнениям)
- Сначала привязал к HR-сервису (VR). Исправлено: главное - велик, значит GPS-сервис.
- Сначала фиксированный интервал. Исправлено: не таймер, а УРОВЕНЬ (дефицит), молчит пока пьёшь.
- Сначала кнопка «+вода» + ручной слив. Исправлено: вода из потребления (лога), кнопка не нужна -
пользователь не знает, сколько и чего вводить; стартовый дефицит считается из дневного water_pct.
## Статус
Собрано (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 по умолчанию).