# DEFENDEX 2.0

**Платформа мониторинга охранных сигнализаций**

Defendex — профессиональная система для охранных компаний и объектов. Принимает тревожные события от физических приборов через GSM/TCP, хранит историю, рассылает уведомления в Telegram и предоставляет мобильное приложение для управления охраной.

---

## Возможности

- Приём событий от охранных приборов в реальном времени (протокол ContactID)
- Поддержка панелей: **DSC, Paradox, CADDX, Esprit, EVO**
- Постановка и снятие с охраны из мобильного приложения и Telegram
- Telegram-бот с мгновенными уведомлениями о тревогах
- Мобильное приложение Flutter (Android / iOS)
- Веб-интерфейс для операторов (тёмная тема)
- Панель администратора для управления объектами, зонами, пользователями
- Видеокамеры: RTSP/HLS потоки и снимки по тревоге
- Автоматический бэкап базы данных каждые 24 часа

---

## Быстрый старт

### Требования
- Docker + Docker Compose
- Порты: 8000, 8010, 8002, 8080, 8443

### Запуск

```bash
# 1. Скопировать конфиг
cp .env.example .env

# 2. Заполнить .env (токен бота, пароль БД, секретный ключ)
nano .env

# 3. Запустить
docker compose up -d

# 4. Проверить статус
docker compose ps
```

### Восстановление базы данных из бэкапа

```bash
docker exec -i alarm_postgres psql -U postgres alarm_system < alarm_db_backup.sql
```

---

## Доступ к интерфейсам

| Интерфейс | Адрес | Описание |
|-----------|-------|----------|
| Мобильный веб | `http://IP:8010` | Для операторов и клиентов |
| HTTPS (nginx) | `https://IP:8443` | Защищённый доступ |
| Админ панель | `http://IP:8002` | Управление объектами |
| API документация | `http://IP:8000/docs` | Swagger UI |
| pgAdmin | `http://IP:8080` | Управление БД |

---

## Мобильное приложение (Flutter)

### Настройка сервера в приложении

При первом запуске нажмите **«Настройки сервера»** и укажите:
- **IP**: адрес вашего сервера
- **Порт**: `8010`

### Сборка APK

```bash
flutter pub get
flutter build apk --release --split-per-abi
```

Файлы: `build/app/outputs/flutter-apk/`

### Возможности приложения

- Вкладка **КОНТРОЛЬ** — последние события по объектам
- Вкладка **ОБЪЕКТЫ** — список объектов, ARM/DISARM
- Вкладка **ПЕРСОНАЛ** — управление доступом
- Обновление событий каждые 3 сек в реальном времени

---

## Переменные окружения (`.env`)

```env
# База данных
DB_USER=postgres
DB_PASSWORD=your_password
DB_NAME=alarm_system
POSTGRES_EXTERNAL_PORT=5234

# JWT авторизация
SECRET_KEY=your-random-secret-key-change-this
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_HOURS=24

# Telegram бот
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id

# Внутренние адреса
CORE_API_URL=http://core:8000
DATABASE_URL=postgresql://postgres:your_password@postgres:5432/alarm_system
```

> ⚠️ Обязательно смените `SECRET_KEY` и `DB_PASSWORD` перед деплоем в продакшн!

---

## Структура сервисов

```
Охранный прибор (GSM)
    └─► tlf-client (TCP)
            │  POST /api/events
            ▼
        core :8000  ←──────────────── мобильное приложение / Telegram бот
            │
     ┌──────┼──────────┐
     ▼      ▼          ▼
 postgres  alarm_bot  mobile :8010
           (Telegram)  admin :8002
```

| Сервис | Порт | Назначение |
|--------|------|------------|
| `core` | 8000 | Центральный API, бизнес-логика |
| `mobile` | 8010 | Мобильный веб-интерфейс + API |
| `admin` | 8002 | Панель администратора (Streamlit) |
| `alarm_bot` | — | Telegram-бот |
| `tlf-client` | 5000 | TLF TCP-клиент (объект 333) |
| `tlf-client-valdis` | — | TLF TCP-клиент Valdis |
| `postgres` | 5234 | PostgreSQL 15 |
| `nginx` | 8081/8443 | Reverse proxy, SSL |
| `mediamtx` | 8554/8888 | RTSP/HLS видеопотоки |
| `alarm_backup` | — | Автобэкап БД |

---

## API

### Приём события от прибора

```
POST /api/events
{
  "device_id": "IMEI",
  "message": "E130 01 001",
  "zone": 1
}
```

### Постановка / снятие с охраны

```
GET /api/command?c=1&device_id=IMEI&user_id=1
```
`c=1` — поставить на охрану, `c=2` — снять с охраны

### Авторизация (мобильное API)

```
POST /api/login
{"u": "admin", "p": "password"}

→ {"ok": true, "id": 1, "token": "eyJ..."}
```

---

## Управление

```bash
# Запустить все сервисы
docker compose up -d

# Остановить
docker compose down

# Логи сервиса
docker compose logs -f core

# Перезапустить сервис (без пересборки)
docker compose restart mobile

# Пересборка после изменения зависимостей
docker compose build mobile
```

---

## База данных

| Таблица | Описание |
|---------|----------|
| `mtn` | Охранные приборы (IMEI, тип панели, статус охраны) |
| `events` | Архив всех событий с временными метками |
| `hz` | Названия зон/шлейфов по каждому объекту |
| `users` | Пользователи системы |
| `user_devices` | Привязка пользователей к объектам |
| `partition_status` | Текущий статус разделов (ARM/DISARM) |

---

## Резервное копирование

Автоматический бэкап запускается каждые 24 часа, хранит последние 7 копий.

```bash
# Ручной бэкап
docker exec alarm_postgres pg_dump -U postgres alarm_system > backup.sql

# Восстановление
docker exec -i alarm_postgres psql -U postgres alarm_system < backup.sql
```

---

**Defendex 2.0** | Версия: May 2026 | [cortex.eu](https://cortex.eu)
