15 KiB
Plan de Desarrollo - Sistema ESP Admin
Progreso reciente (2025-10-03)
-
Rediseño completo de UI con paleta moderna verde esmeralda
- Variables CSS globales en
layouts/layout.phppara coherencia visual - Paleta: verde esmeralda (#10b981) como primario, grises slate para fondos
- Gradientes y transiciones suaves en toda la aplicación
- Variables CSS globales en
-
Sistema de cards para listado de dispositivos (
paginas/index.php)- Reemplazó tabla por grid responsive de cards (1/2/3 columnas)
- Fondos dinámicos: verde claro (online), gris (offline)
- Estados en tiempo real vía SSE con indicadores visuales
- Mejor UX en móviles con diseño touch-friendly
-
Menú responsive moderno (
layouts/layout.php)- Slide-in desde derecha en móviles (264px)
- Animación hamburguesa → X suave
- Avatar circular con gradiente y inicial del usuario
- Dropdown mejorado con animaciones scale y fade
- Overlay con backdrop-blur para enfoque
-
Login modernizado (
paginas/login.php)- Fondo con gradiente animado (15s loop)
- Glassmorphism en card de login
- Logo flotante con animación de levitación
- Inputs con íconos internos y focus states
- Botón con efecto glow pulsante
-
Página de Programación Visual (
paginas/programacion.php) ⭐ NUEVO- Layout de 3 columnas: Entradas | Reglas | Salidas
- Panel de entradas con cards en grilla responsive
- Panel de salidas con control manual ON/OFF
- Editor avanzado de reglas con modal
- Triggers: cambio de entrada, timer, manual
- Condiciones múltiples con operadores (==, !=, AND, OR)
- Acciones múltiples (set, delay)
- Estados en tiempo real vía SSE
- Guardado persistente por dispositivo
-
API de Reglas (
api/api_reglas.php) ⭐ NUEVO- Endpoints: get_reglas, save_reglas, delete_regla, toggle_regla
- Almacenamiento en
data/reglas.jsonpor chipid - Validación de estructura de reglas
- Respuestas JSON estructuradas
-
Rutas y navegación
- Agregada ruta
/programacionenindex.phpy.htaccess - Enlaces en menú desktop y móvil
- Integración completa con sistema de autenticación
- Agregada ruta
Progreso reciente (2025-09-17)
- UI Login (
paginas/login.php+assets/js/auth.js)- Agregado checkbox "Recordar" con Tailwind. Si está activo, se guardan cookies
remember_useryremember_passpor 10 años (SameSite=Lax, Secure en HTTPS) y se prellenan en el siguiente acceso. - Nota de seguridad: almacenar contraseña en cookies no es recomendado; a futuro se puede migrar a token persistente.
- Agregado checkbox "Recordar" con Tailwind. Si está activo, se guardan cookies
- Sistema de íconos SVG
assets/iconos.jsoncentraliza SVG de la UI.layouts/layout.phpcarga y aplica íconos conwindow.loadIcons()ywindow.applyIcons(); se ampliaron mapeos (icon-back,icon-add,icon-assign,icon-chart,icon-bolt, etc.).paginas/dashboard.phpreemplaza emojis por spans con clases de íconos.
- Dashboard (
paginas/dashboard.php)- Se preserva la IP entre refresh utilizando
lastKnownIP(no se borra al actualizar y se reinyecta al llegar por SSEip). - Se añadió botón "Mqtt" y modal Tailwind que muestra JSON del dispositivo (estado SSE, IP, pines y firmware si está disponible).
- Se preserva la IP entre refresh utilizando
- Firmware y Flasheo
data/dispositivos.json: se añadió el campofirmwarepor dispositivo.paginas/flash.php: se leeversiondesdeassets/flash/esp8266-manifest.json. Tras una OTA exitosa (detectada por SSErebootdel chipid objetivo), se persistefirmwarevíaPOST /api/edit_dispositivo.
Progreso reciente (2025-09-12)
- API Puertos: compatibilidad legacy para dispositivos existentes
- Se agregó soporte de acceso directo legacy para lectura de puertos sin pasar por el router:
- Nuevo endpoint:
api/get_puertos.phpque responde aGET /api/get_puertos.php?chipid=<chipid>y devuelve el mismo JSON queget_puertos. api/api_puertos.phptambién soporta invocación directa con?chipid=<chipid>(sin$route) para compatibilidad.
- Nuevo endpoint:
- Se agregó soporte de acceso directo legacy para lectura de puertos sin pasar por el router:
- UI: Crear Dispositivo
- Corrección: el combo de sectores en el modal “Crear nuevo dispositivo” ahora se llena correctamente (antes solo llenaba el del modal de edición).
- Se implementó el handler de envío del formulario
#form-addpara invocarPOST /api/index.php?r=add_dispositivo, cerrar el modal y refrescar el listado.
- Listado de Dispositivos (
paginas/index.php)- Eliminado el uso del campo
ippersistido; la columna IP ahora se muestra como placeholder y se actualiza en tiempo real mediante SSE (eventoip). - Se mantiene el estado de conexión por SSE; se unificó el consumo con el resto del sistema.
- Eliminado el uso del campo
- Dashboard (
paginas/dashboard.php)- La IP ya no se lee del JSON; se muestra por SSE (evento
ip). - Se agregó visualización del
ChipIDen la tarjeta de “Estado de Conexión”. - Normalización del estado recibido por SSE (acepta
online/offline,1/0,true/false). - Se evitó que un refresh del dashboard muestre
Offlinepor defecto: ahora se conserva el estado previo recibido por SSE o se muestra “Desconocido” hasta recibir evento.
- La IP ya no se lee del JSON; se muestra por SSE (evento
- Backend (
api/api_dispositivos.php)- En
get_dispositivos, se omite el atributoipen la respuesta (IP ahora viene por SSE).
- En
Notas:
- CORS y cabeceras JSON siguen centralizadas en
api/bootstrap.php. - Las rutas
loginysse_statesestán abiertas según diseño; el resto requiere sesión.
Resumen del Proyecto
Este es un sistema completo de administración para dispositivos ESP8266/ESP32 que permite gestionar dispositivos IoT de forma centralizada. El sistema incluye una interfaz web administrativa, API REST, comunicación MQTT, y firmware para los dispositivos ESP.
Progreso reciente (2025-09-11)
- Instalado Python 3.12 vía winget y PlatformIO Core vía pip (usuario actual).
- Corregida configuración de PlatformIO:
src_dirmovido a sección[platformio]enfirmware/platformio.ini. - Arreglado error de compilación en
firmware/framework_4/framework_4.ino(comillas en<a href='/'>). - Mejorado
tools/build_firmware.ps1para detectarpio.exeen rutas típicas de Windows (APPDATA/LocalAppData). - Compilado firmware para
env:nodemcuv2con éxito. - Artefactos generados:
firmware/.pio/build/nodemcuv2/firmware.binfirmware/firmware.bin(copia rápida)assets/flash/firmware/esp8266-nodemcuv2-YYYYMMDD-HHMMSS.bin
Arquitectura del Sistema
1. Frontend Web (PHP + JavaScript)
- Framework: PHP con Bootstrap 5.3.2 y jQuery 3.7.1
- Autenticación: Sistema de sesiones PHP con JWT
- Interfaz: Responsive design con tema claro fijo
- Comunicación: AJAX con API REST + Server-Sent Events (SSE)
2. Backend API (PHP)
- Router: Sistema de rutas basado en parámetro
?r= - Autenticación: sesiones PHP para la web (con login); endpoints críticos tras autenticación.
- Almacenamiento: Archivos JSON en directorio
/data/ - Comunicación: MQTT para control de dispositivos
3. Dispositivos ESP (Arduino/C++)
- Plataforma: ESP8266 con PlatformIO
- Conectividad: WiFi + MQTT
- Funcionalidades: OTA updates, configuración web, monitoreo de pines
- Comunicación: Bidireccional vía MQTT
Estructura de Archivos
esp/
├── index.php # Controlador principal con ruteo
├── composer.json # Dependencias PHP
├── .env.example # Variables de entorno
├── .htaccess # Configuración Apache
│
├── paginas/ # Vistas del frontend
│ ├── index.php # Dashboard principal
│ ├── puertos.php # Gestión de puertos/pines
│ ├── flash.php # Flasheo de firmware
│ └── login.php # Página de login
│
├── layouts/ # Plantillas HTML
│ ├── layout.php # Layout principal (autenticado)
│ └── layout_login.php # Layout para login
│
├── api/ # API REST
│ ├── index.php # Router de API
│ ├── bootstrap.php # Configuración común
│ ├── api_dispositivos.php # CRUD dispositivos
│ ├── api_puertos.php # Gestión de puertos
│ ├── api_sectores.php # Gestión de sectores
│ ├── login.php # Autenticación
│ ├── mqtt_publish.php # Publicación MQTT
│ └── sse_states.php # Server-Sent Events
│
├── assets/ # Recursos estáticos
│ ├── css/layout.css # Estilos principales
│ └── js/ # JavaScript
│ ├── apiClient.js # Cliente API
│ ├── auth.js # Autenticación
│ └── layout.js # Funcionalidad común
│
├── data/ # Almacenamiento JSON
│ ├── dispositivos.json # Registro de dispositivos
│ ├── puertos.json # Configuración de pines
│ ├── entidades.json # Tipos de entidades
│ ├── placas.json # Definición de placas
│ └── sectores.json # Sectores/ubicaciones
│
├── firmware/ # Código para ESP
│ ├── platformio.ini # Configuración PlatformIO
│ ├── framework_3/
│ │ └── framework_3.ino
│ └── framework_4/
│ └── framework_4.ino # Firmware actualmente en uso
│
├── assets/
│ └── flash/
│ └── firmware/ # Artefactos .bin para OTA/flasheo
│
└── tools/ # Herramientas
├── postman/ # Colección Postman
├── make_backup.* # Scripts de backup
└── build_firmware.ps1 # Build automatizado con PlatformIO
Funcionalidades Principales
1. Gestión de Dispositivos
- Registro: Agregar dispositivos por ChipID
- Configuración: Tag, modelo, ciudad, sector
- Monitoreo: Estado online/offline en tiempo real
- Control: Reinicio remoto vía MQTT
2. Gestión de Puertos/Pines
- Configuración: Asignación de pines por tipo de placa
- Entidades: Asociación de pines con entidades (Motor, Relé, Sensor, etc.)
- Modos: INPUT, OUTPUT, INPUT_PULLUP
- Monitoreo: Estado en tiempo real de entradas/salidas
3. Comunicación MQTT
- Topics:
dispositivo/{chipid}/state- Estado del dispositivodispositivo/{chipid}/comando- Comandos al dispositivodispositivo/{chipid}/valores/{pin}- Valores de pinesdispositivo/{chipid}/comando/reboot- Reinicio
- Broker: Configurado en .env (mqtt.penki.com.ar:8883)
4. Firmware ESP
- Configuración: Web interface para WiFi y MQTT
- OTA: Actualizaciones over-the-air
- Sincronización: Descarga automática de configuración de puertos
- Monitoreo: Publicación automática de cambios en pines
5. Flasheo de Firmware
- Web Serial: Interfaz para flashear via USB
- ESP Web Tools: Integración con herramientas estándar
- Manifesto: Configuración en
/assets/flash/esp8266-manifest.json
Tecnologías Utilizadas
Backend
- PHP 7.4+ con extensiones: json, session, curl
- Composer para dependencias:
- firebase/php-jwt: ^6.11
- php-mqtt/client: 1.8
- vlucas/phpdotenv: 5.6
Frontend
- Bootstrap 5.3.2 para UI
- jQuery 3.7.1 para AJAX
- Server-Sent Events para tiempo real
- Web Serial API para flasheo
Dispositivos
- ESP8266 (NodeMCU v2)
- Arduino Framework con PlatformIO
- Librerías:
- ArduinoJson ^6.21.3
- PubSubClient ^2.8
- ESP8266-OTA
Configuración del Entorno
Variables de Entorno (.env)
# MQTT Broker
MQTT_HOST=mqtt.penki.com.ar
MQTT_PORT=8883
MQTT_TLS=true
MQTT_USERNAME=penki
MQTT_PASSWORD=Penki615
# API Authentication
API_BASIC_USER=api
API_BASIC_PASS=API#2025
# CORS
CORS_ALLOW_ORIGIN=*
Estructura de Datos
Dispositivos (dispositivos.json)
{
"id_disp": 1,
"chipid": "69A0FC",
"tag": "Vivero1",
"nombre": "Wemos D1 mini",
"ciudad": "Rosario",
"sector": "Vivero",
"start_time": "2025-07-02 15:34:53"
}
Puertos (puertos.json)
{
"69A0FC": {
"D0": {
"gpio": 16,
"disp": "Interruptor",
"modo": "INPUT_PULLUP",
"notas": "Entrada botón"
}
}
}
Plan de Mejoras y Desarrollo
Fase 1: Estabilización (Corto Plazo)
-
Seguridad
- Implementar validación de entrada más robusta
- Agregar rate limiting a la API
- Mejorar manejo de errores y logging
-
Usabilidad
- Agregar confirmaciones para acciones destructivas
- Mejorar feedback visual en operaciones
- Implementar búsqueda y filtros en listas
-
Monitoreo
- Dashboard con métricas de dispositivos
- Historial de estados y eventos
- Alertas por dispositivos offline
Fase 2: Funcionalidades Avanzadas (Mediano Plazo)
-
Automatización
- Sistema de reglas y triggers
- Programación de tareas
- Escenarios predefinidos
-
Escalabilidad
- Migración a base de datos (MySQL/PostgreSQL)
- API REST más robusta con OpenAPI
- Implementar caching (Redis)
-
Interfaz
- Migrar a framework moderno (Vue.js/React)
- PWA para uso móvil
- Tema oscuro opcional
Fase 3: Integración y Expansión (Largo Plazo)
-
Integraciones
- Home Assistant integration
- Google Assistant/Alexa
- Webhooks para servicios externos
-
Dispositivos
- Soporte para ESP32
- Soporte para otros microcontroladores
- Sensores especializados
-
Análisis
- Gráficos y tendencias
- Machine Learning para predicciones
- Reportes automatizados
Consideraciones de Seguridad
Actuales
- Autenticación básica implementada
- Sesiones PHP con configuración segura
- HTTPS requerido para funciones críticas
Recomendaciones
- Implementar 2FA
- Audit logs completos
- Encriptación de datos sensibles
- Firewall rules específicas
- Regular security updates
Deployment y Mantenimiento
Requisitos del Servidor
- PHP 7.4+ con extensiones requeridas
- Apache/Nginx con mod_rewrite
- MQTT Broker accesible
- SSL Certificate para HTTPS
Backup Strategy
- Scripts automatizados en
/tools/ - Backup de archivos JSON
- Versionado de configuraciones
- Restore procedures documentados
Monitoreo
- Logs de aplicación en
/api/logs/ - Monitoreo de dispositivos vía MQTT
- Health checks automatizados
- Alertas por email/SMS
Conclusión
El sistema ESP Admin es una solución completa y funcional para la gestión de dispositivos IoT basados en ESP8266. La arquitectura modular permite escalabilidad y mantenimiento eficiente, mientras que las tecnologías elegidas proporcionan una base sólida para el desarrollo futuro.
El plan de desarrollo propuesto asegura la evolución continua del sistema, priorizando la estabilidad y seguridad en el corto plazo, y expandiendo funcionalidades en fases posteriores.