Files
Arduino/pump_controller_8_2_OLED_DONE/MANUAL.md
T
VitaliandClaude Opus 5 e4ef065c9b Ограничить блокировку loop() при отправке webhook бюджетом 3 с
BearSSL делает TLS-хендшейк синхронно, поэтому вместо асинхронности
блокировка ограничивается по времени.

Главный источник залипания — не таймауты HTTPClient, а DNS:
WiFiClientSecureCtx::connect(name, port) резолвит имя через
WiFi.hostByName() без таймаута и подвешивает loop() на ~10 с.
Теперь имя разрешается заранее с лимитом 800 мс, результат попадает
в кэш lwIP, и внутренний резолв возвращается мгновенно. Соединение
по-прежнему идёт по имени, поэтому SNI и заголовок Host сохраняются.

Остаток бюджета уходит в http.setTimeout(): он ограничивает и
connect+TLS (через _client->setTimeout() до connect), и чтение
ответа (собственный цикл HTTPClient по _tcpTimeout).

Худший случай: ~3.5 с вместо прежних 10-15 с. Выходы аварии не
затронуты — digitalWrite() и раньше выполнялся до отправки.

Проверено: xtensa-lx106-elf-g++ -fsyntax-only -Wall -Wextra против
ядра 3.1.2 — в скетче замечаний нет; разбор URL прогнан на 15
граничных случаях.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 14:40:42 +07:00

