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 :

  • 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 flux exige que tous les uplinks soient publiés sur le sujet MQTT interne /uplink-topic. Ceci est la configuration par défaut avec le flux 'UPLINK / DOWNLINK' fourni pendant l'installation.

Chargement du flux BACnet

précaution

Cette tâche est uniquement pertinente pour les versions ThingPark 2.1.x.
Pour ThingPark 2.2.0 et suivantes, le flux BACnet est chargé directement 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, survolez 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 en haut à droite, puis sélectionnez Importer.

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

  3. Cliquez sur le bouton Importer.

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

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

-> 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éployer Node-RED.

Processus de cartographie automatique

La cartographie des données des capteurs LoRaWAN en objets BACnet est entièrement automatisée, 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 le payload hexadécimal avec le driver adéquat.
  • Traitez les payloads décodés et convertissez 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, basé sur sa configuration de cartographie d'objets, exécute les tâches suivantes :

  1. Extraction optionnelle des métadonnées du paquet Uplink : RSSI, SNR, FCntUp, SpFact (le facteur d'étalement)
  2. Extraction de toutes les propriétés du champ payload (payload décodé standard)
  3. Extraction optionnelle de toutes les propriétés du champ points (pour les drivers qui supportent l'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

Lorsque 2 propriétés portent le même nom, la valeur provenant de l'étage supérieur écrase la valeur précédente. Dans l'exemple ci-dessus, la propriété batteryVoltage existe à la fois dans les sections 'payload' et 'points', la batteryVoltage extraite de la section points sera exposée car elle contient plus d'informations grâce à la fonctionnalité d'ontologie.

Lorsqu'un nouvel uplink est reçu et 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é comme un nouvel objet de type Valeur analogique (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 Valeur binaire (BV), avec des numéros d'instance commençant à 0.
  • Les valeurs 'textuelles' suivent le même schéma, étant assignées à un objet de type Valeur de chaîne de caractères (SV), également en commençant par un numéro d'instance 0.

Vous pouvez personnaliser cette cartographie d'objets par défaut/automatique afin de fixer le numéro d'instance d'une propriété. Pour en savoir plus, voir Personnalisation de la cartographie.

Personnalisation

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

Il expose 2 onglets, un pour la Configuration du serveur BACnet, et l'autre concerne comment la cartographie des objets peut être modifiée.

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 souhaité pour que les messages globaux soient diffusés et reçus. Il doit être aussi strict que possible. Utilisez 255.255.255.255 si vous ne savez pas.
  • ID du dispositif : par défaut est 817001.
  • Nom du dispositif : par défaut est 'BACnet Adapter'.
  • ID du fournisseur : par défaut est 0. Utilisez votre propre ID du fournisseur si vous en avez un.
  • Nom du fournisseur : par défaut est vide. Utilisez votre propre nom de fournisseur si vous en avez un.

La configuration de la cartographie des objets

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

Nom de l'objet BACnet

Chaque donnée extraite des capteurs LoRaWAN est exposée comme un objet BACnet dont l'identifiant est construit en utilisant le DevEUI (choix par défaut) du capteur, suivi de deux-points : puis le nom de la propriété. La propriété inclut le chemin ci-dessous payload, points, chaque partie est ajoutée en utilisant le séparateur deux points :.

Vous pouvez changer la définition de l’identifiant d’objet pour utiliser le nom convivial du capteur (choix 'Nom du Capteur') qui est le nom du capteur défini dans TAO au lieu du DevEUI.

Métadonnées LoRaWAN

Vous pouvez modifier la configuration pour extraire en supplément les métadonnées LoRaWAN et les exposer en tant qu'objets BACnet. Les métadonnées ne sont pas exposées par défaut.

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

Ontologie

Le traitement de l'ontologie est pris en charge par des drivers spécifiques, qui fournissent une standardisation uniforme des propriétés afin qu'une mesure spécifique (par exemple, température) soit mappée à un nom de propriété standardisé (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 correspond à l'unité spécifiée.

Exemple Tous les capteurs qui exposent une mesure de température avec des drivers 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 drivers de capteur, consultez Drivers/ ontologies supportés.

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

Personnalisation de la cartographie

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

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

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

  2. Modifiez l'association du numéro d'instance du fichier csv, et enregistrez-le 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éez de nouvelles entrées pour les futures propriétés des capteurs 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é vers le serveur.

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

Exploiter la liste des objets
  1. Cliquez sur le bouton Exploiter 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 des objets.

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

Ensuite, chaque ligne contient :

  • nom : le nom de l'objet BACnet
  • type : le type abrégé d'objet :
  • AV pour Valeur analogique
  • BV pour Valeur binaire
  • SV pour Valeur de chaîne de caractères
  • instance : l'ID de l'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 (la valeur et l'unité ne sont pas prises en compte lors de l'importation).

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

  1. Vérifier 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 des objets

Suivez ces étapes pour effacer la liste entière des objets :

  1. Cliquez
  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 comme un 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 :

Cette section décrit comment utiliser BACnet pour envoyer des paquets-downlink.

conseil

Envoyer des paquets downlink via BACnet n'est pas une opération simple, il est donc beaucoup plus pratique d'envoyer directement un message downlink sur le sujet 'downlink' dans MQTT comme expliqué dans Usage de MQTT.

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 Utilisation et adaptations.

Les étapes du processus sont :

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

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

  3. Ensuite, le message downlink est envoyé par TAO au capteur LoRaWAN

Le flux suit ces étapes :

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

Utilisation et adaptations

Utilisez le 'Créer point d'extrémité' pour créer un point d'extrémité pour le downlink. Dans l'exemple, nous voulons activer le mode SOS d'un tracker d'actifs Abeeway dont le devEUI est 20635F0106000244 :

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

  • Identifiant d'objet : 20635F0106000244:message
  • ValeurPrésente: STOP_SOS

Lorsque le bouton 'Créer point d'extrémité' est pressé, le nouvel objet est créé / mis à jour sur le serveur BACnet.

Lorsque la valeur présente '20635F0106000244:message' est changé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 downlink pour votre capteur. Elle nécessite :

  • Connaissances en développement JavaScript (niveau de base).
  • Connaissance de la spécification du format downlink pour chaque modèle de capteur.