Update README and PROJECT_MAP with BLE HR, water tracking, OTA, nutrients, altitude filter

This commit is contained in:
4aiman 2026-06-07 01:41:33 +03:00
commit 926fd70c88
2 changed files with 68 additions and 42 deletions

View file

@ -6,12 +6,12 @@
| Метрика | Значение |
|---------|----------|
| Строк кода | ~18000 |
| Файлов исходников | 44 |
| Язык | JS 71%, Rust 4%, Kotlin 10%, CSS 15% |
| Таблиц в БД | 17 |
| Экранов | 7 основных + 12 модалок |
| IPC команд (Tauri) | 6 |
| Строк кода | ~22000 |
| Файлов исходников | 50+ |
| Язык | JS 70%, Rust 6%, Kotlin 12%, CSS 12% |
| Таблиц в БД | 20 |
| Экранов | 7 основных + 15 модалок |
| IPC команд (Tauri) | 14 |
| Библиотеки | Leaflet, Chart.js, Hammer.js, JSZip |
| Платформы | Android (Kotlin), Desktop (Tauri) |
@ -21,12 +21,12 @@
| Файл | Строк | Назначение |
|------|-------|------------|
| `js/main.js` | 4214 | Экраны, навигация (winStack), модалки, графики, нутриенты |
| `js/db.js` | 1167 | SQLite через Tauri IPC. Миграции, CRUD, 36 полей добавок |
| `js/gps.js` | 1048 | GPS запись, физика ккал (power model), haversine, импорт/экспорт |
| `js/main.js` | ~5000 | Экраны, навигация (winStack), модалки, графики, нутриенты, HR UI |
| `js/db.js` | ~1400 | SQLite через Tauri IPC. Миграции, CRUD, 41 поле добавок, water_pct, reserves |
| `js/gps.js` | ~1100 | GPS запись, физика ккал (power model), altitude filter, BLE HR polling |
| `js/tilecache.js` | 178 | Оффлайн кэш тайлов карты (IndexedDB) |
| `js/bmr.js` | 61 | BMR (Mifflin-St Jeor + реальный из истории веса), таблица РСП (27 нутриентов) |
| `css/styles.css` | 1893 | Темная тема, мобильный дизайн |
| `js/bmr.js` | ~70 | BMR (Mifflin-St Jeor), РСП из БД (33 нутриента), полураспад |
| `css/styles.css` | ~2000 | Темная тема, мобильный дизайн, HR зоны |
| `index.html` | 26 | Точка входа, порядок загрузки скриптов |
| `data/products_seed.db` | 8.2MB | 13481 продукт (magnit 8627, 5ka 3103, ION 1078, kdv 672, manual 1) |
@ -36,31 +36,33 @@
| Файл | Строк | Назначение |
|------|-------|------------|
| `src/lib.rs` | 512 | Миграции v1, IPC команды, seed import |
| `src/lib.rs` | ~540 | Миграции v1, IPC команды, seed import, update check |
| `src/ble.rs` | ~470 | BLE HR: btleplug (desktop), file IPC (Android), FitPro + Standard HR |
| `src/main.rs` | 5 | Точка входа |
| `Cargo.toml` | 18 | tauri, tauri-plugin-sql, rusqlite, serde |
| `Cargo.toml` | — | tauri, tauri-plugin-sql, rusqlite, serde, btleplug, tokio, uuid |
| `tauri.conf.json` | — | Конфиг приложения, плагины, ресурсы |
### Android Kotlin (`src-tauri/gen/android/.../dev/baldav/app/`)
| Файл | Строк | Назначение |
|------|-------|------------|
| `MainActivity.kt` | 153 | FileObserver для IPC, seed DB копирование, safe insets, SAF |
| `MainActivity.kt` | ~300 | FileObserver IPC, seed DB, safe insets, SAF, BLE commands, OTA check |
| `GpsRecorderService.kt` | 205 | Foreground service GPS, WakeLock, JSONL батчевая запись |
| `BleHrService.kt` | ~340 | Foreground service BLE HR, FitPro protocol, GATT queue, scan/connect |
| `generated/*.kt` | ~1100 | Tauri-сгенерированные: WebView, IPC, permissions |
### Инструменты (`tools/`)
| Скрипт | Назначение |
|--------|------------|
| `5ka_scraper.user.js` | Tampermonkey скрейпер 5ka.ru (рекурсивный BFS категорий) |
| `5ka_scraper.user.js` | Tampermonkey скрейпер 5ka.ru (BFS категорий, Load JSON) |
| `magnit_scraper.user.js` | Tampermonkey скрейпер magnit.ru (NUXT_DATA парсинг) |
| `ion_scraper.user.js` | Tampermonkey скрейпер web.ion.ru (fetch, без перезагрузок) |
| `import_ion.js` | Импорт ION продуктов в seed DB |
| `import_with_dedup.js` | Импорт с дедупликацией по имени |
| `enrich_nutrients.js` | Обогащение микронутриентами из ION |
| `parse_magnit.js` | Парсер HTML каталога Магнит |
| `parse_kdv.js` | Парсер HTML каталога KDV |
| `scrape_5ka.js`, `scrape_5ka_api.js` | CLI скрейперы 5ka |
| `download_tiles.js` | Скачивание тайлов карт для оффлайна |
| `fetch_openfoodfacts.js` | OpenFoodFacts API |
| `fuzzy_dedup.js` | Нечёткая дедупликация |
@ -69,7 +71,7 @@
| Файл | Назначение |
|------|------------|
| `build.sh` | Сборка: android/debug/release, sync frontend, версионирование |
| `build.sh` | Сборка: android/debug/release, sync frontend, версионирование, -u upload на VPS |
| `BUILD_NUMBER` | Автоинкремент номера сборки |
| `ion_products.json` | 1111 продуктов ION (сырые данные скрейпера) |
| `5ka_products_fresh.json` | 3103 продукта 5ka (сырые данные) |
@ -94,8 +96,12 @@
| `supplements` | Добавки (БАД) | name, daily_dose_g, витамины/минералы |
| `supplement_log` | Приём добавок | date, supplement_id, dose_g |
| `gps_sessions` | GPS тренировки | date, activity_type, distance, kcal, speed, elevation, bike_id |
| `gps_points` | Точки трека | session_id, ts, lat, lon, altitude, speed, seq |
| `gps_points` | Точки трека | session_id, ts, lat, lon, altitude, speed, seq, heart_rate, spo2, bp_sys, bp_dia |
| `bikes` | Велосипеды | name, weight_kg, wheel, звёзды, surface_type, is_active |
| `rdi_standards` | Стандарты РСП (RU/EU/US) | code, name |
| `rdi_values` | Нормы нутриентов | standard_id, nutrient_key, value, norm_type (rdi/aup) |
| `nutrient_halflife` | Полураспад нутриентов | nutrient_key, halflife_avg_days |
| `nutrient_reserves` | Запасы нутриентов по дням | date, reserves (JSON) |
### Seed DB (products_seed.db)
@ -115,11 +121,11 @@
```
### Экраны
- **Сегодня** — дневной баланс ккал, еда (продукты + блюда), активность, вес, сон, добавки, статистика (графики)
- **Сегодня** — баланс ккал, еда (продукты + блюда), GPS тренировки, активность, вес, сон, добавки, прогресс-бар жидкости, нутриенты (приход + запасы)
- **Продукты** — подтабы [Продукты | Рецепты], поиск, карточки с КБЖУ, добавление в дневник
- **Трек** — список GPS тренировок, запись, импорт GPX/FTB, скачивание карт
- **Добавки** — список БАД, логирование приёма
- **Настройки** — профиль (вес, рост, BMR), велосипеды, GPS конфиг, оффлайн режим
- **Трек** — GPS тренировки (запись с HR), карта, графики скорости/высоты/ЧСС, импорт GPX/FTB
- **Добавки** — 41 нутриент (витамины, минералы, жирные кислоты, женьшень, ресвератрол, CoQ10)
- **Настройки** — профиль, образ жизни, нормы ЧСС/давления, BLE пульсометр, велосипеды, GPS конфиг, OTA обновления
### Модалки
- Еда: showFoodModal, showEditFoodModal, showFoodFromRecipeModal
@ -133,10 +139,19 @@
|---------|------------|
| `import_seed_products` | Импорт продуктов из seed DB, прогресс-события |
| `get_safe_insets` | Отступы Android status/nav bar |
| `gps_service_command` | start/stop GPS сервиса |
| `gps_service_command` | start/stop GPS + BLE команды (ble_scan/connect/disconnect) |
| `gps_service_read_points` | Чтение JSONL файла точек |
| `save_file` | SAF диалог сохранения (GPX экспорт) |
| `get_app_info` | Версия, git hash, дата сборки |
| `get_update_info` | Проверка OTA обновления (BUILD_NUMBER с VPS) |
| `ble_scan` | Сканирование BLE устройств |
| `ble_scan_results` | Результаты скана (Android) |
| `ble_connect` | Подключение к BLE устройству |
| `ble_disconnect` | Отключение BLE |
| `ble_get_hr` | Последние данные HR/SpO2/BP |
| `ble_is_connected` | Статус подключения |
| `ble_check_bluetooth` | Состояние Bluetooth адаптера |
| `ble_save_device` | Сохранение привязанного устройства |
## Формула ккал (GPS)

View file

@ -4,26 +4,32 @@
## Возможности
- **Дневник питания** — 13480 продуктов из магазинов (Магнит, 5ка, KDV) + база ИОН с микронутриентами. Рецепты с учётом термообработки (потери витаминов при варке/жарке). Единицы измерения (штуки, ложки, стаканы).
- **GPS трекинг** — запись маршрутов на велосипеде/пешком в фоне. Оффлайн карты (Leaflet + IndexedDB кэш). Импорт GPX/FTB (FitoTrack). Экспорт GPX.
- **Расчёт ккал** — физическая модель для велосипеда (мощность из gradient + Crr + CdA). MET-таблица для ходьбы/бега. Профили велосипедов (вес, звёзды, покрытие).
- **Графики** — скорость и высота тренировки с зумом. Тренд веса. Донат макронутриентов. Баланс ккал (приход/расход).
- **Дневник питания** — 13480 продуктов из магазинов (Магнит, 5ка, KDV) + база ИОН с микронутриентами. Рецепты с учётом термообработки (потери витаминов при варке/жарке). Единицы измерения (штуки, ложки, стаканы). Ввод количества формулами (4*30, 300+50).
- **GPS трекинг** — запись маршрутов на велосипеде/пешком в фоне. Оффлайн карты (Leaflet + IndexedDB кэш). Импорт GPX/FTB (FitoTrack). Экспорт GPX. Фильтр altitude outlier'ов и GPS-залипаний.
- **BLE пульсометр** — подключение к FitPro браслетам и стандартным HR датчикам (0x180D). ЧСС, SpO2, давление в реальном времени при записи трека.
- **Расчёт ккал** — физическая модель для велосипеда (мощность из gradient + Crr + CdA). MET-таблица для ходьбы/бега. Профили велосипедов. BMR по Mifflin-St Jeor с коэффициентом активности.
- **Нутриенты** — 37 микронутриентов (витамины, минералы, жирные кислоты, женьшень, ресвератрол, CoQ10). Нормы РСП/АУП (РФ/ЕС/США). Фармакокинетика — запасы в организме по полураспаду.
- **Трекинг жидкости** — water_pct в продуктах, прогресс-бар, настраиваемая норма.
- **Графики** — скорость, высота, ЧСС тренировки с зумом и pan. Тренд веса. Донат макронутриентов. Баланс ккал (приход/расход).
- **OTA обновления** — проверка BUILD_NUMBER на VPS, скачивание через браузер.
- **Вес, сон, добавки** — логирование с историей.
## Стек
- **Frontend**: чистый JavaScript, HTML, CSS. Без React/Vue/bundler.
- **Backend**: Rust (Tauri 2) — SQLite, IPC, seed import.
- **Android**: Kotlin — foreground GPS service, WakeLock, SAF.
- **Backend**: Rust (Tauri 2) — SQLite, IPC, seed import, BLE (btleplug на десктопе).
- **Android**: Kotlin — foreground GPS service, BLE HR service, WakeLock, SAF.
- **Библиотеки**: Leaflet (карты), Chart.js (графики), Hammer.js (жесты), JSZip.
## Сборка
```bash
# Зависимости: Rust, Node.js, Android SDK + NDK
./build.sh -d android # debug APK
./build.sh android # release APK
./build.sh -i android -d # debug + установка на устройство
./build.sh -d android # debug APK
./build.sh android # release APK
./build.sh -i android -d # debug + установка на устройство
./build.sh -u android # release + upload на VPS (OTA)
./build.sh -d -i -u android # debug + install + upload
```
## Структура
@ -32,19 +38,24 @@
```
frontend/
js/main.js — UI, навигация, модалки (3264 строк)
js/db.js — БД, миграции, CRUD (972)
js/gps.js — GPS, физика ккал (947)
js/tilecache.js — оффлайн тайлы (178)
css/styles.css — стили (1599)
js/main.js — UI, навигация, модалки (~5000 строк)
js/db.js — БД, миграции, CRUD (~1400)
js/gps.js — GPS, физика ккал, BLE HR polling (~1100)
js/bmr.js — BMR формула, РСП, полураспад нутриентов
js/tilecache.js — оффлайн тайлы (IndexedDB)
css/styles.css — стили, тёмная тема
data/products_seed.db — 13480 продуктов
src-tauri/
src/lib.rs — Rust бэкенд (512)
gen/android/ — Kotlin: MainActivity, GpsRecorderService
src/lib.rs — Rust бэкенд, seed import
src/ble.rs — BLE HR (btleplug десктоп, file IPC Android)
gen/android/ — Kotlin: MainActivity, GpsRecorderService, BleHrService
tools/
*_scraper.user.js — скрейперы магазинов (Tampermonkey)
import_*.js — импорт в seed DB
enrich_nutrients.js — обогащение микронутриентами
5ka_scraper.user.js — Tampermonkey скрейпер 5ка
magnit_scraper.user.js — Tampermonkey скрейпер Магнит
ion_scraper.user.js — Tampermonkey скрейпер ИОН
smart/
protocol.js — FitPro BLE протокол (reverse-engineered)
hr-reader.js — Node.js прототип чтения ЧСС
```
## Данные продуктов