Update README and PROJECT_MAP with BLE HR, water tracking, OTA, nutrients, altitude filter
This commit is contained in:
parent
7c93bb75c3
commit
926fd70c88
2 changed files with 68 additions and 42 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
49
README.md
49
README.md
|
|
@ -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 прототип чтения ЧСС
|
||||
```
|
||||
|
||||
## Данные продуктов
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue