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.
This commit is contained in:
parent
4637846839
commit
6183f0c529
13 changed files with 271 additions and 6 deletions
31
docs/session-logs/2026-10-24_hydration-reminder.md
Normal file
31
docs/session-logs/2026-10-24_hydration-reminder.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# 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 по умолчанию).
|
||||
Loading…
Add table
Add a link
Reference in a new issue