Files
Arduino/pump_controller_8_2_OLED_DONE/MANUAL.md
T
oskarvitaliiandClaude Opus 5 355a9912ab Ограничить блокировку 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

11 KiB
Raw Blame History

Контроллер насосов v8.2 — руководство пользователя

Документ для монтажника и обслуживающего персонала. Техническое описание кода — в 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.

Контроллер выполняет функцию мониторинга и сигнализации, а не защиты. Он не заменяет штатную автоматику защиты насосной станции.