Passer au contenu principal

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 :

  1. Cliquez sur en haut à droite, puis sélectionnez Importer.

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

  3. Cliquez sur le bouton Importer.

  4. Sur le message d'avertissement entrant, cliquez sur Voir les nœuds....

  5. 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 :

  6. Cliquez sur en haut à droite pour déployer le nouveau flux.

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 :

  1. Extraire éventuellement les métadonnées du paquet uplink : RSSI, SNR, FCntUp, SpFact (le spreading factor)
  2. Extraire toutes les propriétés du champ payload (payload décodé standard)
  3. 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"
}
}
note

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'instance 0.
  • 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 par 0.
  • 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'instance 0.

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 :

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 :

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

  2. 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 type pour 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.
  3. Importez ce fichier csv personnalisé sur le serveur.

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

Exporter la liste d'objets
  1. 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'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 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).

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

  1. 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 :

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

  1. 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 :

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 :

  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 effectué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 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.