Hệ thống giám sát nguồn điện thông minh với cảnh báo tự động và OTA updates qua GitHub.
- 🔌 Giám sát nguồn điện 24/7
- 🌙 Cảnh báo ban đêm (21:30, mỗi 15 phút)
- ⏰ Cảnh báo hoạt động liên tục (>3 giờ, mỗi 30 phút)
- 📊 Đếm số lần bật nguồn hàng ngày
- 📱 Thông báo Telegram real-time
- 📝 Log data lên Google Sheets
- 🔄 OTA firmware update tự động
- 💾 Lưu cấu hình vào NVRAM (không mất khi mất điện)
- ESP32 Dev Module
- ESP32-C6
- ESP32-S3
- Hoặc bất kỳ board ESP32 nào
Khi nguồn chính bật → ESP32 được cấp điện → Gửi cảnh báo
git clone https://github.com/honghuynhit/esp32-power-monitor.git
cd esp32-power-monitorFile → Open → ESP32_Power_Monitor/ESP32_Power_Monitor.ino
Tools → Board → Boards Manager → Tìm "esp32" → Install
Tools → Board → ESP32 Arduino → ESP32 Dev Module
Tools → Partition Scheme → Minimal SPIFFS (1.9MB APP with OTA)
Tools → Upload Speed → 921600
Tools → Port → [Chọn cổng của ESP32]
Mở file ESP32_Power_Monitor.ino, uncomment dòng:
#define FIRST_TIME_SETUPUpload code và mở Serial Monitor (115200 baud):
Tools → Serial Monitor
Baud rate: 115200
Nhập thông tin khi được yêu cầu:
1. WiFi SSID: [Tên WiFi của bạn]
2. WiFi Password: [Mật khẩu WiFi]
3. Google Webhook URL: [URL từ Google Apps Script]
4. Telegram Bot Token: [Token từ BotFather]
5. Telegram Chat ID: [ID chat của bạn]
6. Firmware Version URL:
https://github.com/honghuynhit/esp32-power-monitor/releases/latest/download/version.txt
7. Firmware Binary URL:
https://github.com/honghuynhit/esp32-power-monitor/releases/latest/download/firmware.bin
Sau khi nhập xong:
- Comment lại dòng
// #define FIRST_TIME_SETUP - Upload lại code
- ESP32 sẽ tự động chạy với cấu hình đã lưu
- Tìm @BotFather trên Telegram
- Gửi
/newbotvà làm theo hướng dẫn - Lưu Bot Token (dạng:
123456:ABC-DEF...) - Tìm @userinfobot để lấy Chat ID
Tạo Apps Script:
function doPost(e) {
const sheet = SpreadsheetApp.openById('YOUR_SPREADSHEET_ID').getActiveSheet();
const data = JSON.parse(e.postData.contents);
sheet.appendRow([
new Date(),
data.status,
data.message,
data.daily_count || '',
data.version || '',
data.ip || ''
]);
return ContentService.createTextOutput(JSON.stringify({success: true}));
}Deploy:
- Click Deploy → New deployment
- Type: Web app
- Execute as: Me
- Who has access: Anyone
- Copy Web app URL
Mỗi khi push code mới:
- GitHub Actions tự động build firmware
- Tạo release mới với version từ
version.txt - ESP32 tự động kiểm tra update mỗi 6 giờ
- Download và cài đặt firmware mới
- Restart với version mới
# 1. Cập nhật version
echo "1.0.8" > version.txt
# 2. Commit và push
git add .
git commit -m "Release v1.0.8"
git push
# 3. GitHub Actions sẽ tự động build và release╔════════════════════════════════════════╗
║ ESP32 Power Monitor v1.0.7 ║
║ + NVRAM + OTA + GitHub Releases ║
╚════════════════════════════════════════╝
✓ Đã load credentials từ NVRAM
WiFi SSID: MyWiFi
Device: ESP32-Power-Monitor-PNP
Current Version: 1.0.7
⚡ NGUỒN BẬT - Lần #3 hôm nay
📋 Chế độ cảnh báo:
1️⃣ Ban đêm: 21:30, mỗi 15 phút
2️⃣ Hoạt động liên tục: >3h, mỗi 30 phút
[21:30] Alert:1 | Run:0h5m | Bật:#3
[21:45] Alert:2 | Run:0h20m | Bật:#3
⚡ NGUỒN BẬT
🔢 Lần #3
📦 v1.0.7
⏰ 30/12/2025 21:30:15
⚠️ CẢNH BÁO
🔌 Nguồn chưa tắt
🚨 KHẨN CẤP #2
🔌 Nguồn chưa tắt
⏰ HOẠT ĐỘNG LÂU
🔌 3h 15m
📊 Lần #1
🆕 ESP32-Power-Monitor-PNP
📦 1.0.6 → 1.0.7
🔄 Đang cập nhật...
✅ ESP32-Power-Monitor-PNP
📦 v1.0.7
💾 1032 KB
🔄 Khởi động lại...
const int NIGHT_CHECK_HOUR = 21; // Giờ bắt đầu kiểm tra
const int NIGHT_CHECK_MINUTE = 30; // Phút bắt đầu
const int NIGHT_ALERT_INTERVAL = 15; // Cảnh báo mỗi 15 phútconst unsigned long LONG_RUN_THRESHOLD = 3 * 60 * 60 * 1000; // 3 giờ
const unsigned long LONG_RUN_INTERVAL = 30 * 60 * 1000; // 30 phútconst unsigned long OTA_CHECK_INTERVAL = 6 * 60 * 60 * 1000; // 6 giờChỉ cần thay đổi device name:
const char* DEVICE_NAME = "ESP32-Power-Monitor-PNC";Mỗi thiết bị sẽ lưu credentials riêng vào NVRAM của nó.
✗ Không thể kết nối WiFi!
Fix:
- Kiểm tra SSID và password
- Đảm bảo WiFi là 2.4GHz (ESP32 không hỗ trợ 5GHz)
- Kiểm tra router có bật không
❌ HTTP GET failed: 302
Fix:
- Code mới đã xử lý redirect tự động
- Kiểm tra GitHub release đã có file
firmware.binvàversion.txt - Test URL trên browser
Fix:
- Kiểm tra baud rate: 115200
- Nhấn nút EN/RST trên ESP32
- Thử cổng USB khác
Fix:
- Đảm bảo baud rate: 115200 (không phải 921600)
- Line ending: Newline hoặc Both NL & CR
- Thử dùng
screenhoặcminicomthay vì Arduino Serial Monitor
esp32-power-monitor/
├── .github/
│ └── workflows/
│ └── build.yml # GitHub Actions workflow
├── ESP32_Power_Monitor/
│ └── ESP32_Power_Monitor.ino # Main code
├── version.txt # Current version
├── firmware.bin # Built firmware (auto-generated)
└── README.md # This file
⚠️ Không commit WiFi password vào Git⚠️ Không commit Telegram token vào Git- ✅ Tất cả credentials được lưu trong NVRAM của ESP32
- ✅ Chỉ setup một lần, không cần hardcode
- v1.0.7 - Fix OTA redirect handling
- v1.0.6 - Add device name to notifications
- v1.0.5 - Improve version management
- v1.0.4 - Add OTA progress bar
- v1.0.3 - Initial release with OTA
Pull requests are welcome! For major changes, please open an issue first.
MIT License - see LICENSE file for details
Hong Huynh
- GitHub: @honghuynhit
- ESP32 Arduino Core
- Arduino HTTPClient
- Telegram Bot API
- Google Apps Script
Made with ❤️ for smart home automation