IoT e IA

Optimización HVAC con IA: consignas y horarios más inteligentes con datos MQTT

Un caso práctico de optimización HVAC con IA: qué datos del edificio recoger por MQTT, cómo aprender la respuesta térmica de una zona, cómo calcular arranques y consignas óptimos y cómo aplicar las recomendaciones con seguridad.

Dashboard de optimización HVAC con IA que muestra la temperatura de una zona, un modelo térmico aprendido y una hora optimizada de preenfriamiento antes de la ocupación
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

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

  1. 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.
  2. 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.
  3. 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:

  1. Modo consultivo. Publica solo recomendaciones; el personal de mantenimiento las revisa en un dashboard junto con los resultados reales.
  2. 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.
  3. Respaldo. Si dejan de llegar recomendaciones, el BMS vuelve automáticamente a su horario normal.
  4. 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.

Artículos relacionados

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.