You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DroneDetector/README.md

210 lines
7.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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)
```bash
sudo systemctl status dronedetector-sdr-433.service
sudo systemctl status dronedetector-sdr-750.service
sudo systemctl status dronedetector-sdr-868.service
sudo systemctl status dronedetector-sdr-3300.service
sudo systemctl status dronedetector-sdr-4500.service
sudo systemctl status dronedetector-sdr-5200.service
sudo systemctl status dronedetector-sdr-5800.service
sudo systemctl status dronedetector-sdr-915.service
sudo systemctl status dronedetector-sdr-1200.service
sudo systemctl status dronedetector-sdr-2400.service
```
```bash
sudo systemctl stop dronedetector-sdr-433.service
sudo systemctl stop dronedetector-sdr-750.service
sudo systemctl stop dronedetector-sdr-3300.service
sudo systemctl stop dronedetector-sdr-4500.service
sudo systemctl stop dronedetector-sdr-5200.service
sudo systemctl stop dronedetector-sdr-5800.service
sudo systemctl stop dronedetector-sdr-1200.service
sudo systemctl stop dronedetector-sdr-2400.service
sudo systemctl stop dronedetector-sdr-1500.service
sudo systemctl stop dronedetector-sdr-868.service
sudo systemctl stop dronedetector-sdr-868-915.service
```
Проверка статуса всех SDR unitов:
```bash
sudo systemctl status dronedetector-sdr-*.service --no-pager
```
### Просмотр логов SDR
``` bash
# 50 последних
sudo journalctl -u dronedetector-sdr-5800.service -n 50 --no-pager
# в реальном времени
sudo journalctl -u dronedetector-sdr-5800.service -f
# c последней перезагрузки сервиса
since="$(systemctl show -p ActiveEnterTimestamp --value dronedetector-sdr-5800.service)"
sudo journalctl -u dronedetector-sdr-5800.service --since "$since" --no-pager
```
### Просмотр логов от server-to-master
``` bash
docker compose -f deploy/docker/docker-compose.yml logs --timestamps dronedetector-server-to-master | tail -n 50
```
### Прошивка хаков
``` bash
sudo hackrf_spiflash -w hackrf_one_usb.bin
```