Files
LoraMapTester/server/README.md
T

98 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LoraTester Server
Единый HTTP-сервер для телеметрии LoRa, GPS устройств, истории статистики, треков и чата.
## Быстрый старт
```bash
cd server
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
python flask_app.py
```
Откройте http://localhost:7634
## Переменные окружения
| Переменная | По умолчанию |
|------------|----------------|
| `LORATESTER_HOST` | `0.0.0.0` |
| `LORATESTER_PORT` | `7634` |
| `LORATESTER_DB` | `./loratester.db` |
| `LORATESTER_TELEMETRY_LIMIT` | `5000` (записей истории на устройство) |
| `LORATESTER_TRACK_POINTS_LIMIT` | `10000` (точек на один трек) |
## Деплой (grigowashere.ru:7634)
```bash
cd /srv/storage/disk2/services/LoraTester
pip install -r requirements.txt
# один путь БД для всех воркеров:
export LORATESTER_DB=/srv/storage/disk2/services/LoraTester/loratester.db
uvicorn fastapi_app:app --host 0.0.0.0 --port 7634
```
После обновления кода **обязательно перезапустите** сервис. При старте выполняются миграции SQLite (`devices`, `telemetry.meta`, таблицы `tracks`).
Проверка:
```bash
curl http://127.0.0.1:7634/api/health
```
Ожидается `"db_ok": true`, `"schema_version": 3`.
Если БД создана вручную и схема битая (`no such table: devices` / `no such column: t.meta`):
1. Остановить сервис
2. `cp loratester.db loratester.db.bak`
3. Удалить `loratester.db` (или оставить бэкап и дать миграциям дописать колонки после рестарта с новым кодом)
4. Запустить снова — `init_db()` создаст полную схему
## API
### Телеметрия (только Android, заголовок `X-Lora-Client: android`)
- `POST /api/telemetry``{device_id, lat?, lon?, rssi?, meta?, fields?, role?, ts?}`
- `GET /api/devices` — последнее состояние устройств
- `GET /api/telemetry?device_id=&limit=&since=&until=&role=` — история (без `raw_frame`)
- `GET /api/stats/history?device_id=` — то же, alias
### Треки (запись с Android)
- `POST /api/tracks/start``{device_id}``{track_id}`
- `POST /api/tracks/{id}/points``{points: [{ts, lat, lon, altitude_gps?, rssi?, role?, meta?}]}`
- `POST /api/tracks/{id}/finish`
- `GET /api/tracks?device_id=`
- `GET /api/tracks/{id}` — метаданные + точки (высота terrain через Open-Meteo)
### Прочее
- `POST /api/chat``{device_id, text}`
- `GET /api/chat?since=0`
- `GET /api/health``{ok, db_ok, schema_version, database_path}`
## FastAPI (прод)
```bash
uvicorn fastapi_app:app --host 0.0.0.0 --port 7634
```
Flask (`flask_app.py`) — тот же API для локальной разработки.
## Тесты
```bash
cd server
pip install httpx pytest
python -m pytest tests/ -v
```
## Android
URL: `http://grigowashere.ru:7634`. На карте: **Начать/Остановить трекинг пути** — точки с GPS, статистикой приёма и высотой (Open-Meteo на сервере). Вкладка **Статистика** — история с сервера.
Telnet: `127.0.0.1:2727` — мост COM→telnet на устройстве.