Files

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_status para actualizarse en cada paso de run_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 fetch periódico (intervalo de 1.5s) que actualiza el texto de forma dinámica sin retrasos.

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ón credentials.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.

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 webbrowser para abrir la pestaña al arrancar en modo servidor.
    • Headless-safety: El script detecta si el host no posee entorno gráfico (ausencia de DISPLAY en 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/false en el JSON o usando las banderas --no-browser / -nb en la CLI.

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 ALARMA si 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).

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-disabled a las tarjetas cargadas desde la caché local con estatus REVOKED.
    • 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.

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-desc y 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.

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.

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.json al 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.

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 Desarmadas
      • 2: 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.

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-status y POST /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.

🔬 Verificación y Pruebas

  • Compilación y Empaquetado: Generación exitosa de totalconnect.exe en Windows E:\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.