Passer au contenu principal
Version : TAO v2.x

Utilisation du protocole BACnet

À partir de la version 2.1.0 de TAO, un flux BACnet est inclus dans Node-RED. Il permet aux capteurs LoRaWAN d'exposer automatiquement les données dans un serveur BACnet intégré. Ce serveur est par défaut disponible sur le port UDP multicast standard 47808 (BAC0), mais vous pouvez changer le port comme décrit dans Configuration du serveur BACnet.

Il prend en charge trois types d'objets BACnet, qui peuvent être définis comme entrées ou sorties pour les propriétés d'uplink/downlink respectivement :

  • Valeur analogique (notée 'AV') pour les données numériques,
  • Valeur binaire (notée 'BV') pour les données booléennes,
  • Valeur de chaîne de caractères (notée 'SV') pour les données textuelles.

Le client BACnet peut s'abonner à la notification du serveur pour n'importe laquelle des propriétés BACnet, via la de fonctionnalité de Changement de Valeur (CoV). Les types de propriétés analogiques sont associés à un attribut COV increment permettant au client de déterminer le seuil de notification pour chaque propriété.

Le flux nécessite que tous les uplinks soient publiés sur le topic MQTT interne /uplink-topic. Ceci est la configuration par défaut avec le flux 'UPLINK / DOWNLINK' fourni lors de l'installation.

Chargement du flux BACnet

précaution

Cette tâche n'est pertinente que pour les versions de ThingPark 2.1.x.
Pour ThingPark 2.2.0 et versions ultérieures, le flux BACnet est directement chargé lorsque vous activez le flux de données BACnet dans l'interface utilisateur de TAO.
Pour connaître la version de votre serveur ThingPark Enterprise All-in-one, passez la souris sur le logo en haut à gauche de l'interface utilisateur.

Ne rechargez pas le flux BACnet si vous avez déjà un onglet "BACnet" affiché dans Node-RED.

Depuis l'éditeur de flux Node-RED :

  1. Cliquez dans le coin supérieur droit, puis sélectionnez Import.

  2. Sélectionnez Bibliothèque Actility -> Flux -> BACnet.json.

  3. Cliquez sur le bouton Importer.

  1. Dans le message d'avertissement qui s'affiche, cliquez sur Voir les nœuds...

  1. Dans la fenêtre "Importer des nœuds", assurez-vous que "BACnet" soit coché, puis cliquez sur Importer sélectionné.

-> un nouvel onglet "BACnet" a été ajouté dans l'éditeur :

  1. Cliquez sur en haut à droite pour déployer le nouveau flux. Pour en savoir plus, voir Déploiement Node-RED.

Processus de mappage automatique

Le mappage des données du capteur LoRaWAN en objets BACnet est entièrement automatisé, sans aucune action manuelle de l'utilisateur, sauf si des adaptations personnalisées sont nécessaires comme expliqué dans Personnalisation.

Les étapes suivantes sont automatiquement déclenchées par le flux BACnet intégré :

  • Recevez les paquets uplink des capteurs LoRaWAN et décodez la charge utile hexadécimale avec le pilote adéquat.
  • Traiter les charges utiles décodées et convertir chaque propriété sélectionnée en un seul objet BACnet.
  • Exposez les objets BACnet à un serveur BACnet intégré.

Le flux suit ces étapes :

