Utilisation du protocole BACnet
Le démarrage de ThingPark Enterprise auto-hébergé 8.0 inclut un flux BACnet 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 accessible sur le port multicast UDP standard 47808 (BAC0), mais vous pouvez modifier le port comme décrit dans Configuration du serveur BACnet.
Si vous n'avez pas encore défini de connexion Node-RED, consultez Ajout d'une connexion Node-RED.
Le flux BACnet intégré supporte trois types d'objets BACnet :
- Valeur Analogue (indiquée 'AV') pour les données numériques
- Valeur Binaire (indiquée 'BV') pour les données booléennes
- Valeur de chaîne de caractères (indiquée 'SV') pour les données chaîne.
Chargement du flux BACnet
À partir de l'éditeur de flux Node-RED :
-
Cliquez sur
en haut à droite, puis sélectionnez Importer.
-
Sélectionnez Bibliothèque Actility -> flux -> BACnet.json.
-
Cliquez sur le bouton Importer.

-
Sur le message d'avertissement entrant, cliquez sur Voir les nœuds....
-
Dans la fenêtre "Importer des nœuds", assurez-vous que "BACnet" est coché, puis cliquez sur Importer sélectionnés.

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

-
Cliquez sur
en haut à droite pour déployer le nouveau flux.
Paquets uplink
Processus de mappage automatique
Le mappage des données des capteurs LoRaWAN en objets BACnet est entièrement automatisé, sans action manuelle de l'utilisateur, sauf si des adaptations personnalisées sont nécessaires comme expliqué dans Personnalisation.
Les étapes suivantes sont déclenchées automatiquement par le flux BACnet intégré :
- Recevoir des paquets uplink des capteurs LoRaWAN et décoder le payload hexadécimal avec le driver approprié.
- Traiter les payloads décodés et convertir chaque propriété sélectionnée en un seul objet BACnet.
- Exposer les objets BACnet à un serveur BACnet intégré.
Le flux suit ces étapes :

Les messages uplink entrants sont extraits du /uplink-topic.
Tous les messages sont injectés dans le nœud bacnet-adapter qui analyse les rapports de trame uplink (DevEUI_uplink); puis, en fonction de sa configuration de mappage d'objets, exécute les tâches suivantes :
- Extraire éventuellement les métadonnées du paquet uplink : RSSI, SNR, FCntUp, SpFact (le spreading factor)
- Extraire toutes les propriétés du champ payload (payload décodé standard)
- Extraire éventuellement toutes les propriétés du champ points (pour les drivers qui supportent '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"
}
}
Quand 2 propriétés portent le même nom, la valeur provenant de l'étage supérieur remplace la valeur précédente.
Dans l'exemple ci-dessus, 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 nouveau 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 qui contient 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'instance0. - La propriété suivante 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 'boolean', qui sont mappées à un objet BACnet de type
Valeur Binaire (BV), avec des numéros d'instance commençant par0. - Les valeurs 'String' suivent le même schéma, attribuées à un objet de type
Valeur String (SV), en commençant également par un numéro d'instance0.
Vous pouvez personnaliser ce mappage conditionné/défaut afin de fixer le numéro d'instance d'une propriété. Pour plus d'informations, consultez Personnalisation du mappage.
Personnalisation
Le nœud bacnet-adapter dispose de sa propre configuration, qui peut être personnalisée en double-cliquant dessus.
Il présente 2 onglets, l'un pour la configuration du serveur BACnet, et l'autre concerne la modification de la cartographie d'objets.
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 réglages 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. Cela doit être aussi strict que possible. Utilisez 255.255.255.255 si incertain.
- ID du capteur : par défaut, c'est 817001.
- Nom du capteur : par défaut, c'est 'BACnet Adapter'.
- ID de vendeur : par défaut est 0. Utilisez votre ID de vendeur si vous en avez un.
- Nom du vendeur : par défaut est vide. Utilisez votre nom de vendeur si vous en avez un.
La configuration de la cartographie d'objets
Double-cliquez sur le nœud bacnet-adapter et allez sur l'onglet Cartographie d'objets pour personnaliser
n'importe lequel des réglages suivants :

