Switch control and schedules to JSON payloads

This commit is contained in:
Artem Kokos
2026-05-16 10:29:54 +07:00
parent 13fba2fa44
commit 15529961d6
8 changed files with 1171 additions and 748 deletions

View File

@@ -87,7 +87,7 @@ IGNIS_SYNC_DATABASE_URL=sqlite:///./ignis.db
- `GET /stats/log`
- `GET /auth/me`
Текущий контракт для `control` и `schedules` использует query-параметры.
`control` и `schedules` принимают JSON body.
Поддерживаемые параметры команд:
@@ -100,15 +100,28 @@ IGNIS_SYNC_DATABASE_URL=sqlite:///./ignis.db
Примеры:
```bash
curl -X POST 'http://localhost:8000/control/device/dev-1?temp=4200' \
-H 'X-API-Key: change-me'
curl -X POST 'http://localhost:8000/control/device/dev-1' \
-H 'X-API-Key: change-me' \
-H 'Content-Type: application/json' \
-d '{"temp": 4200}'
```
```bash
curl -X POST 'http://localhost:8000/schedules/once?target_id=bedroom&hours_from_now=2&is_group=true&temp=3200' \
-H 'X-API-Key: change-me'
curl -X POST 'http://localhost:8000/schedules/once' \
-H 'X-API-Key: change-me' \
-H 'Content-Type: application/json' \
-d '{"target_id":"bedroom","hours_from_now":2,"is_group":true,"temp":3200}'
```
Валидация:
- `brightness`: `10..100`
- `temp`: `2200..6500`
- `r/g/b`: `0..255`
- `scene`, `temp` и `rgb` взаимоисключаемы
- `r`, `g`, `b` нужно передавать только полной тройкой
- для `schedules/once` нужно передать ровно одно из `run_at` или `hours_from_now`
## API keys
- список ключей возвращает публичный `key` / `key_id`
@@ -163,5 +176,4 @@ timeout 120s .venv/bin/python -m unittest discover -s tests -v
- discovery всё ещё основан на переборе IP по подсетям
- UI остаётся монолитным файлом
- `control` и `schedules` ещё не переведены на JSON body
- stats пока простые и не заменяют нормальную аналитику