# ESP32 Monitor CTNET

Sistema de monitoreo de voltaje y control de relés para ESP32 con interfaz web, integración Telegram y gestión de baterías LiFePO4 via Bluetooth BMS.

## 📋 Características

- **Monitoreo de Voltaje**: 12V DC y AC (220V)
- **Control de Relés**: 3 relés con lógica Active LOW
- **Interfaz Web**: Dashboard moderno y responsive
- **Telegram Bot**: Notificaciones y control remoto
- **BMS Bluetooth**: Monitoreo de baterías LiFePO4 (hasta 3 dispositivos)
- **Auto-gestión**: Activación automática de respaldo por bajo voltaje
- **Event Logger**: Registro de eventos del sistema

## 🔧 Hardware Requerido

- **ESP32 Dev Module**
- **Sensor ZMPT101B** (medición AC)
- **Módulo de relés 3 canales** (5V, Active LOW)
- **Divisor de voltaje** para 12V (R1=30kΩ, R2=7.5kΩ)
- **BMS JBD** (opcional, para baterías LiFePO4)

### Conexiones

| Pin ESP32 | Función |
|-----------|---------|
| GPIO34 | Entrada 12V (divisor) |
| GPIO35 | Entrada AC (ZMPT101B) |
| GPIO25 | Relé 1 (Prueba respaldo) |
| GPIO26 | Relé 2 (Reinicio equipos) |
| GPIO27 | Relé 3 (Equipos respaldo) |

## 📦 Dependencias

```ini
ArduinoJson @ ^6.21.5
UniversalTelegramBot @ ^1.3.0
NimBLE-Arduino @ ^1.4.1
```

## 🚀 Compilación y Carga

### Configuración Inicial

1. Edita `src/config.h` o las constantes en `main.cpp`:
   - WiFi credentials
   - Telegram bot token y chat ID
   - Contraseña de relés

### Compilar

```bash
pio run
```

### Cargar Firmware (USB)

```bash
pio run --target upload
```

**Nota**: OTA no está disponible debido a conflictos de memoria con servicios activos (SSL, Bluetooth).

## 🌐 Uso

### Acceso Web

1. Conecta el ESP32 al WiFi
2. Abre `http://[IP_ESP32]/`
3. Dashboard muestra:
   - Voltaje 12V y AC
   - Estado de red eléctrica
   - Control de relés (requiere contraseña)
   - Estado de baterías BMS
   - Log de eventos

### Control de Relés

**Contraseña**: `Colonia1030*` (cambiar en código)

- **Relé 1 (Prueba respaldo)**: ON = Corta red, activa respaldo
- **Relé 2 (Reinicio)**: Pulso de 5 segundos para reiniciar equipos
- **Relé 3 (Equipos respaldo)**: ON = Apaga equipos para ahorrar batería

### Telegram

El bot envía notificaciones automáticas de:
- Cambios de estado de red (normal/baja/sin red)
- Batería baja (< 11.8V configurab)
- Activaciones de relés
- Alertas de BMS

## ⚙️ Configuración Avanzada

### Calibración AC

En el dashboard web, sección "Calibración AC", ingresa el voltaje real medido con multímetro para ajustar la lectura.

### Umbrales de Voltaje

Editaren `config.h`:
```cpp
umbrales.red_baja = 190.0;      // Voltaje AC bajo
umbrales.sin_red = 50.0;        // Umbral sin red
umbrales.bateria_baja = 11.8;   // Batería baja
```

### BMS Bluetooth

1. Escanea dispositivos desde el dashboard
2. Agrega MAC addresses manualmente
3. El ESP32 se conecta automáticamente

## 📊 Estructura del Proyecto

```
src/
├── main.cpp              # Código principal (67KB)
├── config.h              # Configuración y constantes
├── relay_control.cpp/h   # Control de relés
├── event_logger.cpp/h    # Sistema de eventos
├── telegram_handler.cpp/h# Bot de Telegram
├── server_endpoint.cpp/h # Envío de datos a servidor
└── bms_bluetooth.cpp/h   # Gestión BMS Bluetooth
```

## 🔒 Seguridad

- Contraseña para control de relés
- Contraseña para ArduinoOTA
- WiFi WPA2

> [!WARNING]
> Las credenciales están hardcodeadas en el código. Para producción, considera usar SPIFFS o EEPROM.

## 🐛 Debug

Monitor serial (115200 baud):
```bash
pio device monitor
```

## 📝 Licencia

Proyecto privado - CTNET

## 👤 Autor

Hector - ESP32 Sensor Voltaje Project
