
Этот девайс больше всего актуален для тех, кто живёт в загородном доме и уже знаком с особыми «сюрпризами» в унитазе, когда дренажный колодец переполняется.
Вы бежите к колодцу, поднимаете тяжеленную крышку, а там... уже всё плавает. А через пару минут доходит осознание: насос благополучно проспал момент включения. Привет, внеплановые 20 минут откачки и «удобрение» участка самым неожиданным способом.
Мой путь борьбы с колодцем: от сложного к простому
Сначала был дренажный насос с герконом. Идея простая: поплавок с герконом плавает, замыкает контакты при достижении уровня воды — насос включается. На деле оказалось, что при вибрации насос болтается, геркон залипает, а иногда просто «молчит как партизан». Фиксировать его — отдельная головная боль.
Потом я поставил надёжного «Малыша» и умную розетку. Включение насоса прямо с телефона, о круто! Но как узнать, что он наполнился? Каждый раз таскать тяжеленную крышку, чтобы заглянуть в колодец, — то ещё удовольствие, включать «наугад»?
Я посмотрел в сторону готовых решений за 3000+ рублей (используют емкостной метод (измеряют точный уровень 0-100%), имеют качественный корпус, готовое приложение и гарантию), но обнаружил, на мой взгляд, подводные камни: мало отзывов — устройства довольно новые на рынке, закрытая система — нельзя ничего доработать под свои нужды.
А мне было нужно простое, как лопата, решение. Чтобы устройство оповестило меня: «Колодец полный, не желаешь ли включить насос? ПОЖАЛУЙСТА ?» — и желательно в Telegram, где я точно замечу это сообщение.
Так родилась идея: сердито, эффективно и не дороже 1500 рублей собрать свою систему мониторинга на основе ESP32 и геркона.
Во сколько обойдётся самостоятельная сборка?
Вот приблизительный расчёт от Озон.

Если поискать на антресолях или в сарае, можно сильно сократить расходы.
Что часто уже есть в хозяйстве:
Кабель (сечение до 0.5 мм) → старый от электропроводки (экономия 160 ₽)
Труба → обрезки после ремонта (экономия 100 ₽)
Корпус → пищевой контейнер + герметик (экономия 185 ₽)
Блок питания → зарядка от старого телефона
Что нужно от системы:
Полный контроль — система делает только то, что вы ей сказали.
Гибкость — легко доработать или подключить к другой smart-системе.
Надёжность геркона — механическая простота, минимум ложных срабатываний.
Независимость — ваш ESP32 перестанет работать только «из-за банкротства вашего счета за интернет».
От идеи к работающей системе: собираем и улучшаем
В своих предыдущих статьях я рассказал: как прошить MicroPython, настроить отправку оповещений и загружать файлы на микроконтроллер. Если вы их пропустили — рекомендую ознакомиться, там весь базис. В этой статье я не буду останавливаться на азах, а покажу, что получилось.
Оживляем ESP8266 и ESP32 за 15 минут без программистских заморочек с помощью MicroPython
WebREPL и uPyLoader: Выбираем способ беспроводного управления ESP
Даем голос ESP: Уведомления в Telegram и ntfy
Сначала логика, потом код: как писать программы для ESP на MicroPython
Вот как это выглядит у меня (возможно немного «неказисто»)



