API Overview¶
REST API контроллера AWDC. Все эндпоинты под префиксом /api/,
формат тела — JSON, аутентификация — HTTP Basic.
Формальная спецификация: ../openapi.yaml.
Группы¶
| Файл | Группа | Содержит |
|---|---|---|
| auth.md | Аутентификация | /api/auth/* |
| dosator.md | Дозаторы | /api/dosator/*, /api/statistics* |
| diagnostics.md | Диагностика | /api/diag/*, /api/status |
| network.md | Сеть | /api/sta/*, /api/ap/*, /api/net/* |
| integrations.md | Интеграции | /api/integration/{mail,telegram,maxbot}/* |
| system.md | Система | /api/system/*, /api/ota/* |
Аутентификация¶
Схема: HTTP Basic Auth. В каждом запросе передаётся заголовок:
Учётные записи (захардкожены, всего две):
| Username | Default password | Роль |
|---|---|---|
admin |
admin123 |
ADMIN |
duty |
duty123 |
DUTY |
Пароли хранятся в NVS namespace auth (см. ../nvs-reference.md)
и меняются через POST /api/auth/change_password.
Ролевая модель¶
- USER — не реальный логин, а порог «любой авторизованный».
Эндпоинты с требованием
Role::USERдоступны всем (admin и duty). - DUTY — оператор: чтение всего + управление дозаторами.
- ADMIN — конфигурация всего, OTA, backup/restore, change_password для любого пользователя.
Каждый эндпоинт ниже помечен минимальной требуемой ролью.
Пример запроса¶
curl -u admin:admin123 -X POST \
-H "Content-Type: application/json" \
-d '{"ch":0,"proportion":25}' \
http://awdc.local/api/dosator/config
Формат ответов¶
Успех¶
HTTP 200 OK с JSON-телом. Структура зависит от эндпоинта. Если
эндпоинт ничего не возвращает (action-only) — обычно:
Ошибки¶
Используются два формата (исторически):
Короткий:
Развёрнутый (action-эндпоинты):
Коды¶
| HTTP | Когда |
|---|---|
| 200 | Успех |
| 204 | Успех, тела нет (некоторые DELETE/POST без ответа) |
| 400 | Bad Request: invalid JSON, missing fields, out-of-range значения |
| 401 | Unauthorized: нет заголовка Authorization, или неверный пароль |
| 403 | Forbidden: авторизация прошла, но роль ниже требуемой |
| 404 | Endpoint не найден |
| 413 | Payload Too Large: JSON body больше MAX_JSON_BODY_SIZE |
| 500 | Внутренняя ошибка (см. лог) |
Заголовки¶
Content-Type: application/json— обязателен для POST с телом.Content-Type: application/json; charset=utf-8— в ответах.
Хост и порт¶
Web-сервер на порту 80. Адрес устройства:
- AP-режим:
http://192.168.4.1/(когда нет подключения к STA) - STA-режим: IP, выданный DHCP (или статический из
sta-config) - mDNS:
http://awdc.local/— если в сети есть резолвер (Bonjour на macOS/iOS/Windows; на Linux нуженavahi-daemon)
Текущий IP и режим — GET /api/status (без auth) или GET /api/net/status.
Конвенции запросов¶
- Каналы дозаторов: индексация
ch ∈ {0, 1, 2}(НЕ {1, 2, 3}). - Время: uptime в миллисекундах, runtime каналов в секундах, ISO-8601 для абсолютного времени (если NTP синхронизирован).
- Размеры: байты — целые, без префиксов.
- Пароли: в
passwordполе в plaintext. TLS не используется — передавать с осторожностью (только через локальную сеть). - Секреты в
GET /config: возвращаются как строка"***", если поле заполнено в NVS, или""если пусто. При сохранении присланный"***"означает «не менять».