Automatisation IoT

Surveillance CVC avec des capteurs IoT et des alertes MQTT

Quels signaux CVC valent la peine d'être mesurés, comment les publier en MQTT et comment transformer delta-T, pression des filtres et temps de fonctionnement en alertes précoces de défaut avec un broker cloud.

Centrale de traitement d'air en toiture équipée de capteurs de température, de pression et de courant transmettant des données dans une installation de surveillance CVC IoT
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

La surveillance CVC avec des capteurs IoT vous donne une vue continue du comportement réel des centrales de traitement d'air, ventilo-convecteurs et rooftops, et pas seulement de leur état marche/arrêt. Ce cas d'usage montre quelles mesures détectent les défauts les plus fréquents, comment les publier en MQTT et comment les transformer en alertes et en rapports de temps de fonctionnement avec un broker cloud.

Ce qui tombe en panne dans les équipements CVC

La plupart des problèmes de CVC ne s'annoncent pas par une alarme. Ils se manifestent par des dérives lentes : un filtre s'encrasse et le débit d'air baisse, une vanne se bloque et la performance de la batterie chute, un compresseur fait des cycles courts à cause d'un thermostat mal placé, ou une unité tourne tout le week-end parce qu'une programmation a été forcée puis jamais rétablie. Les occupants ne s'en aperçoivent que lorsque le confort se dégrade, et à ce moment-là, de l'énergie a été gaspillée pendant des semaines.

Une GTB peut détecter une partie de ces problèmes, mais de nombreux sites n'en ont pas du tout, ou en ont une à laquelle seul un prestataire peut accéder. Installer quelques capteurs IoT en rétrofit et publier en MQTT comble rapidement ce manque et fonctionne de la même manière sur tout un parc, qu'il s'agisse d'un rooftop sur un magasin ou d'une centrale de traitement d'air dans une tour de bureaux.

Les signaux qui comptent

Vous n'avez pas besoin de dizaines de points par unité. Les mesures ci-dessous couvrent l'essentiel de la détection de défauts en pratique :

Signal Capteur Ce qu'il révèle
Température d'air soufflé Sonde de gaine (DS18B20, PT1000 avec transmetteur) Si l'unité chauffe ou refroidit réellement
Température d'air repris Sonde de gaine La charge de l'unité ; avec l'air soufflé, donne le delta-T
Pression différentielle du filtre Capteur de pression différentielle basse plage, 0 à 500 Pa Encrassement du filtre, filtre absent, courroie cassée
Courant du ventilateur ou du compresseur Transformateur de courant à noyau ouvrant Temps de fonctionnement, cycles courts, variations de charge mécanique
Température extérieure Sonde sous abri ou flux météo Contexte de la demande de chauffage et de refroidissement
Température de zone Sonde murale Si l'espace est confortable

La valeur dérivée la plus utile est le delta-T, la différence entre l'air repris et l'air soufflé. Quand une unité de refroidissement tourne avec un delta-T très faible, soit la batterie ne reçoit pas d'eau glacée ou de fluide frigorigène, soit le débit d'air est bien trop élevé, soit un capteur est mal placé. Une pression de filtre qui augmente régulièrement sur plusieurs semaines est normale ; une pression qui chute soudain vers zéro signifie que le filtre s'est affaissé ou qu'il manque.

Architecture

Il existe deux manières courantes d'amener ces signaux sur MQTT :

  1. Les contrôleurs existants. Si les unités disposent déjà de contrôleurs BACnet, une passerelle lit les points et les publie, comme le montre notre tutoriel BACnet vers MQTT.
  2. Des nœuds capteurs en rétrofit. Un ESP32 ou un petit module IoT industriel par unité lit directement les sondes et publie en Wi-Fi ou en Ethernet. Le tutoriel ESP32 MQTT couvre les bases de la connexion.

Dans les deux cas, le nœud publie en sortie vers un broker, et chaque consommateur s'abonne : l'explorateur de topics du portail pour la mise en service, un script d'analyse pour les valeurs dérivées et un tableau de bord pour les équipes techniques. La structure des topics suit la hiérarchie du bâtiment :

acme/ist01/tower-a/roof/ahu-2/telemetry
acme/ist01/tower-a/roof/ahu-2/derived
acme/ist01/tower-a/roof/ahu-2/status

Un seul message de télémétrie par intervalle limite le trafic et facilite l'alignement temporel :

{
  "ts": "2026-10-16T10:30:00Z",
  "supply_c": 13.6,
  "return_c": 23.1,
  "outdoor_c": 27.4,
  "filter_dp_pa": 182,
  "fan_a": 6.8,
  "comp_a": 14.2,
  "mode": "cooling"
}

Calculer le delta-T et le temps de fonctionnement depuis MQTT