218 lines
11 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.
# Контроллер насосов v8.2 — руководство пользователя
Документ для монтажника и обслуживающего персонала.
Техническое описание кода — в [README.md](README.md).
---
## 1. Что делает прибор
Контроллер следит за тремя насосами:
* **Насос 1** и **Насос 2** — основные;
* **Резерв** — аварийный (экстренный) насос.
Прибор:
1. показывает состояние на экране;
2. включает выход «Авария», если **оба** основных насоса остановлены;
3. включает выход «Резерв», когда запускается резервный насос;
4. отправляет уведомления на сервер (webhook) через интернет;
5. показывает панель мониторинга в браузере в локальной сети.
---
## 2. Подключение
### 2.1 Питание
5 В через microUSB (блок питания не менее 500 мА).
### 2.2 Датчики насосов
К каждому входу подключается **сухой контакт** — свободный контакт пускателя
насоса или датчика потока.
| Клемма платы | Что подключить |
|---|---|
| `D5` и `GND` | Контакт насоса 1 |
| `D6` и `GND` | Контакт насоса 2 |
| `D7` и `GND` | Контакт резервного насоса |
**Контакт замкнут = насос работает.** Полярность не важна, внешние резисторы
и питание на контакты подавать не нужно.
### 2.3 Выходы аварии
| Клемма | Когда `HIGH` (3.3 В) |
|---|---|
| `D8` | Авария: оба основных насоса стоят |
| `D0` | Работает резервный насос |
Выходы логические, 3.3 В, ток до ~12 мА. **Реле, сирену или лампу напрямую
подключать нельзя** — только через транзисторный ключ или релейный модуль
с оптронной развязкой.
### 2.4 Кнопка сброса Wi-Fi
Обычная кнопка без фиксации между `D3` и `GND`.
> Кнопку нельзя держать нажатой в момент включения питания — плата уйдёт в
> служебный режим и не запустится.
### 2.5 Экран
OLED 128×64 (I2C): `SDA → D1`, `SCL → D2`, `VCC → 3V3`, `GND → GND`.
---
## 3. Первое включение
1. Подайте питание. На экране появится `PUMP CTRL v8 / Starting...`.
2. Прибор не найдёт сохранённой сети и поднимет свою точку доступа:
```
Имя сети: Pump_Control_Set
```
3. Подключитесь к ней с телефона или ноутбука (пароль не требуется).
4. Откройте в браузере `http://192.168.4.1` — откроется страница настройки.
5. Выберите вашу Wi-Fi-сеть, введите пароль, нажмите **Save**.
6. Прибор перезагрузится и покажет на экране полученный IP-адрес.
**Запишите этот адрес** — по нему открывается панель мониторинга.
Если за 2 минуты сеть не настроена, прибор переходит в автономный режим:
экран, выходы аварии и логика работают, webhook и веб-панель — нет.
---
## 4. Экран
```
PUMP CONTROLLER v8
────────────────────────
PUMP 1 : RUNNING
PUMP 2 : STOPPED
BACKUP : STANDBY
────────────────────────
192.168.1.42
STATUS: OK
```
| Надпись | Значение |
|---|---|
| `PUMP 1/2 : RUNNING` | Насос работает |
| `PUMP 1/2 : STOPPED` | Насос остановлен |
| `BACKUP : ACTIVE` | Резервный насос запущен |
| `BACKUP : STANDBY` | Резерв в ожидании |
| `WiFi: NO CONNECTION` | Нет связи с сетью |
| `INIT...` | Идёт запуск (первые ~4 секунды) |
| `STATUS: OK` | Норма |
| `WARN: BACKUP RUNNING` | Работает резерв — требуется внимание |
| `!! ALARM: NO PUMPS !!` (мигает) | **Авария: подача воды прекращена** |
---
## 5. Панель в браузере
Откройте `http://<IP-адрес прибора>` в любом браузере в той же сети.
На странице:
* три карточки насосов с индикаторами;
* панель состояния системы (`SYS_OK` или `CRITICAL`);
* кнопка **Сбросить Wi-Fi**;
* поле **Webhook URL** для смены адреса уведомлений.
Страница обновляется автоматически при изменении состояния насосов.
### Адрес уведомлений
**На новом приборе адрес не задан** — панель покажет
`не задан - уведомления отключены`, и сообщения на сервер отправляться не будут.
Введите адрес в поле под заголовком `Webhook URL` и нажмите **Сохранить**.
Адрес сохраняется в память прибора и переживает отключение питания и сброс
Wi-Fi. Максимальная длина — 220 символов.
---
## 6. Уведомления на сервер
При изменении ситуации прибор отправляет сообщение на настроенный адрес:
| Событие | Что означает |
|---|---|
| `MAIN PUMPS` / `ALARM` | Оба основных насоса стоят |
| `MAIN PUMPS` / `OK` | Работа восстановлена |
| `EMERGENCY PUMP` / `STARTED` | Запустился резервный насос |
| `EMERGENCY PUMP` / `STOPPED` | Резервный насос остановился |
Уведомления отправляются один раз на каждое изменение, а не повторяются.
Если в момент события связи не было — уведомление **не будет** отправлено
позже, оно теряется.
На отправку отводится не больше **3 секунд**. Если сервер недоступен или
отвечает медленно, прибор прекращает попытку и продолжает работу: экран и
кнопка на это время замирают, но **выходы аварии срабатывают сразу**, не
дожидаясь сервера.
---
## 7. Сброс настроек Wi-Fi
Нужен при смене роутера или пароля сети.
**Способ 1 — кнопкой:**
нажмите и держите кнопку на `D3`. На экране появится полоса и обратный отсчёт
от 3 секунд. Дождитесь конца — прибор перезагрузится и снова поднимет точку
доступа `Pump_Control_Set`. Отпустите кнопку раньше — ничего не произойдёт.
**Способ 2 — через браузер:**
на панели мониторинга нажмите **Сбросить Wi-Fi**.
Webhook URL при сбросе Wi-Fi **не стирается**.
---
## 8. Задержки срабатывания
Задержки заданы намеренно, чтобы не срабатывать на кратковременные пуски и
остановки:
| Событие | Задержка |
|---|---|
| Фиксация нового состояния датчика | 3 секунды |
| Авария основных насосов (после фиксации) | ещё 5 секунд |
| **Итого до сигнала аварии** | **~8 секунд** |
| Реакция на резервный насос | ~3 секунды |
---
## 9. Диагностика
| Симптом | Причина / что делать |
|---|---|
| Экран не горит | Проверьте питание и провода SDA/SCL. Если адрес дисплея `0x3D`, требуется правка прошивки (константа `OLED_ADDR`) |
| Экран горит, но насосы всегда `STOPPED` | Контакты датчиков не замыкаются на `GND`; проверьте общий провод |
| Насосы всегда `RUNNING` | Вход замкнут на `GND` постоянно — проверьте контакт пускателя |
| `WiFi: NO CONNECTION` | Сеть недоступна или сменился пароль → выполните сброс Wi-Fi (раздел 7) |
| Панель в браузере не открывается | Проверьте, что компьютер в той же сети; уточните IP на экране прибора |
| Уведомления не приходят | Проверьте адрес webhook на панели и доступность сервера. Смотрите лог в мониторе порта (115200 бод): `[HTTP] Код: 200` — доставлено; `[HTTP] DNS не ответил` — проблема с именем сервера или DNS роутера; `[HTTP] Ошибка:` — сервер не ответил вовремя |
| Экран замирает на 1-3 с в момент аварии | Так и задумано: отправка уведомления блокирует прибор не дольше 3 секунд. Выходы аварии при этом срабатывают сразу, без ожидания сервера |
| Прибор не стартует после включения | Была нажата кнопка `D3` при подаче питания либо `D8` притянут к плюсу нагрузкой |
Подробный лог работы выводится в USB-порт: скорость **115200 бод**
(Arduino IDE → Инструменты → Монитор порта).
---
## 10. Безопасность
Прибор не имеет пароля на веб-панель. Любой пользователь локальной сети может
открыть панель, сбросить Wi-Fi и изменить адрес уведомлений. Устанавливайте
прибор в закрытом технологическом сегменте сети, не в гостевом Wi-Fi.
Контроллер выполняет **функцию мониторинга и сигнализации**, а не защиты.
Он не заменяет штатную автоматику защиты насосной станции.