Daten als HTTP-Server verarbeiten

Daten als HTTP-Server verarbeiten

In diesem Artikel zeigen wir, wie Daten mit Hilfe des HTTP Protokolls vom Gateway empfangen werden können. Hierfür konfigurieren wir das connect-Gateway als HTTP-Server, der eine REST-Schnittstelle bereitstellt.

Das connect-Gateway bietet eine Vielzahl an Protokollen an, die die Kommunikation mit fast allen Arten von Endgeräten wie Maschinen, Datenbanken, IT Systeme oder Cloud-Plattformen ermöglicht. Dabei ist HTTP ein häufig verwendetes Protokoll zur Datenübertragung.

Um dies optimal zu unterstützen, können Daten aus Anfragen an eine frei konfigurierbare REST-Schnittstelle im connect-Gateway verarbeitet werden. Hierdurch können wir eine große Bandbreite an Systemen an das connect-Gateway andocken.

Konfiguration als HTTP-Server

Wir erfassen die Daten, mit Hilfe des HTTP_SERVER Plugins. Hierbei gehen wir davon aus, dass die Daten im Beispiel von einer industriellen Fräsmaschine an das connect-Gateway gesendet werden.

Dabei liefert die Maschine ihre Maschinendaten im JSON-Format. Diese Daten dekodieren wir mit Hilfe des JSON_DECODERS und legen sie in Datenpunkten ab.

Datenpunkte festlegen

Im ersten Schritt definieren wir die Datenpunkte. Unsere Maschine meldet uns eine Spindellaufzeit und die Maschinenlaufzeit, so dass wir zwei Datenpunkte anlegen. Für jeden Datapoint legen wir den Path und den Type fest.

<datapoints>
    <datapoint>
        <path>/spindellaufzeit</path>
        <type>integer</type>
    </datapoint>
    <datapoint>
        <path>/maschinenlaufzeit</path>
        <type>integer</type>
    </datapoint>
</datapoints>

Endpoint

Als nächstes definieren wir einen Endpoint, an den die Maschine ihre Daten senden kann.

<endpoint>
    <name>Maschine_1</name>  

Für diesen Endpoint verwenden wir das HTTP_SERVER Plugin. Damit die Verbindung über HTTP aufgebaut werden kann, konfigurieren wir die connection_method als HTTP den TCP-Port.

    <protocol plugin="HTTP_SERVER">
        <name>Http_server</name>
        <parameters>
            <param key="connection_method">HTTP</param>
            <param key="port">8833</param>
        </parameters>        

Im nächsten Schritt legen wir einen passiven Trigger an. Durch diesen lauscht das Gateway nun kontinuierlich auf neue Daten. Bein Eingang neuer Werte werden diese direkt vom Gateway verarbeitet und die beiden Datenpunkte aktualisiert.

        <trigger>
            <passive>
        </trigger>

Producer

Im abschließenden Schritt konfigurieren wir den Daten-Produzenten.

        <producer>
            <name>http_producer_1</name>  

Über die Parameter httpmethod und path definieren wir die URL der REST-Anfrage. Und der Parameter payload gibt an, aus welchem Teil des HTTP-Requests die Payload extrahiert wird.

            <parameters>
                <param key="path">/machine_1</param>
                <param key="httpmethod">GET</param>
                <param key="payload">BODY</param>
            </parameters>           

Die HTTP Anfrage liefert ein JSON-Dokument, welches wie folgt aufgebaut ist:

{
  "machine_1_uptime": 120,
  "spindle_1_time": 100,
  "axis_position_x": 37.22,
  "axis_position_y": 69.37,
}

Anschließend legen wir den JSON – Decoder an, der die gewünschten Daten aus dem JSON-Dokument extrahiert.

             <decoder plugin="JSON_DECODER">
                <parameters />

Innerhalb des Decoders folgt nun die Definition des Mappings. Dort legen wir fest, welche JSON-Attribute extrahiert und dekodiert werden, um dann in die entsprechenden Datenpunkte abgelegt zu werden.

                 <mapping>
                    <datapoint>/spindellaufzeit</datapoint>
                    <parameters>
                        <param key="path">spindle_1_time</param>
                    </parameters
                </mapping> 
                <mapping>
                    <datapoint>/maschinenlaufzeit</datapoint>
                    <parameters>
                        <param key="path">machine_1_uptime</param>
                    </parameters>
                </mapping> 

Aus dem Pfad spindle_1_time im JSON-Dokument wird der aktuelle Wert ausgelesen und in den Datenpunkt /spindellaufzeit geschrieben. Außerdem wird der Wert von machine_1_uptime aus dem JSON-Dokument nach /maschinenlaufzeit geschrieben.

Ergebnis

Mit dieser Konfiguration lässt sich eine beliebige Anzahl von unterschiedlichen Daten aus der Maschine auslesen und für die Weiterverarbeitung aufbereiten. So bekommen wir abhängig vom Endgerät viele, unterschiedliche Maschinendaten geliefert.

Aufgrund der hohen Flexibilität haben wie die Möglichkeit, ausschließlich die Attribute auszuwählen, welche für uns von Interesse sind.