Industrial Monitor

Manual de Usuario — Sistema de Monitoreo y Control de Refrigeración Industrial

v3.0 · Julio 2026

1. Introducción

Industrial Monitor es un sistema completo de monitoreo y control para equipos de refrigeración industrial. Consta de tres componentes:

📡 Hardware ESP32

Controlador con 7 sensores de temperatura DS18B20 (protocolo 1-Wire) y 3 relés para control de compresor, válvula inversora y relé auxiliar. Los sensores monitorean entrada/salida de evaporador, entrada/salida de condensador, descarga del compresor (0 cm y 30 cm), temperatura ambiente y cabeza de motor.

☁️ Backend en la nube

Servidor Express.js + SQLite que recibe telemetría del ESP32 (HTTP), gestiona comandos instantáneos (MQTT), almacena datos históricos y reglas de automatización. Desplegado en Render con broker MQTT en HiveMQ Cloud (TLS).

📱 Aplicación Android

App nativa en Kotlin/Compose que se comunica con el backend vía HTTP. Permite monitoreo en tiempo real, control de relés, visualización de gráficos históricos, reglas de automatización, herramientas de refrigeración (cálculos PT, superheat, subcooling, COP) y tablas de conversión.

Características principales

📊 Monitoreo en tiempo real7 temperaturas + 2 presiones virtuales cada 3 segundos
🔌 Control de relésCompresor, válvula inversora, auxiliar — con bloqueo/reset/desbloqueo. Respuesta instantánea vía MQTT.
📈 Historial con gráficosKPIs (ΔT, ciclos, tiempo compresor), crosshair, eventos, CSV
🤖 Reglas de automatizaciónTriggers compuestos AND/OR, secuencias de acciones, cooldown
🔧 Herramientas técnicoPT, superheat, subcooling, COP, conversor presión, tabla fracciones↔mm
📶 Configuración WiFiPor HTTP (comando remoto) o BLE provisioning
🔔 NotificacionesPush Android cuando se dispara una regla de automatización

2. Instalación

2.1 Descargar la app

La app está disponible en:

Si el APK no se instala, habilitar "Instalar apps de fuentes desconocidas" en Ajustes → Seguridad de Android.

2.2 Primer inicio de sesión

1
Al abrir la app, ingresá la URL del backend: https://industrial-monitor-backend.onrender.com
2
El ESP32 se auto-registra al enviar su primera telemetría. Aparecerá en el Dashboard con su ID (ej: 140808AC7100).
3
Tocá la tarjeta del dispositivo para ver los detalles y comenzar a usar el sistema.

2.3 Hardware — Conexión de sensores

Los 7 sensores DS18B20 se conectan en bus 1-Wire al GPIO4 del ESP32. Las etiquetas son:

EtiquetaSensorUbicación en el equipo
evap_inEvaporador — EntradaTubería de entrada al evaporador
evap_outEvaporador — SalidaTubería de salida del evaporador
cond_inCondensador — EntradaTubería de entrada al condensador
cond_outCondensador — SalidaTubería de salida del condensador
desc_0cmDescarga — 0 cmTubería de descarga del compresor
ambienteAmbienteTemperatura ambiente del gabinete
motor_headCabeza de motorCarcasa del compresor

3. Dashboard

Pantalla principal. Muestra todos los dispositivos registrados con un resumen de su estado.

Dashboard
Fig 1. Dashboard con dispositivo AC7100

Información mostrada

Barra superior

BotónFunción
🔧 HerramientasAbre la pantalla de herramientas (calculadoras, conversor, tablas)
📶 Configurar WiFiAbre el diálogo de configuración WiFi por HTTP
🔄 ActualizarRefresca manualmente los datos del dashboard
⋮ MenúOpciones: Configurar BLE, cambiar backend, etc.

Auto-refresh: El dashboard se actualiza automáticamente cada 3 segundos.

4. Pantalla del Dispositivo

Al tocar una tarjeta en el Dashboard, se abre la pantalla de detalle con toda la información del dispositivo.

Detalle del dispositivo
Fig 2. Pantalla de detalle — scroll hacia abajo para ver todas las secciones

Secciones (desplazables)

4.1 Estado del Compresor

Muestra el estado actual (ON/OFF), el relay (Normal/Bloqueado/Reseteado) y la intensidad de señal WiFi (RSSI).

4.2 Temperaturas

Los 7 sensores agrupados por zona: Evaporador (entrada/salida), Condensador (entrada/salida), Descarga 0cm, Ambiente y Cabeza de Motor. Cada uno muestra su temperatura en °C.

4.3 Presiones (estimadas)

