mirror of
https://github.com/cheveguerra/TotalConnect.git
synced 2026-08-19 00:46:37 +00:00
6.7 KiB
6.7 KiB
Walkthrough - Resumen de Mejoras y Correcciones (TotalConnect Client)
Este documento resume los cambios y optimizaciones realizados para robustecer el panel de monitoreo centralizado de alarmas.
🛠️ Cambios Realizados
1. Actualización en Tiempo Real del Progreso de Carga
- Problema: El modal de carga se quedaba en un mensaje estático ("Conectando a los paneles...") y no actualizaba qué sucursal estaba procesando.
- Solución:
- Se configuró la variable global
current_loading_statuspara actualizarse en cada paso derun_update()(conexión inicial, selección de cuenta y consulta específica de sucursal). - Se agregaron cabeceras anti-caché en la respuesta HTTP (
Cache-Control: no-cache, no-store, must-revalidate). - Se implementó un sondeo mediante
fetchperiódico (intervalo de 1.5s) que actualiza el texto de forma dinámica sin retrasos.
- Se configuró la variable global
2. Lista de Exclusiones / Excepciones (exclude)
- Problema: El usuario deseaba omitir ciertas sucursales de prueba o fuera de servicio de la visualización global.
- Solución:
- Se agregó soporte para una clave
"exclude": [...]en el archivo de configuracióncredentials.json. - El script valida de forma inteligente si el ID numérico de la sucursal o su nombre coincide parcialmente con alguno de los elementos a excluir, omitiendo la consulta y el reporte de manera automática.
- Se agregó soporte para una clave
3. Apertura Automática del Navegador
- Problema: Iniciar el ejecutable requería que el usuario abriera manualmente la página en
http://localhost:8080/. - Solución:
- Se integró el uso del módulo nativo
webbrowserpara abrir la pestaña al arrancar en modo servidor. - Headless-safety: El script detecta si el host no posee entorno gráfico (ausencia de
DISPLAYen sistemas Linux/SSH) y desactiva esta apertura de forma segura para evitar cuelgues o warnings. - Se puede personalizar a través de
"open_browser": true/falseen el JSON o usando las banderas--no-browser/-nben la CLI.
- Se integró el uso del módulo nativo
4. Filtrado de Historial de Alarma (Alarm Memory)
- Problema: Algunas sucursales desarmadas o armadas normalmente mostraban alertas de alarma activas debido a memorias no limpiadas físicamente en el teclado Honeywell.
- Solución:
- Se rediseñó el bucle de validación de zonas. Ahora, una zona sólo se marca como
ALARMAsi la partición correspondiente de la sucursal está activamente disparada (is_triggered). - Si la sucursal está normal, las zonas cerradas no generan falsas alertas y las abiertas se muestran propiamente como
Abierta/Fallo(color ámbar).
- Se rediseñó el bucle de validación de zonas. Ahora, una zona sólo se marca como
5. Tarjetas Deshabilitadas para Cuentas con Token Revocado
- Problema: Cuando una cuenta de Total Connect pierde credenciales o se revoca, sus sucursales se cargaban de la caché local pero se visualizaban igual que las sucursales normales de cuentas activas.
- Solución:
- Se añadió la clase CSS
.branch-card-disableda las tarjetas cargadas desde la caché local con estatusREVOKED. - Esto les otorga un fondo gris medio (
#e2e8f0), una opacidad del 65% y bloquea los efectos visuales de interacción en hover (sombra y escala), permitiendo distinguir a simple vista qué datos son históricos fuera de línea.
- Se añadió la clase CSS
6. Diseño Responsivo y Text Wrapping
- Problema: En zonas activas largas, las horas de disparo quedaban recortadas con puntos suspensivos en la tarjeta.
- Solución:
- Se eliminó el límite fijo de ancho de
.zone-descy se desactivówhite-space: nowrap. - Se aumentó el ancho mínimo de las columnas en el grid responsivo a
290px. Las descripciones largas ahora realizan un salto de línea natural posicionando la hora debajo de forma sumamente estética.
- Se eliminó el límite fijo de ancho de
7. Checkboxes de Selección de Cuentas en la UI
- Problema: El usuario deseaba poder elegir qué cuentas actualizar para evitar demoras innecesarias (por ejemplo, evitar actualizar cuentas revocadas).
- Solución:
- Se implementaron checkboxes en la cabecera que listan dinámicamente las cuentas de
credentials.json. - Al hacer clic en "Actualizar", la UI envía mediante el cuerpo del POST (JSON) únicamente las etiquetas de las cuentas seleccionadas.
- Se implementaron checkboxes en la cabecera que listan dinámicamente las cuentas de
8. Persistencia y Mezcla de Estado (last_state.json)
- Problema: Si se actualizaba únicamente una cuenta, el reporte en el frontend sobrescribía el archivo HTML y hacía desaparecer las demás sucursales.
- Solución:
- Se programó la escritura de
last_state.jsonal finalizar cualquier consulta exitosa para guardar el último estado de todas las sucursales. - Cuando se realiza una actualización parcial (donde no se seleccionaron todas las cuentas), el backend carga los estados anteriores desde
last_state.json, los mezcla con los nuevos resultados y genera la vista unificada.
- Se programó la escritura de
9. Priorización de Cuentas Revocadas al Final del Listado
- Problema: El usuario deseaba ver las cuentas inactivas/revocadas al final de la página para que no interfieran visualmente con las activas.
- Solución:
- Se definió un cuarto nivel de clasificación de prioridad:
0: Alarmas Activas (cabeza de página)1: Sucursales Desarmadas2: Sucursales Armadas (Stay, Away, etc.)3: Sucursales Revocadas / Desconectadas (con fondo gris)
- Todas las tarjetas dentro de cada categoría mantienen su estricto orden secuencial numérico.
- Se definió un cuarto nivel de clasificación de prioridad:
10. Polling en Segundo Plano & Controles (Kill-Switch y Circuit Breaker)
- Problema: El usuario requería monitoreo continuo sin bloqueos de API de Honeywell y con la capacidad de detener el polling manualmente o si Honeywell responde errores de autenticación/rate limit.
- Solución:
- Motor Poller Daemon (
background_poller_thread): Se ejecuta cada 45s en segundo plano en el servidor Python. - Circuit Breaker: Si se registran 2 fallos de autenticación seguidos (
401/429), el backend desactiva el polling automático previniendo bloqueos de IP de Honeywell. - Endpoints Controladores: Agregados
GET /polling-statusyPOST /toggle-polling. - Botonera en UI: Se agregó el botón interactivo
[ ● Polling: Activo ]/[ ○ Polling: Pausado ]en el encabezado. - Auto-Focus (
visibilitychange): El navegador recarga el estatus automáticamente al regresar a la pestaña tras periodos de inactividad.
- Motor Poller Daemon (
🔬 Verificación y Pruebas
- Compilación y Empaquetado: Generación exitosa de
totalconnect.exeen WindowsE:\Software\TotalConnect\dist\totalconnect.exe. - Sincronización: Actualizado y desplegado en segundo plano en la VM de Linux accesible a través del puerto
8080. - Validación de Funcionalidad: Todas las rutas del dashboard, filtros por JSON, exclusiones y endpoints de polling operan correctamente.