Вот код, который установлен у меня, в предыдущей статье я его подробно разбирал:
Скрытый текст
main.py
from machine import Pin, WDT, reset
from time import sleep
from gc import collect
from urequests import get
from config import TELEGRAM_TOKEN, TELEGRAM_CHAT_ID
# НАСТРОЙКИ
SENSOR_PIN = 4
CHECK_INTERVAL = 20
WD_TIME = 35000
REBOOT_INTERVAL = 604800
# ТЕКСТЫ СООБЩЕНИЙ
MSG_WATER_ALARM = "? ВНИМАНИЕ: Вода в колодце! Включите насос!"
MSG_WATER_OK = "? Воды нет. Система мониторинга работает"
# ИНИЦИАЛИЗАЦИЯ ДАТЧИКА
water_sensor = Pin(SENSOR_PIN, Pin.IN, Pin.PULL_UP)
print("water_sensor", water_sensor)
def read_water_sensor():
"""
Оптимизированное чтение датчика воды
"""
count = 0
for _ in range(3):
if water_sensor.value() == 0:
count += 1
sleep(0.01)
return count >= 2
def send_telegram_message(message):
"""
Отправка сообщения в Telegram
"""
collect()
try:
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
url += f"?chat_id={TELEGRAM_CHAT_ID}&text={message}"
response = get(url)
success = response.status_code == 200
response.close()
collect()
if success:
sleep(2)
return success
except Exception as e:
collect()
return False
def main():
"""
Главный цикл мониторинга системы
"""
# Инициализация сторожевого пса
wdt = WDT(timeout=WD_TIME)
send_telegram_message("Система мониторинга воды запущена!")
sleep(3)
# Переменная для хранения предыдущего состояния
previous_water_state = None
# Счётчик времени работы системы
system_uptime = 0
# Бесконечный цикл мониторинга
while True:
# Сбрасываем сторожевого пса
wdt.feed()
# Читаем текущее состояние датчика
current_water_state = read_water_sensor()
# Логика отправки сообщений
if previous_water_state is None or current_water_state != previous_water_state:
if current_water_state:
send_telegram_message(MSG_WATER_ALARM)
else:
send_telegram_message(MSG_WATER_OK)
# Сохраняем текущее состояние для следующего цикла
previous_water_state = current_water_state
# Учет времени для плановой перезагрузки
system_uptime += CHECK_INTERVAL
if system_uptime >= REBOOT_INTERVAL:
send_telegram_message("Плановая перезагрузка системы для профилактики")
sleep(2)
reset()
# Пауза перед следующей проверкой
sleep(CHECK_INTERVAL)
collect()
# ЗАПУСК СИСТЕМЫ
main()
boot.py
from network import WLAN, STA_IF # Wi-Fi модуль + режим клиента (подключение к роутеру)
from time import sleep # Отслеживаем время
from gc import collect # Уборка памяти
from config import WIFI_SSID, WIFI_PASSWORD, WEBREPL_PASSWORD, WEBREPL_SSID, WEBREPL_WIFI_PASSWORD # Необходимые настройки
def connect_wifi():
"""WiFi-инженер - подключает к интернету"""
collect()# Уборка памяти
wlan = WLAN(STA_IF) # Создаем соединение в режиме клиента
wlan.active(True) # Активируем/включаем соединение
# Если не подключено, то передаем пароль и пробуем законектиться (даем 15 попыток), при каждой попытке – чистим память, если в одной из попыток – сработало, сохраняем результат True, если неудачно, то фиксируем результат False
if not wlan.isconnected():
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
for i in range(15):
if wlan.isconnected():
collect() # Финальная очистка перед возвратом
return True
sleep(1)
collect()
return wlan.isconnected()
def start_webrepl():
"""WebREPL-администратор - настраивает точку доступа и запускает сервер"""
if WEBREPL_PASSWORD:
collect()# Уборка памяти
# Создаем и настраиваем точку доступа
from network import WLAN, AP_IF
ap = WLAN(AP_IF)
ap.active(True)
# Создаем настройки
ap.config(
essid=WEBREPL_SSID,
password=WEBREPL_WIFI_PASSWORD,
security=3, # WPA2-PSK (рекомендуется), если без пароля, то значение 0
channel=6, # Wi-Fi канал, более стабильный
hidden=False # Видимая сеть
)
collect()# Уборка памяти
# Запускаем WebREPL
import webrepl
webrepl.start(password=WEBREPL_PASSWORD)
collect()
return True # Успешный запуск
else:
return False # WebREPL отключен
connect_wifi()
start_webrepl()
print("Boot.py: WiFi и WebREPL запущены")
config.py
WIFI_SSID = "Ваша сеть"
WIFI_PASSWORD = b"Ваш пароль"
TELEGRAM_TOKEN = "Ваш токен"
TELEGRAM_CHAT_ID = 5308543785 # Ваш чат ID
WEBREPL_PASSWORD = "1234" # ← пароль WebREPL тут
WEBREPL_SSID = "ESP32-WebREPL-Water" # Имя точки доступа (можно изменить)
WEBREPL_WIFI_PASSWORD = "12345678" # Пароль Wi-Fi сети (можно изменить)
Что я поменял «в бою»:
Самая неприятная проблема, с которой я столкнулся — модуль «подзавис» после кратковременного отключения электроэнергии. ESP32 подавалось питание, но в цикл мониторинга он не входил. Решается это двумя простыми, но очень эффективными мерами:
Сторожевой пёс (Watchdog Timer). Это система антизависания. Теперь при любом сбое система не висит мёртвым грузом — она перезагружается и снова выходит на связь.
Плановая еженедельная перезагрузка. Даже самая стабильная программа в MicroPython может со временем начать подъедать память или в ней могут накапливаться ошибки. Раз в неделю система сама себя перезагружает, чтобы начать с чистого листа. Это профилактика для долгосрочной стабильности.
WEBREPL: инструмент на любителя
Честно говоря, за всё время я использовал WebREPL лишь однажды — для первоначальной отладки. Если вы не планируете активно удалённо менять код прямо на устройстве, смело можете его отключить. Это сэкономит немного оперативной памяти и упростит конфигурацию. Ставьте, только если вам реально нужен удалённый доступ к консоли.
Итоги: что получилось
Независимо: Работает автономно, лишь изредка требуя вашего внимания через уведомления.
Надёжно: Само восстанавливается после сбоев питания и чистит свою память.
Доступно: Его стоимость в разы ниже рыночных аналогов, а ремонтопригодность — на порядок выше.
Гибко: Вы можете легко адаптировать его под свои нужды — добавить второй датчик, сменить текст оповещений или интегрировать в другую систему умного дома.
Этот проект — отличный пример того, как понимание основ и несколько простых компонентов позволяют решить бытовую проблему, сэкономив при этом значительную сумму.
Творите, экспериментируйте и пусть ваш унитаз больше не оповещает вас о проблемах!
P.S. Возможно, найдутся те, кто скажет, что на C++ с библиотеками вроде Arduino можно сделать лучше и проще, но акцентирую ваше внимание, я ни в коем случае не агитирую против C++ и не утверждаю, что MicroPython — это «лучше», просто делюсь своим опытом. Так как я погружен в Python, то для решения бытовых задач (считать датчик, отправить данные) мне ближе MicroPython, так как оказался удобным способом погрузиться в мир МК, и мне не надо переключаться на совершенно новую парадигму, а использовать уже знакомые модели и через REPL в реальном времени «пощупать» железо для начальных стадий прототипирования.
Комментарии (16)