Il vaut mieux calculer les valeurs dérivées en un seul endroit plutôt que dans chaque nœud capteur. Le script ci-dessous s'abonne à la télémétrie de toutes les unités, calcule le delta-T, cumule le temps de fonctionnement du ventilateur et du compresseur, compte les démarrages du compresseur par heure pour détecter les cycles courts, et republie les résultats en MQTT. Essayez-le sur le serveur MQTT public gratuit avec le préfixe de démonstration (pour les tests uniquement), puis passez à des identifiants privés.

import json
import time
import uuid
from collections import defaultdict, deque

import paho.mqtt.client as mqtt

BROKER, PORT = "broker.connectmq.com", 1883
PREFIX = "connectmq/demo/hvac-q81z"
FAN_ON_A = 1.0          # current above this means the fan runs
COMP_ON_A = 3.0         # current above this means the compressor runs
MAX_STARTS_PER_HOUR = 6

state = defaultdict(lambda: {"last_ts": None, "fan_s": 0.0, "comp_s": 0.0,
                             "comp_on": False, "starts": deque()})


def on_connect(client, userdata, flags, reason_code, properties):
    print("connected:", reason_code)
    client.subscribe(f"{PREFIX}/+/telemetry", qos=0)


def on_message(client, userdata, msg):
    unit = msg.topic.split("/")[-2]
    try:
        t = json.loads(msg.payload)
    except json.JSONDecodeError:
        return
    s = state[unit]
    now = time.time()

    if s["last_ts"] is not None:
        dt = min(now - s["last_ts"], 120)      # cap gaps so outages do not inflate runtime
        if t.get("fan_a", 0) > FAN_ON_A:
            s["fan_s"] += dt
        if s["comp_on"]:
            s["comp_s"] += dt
    s["last_ts"] = now

    comp_on = t.get("comp_a", 0) > COMP_ON_A
    if comp_on and not s["comp_on"]:
        s["starts"].append(now)
    s["comp_on"] = comp_on
    while s["starts"] and now - s["starts"][0] > 3600:
        s["starts"].popleft()

    delta_t = None
    if "return_c" in t and "supply_c" in t:
        delta_t = round(t["return_c"] - t["supply_c"], 2)

    derived = {
        "ts": t.get("ts"),
        "delta_t_c": delta_t,
        "fan_runtime_h": round(s["fan_s"] / 3600, 2),
        "comp_runtime_h": round(s["comp_s"] / 3600, 2),
        "comp_starts_last_hour": len(s["starts"]),
        "short_cycling": len(s["starts"]) > MAX_STARTS_PER_HOUR,
    }
    client.publish(f"{PREFIX}/{unit}/derived", json.dumps(derived), qos=1, retain=True)


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"hvac-analytics-{uuid.uuid4().hex[:6]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, PORT, keepalive=60)
client.loop_forever()

Simulez une unité depuis la ligne de commande pour le voir fonctionner :

mosquitto_pub -h broker.connectmq.com -p 1883 -i hvac-sim-q81z \
  -t "connectmq/demo/hvac-q81z/ahu-2/telemetry" \
  -m '{"ts":"2026-10-16T10:30:00Z","supply_c":13.6,"return_c":23.1,"filter_dp_pa":182,"fan_a":6.8,"comp_a":14.2}'

Les compteurs de temps de fonctionnement sont ici conservés en mémoire ; ils sont donc remis à zéro au redémarrage du script. Pour un temps de fonctionnement de qualité facturable, écrivez les valeurs dérivées dans une base de données de séries temporelles depuis le même abonné, ou laissez un outil comme Telegraf s'abonner aux topics et les stocker.

Des alertes à seuil pour les défauts CVC

ConnectMQ vous permet de définir dans le portail des règles d'alerte à seuil sur les valeurs entrantes, et chaque alerte déclenchée est conservée dans le journal des alertes. Règles de départ pratiques pour une centrale de traitement d'air en refroidissement :

Règle Condition Cause probable
Delta-T faible en refroidissement delta_t_c inférieur à 4 pendant 30 minutes Pas d'eau glacée, vanne bloquée, débit d'air excessif
Filtre encrassé filter_dp_pa au-dessus de la perte de charge finale du filtre Remplacement du filtre à prévoir
Filtre absent ou courroie cassée filter_dp_pa inférieur à 20 alors que le ventilateur tourne Filtre affaissé, courroie qui patine
Air soufflé trop chaud supply_c au-dessus de 18 en mode refroidissement Défaut du compresseur, perte de fluide frigorigène
Cycles courts comp_starts_last_hour au-dessus de 6 Unité surdimensionnée, emplacement du thermostat, défaut de régulation
Fonctionnement hors horaires Courant du ventilateur au-dessus du seuil en dehors de la programmation Programmation forcée

Ajustez les seuils unité par unité après une semaine d'observation. Les équipements, le climat et la classe des filtres varient trop pour des valeurs universelles, et la fiche technique du fabricant indique les bonnes limites de pression des filtres.

Conserver l'historique et produire des rapports

Les valeurs en direct détectent les défauts ; l'historique prouve les économies et oriente la maintenance. Comme chaque consommateur n'est qu'un client MQTT de plus, ajouter du stockage ne touche pas aux nœuds capteurs. Les choix courants sont une instance Telegraf avec son entrée MQTT consumer écrivant dans InfluxDB, un flow Node-RED insérant dans PostgreSQL, ou un petit abonné Python écrivant dans la base de données déjà utilisée par votre organisation. Stockez la télémétrie brute à l'intervalle natif pendant quelques mois et conservez des agrégats horaires pendant des années.

Les rapports mensuels utiles aux équipes techniques comprennent les heures de fonctionnement par unité comparées aux heures programmées, le nombre d'heures passées par chaque unité avec un delta-T faible, la date à laquelle chaque filtre a franchi sa pression de remplacement, et le classement des unités par nombre de démarrages du compresseur. Ces chiffres transforment des plaintes vagues comme « il fait toujours chaud au troisième étage » en ordres de travail précis.

Checklist de déploiement

  1. Choisissez trois à cinq unités représentatives, pas tout le parc.
  2. Montez les sondes de soufflage suffisamment en aval de la batterie pour mesurer un air bien mélangé, et les sondes de reprise avant le caisson de mélange.
  3. Placez les transformateurs de courant sur un seul conducteur, pas sur le câble entier.
  4. Mettez en service chaque capteur en observant les valeurs en direct dans l'explorateur de topics pendant que l'unité fonctionne.
  5. Lancez l'abonné d'analyse et observez pendant une semaine avant d'activer les alertes.
  6. Rédigez une courte procédure pour chaque alerte afin que les techniciens sachent quoi vérifier.
  7. Étendez au reste des unités une fois les fausses alarmes maîtrisées.

Passer à l'échelle

Un nœud de rétrofit par unité et un service d'analyse tiennent facilement dans l'offre Serverless gratuite pour un pilote. À mesure que vous ajoutez des bâtiments, le nombre de connexions croît linéairement avec les unités, et l'offre Serverless payante prend en charge jusqu'à 1 000 connexions avec abonnements partagés, ce qui permet d'exécuter plusieurs workers d'analyse qui se répartissent la charge. Comme le broker est un broker MQTT cloud, vous n'installez rien dans chaque bâtiment à part les nœuds capteurs.

La qualité de l'air et l'occupation apportent un contexte précieux aux données CVC : voir la surveillance de la qualité de l'air intérieur et les capteurs d'occupation de bureau. La vue d'ensemble est traitée dans la gestion technique du bâtiment avec MQTT et dans le guide de l'automatisation IoT. Les mêmes topics peuvent aussi alimenter un jumeau numérique du bâtiment.

Commencez à surveiller votre CVC avec ConnectMQ

Créez un broker Serverless gratuit sur app.connectmq.com, sans carte bancaire. Connectez un nœud capteur, observez les valeurs dans l'explorateur de topics en direct, puis ajoutez des règles d'alerte à seuil pour le delta-T et la pression des filtres. ConnectMQ est un broker MQTT managé : il exploite le broker pour que votre équipe puisse se concentrer sur les équipements.

Questions fréquentes

Quelle est la mesure CVC la plus utile ?

Les températures d'air soufflé et d'air repris ensemble, car le delta-T montre si l'unité transfère réellement de la chaleur. Ajoutez ensuite la pression différentielle des filtres.

Ai-je besoin d'une GTB pour la surveillance CVC avec des capteurs IoT ?

Non. Des nœuds capteurs en rétrofit peuvent publier directement en MQTT. Si une GTB existe, une passerelle peut réutiliser ses points au lieu d'installer de nouveaux capteurs.

À quelle fréquence envoyer la télémétrie CVC ?

Toutes les 30 à 60 secondes suffisent pour les températures et les pressions. Les mesures de courant destinées au temps de fonctionnement et aux cycles courts gagnent à être envoyées toutes les 10 à 15 secondes.

Les alertes peuvent-elles être envoyées par le broker lui-même ?

ConnectMQ évalue les règles d'alerte à seuil et les enregistre dans le journal des alertes. Pour les SMS, les e-mails ou la création de tickets, exécutez un abonné comme Node-RED qui réagit aux topics concernés.

Articles liés

Guide d'installation de Zigbee2MQTT : du coordinateur au tableau de bord

Installez Zigbee2MQTT avec Docker, configurez le coordinateur et la connexion MQTT, appairez et renommez les appareils, pilotez-les via MQTT et affichez leurs états sur un tableau de bord, en testant d'abord sur le serveur MQTT public gratuit.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.