Команды бота

    Редактирование файла

    Создать автоматизацию

    Создать правило автоотправки

    Переслать сообщение в...

    • Загрузка списка групп...

    OmniDrive · Бортжурнал, диагностика и регламент ТО

    Приложение для автомобилистов: паспорт машины, OBD-проверки, регламент обслуживания и единый бортжурнал. Работает на Android и в веб-версии (ПК и мобильный браузер) с одним интерфейсом.

    Возможности

    • Несколько автомобилей — карточки на аккаунт; вход в разделы только после выбора машины.
    • Входящие данные — фото (слайдер, камера/галерея, несколько снимков), марка, модель, год, цвет, госномер, VIN, номер двигателя; кнопка Ai (Bothub Vision).
    • Проверки — параметры OBD, сканирование ошибок, проверка по VIN. Android: Bluetooth ELM327. Web: демо-режим без адаптера. Записи уходят в бортжурнал.
    • Регламент — свои действия ТО с интервалом по км и/или месяцам, обратный отсчёт (зелёный / оранжевый / красный), AI-подбор интервалов, связь с журналом.
    • Бортжурнал — автозаписи из других вкладок и ручные блоки: текст, фото, видео, диктофон, файлы, AI. Теги, фильтры, архив (корзина), дата и пробег.
    • Авторизация — email/пароль, JWT через EuropaServer App Auth (appId=omnidrive).
    • Синхронизация — Android ↔ Web через Yandex Object Storage: LWW по updatedAt, автосинк 10 с, кнопка «Синхронизировать», на Android — pull-to-refresh. Настройки S3 и AI общие на аккаунт.
    • Адаптивный UI — нижняя панель + FAB на телефоне, боковое меню на desktop (≥1024px), стеклянный тёмный градиент.

    Требования

    • Android: 8.0 (API 26) и выше; сборка compileSdk/targetSdk 35. JDK 17. Android Studio с AGP 8.7.
    • Web: Node.js 18+ (сборка локально). Браузер с localStorage.
    • Auth: сервер EuropaServer с плагином App Auth.
    • Синхронизация между устройствами: бакет Yandex Object Storage (ключи S3).
    • OBD на Android: Bluetooth и адаптер ELM327.
    • AI: сеть и API-ключ Bothub.chat (в настройках приложения, не в исходниках).

    Установка и запуск

    Auth API

    Единый сервер — плагин App Auth на EuropaServer (appId=omnidrive):

    sudo bash /home/projects/plugins/app-auth/setup.sh

    Auth Base URL: http://<server-ip>/app-auth
    Локально (без nginx): http://localhost:5030
    Эмулятор Android → ПК: http://10.0.2.2:5030
    Панель аккаунтов: http://<server-ip>/app-auth/

    Сброс пароля по email временно недоступен — смена в панели /app-auth/.

    Android

    1. Откройте проект в Android Studio.
    2. Синхронизируйте Gradle → Run → app.

    Версия приложения: 0.1.0 (versionCode 1). Gradle Wrapper: 8.9. Kotlin: 2.1.0.

    gradlew.bat assembleDebug

    Web (ПК и мобильный браузер)

    > Windows (PowerShell): если npm выдаёт ошибку *«выполнение сценариев отключено»*, используйте `npm.cmd` вместо npm.

    Команды из папки `web/` (где лежит package.json), не из web/dist/.

    cd web
    npm install          # Windows: npm.cmd install
    npm run dev          # http://localhost:5173 — только для разработки
    npm run build        # production в web/dist/
    npm run start        # http://localhost:8082 — production preview

    На телефоне в той же Wi‑Fi сети: npm run dev слушает все интерфейсы — откройте http://<IP-ПК>:5173.

    Деплой web на сервер (сборка локально)

    Белый экран с ошибкой MIME type для main.tsx означает, что сервер отдаёт исходники (web/), а не сборку.

    1. Локально — собрать production:
    cd web
    npm ci               # Windows: npm.cmd ci
    npm run build        # Windows: npm.cmd run build
    1. На сервер — скопировать только содержимое web/dist/ (scp, rsync, FTP).
    1. На сервере — nginx/apache с root на эту папку. Пример конфига — web/nginx.conf.

    npm на сервере не нужен, если статику раздаёт nginx.

    root должен указывать на каталог с index.html и папкой assets/ из web/dist/.

    Использование

    Поток: вход (email/JWT)карточки машин4 вкладки.

    Регистрация и вход

    1. Укажите Auth Base URL в настройках (или оставьте значение по умолчанию сервера).
    2. Зарегистрируйтесь или войдите по email и паролю.
    3. Клиент передаёт appId=omnidrive в register/login.

    Карточки автомобилей

    1. На экране списка нажмите «+» и задайте название карточки.
    2. Выберите машину — откроются вкладки.
    3. Долгое нажатие — удаление. Переключение авто и выход — из шапки / меню.
    4. Кнопка синка в шапке подтягивает машины и данные с других устройств.

    Входящие данные

    1. Блок фото занимает верх экрана (~42%): свайп по слайдеру, нажатие — редактирование.
    2. Ниже восемь полей в фиксированном порядке: фото, марка, модель, год, цвет, госномер, VIN, номер двигателя.
    3. В диалоге: «Фото» / «Галерея», «Ai анализ» напротив изображения.

    Проверки

    1. FAB «+»: Параметры OBD, Сканировать ошибки, Проверка по VIN.
    2. На Android сопрягите ELM327 в системном Bluetooth, затем «Старт» / «Записать».
    3. В web те же экраны в демо-режиме (без живого адаптера).
    4. Запись попадает в список проверок и в бортжурнал. Долгое нажатие — удаление.

    Регламент

    1. Создайте действие (например «Моторное масло») с интервалом в км и/или месяцах.
    2. На карточке списка — блок о следующем ТО (как в деталях).
    3. Цвет: зелёный / оранжевый / красный; при просрочке — срочное уведомление без «осталось N дн.».
    4. Текущий пробег берётся из записей бортжурнала. В деталях — AI-подбор интервалов.

    Бортжурнал

    1. Вкладки сверху: «Все записи», «Теги», «Архив».
    2. FAB открывает меню блоков: AI, Текст, Камера, Диктофон, Файлы.
    3. У записи: теги, дата и пробег (автоподстановка сегодня и max пробега / по дате из истории).
    4. Карточка ленты: дата слева, пробег справа, сетка вложений. Архив — восстановление или окончательное удаление.

    Настройки (AI и синхронизация)

    Иконка шестерёнки на основных экранах:

    • Auth API Base URL, S3 endpoint / region / bucket / ключи.
    • «Проверить S3» и «Синхронизировать».
    • Bothub: API Key, Base URL, текстовая и vision-модели, temperature, max tokens.

    Первый клиент с настроенным S3 пишет users/{userId}/account-config.json. Другие устройства с теми же ключами подтягивают S3+AI (LWW). Подробности — doc/SYNC.md.

    Структура проекта

    OmniDrive/
    ├── app/                          # Android (Kotlin, Compose)
    │   └── src/main/java/com/omnidrive/
    │       ├── ui/                   # экраны, ViewModel, навигация
    │       ├── domain/               # модели, регламент, AI-интерфейсы
    │       ├── data/                 # Room, репозитории, Bothub, медиа
    │       ├── sync/                 # Auth API, Yandex S3, LWW
    │       ├── obd/                  # ELM327, PID, DTC
    │       └── di/                   # Hilt
    ├── web/
    │   ├── src/
    │   │   ├── pages/                # Auth, машины, 4 вкладки, настройки
    │   │   ├── components/
    │   │   ├── store/                # Zustand + localStorage
    │   │   ├── lib/                  # authApi, S3, syncEngine
    │   │   └── domain/
    │   ├── dist/                     # production-сборка (не исходники)
    │   └── nginx.conf
    ├── shared/
    │   └── design-tokens.json        # цвета, радиусы, вкладки
    └── doc/                          # ARCHITECTURE, CHANGELOG, AI_RULES, SYNC

    Слои и потоки данных — в doc/ARCHITECTURE.md. Сборка web — web/README.md.

    Технологии

    Android (app/)

    | Компонент | Зачем |
    |————|———|
    | Kotlin 2.1 / JDK 17 | код и JVM-цель |
    | AGP 8.7.3, Gradle 8.9 | сборка :app |
    | Jetpack Compose (BOM 2024.12.01), Material 3 | экраны без XML-layout |
    | Navigation Compose 2.8.5 | вкладки и OBD-экраны |
    | Room 2.6.1 | локальная БД (версия схемы 7) |
    | Hilt 2.53.1 | DI |
    | OkHttp 4.12 | Auth API и S3 SigV4 |
    | Coil 2.7 | изображения |
    | CameraX 1.4 | камера |

    Min SDK 26 · Target SDK 35.

    Web (web/)

    | Компонент | Зачем |
    |————|———|
    | React 19 + TypeScript 5.7 | UI |
    | Vite 6 | dev-сервер и production-сборка |
    | Zustand 5 | состояние + persist в localStorage |
    | lucide-react | иконки |

    Общее

    • shared/design-tokens.json — единый дизайн Android + Web.
    • EuropaServer App Auth — учётки.
    • Yandex Object Storage — данные авто, медиа, account-config.json.

    Разрешения (Android)

    | Разрешение | Зачем |
    |————|———|
    | INTERNET | Auth, S3, Bothub |
    | CAMERA | фото во входящих данных и бортжурнале |
    | RECORD_AUDIO | диктофон в бортжурнале |
    | READ_MEDIA_IMAGES / READ_EXTERNAL_STORAGE (до API 32) | галерея |
    | BLUETOOTH (maxSdk 30), BLUETOOTH_CONNECT, BLUETOOTH_SCAN | ELM327 |

    usesCleartextTraffic включён для локального Auth (http://10.0.2.2:5030). FileProvider — сохранение снимков камеры.

    Настройка API и ключей

    Ключи не кладутся в репозиторий.

    1. Auth — URL плагина App Auth в поле «Auth API Base URL».
    2. S3 — endpoint, region, bucket, access/secret key. CORS бакета: Origin сайта, GET/PUT/HEAD, заголовки *.
    3. Bothub — Access Token и Base URL (по умолчанию https://bothub.chat/api/v2/openai/v1). Модели по умолчанию: текст gemini-2.0-flash-001, vision gpt-4.1, temperature 0.7, max tokens 1200.
    История изменений

    Формат основан на Keep a Changelog.

    [Unreleased]

    Changed

    • Документация приведена к коду: README — возможности, требования, сценарии по экранам, дерево, стек, разрешения, ключи; ARCHITECTURE — Auth, S3 LWW, Room v7, фактические вкладки; AI_RULES — автосинк, не «только вручную»

    Fixed

    • Web: после входа не подтягивались машины с телефона — не было auto-sync и настройки/синк были недоступны без выбранного авто
    • Web syncEngine: pull учитывает машины, добавленные из S3 в том же проходе; совместимость bundle profile (Android) ↔ vehicle (web)
    • Web S3 на HTTP: crypto.subtle недоступен → ошибка digest; добавлен pure-JS SHA-256/HMAC fallback
    • Android sync: No value for id из-за web-манифеста без id — парсер устойчив, web пишет id/revision
    • Двусторонняя синхронизация: LWW по updatedAt; account-config (S3+AI) в users/{id}/account-config.json
    • Автосинк 10с, кнопка синка, pull-to-refresh на Android

    Changed

    • Auth переведён на EuropaServer плагин App Auth (appId=omnidrive); локальный auth-server/ удалён
    • Клиенты передают appId в register/login; сброс пароля по email временно недоступен (смена в панели /app-auth/)

    Fixed

    • Web production: белый экран при деплое — сервер должен раздавать web/dist/, не исходники (/src/main.tsx работает только с Vite dev)

    Added

    • npm run start — production preview на порту 8082
    • web/nginx.conf — пример конфигурации nginx для деплоя
    • README: Windows PowerShell — npm.cmd вместо npm; деплой через локальную сборку и копирование web/dist/

    [0.2.0] — 2026-07-06

    Added

    • Web-версия (web/): React 19 + TypeScript + Vite
    • Адаптивный UI: нижняя навигация на мобильных, боковое меню на desktop (≥1024px)
    • Feature parity с Android: 4 вкладки, FAB, диалоги, шаблоны, регламент, бортжурнал
    • shared/design-tokens.json — единые цвета и параметры дизайна
    • Zustand + localStorage для хранения данных в браузере
    • Камера и галерея в web через <input type="file">

    Changed

    • README и ARCHITECTURE обновлены под монорепозиторий (Android + Web)

    [0.3.2] — 2026-07-08

    Changed

    • Карточка автомобиля: только поле «Название карточки»
    • Вкладка «Входящие данные»: фиксированный порядок из 8 полей
    • Убраны шаблоны «Номер кузова», «Пробег», произвольные поля
    • Диалог добавления: кнопки «Фото» и «Галерея», «Ai анализ» напротив «Изображение»
    • Фото машины: множественный выбор из галереи (Android/Web)
    • Room v2: imageUrisJson для нескольких фото

    [0.5.0] — 2026-07-15

    Added

    • Auth API (auth-server/): email/пароль, JWT, сброс пароля
    • Yandex S3 sync Android + Web (SigV4, manifest, vehicle bundles)
    • Настройки: Auth Base URL, S3 bucket/keys, «Проверить S3» / «Синхронизировать»
    • Миграция локальных PIN-данных: claim на новый userId без потери vehicleId
    • Room v6: таблица sync_state
    • Документация: doc/SYNC.md

    Changed

    • Авторизация: вместо локального логин+PIN — email/JWT (как FlowNote)
    • OkHttp в Android для Auth/S3

    [0.4.2] — 2026-07-13

    Added

    • Проверки: меню FAB «Параметры OBD», «Сканировать ошибки», «Проверка по VIN» (каркас)
    • Android: интеграция OBD из OBDAssist (OBD2Service, PID/DTC), Bluetooth ELM327, экраны «Старт» / «Записать»
    • Записанные проверки дублируются в бортжурнал; долгое нажатие — удаление
    • Web: те же экраны в демо-режиме (без реального OBD)

    Changed

    • Регламент: на карточках списка — информационный блок о следующем ТО (как в деталях)
    • Настройки AI: стеклянный стиль в едином оформлении приложения (Android/Web)
    • Бортжурнал: карточки ленты — дата слева, пробег справа, теги, сетка вложений 4 в ряд (+N), 2 строки из текстовых блоков

    [0.4.1] — 2026-07-11

    Changed

    • Бортжурнал: лента записей с блоками (текст, фото, видео, AI) по образцу FlowNote
    • Теги сверху: ярлык регламента + произвольные теги для поиска
    • Редактируемые поля «Дата» и «Пробег» внизу записи; автоподстановка сегодня и max пробега
    • Верхняя панель: «Все записи», «Теги», «Архив»; долгое нажатие — меню действий
    • Архив (корзина): восстановление или окончательное удаление
    • Регламент: текущий пробег из всех записей бортжурнала; цветовая индикация (зелёный / оранжевый / красный)
    • При просрочке регламента — срочное уведомление без «осталось N дн.»
    • Бортжурнал: иконки навигации без подписей; автоподстановка пробега по дате из истории
    • Меню блоков: AI, Текст, Камера, Диктофон, Файлы (как FlowNote)

    [0.4.0] — 2026-07-11

    Added

    • Карточки автомобилей: миниатюра из фото машины, стеклянный стиль, долгое нажатие → удаление
    • Проверки: меню FAB «Сканирование OBD» / «Проверка по VIN» (каркас)
    • Регламент: пользовательские действия, экран детализации, AI-подбор интервалов, связь с бортжурналом
    • Бортжурнал: ярлыки регламентных действий (пробег + дата)
    • Данные привязаны к выбранному автомобилю (vehicleId в Room / scoped store)

    Changed

    • Регламент: вместо автогенерации шаблона — отслеживаемые действия с обратным отсчётом до следующего обслуживания

    [0.3.5] — 2026-07-10

    Changed

    • Убраны дублирующие заголовки вкладок («Входящие данные», «Проверки» и др.) — больше места под контент
    • Блок фото на вкладке «Входящие» растягивается по высоте экрана (~42%)

    [0.3.4] — 2026-07-10

    Changed

    • Полноэкранный градиентный фон (edge-to-edge): прозрачные системные панели, светлый текст на тёмном градиенте
    • Вкладка «Входящие данные»: компактный формат «Марка — Лада» в одну строку, без статуса и даты
    • Блок фото машины: увеличенный слайдер на весь блок (swipe / перелистывание), без подписей

    [0.3.3] — 2026-07-08

    Fixed

    • Исправлено падение при запуске камеры: фото теперь сохраняется в files/images через FileProvider
    • Исправлено исчезновение миниатюр после перезапуска: для gallery-URI сохраняются persistable permissions

    Changed

    • Иконка настроек AI заменена на простую шестеренку
    • Добавлен сине-фиолетовый градиентный фон в Android и Web

    [0.3.1] — 2026-07-07

    Added

    • Новая иконка приложения: стилизованное автомобильное колесо
    • Верхняя панель на основных экранах Android: кнопки «Все автомобили» и «Настройки AI»
    • Экран настроек AI (Bothub.chat): API Key, Base URL, модели, temperature, max tokens
    • Интеграция Bothub Vision API для кнопки Ai на Android и Web
    • Web: кнопки «Все авто» и «AI» в верхней панели, страница настроек AI

    Changed

    • Добавлено разрешение INTERNET для AI-запросов на Android

    [0.3.0] — 2026-07-07

    Added

    • Начальный flow на обеих платформах: Авторизация -> Карточки машин -> 4 вкладки
    • Разделение аккаунтов по логину/PIN в Android и Web
    • Экран выбора автомобиля и добавление карточек автомобилей в Android и Web
    • Переключение активного автомобиля и выход из аккаунта в web shell
    • Android SessionStore (SharedPreferences) и root-flow (AuthScreen, VehicleSelectionScreen)

    Changed

    • Web store расширен для scoped-данных по паре аккаунт + автомобиль

    [0.1.0] — 2026-07-06

    Added

    • Каркас Android-приложения OmniDrive (Kotlin, Jetpack Compose, Material 3)
    • 4 вкладки: Входящие данные, Проверки, Регламент, Бортжурнал
    • FAB [+] на каждой вкладке для добавления записей
    • Диалог добавления данных: шаблоны полей (VIN, фото, пробег…), текст + изображение, кнопка Ai
    • Диалог проверок: OBD-сканирование, проверка VIN, произвольная проверка
    • Регламент: генератор базового календаря ТО, фильтр по системам, индикация просрочки
    • Бортжурнал: автозаписи из других вкладок, ручные записи, сортировка по дате/пробегу
    • Room БД: incoming_data, checks, maintenance_tasks, logbook, vehicle_profile
    • Hilt DI, репозитории, ViewModels
    • Заглушка ImageRecognitionService для будущего AI-распознавания
    • Документация: README, ARCHITECTURE, AI_RULES

    Technical notes

    • minSdk 26, targetSdk 35, compileSdk 35
    • Разрешения: CAMERA, READ_MEDIA_IMAGES, BLUETOOTH_CONNECT (для будущего OBD)
    • FileProvider настроен для камеры

    Edit Message

    Attachments:

    AI Assistant

    Enter your instruction to edit the text: