Skip to content

BrainFromUkraine/Smart-DC-UPS-Wi-Fi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ Інтернет без світла - Smart DC UPS для Wi-Fi роутера

Розумна система безперебійного живлення для Wi-Fi роутера з моніторингом через INA219

Smart Wi-Fi UPS - це інтелектуальна система моніторингу та керування живленням Wi-Fi роутера, яка забезпечує безперебійний інтернет навіть при відключенні електроенергії. Система відстежує стан мережі 240V, заряд/розряд батареї, веде детальні логи та надає зручний веб-інтерфейс.

📺 Відео

Перше відео проекту: Дивитись на YouTube

✨ Основні можливості

  • 🔌 Автоматична детекція відключення світла - миттєве визначення втрати мережі 240V
  • 🔋 Моніторинг батареї в реальному часі - відстеження струму, напруги та стану заряду
  • 📊 Підрахунок ємності - точний облік mAh при розряді батареї
  • 🌐 Веб-інтерфейс - зручне керування та моніторинг через браузер
  • 📡 Wi-Fi Provisioning - легке підключення до домашньої мережі через AP режим
  • 💾 CSV логування - збереження всіх даних для подальшого аналізу
  • Live оновлення - SSE (Server-Sent Events) для моніторингу в реальному часі
  • 🎯 Автокалібрування - автоматичне визначення baseline струму та полярності
  • 📱 Адаптивний дизайн - працює на телефонах, планшетах та комп'ютерах

🎯 Призначення

Система забезпечує:

  • ✅ Безперебійний інтернет при відключенні світла
  • ✅ Моніторинг часу автономної роботи
  • ✅ Статистику відключень електроенергії
  • ✅ Контроль стану батареї
  • ✅ Попередження про низький заряд

🛠️ Апаратні вимоги

Основні компоненти

  • ESP32 - мікроконтролер з Wi-Fi (будь-яка плата з MicroPython)
  • INA219 - високоточний датчик струму/напруги (I2C)
  • Shunt резистор - 0.1Ω (можна налаштувати під ваші потреби)
  • Акумулятор - Li-ion/LiFePO4 (залежно від потужності роутера)
  • DC-DC перетворювач - для живлення роутера від батареї

Схема підключення INA219

ESP32          INA219
------         ------
GPIO 22  --->  SCL
GPIO 21  --->  SDA
3.3V     --->  VCC
GND      --->  GND

Підключення в систему живлення

[Мережа 240V] --> [Зарядний пристрій] --> [Батарея] --> [INA219] --> [DC-DC] --> [Wi-Fi Роутер]
                                              |
                                           [ESP32]

📦 Встановлення

Крок 1: Підготовка ESP32

  1. Завантажте MicroPython firmware для ESP32:

  2. Прошийте ESP32 за допомогою esptool:

    # Очистка flash
    esptool.py --chip esp32 --port COM3 erase_flash
    
    # Завантаження firmware
    esptool.py --chip esp32 --port COM3 write_flash -z 0x1000 esp32-firmware.bin

Крок 2: Завантаження коду

  1. Встановіть ampy для завантаження файлів:

    pip install adafruit-ampy
  2. Завантажте main.py на ESP32:

    ampy --port COM3 put main.py

    Або використовуйте Thonny IDE для зручнішого завантаження.

Крок 3: Перший запуск

  1. Перезавантажте ESP32 (натисніть кнопку RESET)
  2. ESP32 автоматично створить Wi-Fi точку доступу:
    • SSID: INA-SETUP
    • Пароль: 12345678
  3. Підключіться до цієї мережі з телефону або комп'ютера
  4. Відкрийте браузер та перейдіть: http://192.168.4.1

🚀 Початкове налаштування

1. Калібрування baseline

При першому запуску система автоматично:

  • Виміряє базовий струм (baseline) при увімкненій мережі 240V
  • Визначить рівень шуму
  • Важливо: НЕ змінюйте навантаження протягом перших 3 секунд!

2. Тест полярності

Система попросить виконати тест:

  1. Вимкніть мережу 240V на ~3 секунди
  2. Увімкніть знову
  3. Система автоматично визначить правильну полярність вимірювань

3. Підключення до Wi-Fi

Через веб-інтерфейс:

  1. Натисніть "Scan Wi-Fi"
  2. Виберіть вашу домашню мережу зі списку
  3. Введіть пароль
  4. Натисніть "Connect"
  5. Після успішного підключення AP режим автоматично вимкнеться через 5 секунд

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

