Перейти к содержанию

Настройки

http://<ip-платы>/settings.html — admin-only. Шесть секций.

WiFi

Список Wi-Fi сетей с приоритетом — плата перебирает их по порядку. Если первая сеть недоступна — пробует вторую, и так далее. Если не подключилась ни к одной — поднимает свой AP.

Список сетей

Кнопки в строке: / (приоритет), ✏️ (редактировать), 🗑️ (удалить). Кнопка + Добавить.

Поля одной сети:

Поле Назначение
SSID Имя сети. Если поле пустое и self_ap.enabled=true — это AP-mode-only «сеть» (нужна только для loop'а).
Пароль Пароль WPA2. Пустой — открытая сеть. В UI скрыт за ***.
Retries Сколько раз пробовать WiFi.begin() (по умолчанию 3, после Refactor-8266 — 5).
Timeout (сек) Сколько ждать каждой попытке. Дефолт 8 сек.
Static IP Чекбокс. Если включён — раскрываются 4 поля:
├ IP IP платы в сети (192.168.1.50)
├ Gateway IP роутера (192.168.1.1)
├ Netmask Обычно 255.255.255.0
└ DNS Например 8.8.8.8 или 192.168.1.1

Маркер «оставить старый пароль»

При редактировании сети в поле пароля стоит ***. Если его не трогать — пароль не изменится. Чтобы сменить — введите новое значение. Чтобы превратить в открытую сеть — очистить поле.

Self-AP fallback

Если все настроенные сети недоступны — плата поднимет собственную AP.

Поле Назначение
enabled Включить fallback (рекомендуется)
ssid Имя AP. По умолчанию CtrlBoard-Setup
password Пароль AP (пустой = открытая)
channel Канал 1..13, дефолт 6

Параметры пробинга

После старта плата периодически проверяет, не появилась ли «лучшая» сеть (с большим приоритетом).

Поле Назначение
rescan_interval_sec Период проверки. Дефолт 300 сек.
probe_duration_sec Сколько времени даётся для попытки переключения.
probe_checks Сколько успешных проверок подряд нужно, чтобы остаться.

Submit перезагружает плату, если только в API-запросе не указано "reboot": false (через UI всегда reboot).

Устройство

Параметры самой платы.

Поле Назначение
UUID Read-only. Генерируется на первом запуске из MAC + random tail. Это идентификатор платы для облака и mesh.
Имя Человекочитаемое имя (для UI и облака).
Broadcast IP auto (вычислить из текущего IP + netmask) или явный 192.168.1.255. Используется для UDP broadcast в mesh-режиме broadcast.
Static IP Тот же блок что в Wi-Fi, но один на устройство (применяется для приоритетной сети).
Latitude Широта, дробное число. Для расчёта восхода/заката.
Longitude Долгота.

Координаты — это широта/долгота, не IP-геолокация

Например для Москвы: latitude=55.7558, longitude=37.6173. Можно подсмотреть в Google Maps (правая кнопка → координаты копируются в буфер).

Время

Поле Назначение
Текущая эпоха Read-only — сколько сейчас часов на плате.
Источник ntp (синхронизировано) / manual (поставлено вручную) / persisted (восстановлено из файла на старте).
Установить вручную Поле datetime-local для ввода даты-времени.
Кнопка «Из браузера» Подставит текущее время браузера в поле.
Кнопка «Применить» Сохранить введённое.

Время сохраняется в /config/time.json каждые ~60 секунд — после reboot восстанавливается с точностью до минуты. Если есть Wi-Fi и интернет — NTP подтянет точное.

NTP-серверы захардкожены: pool.ntp.org, time.google.com. Если они недоступны — time.synced=false, cron-триггеры не работают (UI рисует warning).

Глубокий сон

Для батарейных нод. Плата спит большую часть времени, периодически просыпается на короткое окно.

Поле Назначение
enabled Включить deep-sleep
wake_interval_sec Период сна в секундах
awake_window_sec Сколько секунд держаться бодрой после просыпания (для обработки heartbeat'а, выполнения задач)
three_reset_window_sec Если три ребута подряд за это окно — deep-sleep отключается до следующего uploadfs/factory-reset (escape)

ESP8266: нужна перемычка D0 ↔ RST

Без неё плата уснёт и не проснётся. Wake-сигнал идёт с GPIO 16 на RST. Это аппаратное требование, не баг прошивки.

Кнопка 😴 Уснуть сейчас — мгновенный сон до следующего wake-interval (для тестирования).

Авторизация

Поле Назначение
Требовать вход Toggle. Если выключен — UI работает без логина, любой запрос ходит от имени default_user_id (admin по умолчанию).

Только для домашней LAN

Выключайте только если плата сидит за защищённым Wi-Fi и недоступна снаружи (нет port-forwarding, нет VPN с широким доступом). В диалоге подтверждения будет ещё одно напоминание.

Бэкап конфигов

Снимок всех /config/*.json одним JSON-файлом для переноса между платами или восстановления после factory-reset. CB-133.

Per-platform доступность

Backup-фича включена не на всех платах из-за heap-ограничений ESP8266:

Платформа (env) Backup Примечание
ESP32 (esp32dev) 320 KB DRAM — фича работает без ограничений
ESP-01S (esp01s) Без UI это единственный способ переноса конфига
NodeMCU (esp8266) Отключена — -D BACKUP_DISABLED=1 (CB-141)

На NodeMCU кнопки в этой форме всё ещё отображаются (UI собирается общий), но клик «Скачать конфиг» / «Восстановить» вернёт 404. На NodeMCU настройки переносятся через CRUD API (GET /api/v1/devices, /tasks, и т.п.) — собрать вручную.

Почему отключено на NodeMCU: фича стоит ~2.7 KB DRAM (rodata + WebServer route allocations), при baseline free heap ~10 KB на NodeMCU это слишком впритык к crash-порогу 5 KB. На ESP-01S с NO_WEB_UI-сборкой большая часть .rodata уже исключена, остаточный cost ~2 KB — терпимо.

Скачать конфиг

Кнопка «📥 Скачать конфиг» → GET /api/v1/backup → файл ctrl-board-backup-<uuid8>-<date>.json сохраняется в браузере.

В backup попадают:

  • device_config (UUID, broadcast_ip, static_ip, geo)
  • settings (Wi-Fi networks, AP-настройки)
  • auth_settings (require_auth, default_user_id)
  • users (без password_hash)
  • cloud (без api_key)
  • devices, tasks (вся ваша автоматизация)
  • sensors_enabled, triggers_enabled, conditions_enabled, actions_enabled
  • sleep, time_state

НЕ попадают (по design):

  • secrets.jsontoken_secret/password_salt per-board, перенос бессмысленен.
  • password_hash в users — соль другая на новой плате, хэш не сработает.
  • api_key в cloud — security (backup-файл может попасть наружу).

Восстановить из файла

Кнопка «📤 Восстановить из файла…» → выбор файла → диалог подтверждения → POST /api/v1/backup (multipart) → плата применяет секции и перезагружается.

После восстановления:

  1. Логинadmin/1234. Старый password_hash в backup отсутствует, при boot'е срабатывает bootstrap.
  2. Cloud — нужно заново ввести api_key (был замаскирован при export). URL и mqtt_enabled сохраняются.
  3. Всё остальное — на месте.

Headless через API

На ESP-01S (без UI) ту же операцию делаешь напрямую через curl. См. API-рецепты → Бэкап.

Опасная зона

Кнопка «Полный сброс к заводским настройкам»POST /api/v1/factory-reset. После подтверждения:

  • Удаляет все /config/*.json (включая Wi-Fi, устройства, задачи, пользователей).
  • НЕ трогает /public/* (HTML/JS/CSS на FS останутся).
  • Восстанавливает bootstrap-users.json → admin/1234 на следующем загруге.
  • Перезагружает плату → она появится в AP-режиме.

Когда применять: перепродаёте плату, переезжаете в новую конфигурацию с нуля, тестируете onboarding-flow. Резервные копии не сохраняются — экспортируйте конфиг сами через API если хотите вернуть.