VitalRecorder es una aplicacion de registro de signos vitales en tiempo real para Windows, Raspberry Pi y Ubuntu. Captura datos de mas de 80 dispositivos medicos y los almacena en formato de archivo .vital.
Descargue e instale desde Microsoft Store:
O descargue el instalador MSI o el paquete MSIX desde la pagina de versiones.
Descargue el AppImage (VitalRecorder-*-x86_64.AppImage) desde la pagina de versiones, marquelo como ejecutable y ejecutelo:
chmod +x VitalRecorder-*-x86_64.AppImage
./VitalRecorder-*-x86_64.AppImage
Probado en Ubuntu 22.04 y posteriores. Funciona en la mayoria de distribuciones Linux modernas (Fedora, Debian 12+) sin configuracion adicional — Qt6 esta incluido dentro del AppImage.
Para acceso a dispositivos serie / USB (/dev/ttyUSB*, /dev/ttyACM*), anada su usuario al grupo dialout una sola vez:
sudo usermod -aG dialout $USER
Cierre sesion y vuelva a iniciarla para que el cambio de grupo surta efecto.
Para grabacion desatendida en modo servidor sin GUI, descargue el binario de consola especifico de la plataforma (pivr64 para Raspberry Pi ARM64 o ubuntu64 para Ubuntu x64) desde la pagina de versiones y ejecutelo directamente.
Medtronic : BIS, Philips : Intellivue).VitalRecorder utiliza una interfaz basada en pestanas. Cada pestana representa una "sala" o "cama" y puede tener multiples dispositivos conectados.
A cada pestana se le puede asignar un nombre de cama. Este se utiliza para:
Vaya a Agregar Dispositivo y seleccione entre los grupos de dispositivos:
| Grupo | Ejemplos |
|---|---|
| Dispositivos VitalDB | SNUADC, SNUADCM, BUTTON, VitalBOLUS |
| Convertidor analogico-digital | DataQ DI-149, DI-155, DI-245, DI-1100, DI-1120 |
| Monitor de paciente | Philips Intellivue, GE Solar/Dash/Bx50, Nihon Kohden, Mindray HL7, MEKICS |
| Monitor multifuncion | Masimo Radical-7/Root, Sentec SDM |
| Maquina de anestesia | Draeger Primus/Zeus/Fabius, GE Datex-Ohmeda Aisys/Avance |
| Ventilador mecanico | Maquet SERVO-i/s/U, Hamilton MR1/C2/C6/T1 |
| Bomba de infusion de farmacos | Fresenius Agilia/Primea/PCBM, BBraun SpaceCom/HL7, Daiwha, Pion |
| Monitor cerebral | Medtronic BIS/VISTA/INVOS, Fresenius Conox, OBELAB NirsitON |
| Monitor neuromuscular | TwitchView, TOFScan, TOFcuff |
| Calentador de fluidos | Belmont FMS 2000 |
| Monitor de gasto cardiaco | Edwards Hemosphere/Vigilance/EV1000/Vigileo, Getinge PulsioFlex |
| Monitor fetal | GE Corometrics 250cx |
La mayoria de los dispositivos utilizan comunicacion serial RS-232 a traves de un COM port fisico o un adaptador USB-to-Serial.
COM3).Para dispositivos conectados por red. VitalRecorder puede actuar como cliente o servidor TCP.
IP:PORT (por ejemplo, 192.168.1.100:9001).2575). VitalRecorder escucha y espera que el dispositivo se conecte.Los dispositivos HL7 (Mindray HL7, Nihon Kohden HL7GW, BBraun HL7) generalmente usan el modo servidor con encapsulamiento MLLP.
Algunos dispositivos transmiten datos por UDP.
Para sensores inalambricos como Movesense.
Al conectar dispositivos TCP/UDP, puede agregar filtros a la cadena de puerto para aceptar selectivamente conexiones o mensajes. Solo funciona con comunicaciones basadas en tramas con delimitadores (como HL7).
PORT#KEYWORD@IP_ADDRESS
Todas las partes excepto PORT son opcionales.
#)Filtra los mensajes entrantes buscando una cadena de palabra clave dentro del contenido del mensaje. Los mensajes que no contienen la palabra clave se descartan silenciosamente.
2575#BED-001
Esto escucha en el puerto 2575 y solo procesa mensajes que contienen BED-001. Esto es util cuando un unico gateway HL7 (por ejemplo, DoseLink, Mindray Gateway) envia datos de multiples camas a traves de una sola conexion.
2575#BED-001 Propofol
# multiples veces para procesar mensajes que contienen cualquiera de las palabras clave. 2575#BED-001#BED-002
@)Filtra las conexiones TCP entrantes por la direccion IP de origen. Las conexiones desde otras direcciones IP se rechazan en la etapa de aceptacion TCP. El filtro de IP solo funciona en modo servidor TCP y UDP.
[email protected]
Esto escucha en el puerto 2575 y solo acepta conexiones desde 192.168.100.22.
Se admite la coincidencia por sufijo separado por puntos (.). No es necesario introducir la direccion IP completa; basta con especificar la parte final.
[email protected]
Esta configuracion permite conexiones desde todas las IPs con el formato xxx.xxx.100.22.
2575#[email protected]
Esto escucha en el puerto 2575, solo acepta conexiones desde 192.168.100.22 y solo procesa mensajes que contienen BED-001.
# para filtrar por numero de serie de la bomba o identificador de cama.@ para distinguir que servidor DoseLink debe conectarse a que pestana de VitalRecorder.Cuando una unica pasarela HL7 (Mindray eGateway, BBraun DoseLink, Nihon Kohden HL7GW) envia datos de varias camas por una sola conexion TCP, VitalRecorder enruta automaticamente cada trama a la pestana correcta:
SO_REUSEADDR que antes obligaba a hacer clic en "Add device" tras cada reinicio.PV1-3 (p. ej. SU-1, BED-001)deviceId o prefijo MFER de 12 bytes~ del OBX MDC_ATTR_LOCATION (p. ej. Forskning, Bord4, Anilab, Operasjon) Si varias pestanas pudieran coincidir con la misma trama (p. ej. existen tanto Forskning como Bord4 y la LOCATION de la trama es Forskning~Operasjon~Bord4~Anilab~~~~~Bord4), gana el token mas especifico. Los tokens se comprueban en orden inverso, de modo que Bord4 (el nombre corto al final de LOCATION) prevalece sobre Forskning (la etiqueta departamental al inicio). Cada trama se entrega a una sola pestana.
puerto#palabra_clave descrita arriba. Solo se aplica si no hay coincidencia por nombre de cama.En BBraun DoseLink una trama HL7 representa un rack (una cama); las multiples bombas del rack se envian como bloques VMD dentro de la trama y se registran en pistas separadas (PUMP1 ... PUMP16) de la misma pestana.
Monitor View ahora muestra hasta 8 bombas simultaneamente (antes 4). Cada ranura de bomba muestra el nombre del farmaco y un valor grande:
CE + nombre del farmaco (comportamiento sin cambios).RATE (mL/h) + nombre del farmaco, y el volumen infundido acumulado (VOL, mL) se representa como una pequena anotacion gris en la esquina superior derecha de la ranura.Todos los demas campos de la bomba (presion, concentracion, velocidad de dosis, jeringa, bolo, tiempo de infusion, peso del paciente, drug library, care area, etc.) siguen siendo grabados en el archivo .vital y visibles en la vista de pistas predeterminada — solo Monitor View hace curacion para mantener la pantalla despejada durante los experimentos en curso.
Dispositivos soportados: BBraun SpaceCom/HL7, Fresenius Agilia/Primea/PCBM, Daiwha, Pion. Sin configuracion requerida — este es el diseno por defecto.
La opcion
minimal=1de vr.conf introducida en 1.18.29 se elimino en 1.18.30: tambien omitia los campos adicionales del archivo.vital(irrecuperable). El rediseno de Monitor View de 1.18.30 preserva todos los datos grabados.
Aviso 1.18.23 para Windows no ingles — las versiones anteriores sufrian un problema del C runtime de Windows: en idiomas con
,como separador decimal (noruego, aleman, frances, etc.) las velocidades de infusion menores que 1.0 mL/h se registraban como 0. Desde 1.18.23 el parseo numerico siempre usa.como separador decimal, independientemente de la configuracion regional de Windows. El limite de bombas BBraun por dispositivo se amplio de 8 a 16.
Cuando se recibe un mensaje que no coincide con el filtro de palabras clave, VitalRecorder lo reenvia automaticamente a otros dispositivos en otras pestanas que estan escuchando en el mismo puerto. Si no hay ninguna pestana coincidente y el mensaje contiene un identificador de cama (por ejemplo, un segmento PV1 de HL7), se crea automaticamente una nueva pestana con ese nombre de cama.
Por defecto, VitalRecorder inicia la grabacion automaticamente al ejecutarse (configuracion RECORD_WHEN_START).
Las grabaciones se guardan como archivos .vital, un formato binario comprimido con organizacion basada en pistas.
Configure el directorio de guardado en la Configuracion. El valor predeterminado es la carpeta Documentos del usuario.
El nombre de archivo se genera a partir de una plantilla. Valor predeterminado: %r_%y%m%d_%h%i%s
| Codigo | Significado |
|---|---|
%r | Nombre de sala/cama |
%y | Ano (4 digitos) |
%m | Mes (2 digitos) |
%d | Dia (2 digitos) |
%h | Hora (2 digitos) |
%i | Minuto (2 digitos) |
%s | Segundo (2 digitos) |
VitalRecorder puede cargar datos en tiempo real a una instancia de VitalServer a traves de WebSocket.
| Configuracion | Descripcion |
|---|---|
SERVER_IP | Direccion IP o nombre de host de VitalServer |
SEND_WEB | Habilitar/deshabilitar la carga al servidor (1 o 0) |
CLOUD_UPLOAD | Habilitar/deshabilitar la carga a la nube (1 o 0) |
VRCODE | Identificador unico de esta instancia de VitalRecorder |
Los datos se comprimen con zlib antes de la carga.
Cuando la configuracion HL7 esta habilitada, VitalRecorder envia los datos de sala en formato HL7 en lugar de JSON.
VitalRecorder almacena todas las configuraciones en un unico archivo de configuracion llamado vr.conf. Este archivo utiliza un formato similar a INI y puede editarse manualmente para implementaciones sin interfaz grafica o aprovisionamiento por lotes.
| Plataforma | Ruta |
|---|---|
| Windows | %APPDATA%\VitalRecorder\vr.conf |
| Linux | ./vr.conf > ~/vr.conf > /boot/vr.conf (se buscan en orden) |
--conf <ruta> para especificar un archivo de configuracion alternativo.# Configuracion global (antes de cualquier seccion)
KEY=VALUE
# Definicion de cama (pestana)
[BED/nombre_cama]
# Dispositivo bajo esta cama
[DEV/nombre_dispositivo]
type=TipoDispositivo
port=EspecPuerto
# Filtro bajo esta cama
[FILT/nombre_modulo_filtro]
Reglas:
KEY=VALUE por linea.[.[DEV/...] y [FILT/...] pertenecen al [BED/...] anterior.[BED/...] puede contener multiples dispositivos y filtros.| Clave | Valor Predeterminado | Descripcion |
|---|---|---|
SAVEDIR | (predeterminado del sistema) | Directorio de guardado de archivos de grabacion |
VRCODE | (generado automaticamente) | Codigo de identificacion unico de VitalRecorder |
FILENAME_TEMPLATE | %r_%y%m%d_%h%i%s | Plantilla de nombre de archivo de grabacion |
| Clave | Valor Predeterminado | Descripcion |
|---|---|---|
RECORD_WHEN_START | 1 | Grabar automaticamente al iniciar (0: desactivado, 1: activado) |
CUT_FILE | 1 | Dividir archivo en los limites de paciente (0: desactivado, 1: activado) |
CUT_HOURLY | 0 | Dividir archivo cada hora (0: desactivado, 1: activado) |
CUT_BY | (ninguno) | Senal de activacion para la division de archivo (por ejemplo, spo2, hr, any) |
PT_WAITING_TIME | 5 | Tiempo de espera del paciente en minutos |
| Clave | Valor Predeterminado | Descripcion |
|---|---|---|
SERVER_IP | (ninguno) | Direccion del servidor VitalDB (IP:port) |
UPLOAD_SERVER_IP | (ninguno) | Direccion del servidor de carga de archivos |
MONITOR_SERVER_IP | (ninguno) | Direccion del servidor de monitoreo web |
SEND_WEB | 1 | Enviar datos al servidor web (0: desactivado, 1: activado) |
CLOUD_UPLOAD | 0 | Habilitar carga a la nube (0: desactivado, 1: activado) |
| Clave | Valor Predeterminado | Descripcion |
|---|---|---|
START_MAXIMIZED | 1 | Iniciar maximizado |
START_MINIMIZED | 0 | Iniciar minimizado |
OPTION_MIN_TO_TRAY | 0 | Minimizar a la bandeja del sistema |
OPTION_ALWAYS_ON_TOP | 0 | Siempre visible encima |
PLAY_SOUND | 1 | Reproducir sonidos de alarma |
Se pueden definir hasta 30 etiquetas de preajustes de eventos con EVT_TEXT_0 a EVT_TEXT_29.
EVT_TEXT_0=Induction
EVT_TEXT_1=Intubation
EVT_TEXT_2=Incision
Define una cama (pestana). Se pueden definir multiples camas en un unico archivo de configuracion.
[BED/OR1]
BED/ (por ejemplo, OR1, ICU_BED3).Los dispositivos se agregan bajo una seccion [BED/...].
[DEV/nombre_dispositivo]
type=TipoDispositivo
port=EspecPuerto
| Clave | Obligatorio | Descripcion |
|---|---|---|
type | Si | Tipo de dispositivo (por ejemplo, BIS, Intellivue, Solar8000) |
port | Si | Puerto de conexion (ver Formatos de Puerto a continuacion) |
company | No | Fabricante (por ejemplo, Nihon Kohden) |
readonly | No | Modo solo lectura (0: desactivado, 1: activado) |
| Formato | Ejemplo | Descripcion |
|---|---|---|
| COM port | COM1, COM3 | Puerto serial de Windows |
| TCP/IP | 192.168.1.100:4343 | Dispositivo de red (IP:port) |
| Numero de puerto | 4343 | Modo servidor TCP en localhost |
| RPi serial | F1-F4 | Puertos AMA de Raspberry Pi |
| RPi USB | LU, LU1-LU4 | USB superior izquierdo |
| RPi USB | RU, RU1-RU4 | USB superior derecho |
El valor del puerto admite filtros de palabra clave e IP (misma sintaxis descrita en Filtrado de Puertos):
port=PORT#keyword1 keyword2#keyword3@IP_SUFFIX
Para dispositivos ADC (Convertidor Analogico-Digital), estan disponibles configuraciones adicionales por canal:
| Clave | Descripcion |
|---|---|
srate | Frecuencia de muestreo en Hz |
parname1, parname2, ... | Nombre del parametro para cada canal |
gain1, gain2, ... | Ganancia de conversion de voltaje a unidad fisica para cada canal |
[DEV/SNUADC]
type=SNUADC
port=COM3
srate=500
parname1=ECG
gain1=1.0
parname2=ART
gain2=100.0
Los dispositivos que usan el protocolo Datex DRI (S5, Solar8000, Bx50, B1x5M, Canvas) admiten opciones por dispositivo para seleccionar que formas de onda solicitar al monitor.
| Clave | Descripcion |
|---|---|
wavs | Lista de formas de onda a solicitar (separadas por coma, hasta 8) |
waveonly | 1 = solo formas de onda, sin valores numericos; 0 = ambos (predeterminado) |
Nombres de forma de onda disponibles: ECG1, ECG2, PLETH (alias PPG), CO2, O2, N2O, AWP, IABP1–IABP8, EEG1, EEG2, EEGBIS, EEGENT, EEGENT400.
Forma de onda de presion arterial invasiva (ART): Use
IABP1—ARTeINVP1no se reconocen. El primer canal de presion invasiva (etiquetado normalmente como ART en la pantalla del monitor) se mapea aIABP1.
Formas de onda predeterminadas cuando wavs no esta definido:
| Dispositivo | Formas de onda predeterminadas |
|---|---|
B1x5M (B105M / B115M / B125M) | Solo ECG1, PLETH — la familia B1x5M no puede mantener el ritmo del flujo S5 completo, por lo que el valor predeterminado se reduce intencionalmente |
| Resto de S5 / Solar8000 / Bx50 / Canvas | ECG1, PLETH, IABP1, CO2, AWP |
Si necesita formas de onda adicionales en un B1x5M (por ejemplo, presion arterial invasiva), listelas explicitamente:
[DEV/B1x5M]
type=B1x5M
port=LU
wavs=ECG1,PLETH,IABP1,CO2,AWP
Agrega un filtro de procesamiento de senales en tiempo real. Las definiciones de filtros se cargan desde el servidor de filtros.
[FILT/nombre_modulo_filtro]
modname de un filtro registrado en el servidor.Agregar filtros mediante la GUI — En el menu Filters de una cama, elija Add. El cuadro de dialogo muestra todos los filtros disponibles en el servidor de filtros local de Python. Desde la version 1.18.37, VitalRecorder descarga automaticamente en el primer uso un runtime reducido de Python 3.11 (~27 MB), reemplazando el paquete de 121 MB basado en pyvital. Los filtros basicos de ECG / PPG / EEG (HRV, MTWA, deteccion de QRS, FFT, etc.) vienen preinstalados y funcionan de inmediato. Los filtros que requieren runtimes de aprendizaje profundo (HPI, detector de ruido de latidos, clasificador de ritmo, SV dlapco) estan detras de un boton Install ML filters — al pulsarlo se ejecuta pip install openvital[all] de forma silenciosa (sin ventana de comandos) y descarga PyTorch / TensorFlow solo cuando es necesario. Reinicie VitalRecorder despues de la instalacion para que los nuevos filtros aparezcan en la lista.
SAVEDIR=D:\VitalData
[BED/OR1]
[DEV/Solar8000]
type=Solar8000
port=COM1
SAVEDIR=D:\VitalData
VRCODE=OR1_PC
[BED/OR1]
[DEV/Intellivue]
type=Intellivue
port=192.168.1.100:4343
[DEV/BIS]
type=BIS
port=COM3
[DEV/Primus]
type=Primus
port=COM4
SAVEDIR=D:\VitalData
[BED/OR1]
[DEV/Solar8000]
type=Solar8000
port=COM1
[BED/OR2]
[DEV/Philips]
type=Intellivue
port=192.168.1.101:4343
SAVEDIR=C:\Users\lucid\Desktop
[BED/test]
[DEV/NK EGA]
type=EGA
company=Nihon Kohden
port=9001
[BED/OR1]
[DEV/Solar8000]
type=Solar8000
port=COM1
[FILT/pleth_spi]
vital.exe [opciones] [nombre_archivo]
| Opcion | Descripcion |
|---|---|
--version, -v | Mostrar numero de version |
--devtypes, -d | Listar todos los tipos de dispositivos compatibles |
--console, -c | Ejecutar en modo consola (sin GUI) |
--debug [conf] | Ejecutar en modo depuracion (incluye modo consola, archivo de configuracion opcional) |
--conf <ruta> | Especificar la ruta del archivo de configuracion |
--upgrade, -u | Actualizar a la ultima version |
-u1.18.0 | Actualizar a una version especifica |
--help, -h | Mostrar ayuda |
nombre_archivo.vital | Abrir un archivo .vital para reproduccion |
El modo consola (--console o -c) ejecuta VitalRecorder sin la GUI. Esto es util para implementaciones sin interfaz grafica en Raspberry Pi o servidores Ubuntu. Los dispositivos se cargan desde la configuracion guardada.
El modo depuracion (--debug) incluye el modo consola y muestra registros detallados en la salida estandar, incluyendo apertura/cierre de dispositivos, reenvio de tramas, etc. En modo depuracion no se generan archivos .vital reales.
# Ejecutar en modo depuracion con la configuracion predeterminada
vital.exe --debug
# Ejecutar en modo depuracion con un archivo de configuracion especifico
vital.exe --debug test_mindray.conf
Para la lista completa de dispositivos compatibles con detalles de conexion y parametros, consulte Supported Devices.
| Dispositivo | Conexion | Configuracion de Puerto |
|---|---|---|
| Philips Intellivue | RS-232 | COM port, 115200 baud |
| GE Solar 8000 | RS-232 | COM port, 9600 baud |
| Nihon Kohden (Serial) | RS-232 | COM port, 9600 baud |
| Nihon Kohden (HL7GW) | TCP Server | Port 9001 |
| Nihon Kohden (EGA) | UDP | Port number |
| Mindray (HL7) | TCP Server | Port 10000 |
| Draeger (Medibus) | RS-232 | COM port, 9600 baud (8N2) |
| GE Datex-Ohmeda | RS-232 | COM port, 19200 baud (7E1) |
| Medtronic BIS | RS-232 | COM port, 57600 baud |
| BBraun SpaceCom | RS-232 | COM port, 9600 baud |
| BBraun HL7 (DoseLink) | TCP Server | Port 2575 |
| Masimo Radical-7 | RS-232 | COM port, 9600 baud |
| Edwards Hemosphere | RS-232 | COM port, 9600 baud |
| Hamilton ventilator | RS-232 | COM port, 38400 baud |
ping).--debug para verificar la comunicacion.Para dispositivos HL7 que comparten un unico puerto de gateway, use la funcion de Filtrado de Puertos con la palabra clave # para separar las camas.
BBraun DoseLink envia datos de multiples bombas a traves de una unica conexion TCP. VitalRecorder identifica automaticamente cada bomba usando el numero de serie en OBX-18 (Equipment Instance Identifier) y las asigna de PUMP1 a PUMP8.
Si las bombas no se separan correctamente:
--debug para verificar los registros.# si es necesario.SERVER_IP esta configurado correctamente.SEND_WEB esta establecido en 1.