Головна сторінка

Після підключення до пристрою (http://192.168.4.1 або IP в локальній мережі):

Функції керування:

  • 🔍 Scan Wi-Fi - сканування доступних мереж
  • 🔗 Connect - підключення до вибраної Wi-Fi мережі
  • 📥 Download CSV - завантаження файлу з логами
  • 🔄 Restart - перезавантаження ESP32
  • 🗑️ Forget Wi-Fi - видалення збережених налаштувань (увімкне AP режим)

Live моніторинг показує:

  • 📊 Поточний стан системи (CHARGING / DISCHARGE / IDLE)
  • ⚡ Напругу шини (Bus Voltage)
  • 🔋 Струм (Raw, Total, Average в mA)
  • 📈 Накопичені mAh при розряді
  • 📡 Статус Wi-Fi підключення
  • 🕐 Час роботи (uptime)

Live логи

Веб-інтерфейс відображає логи в реальному часі через SSE:

  • Зелений текст на чорному фоні (як термінал)
  • Автоматичне прокручування до останнього запису
  • Історія останніх 120 записів

⚙️ Конфігурація

Відредагуйте константи на початку файлу main.py:

I2C налаштування

I2C_ID   = 0        # ID шини I2C
SCL_PIN  = 22       # GPIO для SCL
SDA_PIN  = 21       # GPIO для SDA
I2C_FREQ = 100000   # Частота I2C (100 kHz)

INA219 налаштування

INA_ADDR   = 0x40   # I2C адреса INA219
SHUNT_OHMS = 0.1    # Опір shunt резистора в Ом

Пороги детекції

THRESH_CHARGE_mA    = -15   # Поріг заряду (мінус = струм йде в батарею)
THRESH_DISCHARGE_mA =  15   # Поріг розряду (плюс = струм йде з батареї)

Wi-Fi AP налаштування

AP_SSID = "INA-SETUP"      # Назва точки доступу
AP_PASS = "12345678"       # Пароль (мінімум 8 символів)
AP_CH   = 6                # Канал Wi-Fi

Інші параметри

SAMPLE_SEC = 1      # Інтервал вимірювань (секунди)
WIN_SIZE   = 6      # Розмір ковзного вікна для усереднення
RING_MAX   = 120    # Кількість записів в буфері для веб-інтерфейсу

📊 Формат CSV логів

Файл ina_log.csv зберігається на ESP32 та містить:

time,ms,uptime_s,bus_V,raw_mA,itotal_mA,avg_mA,state,mAh
12:34:56,1234567,123.4,12.345,123.4,23.4,22.1,IDLE,0.123
12:34:57,1235567,124.4,12.340,125.8,25.8,23.5,MAINS_LOST_DISCHARGE,0.130

Опис колонок:

  • time - час запису (HH:MM:SS)
  • ms - мілісекунди з моменту запуску
  • uptime_s - час роботи в секундах
  • bus_V - напруга на шині (Вольти)
  • raw_mA - сирий виміряний струм (міліампери)
  • itotal_mA - струм відносно baseline (міліампери)
  • avg_mA - середній струм за ковзним вікном (міліампери)
  • state - стан системи
  • mAh - накопичені міліампер-години при розряді

🔍 Стани системи

Система автоматично визначає три основні стани:

🟢 MAINS_OK_CHARGING

  • Мережа 240V присутня
  • Батарея заряджається
  • Струм негативний (йде в батарею)
  • Роутер живиться від мережі

🔴 MAINS_LOST_DISCHARGE

  • Мережа 240V відсутня (відключили світло!)
  • Батарея розряджається
  • Струм позитивний (йде з батареї)
  • Роутер живиться від батареї
  • Підраховуються витрачені mAh

⚪ IDLE

  • Стабільний стан
  • Немає значних змін струму
  • Система в режимі очікування

🌐 API Endpoints

Система надає REST API для інтеграції:

GET /

Головна сторінка веб-інтерфейсу (HTML)

GET /events

SSE (Server-Sent Events) stream для live оновлень логів

GET /api/status

Отримати поточний статус системи

Відповідь:

{
  "sta_connected": true,
  "sta_ip": "192.168.1.100",
  "ap_on": false,
  "state": "IDLE",
  "mAh": 123.456,
  "baseline_mA": 50.2,
  "invert": false
}

GET /api/scan

Сканування доступних Wi-Fi мереж

Відповідь:

{
  "ok": true,
  "networks": [
    {
      "ssid": "MyHomeWiFi",
      "rssi": -45,
      "ch": 6,
      "auth": 3
    }
  ]
}

POST /api/connect

Підключення до Wi-Fi мережі

Запит:

{
  "ssid": "MyHomeWiFi",
  "pwd": "mypassword123"
}

Відповідь:

{
  "ok": true,
  "ip": "192.168.1.100"
}

POST /api/restart

Перезавантаження ESP32

POST /api/forget

Видалення збережених налаштувань Wi-Fi та увімкнення AP режиму

GET /api/download

Завантаження CSV файлу з логами

🔧 Налагодження

Перегляд логів через Serial

Підключіться до ESP32 через Serial порт (швидкість 115200):

Windows:

# Використовуйте PuTTY або
python -m serial.tools.miniterm COM3 115200

Linux/Mac:

screen /dev/ttyUSB0 115200
# або
minicom -D /dev/ttyUSB0 -b 115200

Типові проблеми та рішення

❌ Не можу підключитися до AP режиму

Рішення:

  • Перевірте правильність пароля (12345678 за замовчуванням)
  • Переконайтеся, що ви підключаєтесь до мережі INA-SETUP
  • Перезавантажте ESP32
  • Перевірте, чи не заблоковано AP режим файрволом

❌ Неправильні показники струму

Рішення:

  • Перевірте фізичне підключення INA219 (SCL, SDA, VCC, GND)
  • Переконайтеся, що SHUNT_OHMS відповідає вашому резистору
  • Виконайте повторне калібрування (перезавантажте ESP32)
  • Перевірте I2C адресу (за замовчуванням 0x40)

❌ Wi-Fi не підключається до домашньої мережі

Рішення:

  • Перевірте правильність SSID та пароля
  • Переконайтеся, що мережа працює на частоті 2.4GHz (ESP32 не підтримує 5GHz)
  • Перевірте силу сигналу (RSSI має бути вище -80 dBm)
  • Спробуйте перезавантажити роутер

❌ CSV файл не створюється

Рішення:

  • Перевірте наявність вільного місця на ESP32
  • Переконайтеся, що файлова система змонтована
  • Спробуйте видалити старий файл через REPL

❌ Веб-інтерфейс не відкривається

Рішення:

  • Перевірте IP адресу (192.168.4.1 для AP або отриману від DHCP)
  • Спробуйте інший браузер
  • Очистіть кеш браузера
  • Перевірте, чи запущений веб-сервер (дивіться Serial логи)

📈 Приклади використання

Розрахунок часу автономної роботи

Якщо ваш роутер споживає 500mA, а батарея має ємність 10000mAh:

Час роботи = 10000mAh / 500mA = 20 годин

Система покаже реальне споживання та залишок ємності в mAh.

Моніторинг відключень світла

Аналізуйте CSV файл для визначення:

  • Частоти відключень
  • Тривалості відключень
  • Споживання в різний час доби
  • Ефективності батареї

Інтеграція з Home Assistant

Використовуйте API endpoints для інтеграції з системами розумного дому.

🛡️ Безпека

Рекомендації:

  • ✅ Змініть пароль AP (AP_PASS) на більш складний
  • ✅ Використовуйте сильний пароль для домашньої Wi-Fi
  • ✅ Регулярно оновлюйте firmware MicroPython
  • ✅ Не відкривайте порт 80 в інтернет без VPN
  • ✅ Використовуйте захищену мережу для доступу

📝 Ліцензія

MIT License - використовуйте вільно для особистих та комерційних проектів.

🤝 Внесок у проект

Вітаються pull requests та пропозиції!

Для великих змін:

  1. Відкрийте issue для обговорення
  2. Створіть fork репозиторію
  3. Внесіть зміни
  4. Створіть pull request

🙏 Подяки

Дякую всім, хто підтримує проект та надає зворотний зв'язок!

📧 Контакти


Проект: Інтернет без світла ⚡
Версія: 1.0.0
Платформа: ESP32 + MicroPython
Датчик: INA219
Призначення: Smart DC UPS для Wi-Fi роутера

Створено з ❤️ для безперебійного інтернету

About

## Опис українською: __Розумний UPS з WiFi моніторингом на ESP32 та INA219 для безперебійного інтернету

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages