Zum Hauptinhalt springen
Version: TAO v2.x

Verwendung des Modbus-Protokolls

Ab TAO Version 2.1.0 wird in Node-Red ein Modbus-Flow bereitgestellt. Damit können LoRaWAN-Sensoren data in einem integrierten Modbus-Slave-Server bereitstellen. Dieser Server ist auf dem Standard-TCP-Port 10502 verfügbar.

Der Flow erfordert, dass alle uplinks im internen MQTT-Topic /uplink-topic veröffentlicht werden. Dies ist bei dem standardmäßigen „UPLINK / DOWNLINK“-Flow der Fall, der während der Installation bereitgestellt wird.

Ablauf

Die Prozessschritte sind nachfolgend beschrieben. Nur der erste Schritt erfordert eine manuelle Konfiguration, die anderen Schritte werden automatisch von TAO ausgeführt.

  1. Definieren Sie eine Zuordnungstabelle, die für jeden LoRaWAN-Sensor angibt, welche Eigenschaft extrahiert werden soll, welcher Codierungsalgorithmus angewendet werden muss und an welcher Stelle sie im Modbus-Holding-Register-Array geschrieben werden muss.

    Dies ist ein manueller Schritt, der weiter unten im Abschnitt Modbus-Mapping ausführlich beschrieben wird.

  2. Empfangen Sie uplink-Nachrichten von LoRaWAN-Sensoren und dekodieren Sie den hexadezimalen payload mit dem entsprechenden driver (falls vorhanden).

  3. Verarbeiten Sie den dekodierten payload und konvertieren Sie jede ausgewählte Eigenschaft in Modbus-Werte (unter Verwendung der Zuordnungstabelle).

  4. Stellen Sie jeden Wert in einem internen Modbus-Server bereit.

Der Flow folgt diesen Schritten:

Die uplink-Nachricht wird aus dem „/uplink-topic“ des internen MQTT-Servers extrahiert (MQTT-Eingabeknoten). Alle Nachrichten werden in die Funktion „Check DevEUI_uplink, then flatten object“ eingespeist, die den DevEUI_uplink parst und die Attributnamen-Eigenschaftskonvertierung bereitstellt.

Die Nachricht wird dann an die Funktion „Modbus mapping“ und anschließend an die Funktion „Modbus Protocol Conversion“ übergeben, die Modbus-Schreiboperationen in den Knoten „Modbus Flex Write“ einspeist. Alle Schreiboperationen richten sich an den internen „TAO Modbus server“.

Anpassung

Modbus-Server

Doppelklicken Sie im ModBus-Flow auf den Knoten TAO Modbus server (5000 registers), um seine Einstellungen zu ändern:

Der Modbus-Server ist so konfiguriert, dass er auf TCP-Port 10502 lauscht; Sie können ihn auf Port 11502 ändern.

Modbus-Mapping

Um das Mapping zu definieren, müssen Sie die Datei „modbus-definition.csv“ hochladen.

  • Wenn Sie TAO Version 2.1.x verwenden:

  • Wenn Sie TAO Version 2.2.0 oder höher verwenden: Nutzen Sie die TAO-Benutzeroberfläche wie beschrieben in Setting up the Modbus dataflow.

Für jede Eigenschaft, die Sie aus der uplink-Nachricht extrahieren möchten, müssen Sie ein Objekt angeben, das aus den folgenden Feldern besteht:

  • DevEUI ist die DevEUI des LoRaWAN-Sensors.
  • Attribute bezieht sich auf den Eigenschaftsnamen, wie er aus dem LoRaWAN-uplink extrahiert wird. Siehe unten, um mehr darüber zu erfahren, wie Sie ein Attribut für jede gemessene Eigenschaft festlegen.
  • DataType: die anzuwendende Modbus-Operation. Siehe unten, um mehr über die unterstützten Typen zu erfahren.
  • address: Position der Modbus-Registernummer.

Wie werden Attribute festgelegt?

Jede Eigenschaft, die Sie einem Modbus-Objekt zuordnen müssen, muss in Ihrer CSV-Mapping-Datei einem geeigneten Attribut zugewiesen werden.

Dazu müssen Sie zunächst die verschiedenen Eigenschaften ermitteln, die von Ihren LoRaWAN-Geräten in den uplink-payloads gemeldet werden.

Tipp

Sie können einen MQTT-Client wie MQTTX oder mosquitto_sub verwenden, um die von Ihren Geräten gemeldeten uplink-Pakete abzurufen und herauszufinden, welche Eigenschaften in ihren payloads enthalten sind.

Nehmen wir das folgende Beispiel eines Geräts, das das folgende uplink-Paket meldet:

{
"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
},
...
}
}
}

-> Wir haben einen DevEUI_uplink empfangen mit:

  • LrrSNR = 5,5 dB
  • LrrRSSI = -30,6 dBm
  • batteryVoltage = 4,05 V
  • power = 3
  • temperature = 28,3 °C

Wenn Sie die LoRaWAN-Metadaten exportieren möchten, wie z. B. uplink-Frame-Counter (FCntUp), uplink-RSSI oder SNR, muss das entsprechende Attribut genau denselben Namen wie die LoRaWAN-Metadaten verwenden, also FCntUp, LrrSNR, LrrRSSI...

Unter payload und/oder points muss das Attribut, das jeder Eigenschaft entspricht, den Eigenschaftsnamen verwenden. Zum Beispiel trackingMode, batteryVoltage... Verwenden Sie einen Unterstrich _, um Unterebenen darzustellen: zum Beispiel levels_power, temperature_record.

Unterstützte DataTypes

  • float: Modbus-Operation ist FC 16, Schreiben von 2 Registern: 4 Bytes.
  • int: Modbus-Operation ist FC 16, Schreiben von 1 Register: 2 Bytes.
  • uint oder uint32: Modbus-Operation ist FC 16, Schreiben von 2 Registern: 4 Bytes.
  • hex: Modbus-Operation ist FC 16, Schreiben von n Registern: n*2 Bytes (für "0A0B0C" werden 2 Register verwendet, das erste enthält 0A0B, das zweite enthält 000C).

Extraktionsfunktion

Wenn Sie andere DataTypes unterstützen oder dekodierten payload in einen der oben aufgeführten DataTypes konvertieren möchten, wenden Sie sich an ihren Support.

Visualisierung

Sobald der Flow läuft, werden alle extrahierten data aus Ihren LoRaWAN-Sensoren als Modbus-Werte in den Holding-Registern bereitgestellt.

Sie können ein Tool wie Modbus Doctor verwenden, um den Inhalt zu visualisieren:

  • Eingehender payload (Ausschnitt):

    {
    "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
    },
    ...
    }
    }
    }
  • Wir haben das folgende Mapping:

    {
    "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
    }
  • Die entsprechende Visualisierung für:

    • LrrRSSI: Register 0, Länge 1, Modus Dezimal, 16-Bit-Wort:

    • FCntUp: Register 1, Länge 2, Modus Dezimal, 16-Bit-Wort:

    • batteryVoltage: Register 3, Länge 2, Modus Dezimal, 32-Bit-Float:

Dashboard

Ein dashboard ist unter der Standard-URL http://<box ip>:1323/node-red/ui verfügbar; es fasst die letzten Einträge zusammen.

Downlinks über Modbus sind derzeit nicht implementiert. Sie können jedoch weiterhin downlink-Nachrichten über das MQTT-downlink-topic senden, wie in MQTT usage beschrieben.