Konfiguration des Gateway

Lesedauer: 5min Veröffentlicht am: November 6, 2023. Der Autor des Beitrages ist Maximilian Backenstos.
Inhalte auf dieser Seite
Primary Item (H2)Sub Item 1 (H3)

Aufbau Gateway Kommunikation

Das Gateway fungiert als Bindeglied zwischen einer Datenquelle (z.B. einer Steuerung) und der smartPLAZA. Das Gateway kommuniziert mit der Datenquelle, ruft die eingestellten Daten selbständig ab, transformiert diese und sendet die Daten an die smartPLAZA. Das Gateway kann auf dem gleichen Server wie die smartPLAZA installiert sein oder auf einem anderen Server laufen. Falls keine Verbindung zur smartPLAZA aufgebaut werden kann, puffert das Gateway die Daten lokal, bis sie weitergeleitet werden können.

Das Gateway kann in Windows-, Linux- und Docker-Umgebungen betrieben werden.

Konfigurationsdatei

Die Konfiguration für alle Datenquellen ist in der Datei config.json hinterlegt. Die Datenquellen sind als JSON-Objekte mit den folgenden Parametern gelistet:

  • bucket: Ziel-Bucket in der Store-API (z.B. "Temperaturdaten"), hieraus kann in der smartPLAZA eine Tabelle erstellt werden
  • writeKey: Schreibschlüssel für den angegebenen Bucket
  • source: csv, excel, odbc, opcua, mqtt, http, modbus
  • params: Weitere Parameter je nach Art der Datenquelle
  • server: Optional. Server, auf dem die Store-API gehostet wird (Default ist api.datenberg.eu, nur bei eigenem Serverhosting anpassen)

Beispielkonfigurationsdatei

Die folgende Beispielkonfiguration schreibt in eine Tabelle "Anlage2". Der Schreibschlüssel ist bekannt und die Daten werden von einer OPC UA Quelle geholt. Die Daten werden an den DatenBerg Cloud Service gesendet. Die Parameter der OPC UA Quelle sind im Abschnitt "OPC UA" näher definiert.

 "bucket": "Anlage2",
        "writeKey": "1111111",
        "source": "opcua",
        "params": {}

Parameter für CSV und Excel

Folgende Parameter müssen für eine CSV- bzw. Excel-Datei definiert werden:

  • file: Die zu überwachende Datei
  • monitoring: Art der Überwachung

Mögliche Werte für "monitoring":

  • changes: Jede Zeile übertragen, die neu ist oder in der eine Änderung festgestellt wurde.
  • rowNumber: Zeilen basierend auf ihrer Zeilennummer genau einmal übertragen.
  • lastValue: Eine Spalte überwachen und Zeilen übertragen, wenn sie nach dem letzten bekannten Wert eingefügt wurden. Als Parameter muss hier eine column als zu überwachende Spalte angegeben werden.

OPC UA

Eine OPC UA Datenquelle wird über einen OPC Verbindungsstring angesprochen. Das Gateway funktioniert dabei als Client, um Daten von einem OPC UA Server abzurufen. In der Antwort werden dann die einzelnen angefragten Datenpunkte übertragen.

Parametrisierung OPC UA

Die allgemeinen Parameter sind wie folgt zu definieren:

  • servers: Liste von OPC-Servern
  • Pro Server:
    • connection: OPC-Verbindungsstring
    • data: Liste der aufzuzeichnenden Variablen als OPC UA-Pfad
    • labels: Liste der zugehörigen Variablennamen (optional)
    • monitoring: Art der Überwachung

Optional können die folgenden Parameter mit übergeben werden:

  • user: Benutzername
  • password: Passwort
  • useCertificate: true, falls ein Zertifikat zur Anmeldung verwendet werden soll
  • ignore: Liste von Fällen, bei deren Auftreten die aktuelle Zeile ignoriert werden soll

