Настройки через веб, состояние реле в UI, распиновка под реле active-LOW
Распиновка. Пина D0, который использовался под выход «Резерв», в доступном наборе нет. Кнопка сброса Wi-Fi удалена как избыточная: при пропавшей сети wm.autoConnect() сам поднимает портал. Освободившийся D3 закрыл дефицит. Выходы переехали на D3 и D4 и стали инверсными. Причина: для реле active-LOW безопасное состояние — пин в HIGH, а D3/D4 подтянуты к HIGH внешними резисторами платы и держат этот уровень всю загрузку. D8, наоборот, подтянут к LOW и щёлкал бы реле при каждом включении питания. В setup() digitalWrite() идёт до pinMode(), иначе защёлка выхода даёт короткий LOW. Инверсия живёт только в setRelay(); логическое состояние дублируется в relayMainOn/relayEmergOn, чтобы панель показывала смысл, а не уровень пина. Настройки. device, выдержка аварии и выдержка резерва вынесены в /set_config и EEPROM. Раскладка EEPROM версионирована: magic 0xA55B, старый 0xA55A распознаётся и переносится, поэтому прошитые приборы не теряют webhook. Значения по умолчанию воспроизводят прежнее поведение (5 с и 0 с). Для резерва добавлена выдержка, которой раньше не было, симметрично основной аварии. Обе выдержки гасят реле и вебхук одновременно. device_name фильтруется до [A-Za-z0-9_-] вместо экранирования: такой набор безопасен и в JSON, и в HTML. Пустое или неверное поле формы означает «не менять», поэтому частичное заполнение не сбрасывает остальное. Состояние реле выведено в /status и в панель. Проверено: xtensa-lx106-elf-g++ -fsyntax-only -Wall -Wextra против ядра 3.1.2 — предупреждений в скетче нет (попутно убран неиспользуемый isEmergency); валидация настроек прогнана на 22 граничных случаях; раскладка EEPROM проверена на перекрытия. На железе не проверялось. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -42,23 +42,40 @@
|
||||
**Контакт замкнут = насос работает.** Полярность не важна, внешние резисторы
|
||||
и питание на контакты подавать не нужно.
|
||||
|
||||
### 2.3 Выходы аварии
|
||||
### 2.3 Выходы на реле
|
||||
|
||||
| Клемма | Когда `HIGH` (3.3 В) |
|
||||
|---|---|
|
||||
| `D8` | Авария: оба основных насоса стоят |
|
||||
| `D0` | Работает резервный насос |
|
||||
Прибор рассчитан на **релейные модули с активным LOW** — те, у которых реле
|
||||
включается замыканием входа на GND. Это самый распространённый тип модулей для
|
||||
Arduino.
|
||||
|
||||
Выходы логические, 3.3 В, ток до ~12 мА. **Реле, сирену или лампу напрямую
|
||||
подключать нельзя** — только через транзисторный ключ или релейный модуль
|
||||
с оптронной развязкой.
|
||||
| Клемма платы | Куда | Реле включается когда |
|
||||
|---|---|---|
|
||||
| `D3` | вход `IN` модуля «Авария» | оба основных насоса стоят |
|
||||
| `D4` | вход `IN` модуля «Резерв» | работает резервный насос |
|
||||
|
||||
### 2.4 Кнопка сброса Wi-Fi
|
||||
Питание модулей — от `5V` и `GND` платы (или от отдельного источника с общим
|
||||
GND). **Сирену, лампу или пускатель напрямую к `D3`/`D4` подключать нельзя** —
|
||||
только через релейный модуль или транзисторный ключ.
|
||||
|
||||
Обычная кнопка без фиксации между `D3` и `GND`.
|
||||
> **Важно: тип модуля должен быть именно active-LOW.** Если поставить модуль с
|
||||
> активным HIGH, реле будет включено в норме и отпускать при аварии — логика
|
||||
> перевернётся. Пины `D3` и `D4` выбраны именно под active-LOW: они удерживают
|
||||
> HIGH во время загрузки платы, поэтому реле молчат при включении питания.
|
||||
|
||||
> Кнопку нельзя держать нажатой в момент включения питания — плата уйдёт в
|
||||
> служебный режим и не запустится.
|
||||
Оговорки, которые лучше знать заранее:
|
||||
|
||||
* Реле «Авария» **щёлкает при каждой заливке прошивки** — схема автосброса USB
|
||||
дёргает `D3`. Это нормально.
|
||||
* Встроенный светодиод платы повторяет состояние реле «Резерв» — удобно для
|
||||
проверки монтажа.
|
||||
* Схема **не отказобезопасная**: если контроллер обесточен, сигнала аварии нет.
|
||||
Если это критично — снимайте нагрузку с **нормально замкнутого (NC)** контакта
|
||||
реле, тогда пропажа питания читается системой как авария.
|
||||
|
||||
### 2.4 Свободные клеммы
|
||||
|
||||
`D8`, `D0` и `A0` прошивкой не используются. Учтите, что `A0` — только
|
||||
аналоговый вход и цифровым выходом стать не может.
|
||||
|
||||
### 2.5 Экран
|
||||
|
||||
@@ -121,19 +138,47 @@ STATUS: OK
|
||||
|
||||
* три карточки насосов с индикаторами;
|
||||
* панель состояния системы (`SYS_OK` или `CRITICAL`);
|
||||
* **состояние обоих реле** — «Включено» / «Выключено»;
|
||||
* кнопка **Сбросить Wi-Fi**;
|
||||
* поле **Webhook URL** для смены адреса уведомлений.
|
||||
* блок **Настройки** — адрес уведомлений, имя устройства и две выдержки.
|
||||
|
||||
Страница обновляется автоматически при изменении состояния насосов.
|
||||
Страница обновляется автоматически при изменении состояния насосов или реле.
|
||||
|
||||
### Адрес уведомлений
|
||||
### 5.1 Состояние реле
|
||||
|
||||
**На новом приборе адрес не задан** — панель покажет
|
||||
`не задан - уведомления отключены`, и сообщения на сервер отправляться не будут.
|
||||
Введите адрес в поле под заголовком `Webhook URL` и нажмите **Сохранить**.
|
||||
Два индикатора показывают, что прибор реально подал на выход:
|
||||
|
||||
Адрес сохраняется в память прибора и переживает отключение питания и сброс
|
||||
Wi-Fi. Максимальная длина — 220 символов.
|
||||
| Индикатор | Значение |
|
||||
|---|---|
|
||||
| Реле «Авария» — Включено | Выход `D3` активен, сигнал аварии выдан |
|
||||
| Реле «Резерв» — Включено | Выход `D4` активен, резерв работает |
|
||||
|
||||
Полезно при пусконаладке: если реле показано «Включено», а нагрузка не
|
||||
сработала — проблема в монтаже или в типе релейного модуля, а не в прошивке.
|
||||
|
||||
### 5.2 Настройки
|
||||
|
||||
Все настройки в одной форме. **Пустое поле означает «не менять»** — можно
|
||||
поправить одну выдержку, не трогая остальное. Неверное значение так же
|
||||
игнорируется, поэтому опечатка ничего не испортит.
|
||||
|
||||
| Поле | Что задаёт | Допустимо | По умолчанию |
|
||||
|---|---|---|---|
|
||||
| **Webhook URL** | адрес сервера уведомлений | до 220 символов | не задан |
|
||||
| **Имя устройства** | поле `device` в уведомлении — по нему различают приборы на сервере | латиница, цифры, `_`, `-`; до 31 символа | `Wemos_D1_Pump` |
|
||||
| **Выдержка аварии, с** | сколько оба основных насоса должны стоять до сигнала | 0…3600 | `5` |
|
||||
| **Выдержка резерва, с** | сколько резерв должен работать до сигнала | 0…3600 | `0` (сразу) |
|
||||
|
||||
Настройки сохраняются в памяти прибора, переживают отключение питания и сброс
|
||||
Wi-Fi.
|
||||
|
||||
> Русские буквы и пробелы в имени устройства **не сохранятся** — они будут
|
||||
> отброшены. Это не ошибка: ограничение защищает формат уведомления от поломки.
|
||||
> Пишите, например, `Nasosnaya_1` или `Pump_Station_A`.
|
||||
|
||||
**На новом приборе адрес уведомлений не задан** — панель покажет
|
||||
`не задан - уведомления отключены`, сообщения отправляться не будут, всё
|
||||
остальное работает.
|
||||
|
||||
---
|
||||
|
||||
@@ -161,17 +206,21 @@ Wi-Fi. Максимальная длина — 220 символов.
|
||||
|
||||
## 7. Сброс настроек Wi-Fi
|
||||
|
||||
Нужен при смене роутера или пароля сети.
|
||||
Нужен при смене роутера или пароля сети. Физической кнопки сброса у прибора нет.
|
||||
|
||||
**Способ 1 — кнопкой:**
|
||||
нажмите и держите кнопку на `D3`. На экране появится полоса и обратный отсчёт
|
||||
от 3 секунд. Дождитесь конца — прибор перезагрузится и снова поднимет точку
|
||||
доступа `Pump_Control_Set`. Отпустите кнопку раньше — ничего не произойдёт.
|
||||
**Если сеть пропала или сменился пароль** — ничего делать не нужно: при
|
||||
перезагрузке прибор не сможет подключиться и **сам** поднимет точку доступа
|
||||
`Pump_Control_Set`. Подключитесь к ней и введите новые данные (раздел 3).
|
||||
|
||||
**Способ 2 — через браузер:**
|
||||
на панели мониторинга нажмите **Сбросить Wi-Fi**.
|
||||
**Если надо перевести прибор в другую сеть, а текущая работает** — нажмите
|
||||
**Сбросить Wi-Fi** на панели мониторинга. Прибор перезагрузится и поднимет точку
|
||||
доступа.
|
||||
|
||||
Webhook URL при сбросе Wi-Fi **не стирается**.
|
||||
**Если панель недоступна, а сеть работает** — выключите роутер и перезагрузите
|
||||
прибор по питанию. Не найдя сеть, он откроет портал настройки.
|
||||
|
||||
Настройки из блока «Настройки» (адрес уведомлений, имя устройства, выдержки) при
|
||||
сбросе Wi-Fi **не стираются**.
|
||||
|
||||
---
|
||||
|
||||
@@ -182,10 +231,17 @@ Webhook URL при сбросе Wi-Fi **не стирается**.
|
||||
|
||||
| Событие | Задержка |
|
||||
|---|---|
|
||||
| Фиксация нового состояния датчика | 3 секунды |
|
||||
| Авария основных насосов (после фиксации) | ещё 5 секунд |
|
||||
| **Итого до сигнала аварии** | **~8 секунд** |
|
||||
| Реакция на резервный насос | ~3 секунды |
|
||||
| Фиксация нового состояния датчика | 3 секунды (не настраивается) |
|
||||
| Авария основных насосов (после фиксации) | **Выдержка аварии**, по умолчанию 5 с |
|
||||
| Пуск резерва (после фиксации) | **Выдержка резерва**, по умолчанию 0 с |
|
||||
| Итого до сигнала аварии при значениях по умолчанию | **~8 секунд** |
|
||||
| Итого до сигнала о резерве при значениях по умолчанию | ~3 секунды |
|
||||
|
||||
Обе выдержки настраиваются в панели (раздел 5.2) и действуют **одновременно на
|
||||
реле и на уведомление** — отдельно задержать только уведомление нельзя.
|
||||
|
||||
Выдержка `0` означает «сразу после фиксации», то есть через те же 3 секунды
|
||||
антидребезга.
|
||||
|
||||
---
|
||||
|
||||
@@ -199,8 +255,13 @@ Webhook URL при сбросе Wi-Fi **не стирается**.
|
||||
| `WiFi: NO CONNECTION` | Сеть недоступна или сменился пароль → выполните сброс Wi-Fi (раздел 7) |
|
||||
| Панель в браузере не открывается | Проверьте, что компьютер в той же сети; уточните IP на экране прибора |
|
||||
| Уведомления не приходят | Проверьте адрес webhook на панели и доступность сервера. Смотрите лог в мониторе порта (115200 бод): `[HTTP] Код: 200` — доставлено; `[HTTP] DNS не ответил` — проблема с именем сервера или DNS роутера; `[HTTP] Ошибка:` — сервер не ответил вовремя |
|
||||
| Экран замирает на 1-3 с в момент аварии | Так и задумано: отправка уведомления блокирует прибор не дольше 3 секунд. Выходы аварии при этом срабатывают сразу, без ожидания сервера |
|
||||
| Прибор не стартует после включения | Была нажата кнопка `D3` при подаче питания либо `D8` притянут к плюсу нагрузкой |
|
||||
| Экран замирает на 1-3 с в момент аварии | Так и задумано: отправка уведомления блокирует прибор не дольше 3 секунд. Реле при этом срабатывают сразу, без ожидания сервера |
|
||||
| Панель пишет «Реле включено», но нагрузка не сработала | Проблема в монтаже или в типе модуля. Проверьте, что модуль **active-LOW**, что он питается, и что общий GND соединён |
|
||||
| Реле сработали наоборот: включены в норме, отпускают при аварии | Стоит модуль с активным HIGH вместо active-LOW. Замените модуль либо потребуйте правку прошивки |
|
||||
| Реле щёлкает при заливке прошивки | Нормально: схема автосброса USB дёргает `D3`. На работу не влияет |
|
||||
| Имя устройства не сохраняется | В нём есть русские буквы, пробелы или знаки препинания — они отбрасываются. Допустимы только латиница, цифры, `_` и `-` |
|
||||
| Выдержка не сохраняется | Значение вне диапазона 0…3600 или не целое число — поле игнорируется |
|
||||
| Прибор не стартует после включения | На `D3` или `D4` висит нагрузка, тянущая пин к GND при старте — проверьте релейный модуль и его питание |
|
||||
|
||||
Подробный лог работы выводится в USB-порт: скорость **115200 бод**
|
||||
(Arduino IDE → Инструменты → Монитор порта).
|
||||
@@ -210,8 +271,10 @@ Webhook URL при сбросе Wi-Fi **не стирается**.
|
||||
## 10. Безопасность
|
||||
|
||||
Прибор не имеет пароля на веб-панель. Любой пользователь локальной сети может
|
||||
открыть панель, сбросить Wi-Fi и изменить адрес уведомлений. Устанавливайте
|
||||
прибор в закрытом технологическом сегменте сети, не в гостевом Wi-Fi.
|
||||
открыть панель, сбросить Wi-Fi, изменить адрес уведомлений и **увеличить
|
||||
выдержки аварии**, то есть замедлить реакцию сигнализации. Устанавливайте прибор
|
||||
в закрытом технологическом сегменте сети, не в гостевом Wi-Fi.
|
||||
|
||||
Контроллер выполняет **функцию мониторинга и сигнализации**, а не защиты.
|
||||
Он не заменяет штатную автоматику защиты насосной станции.
|
||||
Он не заменяет штатную автоматику защиты насосной станции. Кроме того, схема не
|
||||
отказобезопасна: обесточенный контроллер сигнала аварии не подаёт (см. 2.3).
|
||||
|
||||
Reference in New Issue
Block a user