Система автоматичного моніторингу рівня води в баку з керуванням насосами на базі ESP32-C3. Проект включає веб-інтерфейс, інтеграцію з Telegram та HomeAssistant через MQTT.
- Вимірювання відстані до поверхні води ультразвуковим датчиком HC-SR04
- Розрахунок об'єму води в баку (літри)
- Аналіз швидкості зміни рівня води (л/хв)
- Прогнозування часу наповнення/спорожнення
- Ковзне вікно для згладжування показань (60 секунд)
- Лінійна регресія для точного розрахунку швидкості
- 2 реле для керування насосами:
- Реле 1 (PIN 8) - насос подачі води в будинок
- Реле 2 (PIN 10) - насос подачі з свердловини
- Режими роботи:
- Auto - автоматичне керування за рівнем
- Manual - ручне керування через API/HomeAssistant
- Захист від помилок:
- Виявлення "застрягання" насоса (10 хв без зміни рівня)
- Блокування на 1 годину після помилки
- Сповіщення в Telegram про помилки
- Головна сторінка з поточними показниками
- Графіки історії рівня води (Highcharts)
- Керування реле через веб-інтерфейс
- Налаштування кількості зон для Telegram
- Файловий менеджер для керування файлами на LittleFS
- Завантаження логів у форматі CSV
- Аутентифікація Digest Auth для захисту
- Сповіщення про події:
- Запуск системи
- Зміна зон рівня води (10 зон)
- Помилки роботи насосів
- Налаштування зон через веб-інтерфейс
- Збереження стану останнього повідомлення
- Автоматичне виявлення (MQTT Discovery)
- Сенсори:
- Відстань до води (см)
- Об'єм води (л)
- Швидкість зміни (л/хв)
- Прогнозований час (хв)
- Керування реле:
- Перемикачі (ON/OFF)
- Селектори режимів (manual/auto)
- Публікація станів кожні 5-10 секунд
- Availability топік для статусу підключення
- Автоматичне логування об'єму кожні 10 хвилин
- Синхронізація часу через NTP
- Збереження на LittleFS у форматі CSV
- Веб-перегляд з графіками
- Завантаження логів для аналізу
- ESPWebFileManager для керування файлами
- Перегляд, завантаження, видалення файлів на LittleFS
- Доступ за адресою
/files
- ElegantOTA для оновлення прошивки через веб-інтерфейс
- Доступ за адресою
/update
- Автоматичне підключення до найкращої мережі зі списку
- Підтримка кількох мереж з автоматичним вибором
- Режим AP якщо жодна мережа недоступна
- Автоматичне перепідключення при втраті зв'язку
- mDNS hostname для доступу через
tank-monitor.local
- ESP32-C3 - основний контролер
- HC-SR04 - ультразвуковий датчик відстані
- 2x реле модуль - керування насосами
HC-SR04:
TRIG -> GPIO 7
ECHO -> GPIO 6
Реле:
Реле 1 (Будинок) -> GPIO 8
Реле 2 (Свердловина) -> GPIO 10
Ширина: 60 см
Довжина: 86 см
Порожній бак: 65 см (відстань від датчика)
Повний бак: 25 см (відстань від датчика)
Максимальний об'єм: ~206 літрівНалаштування WiFi зберігаються в secrets.h:
- Підтримка кількох мереж
- Автоматичний вибір найкращої
- Статична IP або DHCP
- mDNS hostname:
tank-monitor.local
Приклад конфігурації:
inline WiFiNetwork wifiNetworks[] = {
{"HomeF", "password"},
{"BackupNetwork", "password2"}
};
#define STATIC_IP IPAddress(192, 168, 0, 245)
#define WIFI_HOSTNAME "tank-monitor"/- головна сторінка/sensor_data- JSON з даними сенсорів/relay_states- JSON зі станами реле/set_relay?pin=X&state=on/off- керування реле/set_relay_mode?pin=X&mode=manual/auto- зміна режиму/logs- список логів/log?date=YYYY-MM-DD- графік за дату/download_log?date=YYYY-MM-DD- завантаження CSV/api/status- повний статус системи/files- файловий менеджер (новий!)/update- OTA оновлення
Брокер: mqtt.lan:1883
Client ID: esp32_tank_monitor
Device ID: tank_monitor_01
Base Topic: homeassistant/
MySketch/
├── MySketch.ino # Головний файл
├── secrets.h # Конфігурація (WiFi, Auth, Telegram) - НЕ КОМІТИТИ!
├── secrets.h.example # Приклад конфігурації
├── Constants.h # Константи та налаштування
├── Config.h/cpp # Збереження конфігурації
├── SensorMonitor.h/cpp # Робота з HC-SR04
├── TankMonitor.h/cpp # Розрахунки об'єму та швидкості
├── RelayControl.h/cpp # Керування реле
├── PagesHandlers.h/cpp # Обробники веб-сторінок
├── Log.h/cpp # Логування даних
├── TelegramNotifier.h/cpp # Telegram інтеграція
├── MqttManager.h/cpp # MQTT інтеграція
├── html_templates.h # HTML шаблони
└── README.md # Цей файл
- WiFi
- LittleFS
- ESPAsyncWebServer
- AsyncTCP
- ElegantOTA
- ArduinoJson
- UniversalTelegramBot
- WiFiClientSecure
- PubSubClient (для MQTT)
- WiFiManager
- AuthenticationMiddleware
- ESPWebFileManager
Примітка: Бібліотека ESPWebUtils має бути встановлена в
~/Arduino/libraries/ESPWebUtils
Sketch -> Include Library -> Manage Libraries
Шукайте та встановлюйте кожну бібліотеку
# Встановіть Arduino IDE або PlatformIO
# Додайте підтримку ESP32:
# File -> Preferences -> Additional Board Manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonВАЖЛИВО: Створіть файл secrets.h на основі прикладу:
cp secrets.h.example secrets.hВідредагуйте secrets.h зі своїми даними:
// WiFi мережі (можна додати кілька)
inline WiFiNetwork wifiNetworks[] = {
{"YourSSID", "YourPassword"},
{"BackupSSID", "BackupPassword"}
};
// Мережеві налаштування
#define WIFI_HOSTNAME "tank-monitor"
#define STATIC_IP IPAddress(192, 168, 0, 245) // або (0,0,0,0) для DHCP
// Аутентифікація
#define AUTH_USERNAME "admin"
#define AUTH_PASSWORD "your-password"
// Telegram
#define TELEGRAM_BOT_TOKEN "your-bot-token"
#define TELEGRAM_CHAT_ID "your-chat-id"Відредагуйте Constants.h:
- Параметри бака (розміри, рівні)
- Піни підключення датчиків та реле
Board: ESP32C3 Dev Module
Upload Speed: 921600
Flash Size: 4MB
Partition Scheme: Default
- Завантажте прошивку
- Відкрийте Serial Monitor (115200 baud)
- Дочекайтеся підключення до WiFi
- Якщо жодна мережа зі списку недоступна, створюється AP
- SSID AP:
ESP32-XXXXXX
- Відкрийте браузер:
- За IP:
http://192.168.0.245 - Або через mDNS:
http://tank-monitor.local
- За IP:
- Введіть логін та пароль з
secrets.h
{
"distance": 29.29,
"volume": 184.25,
"rate": 0.44,
"estimated": 120.5
}{
"8": {
"pin": 8,
"num": 1,
"state": true,
"mode": 1
},
"10": {
"pin": 10,
"num": 2,
"state": false,
"mode": 1
}
}Відповідь: OK
Відповідь: Mode updated.
Після підключення до MQTT брокера пристрій автоматично з'явиться в HomeAssistant:
- Settings -> Devices & Services -> MQTT
- Знайдіть "Tank Monitor"
- Всі сенсори та керування будуть доступні
automation:
- alias: "Сповіщення про низький рівень"
trigger:
- platform: numeric_state
entity_id: sensor.tank_monitor_volume
below: 50
action:
- service: notify.mobile_app
data:
message: "Рівень води низький: {{ states('sensor.tank_monitor_volume') }} л"WiFi connected
MQTT connected
Distance: 29.29 cm
Volume: 184.25 L
Rate: 0.44 L/min
- Поточні показники в реальному часі
- Графіки історії
- Стани реле та режими
Підключіться до mqtt.lan для перегляду всіх топіків
- Перевірте SSID та пароль в
secrets.h - Перевірте силу сигналу
- WiFiManager автоматично перепідключається
- Якщо жодна мережа недоступна, створюється AP для налаштування
- Перевірте доступність
mqtt.lan - Перевірте Serial Monitor для помилок
- Система автоматично перепідключається кожні 5 секунд
- Перевірте підключення HC-SR04
- Відкалібруйте параметри в
Constants.h - Система використовує ковзне вікно для згладжування
- Перевірте режим роботи (manual/auto)
- Перевірте підключення реле
- Перевірте логи в Serial Monitor
Проект створено для особистого використання.
Fredy - система моніторингу водяного бака
- ✅ Додано WiFiManager для автоматичного керування WiFi
- ✅ Додано ESPWebFileManager для керування файлами
- ✅ Створено secrets.h для конфігурації
- ✅ Винесено всі credentials з коду
- ✅ Підтримка mDNS hostname
- ✅ Додано MQTT інтеграцію з HomeAssistant
- ✅ Замінено AuthenticationMiddleware на бібліотечну версію
- ✅ HomeAssistant Discovery для автоматичного виявлення
- ✅ Керування реле через HomeAssistant
- ✅ Базовий моніторинг бака
- ✅ Веб-інтерфейс
- ✅ Telegram сповіщення
- ✅ Автоматичне керування насосами
- ✅ Логування даних
- ✅ OTA оновлення