Les messages uplink entrants sont extraits du /uplink-topic du serveur MQTT interne (nœud d'entrée MQTT). Tous les messages sont injectés dans le nœud bacnet-adapter qui analyse les rapports de trames uplink (DevEUI_uplink); puis, en fonction de sa configuration de mappage d'objet, exécutez les tâches suivantes :

  1. Extraire éventuellement les métadonnées du paquet uplink : RSSI, SNR, FCntUp, SpFact (le facteur d'étalement)
  2. Extraire toutes les propriétés du champ payload (charge utile décodée standard)
  3. Optionnellement, extraire toutes les propriétés du champ points (pour les pilotes qui prennent en charge 'ontologie'), y compris l'unité de chaque propriété.

Ensuite, pour chaque propriété extraite, le nœud bacnet-adapter formate automatiquement un objet BACnet et l'injecte dans le serveur BACnet intégré.

{
"DevEUI_uplink": {
"Time": "2024-09-24T13:51:10.920+00:00",
"DevEUI": "20635F0106000244",
"FPort": 17,
...
"LrrRSSI": -30.600006,
...
"payload": {
"messageType": "HEARTBEAT",
"trackingMode": "PERMANENT_TRACKING",
"batteryVoltage": 4.05,
...
}
"points": {
"temperature": {
"unitId": "Cel",
"record": 28.3
},
"batteryVoltage": {
"unitId": "V",
"record": 4.05
}
},
"Frequency": 867.7,
"DynamicClass": "A"
}
}
note

Lorsqu'une nouvelle propriété uplink est reçue et qu'elle contient des propriétés décodées, un nouvel objet BACnet est automatiquement créé ou mis à jour pour chacune de ces propriétés. L'exemple ci-dessus montre que la propriété batteryVoltage existe à la fois dans les sections 'payload' et 'points', le batteryVoltage extrait de la section points sera exposé car il contient des informations plus riches grâce à la fonctionnalité d'ontologie.

Lorsqu'un nouvel uplink est reçu et qu'il contient des propriétés décodées, un nouvel objet BACnet est automatiquement créé ou mis à jour pour chacune de ces propriétés.

  • Le premier paquet uplink contenant une valeur 'numérique' sur sa première propriété sera exposé en tant que nouvel objet de type Analog Value (AV) et numéro d'instance 0.
  • La prochaine propriété contenant une valeur numérique se verra attribuer le numéro d'instance 1, et ainsi de suite.
  • Un processus similaire s'applique aux valeurs booléennes qui sont mappées à un objet BACnet de type Binary Value (BV), les numéros d'instance commençant à 0.
  • Les valeurs 'String' suivent le même schéma, étant attribuées à un objet de type Character String Value (SV), commençant également par un numéro d'instance 0.

Vous pouvez personnaliser ce mappage d'objets par défaut automatique afin de corriger le numéro d'instance d'une propriété. Pour en savoir plus, consultez Personnalisation du mappage.

Personnalisation

Le nœud bacnet-adapter a sa propre configuration, qui peut être personnalisée en double-cliquant dessus.

Elle expose 2 onglets, l'un pour la configuration du serveur BACnet, et l'autre concerne la manière dont le mappage d'objets peut être modifié.

La configuration du serveur BACnet

Dans le flux BACnet, double-cliquez sur le nœud bacnet-adapter et restez sur l'onglet Propriétés du serveur pour personnaliser l'un des paramètres suivants :

  • Port du serveur : de 'BAC0' (47808) à 'BACF' (47823).
  • Diffusion du serveur : c'est le sous-réseau désiré pour que les messages globaux soient diffusés et reçus. Cela devrait être aussi strict que possible. Utilisez 255.255.255.255 si vous n'êtes pas sûr.
  • ID de l'appareil : la valeur par défaut est 817001.
  • Nom de l'appareil : par défaut, 'Adaptateur BACnet'.
  • ID Fournisseur : la valeur par défaut est 0. Utilisez votre propre ID de fournisseur si vous en avez un.
  • Nom du fournisseur : par défaut, vide. Utilisez votre propre nom de fournisseur si vous en avez un.

La configuration de mappage d'objets

Double-cliquez sur le nœud bacnet-adapter et allez sur l'onglet Mappage d'objets pour personnaliser l'un des paramètres suivants :

Nom de l'objet BACnet

Chaque donnée extraite des capteurs LoRaWAN est exposée en tant qu'objet BACnet dont l'identifiant est construit à l'aide du DevEUI (choix par défaut) de l'appareil, suivi de deux-points : puis du nom de la propriété. La propriété comprend le chemin sous payload, points, chaque partie est ajoutée en utilisant le séparateur deux-points :.

Vous pouvez changer la définition de l'identifiant de l'objet pour utiliser le nom convivial du capteur ('choix du nom de l'appareil') qui est le nom défini dans TAO plutôt que le DevEUI.

Métadonnées LoRaWAN

Vous pouvez modifier la configuration pour également extraire les métadonnées LoRaWAN et les exposer comme objets BACnet. Par défaut, les métadonnées ne sont pas exposées.

Les champs suivants de LoRaWAN peuvent être sélectionnés :

Ontologie

Le traitement de l'ontologie est pris en charge par des pilotes spécifiques, qui garantissent une normalisation uniforme des propriétés afin qu'une mesure spécifique (par exemple, température) soit mappée à un nom de propriété normalisé (par exemple, 'température'). Une unité associée est fournie (par exemple, 'celsius') et une transformation est appliquée à la valeur pour s'assurer qu'elle s'adapte à l'unité spécifiée.

Exemple Tous les appareils qui exposent une mesure de température avec des pilotes supportant l'ontologie fourniront la température de la même manière (même unité, même nom de propriété). Pour plus d'informations sur les pilotes de périphériques, consultez Pilotes/ontologies supportées.

L'ontologie est désactivée par défaut, vous pouvez l'activer en utilisant la case à cocher.

Personnalisation du mappage

Comme mentionné ci-dessus, le mappage LoRaWAN vers BACnet est entièrement automatisé par défaut. Vous pouvez modifier ce mappage par défaut afin de fixer le numéro d'instance d'une propriété et d'assurer que cette propriété soit toujours exposée à un numéro d'instance fixe.

Pour ce faire, suivez les étapes ci-dessous :

  1. Exportez votre liste d'objets actuelle vers un fichier csv.

  2. Modifiez l'association du numéro d'instance du fichier csv et enregistrez-la dans votre liste personnalisée. Les recommandations suivantes doivent être respectées :

  • Commencez la numérotation des instances à partir de 0 pour chaque type (AV,BV,SV).
  • Ne laissez pas de trous dans le schéma de numérotation.
  • Ne changez pas le type pour une propriété spécifique.
  • Créer de nouvelles entrées pour les propriétés futures des appareils qui ne sont pas encore exposées.
  • Laissez la ligne d'en-tête telle quelle, n'ajoutez pas de colonnes.
  1. Importez ce fichier csv personnalisé sur le serveur.

-> Votre nouveau mappage sera alors disponible instantanément.

Exporter la liste des objets
  1. Cliquez sur le bouton Exporter la liste des objets. Si vous souhaitez ajouter la valeur actuelle de chaque propriété dans votre fichier d'exportation, cochez l'option Inclure les valeurs d'objet.

  1. Vérifiez le fichier export-bacnet.csv téléchargé : La première ligne est l'en-tête, elle doit contenir "name","type","instance" ou "name","type","instance","value","unit".

Ensuite, chaque ligne contient :

  • nom : le nom de l'objet BACnet
  • type : le type d'objet abrégé :
  • AV pour Valeur Analogique
  • BV pour Valeur Binaire
  • SV pour Valeur de chaîne de caractères
  • instance : l'ID d'instance BACnet de l'objet

Exemple d'une liste incluant les valeurs des objets :

"name","type","instance","value","unit"
"20635F0106000244:batteryVoltage","AV",0,3.74,
"20635F0106000244:ackToken","AV",1,0,
"20635F0106000244:temperatureMeasure","AV",2,36.9,
"20635F0106000244:sosFlag","AV",3,0,
...
Importer une liste d'objets personnalisée

Le format du fichier d'importation est le même que celui du fichier d'exportation (les valeurs et unités ne sont pas prises en compte lors de l'importation).

  1. Cliquez sur et sélectionnez le fichier csv sur votre ordinateur.
  2. Appuyez sur 'OK' dans le message d'alerte.

  1. Vérifiez le statut de l'importation

En cas d'erreur, vous obtiendrez la liste des points à corriger, comme illustré dans l'exemple suivant :

Effacer la liste d'objets

Suivez ces étapes pour effacer l'intégralité de la liste d'objets :

  1. Cliquez sur
  2. Appuyez sur 'OK' dans le message d'alerte

  1. Vérifiez le statut

Visualisation

Une fois le flux en cours d'exécution, chaque donnée extraite de vos capteurs LoRaWAN est exposée en tant qu'objet BACnet.

Vous pouvez utiliser un outil comme YABE (Yet Another BACnet Explorer) pour visualiser et interagir avec les objets BACnet :

Exemple d'un message uplink extrait par TAO, correspondant à un DevEUI_uplink, avec une température mesurée à 28,8° Celsius.

{
"DevEUI_uplink": {
"Time": "2024-09-24T13:51:10.920+00:00"
"DevEUI": "20635F0106000244"
"FPort": 17
...
"LrrRSSI": -30.600006
...
"payload": {
"messageType": "POSITION_MESSAGE"
"trackingMode": "PERMANENT_TRACKING"
"batteryVoltage": 4.05
"ackToken": 0
...
}
"points": {
"temperature": {
"unitId": "Cel"
"record": 28.8
},
"batteryVoltage": {
"unitId": "V"
"record": 4.05
}
},
"Frequency": 867.7
"DynamicClass": "A"
}
}

La visualisation correspondante dans YABE :

Outre les propriétés de liaison montante (c'est-à-dire, les propriétés mesurées par le capteur et signalées dans les charges utiles en liaison montante), le flux BACnet exposera automatiquement les propriétés de sortie représentant les commandes de liaison descendante prises en charge par l'appareil LoRaWAN, telles que le réglage de la température cible d'une valve thermostatique, etc.

Dans TAO v2.4.0, l'envoi de commandes de downlink via BACnet est pris en charge nativement pour les modèles d'appareils suivants :

  • Tous les modèles Thermokon, tels que NOVOS-3, MCS, SAB07...
  • MClimate Vicki (vanne thermostatique)

Le support natif d'autres fabricants d'appareils sera progressivement ajouté dans les prochaines versions.

Les commandes de downlink utilisent le mode confirmé LoRaWAN pour assurer une livraison fiable aux appareils finaux, elles sont automatiquement retransmises par TAO en cas d'échec de transmission/réception. Jusqu'à 5 commandes peuvent être concaténées dans le même paquet de downlink LoRaWAN.

Pour envoyer des paquets de liaison descendante via BACnet pour les modèles d'appareils qui ne sont pas encore nativement pris en charge dans la version actuelle, vous pouvez utiliser Node-RED comme décrit ci-après.

Description du processus

Contrairement aux messages uplink, le traitement des messages downlink n'est pas automatique, il nécessite des adaptations manuelles comme décrit dans Usage et adaptations.

Les étapes du processus sont :

  1. Un objet BACnet représentant la propriété que vous souhaitez modifier sur votre capteur LoRaWAN doit exister sur le serveur BACnet. Cette étape n'est pas automatisée, elle doit être effectuée par l'utilisateur.

  2. Lorsque la propriété est modifiée du côté BACnet, une fonction est appelée pour traiter le message et créer automatiquement un message DevEUI_downlink.

  3. Le message downlink doit ensuite être envoyé par TAO au capteur LoRaWAN.

Le flux suit ces étapes :

Tous les messages sortants du nœud bacnet-adapter sont passés à la fonction 'DownlinkAdapter'. Cette fonction est appelée chaque fois qu'un événement d'écriture se produit sur le serveur BACnet, elle filtre les appels d'extrémité et, pour ceux nécessitant un downlink, génère un message 'DevEUI_downlink' et l'envoie à la file d'attente MQTT downlink.

Usage et Adaptations

Utilisez le 'Create endpoint' pour créer un endpoint pour le downlink. Dans l'exemple, nous voulons activer le mode SOS d'un traqueur de balises Abeeway dont le devEUI est 20635F0106000244 :

Notre convention pour l'identifiant d'objet est 'devEUI' + deux-points (':') + nom de la propriété. Nous avons choisi 'message' comme nom de propriété. Nous créons l'endpoint avec la valeur initiale 'STOP_SOS'.

  • Identifiant de l'objet : 20635F0106000244:message
  • Valeur actuelle : STOP_SOS

Lorsque le bouton 'Create endpoint' est pressé, le nouvel objet est créé / mis à jour sur le serveur BACnet.

Lorsque la valeur actuelle du '20635F0106000244:message' est modifiée sur le serveur BACnet (de 'STOP_SOS' à 'START_SOS'), la fonction 'DownlinkAdapter' est appelée. Cette fonction handleMessage(msg) doit être adaptée pour préparer le message de liaison descendante vers votre capteur. Cela nécessite :

  • Connaissances de développement Javascript (niveau de base).
  • Connaissance de la spécification du format de liaison descendante pour chaque modèle d'appareil.