VisioONe HES Head-End System · DLMS/COSEM

Historial de versiones

HES v3.17.7

v3.17.7 09/10/2026
  • Pestaña Prueba: los avisos de las acciones que vuelven a ella (Cargar plantilla basica, Borrar objetos, Importar perfil, equipo recien creado) se muestran abajo en el recuadro de resultado, como los demas resultados de la prueba, y no arriba como mensaje general de la pagina.
v3.17.6 09/10/2026
  • Pestaña Prueba -> Lectura de variables: la prueba queda en el Trace del medidor con el resultado de cada objeto (valor leido o error exacto del equipo: acceso denegado, objeto no definido...), para saber por que una variable no se soporta.
v3.17.5 09/10/2026
  • Pestaña Prueba: al recargar o salir de la pagina con una conexion abierta, se cierra en el servidor; y un nuevo 'Conectar' por cable/sonda cierra antes las conexiones de Prueba que sigan abiertas en el mismo puerto. Antes quedaban huerfanas tomando el COM y el siguiente Conectar esperaba hasta agotar el candado.
  • Tras 'Cargar plantilla basica de OBIS' se indica el siguiente paso (Conectar y Lectura de variables): la pagina se recarga y la conexion debe abrirse de nuevo.
v3.17.4 09/10/2026
  • Pestaña Prueba: boton 'Cargar plantilla basica de OBIS' (antes solo en la ficha del medidor, dentro de 'OBIS codes configurados' -> 'Recargar plantilla de OBIS'). Agrega los OBIS estandar segun el tipo de medidor y la configuracion de fases (Monofasico 10, Bifasico 16, Trifasico 23, CT 28; Agua 8; Gas 11) sin tocar los existentes y vuelve a la pestaña Prueba. Para medidores que niegan su lista de objetos.
  • Textos de ayuda corregidos: nombraban un boton 'Aplicar plantilla' que no existe.
v3.17.3 09/10/2026
  • Pestaña Prueba con conexion abierta: las tramas TX/RX de cada accion (lectura de objetos, variables, rele, desconectar) quedan en el trace de ESA accion; antes seguian yendo al trace de 'Conectar'.
  • Lectura de objetos negada por el medidor ('scope of access violated', tipico del cliente publico 16): el mensaje indica como seguir (plantilla basica de OBIS + Lectura de variables, o cliente de gestion).
