Files
ponics-protocol/REST_API.md
T
progl 6655dd3d7a init: спецификация протокола WegaBox ↔ ponics.online
MQTT топики, REST API, поведение устройства, маппинг датчиков.
Mermaid диаграммы: flow подключения, обработка сообщений, FSM устройства.
2026-05-05 11:42:57 +03:00

157 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# REST API
Base URL: `https://ponics.online/api/box/`
Аутентификация: сессия Django (cookie) или токен.
---
## Эндпоинты
### GET `/api/box/`
Список боксов текущего пользователя.
**Response:**
```json
[
{
"id": 23,
"name": "Бокс №1",
"token": "550e8400-e29b-41d4-a716-446655440000",
"online": true,
"last_seen": "2026-05-03T08:00:00Z"
}
]
```
---
### GET `/api/box/{id}/`
Детали бокса с конфигурацией.
---
### GET `/api/box/{id}/live/`
Живые данные датчиков из Redis-кеша.
**Response:**
```json
{
"ph": 6.24,
"ec": 1.85,
"tankTemp": 22.5,
"rootTemp": 21.0,
"airTemp": 24.1,
"airHumidity": 65.0,
"waterLevel": 45.2,
"light": 80.0,
"online": true,
"last_seen": "2026-05-03T08:01:23Z"
}
```
---
### POST `/api/box/{id}/reboot/`
Перезагрузка устройства.
**Request:** `{}` (пустой body)
**Response:**
```json
{"success": true, "message": "Команда reboot отправлена", "command": "reboot"}
```
---
### POST `/api/box/{id}/gpio/`
Управление GPIO (MCP23017).
**Request:**
```json
{"pin": 5, "state": true}
```
- `pin`: 015
- `state`: `true` (HIGH) / `false` (LOW)
**Response:**
```json
{"success": true, "command": "gpio", "pin": 5, "state": true}
```
---
### POST `/api/box/{id}/pump/run/`
Запуск помпы на заданное время.
**Request:**
```json
{"pump_id": 1, "time_ms": 5000}
```
- `pump_id`: 18
- `time_ms`: 160000
**Response:**
```json
{"success": true, "command": "pump_run", "pump_id": 1, "time_ms": 5000}
```
---
### POST `/api/box/{id}/pump/dispense/`
Налить определённое количество граммов.
**Request:**
```json
{"pump_id": 2, "grams": 50.5}
```
- `pump_id`: 18
- `grams`: 0.11000
**Response:**
```json
{"success": true, "command": "pump_dispense", "pump_id": 2, "grams": 50.5}
```
---
### POST `/api/box/{id}/pump/stop/`
Остановить помпу.
**Request:**
```json
{"pump_id": 1}
```
- `pump_id`: 18
**Response:**
```json
{"success": true, "command": "pump_stop", "pump_id": 1}
```
---
### POST `/api/box/{id}/preferences/`
Обновить настройки и калибровку устройства.
**Request:** JSON с любыми полями из [MQTT.md → set/preferences/all](MQTT.md#настройки-setpreferencesall)
**Response:**
```json
{
"success": true,
"message": "Настройки отправлены (3 полей)",
"fields": ["ecKorr", "pHlKorr", "ntcValKorr"]
}
```
---
## Коды ошибок
| HTTP | Описание |
|------|----------|
| 400 | Неверные параметры (pin/pump_id/time вне диапазона) |
| 503 | MQTT недоступен |
| 404 | Бокс не найден / нет доступа |