Für das Monitoring können folgende Parameter definiert werden:

  • changes: Überträgt alle Variablen bei jeder Änderung.
  • value: Überwacht eine Variable auf Änderung und überträgt wahlweise den Stand aller Variablen unmittelbar vor oder nach der Änderung.
    Parameter:
    • variable: die zu überwachende Variable
    • trigger: before, after
  • timer: Übertragt alle Variablen nach einem regelmäßigen Zeitplan.
    Parameter: interval: Intervall des Timers in Sekunden

Optionen für "ignore":

  • variable: Zu überwachende Variable
  • value: Wert, bei dem die aktuelle Zeile ignoriert wird

Beispiel für einen zyklischen OPC UA Abruf

Im folgenden Beispiel werden Daten von einer Siemens S7-Steuerung mit der IP-Adresse 10.255.112.113 übertragen. Die Abfrage erfolgt alle 5 Sekunden über den Port 4840. Dabei werden zwei OPC UA Variablen (z.B. ns=4, i=4) übertragen. Die Variablennamen werden direkt über ein Label übergeben. Auch wenn kein Benutzer für die Authentifizierung benötigt wird, muss ein leerer Benutzer mit leerem Passwort übergeben werden.

 {"bucket": "Anlage2",
        "writeKey": "123456",
        "source": "opcua","params": {
            "monitoring": "timer",
            "interval": 5,
            "servers": [
                {
                    "connection": "opc.tcp://10.255.112.113:4840",
                    "data": [
                        "ns=4;i=4",
                        "ns=4;i=6"
                    ],
                    "labels": [
                        "Temperatur 1",
                        "Druck"
                    ],
                    "user": "",
                    "password": ""
                }
            ]
        }
    },

MQTT

Der Datenaustausch mit MQTT erfolgt über einen zentralen MQTT Broker, an den ein Gerät Daten sendet und der diese an Empfänger weiterleitet. Das Gateway " subscribed " sich auf ein zu definierendes Topic und leitet alle empfangenen Daten an die smartPLAZA weiter. In diesem Blogbeitrag gehen wir näher auf die Funktionsweise von MQTT ein.

Parametrisierung MQTT

Für den Empfang von Daten via MQTT müssen folgende Parameter definiert werden:

  • host: Adresse des MQTT-Servers
  • port: Port des MQTT-Servers
  • topic: Zu überwachendes Topic oder Topics
  • type: Payload-Format
    Mögliche Werte für "type":
    • text: Zeichnet den gesamten Text der Payload in ein Feld auf.
    • json: Interpretiert die Payload als JSON und erzeugt ein Feld für jeden Eintrag.
    • Optionale Parameter:
      transformation: Plugin (Python-Datei), das die Payload transformiert, muss im im Ordner Plugins vorliegen

Optional können diese Parameter definiert werden:

  • user: Benutzername zur Anmeldung
  • password: Entsprechendes Passwort

Beispielkonfiguration MQTT

Im folgenden Beispiel wird eine Verbindung zu einem MQTT Broker mit der IP-Adresse 10.123.45.20 auf Port 1883 hergestellt. Es werden alle Daten empfangen die auf dem auf Untertopics des Topic "Data" kommuniziert werden. Die Daten werden bereits als JSON versendet und können direkt weitergeleitet werden.

[
    {
        "bucket": "mqtt_daten",
        "writeKey": "123456789",
        "source": "mqtt",
        "params": {
            "host": "10.123.45.20",
            "port": 1883,
            "topic": "Data/#",
            "type": "json"

        }

    }
]

HTTP

Für den Abruf von Daten via HTTP müssen folgende Parameter definiert werden:

  • url: Abzurufende URL
  • monitoring: Art der Überwachung

Optional können diese Parameter definiert werden:

  • interval: Abrufintervall in Sekunden
  • transformation: Plugin, das die abgerufenen Daten transformiert

