Un gemelo digital de HVAC es un modelo de software vivo de tus unidades de tratamiento de aire (UTA), enfriadoras y bombas, alimentado con datos reales de sensores para que puedas ver cómo se comporta la instalación y dónde derrocha energía. En este artículo diseñarás uno de principio a fin: leer puntos de controladores BACnet, publicarlos por MQTT, estructurar el árbol de topics y ejecutar analítica que detecte calefacción y refrigeración simultáneas, un delta-T bajo en las enfriadoras y consignas que derivan. Todo con herramientas abiertas y un broker MQTT estándar.
Por qué el HVAC encaja de forma natural con un gemelo digital
La calefacción, ventilación y aire acondicionado suele ser uno de los mayores consumidores de energía en los edificios comerciales, y gran parte del derroche es invisible. Una válvula con fugas, una compuerta de free cooling atascada en posición cerrada o una enfriadora funcionando con una diferencia de temperatura deficiente rara vez disparan una alarma en el sistema de gestión del edificio (BMS). El edificio sigue siendo confortable mientras el contador de energía sube en silencio.
Un gemelo digital hace visibles estos problemas combinando tres cosas:
- Datos en vivo de cada punto relevante: temperaturas, presiones, posiciones de válvulas y compuertas, velocidades de ventiladores y potencia.
- Un modelo de cómo debería comportarse cada activo: delta-T de diseño, potencia de ventilador esperada a una velocidad dada, la secuencia de operación.
- Lógica de comparación que señala la diferencia entre el comportamiento esperado y el real.
El gemelo no sustituye al BMS. El BMS sigue controlando la instalación; el gemelo observa, analiza y aconseja. Si el concepto es nuevo para ti, empieza por nuestra guía principal sobre tecnología de gemelo digital.
Arquitectura de referencia
BACnet/IP controllers (AHU, chiller, VAV, meters)
|
| BACnet ReadProperty / COV
v
BACnet-to-MQTT gateway (edge PC, industrial gateway or Node-RED)
|
| MQTT over TLS, port 8883
v
Cloud MQTT broker (ConnectMQ)
|
+--> Python analytics service (subscriber) -> publishes KPIs and faults
+--> Dashboards and 3D views (WebSocket, port 8084)
+--> Time-series database via Telegraf or a custom subscriber
El gateway es el único componente que habla BACnet. Todo lo que está por encima habla MQTT, lo que desacopla la analítica, los paneles y el almacenamiento de la red del edificio. Varios gateways comerciales y opciones de código abierto pueden consultar objetos BACnet y publicarlos como mensajes MQTT; Node-RED con un nodo BACnet de la comunidad es una opción popular para los pilotos.
Mantén el gateway en solo lectura al principio. Escribir consignas de vuelta en el BMS es posible, pero debe llegar más tarde, cuando las recomendaciones del gemelo se hayan ganado la confianza y con un control de cambios adecuado.
Puntos que recoger
No necesitas todos los puntos del BMS. Empieza por los que determinan la energía y el confort:
| Activo | Puntos clave | Qué revelan |
|---|---|---|
| Unidad de tratamiento de aire | Temperatura de impulsión, de retorno, de mezcla y exterior | Rendimiento del free cooling, calefacción y refrigeración simultáneas |
| Unidad de tratamiento de aire | Posiciones de las válvulas de frío y calor, posición de la compuerta de aire exterior | Válvulas con fugas, compuertas atascadas |
| Unidad de tratamiento de aire | Velocidad y potencia del ventilador de impulsión, presión estática en conducto, presión diferencial del filtro | Energía del ventilador, oportunidades de reajuste de la presión estática, colmatación del filtro |
| Enfriadora | Temperaturas de impulsión y retorno de agua fría, temperaturas del agua de condensación, potencia (kW), estado | Eficiencia (kW por tonelada), síndrome de delta-T bajo |
| Bombas | Velocidad, potencia, presión diferencial | Sobrebombeo, válvulas que se contrarrestan |
| Zonas y VAV | Temperatura de zona, consigna, caudal de aire, posición de la compuerta | Zonas rebeldes que arrastran a todo el sistema |
Un intervalo de sondeo práctico para la mayoría de estos puntos es de un minuto. Los valores que cambian rápido, como la potencia del ventilador, pueden usar suscripciones de cambio de valor (COV) en el lado BACnet, con una banda muerta para que el gateway no sature el broker.
Diseño de topics para un gemelo digital de HVAC
Una jerarquía de topics coherente es lo que permite al gemelo, a los paneles y a la analítica encontrar los datos sin configurar cada punto. Una estructura de estilo ISA-95 también funciona bien en edificios: empresa, emplazamiento, área, activo.
acme/hq-building/plant/chiller-1/telemetry
acme/hq-building/plant/chwp-1/telemetry
acme/hq-building/floor-3/ahu-3/telemetry
acme/hq-building/floor-3/ahu-3/faults
acme/hq-building/floor-3/ahu-3/kpi
Agrupa los puntos relacionados de un activo en un único mensaje JSON, publicado al intervalo de sondeo:
{
"ts": "2026-10-16T09:42:00Z",
"sat": 13.1,
"rat": 23.4,
"mat": 17.9,
"oat": 9.6,
"clg_valve": 42,
"htg_valve": 18,
"oa_damper": 20,
"fan_speed": 78,
"fan_kw": 11.2,
"filter_dp": 185
}
Las enfriadoras siguen el mismo patrón con campos como chws y chwr (temperatura de impulsión y retorno del agua fría), flow_lps (caudal en litros por segundo), kw y status, de los que depende la analítica siguiente.
Usar un mensaje por activo en lugar de uno por punto mantiene alineadas las marcas de tiempo, algo importante cuando tus reglas comparan varios valores en el mismo instante. ConnectMQ reconoce las jerarquías de topics de estilo ISA-95, de modo que la vista de dispositivos del portal agrupa los activos por nivel. Nuestro artículo sobre gemelos digitales ISA-95 explica en profundidad el modelo de nomenclatura.
Analítica que detecta el derroche de energía
El valor del gemelo procede de reglas sencillas y explicables. El servicio en Python siguiente se suscribe a todas las UTA y enfriadoras del edificio, aplica tres comprobaciones clásicas y publica los resultados de vuelta en MQTT, donde los paneles y las reglas de alerta pueden recogerlos.
import json
import time
import paho.mqtt.client as mqtt
BROKER = "broker.connectmq.com"
PORT = 8883
SITE = "acme/hq-building"
DESIGN_CHW_DELTA_T = 5.5 # grados C, según los datos de diseño de la enfriadora
VALVE_OVERLAP_PCT = 10 # ambas válvulas abiertas por encima de esto = derroche
ECON_OAT_MAX = 15.0 # se espera free cooling por debajo de esta temperatura exterior
def check_ahu(asset, d):
faults = []
if d["clg_valve"] > VALVE_OVERLAP_PCT and d["htg_valve"] > VALVE_OVERLAP_PCT:
faults.append("simultaneous_heating_cooling")
if d["oat"] < ECON_OAT_MAX and d["clg_valve"] > 20 and d["oa_damper"] < 30:
faults.append("economizer_not_used")
if d["filter_dp"] > 250:
faults.append("filter_loaded")
return {"faults": faults, "fan_kw": d["fan_kw"]}
def check_chiller(asset, d):
delta_t = d["chwr"] - d["chws"]
tons = d["flow_lps"] * 4.19 * delta_t / 3.517 # kW térmicos a toneladas de refrigeración
kw_per_ton = d["kw"] / tons if tons > 1 else None
faults = []
if d["status"] == "on" and delta_t < 0.6 * DESIGN_CHW_DELTA_T:
faults.append("low_delta_t")
return {"delta_t": round(delta_t, 2),
"kw_per_ton": round(kw_per_ton, 3) if kw_per_ton else None,
"faults": faults}
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected:", reason_code)
client.subscribe(f"{SITE}/+/+/telemetry", qos=1)
def on_message(client, userdata, msg):
parts = msg.topic.split("/")
area, asset = parts[2], parts[3]
data = json.loads(msg.payload)
if asset.startswith("ahu"):
result = check_ahu(asset, data)
elif asset.startswith("chiller"):
result = check_chiller(asset, data)
else:
return
base = f"{SITE}/{area}/{asset}"
client.publish(f"{base}/kpi", json.dumps(result), qos=1, retain=True)
if result["faults"]:
client.publish(f"{base}/faults", json.dumps({"ts": time.time(), "faults": result["faults"]}), qos=1)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID")
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set() # el almacén de CA del sistema confía en el certificado Let's Encrypt del broker
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, PORT, keepalive=60)
client.loop_forever()
Para probar el servicio sin credenciales, puedes apuntarlo al servidor MQTT público gratuito en el puerto 1883, sin usuario ni TLS, con datos simulados; es solo para pruebas y prototipos, nunca para datos reales del edificio.
Las tres comprobaciones apuntan a problemas energéticos de HVAC bien conocidos:
- Calefacción y refrigeración simultáneas. Cuando las dos válvulas de una UTA están abiertas, la unidad lucha contra sí misma. Las causas van desde una válvula con fugas hasta un lazo de control mal ajustado.
- Free cooling sin aprovechar. Si fuera hace fresco y la unidad sigue con refrigeración mecánica y la compuerta de aire exterior casi al mínimo, se está desaprovechando la refrigeración gratuita.
- Delta-T bajo en el agua fría. Un circuito de agua fría que funciona muy por debajo de su diferencia de temperatura de diseño obliga a bombear más y a menudo a poner en marcha enfriadoras adicionales. Es una de las ineficiencias de planta más comunes y costosas.
Cada umbral es un punto de partida. Ajústalos por activo con los documentos de diseño y unas semanas de datos observados. El artículo sobre gemelo digital energético profundiza en las líneas base y la medición de ahorros.
Alertas y visualización
Como los resultados son mensajes MQTT normales, cualquier suscriptor puede consumirlos. En el portal de ConnectMQ puedes crear reglas de alerta por umbral sobre valores numéricos, por ejemplo kw_per_ton o una temperatura de impulsión, y revisar las alertas disparadas en el registro de alertas. Los mensajes de fallo en sí conviene encaminarlos con tus propias herramientas: Node-RED puede convertirlos en correos o tickets, y un panel de Grafana respaldado por una base de datos de series temporales puede mostrar las tendencias.
Para la visualización, un navegador se conecta por WebSocket seguro en el puerto 8084 (ruta /mqtt) y se suscribe a los topics kpi y telemetry. Un plano 2D con las UTA coloreadas suele ser más útil para los equipos de mantenimiento que un modelo fotorrealista. Si quieres ver cómo es un gemelo digital 3D en vivo, la demo web de gemelo digital de ConnectMQ anima una fábrica con máquinas, depósitos, bombas y cintas transportadoras actualizados por WSS, y el mismo patrón se aplica a una sala de máquinas.
Lista de comprobación para el despliegue
- Inventario: exporta la lista de puntos del BMS y elige los puntos de la tabla anterior para una UTA y una enfriadora.
- Gateway: instala un gateway de BACnet a MQTT en la red del edificio, en solo lectura y publicando sobre TLS.
- Topics: acuerda la jerarquía y los nombres de los campos JSON antes de conectar el segundo activo.
- Broker: crea un broker privado con credenciales por gateway y por servicio de analítica.
- Validación: compara durante un día los valores del gemelo con la interfaz del BMS; corrige escalas y unidades.
- Reglas: activa las tres comprobaciones, revisa los hallazgos cada semana con el equipo de mantenimiento y ajusta los umbrales.
- Escalado: añade el resto de UTA, bombas y zonas, y después plantéate casos de uso predictivos como el desgaste de filtros y rodamientos.
Para la parte de mantenimiento, consulta gemelo digital para mantenimiento predictivo, y para la visión global del edificio, la guía de gemelo digital de edificios.
Consideraciones de seguridad
Las redes de los edificios suelen ser antiguas, planas y mal segmentadas, así que el gateway es un punto sensible. Colócalo en su propio segmento de red, permite solo conexiones salientes al broker en el puerto 8883, no expongas nunca BACnet a internet y da a cada gateway sus propias credenciales. Un broker MQTT gestionado elimina por completo la necesidad de abrir puertos entrantes en la red del edificio, porque todas las conexiones salen desde el emplazamiento. No publiques nunca datos reales del edificio en un broker público de pruebas; úsalo solo con valores sintéticos mientras haces prototipos.
Construye tu gemelo digital de HVAC en ConnectMQ
ConnectMQ es un broker MQTT en la nube que transporta los datos en vivo de los que depende tu gemelo de HVAC: MQTT 3.1.1 y 5.0, TLS, WebSockets para los paneles, vistas de dispositivos compatibles con ISA-95 y alertas por umbral en el portal. Tus gateways, servicios de analítica y paneles se conectan como clientes MQTT estándar. Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito, y transmite hoy los datos de tu primera UTA.
Preguntas frecuentes
¿Qué es un gemelo digital de HVAC?
Es un modelo vivo de los equipos de HVAC, como las unidades de tratamiento de aire y las enfriadoras, que se actualiza continuamente con datos reales de sensores y se compara con el comportamiento esperado para detectar fallos y derroches de energía.
¿Tengo que sustituir mi BMS para construir un gemelo digital de HVAC?
No. El gemelo lee los datos del BMS existente a través de un gateway de BACnet a MQTT y deja el control en manos del BMS. Añade análisis, no un nuevo sistema de control.
¿Por qué usar MQTT en lugar de leer BACnet directamente?
BACnet está diseñado para redes locales de edificios. MQTT lleva los datos de forma segura a la nube mediante conexiones salientes y permite que muchos consumidores, como la analítica, los paneles y el almacenamiento, compartan el mismo flujo.
¿Con qué rapidez puede un gemelo digital de HVAC mostrar resultados?
Reglas sencillas como la calefacción y refrigeración simultáneas o el delta-T bajo de las enfriadoras pueden sacar a la luz problemas en las primeras semanas de datos, pero los ahorros dependen del edificio y de que se actúe sobre los hallazgos.