aamonster
11.11.2025 12:20Увидел надпись "провода-перемычки DuPont", маленько испугался: дома-то они есть, но в систему, контролирующую залитие дома понятно чем, я бы их ставить не стал, как и беспаечную макетку. Только в прототип.

JBFW
11.11.2025 12:20В подобных колодцах лучше всего использовать самый обычный дренажный насос с датчиком-"лягушкой" (внутри - тот же геркон, а "закреплена" она на насосе и всплывает сама).
И лежит это всё на дне годами, и работает так же годами, пока не помрет наконец.Ротационный насос, не обязательно фирма-фирма, таких дешевых полно.
И не "Малыша" ("Ручеек" и т.п.), с их дикой вибрацией, они вам ил уплотнят в монолит.А вот для контроля и самоуспокоения - да, поставить внешний контроллер, и герконом к нему - ту же "лягушку" на длинном проводе, можно просто привязать её к рукоятке насоса.
Потому что лягушки эти иногда помирают, редко. Чтобы обе померли - это повезти должно.Ну и конечно "зачем там Python?!" )
Простейший контроль пина, и сообщение бросать в MQTT, а не сразу в телеграм.
Из MQTT его потом куда хош развести можно, хоть в телеграм, хоть на HomeAssistant, хоть в интеллектуальную систему подсчета количества сливов за период, чтобы оценивала, не слишком ли часто приходится это делать и не надо ли обратить внимание, вдруг что не так?
ptr128
11.11.2025 12:20сообщение бросать в MQTT
Если уже есть брокер. А если его нет, то установка одноплатника с брокером в разы увеличит стоимость решения. Так что не стоит размахивать "золотым молотком", а исходим из задачи.

