NVS Reference¶
Все ключи в NVS-разделе flash (nvs partition, 0x9000…0xE000 = 20 КБ).
Доступ через библиотеку Preferences (Arduino-обёртка над nvs_flash).
Источник истины — структура kSchema в src/nvs_backup.cpp,
которая используется для GET /api/system/backup и POST /api/system/restore.
Конвенции:
- Namespace = тематика модуля (
dosator,int_smtp,ap-configи т.д.). - Все секреты (пароли, токены) перечислены в
kSecrets[]и при backup'е шифруются AES-256-GCM ключом, производным от admin-пароля. - Дефолты применяются на чтение: если ключа нет — возвращается значение по умолчанию из таблиц ниже.
- Запись в NVS делается транзакционно
prefs.begin(ns, false)→put*→prefs.end(). Послеend()данные на flash.
auth — учётные записи¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
admin |
string | admin123 |
Пароль роли ADMIN (полный доступ) |
duty |
string | duty123 |
Пароль роли DUTY (оператор мойки) |
Секрет: оба пароля. Backup сохраняет их шифрованными. Источник: src/auth_manager.cpp.
ap-config — точка доступа WiFi¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
ssid |
string | <device_name>_Setup (derived) |
Имя сети AP |
ssid_expl |
bool | false |
Пользователь задал SSID явно (≠ derived from device_name) |
password |
string | 12345678 |
Пароль AP (8…64 символа) |
timeout |
ulong | 600000 (10 мин) |
Время автоотключения AP, мс |
ip |
string | 192.168.4.1 |
IP устройства в AP |
gateway |
string | 192.168.4.1 |
Gateway AP-подсети |
subnet |
string | 255.255.255.0 |
Маска подсети |
channel |
uchar | 1 |
WiFi-канал (1…13), auto-sync на канал STA при connect |
hidden |
bool | false |
Скрытый SSID |
max_clients |
uchar | (legacy, игнор.) | Hardcoded в 1 в ap_manager.cpp |
Секрет: password.
Флаг ssid_expl: при смене device_name AP SSID автоматически
обновляется на <новое-имя>_Setup, ЕСЛИ ssid_expl == false. Если
пользователь хотя бы раз задал кастомный SSID через POST /api/ap/config
— флаг становится true и derive перестаёт работать (имя зафиксировано).
Сброс — factory-reset или явно отправить ssid равный
<device_name>_Setup.
channel auto-sync: ESP32 единым радио вынужденно тащит AP на канал
STA. При успешном STA-подключении ap-config:channel обновляется на
канал текущего link — на следующем boot AP стартует сразу на нужном
канале (иначе клиенты AP отлетают, когда STA link-up утаскивает радио).
Источник: src/ap_manager.cpp, defaults в include/config.h.
sta-config — клиент WiFi (станция)¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
ssid |
string | "" |
SSID домашней сети |
password |
string | "" |
Пароль WPA |
useStaticIP |
bool | false |
DHCP (false) или статика (true) |
staticIP |
string | 0.0.0.0 |
Статический IP |
gateway |
string | 0.0.0.0 |
Шлюз |
subnet |
string | 255.255.255.0 |
Маска |
dns1 |
string | 0.0.0.0 |
Первичный DNS |
dns2 |
string | 0.0.0.0 |
Вторичный DNS |
Секрет: password.
Источник: src/sta_manager.cpp.
net-mgr — менеджер сети (общий)¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
idle_ms |
ulong | — | Таймаут idle-состояния network manager, мс |
Источник: src/net_manager.cpp.
wifi — настройки радио¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
tx_power |
uchar | 44 |
TX-мощность в quarter-dBm (44 = 11 dBm), диапазон 8…78 |
Применяется в wifiInit() после WiFi.mode(WIFI_AP_STA). Меняется через
Web UI → Сеть → STA → Радио, или POST /api/net/radio с tx_power_q.
Источник: src/wifi_manager.cpp.
AP-канал хранится в
ap-config:channel(см. выше). При успешном подключении STA к BS контроллер автоматически обновляет этот ключ на канал STA — так на следующей загрузке AP стартует сразу на том же канале (ESP32 единым радио вынужденно тащит AP на канал STA).
ntp-config — синхронизация времени¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
server |
string | pool.ntp.org |
NTP-сервер |
tz_offset |
int | 10800 (UTC+3) |
Смещение в секундах от UTC |
Источник: src/ntp_manager.cpp.
dosator — каналы дозирования (3 канала)¶
Для каждого канала ch ∈ {0, 1, 2} четыре ключа с суффиксом.
| Ключ | Тип | Default | Описание |
|---|---|---|---|
prop_<ch> |
uchar | 0 |
Пропорция ШИМ (0…99) |
window_ms_<ch> |
ushort | 2000 |
Длина окна дозирования, мс (100…60000) |
mode_<ch> |
uchar | 0 |
Режим: 0 пропорциональный, 1 импульсный |
notify_thr_<ch> |
uint | 720000 |
Интервал сервиса, секунд (default 200 ч) |
notify_sent_<ch> |
uint | 0 |
1 = уведомление о сервисе уже отправлено |
notify_en_<ch> |
bool | true |
Слать ли уведомление о сервисе |
Подробности алгоритма: см. dosing-logic.md. Источник: src/dosator.cpp.
hmi — индикатор и кнопки¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
active_ch |
uchar | 0 |
Активный канал на дисплее при старте (0…2) |
hmi_bright |
uchar | 7 |
Яркость дисплея TM1638 (1…7) |
Источник: src/hmi.cpp.
int_telegram — интеграция Telegram¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
token |
string | "" |
Bot API token (12345:AAFr...) |
chat_id |
string | "" |
Целевой chat_id для уведомлений (числовая ID) |
chat_bot |
string | "" |
Имя бота (для логов) |
interval_s |
ulong | 30 |
Период polling getUpdates, сек |
enabled |
bool | false |
Активна ли интеграция |
allowed_uid |
string | "" |
Whitelist user_id для команд (через запятую) |
cursor |
long | 0 |
offset для long-polling getUpdates |
sec_token |
string | "" |
Security-токен для команд (валидация в /start) |
Секреты: token, sec_token.
Источник: src/integration/bot_manager.cpp.
int_maxbot — интеграция MaxBot¶
Те же ключи, что у int_telegram, плюс:
| Ключ | Тип | Default | Описание |
|---|---|---|---|
bd_senders |
string | "" |
JSON-кэш [{"u":"<uid>","n":"<имя>"}], до 8 записей |
bd_senders заполняется в recordBoardSender() когда пользователь
пишет в board-чат; используется UI карточкой MaxBot для подстановки
имён в поле «Разрешены». Persist в NVS добавлен чтобы UI не показывал
голые user_id после ребута.
Источник: src/integration/maxbot/, bot_manager.cpp.
int_smtp — исходящая почта¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
host |
string | "" |
SMTP-сервер (smtp.gmail.com) |
port |
ushort | 465 |
Порт (465 = SMTPS, 587 = STARTTLS) |
username |
string | "" |
Логин SMTP |
password |
string | "" |
Пароль (app password) |
from |
string | "" |
Адрес отправителя |
to |
string | "" |
Адрес получателя уведомлений |
Секрет: password.
Источник: src/integration/mail/smtp_manager.cpp.
int_imap — входящая почта (команды по email)¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
host |
string | "" |
IMAP-сервер |
port |
ushort | 993 |
Порт IMAPS |
username |
string | "" |
Логин |
password |
string | "" |
Пароль |
folder |
string | AWDC |
Папка для команд |
interval_s |
ulong | 60 |
Период polling, сек |
token |
string | "" |
Security-token для команд |
allowed_from |
string | "" |
Whitelist email отправителей (через запятую) |
Секреты: password, token.
Источник: src/integration/mail/imap_manager.cpp.
ota — состояние OTA-обновления¶
Используется OtaSession для персистентного состояния между перезагрузками.
| Ключ | Тип | Описание |
|---|---|---|
ota_pending |
bool | Флаг «ожидается reboot для применения OTA» |
st |
uchar | Состояние сессии (enum OtaState) |
l_err |
uchar | Последняя ошибка (enum OtaError) |
l_err_msg |
string | Текст последней ошибки |
u_bytes |
uint | Загружено байт |
t_bytes |
uint | Всего байт в прошивке |
b_att |
uchar | Счётчик попыток boot после OTA (для rollback) |
p_ver |
string | Pending version (которую пытаемся загрузить) |
lg_ver |
string | Last-good version (для отката) |
lg_part |
uchar | Last-good partition (app0/app1) |
c_sha |
string | Вычисленный SHA-256 прошивки |
e_sha |
string | Ожидаемый SHA-256 (из манифеста) |
mf |
string | JSON-манифест прошивки |
host_url |
string | URL сервера обновлений (https-хост с папкой /firmware/) |
channel |
string | Канал обновлений (stable / dev), default = BUILD_CHANNEL |
host_url и channel принадлежат OtaPuller (pull-mode OTA с
https-хоста). При первом старте channel инициализируется значением
скомпилированного BUILD_CHANNEL — стабильная прошивка по умолчанию
проверяет stable-канал, dev-прошивка — dev. Меняется через
POST /api/ota/channel.
Источник: src/ota/OtaSession.cpp, src/ota/OtaManager.cpp, src/ota/OtaPuller.cpp.
ota-test — проверка целостности NVS после OTA¶
| Ключ | Тип | Описание |
|---|---|---|
key |
uint | Tag-значение для post-boot validation (kTestValue) |
Источник: src/ota/BootValidation.cpp.
eeprom_mig — версия миграции EEPROM¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
version |
uchar | 0 |
Версия схемы EEPROM (для миграций ADR-007) |
Источник: src/ota/EepromMigration.cpp.
См. также memory-map.md для физической раскладки EEPROM (M24C16).
ui — настройки web-интерфейса и identity¶
| Ключ | Тип | Default | Описание |
|---|---|---|---|
idle_min |
uchar | 10 |
Таймаут idle-разлогина, минут (0 — отключено) |
dev_name |
string | "" (→ default) |
device_name — master alias для mDNS и AP SSID |
dev_name — master alias устройства. Валидация:
^[a-z0-9-]{2,16}$, не начинается/кончается дефисом, не в reserved-list
(awdc/admin/root/device/setup/localhost). Default при
пустом значении — awdc-<последние 4 hex от MAC> (например,
awdc-3f2c).
Производные значения:
- mDNS hostname →
<dev_name>.local - AP SSID →
<dev_name>_Setup(еслиap-config:ssid_expl == false)
API:
GET /api/system/identity— возвращает текущее имя + derived namesPOST /api/ui/dev_name— сменить, требует ADMIN. При смене live-restart MDNS и обновление AP SSID (если ssid_expl=false). UI предупреждает о необходимости переподключения к новому SSID.
Источник: src/device_identity.cpp, src/API/System/identity.cpp, src/API/System/ui_config.cpp.
Backup / restore¶
GET /api/system/backup?password=<admin> — возвращает JSON со всеми полями
plaintext (по схеме выше) + блок _secrets с AES-GCM-шифрованными секретами.
POST /api/system/restore с тем же admin-паролем восстанавливает namespaces.
Подробности: admin/backup-restore.md.
Factory reset¶
POST /api/system/factory-reset стирает user-config NVS и перезагружает
устройство «как из коробки». Не трогает заводские настройки и
EEPROM-наработку.
Wiped (стирается полностью)¶
| Namespace | Что внутри |
|---|---|
sta-config |
WiFi STA credentials, static IP |
int_smtp |
SMTP-сервер, отправитель |
int_imap |
IMAP-сервер, команды по email |
int_telegram |
Telegram bot token, chat |
int_maxbot |
MaxBot token, разрешённые UID |
ntp-config |
NTP-сервер, timezone |
ota |
host_url, channel, OTA-state |
ota-test |
Boot-validation flag |
net-mgr |
idle timeout, sta_ondemand |
wifi |
TX power |
ui |
idle_min, device_name (!) |
dosator |
Пропорции, window, mode, notify-thresholds |
selftest_v |
Self-test версия (форсирует re-run) |
Preserved (НЕ трогается)¶
| Namespace | Почему |
|---|---|
auth |
factory creds сохраняются — иначе после reset нет доступа |
ap-config |
AP должен остаться доступен сразу после reset |
eeprom_mig |
Версия миграции EEPROM привязана к схеме чипа |
eeprom_* |
Наработка дозаторов (отдельная I²C-микросхема) |
После reset устройство загружается с:
admin/admin123+duty/duty123(дефолты)- AP SSID без изменений (если был кастомный — остаётся)
device_nameсбрасывается → MDNS вернётся кawdc-<MAC4>.local- STA не настроен — устройство в AP-only режиме
- Все интеграции выключены
Подробности: admin/factory-reset.md.