Presiones de succión y descarga calculadas virtualmente a partir de las temperaturas de saturación. Se muestran en PSI y bar. Incluye switches para alternar entre Absoluta/Manométrica y Burbuja/Rocío.

4.4 Refrigerante

Selector desplegable con 10 refrigerantes (R22, R134a, R404A, R410A, R407C, R507A, R717, R290, R32, R1234yf). El cambio se envía al ESP32 como comando pendiente.

4.5 Controles de relé (barra inferior fija)

BotónAcciónEfecto
ReiniciarCMD_RESETReinicia el compresor (apaga y quita bloqueo si existe)
DesbloquearCMD_UNBLOCKQuita bloqueo de seguridad
Inv. (ON/OFF)Toggle válvula inversoraActiva/desactiva la válvula de 4 vías
AuxToggle auxiliarActiva/desactiva el relé auxiliar

UI optimista: Los relays cambian visualmente al instante (el botón refleja el nuevo estado), y se confirman cuando el ESP32 responde. Si el comando falla, el estado se revierte.

4.6 Botones de navegación

📶 Cambiar WiFiAbre diálogo para cambiar la red WiFi del ESP32
📊 Ver Historial y GráficosNavega a la pantalla de historial con gráficos interactivos
🤖 Reglas de AutomatizaciónNavega a la pantalla de reglas

5. Historial y Gráficos

Pantalla de análisis histórico con gráficos interactivos, KPIs y registro de eventos.

Historial y Gráficos
Fig 3. Historial con gráfico, KPIs, selector de sensores y actividad

5.1 Controles superiores

ControlFunción
📅 Selector de fechaElige la fecha del historial. Se posiciona automáticamente en la última fecha con datos.
⏱ Selector de rango30 minutos, 1h, 2h, 6h, 12h, 24h. Define la ventana de tiempo del gráfico.
🔘 SensoresCheckboxes para elegir qué sensores mostrar en el gráfico (máximo 7).
🔄 Auto / ManualChip para activar/desactivar actualización automática (Live mode). Verde = refresco cada 5s sin parpadeo.
📥 CSVExporta los datos del rango seleccionado a formato CSV.

5.2 Gráfico interactivo

5.3 Panel de KPIs

Tarjetas con indicadores clave calculados para el período seleccionado:

KPIDescripción
🌡 Temp MínTemperatura más baja del período entre todos los sensores
🌡 Temp MáxTemperatura más alta del período
📊 Temp PromPromedio de todas las temperaturas
🔄 ΔT EvapDiferencia promedio entrada/salida del evaporador
🔄 ΔT CondDiferencia promedio entrada/salida del condensador
🔁 CiclosCantidad de arranques del compresor
⏱ Tiempo CompresorMinutos totales con compresor encendido
⚠ AlarmasCantidad de eventos de alarma disparados

5.4 Registro de Actividad

Línea de tiempo detallada con todos los eventos del período: arranques, bloqueos, resets, alarmas y reinicios del ESP32. Cada evento tiene timestamp, tipo, icono y color.

6. Reglas de Automatización

Sistema de reglas para automatizar acciones en base a condiciones de temperatura, presión, estado de relés o tiempo.

Reglas de Automatización
Fig 4. Pantalla de reglas — con regla expandida mostrando opciones de editar/eliminar

6.1 Estructura de una regla

CampoDescripción
NombreEtiqueta descriptiva (ej: "Alta temp evap")
LógicaAND (todas las condiciones deben cumplirse) o OR (al menos una). Hasta 3 condiciones.
CondicionesFuente (temperatura, presión, relay, tiempo), sensor, operador (>, <, =) y umbral.
PersistenciaTiempo en ms que la condición debe mantenerse antes de disparar (default: 10s).
CooldownTiempo mínimo entre disparos consecutivos (default: 0 = sin cooldown).
AccionesSecuencia de hasta 4 pasos con delay entre cada uno.

6.2 Acciones disponibles

AcciónIconoEfecto
Notificar🔔Envía push notification al teléfono + evento al historial
Reset🔄Reinicia el compresor (apaga y quita bloqueo)
Bloquear🚫Bloquea el compresor (no se puede encender hasta desbloquear)
DesbloquearQuita el bloqueo del compresor
Inv ON↔️Activa válvula inversora (modo calor)
Inv OFF↔️Desactiva válvula inversora (modo frío)
Aux ON🔌Activa relé auxiliar
Aux OFF🔌Desactiva relé auxiliar
EsperarPausa entre acciones (delay configurable en ms)

6.3 Gestión de reglas

6.4 Ejemplo de regla compuesta

Nombre: Protección compresor

Lógica: AND

Condición 1: desc_0cm > 120°C

Condición 2: compresor = ON