shornikov
11.11.2025 12:20Все прекрасно работает на макетке, но в бою - увы.
Фабричные решения обычно лишены этих непонятных начинающим проблем.

nikolz
11.11.2025 12:20До кучи...
Если взять вот этот модуль

Вместо взятого в статье, то цена модуля составит не 300-600руб, а 140 руб
Кроме того, этот модуль примерно 3 раза меньше по длине.


Блок питания можно взять , например, такой:


и спрятать его в коробку вместе модулем ESP32, что по размерам как модуль в статье, но без блока питания.
Геркон можно взять такой же, но дешевле:


LAutour
11.11.2025 12:20По мини-модулю ESP32-C3 на картинке - это версия платы с неудачно разведенной антенной. Сам сталкивался: все было плохо уже при расстоянии передачи в пару метров.

ptr128
11.11.2025 12:20Подтверждаю. Такие намного лучше за те же деньги.
Зарядник на улице с совсем не герметичным USB разъемом я бы точно не оставлял, а разместил бы 220AC/5DC в том же корпусе.
Геркон - это хорошо, но явно надежней готовую лягушку (поплавковый выключатель) поставить, которая тоже с герконом.

Heggi
11.11.2025 12:20Я для автополива использовал емкостной датчик. Типа такого https://aliexpress.ru/item/1005006157573420.html
В целом ничего плохого сказать про него не могу

BlueBeard
11.11.2025 12:20Умный септик версия 2 esp8266, первая успешно пахала года с 17
контроль уровней в двух емкостях погружными датчиками, авто слив дренажной воды в за 70 метров лес, подогрев этой трассы в зимний период итд итп https://dobego.ru/foxhole/sensors/?textContains=septic-tank::


CitizenOfDreams
11.11.2025 12:20Сначала был дренажный насос с герконом. Идея простая: поплавок с герконом плавает, замыкает контакты при достижении уровня воды — насос включается. На деле оказалось, что при вибрации насос болтается, геркон залипает, а иногда просто «молчит как партизан».
Надежно работающий датчик с одной парой контактов у меня сделать не получилось, поэтому возьму Ардуину, напишу программу на Питоне и буду получать уведомления через Интернет, периодически перегружаясь по сторожевому таймеру. Звучит разумно...

Alex-ZiX
11.11.2025 12:20Я не понял из статьи две вещи:
Что за сюрпризы могут быть в унитазе? Для этого унитаз должен стоять ниже верхнего уровня нечистот в колодце. Вы же не хотите сказать, что колодец герметичный, а унитаз в подвале дома.
В статье колодец называется дренажным, хотя дренажный колодец предназначен для осадков и грунтовых вод. Тут же канализационный септик из бетонных колец. Зачем там насос и куда он откачивает то, что там накопилось? У меня такие же два колодца, связанные трубой - первый для более плотных масс, второй для более жидких. Когда они наполняются это время вызывать ассенизатор, а не качать то, что там накопилось, себе под ноги. Логично, что тогда эта автоматика должна заказывать откачку септика, а не включать насос.
Hackfaq
Непонятно какую проблему решали, ккк по мне тут нужен мониторинг насоса который сам должен включаться, насос должен работать автономно