Skip to content

fredy314/WaterTankController

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32 Tank Monitor - Система моніторингу та керування водяним баком

📋 Опис проекту

Система автоматичного моніторингу рівня води в баку з керуванням насосами на базі 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 для захисту

📱 Telegram інтеграція

  • Сповіщення про події:
    • Запуск системи
    • Зміна зон рівня води (10 зон)
    • Помилки роботи насосів
  • Налаштування зон через веб-інтерфейс
  • Збереження стану останнього повідомлення

🏠 HomeAssistant інтеграція (MQTT)

  • Автоматичне виявлення (MQTT Discovery)
  • Сенсори:
    • Відстань до води (см)
    • Об'єм води (л)
    • Швидкість зміни (л/хв)
    • Прогнозований час (хв)
  • Керування реле:
    • Перемикачі (ON/OFF)
    • Селектори режимів (manual/auto)
  • Публікація станів кожні 5-10 секунд
  • Availability топік для статусу підключення

📊 Логування

  • Автоматичне логування об'єму кожні 10 хвилин
  • Синхронізація часу через NTP
  • Збереження на LittleFS у форматі CSV
  • Веб-перегляд з графіками
  • Завантаження логів для аналізу

📁 Файловий менеджер

  • ESPWebFileManager для керування файлами
  • Перегляд, завантаження, видалення файлів на LittleFS
  • Доступ за адресою /files

🔄 OTA оновлення

  • ElegantOTA для оновлення прошивки через веб-інтерфейс
  • Доступ за адресою /update

📶 WiFi Manager

  • Автоматичне підключення до найкращої мережі зі списку
  • Підтримка кількох мереж з автоматичним вибором
  • Режим 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

Налаштування 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"

Веб-сервер (порт 80)

  • / - головна сторінка
  • /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

Брокер: 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

Зовнішні (Arduino Library Manager)

  • ESPAsyncWebServer
  • AsyncTCP
  • ElegantOTA
  • ArduinoJson
  • UniversalTelegramBot
  • WiFiClientSecure
  • PubSubClient (для MQTT)

З локальної бібліотеки ESPWebUtils

  • WiFiManager
  • AuthenticationMiddleware
  • ESPWebFileManager

Примітка: Бібліотека ESPWebUtils має бути встановлена в ~/Arduino/libraries/ESPWebUtils

Встановлення через Arduino IDE

Sketch -> Include Library -> Manage Libraries
Шукайте та встановлюйте кожну бібліотеку

🚀 Встановлення та налаштування

1. Підготовка середовища

# Встановіть Arduino IDE або PlatformIO
# Додайте підтримку ESP32:
# File -> Preferences -> Additional Board Manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

2. Створення конфігураційного файлу

ВАЖЛИВО: Створіть файл 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"

3. Налаштування параметрів бака

Відредагуйте Constants.h:

  • Параметри бака (розміри, рівні)
  • Піни підключення датчиків та реле

4. Компіляція та завантаження

Board: ESP32C3 Dev Module
Upload Speed: 921600
Flash Size: 4MB
Partition Scheme: Default

5. Перша конфігурація

  1. Завантажте прошивку
  2. Відкрийте Serial Monitor (115200 baud)
  3. Дочекайтеся підключення до WiFi
    • Якщо жодна мережа зі списку недоступна, створюється AP
    • SSID AP: ESP32-XXXXXX
  4. Відкрийте браузер:
    • За IP: http://192.168.0.245
    • Або через mDNS: http://tank-monitor.local
  5. Введіть логін та пароль з secrets.h

📊 API Endpoints

GET /sensor_data

{
  "distance": 29.29,
  "volume": 184.25,
  "rate": 0.44,
  "estimated": 120.5
}

GET /relay_states

{
  "8": {
    "pin": 8,
    "num": 1,
    "state": true,
    "mode": 1
  },
  "10": {
    "pin": 10,
    "num": 2,
    "state": false,
    "mode": 1
  }
}

GET /set_relay?pin=8&state=on

Відповідь: OK

GET /set_relay_mode?pin=8&mode=auto

Відповідь: Mode updated.

🏠 HomeAssistant налаштування

Автоматичне виявлення

Після підключення до MQTT брокера пристрій автоматично з'явиться в HomeAssistant:

  1. Settings -> Devices & Services -> MQTT
  2. Знайдіть "Tank Monitor"
  3. Всі сенсори та керування будуть доступні

Приклад автоматизації

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') }} л"

🔍 Моніторинг та діагностика

Serial Monitor

WiFi connected
MQTT connected
Distance: 29.29 cm
Volume: 184.25 L
Rate: 0.44 L/min

Веб-інтерфейс

  • Поточні показники в реальному часі
  • Графіки історії
  • Стани реле та режими

MQTT Explorer

Підключіться до mqtt.lan для перегляду всіх топіків

🐛 Усунення проблем

WiFi не підключається

  • Перевірте SSID та пароль в secrets.h
  • Перевірте силу сигналу
  • WiFiManager автоматично перепідключається
  • Якщо жодна мережа недоступна, створюється AP для налаштування

MQTT не підключається

  • Перевірте доступність mqtt.lan
  • Перевірте Serial Monitor для помилок
  • Система автоматично перепідключається кожні 5 секунд

Неточні вимірювання

  • Перевірте підключення HC-SR04
  • Відкалібруйте параметри в Constants.h
  • Система використовує ковзне вікно для згладжування

Реле не перемикаються

  • Перевірте режим роботи (manual/auto)
  • Перевірте підключення реле
  • Перевірте логи в Serial Monitor

📝 Ліцензія

Проект створено для особистого використання.

👤 Автор

Fredy - система моніторингу водяного бака

🔄 Версії

v2.1 (2026-02-10)

  • ✅ Додано WiFiManager для автоматичного керування WiFi
  • ✅ Додано ESPWebFileManager для керування файлами
  • ✅ Створено secrets.h для конфігурації
  • ✅ Винесено всі credentials з коду
  • ✅ Підтримка mDNS hostname

v2.0 (2026-02-10)

  • ✅ Додано MQTT інтеграцію з HomeAssistant
  • ✅ Замінено AuthenticationMiddleware на бібліотечну версію
  • ✅ HomeAssistant Discovery для автоматичного виявлення
  • ✅ Керування реле через HomeAssistant

v1.0

  • ✅ Базовий моніторинг бака
  • ✅ Веб-інтерфейс
  • ✅ Telegram сповіщення
  • ✅ Автоматичне керування насосами
  • ✅ Логування даних
  • ✅ OTA оновлення

About

Система моніторингу та керування водяним баком

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors