Le BACnet est un protocole de communication pour les réseaux d'immotique, spécifié par l'organisation ASHRAE (association de constructeurs et d'utilisateurs dans le domaine du chauffage, de la ventilation et de la climatisation : CVC, ou HVAC en anglais).
La spécification de ce protocole est devenue un standard international normalisé par l'ANSIANSI/ASHRAE Standard 135-2008 et l'ISO.
Description
La spécification BACnet intègre plusieurs aspects indépendants les uns des autres : La spécification des supports physiques utilisables (ARCnet, MS/TP, Ethernet, …) et leurs conditions d'utilisation ; La spécification des données et des messages échangés entre des éléments clients et des éléments serveurs ; La spécification, sur une base objet, des principes des échanges entre les clients et les serveurs ; La spécification des services (accès aux objets, alarmes et événements, …) utilisables au travers du protocole BACnet.
Un réseau BACnet et une application de supervision sont tous deux des systèmes intégralement orientés objet. Du fait de cette logique objet intrinsèque, il est alors possible de les intégrer (les faire communiquer) nativement, sans passer par une conversion entre les objets BACnet et des variables de supervision.
Architecture réseau de BACnet
L'architecture réseau du protocole BACnet peut être mise en relation avec le modèle d'architecture OSI (Open System Interconnection) de l'ISO. Il s'agit cependant d'une architecture simplifiée qui fait référence uniquement aux couches : physique, liaison, réseau, application.
Les couches : transport, session et présentation ne sont pas utilisées dans le cas présent.
Les couches réseau et application font l'objet de spécifications propres au protocole BACnet. Les couches : physique et liaison font référence à des spécifications existantes indépendantes de BACnet : LLC:IEEE 802.2 + (Ethernet:IEEE 802.3 ou Arcnet) MS/TP + EIA-485 PTP + EIA-232 Lontalk UDP/IP, avec le port UDP 47808 par défaut Websocket sur TCP/IP avec TLS1.3 pour BACnet Secure Connect (BACnet/SC) Couches BACnet Equivalent OSICouche application BACnetCouche applicationCouche réseau BACnetCouche réseauLLC:IEEE 802.2MS/TPPTPLonTalkBVLCBVLCCouche liaisonEthernet:IEEE 802.3ARCNETEIA-485EIA-232UDP/IPWebsocketCouche physique
Topologies des réseaux
Un système BACnet est constitué d'un ensemble d'appareils interconnectés. Cette interconnexion s'appuie sur plusieurs concepts :
Le segment BACnet
Un segment BACnet est constitué d'un ensemble d'équipements (devices) connectés sur un ou plusieurs segments physiques (reliés par des répéteurs) de même nature. Un segment BACnet est homogène du point de vue de la couche physique.
Le réseau BACnet
Un réseau BACnet est constitué d'un ensemble de segments interconnectés par des ponts. Les équipements d'un réseau BACnet sont homogènes du point de vue de la couche liaison.
L'inter-réseau BACnet
L'inter-réseau BACnet est constitué d'un ensemble de réseaux BACnet interconnectés par des routeurs. Les technologies réseau (couche liaison et couche physique) peuvent être différentes pour chacun des réseaux BACnet.
Adressage BACnet
Le protocole BACnet fait appel à plusieurs mécanismes pour l'adressage des équipements BACnet en fonction de la couche à laquelle on s'intéresse : Couche physique :
Pour la couche physique, l'adressage des équipements n'est pas spécifique à BACnet et se fait en fonction de la technologie utilisée. Cette adresse est identifiée (vu de la couche réseau) comme la MAC address. Pour la technologie IP par exemple il s'agit de l'ensemble port UDP + adresse IP. Couche réseau :
Pour la couche réseau, l'adressage des équipements fait appel à l'ensemble numéro de réseau + MAC address. Tous les équipements d'un même réseau BACnet doivent appartenir au même domaine (ou espace) d'adressage. Si un système BACnet comporte des équipements de même technologie (par exemple BACnet IP) mais répartis dans des domaines d'adressage distincts (par exemple 192.168.10.0/24 et 192.168.20.0/24), ils doivent alors être répartis dans plusieurs réseaux BACnet comportant un numéro de réseau distinct pour former un inter-réseau BACnet. Couche application :
Pour la couche application, l'adressage des équipements s'appuie sur le mécanisme général d'adressage des objets BACnet (le équipement est représenté sur le réseau au travers d'un objet BACnet). L'adressage d'un objet BACnet fait appel à l'ensemble type d'objet + numéro d'instance. Cette adresse est référencée sous le nom BACnetObjectIdentifier.
Des règles unicité doivent être respectées pour permettre un adressage non ambigu des objets (et donc des équipements) : Chaque objet BACnet d'un même équipements doit avoir un BACnetObjectIdentifier unique au sein du équipements ; Chaque équipements BACnet doit avoir un BACnetObjectIdentifier (ou Device ID) unique au sein d'un inter-réseau (ou système) BACnet.
Utilisation sur réseau IP
Les travaux de spécifications du protocole BACnet ont débuté en 1987 à une époque où la technologie IP n'était pas encore la technologie réseau universelle (au moins dans la majorité des domaines) qu'elle est devenue à ce jour.
L'intégration de cette technologie dans les spécifications du protocole BACnet a fait l'objet d'une annexe (annexe J) qui précise les conditions de son utilisation pour ce protocole. L'utilisation du protocole BACnet sur IP est généralement mentionnée sous l'appellation BACnet/IP.
Le choix du protocole IP utilisé pour BACnet s'est porté sur UDP avec le port par défaut 47808 UDP. Le choix de ce protocole, sans garantie d'acheminement, est basé sur le fait que la messagerie BACnet intègre elle-même les mécanismes de garantie d'acheminement (timeout d'acquittement de réception et tentatives multiples).
Un problème propre au protocole BACnet est posé pour son utilisation sur des réseaux IP publics ou d'entreprise. Ce problème est lié à l'utilisation du principe de broadcast inhérent à certains services du protocole BACnet. Les messages broadcast étant généralement filtrés par les équipements des réseaux non strictement locaux, une réponse spécifique a été apportée à ce problème. Cette réponse est basée sur la notion de BBMD (BACnet/IP Broadcast Management Device).
La notion de BBMD correspond à une fonction de propagation dirigée des messages broadcast. Une fonction BBMD doit être présente sur chacun des segments de réseau qui doit être relié à un autre segment au travers d'un dispositif qui filtre les messages broadcast. Cette fonction, de la couche réseau, se base sur des tables de configuration (BDT et FDT) pour retransmettre, aux réseaux distants, les messages broadcast émis par les équipements locaux, et générer sur le réseau local les demandes de broadcast transmis par les réseaux distants.
Sécurisation du protocole avec BACnet/SC Le protocole BACnet peut être sécurisé avec sa déclinaison BACnet/SC (Secure Connect). BACnet/SC permet d'assurer la confidentialité, l'authenticité et l'intégrité des données et l'authentification des équipements grâce au protocole de sécurité TLS. BACnet/SC nécessite l'utilisation de certificats informatiques. Il utilise le standard WebSocket. Il est disponible depuis 2016.
La communication se fait en diffusion unicast en TCP, par opposition au BACnet standard dont la diffusion peut être en broadcast en UDP. Le port TCP utilisé en BACnet SC peut être différent du port UDP utilisé en BACnet standard. Le port TCP par défaut généralement rencontré en BACnet/SC est le 443 (le même que pour le protocole HTTPS), mais il peut varier selon les équipements BACnet. Le mécanisme BBMD lié à la diffusion en broadcast est spécifique au BACnet standard et n'est pas applicable au BACnet/SC.
Avec BACnet/SC, les équipements sont identifiés sans tenir compte de leur adresse IP. BACnet/SC facilite l'utilisation d'adressage dynamique avec le protocole DHCP ou de l'IPv6.
Chaque réseau BACnet doit être équipé d'un hub, équipement intermédiaire assurant la communication entre équipements. Le BACnet/SC utilise la topologie de réseau en étoile avec le hub au centre de l'étoile et les équipements autour du hub. Le protocole BACnet/SC permet une tolérance de panne du hub avec un basculement vers un autre équipement similaire secondaire en cas d'indisponibilité du hub principal. BACnet/SC permet également des échanges de pair-à-pair entre équipements.
Fonctionnement de la couche application de BACnet
La couche application de BACnet repose essentiellement sur la définition d'un ensemble d'objets manipulés, au travers du réseau, par un ensemble de services.
Les objets de BACnet
La notion d'objet est une notion fondamentale du protocole BACnet. Les objets sont utilisés d'une part pour représenter les informations gérées par les équipements et échangées au travers du protocole, et d'autre part pour une gestion optimale de certains services ou de fonctions applicatives.
Généralités
Pour le protocole BACnet, un objet est caractérisé par une liste de propriétés et par les valeurs de ces dernières. Les spécifications de BACnet définissent un certain nombre de types d'objets (classes) en indiquant la liste et les caractéristiques des propriétés de chacun des types. Certaines propriétés sont obligatoires pour qu'un objet soit conforme à la définition d'un type, d'autres sont optionnelles. Un constructeur d'équipements BACnet peut ajouter des propriétés qui lui sont propres aux objets standards, et il peut également définir ses propres types d'objets.
L'identification d'un objet (son adresse) au sein d'un système BACnet fait intervenir deux propriétés obligatoires (indépendantes) : Object_Identifier
Cette propriété est constituée de la concaténation du type de l'objet et d'un numéro d'instance. La valeur de cette propriété doit être unique pour le système s'il s'agit d'un objet device, ou doit être unique au sein de l'équipement qui le gère pour les autres objets.
Object_Name
Cette propriété est une chaîne de caractères qui doit obéir aux mêmes règles d'unicité que la propriété Object_Identifier. La définition du type d'un objet est indiquée par la propriété obligatoire Object_Type.
Objets de données
Dans l'ensemble des types d'objets standards de BACnet un certain nombre d'entre eux sont utilisés pour gérer une donnée élémentaire du système. Ces objets sont les suivants : Accumulator, Analog Input, Analog Output, Analog Value, Binary Input, Binary Output, Binary Value, Multi-state Input, Multi-state Output, Multi-state Value.
D'une façon générale, ces objets ont pour fonction de représenter la valeur d'une donnée au travers de leur propriété Present_Value. Ils peuvent comporter des conditions d'alarme et être couplés à un objet de notification (Notification_Class) pour générer des alarmes ou des événements lors du franchissement de ces conditions.
Objets fonctionnels
Les objets fonctionnels réalisent la prise en charge d'une fonction destinée à piloter des propriétés d'autres objets ou à élaborer des résultats localement. Les objets fonctionnels définis par les spécifications BACnet sont les suivants : Averaging : calcul d'indicateurs statistiques sur une donnée (minimum, maximum, moyenne, variance) Calendar : définition d'une liste de plages calendaires (est généralement utilisé par référence par les objets Schedule) Command : objet utilisé pour déclencher un ensemble d'actions préconfigurées au travers d'une seule écriture de la Present_Value de l'objet Command Event Enrollment : permet de définir des conditions de génération d'événements en dehors des conditions intrinsèques aux objets Group : est utilisé pour donner accès simplement à un ensemble de données Loop : permet de représenter, de façon standardisée, une boucle de régulation Program : permet de représenter, de façon standardisée, un programme exécuté dans un équipement BACnet Pulse Converter : élaboration d'une grandeur physique à partir d'un comptage d'impulsions