Persistencia: 30 segundos

Cooldown: 5 minutos

Acciones:

  1. Notificar (0ms) → push al teléfono
  2. Bloquear (2000ms) → apaga compresor y lo bloquea

Resultado: Si la descarga supera 120°C por 30s con el compresor andando, se notifica al técnico y se bloquea el compresor.

7. Herramientas

Pantalla con 4 pestañas de utilidades para el técnico refrigerista. Accesible desde el botón 🔧 en el Dashboard.

7.1 Calculadoras (pestaña 1)

Herramientas - Calculadoras
Fig 5. Pestaña Calculadoras: PT, superheat, subcooling, COP y ΔT

Presión — Temperatura

Calcula la presión de saturación a partir de la temperatura. Usá el slider (-40°C a 60°C) o ingresá el valor manualmente. Resultado en PSI y bar. Los switches Rel/Abs y Burb/Rocío ajustan la lectura a manométrica o presión de rocío.

Sobrecalentamiento (Superheat)

SH = Tsucción − Tsaturación. Ingresá la temperatura de succión (°C) y la presión de succión (PSI). Verde = rango ideal (5-15°C), Rojo = fuera de rango.

Subenfriamiento (Subcooling)

SC = Tsaturación − Tlíquido. Ingresá temperatura de líquido y presión de descarga. Verde = 2-12°C.

COP Aproximado (Carnot)

COP = Tevap / (Tcond − Tevap) en Kelvin. Verde ≥ 4.0, Naranja ≥ 2.5, Rojo < 2.5.

Diferencia de Temperatura (ΔT)

Diferencia simple entre dos temperaturas: |T1 − T2|.

7.2 Conversor de Presión (pestaña 2)

Herramientas - Conversor
Fig 6. Conversor de presión: PSI ↔ bar ↔ kPa ↔ kg/cm²

Conversión bidireccional entre 4 unidades de presión. Al ingresar un valor en cualquier campo, los otros 3 se actualizan instantáneamente. Arranca con 100 PSI precargados.

UnidadFactor
PSI1
bar1 PSI = 0.06895 bar
kPa1 PSI = 6.89476 kPa
kg/cm²1 PSI = 0.070307 kg/cm²

7.3 Tabla PT (pestaña 3)

Herramientas - Tabla PT
Fig 7. Tabla Presión-Temperatura de −40°C a 80°C

Tabla completa de presión de saturación para el refrigerante seleccionado, desde −40°C hasta 80°C en pasos de 2°C. Muestra PSI, bar y kPa. Respeta los switches Rel/Abs y Burb/Rocío. Coeficientes Antoine validados contra NIST REFPROP.

7.4 Fracciones ↔ Milímetros (pestaña 4)

Herramientas - Frac↔mm
Fig 8. Tabla de conversión fracciones de pulgada a mm

Dos secciones:

Historial flotante

Barra inferior que muestra las últimas 5 operaciones realizadas en las calculadoras (PT, SH, SC, COP, ΔT) con su valor y color.

8. Cambiar WiFi

Hay dos formas de cambiar la red WiFi del ESP32:

8.1 Por HTTP (comando remoto)

Disponible cuando el ESP32 está conectado y online. Desde el botón "Cambiar WiFi" en la pantalla del dispositivo:

1
Tocá Escanear redes. El comando viaja al ESP32 vía HTTP (polling cada 500ms).
2
El ESP32 escanea redes WiFi cercanas y devuelve la lista con SSID, RSSI (señal) y tipo de seguridad.
3
Seleccioná la red deseada de la lista.
4
Ingresá la contraseña (si la red es protegida).
5
Tocá Conectar. Las credenciales se envían al ESP32 como comando pendiente.
6
El ESP32 guarda las credenciales, se reinicia (~1 minuto) y se conecta a la nueva red.

Feedback post-envío: Al tocar Conectar, aparece un banner animado "Reiniciando con nueva red WiFi..." que desaparece automáticamente cuando el dispositivo vuelve a estar online.

Problemas de conexión: Si el ESP32 no responde (WiFi inestable), el diálogo muestra un mensaje "¿Sin conexión?" con un botón para usar configuración BLE.

Credenciales incorrectas: Si el ESP32 no puede conectarse a la nueva red, después de ~15 segundos sin respuesta, la app muestra un banner rojo: "Dispositivo sin respuesta. ¿Configurar WiFi por BLE?".

8.2 Por BLE (provisioning)

Para primera configuración o cuando el ESP32 no tiene WiFi. Accesible desde el menú del Dashboard.

9. Comunicación MQTT (Instantánea)

A partir de la v3.1, el sistema usa una arquitectura híbrida HTTP + MQTT que combina lo mejor de ambos protocolos:

