|
|
# DroneDetector v2
|
|
|
|
|
|
Отдельный проектный контур (без миграции legacy), в котором:
|
|
|
- SDR-сканеры работают **на хосте** под `systemd`;
|
|
|
- `server_to_master` и `NN_server` работают в **Docker Compose**;
|
|
|
- весь runtime-конфиг хранится в **одном корневом `.env`**.
|
|
|
|
|
|
## 1. Быстрый старт
|
|
|
|
|
|
### Prerequisites
|
|
|
- Ubuntu/Debian (apt)
|
|
|
- NVIDIA GPU + установленный драйвер (`nvidia-smi` должен работать)
|
|
|
- Интернет для установки пакетов и сборки Docker-образов
|
|
|
- HackRF + GNU Radio стек (будет установлен через `install_all.sh`)
|
|
|
|
|
|
### Установка и запуск
|
|
|
```bash
|
|
|
cd /home/sibscience-4/from_ssh/DroneDetector
|
|
|
chmod +x install_all.sh
|
|
|
./install_all.sh
|
|
|
```
|
|
|
|
|
|
`install_all.sh`:
|
|
|
1. выполняет preflight;
|
|
|
2. ставит host non-python зависимости SDR;
|
|
|
3. настраивает Docker + NVIDIA runtime;
|
|
|
4. поднимает compose сервисы;
|
|
|
5. устанавливает/перезапускает `systemd` unit'ы;
|
|
|
6. проверяет статус, при ошибке печатает логи.
|
|
|
|
|
|
## 2. Матрица сервисов
|
|
|
|
|
|
### Host / systemd (SDR)
|
|
|
- `dronedetector-sdr-433.service` -> `src/main_433.py`
|
|
|
- `dronedetector-sdr-750.service` -> `src/main_750.py`
|
|
|
- `dronedetector-sdr-868.service` -> `src/main_868.py`
|
|
|
- `dronedetector-sdr-3300.service` -> `src/main_3300.py`
|
|
|
- `dronedetector-sdr-4500.service` -> `src/main_4500.py`
|
|
|
- `dronedetector-sdr-5200.service` -> `src/main_5200.py`
|
|
|
- `dronedetector-sdr-5800.service` -> `src/main_5800.py`
|
|
|
- `dronedetector-sdr-915.service` -> `orange_scripts/main_915.py`
|
|
|
- `dronedetector-sdr-1200.service` -> `orange_scripts/main_1200.py`
|
|
|
- `dronedetector-sdr-2400.service` -> `orange_scripts/main_2400.py`
|
|
|
|
|
|
### Docker Compose
|
|
|
- `dronedetector-server-to-master` -> `src/server_to_master.py`
|
|
|
- `dronedetector-nn-server` -> `NN_server/server.py`
|
|
|
|
|
|
Compose unit:
|
|
|
- `dronedetector-compose.service`
|
|
|
|
|
|
## 3. Конфигурация
|
|
|
|
|
|
Единственный источник runtime-конфига: `./.env`.
|
|
|
|
|
|
Все entrypoint'ы загружают root `.env` через `common/runtime.py` и валидируют обязательные переменные. При ошибке сервис падает сразу с понятным сообщением.
|
|
|
|
|
|
## 4. API (без изменения контрактов)
|
|
|
|
|
|
- NN_server: `POST /receive_data`
|
|
|
- server_to_master: `POST /process_data`
|
|
|
|
|
|
Форматы payload/ответов сохранены в текущей логике сервисов.
|
|
|
|
|
|
## 5. Диагностика
|
|
|
|
|
|
### systemd
|
|
|
```bash
|
|
|
systemctl status dronedetector-sdr-*.service
|
|
|
journalctl -u dronedetector-sdr-868.service -n 200 --no-pager
|
|
|
systemctl status dronedetector-compose.service
|
|
|
journalctl -u dronedetector-compose.service -n 200 --no-pager
|
|
|
```
|
|
|
|
|
|
### docker compose
|
|
|
```bash
|
|
|
docker compose -f deploy/docker/docker-compose.yml ps
|
|
|
docker compose -f deploy/docker/docker-compose.yml logs dronedetector-server-to-master
|
|
|
docker compose -f deploy/docker/docker-compose.yml logs dronedetector-nn-server
|
|
|
```
|
|
|
|
|
|
## 6. Host non-python dependencies
|
|
|
|
|
|
Устанавливаются `install_all.sh`:
|
|
|
- GNU Radio
|
|
|
- gr-osmosdr
|
|
|
- libhackrf/hackrf-tools (`hackrf` package)
|
|
|
- libusb
|
|
|
- udev-related runtime via distro packages
|
|
|
|
|
|
SDR precheck перед каждым unit запуском:
|
|
|
- наличие `hackrf_info`
|
|
|
- наличие `gnuradio-config-info`
|
|
|
- импорт `osmosdr`
|
|
|
- детект устройства HackRF
|
|
|
|
|
|
## 7. install_all.sh: параметры и поведение
|
|
|
|
|
|
Скрипт idempotent: повторный запуск допустим.
|
|
|
|
|
|
Что делает:
|
|
|
- preflight (OS, диск, `.env`, GPU)
|
|
|
- host deps
|
|
|
- `.venv-sdr` c `--system-site-packages`
|
|
|
- Docker Engine (если отсутствует)
|
|
|
- NVIDIA Container Toolkit
|
|
|
- `docker compose up -d --build`
|
|
|
- установка unit'ов в `/etc/systemd/system`
|
|
|
- verify + авто-логи при ошибке
|
|
|
|
|
|
## 8. Типовые ошибки `.env`
|
|
|
|
|
|
Примеры fail-fast сообщений:
|
|
|
- `[src/server_to_master.py] invalid .env configuration: ...`
|
|
|
- `[NN_server/server.py] no NN_* model entries configured`
|
|
|
- `[orange_scripts/compose_send_data_915.py] invalid .env configuration: ...`
|
|
|
|
|
|
Частые причины:
|
|
|
- пустое обязательное поле (`SERVER_PORT`, `lochost`, `hack_868` и т.д.)
|
|
|
- неверный тип (`SERVER_PORT=abc`)
|
|
|
- неправильный serial HackRF (не найден среди `lsusb -v -d 1d50:6089 | grep iSerial`)
|
|
|
|
|
|
## 9. Ручная приемка
|
|
|
|
|
|
1. `./install_all.sh` выполняется до конца.
|
|
|
2. `docker compose -f deploy/docker/docker-compose.yml up -d` поднимает оба контейнера.
|
|
|
3. Все `dronedetector-sdr-*` имеют `active (running)`.
|
|
|
4. Тестовый POST в `NN_server /receive_data` доходит до `server_to_master /process_data`.
|
|
|
5. Контур работает минимум 1 минуту без падений.
|
|
|
|
|
|
|
|
|
## 10. Ручной запуск сервисов (без пересборки)
|
|
|
|
|
|
### Docker-серверы
|
|
|
Запуск без пересборки:
|
|
|
```bash
|
|
|
docker compose -f deploy/docker/docker-compose.yml up -d
|
|
|
```
|
|
|
|
|
|
Пересборка только при изменении кода/зависимостей контейнеров:
|
|
|
```bash
|
|
|
docker compose -f deploy/docker/docker-compose.yml up -d --build
|
|
|
```
|
|
|
|
|
|
Остановка Docker-серверов:
|
|
|
```bash
|
|
|
docker compose -f deploy/docker/docker-compose.yml down
|
|
|
```
|
|
|
|
|
|
### Все SDR-сервисы (systemd)
|
|
|
Запуск всех SDR unitов:
|
|
|
```bash
|
|
|
sudo systemctl start dronedetector-sdr-433.service
|
|
|
sudo systemctl start dronedetector-sdr-750.service
|
|
|
sudo systemctl start dronedetector-sdr-868.service
|
|
|
sudo systemctl start dronedetector-sdr-3300.service
|
|
|
sudo systemctl start dronedetector-sdr-4500.service
|
|
|
sudo systemctl start dronedetector-sdr-5200.service
|
|
|
sudo systemctl start dronedetector-sdr-5800.service
|
|
|
sudo systemctl start dronedetector-sdr-915.service
|
|
|
sudo systemctl start dronedetector-sdr-1200.service
|
|
|
sudo systemctl start dronedetector-sdr-2400.service
|
|
|
```
|
|
|
|
|
|
Альтернатива одной командой:
|
|
|
```bash
|
|
|
for u in dronedetector-sdr-{433,750,868,3300,4500,5200,5800,915,1200,2400}.service; do
|
|
|
sudo systemctl start "$u"
|
|
|
done
|
|
|
```
|
|
|
|
|
|
Проверка статуса всех SDR unitов:
|
|
|
```bash
|
|
|
sudo systemctl status dronedetector-sdr-*.service --no-pager
|
|
|
```
|
|
|
|
|
|
### Полный ручной старт всего контура
|
|
|
```bash
|
|
|
docker compose -f deploy/docker/docker-compose.yml up -d
|
|
|
for u in dronedetector-sdr-{433,750,868,3300,4500,5200,5800,915,1200,2400}.service; do
|
|
|
sudo systemctl start "$u"
|
|
|
done
|
|
|
```
|