# Конфигурация

Параметры робота задаются двумя способами, которые можно комбинировать:

1. Файл `params.json` в **текущем рабочем каталоге** программы.
2. Словарь, переданный в конструктор: `Robot({...})`.

Значения из словаря имеют приоритет над `params.json`. Удобная схема: общие параметры (адрес сервера, логирование) — в `params.json`, а тип устройства — в коде.

```python
robot = Robot({"type": "LED"})    # остальное — из params.json
```

## Параметры

| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| `name` | str | `"DefaultName"` | Имя устройства, отображается в интерфейсе оператора |
| `type` | str | `"DefaultType"` | Тип устройства. Определяет страницу управления в интерфейсе: `Robot`, `LED`, `Drone` |
| `server` | str | `"http://artex.arcon"` | Адрес сервера платформы (схема + хост, без порта) |
| `port` | int | `80` | Порт сервера |
| `telem_can` | bool | `false` | Признак «устройство передаёт телеметрию» — передаётся серверу в паспорте |
| `video_can` | bool | `false` | Признак «устройство передаёт видео» — передаётся серверу в паспорте |
| `max_send_freq` | float | `0.05` | **Период** (в секундах) между отправками телеметрии и видео. `0.05` — до 20 отправок в секунду |
| `max_main_freq` | float | `0.1` | **Период** (в секундах) паузы основного цикла. `0.1` — около 10 итераций в секунду |
| `logger_type` | str | `"console"` | Куда писать журнал: `console` — в стандартный вывод, `file` — в файлы `all.log` и `error.log` |
| `logger_level` | str | `"all"` | Уровень журнала: `all` — все сообщения, `skip_TODO` — все, кроме служебных сообщений `TODO` |
| `external` | dict | `{}` | Зарезервировано для внешних модулей (в версии 0.1.1 не используется) |

<p class="callout warning">Несмотря на слово <code>freq</code> в названии, параметры <code>max_send_freq</code> и <code>max_main_freq</code> задают период в секундах, а не частоту. Чтобы отправлять данные 10 раз в секунду, укажите <code>0.1</code>.</p>

## Паспорт и состояние устройства

При подключении SDK передаёт серверу **паспорт** (`s_meta`) — параметры `name`, `type`, `telem_can`, `video_can`. Сервер использует его для отображения устройства и выбора интерфейса управления.

**Состояние** (`d_meta`) меняется во время работы и возвращается серверу по запросу heartbeat:

| Поле | Значения | Смысл |
|---|---|---|
| `sid` | идентификатор или `null` | Идентификатор подключения |
| `ready` | `init` → `ok` | `ok` после сигнала готовности от сервера; до этого команды игнорируются |
| `telem_run` | bool | Запущен ли поток отправки телеметрии |
| `video_run` | bool | Запущен ли поток отправки видео |

## Выбор частот

| Сценарий | `max_main_freq` | `max_send_freq` |
|---|---|---|
| LED, простые датчики | 0.1 | 0.1 |
| Колёсный робот с камерой (FPV) | 0.03–0.05 | 0.033–0.05 |
| Слабый канал связи / мобильная сеть | 0.1 | 0.1–0.2 |

Реальная частота отправки не выше частоты основного цикла: данные отправляются, только если основной цикл успел обновить их в Vault. Размер одного кадра 640×480 в JPEG (качество 80) — около 30–60 КБ; при 20 кадрах/с это 5–10 Мбит/с. Для слабых каналов уменьшайте разрешение кадра перед отправкой.

## Примеры `params.json`

Колёсный робот:

```json
{
  "name": "tank-01",
  "type": "Robot",
  "server": "http://192.168.1.10",
  "port": 80,
  "telem_can": true,
  "video_can": true,
  "max_send_freq": 0.05,
  "max_main_freq": 0.05,
  "logger_type": "file",
  "logger_level": "skip_TODO"
}
```

Светодиодная лампа:

```json
{
  "name": "lamp-hall",
  "type": "LED",
  "server": "http://192.168.1.10",
  "telem_can": true,
  "logger_level": "skip_TODO"
}
```