DatoProtocoloLatenciaMotivo
Telemetría (sensores, presiones)HTTP POST~200msConfiabilidad — Render permite HTTP sin restricciones
Comandos de relayMQTT~50msInstantáneo — sin polling, push directo al ESP32
Reglas de automatizaciónMQTT~50msConfig y disparos van por MQTT
Notificaciones de alarmaMQTT + HTTP~50-200msEvento instantáneo, almacenado por HTTP
Escaneo WiFi, refrigeranteMQTT~50msComandos de configuración
Historial, KPIs, herramientasHTTP REST~200msConsultas a la base de datos

9.1 ¿Por qué híbrido?

HTTP para telemetría: el backend en Render (free tier) solo permite tráfico HTTP/HTTPS saliente. Las telemetrías se envían cada 3 segundos vía POST /api/ingest y se almacenan en SQLite. Es confiable y no depende de puertos no estándar.

MQTT para comandos: el ESP32 se conecta directamente al broker HiveMQ Cloud (0fca7432...s1.eu.hivemq.cloud:8883) con TLS. Cuando tocás un relay en la app, el backend publica el comando en el topic indmon/{deviceId}/cmd y el ESP32 lo recibe al instante — sin esperar ningún ciclo de polling. La confirmación se publica en indmon/{deviceId}/status.

9.2 Arquitectura de topics MQTT

TopicDirecciónQoSContenido
indmon/{id}/telemetryESP32 → Backend0JSON con 7 temperaturas, presiones, relay state, WiFi RSSI, reglas (al boot)
indmon/{id}/cmdBackend → ESP321JSON: {"command":"reset","params":{}}
indmon/{id}/statusESP32 → Backend1JSON: {"cmd":"reset","status":"ok"}
indmon/{id}/eventESP32 → Backend1JSON con evento de alarma/regla disparada

9.3 Broker HiveMQ Cloud

9.4 Librería en el ESP32

El ESP32 usa PubSubClient sobre WiFiClientSecure (TLS). Reemplaza el polling HTTP anterior (500ms) por una suscripción MQTT permanente. Flash extra usado: ~15 KB. RAM extra: ~8 KB.

En el backend se usa mqtt.js (npm). Todos los endpoints de comando (/api/devices/:id/reset, /block, /unblock, /command) publican al topic MQTT en lugar de insertar en pending_commands.

10. Solución de Problemas

❓ El dispositivo aparece como APAGADO en el dashboard

Causa: El ESP32 no envió telemetría en más de 15 segundos (timeout de conexión).

Solución: Verificar que el ESP32 esté encendido y conectado a WiFi. Revisar la fuente de alimentación (5V, mínimo 1A).

❓ Un sensor muestra −127°C o valor inválido

Causa: Sensor desconectado, cortocircuito o defectuoso.

Solución: Revisar la conexión física del sensor al bus 1-Wire (GPIO4). Verificar que la resistencia pull-up de 4.7kΩ esté presente entre VCC y DATA.

❓ El relay no responde al presionar el botón

Causa: El comando no llegó al ESP32 (WiFi débil) o el relay está bloqueado por una regla de seguridad.

Solución: Verificar el estado del relay en el dispositivo. Si está "Bloqueado", usar "Desbloquear". Revisar que no haya una regla de automatización que esté bloqueando el relay (las reglas tienen prioridad sobre comandos manuales). Los relays son active-LOW (JQC-3FF-S-Z).

❓ La tabla de fracciones se ve lenta o trabada

Causa: Las listas se generaban en cada recomposición en versiones anteriores.

Solución: Actualizar a la última versión del APK (v3.0+). Las listas ahora usan remember con keys estables para scroll fluido.

❓ Error 133 al configurar WiFi por BLE

Causa: El ESP32 se reiniciaba antes de enviar el ACK de confirmación BLE.

Solución: Actualizar el firmware del ESP32 a v3.0+. El fix implementa un restart diferido (el BLE envía el ACK, y el ESP32 se reinicia 2 segundos después en el loop principal).

❓ Las reglas de automatización no se disparan

Causa: La regla puede estar desactivada (switch OFF), en cooldown, o la persistencia no se cumplió.

Solución: Verificar que el switch de la regla esté verde (ON). Revisar que las condiciones tengan valores realistas (ej: un umbral de 200°C nunca se alcanzará). Asegurarse de que la regla se haya guardado (auto-save al editar).

❓ El backend no responde (Render)

Causa: Render puede suspender instancias gratuitas después de inactividad.

Solución: Esperar ~30 segundos a que Render despierte la instancia. El health endpoint de UptimeRobot mantiene el servicio activo durante horas pico.