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.
34 lines
3.2 KiB
Markdown
34 lines
3.2 KiB
Markdown
# 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 по умолчанию).
|