La optimización HVAC con IA utiliza los datos del sistema de calefacción, ventilación y aire acondicionado de un edificio para aprender cómo se comporta realmente cada zona y, a partir de ahí, elegir horas de arranque, consignas y horarios que mantengan el confort de los ocupantes con menos energía. En este caso de uso verás qué datos recoger por MQTT, cómo aprender la respuesta térmica de una zona a partir de esos datos, cómo calcular una hora de arranque óptima y cómo enviar las recomendaciones al edificio de forma segura.
Dónde desperdicia energía el control HVAC convencional
La mayoría de los sistemas de gestión de edificios funcionan con horarios y consignas fijos configurados en la puesta en marcha. La unidad de tratamiento de aire arranca a las 06:00 todos los días laborables porque alguien decidió en su día que era lo bastante pronto, sin importar si la noche fue templada o fría. Las consignas se mantienen en el mismo valor durante una tarde de viernes con el edificio medio vacío. La calefacción y la refrigeración simultáneas en zonas contiguas pasan desapercibidas durante meses.
Nada de esto es un fallo de los controladores, que cumplen bien su función de mantener una consigna. La carencia está en el nivel de supervisión: decidir cuáles deberían ser las consignas y los horarios en función del clima, la ocupación y el comportamiento térmico del edificio. Ahí es donde ayudan los modelos basados en datos, y por eso la optimización HVAC con IA suele situarse por encima del sistema de gestión del edificio existente en lugar de sustituirlo.
Datos que recoger para la optimización HVAC con IA
| Dato | Origen | Intervalo típico | Por qué importa |
|---|---|---|---|
| Temperatura del aire de la zona | Puntos del BMS, sensores inalámbricos | 1–5 min | La variable de confort que se controla |
| Consignas y modo de la zona | BMS | Al cambiar | Lo que el controlador intenta conseguir |
| Temperatura y caudal del aire de impulsión, posición de válvulas o compuertas | Controladores de UTA y VAV | 1–5 min | Cuánta calefacción o refrigeración se aporta |
| Temperatura exterior, humedad, irradiancia solar | Estación o servicio meteorológico | 5–15 min | Principal perturbación externa |
| Ocupación | Horarios, contadores de personas, CO2 | 5–15 min | Confort necesario y ganancias internas |
| Energía eléctrica o térmica | Contadores en enfriadoras, calderas, UTA | 15 min | El coste que se quiere minimizar |
Los sistemas de gestión de edificios suelen hablar BACnet o Modbus. Un gateway lee los puntos relevantes y los publica en un broker MQTT bajo una jerarquía coherente, de modo que el servicio de optimización nunca tiene que conocer los nombres de puntos de cada fabricante:
connectmq/hq/floor3/zone-east/temperature {"ts":..., "value": 23.8, "unit":"degC"}
connectmq/hq/floor3/zone-east/setpoint {"ts":..., "value": 22.0, "unit":"degC"}
connectmq/hq/floor3/ahu2/supply_temp {"ts":..., "value": 14.2, "unit":"degC"}
connectmq/hq/weather/outdoor_temp {"ts":..., "value": 31.5, "unit":"degC"}
connectmq/hq/floor3/zone-east/recommendation {"ts":..., "start_at":"06:40", "reason":"..."}
Si estás eligiendo entre protocolos de edificio en el gateway, BACnet vs Modbus los compara.
Tres oportunidades de optimización
- Arranque y parada óptimos. Empieza a climatizar cada zona justo con la antelación necesaria para alcanzar la banda de confort cuando comienza la ocupación, y para antes cuando la masa térmica del edificio vaya a mantener la temperatura hasta que la gente se marche.
- Optimización de consignas. Relaja las consignas dentro de la banda de confort cuando las zonas están desocupadas o poco ocupadas, y preenfría o precalienta en horas de baja demanda o precio bajo.
- Detección de fallos y despilfarros. Localiza zonas que calientan y enfrían a la vez, válvulas que nunca cierran o sensores que derivan. Suelen ser los ahorros más rápidos.
El arranque óptimo es el mejor primer proyecto: es fácil de explicar, sus ahorros son medibles y su modo de fallo (una zona algo cálida a la hora de apertura) es leve.
Aprender la respuesta térmica de una zona
Muchos edificios se comportan razonablemente como un sistema térmico de primer orden en horizontes cortos. El cambio de temperatura de la zona en cada paso de tiempo depende de la diferencia con la temperatura exterior (ganancia de calor a través de la envolvente) y de la refrigeración o calefacción que aporta el sistema HVAC:
T[k+1] - T[k] = a * (T_out[k] - T[k]) + b * u[k] + c
Aquí u es la salida del HVAC (por ejemplo, refrigeración encendida o apagada, o la posición de una válvula), y c recoge las ganancias internas y solares medias. Ajustar a, b y c por zona mediante regresión lineal con unas pocas semanas de datos da un modelo de caja gris: lo bastante sencillo como para confiar en él y lo bastante basado en datos como para reflejar el comportamiento real de cada zona. Los proyectos más avanzados usan gradient boosting o modelos neuronales con variables de ocupación y radiación solar, pero el modelo de caja gris es un punto de partida sólido y explicable.
Ejemplo: arranque óptimo a partir de datos MQTT
El siguiente script ajusta el modelo térmico de una zona y luego busca la hora de arranque de la refrigeración más tardía que aún lleva la zona a la banda de confort al inicio de la ocupación. Usa un historial simulado para poder ejecutarse en cualquier lugar y publica la recomendación en el servidor MQTT público gratuito. En un despliegue real, el historial vendría de tu suscriptor historian y el pronóstico meteorológico de un servicio del tiempo.
import json
import random
import time
import uuid
import numpy as np
import paho.mqtt.client as mqtt
from sklearn.linear_model import LinearRegression
STEP_MIN = 5
COMFORT_MAX = 24.0
OCCUPANCY_START = "08:00"
# --- 1. Historial simulado (sustitúyelo por datos del historian) ------------
rng = np.random.default_rng(1)
true_a, true_b, true_c = 0.004, -0.06, 0.004
T, rows = 25.0, []
for k in range(14 * 24 * 12): # dos semanas en pasos de 5 minutos
hour = (k * STEP_MIN / 60) % 24
t_out = 24 + 7 * np.sin((hour - 9) / 24 * 2 * np.pi)
u = 1.0 if 7 <= hour < 18 else 0.0
T_next = T + true_a * (t_out - T) + true_b * u + true_c + rng.normal(0, 0.03)
rows.append((T, t_out, u, T_next - T))
T = T_next
data = np.array(rows)
X = np.column_stack([data[:, 1] - data[:, 0], data[:, 2]])
model = LinearRegression().fit(X, data[:, 3])
a, b = model.coef_
c = model.intercept_
print(f"learned a={a:.4f} b={b:.4f} c={c:.4f}")
# --- 2. Búsqueda del arranque óptimo ---------------------------------------
def simulate(start_index, T0, t_out_forecast, occ_index):
T = T0
for k in range(occ_index):
u = 1.0 if k >= start_index else 0.0
T = T + a * (t_out_forecast[k] - T) + b * u + c
return T
T_now = 25.2 # temperatura de la zona a las 05:00
steps_until_occ = (8 - 5) * 60 // STEP_MIN # 05:00 -> 08:00
t_out_fc = [22 + 0.08 * k for k in range(steps_until_occ)] # pronóstico de mañana que se calienta
best = 0
for start in range(steps_until_occ, -1, -1): # primero el arranque más tardío
if simulate(start, T_now, t_out_fc, steps_until_occ) <= COMFORT_MAX - 0.3: # pequeño margen de seguridad
best = start
break
start_minutes = 5 * 60 + best * STEP_MIN
start_at = f"{start_minutes // 60:02d}:{start_minutes % 60:02d}"
print("recommended cooling start:", start_at)
# --- 3. Publicar la recomendación ------------------------------------------
BASE = f"connectmq/demo/{uuid.uuid4().hex[:8]}/hq/floor3/zone-east"
rec = {
"ts": int(time.time() * 1000),
"start_at": start_at,
"occupancy_start": OCCUPANCY_START,
"comfort_max": COMFORT_MAX,
"model": {"a": round(a, 5), "b": round(b, 5), "c": round(c, 5)},
"reason": "latest start meeting comfort band with forecast outdoor temperature",
}
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="hvac-opt-" + uuid.uuid4().hex[:8])
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()
client.publish(f"{BASE}/recommendation", json.dumps(rec), qos=1, retain=True).wait_for_publish()
client.loop_stop()
client.disconnect()
print("published to", f"{BASE}/recommendation")
Instálalo con pip install paho-mqtt numpy scikit-learn. Los coeficientes ajustados resultan cercanos a los valores simulados, y la recomendación es notablemente más tardía de lo que sería un arranque temprano fijo. En un edificio real, compara durante varias semanas la hora recomendada con el horario fijo antes de dejar que actúe; la diferencia en tiempo de funcionamiento de la UTA es tu ahorro esperado.
Aplicar las recomendaciones con seguridad
Enviar consignas a equipos reales requiere más cuidado que publicar una gráfica. Una progresión práctica:
- Modo consultivo. Publica solo recomendaciones; el personal de mantenimiento las revisa en un dashboard junto con los resultados reales.
- Automatización acotada. Una integración de gateway o BMS acepta recomendaciones solo dentro de límites estrictos, como no arrancar antes de las 05:00 y consignas solo entre 21 y 25 °C, e ignora los mensajes con más de unos minutos de antigüedad. La caducidad de mensajes de MQTT 5 resulta útil aquí, para que el broker descarte los comandos obsoletos.
- Respaldo. Si dejan de llegar recomendaciones, el BMS vuelve automáticamente a su horario normal.
- Anulación manual. Las anulaciones locales siempre prevalecen, y cada anulación se registra como un evento para que el modelo pueda aprender de ella.
Estos límites deben estar en la integración del lado del equipo, no solo en el servicio de IA, para que un error en el modelo no pueda llevar los equipos fuera de los rangos seguros. El artículo sobre control seguro de dispositivos IoT con IA trata estas salvaguardas en profundidad.
Medir los resultados
Es fácil anunciar ahorros y difícil demostrarlos. Compara situaciones equivalentes: días laborables con temperatura exterior y ocupación similares, antes y después, o días alternos entre el horario antiguo y el nuevo. Sigue el confort con el mismo cuidado que la energía, usando los minutos fuera de la banda de confort por zona. Publica ambos como topics para que aparezcan junto a los datos operativos. Un gemelo digital 3D del edificio puede suscribirse a esos mismos topics y mostrar sobre cada zona su temperatura, la recomendación vigente y los minutos fuera de la banda de confort. Un modelo de predicción de demanda energética sirve aquí como línea base: la diferencia entre la demanda pronosticada con la estrategia antigua y la demanda medida con la nueva es una estimación razonable del efecto.
La capa de datos en ConnectMQ
ConnectMQ proporciona el broker MQTT gestionado que transporta los puntos del BMS, los datos meteorológicos, las recomendaciones y los resultados entre tu gateway y tu servicio de optimización. El explorador de topics en directo muestra las recomendaciones junto a las temperaturas de zona a las que afectan, y las reglas de alerta por umbral pueden señalar las zonas que salen de la banda de confort. Los modelos se ejecutan en tus propios clientes, por ejemplo un servicio Python o un flujo de Node-RED. Para una visión más amplia de la IA con dispositivos conectados, consulta la guía de IA e IoT, y para técnicas de predicción que puedes reutilizar, predicción de series temporales IoT.
Empieza con ConnectMQ
Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito. Conecta tu gateway del BMS con los YOUR_USERNAME, YOUR_PASSWORD y YOUR_CLIENT_ID generados, recoge unas semanas de datos de zona y ejecuta el ejemplo de arranque óptimo en tu propio edificio. Cuando añadas más edificios, un plan de broker MQTT en la nube amplía el número de conexiones sin cambiar tus topics.
Preguntas frecuentes
¿Qué es la optimización HVAC con IA?
La optimización HVAC con IA utiliza datos y modelos del edificio para elegir horas de arranque, consignas y horarios de climatización mejores que las configuraciones fijas, reduciendo el consumo energético y manteniendo las zonas dentro de la banda de confort.
¿La optimización HVAC con IA sustituye al sistema de gestión del edificio?
No. Normalmente actúa como una capa de supervisión que recomienda o envía consignas y horarios, mientras los controladores del BMS existente siguen manejando los equipos y aplicando la seguridad local.
¿Cuántos datos se necesitan para empezar?
Unas pocas semanas de temperatura de zona, estado del HVAC y temperatura exterior a intervalos de 5–15 minutos bastan para ajustar un modelo térmico sencillo de arranque óptimo. Los efectos estacionales requieren un historial más largo.
¿Cómo mantengo seguros los cambios automáticos de consigna?
Aplica límites estrictos y comprobaciones de antigüedad de los mensajes en la integración del lado del equipo, vuelve al horario normal cuando dejen de llegar recomendaciones y haz que las anulaciones locales tengan siempre prioridad.