Mögliche Werte für "monitoring:

  • changes: Überträgt alle Variablen bei jeder Änderung.
  • timer: Übertragt alle Variablen nach einem regelmäßigen Zeitplan.
    Parameter: interval: Intervall des Timers in Sekunden

Modbus

Bei der Modbus-Kommunikation fordert ein Modbus-Client Daten von einem Modbus-Master an. In der Antwort überträgt der Master die aktuellen Prozesswerte. Das Gateway fungiert als Client, der die Verbindung zu einem Master herstellt. In diesem Blogbeitrag finden Sie ausführliche Informationen zum Modbus-Protokoll.

Parametrisierung Modbus

Die Konfiguration legt fest, welche Daten von welchen Adressen des Modbus-Masters abgefragt und in eine Tabelle geschrieben werden sollen. Für den Datenempfang über Modbus müssen folgende Konfigurationsparameter definiert werden:

  • server: Die IP-Adresse des Modbus-Master, mit dem kommuniziert wird.
  • interval: Das Zeitintervall in Sekunden zwischen aufeinanderfolgenden Modbus-Anfragen.
  • variables: Eine Liste von Modbus-Variablen, die überwacht werden sollen.
    • id: Ein eindeutiger Bezeichner für die Variable. Kann frei festgelegt werden.
    • type: Der Datentyp der Variable:
      • decimal: Dieser Typ wird für dezimale Zahlen verwendet. Zum Beispiel könnte er für Variablen wie Temperaturen, Druckwerte oder Laufzeiten geeignet sein.
      • integer: Wenn man mit ganzzahligen Werten arbeitet, kann man den Datentyp "integer" verwenden. Dies könnte für Zähler, Zählungen oder andere ganzzahlige Werte relevant sein.
      • map: Der Typ "map" wird verwendet, wenn eine Variable verschiedene Zustände oder Statuswerte annehmen kann. Dazu ist eine Zuordnung der Werte zu Bedeutungen erforderlich (siehe unten).
    • address: Die MODBUS-Adresse(n) der Variable.
    • map (nur für "id"s vom Typ "map"): Dieser Abschnitt enthält eine Zuordnung von Werten zu Bedeutungen.
      • Schlüssel: Dies ist der Wert, den die überwachte Variable annehmen kann. Zum Beispiel 1,2 oder 3.
      • Wert: Dies ist die Bedeutung oder der Status, der diesem Schlüssel zugeordnet ist. Zum Beispiel bedeutet der Schlüssel "1" übersetzt "Anlage ein".

Beispielkonfiguration für Modbus

Im folgenden Beispiel werden von einem Kompressor mit der IP-Adresse 10.123.9.11 verschiedene Parameter über Modbus abgefragt. Aus der Modbusbeschreibung geht hervor, dass unter der Adresse 54 die Gesamtstunden, unter der Adresse 57 der Netzsolldruck und unter der Adresse 32 Fehlermeldungen abgerufen werden können. Die Fehlermeldungen sind codiert und können in menschenlesbaren Text übersetzt werden. Im Beispiel werden diese Anforderungen in eine Beispielkonfiguration übersetzt.

{
        "bucket": "Modbus",
        "server": "http://localhost",
        "writeKey": "12345678",
        "source": "modbus",
        "params": {
            "server": "10.123.9.11",
            "interval": 5,
            "variables": [
                {
                    "id": "Gesamtstunden",
                    "type": "decimal",
                    "address": 53
                },
                {
                    "id": "Netzsolldruck",
                    "type": "sint16",
                    "address": 57
                },
                {
                    "id": "Betriebsmeldungen",
                    "address": [
                        32
                    ],
                    "type": "map",
                    "map": {
                        "32": {
                            "0": "Externe Meldung 1",
                            "1": "Externe Meldung 2"                            
                        }
                    }
                },

Sie benötigen weitere Hilfe?
Gerne unterstützen wir Sie bei weiteren Fragen zum Thema. Kontaktieren Sie uns hier.