Устройство управляет приводом люка через 3 реле:
Позиция люка отслеживается по времени (0.00 — 35.00 сек). Концевик "закрыто" подключён как feedback-пин канала 1.
GET /status{
"status": "ok",
"hatch": {
"state": "open",
"position_sec": 17.50,
"position_pct": 50
}
}
| Поле | Тип | Описание |
|---|---|---|
state |
string | Текущее состояние люка (см. таблицу ниже) |
position_sec |
float | Текущая позиция в секундах (0.00 — 35.00) |
position_pct |
int | Позиция в процентах от максимума (0 — 100) |
Возможные значения state:
| Значение | Описание |
|---|---|
closed |
Люк закрыт (position_sec == 0) |
open |
Люк открыт, привод не движется |
opening |
Люк открывается |
closing |
Люк закрывается |
calibrating |
Выполняется калибровка (поиск нулевой точки) |
POST /actionМожно передать либо time, либо percent — на выбор. Если переданы оба, приоритет у percent.
{
"action": "open",
"params": {
"time": 10.0
}
}
{
"action": "open",
"params": {
"percent": 50
}
}
| Параметр | Тип | Описание |
|---|---|---|
time |
float | Время движения в секундах (> 0) |
percent |
float | Желаемое приращение открытия в % от максимума (> 0, макс. 100) |
Итоговая позиция: min(position_sec + time, 35.0) — потолок 35 сек при любом раскладе.
Логика перед открытием:
position_sec == 0 и концевик не активен → выполняется калибровка (закрытие до концевика, макс. position_sec + 0.1 сек). При неудаче — ошибка CalibrationFailedposition_sec > 0 → люк открывается сразу без калибровкиВозможные ошибки:
{ "status": "error", "error": "IllegalActionOrParams", "message": "Hatch is already fully open" }
{ "status": "error", "error": "CalibrationFailed", "message": "Limit switch did not trigger during calibration" }
{ "status": "error", "error": "DeviceBusy", "message": "Hatch is already moving" }
{
"action": "close",
"params": {
"time": 10.0
}
}
{
"action": "close",
"params": {
"percent": 50
}
}
| Параметр | Тип | Описание |
|---|---|---|
time |
float | Время движения в секундах (> 0) |
percent |
float | Желаемое приращение закрытия в % от максимума (> 0, макс. 100) |
Итоговая позиция: max(position_sec - time, 0.0). Если концевик срабатывает раньше — движение останавливается досрочно, позиция сбрасывается в 0.
Возможные ошибки:
{ "status": "error", "error": "IllegalActionOrParams", "message": "Hatch is already closed" }
{ "status": "error", "error": "DeviceBusy", "message": "Hatch is already moving" }
Устройство отправляет события на POST /events/new сервера.
Отправляется при срабатывании концевика во время закрытия или калибровки.
{
"device_type": "hatch",
"device_id": "0123456789ABCDEF",
"event_name": "limit_switch_activated",
"data": {}
}
Отправляется если концевик не сработал в отведённое время при попытке калибровки перед открытием.
{
"device_type": "hatch",
"device_id": "0123456789ABCDEF",
"event_name": "calibration_failed",
"data": {}
}
Настраивается через POST /set_channels_schema (стандартный эндпоинт sh_core).
| Канал | Назначение | PIN | FEEDBACK |
|---|---|---|---|
| 0 | Открыть | GPIO пин реле "открыть" | — |
| 1 | Закрыть | GPIO пин реле "закрыть" | GPIO пин концевика "закрыто" |
Силовое реле хардкодится в hatch.ino константой HATCH_POWER_RELAY_PIN (GPIO18).