v3.17.2 09/10/2026
  • Pestaña Prueba -> 'Detectar direccion': por cable o sonda envia un SNRM a la direccion configurada, a las de difusion (0x7F / 0x3FFF), a las fisicas comunes (1, 16, 17) con logica 0 y 1 y a las derivadas del serial (SN % 10000 + 1000, SN % 10000); lee la respuesta cruda (reconoce la direccion real del medidor aunque responda a una difusion), muestra la identificacion IEC en modo E y permite aplicar la direccion encontrada. Queda en el Trace del medidor y en la auditoria (METER_ADDRESS_SCAN).
  • Pestaña Prueba: los intentos fallidos de Conectar / Conexion rapida se guardan en el Trace del medidor.
  • Correccion: en ingles, la confirmacion de corte/reconexion de la pestaña Prueba rompia el JavaScript de la pagina (apostrofo en 'device's'); los textos traducidos dentro de JavaScript van con |tojson.
v3.17.1 09/10/2026
  • Correccion: autenticacion HIGH_GMAC (o HIGH_ECDSA) con Security NONE (p.ej. medidor Inelca/Star DDS26D) fallaba al conectar con "'NoneType' object has no attribute 'systemTitle'": el cliente DLMS se armaba sin modulo de cifrado. Ahora esas autenticaciones usan siempre System Title, llaves e Invocation Counter aunque las APDU no viajen cifradas.
  • La traza avisa cuando el medidor no tiene Block Cipher Key ni Authentication Key y se usan las llaves por defecto de Gurux.
  • Scripts locales: encienden Docker Desktop si esta apagado; atajos subir-/bajar-desarrollo.cmd para el servidor de desarrollo (puerto 5050).
v3.17.0 08/10/2026
  • Despliegue en Docker: Dockerfile (gunicorn, 1 proceso x 32 hilos) y stack aislado 'visioone-hes' (app + PostgreSQL 16 + Redis, volumenes propios) en deploy/docker-compose.yml, con scripts para subir, bajar, respaldar y restaurar en el PC (deploy/visioone.ps1) y en la VPS (deploy/visioone.sh). Guia en deploy/README.md, incluida la App movil VisioMI.
  • Seguridad: la clave temporal del Administrador inicial ya no se escribe en el log.
  • Repositorio: .gitignore sin claves (.env), respaldos de base, logs ni compilaciones de la App.
  • VPS compartida (Traefik): servicio unico visioone-app en la red edge, ruta propia en /opt/traefik/dynamic/visioone.yml (prefijo visioone-), 'init <dominio>' con HTTPS y 'traefik' para generar la ruta. Primera instalacion en visioone.vionova-ing.com con la base del PC y clave de cifrado propia de la VPS.
v3.16.2 06/10/2026
  • Sonda optica: nueva interfaz 'HDLC modo E (sonda optica IEC 62056-21)' — arranca a 300 baud 7E1, pide la identificacion del medidor, confirma modo HDLC binario y pasa a la velocidad que anuncia el medidor (8N1). Si el medidor no responde la identificacion se sigue en HDLC directo a la velocidad configurada.
  • Verificacion de identidad: toda conexion real (lectura, campañas, rele, escritura, reloj, firmware, pestaña Prueba) lee el serial del medidor (0.0.96.1.0.255) y lo compara con el guardado; si responde otro medidor (p.ej. la sonda se movio a otro equipo y el COM sigue configurado en el anterior) la operacion se cancela sin leer ni escribir nada y el error indica el serial que respondio. Si el medidor no expone el serial, no se bloquea.
  • Puerto COM compartido: un candado por puerto hace que dos conexiones al mismo COM (dos medidores con el mismo puerto, campaña + prueba manual) esperen su turno en vez de fallar con 'Acceso denegado'; 'Reiniciar puerto COM' no interrumpe una lectura en curso.
  • Equipo de Medida: aviso cuando otro medidor de la organizacion tiene configurado el mismo puerto COM.
  • Idioma: interfaz en ingles completa — se tradujeron 461 textos que seguian en español (Usuarios App y solicitudes, mensajes, lotes, red de distribucion, transformadores, campañas, reportes, ayuda funcional, confirmacion de correo) y los textos dinamicos de Parametros, ayuda de paquetes IDIS, repeticion de campañas y procesos de Nodos. Los datos guardados (alarmas, bitacora, catalogo OBIS, trazas) se muestran como se registraron. App movil verificada: 128 textos en ambos idiomas.
v3.16.1 05/10/2026
  • Lectura: un objeto que el medidor rechaza con un error DLMS (objeto no definido, acceso denegado) ya no cuenta como 'fallo seguido' — el medidor si esta respondiendo. Antes, tres objetos no soportados seguidos cancelaban el resto de la lectura ('omitido: 3 fallos seguidos').
  • La lista de objetos de la Asociacion (0.0.40.0.0.255) se guarda resumida ('N objeto(s)') en vez de fallar con 'can only concatenate str'.
  • App movil: la consulta de lectura muestra tambien la energia reactiva importada (+R) y exportada (-R) en kvarh cuando el medidor la aplica (objeto habilitado y lectura valida).
  • Escalador DLMS: el valor de Register / Extended / Demand register se guarda ESCALADO como lo muestra el medidor (tension 1198 -> 119.8 V, frecuencia 5991 -> 59.91 Hz, FP 1000 -> 1.000). El escalador se lee una vez por objeto y queda guardado; aplica a lecturas, Ejecutar OBIS y evidencia de rele.
  • Web: la energia se muestra en kWh / kvarh / kVAh como el display del medidor (lecturas, ficha, consumo, informes de consumo, lecturas diarias y activa/reactiva, evidencia de rele, pestaña Prueba y todas las exportaciones). Corrige los informes que decian kWh mostrando Wh (valores x1000). Se guarda igual que antes; el valor crudo del medidor sigue en raw_value.
  • Pestaña Prueba: el puerto COM se puede escribir (ej. COM4 aunque no se detecte) ademas de elegirlo de los detectados, y queda sincronizado con el puerto de la configuracion que usa Conectar.
v3.16.0 05/10/2026
  • Hora del medidor junto a la del servidor: en cada comunicacion se lee el reloj del medidor (Clock 0.0.1.0.0.255) y se guarda su hora y el desfase respecto del servidor en lecturas, evidencias de corte/reconexion (antes y despues), operaciones de Ejecutar OBIS (inicio/fin; en la puesta en hora, desfase antes -> despues), escrituras, log de eventos, alarmas e historial de conexiones.
  • Se muestra en Lecturas almacenadas, ficha del medidor (reloj y desfase en el encabezado), evidencia de rele, campañas, Centro de alarmas y en las exportaciones CSV/Excel/PDF; las APIs App movil y CIM devuelven tambien la hora del medidor y el desfase.
  • Direcciones de Suscriptor y Servicio con la codificacion DANE (DIVIPOLA): pais (Colombia 170), departamento (2 digitos) y municipio (5 digitos) desde listas oficiales dependientes y validadas; otro pais en texto libre. Las direcciones existentes se convirtieron a codigos DANE (auditado). APIs CIM (townDetail) y App movil devuelven los codigos.
  • Servicio identificado por su medidor y serial: selector 'Serial - Nombre', lista de servicios del suscriptor, encabezado del servicio, Mi Informacion y auditoria. Editar/eliminar/restaurar un servicio ahora verifica que sea de la organizacion activa.
v3.15.0 05/10/2026
  • Evidencia de corte/reconexion: toda orden de rele (campaña, mapa/ficha, App movil, API CIM) lee en la misma sesion la energia activa importada y el estado real del rele (Disconnect Control) ANTES y DESPUES de la orden y deja un registro de auditoria inmutable (quien, cuando, motivo, nodo, resultado, trace). Se ve en cada campaña (energia y rele antes/despues por medidor), en la ficha del medidor y en Informes; se exporta a Excel y PDF (tambien por evento) y cada exportacion queda auditada.
  • El estado del medidor se actualiza con lo que REPORTA el equipo: rele abierto/cerrado leido del medidor y estado de comunicacion (En servicio / Sin comunicaciones). Una orden aceptada pero sin efecto queda como error (la campaña la reintenta); una reconexion que exige pulsar el boton queda como 'Listo para reconexion'.
  • Las campañas de corte/reconexion ya no hacen una lectura completa aparte: la energia antes/despues de la evidencia queda como lectura del medidor.
  • Nodos de lectura: detalle por nodo (clic en el nombre) con lo que proceso en el periodo — medidores de campañas, ordenes de rele con su evidencia y operaciones OBIS/firmware.
v3.14.0 05/10/2026
  • Medidor → Ejecutar OBIS: una operacion sobre un solo objeto con la conexion y seguridad del medidor — leer cualquier atributo, escribir el valor de Data/Register con su tipo, ejecutar un metodo, poner en hora el reloj (clase 8) y cambiar IP / mascara / puerta de enlace / puerto (clases 42 y 41).
  • Actualizacion de firmware (Image transfer, clase 18): archivo, identificador de la imagen, transferencia ahora o programada, activacion inmediata / en una fecha (Single action schedule) / manual; con Suite 1/2 y HLS ECDSA pide la clave privada de firma del cliente y el certificado del medidor (se borran al terminar). Corre en segundo plano con avance, reenvio de bloques faltantes, verificacion y cancelacion.
  • Historial de operaciones por medidor, con trace, log de conexion y auditoria (METER_OP_*, METER_FIRMWARE_*).
  • Campanas de Corte/Reconexion: repeticion igual que las de lectura (cada 15/30/45 minutos o N horas, dias, semanas o meses, con fecha final), ejecuciones enlazadas a la campana original, Detener repeticion y Reprogramar con la proxima hora de ejecucion.
  • Campanas que se repiten: la proxima ejecucion se ve en el listado y en la barra lateral (🔁); al reprogramarlas se indica la proxima hora de ejecucion.
  • Correccion: el Reporte diario de lecturas (y sus exportaciones) fallaba si un dia solo tenia lecturas con error.
v3.13.0 05/10/2026
  • Campanas de lectura y de Corte/Reconexion: acciones de modificacion solo mientras la campana esta vigente (programada, en curso, pausada o con repeticion activa): Pausar / Reanudar, Reprogramar (fecha de inicio si aun no arranco; repeticion, proxima ejecucion y fecha final de la campana original), Cancelar, Acelerar y Detener repeticion. Una campana terminada queda solo para consulta y 'Volver a ejecutar' (crea una campana nueva). El servidor rechaza cualquier modificacion fuera de estado y todo queda en la bitacora (PAUSE, RESUME, RESCHEDULE).
  • Correccion: una campana cancelada ya no puede pasar a Completada cuando terminan los intentos que estaban en curso.
  • Correccion: una campana que quedaba 'En curso' con todos sus medidores ya procesados (el servidor se reinicio justo antes de cerrarla) ahora se completa sola en el siguiente ciclo de mantenimiento.
v3.12.0 05/10/2026
  • Campanas de lectura: repeticion cada 15, 30 o 45 minutos (ademas de cada N horas, dias, semanas o meses). El ciclo de fondo despierta justo a la hora de la siguiente repeticion o campana programada, en vez de esperar su intervalo fijo de 2 minutos.
v3.11.1 05/10/2026
  • Fabricantes: nuevo documento 'Archivo de integracion' por fabricante y modelo/referencia (PDF, Word, Excel, TXT, CSV, XML, JSON, YAML o ZIP, hasta 15 MB). Es privado: se guarda fuera de la carpeta publica y solo se descarga con sesion y permiso de ver Fabricantes; cada descarga queda en la auditoria.
v3.11.0 05/10/2026
  • Tablero de control (Informes → Tablero de control), segun el documento Dashboard Smarti V3: detalle por tipo de proyecto (Directa, Semi-Directa, Indirecta y sus puntos de medida), efectividad diaria y rendimiento de lecturas, lecturas por sistema AMI/AMR y marca, balances de energia (entradas, ventas y perdidas por sector y de los ultimos 12 meses por region) y detalle por region y sector; descarga en Excel de medidores leidos / no leidos con un clic; panel de definiciones; modo demostracion.
  • Regiones y sectores (Equipos de Medida → Regiones y sectores); sector en subestaciones y medidores.
  • Medidor: tipo de proyecto, punto de medida (cliente, cliente en macro, macromedidor, bordo, generadora, cabecera de circuito, frontera de sector), sistema AMI/AMR y sector — en la ficha (pestana Ubicacion) y en la importacion de equipos; vacio = se deduce automaticamente.
v3.10.0 03/10/2026
  • Varios servidores (nodos) con Redis (REDIS_URL): cada medidor de una campana lo toma un solo nodo (reparto en la base de datos), arranque y repeticiones de campanas creadas una sola vez, items colgados de un nodo caido vuelven a la cola, nodos por organizacion (NODE_ORGANIZATIONS) o solo web (NODE_WORKERS=0). Ver docs/despliegue_multinodo.md.
  • Una sola comunicacion a la vez por medidor en todo el cluster (campana, boton Leer, App, CIM): la segunda espera su turno o informa 'medidor ocupado' sin marcarlo sin comunicacion.
  • Limites de intentos de login, esperas minimas de la App y cache de verificacion de secretos comunes a todos los nodos via Redis; si Redis no responde, cada nodo sigue en memoria.
  • Nueva pantalla Campanas → Nodos de lectura (/nodos): nodos activos, organizaciones, ultimo latido y trabajo de las ultimas 24 h; cada medidor de campana muestra el nodo que lo proceso.
  • Correccion: el TapaHuecos ya no adelanta los medidores de una campana programada para mas tarde.
  • Coleccion de Postman de ambas APIs (movil v2 y CIM v1) con entorno y pruebas automaticas (docs/visioone_api.postman_collection.json).
v3.9.0 03/10/2026
  • Lecturas almacenadas: importar lecturas (plantilla CSV/XLSX, validacion, lotes que se pueden deshacer), ingreso manual (Ctrl+Shift+L, solo OBIS habilitados del medidor), columnas Estado y Tipo de lectura (Bajo demanda, AMI, TapaHuecos, App movil, Push, Ingreso manual, Importada, Integracion CIM).
  • Log de eventos (Profile Generic) leido con su propio procedimiento (columnas y ultimas filas); sus eventos generan alarmas en cada lectura.
  • App movil VisioME (API v2): consumo diario real (diferencia de registros), indicadores de uso (mes en curso, mes anterior, promedio diario, proyeccion, variacion), unidades normalizadas (kWh/m3), corte/reconexion solo con Disconnect Control configurado, espera minima entre consultas en vivo y ordenes de rele, cambio de clave con la clave actual y la politica de contrasenas de la web, bitacora de toda accion de la App.
  • API de integracion CIM (IEC 61968-9) en /api/cim/v1: EndDevices, UsagePoints, ReadingTypes, MeterReadings (consulta y recepcion), EndDeviceEvents y EndDeviceControls; clientes de integracion por organizacion con alcances, IPs permitidas y limite de llamadas (Organizaciones → Integraciones CIM).
  • Seguridad: defensa CSRF por origen + cookie SameSite, cabeceras de seguridad, sesion con vencimiento, Swagger solo con sesion, consola del depurador apagada, limite de intentos de login por IP (web y App), redirecciones solo dentro del sitio, arranque bloqueado en produccion con la clave de sesion por defecto, script de rotacion de la clave de cifrado (scripts/rotate_encryption_key.py).
v3.8.8 21/09/2026
  • Primera version versionada del proyecto (arranca el versionamiento de VisioONe HES).
  • Interfaz bilingue Español/Ingles (selector de idioma en la barra superior y en el login), con el motor DLMS/COSEM (vendor/Gurux.DLMS.Python y paquetes gurux_dlms/gurux_net/gurux_serial) sin ninguna modificacion, para poder seguir actualizando desde el proyecto original de Gurux.
  • Formato de fecha/hora unificado en toda la app: dd/mm/aaaa HH:mm:ss (24h), configurable centralmente en Config.DATETIME_FORMAT.
  • Borrado logico para Medidores, Proyectos, Elementos de red (Transformadores/Concentradores), Zonas de trabajo y Fabricantes/Modelos: 'Eliminar' ya no borra el registro de la base de datos, solo lo oculta (se puede restaurar desde 'Ver eliminados'). El borrado se rechaza con un error claro si el registro todavia tiene medidores u otros elementos dependientes asignados.
  • Usuarios: 'Eliminar' ahora solo deshabilita la cuenta (Activo/Inactivo), preservando su historial.
  • Roles: nuevo estado Activo/Inactivo (un rol inactivo no se puede asignar a usuarios nuevos, pero no afecta a quienes ya lo tienen).
  • Corregido: el menu desplegable quedaba tapado por el mapa (Leaflet) en la pantalla de Mapa de red.
  • Iconos agregados/corregidos en varias opciones de menu que no los tenian.
  • 'Libreria DLMS' movida del menu Ver al menu Ayuda, y renombrada para no mostrar 'Gurux' como marca de la aplicacion (el credito al proyecto original se mantiene en el enlace de GitHub).
🌐 ES EN
HES v3.17.7 · 2026@Visión Inovadora Ingeniería S.A.S | vionova-ing.com