feat(webhook): слать в status человеческую фразу вместо кода
В теле уведомления status теперь содержит ту же формулировку, что видит
оператор в панели: «Насосы стоят, подачу держит резерв». Прежние
машиночитаемые значения переехали в новое поле state (ALARM / OK /
STARTED / STOPPED), чтобы сценарий на сервере ветвился по нему, а не
разбирал русский текст.
ЛОМАЮЩЕЕ ИЗМЕНЕНИЕ: если сценарий в n8n сравнивал status с "ALARM",
условие надо переключить на state.
Формулировки собраны в одном месте прошивки (statusKind / statusWord /
statusSub / statusPhrase) и оттуда попадают и в webhook, и в панель через
новые поля k, w, s в /status. Раньше та же логика была продублирована в
JS панели; два набора фраз разошлись бы при первой правке. Побочно JS
сократился почти вдвое.
Прошито и проверено на приборе: /status отдаёт
{"k":"ok","w":"Подача есть","s":"работает насос 1"}, /config по-прежнему
отдаёт только имя хоста без токена.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -214,18 +214,37 @@ pE = стоит -> реле «Резерв» выключено
|
||||
`POST` на `settings.webhookUrl`, `Content-Type: application/json`:
|
||||
|
||||
```json
|
||||
{"event":"MAIN PUMPS","status":"ALARM","device":"Wemos_D1_Pump"}
|
||||
{"event":"MAIN PUMPS","state":"ALARM",
|
||||
"status":"Насосы стоят, подачу держит резерв","device":"Pumps"}
|
||||
```
|
||||
|
||||
| `event` | `status` |
|
||||
| Поле | Назначение |
|
||||
|---|---|
|
||||
| `MAIN PUMPS` | `ALARM` / `OK` |
|
||||
| `EMERGENCY PUMP` | `STARTED` / `STOPPED` |
|
||||
| `event` | Канал: `MAIN PUMPS` или `EMERGENCY PUMP` |
|
||||
| `state` | Машиночитаемое: `ALARM` / `OK` / `STARTED` / `STOPPED` |
|
||||
| `status` | **Человеческая фраза**, та же что в панели |
|
||||
| `device` | Имя прибора из настроек |
|
||||
|
||||
Поле `device` берётся из настройки `settings.deviceName` (задаётся через веб-панель,
|
||||
по умолчанию `Wemos_D1_Pump`). Значение отфильтровано при вводе до
|
||||
`[A-Za-z0-9_-]`, поэтому экранирование в JSON не требуется — сломать тело
|
||||
запроса ему нечем.
|
||||
Фраза в `status` собирается функцией `statusPhrase()` из текущего состояния на
|
||||
момент отправки — это те же слова, что видит оператор в панели:
|
||||
|
||||
| Ситуация | `status` |
|
||||
|---|---|
|
||||
| Оба основных стоят, резерв качает | `Насосы стоят, подачу держит резерв` |
|
||||
| Оба основных стоят, резерва нет | `Насосы стоят, подачи нет` |
|
||||
| Работает резерв, основные в порядке | `Работает резерв, основные насосы в работе` |
|
||||
| Норма | `Подача есть, работает насос 1` |
|
||||
|
||||
`state` оставлен рядом намеренно: сценарий на сервере должен ветвиться по нему,
|
||||
а не разбирать русский текст. **Если сценарий раньше сравнивал `status` с
|
||||
`"ALARM"`, его нужно переключить на `state`** — это ломающее изменение.
|
||||
|
||||
Формулировки живут в одном месте, в прошивке. Панель получает их готовыми через
|
||||
`/status` (поля `k`, `w`, `s`) и не собирает сама — иначе два набора фраз
|
||||
разошлись бы при первой правке.
|
||||
|
||||
Фразы не содержат кавычек и обратных слэшей, `device` отфильтрован при вводе,
|
||||
поэтому экранирование в JSON не требуется нигде.
|
||||
|
||||
TLS-соединение поднимается через `WiFiClientSecure` с `setInsecure()` —
|
||||
сертификат сервера **не проверяется**. Достаточно для отправки в доверенную
|
||||
@@ -417,7 +436,8 @@ Wi-Fi настройки из `/settings.json` не затрагивает, и
|
||||
Ответы:
|
||||
|
||||
```json
|
||||
/status {"p1":1,"p2":0,"pE":0,"rMain":0,"rEmg":0,"rdy":1}
|
||||
/status {"p1":1,"p2":0,"pE":0,"rMain":0,"rEmg":0,"rdy":1,
|
||||
"k":"ok","w":"Подача есть","s":"работает насос 1"}
|
||||
/config {"device":"Nasosnaya_1","alarm":5,"emerg":0,
|
||||
"host":"n8n.example.com","fs":1,"ip":"192.168.1.128"}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user