Utilisation du protocole Modbus
À partir de la version 2.1.0 de TAO, un flux Modbus est fourni dans Node-RED. Il permet aux capteurs LoRaWAN d'exposer les data à l'intérieur d'un serveur esclave Modbus intégré. Ce serveur est disponible sur le port tcp standard 10502.
Le flux nécessite que tous les uplink soient publiés dans le sujet MQTT interne /uplink-topic
.
C'est le cas avec le flux par défaut 'UPLINK / DOWNLINK' fourni lors de l'installation.
Chargement du flux ModBus
Cette tâche est uniquement pertinente pour les versions 2.1.x de ThingPark.
Pour ThingPark 2.2.0 et versions suivantes, le flux Modbus est directement chargé lorsque vous activez le flux de données Modbus dans l'interface utilisateur de TAO.
Pour connaître la version de votre serveur ThingPark Enterprise All-in-one, survolez avec votre souris le logo en haut à gauche de l'interface utilisateur.
Ne rechargez pas le flux Modbus si vous avez déjà un onglet "Modbus" affiché dans Node-RED.
Depuis l'éditeur de flux Node-RED :
-
Cliquez sur
en haut à droite, puis sélectionnez Import.
-
Sélectionnez Actility library -> flows -> ModBus.json
-
Cliquez sur le bouton Import
- Dans le message d'avertissement entrant, cliquez sur Voir les nœuds....
- Dans la fenêtre "Importer les nœuds", assurez-vous que tout sauf "local-mqtt" est coché, puis cliquez sur Importer la sélection.
-> l'onglet "Exemple de flux Modbus" a été ajouté dans l'éditeur :
- Cliquez sur
en haut à droite pour déployer le nouveau flux. Pour en savoir plus, voir Déploiement Node-RED.
Paquets Uplink
Processus
Les étapes du processus sont décrites ci-après. Seule la première étape nécessite une configuration manuelle, les autres étapes sont exécutées automatiquement par TAO.
- Définir un tableau de correspondance qui spécifie, pour chaque capteur LoRaWAN, quelle propriété doit être extraite, quel algorithme d'encodage doit être appliqué et à quel emplacement elle doit être écrite sur le tableau de registres de maintien Modbus.
Ceci est une étape manuelle, décrite en détail dans la section Correspondance Modbus ci-dessous.
-
Recevoir les messages uplink des capteurs LoRaWAN et décoder le payload hexadécimal avec le driver approprié (le cas échéant).
-
Traiter le payload décodé et convertir chaque propriété sélectionnée en valeurs Modbus (en utilisant le tableau de correspondance).
-
Exposer chaque valeur à un serveur Modbus interne.
Le flux suit ces étapes :
Le message uplink est extrait du '/uplink-topic' du serveur MQTT interne (nœud d'entrée MQTT).
Tous les messages sont injectés dans la fonction 'Vérification DevEUI_uplink, puis aplatissement de l'objet' qui analyse le DevEUI_uplink
et fournit la conversion des propriétés de noms d'attributs.
Le message est ensuite transmis à la fonction 'Correspondance Modbus' suivie de la fonction 'Conversion du protocole Modbus' qui injecte les opérations d'écriture Modbus dans le nœud 'Modbus Flex Write'. Toutes les opérations d'écriture ciblent le 'serveur Modbus TAO' interne.
Personnalisation
Serveur Modbus
Dans le flux ModBus, double-cliquez sur le nœud serveur Modbus TAO (5000 registres)
pour modifier ses paramètres :
Le serveur Modbus est configuré pour écouter sur le port TCP 10502, vous pouvez le changer pour le port 11502.
Cartographie Modbus
Pour définir la cartographie, vous devez télécharger le fichier 'modbus-definition.csv'.
-
Si vous utilisez la version TAO 2.1.x :
- Vous devez télécharger ce fichier dans le dossier DATA de Node-Red. Pour en savoir plus sur comment télécharger votre fichier, consultez Uploading a file to the Node-RED data folder.
- Un échantillon est donné ici.
-
Si vous utilisez la version TAO 2.2.0 et suivantes : utilisez l'interface utilisateur TAO comme décrit dans Setting up the Modbus dataflow.
Pour chaque propriété que vous souhaitez extraire du message uplink, vous devez fournir un objet composé des champs suivants :
- DevEUI est le DevEUI du Capteur LoRaWAN.
- Attribut fait référence au nom de la propriété tel qu'extrait de l'Uplink LoRaWAN. Voir ci-dessous pour en savoir plus sur la définition d'un attribut pour chaque propriété mesurée.
- SaisirType: l'opération Modbus à appliquer. Voir ci-dessous pour en savoir plus sur les types pris en charge.
- adresse : numéro d'emplacement du registre modbus.
Comment définir les attributs ?
Chaque propriété - que vous devez mapper à un objet Modbus - doit être associée à un attribut pertinent dans votre fichier de cartographie csv.
Pour ce faire, vous devez d'abord découvrir les différentes propriétés rapportées par vos Capteurs LoRaWAN dans les Uplinks Payloads.
Vous pouvez utiliser un client MQTT, tel que MQTTX ou mosquitto_sub, pour récupérer les paquets Uplink rapportés par vos capteurs et découvrir quelles propriétés sont incluses dans leurs Payloads.
Prenons l'exemple suivant d'un Capteur rapportant le paquet Uplink suivant :
{
"DevEUI_uplink": {
"Time": "2024-09-24T13:51:10.920+00:00",
"DevEUI": "20635F0106000244",
"FPort": 17,
"FCntUp": 101,
"LrrSNR": 5.5,
...
"LrrRSSI": -30.6,
...
"payload": {
"messageType": "HEARTBEAT",
"trackingMode": "PERMANENT_TRACKING",
"batteryVoltage": 4.05,
"levels": {
"power": 3,
"state": "on"
}
},
"points": {
"temperature": {
"unitId": "Cel",
"record": 28.3
},
...
}
}
}
-> Nous avons reçu un DevEUI_uplink
avec :
LrrSNR
= 5,5 dBLrrRSSI
= -30,6 dBmbatteryVoltage
= 4,05 Vpower
= 3temperature
= 28,3°C
Si vous souhaitez exporter les métadonnées LoRaWAN, telles que le compteur de trames Uplink (FCntUp), le RSSI ou le SNR de l'Uplink,
l'attribut correspondant doit utiliser exactement le même nom que les métadonnées LoRaWAN, c'est-à-dire FCntUp
, LrrSNR
, LrrRSSI
...
Sous payload
et/ou points
, l'attribut correspondant à chaque propriété doit utiliser le nom de la propriété.
Par exemple, trackingMode
, batteryVoltage
...
Utilisez le soulignement _
pour représenter les sous-niveaux : par exemple, levels_power
, temperature_record
.
SaisirDataTypes pris en charge
- float : l'opération modbus est FC 16, écriture de 2 registres : 4 octets.
- int: l'opération modbus est FC 16, écrire 1 registre : 2 octets.
- uint ou uint32: l'opération modbus est FC 16, écrire 2 registres : 4 octets.
- hex: l'opération modbus est FC 16, écrire n registres : n*2 octets, (pour "0A0B0C", il consommera 2 registres, le premier contenant 0A0B, le second contenant 000C).
Fonction d'extraction
Si vous souhaitez prendre en charge d'autres types de données, ou convertir le payload décodé en l'un des types de données répertoriés ci-dessus, contactez votre équipe de support.
Visualisation
Une fois le flux en fonctionnement, chaque donnée extraite de vos capteurs LoRaWAN est exposée sous forme de valeurs modbus dans les registres de maintien.
Vous pouvez utiliser un outil comme Modbus Doctor pour visualiser le contenu :
-
Payload entrant (extrait) :
{
"DevEUI_uplink": {
"Time": "2024-09-24T13:51:10.920+00:00",
"DevEUI": "20635F0106000244",
"FPort": 17,
"FCntUp": 101,
"LrrSNR": 5.5,
...
"LrrRSSI": -30.6,
...
"payload": {
"messageType": "HEARTBEAT",
"trackingMode": "PERMANENT_TRACKING",
"batteryVoltage": 4.05,
"levels": {
"power": 3,
"state": "on"
}
},
"points": {
"temperature": {
"unitId": "Cel",
"record": 28.3
},
...
}
}
} -
Nous avons le mappage suivant :
{
"DevEUI": "20635F0106000244",
"Attribute": "LrrRSSI",
"DataType": "int",
"address": 0
},
{
"DevEUI": "20635F0106000244",
"Attribute": "FCntUp",
"DataType": "Uint32",
"address": 1
},
{
"DevEUI": "20635F0106000244",
"Attribute": "batteryVoltage",
"DataType": "float",
"address": 3
},
{
"DevEUI": "20635F0106000244",
"Attribute": "temperature_record",
"DataType": "float",
"address": 5
} -
La visualisation correspondante pour :
-
Le
LrrRSSI
: registre 0, longueur 1, mode décimal, mot de 16 bits : -
Le
FCntUp
: registre 1, longueur 2, mode décimal, mot de 16 bits : -
La
batteryVoltage
: registre 3, longueur 2, mode décimal, flottant de 32 bits :
-
Dashboard
Un dashboard est disponible à l'url standard http://<box ip>:1323/node-red/ui
, il résume les dernières entrées.
Packages de downlink
Les Downlinks via modbus ne sont pas actuellement implémentés. Cependant, vous pouvez toujours envoyer des messages de downlink via le topic downlink MQTT, comme décrit dans utilisation MQTT.