- le nom de l'objet BACnet
- les métadonnées LoRaWAN que vous souhaitez exposer en objets BACnet
- l'exposition des propriétés d'ontologie
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 du nom de la propriété.
La propriété inclut le chemin sous payload, points, chaque partie est ajoutée en utilisant le séparateur deux-points :.
Vous pouvez modifier la définition de l'identifiant de l'objet pour utiliser le nom convivial du capteur ('choix Nom du capteur') plutôt que le DevEUI.
Métadonnées LoRaWAN
Vous pouvez modifier la configuration pour extraire également les métadonnées LoRaWAN et les exposer en 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 ontologique est supporté par des drivers spécifiques, qui assurent une standardisation uniforme des propriétés afin qu'une mesure particulière (par exemple, la température) soit mappée sur un nom de propriété standardisé (par exemple, 'temperature'). 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 capteurs, voir Drivers/ontologies supportés.
L'ontologie est désactivée par défaut, vous pouvez l'activer en utilisant la case à cocher.
Personnalisation du mappage
Comme indiqué ci-dessus, le mappage LoRaWAN vers BACnet est entièrement automatisé par défaut. Vous pouvez changer ce mappage conditionné afin de fixer le numéro d'instance d'une propriété et garantir que cette propriété soit toujours exposée à un numéro d'instance fixe.
Pour ce faire, suivez les étapes ci-dessous :
-
Exporte votre liste actuelle d'objets vers un fichier csv.
-
Modifiez l'association des numéros d'instance dans le 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 d'interstices dans le schéma de numérotation.
- Ne changez pas le
typepour une propriété spécifique. - Créez de nouvelles entrées pour les propriétés de périphériques futures qui ne sont pas encore exposées.
- Laissez la ligne d'en-tête telle quelle, n'ajoutez pas de colonnes.
- Commencez la numérotation des instances à partir de 0 pour chaque
-
Importez ce fichier csv personnalisé sur le serveur.
-> Votre nouveau mappage sera alors disponible instantanément.
Exporter la liste d'objets
- Cliquez sur le bouton
Exporter la liste d'objets. Si vous souhaitez ajouter la valeur actuelle de chaque propriété dans votre fichier d'exportation, cochez l'optionInclure les valeurs des objets.
-
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 String
- 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 de fichier d'import est identique au format d'export (la valeur et l'unité ne sont pas prises en compte lors de l'import).
- Cliquez sur
et sélectionnez le fichier CSV sur votre ordinateur.
- Appuyez sur 'OK' dans le message d'alerte.
- Vérifier l'état de l'importation
En cas d'erreur, vous obtenez la liste des points à corriger, comme illustré par l'exemple suivant :
Effacer la liste d'objets
Suivez ces étapes pour vider la liste complète des objets :
- Cliquez sur
- Appuyez sur 'OK' dans le message d'alerte

- Vérifiez l'état
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 YABE (Yet Another BACnet Explorer) pour visualiser et interagir avec les objets BACnet :
Exemple d'un message uplink correspondant à un DevEUI_uplink, avec la 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 :

Paquets Downlink
Cette section décrit comment utiliser BACnet pour envoyer des paquets de downlink.
Description du processus
Contrairement aux messages uplink, le traitement des messages de downlink n'est pas automatique, il nécessite des adaptations manuelles comme décrit dans Utilisation et adaptations.
Les étapes du processus sont :
-
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 effectuée par l'utilisateur.
-
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.
-
Ensuite, le message de downlink doit être envoyé au capteur LoRaWAN
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'endpoint, et pour ceux qui nécessitent un downlink, elle génère un message 'DevEUI_downlink'
et l'envoie dans la file de downlink du capteur.
Utilisation et adaptations
Utilisez 'Créer un point de terminaison' pour créer un point de terminaison pour le downlink. Dans l'échantillon, nous souhaitons 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 de terminaison avec la valeur initiale 'STOP_SOS'
- Identifiant de l'objet : 20635F0106000244:message
- Valeur actuelle : STOP_SOS

Lorsque le bouton 'Créer un point de terminaison' est pressé, le nouvel objet est créé / mis à jour sur le serveur BACnet.

Lorsque la valeur présente '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 downlink à votre capteur. Cela requiert :
- Connaissances en développement JavaScript (niveau de base).
- Connaissance de la spécification du format de downlink pour chaque modèle de capteur.
